Uh oh!
There was an error while loading. Please reload this page.
Make the scaffolded starter comments followable by a stranger - #11024
Conversation
…tranger The two files a newcomer opens first after scaffolding cited four ADR identifiers, a bare issue number and a release-time script path — none of which ship in a scaffolded project. Rewrite them self-contained, keeping what they explain and pointing at public docs pages, and pin both halves: no unfollowable reference, and the rationale still stated. Fixes#10324 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019bmVFqoQPq63zhKrxdYG1r
…rally The scaffolded README uses pnpm throughout, so a hardcoded `npm run build` in the starter object contradicted the project's own docs. Name the underlying `objectstack build` instead, which is what the project's build script runs whichever package manager invoked it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019bmVFqoQPq63zhKrxdYG1r
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 1 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
Uh oh!
There was an error while loading. Please reload this page.
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 32566894495 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Fixes#10324
The two files a newcomer opens first after scaffolding —
objectstack.config.tsandsrc/objects/note.object.ts— carried six references addressed to a reader with this monorepo open: four ADR identifiers, one bare issue number, and the path of a release-time script. None ofdocs/adr/, the issue tracker, or that script ships in a scaffolded project, so// per ADR-0097read as a reference the newcomer was failing to follow rather than as the context it was meant to be.Per triage, the comments' explanatory value is kept and only the dead ends are gone. Every rewrite states the fact the identifier stood for, in terms the reader can act on, and points at a public docs page where one covers the material.
What each rewrite says instead
ADR-0087 D1+scripts/sync-template-versions.mjsper ADR-0097(onrequires)automationthe executors have nowhere to register and boot fails)ADR-0022/0023/0024 + ADR-0097Security (#3055)mcpstdio transport spawns a local process from metadata, so it is denied by default, with the per-host opt-in spelled outsecurity posture gate (ADR-0090)objectstack buildrefuses an object declaring no OWD, so the baseline is always an authored decisionThe
sync-template-versions.mjsline is the worked example of the judgement: it was telling the reader the range is machine-maintained rather than hand-tuned. That fact is now stated; the script the reader does not have is not named.Sweep of the rest of the template tree (the card's rider)
One more hit outside the two starter files, and it is in scope —
Dockerfile:23pointed atdocker/README.md in the framework repo. It now points at the self-hosting guide the file already links four lines above, so the "there is more detail" affordance survives without the dead pointer. This file is named here deliberately: it is an addition to the file surface declared in the claim comment, and the claim was amended in the same round.Dockerfile:10anddocker-compose.yml:7were left untouched — thosedocs.objectstack.aihost lines are #10990's, and this diff stays off them so the two cards cannot collide.Verified against public docs, not assumed
Each URL introduced here was resolved with this repo's own link gate rather than a second hand-rolled resolver —
checkDocument()fromscripts/check-published-readme-links.mjs, over a synthetic document carrying the three links plus a deliberate control route that does not exist:The control link is what makes that green mean something: the probe demonstrably can fail.
The pin, and why it has two halves
packages/create-objectstack/src/starter-comments-self-contained.test.tsscans every file the scaffolder copies into a user's project:Half 2 is the load-bearing one. The cheap way to make the references disappear is to delete the comments, which would be a worse project than the one with the dead references — so a one-way "no ADR identifiers" grep would rot in exactly the direction triage warned about, staying green while the explanation is deleted out from under it.
content/docsthe way Fumadocs routes them, because a link that 404s is the same defect one level out.blank/README.mdis excluded — it still carries an ADR identifier of its own and is owned by other cards in this family. The exclusion is self-retiring rather than permanent: a final assertion fails the moment that README stops needing it, telling whoever cleans the file to delete the entry so it is scanned like everything else. A silent exemption over the most-read file in the tree is the failure that shape exists to avoid.Reverse-verification — three ablations, each observed red, then restored green
Run from a committed state, so restoring was a
git checkoutrather than a hope. These are plainfs.readFileSyncsource-text reads inside one package — nodist/, noexportsresolution — so no rebuild leg applies to any of them.per ADR-0097cites an ADR identifier ("ADR-0097"); 1 failed / 20 passedno longer explains that a declarative mcp stdio transport is denied by default; 1 failed / 20 passedlinks https://objectstack.ai/docs/automation/connector-authoring, which content/docs serves from none of …; 1 failed / 20 passedTest Files 1 passed (1) · Tests 21 passed (21)Read as a newcomer, not as a diff
The point of this card is what a stranger sees, so the CLI was rebuilt and a real project scaffolded from it (
node dist/index.js acme-notes -t blank --skip-install --skip-skills). Sweeping the generated project for anything unfollowable leaves two hits, both in the fenced README, both reported rather than touched (see below).Reading the generated output also caught something the diff alone did not: the OWD comment originally said
`npm run build`, while the generated README usespnpmthroughout. Naming the underlyingobjectstack buildinstead is correct whichever package manager invoked it.Fenced files — swept, reported, not touched
templates/blank/README.md:77ADR-0097templates/blank/README.md:134templates/blank/README.md:102`AGENTS.md`— not a defect: the scaffolder really does write that file into the projecttemplates/AGENTS.mdsrc/index.tsAlso filed from the sweep: #11023 —
packages/cli/src/commands/init.tswrites ADR identifiers into the user's project through the other scaffolder, same defect class, out of this card's package.Gates
All run at
e6a31555b0(the final commit), gate set derived from the real change set withnode scripts/pm/dispatch-gates.mjsrather than the dispatch list — it named five families the dispatch did not, all run below.check:cross-package-test-inputsis called out because the new test readscontent/docs: that read lands inside thecontent/**glob this package already declares, so the gate stays green with no declaration change.pnpm --filter 'create-objectstack^...' buildmatched no projects — a genuine no-op, sincecreate-objectstackhas no workspace dependencies (onlychalkandcommander), not a silently skipped build.check:type-check-debthas nothing to re-measure here: this package carries notest-typecheck-debt.json, and itstsconfig.jsonputs the new test file inside the program thattypecheckruns (confirmed withtsc --listFiles).CI convergence is left to review rather than waited on here.
Generated by Claude Code