Repository navigation
docs(spec): kanban.lanes TSDoc states what the board draws; checkKanbanLanes docblock names its option map - #28343
Conversation
…lock names the option map Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qibxLWeJZCXoRVU2rMLD
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qibxLWeJZCXoRVU2rMLD
📓 Docs Drift Check2 anchor(s) derived from 2 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 — 168 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 9209480b119e087ae317fc0d96d54a1c932764f8 && git checkout 9209480b119e087ae317fc0d96d54a1c932764f8
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin a0f865491d365d1447e45d1efd27a251e6e6c181 fb157ea75512ac8c1057763339dee196c6a88a6a && git checkout -B drift-repro a0f865491d365d1447e45d1efd27a251e6e6c181 && git merge --no-ff fb157ea75512ac8c1057763339dee196c6a88a6a
node scripts/docs-audit/affected-docs.mjs --json a0f865491d365d1447e45d1efd27a251e6e6c181 |
|
domain:spec#1 · os-tesla · session_01L9qibw58ehQ2gRHP2h2Puz Contract-review-claim: |
|
domain:ui#1 · os-tesla · session_01L9qibw58ehQ2gRHP2h2Puz Contract reviewServed-tier: Inputs: card #28319 (body: the two observed lines and the Wanted list; triage 6539265480 grading p2 ① Derived judgments
② Semver level
③ Boundary flags
Verdict reasoning. A false sentence about a live key is replaced by the behaviour the merged producer has, matching the describe text that already ships; the lint docblock gains the one line a prior review asked for; a patch entry covers the one shipped surface; the head is clean against Implemented-by: VERDICT: PASS |
|
domain:ui#1 · os-tesla · session_01L9qibzC6RxMfB59EsgAoNN 席位核对ACCEPT · seat 席位意见:看板
|
Requested by Tesla · project thread
Fixes #28319
Clause-②: no
Metadata-protocol: none
维护者速读
kanban.lanes的 TSDoc 去掉「看板暂不读这个键」那段过时说明,改成如实描述:只画列出的泳道、按作者写的顺序,未列出的值落进Uncategorized,不写该键则每个选项一条泳道;lint 的checkKanbanLanes注释补一句:将来若扩展groupByField可带的内联选项,必须并入它读的选项表。kanban.lanes画泳道,旧说明会让读参考文档的作者(包括 AI)以为这个键没用而不去用它;写错一句给 AI 看的文档等于产品缺陷。check:generated全绿)。回滚即 revert 本 PR。packages/spec/src/ui/view.zod.ts中lanes的 TSDoc 末段;packages/lint/src/validate-list-view-field-refs.ts中checkKanbanLanes的注释;.changeset/28319-kanban-lanes-tsdoc.md。git grep -n "Lands ahead of its reader: the board draws one lane" origin/main -- packages/spec在 main 上有一处命中,本分支零命中。What changes
packages/spec/src/ui/view.zod.ts: the last paragraph of theKanbanConfigSchema.lanesTSDoc said the board drew one lane per option until the Console read the key. It now says what the board draws: the listed lanes and no others, in the order the author wrote them; a record whose value is not listed lands inUncategorized; without the key, one lane per option in the options' own order. The.describe()text was checked and already says this (no "ahead of its reader" clause), so it is unchanged.packages/lint/src/validate-list-view-field-refs.ts: thecheckKanbanLanesdocblock gains the line review rider S2 asked for: the rule reads only the option map built from inlineoptions[].value, and a futureFieldSchemakey that widens the inline options agroupByFieldmay carry must join that map, or a lane naming a widened option is reported as unknown..changeset/28319-kanban-lanes-tsdoc.md: apatchfor@objectstack/spec, because the TSDoc ships in the package (distchunks andsrc/**/*.zod.tsare in itsfiles).@objectstack/lintgets no changeset entry: its builtdistcarries none of the edited docblock (measured below).No schema, type, export or behaviour change.
Why
Since #28291 the board draws only the declared
kanban.lanes, in order. The TSDoc still told authors, and agents reading the spec source, that the board ignores the key, so an author would not use a live key.Tests
pnpm --filter @objectstack/lint exec vitest run --maxWorkers=2 validate-list-view-field-refs.test.ts: Test Files 1 passed, Tests 171 passed.pnpm --filter @objectstack/spec run typecheckandpnpm --filter @objectstack/lint run typecheck: exit 0.Verification
Local gates at head
fb157ea7(the last commit; nothing pushed after).Derived gate families: 74 derived, 73 run green, 1 NOT MEASURED
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 74 commands against the diff (2 source files + the changeset). Each ran with stdin closed and its exit code recorded before any pipe.dispatch-gates.mjs --repo objectstack-ai/objectstack --ranreconciles: "74 derived famil(ies) accounted for — 73 run, 1 NOT-MEASURED".pnpm check:dual-build-cjs-loadsexits 3 (prerequisite: it needs every package'sdist, a whole-workspace build; this diff changes comments only). CI runs it.check-plugin-teardown-shape.mjs --self-test(after fetching its pinned fixture commit) andpnpm check:lean-entry-closure(after building@objectstack/objectql).pnpm check:doc-authoring,pnpm check:issue-citations,node scripts/check-issue-citations.mjs,pnpm check:spec-docblock-symbol-anchors: all exit 0.Generated artefacts and the order's per-card gates
pnpm --filter @objectstack/spec buildthenpnpm --filter @objectstack/spec check:generated: exit 0, every artefact up to date (includingcheck:docsovercontent/docs/references/**andcheck:authorable-surfaceover the JSON schemas). The TSDoc does not reach a generated reference, so nothing was regenerated.git grepfor the old sentence across the tree (includingcontent/docs) found it only inview.zod.ts.node scripts/check-sdui-manifest.mjs: exit 0.Changeset measurement (which package ships the edited text)
pnpm --filter @objectstack/spec build, the new TSDoc sentence is inpackages/spec/dist/chunk-*.mjsandchunk-*.js, and the old one is in nodistfile;src/**/*.zod.tsalso ships. So@objectstack/specpublishes it:patch.@objectstack/lint, neither the new docblock line nor the neighbouring existing docblock sentence is inpackages/lint/dist, while a message string from the same function is (positive control:is not an option ofindist/runtime.jsanddist/index.cjs). So lint publishes nothing new.Acceptance notes
.describe()for the stale clause: it never carried one, so it is unchanged.checkKanbanLanesdocblock, which is where it went. The module'skanban.lanessection is unchanged.Human Minimum
packages/specholds no runtime logic.pnpm exec eslint --no-inline-configover the two edited files exits 0 (the repo-widepnpm lintis CI's).main, one pull request.packages/spectouched: its generated artifacts are regenerated and committed.content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.Generated by Claude Code