Uh oh!
There was an error while loading. Please reload this page.
docs(spec): state the measured dependsOn spelling facts in the option-description docblock - #15055
Conversation
…-description docblock The option-description docblock and the two prose sites in its pin file said the canonical spelling `depends_on` already exists at the field level. Measured against the schema it does not: `FieldSchema` declares the camelCase `dependsOn` and refuses `depends_on`, and neither spelling is declared on the option shape. Rewrite the three sites to state only what is measured, and leave the option-face question with objectui#6153 rather than substituting a new justification for the conclusion. Comment text only — no schema member moves. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0174WZTU6XcFcS7g2kykC53i
📓 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 — 128 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 9827f714d5e1f8dcde89b7a5213fccd863c7ebd3 && git checkout 9827f714d5e1f8dcde89b7a5213fccd863c7ebd3
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 101ad2cc13fafd8a3879ffc4a6ce6133c02ed832 daf2fd30d62d402649c72c15e12ff0e28bef8323 && git checkout -B drift-repro 101ad2cc13fafd8a3879ffc4a6ce6133c02ed832 && git merge --no-ff daf2fd30d62d402649c72c15e12ff0e28bef8323
node scripts/docs-audit/affected-docs.mjs --json 101ad2cc13fafd8a3879ffc4a6ce6133c02ed832 |
…de-key ruling The maintainer amended the inherited reading on 2026-09-02: the contract's field-level cascade key is the camelCase `dependsOn`, objectui mirrors that spelling on its own metadata type, and objectui's snake_case twin retires on its own card. Re-word the three prose sites to that: the option shape declares `description` and no cascade key of its own (the pin file asserts the refusal), and the cascade key is `FieldSchema`'s `dependsOn`. `field.zod.ts` now carries no snake_case occurrence at all; the test file keeps one, naming the spelling `FieldSchema` refuses with a rename hint. No `expect()` changes, no schema member changes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0174WZTU6XcFcS7g2kykC53i
zhuangjianguo
commented
Sep 3, 2026
CI note (PM seat This PR is already in a patch round (REWORK verdict on #13916, 5530907654: wording moves to the 2026-09-02 ruling A on objectui#6153, Generated by Claude Code |
… the docblock reflow `check-system-context-census.mjs --fix` rewrote the one rotted line anchor (`field.zod.ts:1537` to `:1540`): the option-description docblock above the `readonly` declaration changed height, so the page cited a line the census no longer calls a read site while the ledger row it excuses went unused. Pure line rot, repaired by the fixer, not by hand. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0174WZTU6XcFcS7g2kykC53i
…tion-dependson-docblock-fact
zhuangjianguo
commented
Sep 3, 2026
Landing provenance (PM seat
Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
…arity Brings in PR #15062 (`os i18n check --help`), which lands in packages/cli while this branch is open — the dispatch named it as the one to merge and re-verify against. Also #15065 (rest), #15063/#15067 (docs) and #15055 (spec). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yfqQh2dBgPAymYd7xipza
Fixes#13916
Fixes#14583
Clause ②: no — path limb fires (
packages/spec/src/data/field.zod.ts, comment text); content limb no: no accept-set or surface changeComment text plus one rotted doc anchor. No schema member moves and no
expect()changes: the option shape accepts and refuses exactly what it did before this branch.Files
packages/spec/src/data/field.zod.ts— the option-description docblockpackages/spec/src/data/field-rows-option-description.test.ts— the file-header docblock and the inline comment inside the refusal pincontent/docs/permissions/system-context.mdx— one line anchor, rewritten bycheck-system-context-census.mjs --fix(see "Anchor rot" below). This page is cross-lane shared and is re-dirtied by every landing on it, soorigin/mainwas merged into the branch (no rebase) right before the final union and the census re-run after that merge.The ruling this states
Maintainer, 2026-09-02, recorded on objectstack-ai/objectui#6153 (comment 5510108593, decision batch item 4, recommendation A, verbatim 「同意」): the contract's field-level cascade key is the camelCase
dependsOn; objectui'sBaseFieldMetadatamirrors it and its widgets lose their casts; objectui's snake_case twin retires on its own card under enforce-or-remove. That amends the 2026-09-01 ruling, whose premise had been inherited from the very comment this PR corrects — the sentence claiming a snake_case field-level key that this package has never declared.Independently measured here against the built schema before the wording was written:
FieldSchemaacceptsdependsOnand refuses the snake_case spelling with a rename hint todependsOn;SelectOptionSchemarefuses both spellings and acceptsdescription. Prose and ruling agree, so nothing in the comments rests on a citation alone.Before / after — the three prose sites
1.
field.zod.ts, the option-description docblockbefore
after
2. The pin file's header docblock
before
after
3. The inline comment inside the refusal pin (a third site triage did not list)
before
after
The before-blocks above spell the snake_case token out in words where quoting it verbatim would defeat the grep below; the diff carries the literal text. No justification sentence replaces the falsified one — the conclusion is stated as what the shape does, with the inherited ruling cited and nothing invented.
Acceptance
#14583's criterion is that
grep -n depends_on packages/spec/src/data/field.zod.tsreturn zero lines. Atdaf2fd30:Repo-wide under
packages/spec/src,git grep -n depends_onnow returns three lines and none of them is infield.zod.ts:The first is the single permitted mention — the spelling
FieldSchemarefuses, named where the refusal is pinned. The twoview.test.tslines aredependenciesField: 'depends_on': a gantt fixture naming a user field whose machine name is snake_case, which is correct for a data value (Prime Directive #3) and was never part of the false claim.Anchor rot
Lint & Repo Gateswent red on the previous head in thecheck:doc-anchorsstep, atnode scripts/check-system-context-census.mjs: the docblock's new height moved thereadonlydeclaration, socontent/docs/permissions/system-context.mdxcited a line the census no longer calls an elevation read while the ledger row excusing the real line went unused. Repaired by the fixer the gate names, not by hand:All three legs the CI step runs are green at
daf2fd30, the census re-run after theorigin/mainmerge:pnpm check:doc-anchors("298 internal fragment links across 409 source files all resolve"),check-system-context-census.mjs --self-test, and the census itself ("OK — 106 elevation read sites in 20 packages across 45 files, all anchored; 140 anchors resolve, 27 declared non-read").Changeset
pnpm --filter @objectstack/spec run check:generated(no--fix), after rebuildingdistfrom the edited source: "✓ All 15 generated artifacts are up to date." The JSDoc is not the JSON-Schema projection (.describe()is, and none changed), and the docs page is not a published package artifact. No changeset; theskip-changesetlabel stays on this PR.Verification record — everything below at
daf2fd30pnpm --filter '@objectstack/spec^...' build+pnpm --filter @objectstack/spec build—VERDICT command-exit 0pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2— 465 files / 12396 tests passedpnpm --filter @objectstack/spec run typecheck— clean, includingcheck:test-typecheck("OK — @objectstack/spec's test layer compiles under packages/spec/tsconfig.test.json"), so the edited test file sits inside a program that was really checkedpnpm --filter @objectstack/spec run check:generated— 15/15 up to datenode scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackre-derived on the post-merge diff (which now includes the docs page, and pulled in the docs family it adds), then 46 gate invocations, all exit 0: speccheck:docscheck:api-surfacecheck:authorable-surfacecheck:export-originscheck:livenesscheck:llms-txtcheck:skill-refscheck:strictness-ledgercheck:variant-docscheck:yaml-examplescheck:empty-statecheck:exported-anycheck:dual-source-exportscheck:entry-nameabilitycheck:browser-reachable-entriescheck:skill-examples; repocheck:nul-bytescheck:merge-drivercheck:published-filescheck:doc-authoringcheck:cross-package-test-inputscheck:test-source-aliascheck:spec-parsed-aliascheck:partof-closing-keywordcheck:changeset-gate-self-testscheck:objectql-double-limitcheck:where-matchercheck:page-declaration-shapecheck:slot-lookupcheck:type-source-resolutioncheck:logger-receiver-detachcheck:engine-double-contractcheck:doc-anchorscheck:corpus-claim-driftcheck:docs-audit-scopecheck:docs-redirectscheck:docs-single-h1check:published-readme-linkscheck:react-page-adapter-contractcheck:role-wordcheck:skill-identifier-livenesscheck:vendor-version-stamps;@objectstack/lintcheck:doc-formula-expressionsandcheck:doc-security-posture; and the census self-test plus the censusThree gates first exited on their own PREREQUISITE paths (nothing measured, never recorded as findings) and went green after the build they name:
check:doc-formula-expressionsneeded@objectstack/formulaand@objectstack/lintbuilt, andcheck:skill-examplesneeded@objectstack/client-reactbuilt with its dependency closure. Naming note: the dispatch'scheck:closing-keyword-parityis spelledcheck:partof-closing-keywordhere. Declared narrowing: the repo-widepnpm lintsweep and the remaining families of the 204 discovered are left to CI, which runs the farm.Still open elsewhere
#15058— the pending.changeset/field-rows-and-option-description-declared.mdcarries a fourth copy of the same false sentence and is release-notes input. It is filed unassigned and stays out of this PR: editing.changeset/**pulls in gate families (check:objectui-changeset,check:pm-half-states) outside this card's verification surface.🤖 Generated with Claude Code
https://claude.ai/code/session_0174WZTU6XcFcS7g2kykC53i
Generated by Claude Code