From 45fa8378624ae864168eb24a7e24e05875b7c4c9 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 18 Sep 2026 01:07:57 +0000 Subject: [PATCH 1/2] docs(spec): re-measure proof 4's census figures, each beside its population MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The proof-4 docblock in `packages/spec/scripts/build-schemas.ts` carried two census figures that name a population they do not measure: - "on the shipped graph 7 of the 8 defs in that state are unions" — the not-delivered state holds 9 keys on 4 defs, 3 of them unions carrying 7 of the 9 keys. The 7 was the KEY count wearing the DEF label. - the closing line sent a reader to the census in a PR body whose own row labels "defs resolving to exactly one declaration that names an undeclared key" with 258 — the count of defs resolving to exactly one declaration whether or not it names anything. That population measures 147. Re-measured on this tree rather than copied: the whole census was re-derived with this head's own verbatim `computeGuidanceRoutes`, and every figure is now written beside the population it counts, with the commit it was taken on. The rationale both figures support is unchanged — unions do dominate the not-delivered set (3 of 4 defs, 7 of 9 keys). Only the arithmetic moved. Comment-only; this script ships in no tarball (`@objectstack/spec` `files[]` has no `scripts/` entry), so the blast radius is the gate's next reader. Claude-Session: https://claude.ai/code/session_01JbZnqu8bt6YqfJsr9vaFb3 Co-authored-by: Claude --- packages/spec/scripts/build-schemas.ts | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/spec/scripts/build-schemas.ts b/packages/spec/scripts/build-schemas.ts index 08034223917..23025f1cee4 100644 --- a/packages/spec/scripts/build-schemas.ts +++ b/packages/spec/scripts/build-schemas.ts @@ -1558,15 +1558,23 @@ interface GuidanceRoutes { * key in it, a union or pipe the probe cannot drive to a single door, or a refusal * whose message does not carry the declared text — all read as "no evidence", * never as "proved". ⛔ And the verdict for the second half says only THAT the - * prescription did not arrive, never WHY: on the shipped graph 7 of the 8 defs in - * that state are unions, where "the door is open" would be a guess this gate has - * not measured — the mistake this proof's first cut made about - * `additionalProperties` and must not repeat one layer down. + * prescription did not arrive, never WHY: that state holds 9 keys on 4 defs, and + * 3 of those 4 defs are unions carrying 7 of the 9 — for a union "the door is + * open" would be a guess this gate has not measured, the mistake this proof's + * first cut made about `additionalProperties` and must not repeat one layer down. * - * Measured on the shipped graph at #18301 with THIS instrument — see the PR body - * for the census run: `integration/DataSyncConfig` has NO route (its shape is not - * a `strictObject` and nothing prescribes for `schedule`), so this proof does not - * reach the 2026-09-10 ruling that withheld that tombstone. + * Every count above was re-measured with THIS instrument on + * objectstack-ai/objectstack `88aa326deb` (#18579), and each is written beside + * the population it counts, because that is the one thing the first census run + * did not do: of the 1527 emitted defs, 258 resolve to exactly one declaration, + * and 147 of those 258 name a key the def does not declare; those 147 defs + * promise 779 keys, of which 770 are delivered and the 9 above are not. ⛔ Do + * not re-derive any of these from the #18301 PR body: its census row gives the + * 147 population the 258 count, and a count with no population is the defect this + * docblock was corrected for, not a figure to carry forward. + * `integration/DataSyncConfig` has NO route (its shape is not a `strictObject` + * and nothing prescribes for `schedule`), so this proof does not reach the + * 2026-09-10 ruling that withheld that tombstone. */ function computeGuidanceRoutes(): GuidanceRoutes { const shapeSignature = (shape: Record): string => From 8f9a42d8a2c3d55cdbd99936311c0610aec71e73 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 18 Sep 2026 01:35:27 +0000 Subject: [PATCH 2/2] docs(spec): anchor proof 4's corrected counts to the tree they were read on MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both corrected figures now say WHICH tree they are a reading of, in the same sentence as the number. A count anchored to a commit stays true when the graph moves; an unanchored one silently becomes a claim about a tree nobody measured, which is the same failure mode one level up from the one being fixed here. The not-delivered partition in particular is a fact about the graph, not a property of the proof — closing an open door moves it — so the docblock now tells its next reader to re-measure rather than re-date these counts. Claude-Session: https://claude.ai/code/session_01JbZnqu8bt6YqfJsr9vaFb3 Co-authored-by: Claude --- packages/spec/scripts/build-schemas.ts | 29 ++++++++++++++------------ 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/packages/spec/scripts/build-schemas.ts b/packages/spec/scripts/build-schemas.ts index 23025f1cee4..3233aeceaf0 100644 --- a/packages/spec/scripts/build-schemas.ts +++ b/packages/spec/scripts/build-schemas.ts @@ -1558,20 +1558,23 @@ interface GuidanceRoutes { * key in it, a union or pipe the probe cannot drive to a single door, or a refusal * whose message does not carry the declared text — all read as "no evidence", * never as "proved". ⛔ And the verdict for the second half says only THAT the - * prescription did not arrive, never WHY: that state holds 9 keys on 4 defs, and - * 3 of those 4 defs are unions carrying 7 of the 9 — for a union "the door is - * open" would be a guess this gate has not measured, the mistake this proof's - * first cut made about `additionalProperties` and must not repeat one layer down. + * prescription did not arrive, never WHY: at `88aa326deb` that state held 9 keys + * on 4 defs, 3 of those 4 defs unions carrying 7 of the 9 keys — for a union + * "the door is open" would be a guess this gate has not measured, the mistake + * this proof's first cut made about `additionalProperties` and must not repeat + * one layer down. * - * Every count above was re-measured with THIS instrument on - * objectstack-ai/objectstack `88aa326deb` (#18579), and each is written beside - * the population it counts, because that is the one thing the first census run - * did not do: of the 1527 emitted defs, 258 resolve to exactly one declaration, - * and 147 of those 258 name a key the def does not declare; those 147 defs - * promise 779 keys, of which 770 are delivered and the 9 above are not. ⛔ Do - * not re-derive any of these from the #18301 PR body: its census row gives the - * 147 population the 258 count, and a count with no population is the defect this - * docblock was corrected for, not a figure to carry forward. + * Every count above is a reading of ONE tree — objectstack-ai/objectstack + * `88aa326deb`, where #18579 re-took all of them with THIS instrument — and each + * is written beside the population it counts: of the 1527 emitted defs, 258 + * resolve to exactly one declaration, and 147 of those 258 name a key the def + * does not declare; those 147 defs promise 779 keys, of which 770 are delivered + * and the 9 above are not. Which defs sit in that last group is a fact about the + * graph at that commit and not a property of this proof — closing an open door + * moves it — so a later reader RE-MEASURES rather than re-dates these, and ⛔ + * derives none of them from the #18301 PR body, whose census row gives the 147 + * population the 258 count: a count wearing another population's label is the + * defect this docblock was corrected for. * `integration/DataSyncConfig` has NO route (its shape is not a `strictObject` * and nothing prescribes for `schedule`), so this proof does not reach the * 2026-09-10 ruling that withheld that tombstone.