fix(spec): stop GetMetaItemsRequestSchema.organizationId promising it is always consulted - #16523
Conversation
… is always consulted The describe() said the parameter "Selects the org partition" unconditionally and closed with "Absent = environment-wide read: ... no org partition is consulted", which a reader completes as "present => consulted". A supplied organization is not always consulted on this read, so state that directly instead of implying the converse. Claude-Session: https://claude.ai/code/session_01T6HeZvT9wdSJD1ZxJb5Eno Co-authored-by: Claude <noreply@anthropic.com>
…ribe Produced by `pnpm --filter @objectstack/spec check:generated --fix`, which proved content/docs/references/** was the only stale artifact and regenerated only it. Claude-Session: https://claude.ai/code/session_01T6HeZvT9wdSJD1ZxJb5Eno Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T6HeZvT9wdSJD1ZxJb5Eno Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check1 anchor(s) derived from 1 changed package(s); no hand-written page names any of them, so this run has nothing to list — not a clean bill of health. This check sees only pages that NAME a derived anchor: one that documents this change in prose, or enumerates it in an authoring dialect, names none and stays invisible to it on every run. What this run could not see
Coarse fallback — 130 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin cd8ea830025cec6412921e65302e1b8107280d22 && git checkout cd8ea830025cec6412921e65302e1b8107280d22
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin a83482c5d0f689d9b855cd7c7fab23cf760c09d3 e81ea68b46d88753e622a355c91fe7b42d7aeda1 && git checkout -B drift-repro a83482c5d0f689d9b855cd7c7fab23cf760c09d3 && git merge --no-ff e81ea68b46d88753e622a355c91fe7b42d7aeda1
node scripts/docs-audit/affected-docs.mjs --json a83482c5d0f689d9b855cd7c7fab23cf760c09d3 |
Fixes #14772
Clause-②: no— no exported symbol, no payload key, no accept-set movement. Confirmed mechanically, not asserted: see Clause ② confirmation below.What changed
One
describe()string, onGetMetaItemsRequestSchema.organizationIdinpackages/spec/src/api/protocol.zod.ts, plus the generated reference row it compiles into and the owed changeset. No key added, removed or renamed; no export moved; no runtime behaviour touched.The old text opened with an unconditional "Selects the org partition in the ADR-0005 overlay read order" and closed with "Absent = environment-wide read: only env-level overlays apply and no org partition is consulted." Stating only the absent case invites the converse, and a reader completes it as present ⇒ consulted. A supplied organization is not consulted on every
getMetaItemsread, so that completion is false.The correction qualifies the promise instead of implying its converse — the parameter selects the org partition when an org partition applies, and "Supplying a value does not by itself guarantee an org partition is consulted; where none applies, and whenever it is absent, the read is environment-wide and only env-level overlays apply."
Per the maintainer cap on the card (comment 5536474187): no registry clause, the flag is not named, and no new
packages/speckey is added. ADR-0131 D6/D7 retires the per-organization partition wholesale, so teaching vocabulary for a mechanism with about one release to live would cost a changeset going in and another coming out. The escape hatch the maintainer offered was not needed: a true, useful sentence exists without naming the mechanism.Scope: one row of four, deliberately
The four sibling sites share a byte-exact opening. Relocated by symbol, not by line number:
GetMetaItemsRequestSchema:236:236GetMetaItemRequestSchema:271:271GetMetaItemLayeredRequestSchema:441:441GetMetaItemCachedRequestSchema:1815:1815Population grepped on the opening phrase = 4. The closing phrase returns 2, reproducing the near-miss triage recorded. Control:
organizationIdoccurs 11 times in the file, matching the card's prediction.The other three rows are not touched. My reading agrees with the PM's that
:271and:441are now imprecise in the same way, and the downstream trace is in the report on the card — but widening is the maintainer's call under the ADR-0131 clock, and triage wrote the standing instruction for exactly this case: report it, do not act on it. Out of scope here: #14770 remains open, and the ETag question named on the card is untouched.Clause ② confirmation (mechanical, two-direction)
Both gates green on this diff — and both proven able to say otherwise, on the very schema this PR edits, rather than read as a bare green.
check:api-surfacecheck:authorable-surface+ api/GetMetaItemsRequest:ablationProbeKeyThe mutation added a public export and a payload key to
GetMetaItemsRequestSchema; each leg proved the edit reached disk (blob hash vs the HEAD blob) and, for the dist-resolved gate, reacheddist/viascripts/ablation-dist-preflight.mjs(--absenton the restore leg). Restore is proven by an emptygit diff HEADand the source blob hash returning to HEAD's, not by an exit code.One confound found and corrected rather than reported as a pass:
pnpm --filter @objectstack/spec buildregeneratesauthorable-surface/api.json, so the first attempt at that gate's red leg was masked by its own baseline moving with the mutation. The un-confounded run mutates the source and runs the gate with no rebuild in between.Independently, neither artifact records
describe()text at all, whileGetMetaItemsRequestis present inauthorable-surface/api.json— so these greens mean "the gate looked at this schema and no key moved", not "the gate never looked".Verification
check:generatedprovedcontent/docs/references/**the single stale artifact and--fixregenerated exactly that one. No generated artifact was hand-edited.content/docs/references/api/protocol.mdx, one table row) and 2 gitignored (packages/spec/json-schema/api/GetMetaItemsRequest.json,packages/spec/json-schema/objectstack.json). The gitignored half is counted, not omitted. Four further gitignoredpackages/spec/dist/api/*files carry the string as build output.check:generatedexit 0 afterwards — all 15 artifacts up to date.scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack): 89 of 90 ran green, reconciled with--ran. The one unrun ischeck:dual-build-cjs-loads, which refused withPREREQUISITE NOT MET(exit 3, explicitly not a pass) because 33 packages have nodist/; it needs a whole-repo build and is declared to CI.@objectstack/spec: typecheck exit 0; tests 483 files / 13129 passed.@objectstack/lint,@objectstack/formulaand@objectstack/client-react; all three then genuinely measured and passed. None was recorded as a pass while unmeasured.c383352cb752245899b6ca7e2dc7d233405113ee.origin/mainmoved under this container mid-run (toa5eccf9257); the anchor did not.Draft on purpose: not flipped ready and not enqueued — that is the PM's call.
Generated by Claude Code