Deferred non-blocking finding 3 from the triage of PR #1290, head 5b4ddde943b04e28759cf8d9fc3cae82b547f8ba.
Severity: low
Where: src/core/manifest.js:271-273 (validatePickerContributions, the contributes.picker platforms check).
Observed behavior. platforms validation accepts any non-empty array of non-empty strings. A third-party plugin author's typo ("macos", "Darwin", "win") validates cleanly and then withholds the row on every platform, with no error and no diagnostic pointing at the bad value.
Why deferral is safe. Verified on the head: this shape is settled by Accepted LLP 0368 #consequences in as many words ("validatePickerContributions rejects a platforms that is not a non-empty array of non-empty strings"), so tightening it is a design change needing a new LLP, not a review edit. It cannot affect any shipped row: the only bundled gate is @hypaware/claude-desktop's ["darwin"], pinned by test/core/claude-desktop-picker-platform.test.js:38. A manifest validation failure is fatal to the whole plugin, so a closed enum would turn a legitimate future process.platform value into a dead plugin, a worse failure than one vanished row the author sees immediately on their own machine. The residual cost is third-party authoring ergonomics only.
Acceptance condition. A platforms entry outside the known process.platform set produces a visible diagnostic without killing the plugin (for example a load-time or hyp status warning naming the manifest, the row, and the unrecognized value), a test pins the warning, and the loosened-vs-warned shape is recorded in a new LLP extending 0368.
Deferred non-blocking finding 3 from the triage of PR #1290, head
5b4ddde943b04e28759cf8d9fc3cae82b547f8ba.Severity: low
Where:
src/core/manifest.js:271-273(validatePickerContributions, thecontributes.pickerplatformscheck).Observed behavior.
platformsvalidation accepts any non-empty array of non-empty strings. A third-party plugin author's typo ("macos","Darwin","win") validates cleanly and then withholds the row on every platform, with no error and no diagnostic pointing at the bad value.Why deferral is safe. Verified on the head: this shape is settled by Accepted LLP 0368
#consequencesin as many words ("validatePickerContributionsrejects aplatformsthat is not a non-empty array of non-empty strings"), so tightening it is a design change needing a new LLP, not a review edit. It cannot affect any shipped row: the only bundled gate is@hypaware/claude-desktop's["darwin"], pinned bytest/core/claude-desktop-picker-platform.test.js:38. A manifest validation failure is fatal to the whole plugin, so a closed enum would turn a legitimate futureprocess.platformvalue into a dead plugin, a worse failure than one vanished row the author sees immediately on their own machine. The residual cost is third-party authoring ergonomics only.Acceptance condition. A
platformsentry outside the knownprocess.platformset produces a visible diagnostic without killing the plugin (for example a load-time orhyp statuswarning naming the manifest, the row, and the unrecognized value), a test pins the warning, and the loosened-vs-warned shape is recorded in a new LLP extending 0368.