Recorded from the #13483 delivery (PR #14056). Unassigned — recording only, for triage.
What
packages/lint/src/lint-liveness-properties.ts maps ledger verdicts to author-facing findings in describe() and — deliberately, per its own #11384 boundary comment — THROWS on a status it has not been taught: "either the ledger JSON has a typo, or a new status was added to the vocabulary without teaching describe() in lint-liveness-properties.ts about it". #13483 added exactly such a status: live-elsewhere (dead here by measurement, enforced in a sibling repo; first row manifest.runtime).
Reachability, measured
Not reachable today: an entry only reaches describe() after shouldWarn() says yes (authorWarn: true, or status experimental), and no live-elsewhere row carries authorWarn (the migrated manifest.runtime row does not). The day such a row opts into authorWarn: true, os lint throws — loud by design, but a crash rather than the advisory warning the author should get.
The designed repair (the throw message itself prescribes it)
Teach describe() a live-elsewhere branch with its own rule id (the #11384 lesson: verdicts imply OPPOSITE author actions, so it must not fall into the dead branch — "Remove it" is exactly wrong for a key whose enforcement is real and remote). A reasonable default hint: keep the property — it is enforced at the sibling repo's gate (for manifest.runtime: the cloud marketplace publish gate), not at load time here; see the ledger row's evidence for the enforcer. Plus a test beside the existing describe() cases.
Out of scope for #13483 (the card's surface is the ledger + gate tooling under packages/spec; packages/lint has its own suite), filed instead per the dispatch order.
Generated by Claude Code
Generated by Claude Code
Recorded from the #13483 delivery (PR #14056). Unassigned — recording only, for triage.
What
packages/lint/src/lint-liveness-properties.tsmaps ledger verdicts to author-facing findings indescribe()and — deliberately, per its own #11384 boundary comment — THROWS on a status it has not been taught: "either the ledger JSON has a typo, or a new status was added to the vocabulary without teaching describe() in lint-liveness-properties.ts about it". #13483 added exactly such a status:live-elsewhere(dead here by measurement, enforced in a sibling repo; first rowmanifest.runtime).Reachability, measured
Not reachable today: an entry only reaches
describe()aftershouldWarn()says yes (authorWarn: true, or statusexperimental), and nolive-elsewhererow carriesauthorWarn(the migratedmanifest.runtimerow does not). The day such a row opts intoauthorWarn: true,os lintthrows — loud by design, but a crash rather than the advisory warning the author should get.The designed repair (the throw message itself prescribes it)
Teach
describe()alive-elsewherebranch with its own rule id (the #11384 lesson: verdicts imply OPPOSITE author actions, so it must not fall into thedeadbranch — "Remove it" is exactly wrong for a key whose enforcement is real and remote). A reasonable default hint: keep the property — it is enforced at the sibling repo's gate (formanifest.runtime: the cloud marketplace publish gate), not at load time here; see the ledger row's evidence for the enforcer. Plus a test beside the existing describe() cases.Out of scope for #13483 (the card's surface is the ledger + gate tooling under packages/spec; packages/lint has its own suite), filed instead per the dispatch order.
Generated by Claude Code
Generated by Claude Code