Found while implementing #12125 (which carries conversions onto every failure exit of os validate --json / os build --json). Out of that card's scope — it is a different command and a different shape — so recorded, not fixed.
Measured
At 2c7f002708 (branch claude/issue-12125-conversions-on-failure-exits, whose change does not touch lint.ts):
packages/cli/src/commands/lint.ts:505
constnormalized=normalizeStackInput(configasRecord<string,unknown>);
No options object, so no onConversionNotice sink. Anchored count over the whole file:
grep -cE 'onConversionNotice|conversions' packages/cli/src/commands/lint.ts
0
Zero — in either face. os lint neither prints a conversion notice for a human nor publishes a conversions field in --json.
Why this is the #3782 parity class, not this card's shape
⛔ This is not "computed, then dropped" (the #11643 / #11391 / #11772 / #12047 / #12125 family). Nothing is computed to drop: the sink is never passed, so the notices are never produced at all. That is the same gap os build was in before #11772 / PR #12079, described in compile.ts's own step-2 comment:
os validate passed a sink and surfaced them, os build passed none. That is the #3782 parity class — the two surfaces disagreeing about what an author is told — and it bites harder than it reads, because the notice is the ONLY warning an old-shape author gets before the conversion retires and their metadata stops loading.
That argument transfers to os lint unchanged. os lint is one of the three authoring commands the #4409 registry exists to hold to one bar, and it is now the only one of the three that tells an author nothing about a conversion its own load path just applied.
Why it matters
A conversion notice carries an expiry: retiresIn names the protocol major where the source stops loading. Five conversions are live today (protocol 11 and 15). An author or CI job whose only authoring gate is os lint gets no signal at all that the tree depends on one — not in the console, not in --json — right up until the conversion retires.
Not proposed here
Whether os lint should surface them in one face or both, and whether --json should carry the same conversions key os validate and os build use (which would be the consistent shape) or fold them into its existing issues list, is a machine-contract decision for triage, not this filing.
The sibling commands' related open sub-question — whether warnings and conversions should be folded — is raised on #12125 and unsettled; a decision there plausibly constrains the answer here, so these two may want sequencing.
#12125 is not addressed by this issue.
Filed unassigned, no labels — severity and route are triage's call.
Generated by Claude Code
Found while implementing #12125 (which carries
conversionsonto every failure exit ofos validate --json/os build --json). Out of that card's scope — it is a different command and a different shape — so recorded, not fixed.Measured
At
2c7f002708(branchclaude/issue-12125-conversions-on-failure-exits, whose change does not touchlint.ts):packages/cli/src/commands/lint.ts:505No options object, so no
onConversionNoticesink. Anchored count over the whole file:Zero — in either face.
os lintneither prints a conversion notice for a human nor publishes aconversionsfield in--json.Why this is the #3782 parity class, not this card's shape
⛔ This is not "computed, then dropped" (the #11643 / #11391 / #11772 / #12047 / #12125 family). Nothing is computed to drop: the sink is never passed, so the notices are never produced at all. That is the same gap
os buildwas in before #11772 / PR #12079, described incompile.ts's own step-2 comment:That argument transfers to
os lintunchanged.os lintis one of the three authoring commands the #4409 registry exists to hold to one bar, and it is now the only one of the three that tells an author nothing about a conversion its own load path just applied.Why it matters
A conversion notice carries an expiry:
retiresInnames the protocol major where the source stops loading. Five conversions are live today (protocol 11 and 15). An author or CI job whose only authoring gate isos lintgets no signal at all that the tree depends on one — not in the console, not in--json— right up until the conversion retires.Not proposed here
Whether
os lintshould surface them in one face or both, and whether--jsonshould carry the sameconversionskeyos validateandos builduse (which would be the consistent shape) or fold them into its existingissueslist, is a machine-contract decision for triage, not this filing.The sibling commands' related open sub-question — whether
warningsandconversionsshould be folded — is raised on #12125 and unsettled; a decision there plausibly constrains the answer here, so these two may want sequencing.#12125 is not addressed by this issue.
Filed unassigned, no labels — severity and route are triage's call.
Generated by Claude Code