Repository navigation
docs(spec): the major-18 conversions docblock places the import, not the definition - #30643
Conversation
…the definition Since the per-entry split, a conversion is defined in its own module under `./entries/18/<id>.ts` and `registry.ts` only imports it. The docblock's placement bullet still told an author to define the conversion above the next entry's definition, directly above `OrderedConversion`. It now says what `scripts/conversions-major18-merge.test.ts` enforces: the module named for the `id`, and the import directly above the import of the entry that follows in the list, or after every other `./entries/18/` import when it sorts last. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L6bhgVugtCCwBs98FeR27P
📓 Docs Drift Check
What this run could not see
Coarse fallback — 170 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
|
domain:spec#2 · os-sales · session_01L6bhgVugtCCwBs98FeR27P Contract reviewServed-tier: Inputs: card #29994 (body; comments 6619509152, 6619532361, 6632322266, 6634099014, 6666793161, 6668036951), PR #30643 (body, file list, net diff against ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Each sentence against what enforces it:
Skill agreement: SKILL.md L176–177 ( Break attempts — a literal follower of the docblock against the test:
Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:spec#2 · os-sales · session_01L6bhgVugtCCwBs98FeR27P 维护者速读
席位核对ACCEPT · head
Generated by Claude Code |
Requested by Sales · project thread
domain:spec#2 · os-sales · session_01L6bhgVugtCCwBs98FeR27P
Fixes #29994
Clause-②: no
Metadata-protocol: none
维护者速读
packages/spec/src/conversions/registry.ts中MAJOR_18_CONVERSIONS头注的一条「新增转换」规则,不动任何代码行。registry.ts;现改为写独立模块、在registry.ts只加 import 与列表项,与合并测试一致。dist/不含这段文字,不发布、零运行时影响;回滚即 revert 本提交。packages/spec/src/conversions/registry.ts第 181–189 行(唯一改动的 hunk)。pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 scripts/conversions-major18-merge.test.ts,预期Tests 12 passed (12)。What changes
One bullet of the
MAJOR_18_CONVERSIONSdocblock's "To add a conversion" list, the only one the per-entry split (PR #29993) made false. The other two bullets (insert the entry where its identifier sorts; how to pickorder), the conflict explanation above them, and the closing pointer to the merge test are still true and unchanged. No code line moves.Old:
New (two bullets):
(
IDandIDENTIFIERstand for the placeholders the source writes in angle brackets.)Each sentence is taken from what
packages/spec/scripts/conversions-major18-merge.test.tsasserts, not from the card's paraphrase:MODULE_PATH(entries/18/ID.ts) anddefinitionInModule(const IDENTIFIER: MetadataConversion = {withid: 'ID',toMajor: 18, endingexport { IDENTIFIER };);placementFindings(the import that comes next is the next list entry's);definitionsTail, after the last./entries/18/import (today that is also the last import in the file, directly aboveOrderedConversion's doc comment, but the test anchors on the import, so the rule does too);It matches what
.claude/skills/spec-property-retirement/SKILL.mdteaches on main after PR #30109 (entries/TOMAJOR/ID.ts, named for theid, exported by name; the import directly above the successor entry's import).Verification
Head
6943445b89, base778aedf666.packages/spec/scripts/conversions-major18-merge.test.ts(the authority, unchanged):Test Files 1 passed (1),Tests 12 passed (12).pnpm --filter @objectstack/spec build && pnpm --filter @objectstack/spec check:generated: lockVERDICT command-exit 0; "All 14 generated artifacts are up to date".eslint --no-inline-config packages/spec/src/conversions/registry.ts: exit 0.pnpm check:doc-authoring: exit 0.skip-changeset. A comment on a non-exportedconst; measured after the build: the new and old docblock sentences hit 0 files underdist/and every otherfiles[]path, while the positive controlsMAJOR_18_CONVERSIONSandflowDecisionModeInclusiveExplicithitdist/chunks;registry.tsis not asrc/**/*.zod.tspath.Derived gate families (dispatch-gates --commands at 6943445): 67 run, exit codes captured before any pipe
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran→ "67 derived, 67 run, 0 NOT-MEASURED, 0 UNRUN" (a DERIVED zero: every line carries an exit code, none is 3).node scripts/check-adr-0087-registration.mjs --base origin/mainnode scripts/check-adr-0087-registration.mjs --self-testnode scripts/check-closing-keyword-parity.mjsnode scripts/check-closing-keyword-parity.mjs --self-testnode scripts/check-comment-mask-adoption.mjsnode scripts/check-comment-mask-adoption.mjs --self-testnode scripts/check-comment-mask-corpus.mjsnode scripts/check-dev-prereqs.mjs --self-testnode scripts/check-dts-emitted.mjs --self-testnode scripts/check-issue-citations.mjsnode scripts/check-plugin-teardown-shape.mjsnode scripts/check-plugin-teardown-shape.mjs --self-testnode scripts/ci/assert-turbo-remote-cache.mjs --self-testnode scripts/ci/plan-test-core-shards.mjs --self-testnode scripts/ci/prune-turbo-cache.mjs --self-testnode scripts/docs-audit/check-affected-docs.mjsnode scripts/docs-audit/check-drift-comment.mjspnpm --filter @objectstack/lint run check:doc-formula-expressionsturbo run build, 118/118 tasks)pnpm --filter @objectstack/spec run check:api-surfacepnpm --filter @objectstack/spec run check:browser-reachable-entriespnpm --filter @objectstack/spec run check:docspnpm --filter @objectstack/spec run check:dual-source-exportspnpm --filter @objectstack/spec run check:duration-unit-keyspnpm --filter @objectstack/spec run check:empty-statepnpm --filter @objectstack/spec run check:entry-nameabilitypnpm --filter @objectstack/spec run check:export-originspnpm --filter @objectstack/spec run check:exported-anypnpm --filter @objectstack/spec run check:livenesspnpm --filter @objectstack/spec run check:llms-txtpnpm --filter @objectstack/spec run check:skill-refspnpm --filter @objectstack/spec run check:strictness-ledgerpnpm --filter @objectstack/spec run check:upgrade-guidepnpm --filter @objectstack/spec run check:variant-docspnpm check:changeset-gate-self-testspnpm check:ci-filter-paritypnpm check:closed-ceremony-textpnpm check:cross-package-test-inputspnpm check:dispatcher-error-vocabularypnpm check:doc-authoringpnpm check:driver-memory-censuspnpm check:dts-closurepnpm check:dual-build-cjs-loadsturbo run build, 118/118 tasks)pnpm check:gitlink-declaredpnpm check:issue-citationspnpm check:keyed-text-boundspnpm check:lean-entry-closureturbo run build, 118/118 tasks)pnpm check:logger-receiver-detachpnpm check:merge-driverpnpm check:nul-bytespnpm check:org-identifierpnpm check:page-declaration-shapepnpm check:platform-object-tenancy-censuspnpm check:pm-prior-rulingspnpm check:published-filespnpm check:refd-timer-probepnpm check:registry-log-declaredpnpm check:rest-log-spy-declaredpnpm check:role-wordpnpm check:slot-lookuppnpm check:sourcemap-no-sources-contentpnpm check:spec-docblock-symbol-anchorspnpm check:spec-parsed-aliaspnpm check:system-context-censuspnpm check:test-source-aliaspnpm check:tier-file-adoptionpnpm check:undeclared-dep-importspnpm check:watch-hint-literalLocal-only families:
pnpm check:dev-prereqsexit 0;pnpm check:skill-frame-freshnessexit 0.Outside the derivation, left to CI: the 51 artifact-roster families, the 11 wide-population families, the 4 workflow-valued families, the 5 path-scheduled CI jobs and the 5 type-check lanes the tool names.
Acceptance notes
Fixes #29994closes the card.[#29987 codemod]comment above the imports (L20–23) is accurate as it stands and is left alone.🤖 Generated with Claude Code
https://claude.ai/code/session_01L6bhgVugtCCwBs98FeR27P