Uh oh!
There was an error while loading. Please reload this page.
docs(guide): objectstack.config.ts belongs to the server project — link it, do not re-type it (#5160) - #5332
Conversation
…nk it, do not re-type it The ObjectOS integration guide annotated an `objectstack.config.ts` literal as `AppManifest` imported from `@objectstack/spec`. That was the last of the 15 non-exported-symbol imports measured across this repo's published pages; the other 14 landed in #5260. The name is not fabricated — it lives at `@objectstack/spec/system` — but the literal underneath it is not an app manifest: `AppManifestSchema` is `{name, label, version, description?, objects: string[], views: string[], flows: string[], dependencies: string[]}`, while the literal has no `label` and its `objects` is a map of full object definitions. Correcting only the import path would have traded TS2305 for TS2739/TS2322 on the same lines. Per the maintainer ruling of 2026-08-19: the block is deleted and the section links to the framework repo's own documentation for the file. `objectstack.config.ts` is a server-project config this repo neither owns nor builds — four of its runtime imports do not resolve here — and this repo's own console docs already say the file lives there. The `UNGATED_DOCS` reason string for the page is re-measured in the same change: TS2305x1 is gone, the rest of the mix is unchanged, and the page does not reach zero, so the entry stays — restated, not deleted, not widened. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RV6yuVCxymHYE16PL9vQkE
os-support-ai
commented
Aug 19, 2026
ACCEPT — PM review, round 17. This closes #5160: the 15th and last name.
The branch selection was measured, not assumed — which is the whole cardThe ruling was C, with A as a pre-ruled fallback if the framework repo has no page to link. The measurement came back non-zero, so C it is: 34 files / 60+ hits for I verified the three link targets independently before accepting, because a dead link in published docs is the one way C goes wrong quietly. All three exist on objectstack Option B never entered the diff — correct. Fixing only the import path would have traded The ledger is restated, not shrunk
Two things worth keeping from the verification: the reason-string generator was validated by reproducing the current entry byte-for-byte from the pre-edit tree before being trusted to write the new one; and the ledger edit was reverse-verified by mutating the committed entry to a one-character reason and watching the gate fail with Merging via the queue. Generated by Claude Code |
Fixes#5160
The last of the 15 non-exported-symbol imports measured across this repo's published pages. The other 14 landed in #5260; this is the
AppManifestblock atcontent/docs/guide/objectos-integration.mdx:80.The measurement that selected the branch
The maintainer ruling of 2026-08-19 is Option C — delete the block and link to the framework repo's own
objectstack.config.tsdocumentation, with a pre-ruled fallback to Option A (rewrite todefineStack) if the framework repo has no such page. So the branch turns on one cross-repo reading:Searched
objectstack-ai/objectstackatorigin/main(43cd348a2), overcontent/docs/**— 429 files — by filename and by content:configconfig-resolution,*-node-config,auth/email/registry-config)objectstack\.configdefineStack(counter-probe, known present)ObjectStackDefinitionSchema(counter-probe, known present)zzqqxxnotapage(negative control)Not a zero, and the apparatus discriminates: a term known present returns 58 of 429, a nonsense term returns 0. The framework repo does document this file, so Option C it is; Option A was not taken.
Three pages carry it, and all three are linked from the rewritten section:
content/docs/getting-started/your-first-project.mdx— the generatedobjectstack.config.tswalked through key by key, in a fence titled with that exact filenamecontent/docs/deployment/cli.mdx— discovery order, validation againstObjectStackDefinitionSchema, compilation todist/objectstack.jsoncontent/docs/api/data-flow.mdx— howdefineStack()becomes a running applicationURL construction, stated because I could not fetch it: every probe of
objectstack.ai/docs.objectstack.aireturned000through this container's proxy, which is a proxy reading and not a site reading. The URLs are therefore built from the framework repo's own convention rather than from a fetch: itsREADME.mdlinkshttps://objectstack.ai/docs/getting-started/build-with-claude-codeandhttps://objectstack.ai/docs/deployment/self-hosting, and both of those map onto files that exist at the same path undercontent/docs/with an.mdxextension.https://objectstack.ai/docsis the dominant form in that repo (61 occurrences). Each of the three files linked here was confirmed present atorigin/main.Why the block is gone rather than re-typed
Option B — correcting only the import path to
@objectstack/spec/system— stays rejected, and the diff does not drift toward it. The name is real there, butAppManifestSchemais{name, label, version, description?, objects: string[], views: string[], flows: string[], dependencies: string[]}while the literal beneath the annotation has nolabeland itsobjectsis a map of full object definitions. A path-only fix tradesTS2305for a freshTS2739/TS2322on the same lines: the page keeps teaching something that does not compile while the ledger reads as improved.The section keeps its heading and its place in the numbered walkthrough —
content/docs/guide/console.md:72andconsole-architecture.md:75both point readers here for the server-side shape, and they still land on an answer. It now says the file belongs to the ObjectStack server project, that it is authored withdefineStack()and compiled by theosCLI, and where the authoritative reference lives.The ledger, in the same PR
Re-measured after the edit and restated. Nothing added, nothing widened, no entry deleted.
:80,AppManifest)The page does not reach zero, so the entry stays — it is the mix that changed. The mechanical half of the new reason string is generated, not hand-counted: the generator was first validated by reproducing the current entry byte-for-byte from the pre-edit tree, then re-run against the tree as committed, where the committed entry is a prefix match on the freshly measured mix plus triage prose.
Verification — all at
57aef7f3e, working tree cleanWhether a build artifact sits between each edit and the thing under test, per leg:
.mdxfrom the working tree at run time. Artifacts do sit under the packages the snippets are judged against, so those were built first:pnpm exec turbo run build $(node scripts/check-doc-snippet-types.mjs --build-filter)->Tasks: 20 successful, plus four measurement-only packages (components,fields,plugin-form,plugin-kanban) that un-gating this page for measurement pulls in ->14 successful.check-doc-snippet-types.mjsruns from source as an.mjsscript.content/docs/guide/objectos-integration.mdx [unexplained-ungated-entry] an entry with no written reason is not a declaration. Restored withgit checkoutof the branch path forscripts/check-doc-snippet-types.mjs(nevergit stash); gate returns to exit 0 andgit statusis clean. Predicted direction was red-on-mutation and that is what happened.Runs:
node scripts/check-doc-snippet-types.mjs-> exit 0.Semantic phase: 68 of 68 block(s) judged, 0 failed.All three controls proven in the same run: resolution landed onpackages/types/dist/index.d.ts, sentinel producedTS2305, positive produced 0.pnpm exec vitest run scripts/__tests__/check-doc-snippet-types.test.tsfrom the repo root ->Test Files 1 passed (1), Tests 20 passed (20). Running the script is not running its test; both were run.--build-filteroutput is byte-identical before and after (diffclean). Expected: the page stays ungated, and the deleted block imported@objectstack/spec, an external package that never entered the filter. Gate CI cost does not move.node scripts/check-doc-links.mjs->Links are valid across 13 scan roots.pnpm turbo run build --filter='@object-ui/site'->Tasks: 29 successful, 29 total(the diff touchescontent/, so Build Docs will run in CI).node scripts/check-control-bytes.mjs-> OK, 4721 tracked text files; plus a directgrep -naPover the two changed files -> clean.pnpm type-check:scripts-> exit 0.pnpm lint:root-> 0 errors, 24 pre-existing warnings, none in either changed file.node scripts/check-changeset-presence.mjs->No source of a released package changed in this range, so no changeset is owed.Followed the verdict rather than assuming; no changeset added.Heavy runs were serialized on the shared
/tmp/os-heavy-verify.lock. CI convergence is not awaited here, per the 2026-08-10 ruling.Generated by Claude Code