From 16006a58192c6e976def76c8d7c9a193baac47af Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 29 Oct 2026 15:42:17 +0000 Subject: [PATCH 1/3] docs(lint): the liveness lint's live-elsewhere example no longer names manifest.runtime The doc comment and the `live-elsewhere` default hint used `manifest.runtime` as the worked example of a row enforced only in a sibling repo. That row reads `live` since the boot-time loader began dispatching on the plugin tier, so the example taught the opposite of the ledger. Both places now describe the verdict generically (a key with zero local dispatch whose only enforcer is a gate in another repository, named by the row's evidence); no shipped row holds the verdict today. Rule id, message and the hint's instruction are unchanged. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_017ihL2dZmutT6YPdL6nSFmM --- .../27569-liveness-lint-elsewhere-example.md | 10 +++++++++ packages/lint/src/lint-liveness-properties.ts | 21 +++++++++++-------- 2 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 .changeset/27569-liveness-lint-elsewhere-example.md diff --git a/.changeset/27569-liveness-lint-elsewhere-example.md b/.changeset/27569-liveness-lint-elsewhere-example.md new file mode 100644 index 00000000000..9cf9bf6ed39 --- /dev/null +++ b/.changeset/27569-liveness-lint-elsewhere-example.md @@ -0,0 +1,10 @@ +--- +'@objectstack/lint': patch +--- + +docs(lint): the liveness lint's `live-elsewhere` worked example no longer names `manifest.runtime`, a `live` row since the boot-time loader began dispatching on the plugin tier + +Clause-②: no — hint text and a doc comment; no key, accepted value or export changes +Metadata-protocol: none + +`lintLivenessProperties` used `manifest.runtime` as its worked example of a `live-elsewhere` row in its doc comment and in the `live-elsewhere` verdict's default hint. That row reads `live` now, so the example taught the opposite of the ledger. Both places describe the verdict generically instead (a key with zero local dispatch whose only enforcer is a gate in another repository, named by the ledger row's `evidence`), since no shipped row holds the verdict today. The rule, its id and the hint's instruction (keep the property; read the row's evidence for the enforcer) are unchanged. diff --git a/packages/lint/src/lint-liveness-properties.ts b/packages/lint/src/lint-liveness-properties.ts index 21abfa76317..85f7e0ffa3c 100644 --- a/packages/lint/src/lint-liveness-properties.ts +++ b/packages/lint/src/lint-liveness-properties.ts @@ -213,14 +213,17 @@ function isAuthored(value: unknown): boolean { * `#14057` is the same defect class arriving through a different door, and the * reason the boundary below is a THROW rather than a fallthrough. #13483 added * the fifth status to the ledger vocabulary — `live-elsewhere`: dead HERE by - * measurement, genuinely enforced in a sibling repo (first row: - * `manifest.runtime`, whose enforcer is the cloud marketplace publish gate) — - * without teaching this function about it. Falling into `dead` would have said - * "Remove it" about a key whose enforcement is real and remote, i.e. exactly - * the most wrong sentence available: deleting it tears out a live gate's - * input. That row is not deletable, so `live-elsewhere` gets its own branch and - * its own rule id, and its default hint points the author at the ledger row's - * `evidence` — the enforcer's address — rather than at a delete key. + * measurement, genuinely enforced in a sibling repo (a key with zero local + * dispatch whose only enforcer is a gate in another repository — a publish + * gate, a closed runtime's check — named by the ledger row's `evidence`; + * no shipped row holds the verdict today, and the ledger README keeps the + * historical worked example) — without teaching this function about it. + * Falling into `dead` would have said "Remove it" about a key whose + * enforcement is real and remote, i.e. exactly the most wrong sentence + * available: deleting it tears out a live gate's input. Such a row is not + * deletable, so `live-elsewhere` gets its own branch and its own rule id, and + * its default hint points the author at the ledger row's `evidence` — the + * enforcer's address — rather than at a delete key. * * Each verdict below also carries its own DEFAULT hint (used when the ledger * entry has no `authorHint`; the row's `note` is never shown to an author, since @@ -292,7 +295,7 @@ function describe(entry: LedgerEntry): { kind: string; rule: string; defaultHint rule: LIVENESS_LIVE_ELSEWHERE_PROPERTY, defaultHint: 'Keep it — nothing reads it when the stack loads here, but a sibling repo enforces it ' + - "(for `manifest.runtime`, the cloud marketplace publish gate); see the ledger row's " + + "(a publish gate or a closed runtime's own check); see the ledger row's " + 'evidence for the enforcer.', }; } From 0edaaef1929d6ebe5f89d0213a81cb381b1f6ac4 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 29 Oct 2026 16:00:31 +0000 Subject: [PATCH 2/3] docs(lint): tighten the live-elsewhere wording after review Name one enforcer shape (a marketplace publish gate) in the hint and the doc comment, so the example is not read beside the ledger README's rule that a key consumed only by the closed runtime stays live; split the comment's long parenthetical into two sentences; trim the changeset's Clause line to the bare form the sibling changesets use. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_017ihL2dZmutT6YPdL6nSFmM --- .../27569-liveness-lint-elsewhere-example.md | 4 ++-- packages/lint/src/lint-liveness-properties.ts | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.changeset/27569-liveness-lint-elsewhere-example.md b/.changeset/27569-liveness-lint-elsewhere-example.md index 9cf9bf6ed39..f0eb09f9ef4 100644 --- a/.changeset/27569-liveness-lint-elsewhere-example.md +++ b/.changeset/27569-liveness-lint-elsewhere-example.md @@ -4,7 +4,7 @@ docs(lint): the liveness lint's `live-elsewhere` worked example no longer names `manifest.runtime`, a `live` row since the boot-time loader began dispatching on the plugin tier -Clause-②: no — hint text and a doc comment; no key, accepted value or export changes +Clause-②: no Metadata-protocol: none -`lintLivenessProperties` used `manifest.runtime` as its worked example of a `live-elsewhere` row in its doc comment and in the `live-elsewhere` verdict's default hint. That row reads `live` now, so the example taught the opposite of the ledger. Both places describe the verdict generically instead (a key with zero local dispatch whose only enforcer is a gate in another repository, named by the ledger row's `evidence`), since no shipped row holds the verdict today. The rule, its id and the hint's instruction (keep the property; read the row's evidence for the enforcer) are unchanged. +`lintLivenessProperties` used `manifest.runtime` as its worked example of a `live-elsewhere` row in its doc comment and in the `live-elsewhere` verdict's default hint. That row reads `live` now, so the example taught the opposite of the ledger. Both places describe the verdict generically instead (a key with zero local dispatch whose only enforcer is a gate in another repository, a marketplace publish gate for instance, named by the ledger row's `evidence`), since no shipped row holds the verdict today. The rule, its id and the hint's instruction (keep the property; read the row's evidence for the enforcer) are unchanged. diff --git a/packages/lint/src/lint-liveness-properties.ts b/packages/lint/src/lint-liveness-properties.ts index 85f7e0ffa3c..769817ad46c 100644 --- a/packages/lint/src/lint-liveness-properties.ts +++ b/packages/lint/src/lint-liveness-properties.ts @@ -214,13 +214,13 @@ function isAuthored(value: unknown): boolean { * reason the boundary below is a THROW rather than a fallthrough. #13483 added * the fifth status to the ledger vocabulary — `live-elsewhere`: dead HERE by * measurement, genuinely enforced in a sibling repo (a key with zero local - * dispatch whose only enforcer is a gate in another repository — a publish - * gate, a closed runtime's check — named by the ledger row's `evidence`; - * no shipped row holds the verdict today, and the ledger README keeps the - * historical worked example) — without teaching this function about it. - * Falling into `dead` would have said "Remove it" about a key whose - * enforcement is real and remote, i.e. exactly the most wrong sentence - * available: deleting it tears out a live gate's input. Such a row is not + * dispatch whose only enforcer is a gate in another repository, a marketplace + * publish gate for instance, named by the ledger row's `evidence`) — without + * teaching this function about it. No shipped row holds the verdict today; + * the ledger README keeps the historical worked example. Falling into `dead` + * would have said "Remove it" about a key whose enforcement is real and + * remote, i.e. exactly the most wrong sentence available: deleting it tears + * out a live gate's input. Such a row is not * deletable, so `live-elsewhere` gets its own branch and its own rule id, and * its default hint points the author at the ledger row's `evidence` — the * enforcer's address — rather than at a delete key. @@ -295,7 +295,7 @@ function describe(entry: LedgerEntry): { kind: string; rule: string; defaultHint rule: LIVENESS_LIVE_ELSEWHERE_PROPERTY, defaultHint: 'Keep it — nothing reads it when the stack loads here, but a sibling repo enforces it ' + - "(a publish gate or a closed runtime's own check); see the ledger row's " + + "(a marketplace publish gate, for instance); see the ledger row's " + 'evidence for the enforcer.', }; } From f1d90c65c2871509655a89ffc9394a04aff55221 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 29 Oct 2026 16:00:51 +0000 Subject: [PATCH 3/3] docs(lint): rewrap the live-elsewhere doc comment Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_017ihL2dZmutT6YPdL6nSFmM --- packages/lint/src/lint-liveness-properties.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/lint/src/lint-liveness-properties.ts b/packages/lint/src/lint-liveness-properties.ts index 769817ad46c..819864b85c7 100644 --- a/packages/lint/src/lint-liveness-properties.ts +++ b/packages/lint/src/lint-liveness-properties.ts @@ -220,10 +220,10 @@ function isAuthored(value: unknown): boolean { * the ledger README keeps the historical worked example. Falling into `dead` * would have said "Remove it" about a key whose enforcement is real and * remote, i.e. exactly the most wrong sentence available: deleting it tears - * out a live gate's input. Such a row is not - * deletable, so `live-elsewhere` gets its own branch and its own rule id, and - * its default hint points the author at the ledger row's `evidence` — the - * enforcer's address — rather than at a delete key. + * out a live gate's input. Such a row is not deletable, so `live-elsewhere` + * gets its own branch and its own rule id, and its default hint points the + * author at the ledger row's `evidence` — the enforcer's address — rather + * than at a delete key. * * Each verdict below also carries its own DEFAULT hint (used when the ledger * entry has no `authorHint`; the row's `note` is never shown to an author, since