diff --git a/dsh-plugin-desktop-beta/src/profile-channel-admission.ts b/dsh-plugin-desktop-beta/src/profile-channel-admission.ts index ec43cecec6..f74d42eb18 100644 --- a/dsh-plugin-desktop-beta/src/profile-channel-admission.ts +++ b/dsh-plugin-desktop-beta/src/profile-channel-admission.ts @@ -127,7 +127,9 @@ export function inspectDesktopProfileChannelAdmission( const current = inspectDesktopReleaseProfileUsage(locations.current, profileDir, profileName) const other = inspectDesktopReleaseProfileUsage(locations.other, profileDir, profileName) if (other.status === 'invalid') { - return { status: 'warn', reason: 'uncertain' } + return current.status === 'valid' + ? { status: 'allow', reason: 'current-channel-latest' } + : { status: 'warn', reason: 'uncertain' } } if (current.status === 'invalid') { // A damaged record in this package alone is not evidence of a channel diff --git a/dsh-plugin-desktop-beta/tests/profile-channel-admission.spec.ts b/dsh-plugin-desktop-beta/tests/profile-channel-admission.spec.ts index 206ba9071c..aa7ca85131 100644 --- a/dsh-plugin-desktop-beta/tests/profile-channel-admission.spec.ts +++ b/dsh-plugin-desktop-beta/tests/profile-channel-admission.spec.ts @@ -163,12 +163,15 @@ describe('Desktop Profile release-channel admission', () => { .toMatchObject({ status: 'warn', reason: 'other-channel-latest' }) }) - it('warns without claiming an owner when evidence is damaged', () => { + it('warns for damaged evidence until the current release becomes healthy', () => { const target = fixture() const manifestPath = capture(target, target.locations.other, '2026-09-02T01:00:00.000Z') writeFileSync(manifestPath, '{broken') expect(inspectDesktopProfileChannelAdmission(target.locations, target.profile, 'work')) .toEqual({ status: 'warn', reason: 'uncertain' }) + capture(target, target.locations.current, '2026-09-02T01:00:01.000Z') + expect(inspectDesktopProfileChannelAdmission(target.locations, target.profile, 'work')) + .toEqual({ status: 'allow', reason: 'current-channel-latest' }) const currentOnly = fixture() const currentManifest = capture(currentOnly, currentOnly.locations.current, '2026-09-02T01:00:00.000Z') diff --git a/dsh-plugin-desktop/src/profile-channel-admission.ts b/dsh-plugin-desktop/src/profile-channel-admission.ts index ec43cecec6..f74d42eb18 100644 --- a/dsh-plugin-desktop/src/profile-channel-admission.ts +++ b/dsh-plugin-desktop/src/profile-channel-admission.ts @@ -127,7 +127,9 @@ export function inspectDesktopProfileChannelAdmission( const current = inspectDesktopReleaseProfileUsage(locations.current, profileDir, profileName) const other = inspectDesktopReleaseProfileUsage(locations.other, profileDir, profileName) if (other.status === 'invalid') { - return { status: 'warn', reason: 'uncertain' } + return current.status === 'valid' + ? { status: 'allow', reason: 'current-channel-latest' } + : { status: 'warn', reason: 'uncertain' } } if (current.status === 'invalid') { // A damaged record in this package alone is not evidence of a channel diff --git a/dsh-plugin-desktop/tests/profile-channel-admission.spec.ts b/dsh-plugin-desktop/tests/profile-channel-admission.spec.ts index 206ba9071c..aa7ca85131 100644 --- a/dsh-plugin-desktop/tests/profile-channel-admission.spec.ts +++ b/dsh-plugin-desktop/tests/profile-channel-admission.spec.ts @@ -163,12 +163,15 @@ describe('Desktop Profile release-channel admission', () => { .toMatchObject({ status: 'warn', reason: 'other-channel-latest' }) }) - it('warns without claiming an owner when evidence is damaged', () => { + it('warns for damaged evidence until the current release becomes healthy', () => { const target = fixture() const manifestPath = capture(target, target.locations.other, '2026-09-02T01:00:00.000Z') writeFileSync(manifestPath, '{broken') expect(inspectDesktopProfileChannelAdmission(target.locations, target.profile, 'work')) .toEqual({ status: 'warn', reason: 'uncertain' }) + capture(target, target.locations.current, '2026-09-02T01:00:01.000Z') + expect(inspectDesktopProfileChannelAdmission(target.locations, target.profile, 'work')) + .toEqual({ status: 'allow', reason: 'current-channel-latest' }) const currentOnly = fixture() const currentManifest = capture(currentOnly, currentOnly.locations.current, '2026-09-02T01:00:00.000Z')