docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier - #13555
Conversation
…ed driver-error classifier `schema-sync-errors.ts` moved from `@objectstack/metadata` to `@objectstack/types` as `driver-error-classification.ts`, leaving three prose pointers naming a path that no longer resolves. Each is a reader's trail to the reasoning behind a driver-error verdict, so a dangling one costs the next author the thing the comment exists to give them. Repointed at the real current home, verified on `origin/main` rather than copied from the move's prose, and each keeps the historical note of where it was — the same idiom the pointers updated in the move itself already use. Comment text only: no behaviour, no published surface, no test changed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F3jdziLbAPGeceVNmSox5L
📓 Docs Drift Check
What this run could not see
Coarse fallback — 14 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
PM review — ACCEPT. Release held only on CI reaching full green.
What I checked
⛔ My own probe was wrong, and it nearly became a false accusationI grepped for the pin name as the PR body renders it — ⇒ Grepping an identifier as rendered in a PR body is a non-discriminating probe — the rendering can eat the very characters you are matching on. Quote from the source, not from the prose about the source. Zone 2 was PARTLY FALSIFIED, and that is the report's best workThe PM assumed "purely cosmetic". The seat found that two of the three files sit inside The one liberty taken, spot-checked rather than acceptedThe seat reflowed the comments (rather than keeping the edit line-count-neutral) on the argument that ADR line anchors into
The anchor was rotted before this PR and is not made worse by it. Proportionate: 18+/12− across three files is not a rewrite. I have filed the broader anchor-rot measurement separately so it is not lost with this PR's prose. Release conditionsCI at review time: 0 red, many still running. ⛔ The bar is EVERY check green, not the required subset — and Generated by Claude Code |
Fixes #13516
Three prose pointers still named
metadata/src/utils/schema-sync-errors.tsafter #13279 moved that module into@objectstack/typesasdriver-error-classification.ts. Each is a reader's trail to the reasoning behind a driver-error verdict, so a dangling one costs the next author exactly the thing the comment exists to give them.Comment text only — no behaviour, no published surface, no test changed.
The target, verified rather than copied
Confirmed against
origin/main(ff37576976) instead of taken from the card or from #13279's prose:packages/metadata/src/utils/no longer holds the file. It containshistory-cleanup.ts,lru-cache.ts,lru-cache.test.tsandmetadata-history-utils.ts, and nothing else.packages/types/src/driver-error-classification.ts, its suite atpackages/types/src/driver-error-classification.test.ts.The sweep: ten hits, three of them stale
git grep schema-sync-errorsover the whole tree returns ten hits, not three. The card's count of stale ones is nonetheless exactly right — the other seven are correct as they stand:drivers/driver-sql/src/sql-driver.ts:816drivers/driver-sql/src/sql-driver-backend-fault-envelope.test.ts:77services/service-analytics/src/analytics-service.ts:194types/src/driver-error-classification.ts:36types/src/driver-error-classification.test.ts:8types/src/unique-violation.ts:123types/src/error-leak.test.ts:141services/service-datasource/src/external-datasource-service.ts:768metadata/CHANGELOG.md:1514,:4301The repairs follow the idiom the pointers updated in #13475 already use: name the real current path, and keep the historical note of where it was.
The claims were checked, not just the paths
A comment whose claim is wrong would be a finding to file, not something to repair here. Both claims hold:
"follows an error wrapped as cause". That test name is live in the new suite, atdriver-error-classification.test.ts:63and:166(once per predicate).relation "x" does not existshape matches the classifier's. That pattern moved with the module and is intact.Load-bearing check
The three sites are prose, but the finding worth recording is that two of the three files sit inside a ratcheted gate's population:
check:doc-authoringcarries a shrink-only(file, issue-id)ledger overpackages/**inscripts/doc-authoring-prose-id.baseline.json, and bothsql-driver.tsandanalytics-service.tshave entries there. Adding#13279to those files is exactly the shape that moves a ratchet. It does not, for two reasons read from the gate rather than assumed: the leg scans string literals only and explicitly excludes comments, and it excludes*.test.tsoutright. Confirmed empirically —check:doc-authoringis green on this diff.sql-driver.ts:1064are written across the ADRs and audits, so a line-count change would shift them. Sampling first showed they are already rotted:sql-driver.tsis 16,786 lines, and ADR-0113's:4901(expectscol.notNullable()), ADR-0053's:1967and:1543, and ADR-0028's:610none of them resolve to what they name today. Onlycontent/docs/permissions/system-context.mdxis ledgered for line anchors, and none of these files appear in it. So the constraint is void, and the comments were reflowed for readability.Verification
All of the below on
159f225f94, the pushed head.node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack— 22 path-matched families plus the convention-triggered ones. All green, except two recorded honestly:check:test-completenessexits 3 = PREREQUISITE NOT MET — it grades a savedturbo run testlog and none was passed. Its own output says to record this as NOT MEASURED, not as a red.check:type-check-debtandcheck:dual-build-cjs-loadsneed the whole workspace built; not run locally, left to CI.pnpm lint— the full repo-wideeslint . --no-inline-config, not a narrowed run. Exit 0.pnpm --filter @objectstack/driver-sql --filter @objectstack/service-analytics run typecheck— bothtsc --noEmit, exit 0.sql-driver-backend-fault-envelope.test.ts—Test Files 1 passed (1),Tests 11 passed | 3 skipped (14). The three skips are the suite's own live-dialect cells with no database present; the diff touches no test code.@objectstack/service-analyticssuite —Test Files 83 passed (83),Tests 1805 passed (1805).check:nul-bytes—OK (scanned 7520 text file(s) ... no raw ASCII control bytes).Changeset
Labelled
skip-changeset. This diff publishes nothing from any package — it is comment text in three files — whichlint.ymlcalls the textbook case for that label.Generated by Claude Code
Generated by Claude Code