Skip to content

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier - #13555

Merged
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments
Aug 31, 2026
Merged

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier#13555
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13516

Three prose pointers still named metadata/src/utils/schema-sync-errors.ts after #13279 moved that module into @objectstack/types as driver-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 contains history-cleanup.ts, lru-cache.ts, lru-cache.test.ts and metadata-history-utils.ts, and nothing else.
  • The module now lives at packages/types/src/driver-error-classification.ts, its suite at packages/types/src/driver-error-classification.test.ts.

The sweep: ten hits, three of them stale

git grep schema-sync-errors over 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:

siteverdict
drivers/driver-sql/src/sql-driver.ts:816stale — repaired
drivers/driver-sql/src/sql-driver-backend-fault-envelope.test.ts:77stale — repaired
services/service-analytics/src/analytics-service.ts:194stale — repaired
types/src/driver-error-classification.ts:36correct: names the deleted file as deleted
types/src/driver-error-classification.test.ts:8correct: historical note on the move
types/src/unique-violation.ts:123correct: breadcrumb updated by #13475
types/src/error-leak.test.ts:141correct: breadcrumb updated by #13475
services/service-datasource/src/external-datasource-service.ts:768correct: breadcrumb updated by #13475
metadata/CHANGELOG.md:1514, :4301historical release record — deliberately untouched

The 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:

  • The two driver-sql sites cite a pin by name — "follows an error wrapped as cause". That test name is live in the new suite, at driver-error-classification.test.ts:63 and :166 (once per predicate).
  • The analytics site claims the anchored Postgres relation "x" does not exist shape 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-authoring carries a shrink-only (file, issue-id) ledger over packages/** in scripts/doc-authoring-prose-id.baseline.json, and both sql-driver.ts and analytics-service.ts have entries there. Adding #13279 to 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.ts outright. Confirmed empirically — check:doc-authoring is green on this diff.
  • Line anchors of the form sql-driver.ts:1064 are written across the ADRs and audits, so a line-count change would shift them. Sampling first showed they are already rotted: sql-driver.ts is 16,786 lines, and ADR-0113's :4901 (expects col.notNullable()), ADR-0053's :1967 and :1543, and ADR-0028's :610 none of them resolve to what they name today. Only content/docs/permissions/system-context.mdx is 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.

  • Gate family derived from the real change set by 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-completeness exits 3 = PREREQUISITE NOT MET — it grades a saved turbo run test log and none was passed. Its own output says to record this as NOT MEASURED, not as a red.
    • check:type-check-debt and check:dual-build-cjs-loads need the whole workspace built; not run locally, left to CI.
  • pnpm lint — the full repo-wide eslint . --no-inline-config, not a narrowed run. Exit 0.
  • pnpm --filter @objectstack/driver-sql --filter @objectstack/service-analytics run typecheck — both tsc --noEmit, exit 0.
  • sql-driver-backend-fault-envelope.test.tsTest 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-analytics suite — Test Files 83 passed (83), Tests 1805 passed (1805).
  • check:nul-bytesOK (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 — which lint.yml calls the textbook case for that label.

Generated by Claude Code


Generated by Claude Code

…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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 2 changed package(s)).

What this run could not see
  • 2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 14 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json ff3757697600591804e2135a1e58b7afaebe0a48packageMentionDocs.

@zhuangjianguoClaude

Copy link
Copy Markdown
Collaborator

PM review — ACCEPT. Release held only on CI reaching full green.

domain:engine lane PM, session_01F3jdziLbAPGeceVNmSox5L. Verified myself at head 159f225f94 against base ff37576976.

What I checked

claimverdict
the module's real homepackages/types/src/driver-error-classification.ts + its suite; packages/metadata/src/utils/ holds exactly the four other files listed
comment-text onlymeasured, not read off the title: of 30 changed lines, 0 are non-comment, non-blank
the cited pin is live✅ at exactly :63 and :166 — see the correction below
the two files are ledgered✅ both present in scripts/doc-authoring-prose-id.baseline.json
no hot-file contention✅ "No other open PR may claim the same single-writer path" → success (this lane has no gate of its own behind sql-driver.ts, so the repo's check is the reading)

⛔ My own probe was wrong, and it nearly became a false accusation

I grepped for the pin name as the PR body renders it — "follows an error wrapped as cause" — and got zero, which looked like a PR citing a test that does not exist. A positive control (41 test titles in that file) showed the probe was broken, not the claim: the real title is it('follows an error wrapped as `cause`'), and the backticks around cause were absorbed into the PR body's own markdown code span.

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 work

The PM assumed "purely cosmetic". The seat found that two of the three files sit inside check:doc-authoring's shrink-only ledger, so adding #13279 to them is exactly the shape that moves a ratchet — and then established why it does not, from the gate source and empirically, rather than from the fact that nothing went red. Finding the risk and then dismissing it on evidence is worth more than not noticing it.

The one liberty taken, spot-checked rather than accepted

The seat reflowed the comments (rather than keeping the edit line-count-neutral) on the argument that ADR line anchors into sql-driver.ts are already rotted. I checked one of the four rather than all:

  • docs/adr/0113-required-write-contract-vs-column-constraint.md:19 asserts driver-sql/sql-driver.ts:4901if (field.required) col.notNullable().
  • Line 4901 on origin/main is connection-timeout code (DEFAULT_CONNECT_TIMEOUT_MS).
  • File length 16,786 lines, matching the report exactly.

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 conditions

CI at review time: 0 red, many still running. ⛔ The bar is EVERY check green, not the required subset — and Lint & Repo Gates in particular, since it runs check:doc-authoring and is the empirical half of the ratchet argument. On full green: draft → ready, auto-merge armed, merge queue does the merging. ⛔ Never a hand-merge, never a queue bypass.


Generated by Claude Code

@zhuangjianguo
zhuangjianguo marked this pull request as ready for review August 31, 2026 00:31
@zhuangjianguo
zhuangjianguo added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 70fe548Aug 31, 2026
37 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-13516-schema-sync-errors-comments branch August 31, 2026 00:51
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sskip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Three comments still point at metadata/src/utils/schema-sync-errors.ts after #13279 moved it to @objectstack/types

2 participants

@zhuangjianguo@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier by claude[bot] · Pull Request #13555 · objectstack-ai/objectstack · GitHub
Skip to content

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier - #13555

Merged
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments
Aug 31, 2026
Merged

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier#13555
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13516

Three prose pointers still named metadata/src/utils/schema-sync-errors.ts after #13279 moved that module into @objectstack/types as driver-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 contains history-cleanup.ts, lru-cache.ts, lru-cache.test.ts and metadata-history-utils.ts, and nothing else.
  • The module now lives at packages/types/src/driver-error-classification.ts, its suite at packages/types/src/driver-error-classification.test.ts.

The sweep: ten hits, three of them stale

git grep schema-sync-errors over 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:

siteverdict
drivers/driver-sql/src/sql-driver.ts:816stale — repaired
drivers/driver-sql/src/sql-driver-backend-fault-envelope.test.ts:77stale — repaired
services/service-analytics/src/analytics-service.ts:194stale — repaired
types/src/driver-error-classification.ts:36correct: names the deleted file as deleted
types/src/driver-error-classification.test.ts:8correct: historical note on the move
types/src/unique-violation.ts:123correct: breadcrumb updated by #13475
types/src/error-leak.test.ts:141correct: breadcrumb updated by #13475
services/service-datasource/src/external-datasource-service.ts:768correct: breadcrumb updated by #13475
metadata/CHANGELOG.md:1514, :4301historical release record — deliberately untouched

The 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:

  • The two driver-sql sites cite a pin by name — "follows an error wrapped as cause". That test name is live in the new suite, at driver-error-classification.test.ts:63 and :166 (once per predicate).
  • The analytics site claims the anchored Postgres relation "x" does not exist shape 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-authoring carries a shrink-only (file, issue-id) ledger over packages/** in scripts/doc-authoring-prose-id.baseline.json, and both sql-driver.ts and analytics-service.ts have entries there. Adding #13279 to 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.ts outright. Confirmed empirically — check:doc-authoring is green on this diff.
  • Line anchors of the form sql-driver.ts:1064 are written across the ADRs and audits, so a line-count change would shift them. Sampling first showed they are already rotted: sql-driver.ts is 16,786 lines, and ADR-0113's :4901 (expects col.notNullable()), ADR-0053's :1967 and :1543, and ADR-0028's :610 none of them resolve to what they name today. Only content/docs/permissions/system-context.mdx is 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.

  • Gate family derived from the real change set by 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-completeness exits 3 = PREREQUISITE NOT MET — it grades a saved turbo run test log and none was passed. Its own output says to record this as NOT MEASURED, not as a red.
    • check:type-check-debt and check:dual-build-cjs-loads need the whole workspace built; not run locally, left to CI.
  • pnpm lint — the full repo-wide eslint . --no-inline-config, not a narrowed run. Exit 0.
  • pnpm --filter @objectstack/driver-sql --filter @objectstack/service-analytics run typecheck — both tsc --noEmit, exit 0.
  • sql-driver-backend-fault-envelope.test.tsTest 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-analytics suite — Test Files 83 passed (83), Tests 1805 passed (1805).
  • check:nul-bytesOK (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 — which lint.yml calls the textbook case for that label.

Generated by Claude Code


Generated by Claude Code

…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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 2 changed package(s)).

What this run could not see
  • 2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 14 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json ff3757697600591804e2135a1e58b7afaebe0a48packageMentionDocs.

@zhuangjianguoClaude

Copy link
Copy Markdown
Collaborator

PM review — ACCEPT. Release held only on CI reaching full green.

domain:engine lane PM, session_01F3jdziLbAPGeceVNmSox5L. Verified myself at head 159f225f94 against base ff37576976.

What I checked

claimverdict
the module's real homepackages/types/src/driver-error-classification.ts + its suite; packages/metadata/src/utils/ holds exactly the four other files listed
comment-text onlymeasured, not read off the title: of 30 changed lines, 0 are non-comment, non-blank
the cited pin is live✅ at exactly :63 and :166 — see the correction below
the two files are ledgered✅ both present in scripts/doc-authoring-prose-id.baseline.json
no hot-file contention✅ "No other open PR may claim the same single-writer path" → success (this lane has no gate of its own behind sql-driver.ts, so the repo's check is the reading)

⛔ My own probe was wrong, and it nearly became a false accusation

I grepped for the pin name as the PR body renders it — "follows an error wrapped as cause" — and got zero, which looked like a PR citing a test that does not exist. A positive control (41 test titles in that file) showed the probe was broken, not the claim: the real title is it('follows an error wrapped as `cause`'), and the backticks around cause were absorbed into the PR body's own markdown code span.

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 work

The PM assumed "purely cosmetic". The seat found that two of the three files sit inside check:doc-authoring's shrink-only ledger, so adding #13279 to them is exactly the shape that moves a ratchet — and then established why it does not, from the gate source and empirically, rather than from the fact that nothing went red. Finding the risk and then dismissing it on evidence is worth more than not noticing it.

The one liberty taken, spot-checked rather than accepted

The seat reflowed the comments (rather than keeping the edit line-count-neutral) on the argument that ADR line anchors into sql-driver.ts are already rotted. I checked one of the four rather than all:

  • docs/adr/0113-required-write-contract-vs-column-constraint.md:19 asserts driver-sql/sql-driver.ts:4901if (field.required) col.notNullable().
  • Line 4901 on origin/main is connection-timeout code (DEFAULT_CONNECT_TIMEOUT_MS).
  • File length 16,786 lines, matching the report exactly.

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 conditions

CI at review time: 0 red, many still running. ⛔ The bar is EVERY check green, not the required subset — and Lint & Repo Gates in particular, since it runs check:doc-authoring and is the empirical half of the ratchet argument. On full green: draft → ready, auto-merge armed, merge queue does the merging. ⛔ Never a hand-merge, never a queue bypass.


Generated by Claude Code

@zhuangjianguo
zhuangjianguo marked this pull request as ready for review August 31, 2026 00:31
@zhuangjianguo
zhuangjianguo added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 70fe548Aug 31, 2026
37 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-13516-schema-sync-errors-comments branch August 31, 2026 00:51
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sskip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Three comments still point at metadata/src/utils/schema-sync-errors.ts after #13279 moved it to @objectstack/types

2 participants

@zhuangjianguo@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier by claude[bot] · Pull Request #13555 · objectstack-ai/objectstack · GitHub
Skip to content

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier - #13555

Merged
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments
Aug 31, 2026
Merged

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier#13555
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13516

Three prose pointers still named metadata/src/utils/schema-sync-errors.ts after #13279 moved that module into @objectstack/types as driver-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 contains history-cleanup.ts, lru-cache.ts, lru-cache.test.ts and metadata-history-utils.ts, and nothing else.
  • The module now lives at packages/types/src/driver-error-classification.ts, its suite at packages/types/src/driver-error-classification.test.ts.

The sweep: ten hits, three of them stale

git grep schema-sync-errors over 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:

siteverdict
drivers/driver-sql/src/sql-driver.ts:816stale — repaired
drivers/driver-sql/src/sql-driver-backend-fault-envelope.test.ts:77stale — repaired
services/service-analytics/src/analytics-service.ts:194stale — repaired
types/src/driver-error-classification.ts:36correct: names the deleted file as deleted
types/src/driver-error-classification.test.ts:8correct: historical note on the move
types/src/unique-violation.ts:123correct: breadcrumb updated by #13475
types/src/error-leak.test.ts:141correct: breadcrumb updated by #13475
services/service-datasource/src/external-datasource-service.ts:768correct: breadcrumb updated by #13475
metadata/CHANGELOG.md:1514, :4301historical release record — deliberately untouched

The 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:

  • The two driver-sql sites cite a pin by name — "follows an error wrapped as cause". That test name is live in the new suite, at driver-error-classification.test.ts:63 and :166 (once per predicate).
  • The analytics site claims the anchored Postgres relation "x" does not exist shape 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-authoring carries a shrink-only (file, issue-id) ledger over packages/** in scripts/doc-authoring-prose-id.baseline.json, and both sql-driver.ts and analytics-service.ts have entries there. Adding #13279 to 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.ts outright. Confirmed empirically — check:doc-authoring is green on this diff.
  • Line anchors of the form sql-driver.ts:1064 are written across the ADRs and audits, so a line-count change would shift them. Sampling first showed they are already rotted: sql-driver.ts is 16,786 lines, and ADR-0113's :4901 (expects col.notNullable()), ADR-0053's :1967 and :1543, and ADR-0028's :610 none of them resolve to what they name today. Only content/docs/permissions/system-context.mdx is 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.

  • Gate family derived from the real change set by 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-completeness exits 3 = PREREQUISITE NOT MET — it grades a saved turbo run test log and none was passed. Its own output says to record this as NOT MEASURED, not as a red.
    • check:type-check-debt and check:dual-build-cjs-loads need the whole workspace built; not run locally, left to CI.
  • pnpm lint — the full repo-wide eslint . --no-inline-config, not a narrowed run. Exit 0.
  • pnpm --filter @objectstack/driver-sql --filter @objectstack/service-analytics run typecheck — both tsc --noEmit, exit 0.
  • sql-driver-backend-fault-envelope.test.tsTest 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-analytics suite — Test Files 83 passed (83), Tests 1805 passed (1805).
  • check:nul-bytesOK (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 — which lint.yml calls the textbook case for that label.

Generated by Claude Code


Generated by Claude Code

…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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 2 changed package(s)).

What this run could not see
  • 2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 14 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json ff3757697600591804e2135a1e58b7afaebe0a48packageMentionDocs.

@zhuangjianguoClaude

Copy link
Copy Markdown
Collaborator

PM review — ACCEPT. Release held only on CI reaching full green.

domain:engine lane PM, session_01F3jdziLbAPGeceVNmSox5L. Verified myself at head 159f225f94 against base ff37576976.

What I checked

claimverdict
the module's real homepackages/types/src/driver-error-classification.ts + its suite; packages/metadata/src/utils/ holds exactly the four other files listed
comment-text onlymeasured, not read off the title: of 30 changed lines, 0 are non-comment, non-blank
the cited pin is live✅ at exactly :63 and :166 — see the correction below
the two files are ledgered✅ both present in scripts/doc-authoring-prose-id.baseline.json
no hot-file contention✅ "No other open PR may claim the same single-writer path" → success (this lane has no gate of its own behind sql-driver.ts, so the repo's check is the reading)

⛔ My own probe was wrong, and it nearly became a false accusation

I grepped for the pin name as the PR body renders it — "follows an error wrapped as cause" — and got zero, which looked like a PR citing a test that does not exist. A positive control (41 test titles in that file) showed the probe was broken, not the claim: the real title is it('follows an error wrapped as `cause`'), and the backticks around cause were absorbed into the PR body's own markdown code span.

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 work

The PM assumed "purely cosmetic". The seat found that two of the three files sit inside check:doc-authoring's shrink-only ledger, so adding #13279 to them is exactly the shape that moves a ratchet — and then established why it does not, from the gate source and empirically, rather than from the fact that nothing went red. Finding the risk and then dismissing it on evidence is worth more than not noticing it.

The one liberty taken, spot-checked rather than accepted

The seat reflowed the comments (rather than keeping the edit line-count-neutral) on the argument that ADR line anchors into sql-driver.ts are already rotted. I checked one of the four rather than all:

  • docs/adr/0113-required-write-contract-vs-column-constraint.md:19 asserts driver-sql/sql-driver.ts:4901if (field.required) col.notNullable().
  • Line 4901 on origin/main is connection-timeout code (DEFAULT_CONNECT_TIMEOUT_MS).
  • File length 16,786 lines, matching the report exactly.

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 conditions

CI at review time: 0 red, many still running. ⛔ The bar is EVERY check green, not the required subset — and Lint & Repo Gates in particular, since it runs check:doc-authoring and is the empirical half of the ratchet argument. On full green: draft → ready, auto-merge armed, merge queue does the merging. ⛔ Never a hand-merge, never a queue bypass.


Generated by Claude Code

@zhuangjianguo
zhuangjianguo marked this pull request as ready for review August 31, 2026 00:31
@zhuangjianguo
zhuangjianguo added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 70fe548Aug 31, 2026
37 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-13516-schema-sync-errors-comments branch August 31, 2026 00:51
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sskip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Three comments still point at metadata/src/utils/schema-sync-errors.ts after #13279 moved it to @objectstack/types

2 participants

@zhuangjianguo@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier by claude[bot] · Pull Request #13555 · objectstack-ai/objectstack · GitHub
Skip to content

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier - #13555

Merged
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments
Aug 31, 2026
Merged

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier#13555
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13516

Three prose pointers still named metadata/src/utils/schema-sync-errors.ts after #13279 moved that module into @objectstack/types as driver-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 contains history-cleanup.ts, lru-cache.ts, lru-cache.test.ts and metadata-history-utils.ts, and nothing else.
  • The module now lives at packages/types/src/driver-error-classification.ts, its suite at packages/types/src/driver-error-classification.test.ts.

The sweep: ten hits, three of them stale

git grep schema-sync-errors over 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:

siteverdict
drivers/driver-sql/src/sql-driver.ts:816stale — repaired
drivers/driver-sql/src/sql-driver-backend-fault-envelope.test.ts:77stale — repaired
services/service-analytics/src/analytics-service.ts:194stale — repaired
types/src/driver-error-classification.ts:36correct: names the deleted file as deleted
types/src/driver-error-classification.test.ts:8correct: historical note on the move
types/src/unique-violation.ts:123correct: breadcrumb updated by #13475
types/src/error-leak.test.ts:141correct: breadcrumb updated by #13475
services/service-datasource/src/external-datasource-service.ts:768correct: breadcrumb updated by #13475
metadata/CHANGELOG.md:1514, :4301historical release record — deliberately untouched

The 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:

  • The two driver-sql sites cite a pin by name — "follows an error wrapped as cause". That test name is live in the new suite, at driver-error-classification.test.ts:63 and :166 (once per predicate).
  • The analytics site claims the anchored Postgres relation "x" does not exist shape 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-authoring carries a shrink-only (file, issue-id) ledger over packages/** in scripts/doc-authoring-prose-id.baseline.json, and both sql-driver.ts and analytics-service.ts have entries there. Adding #13279 to 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.ts outright. Confirmed empirically — check:doc-authoring is green on this diff.
  • Line anchors of the form sql-driver.ts:1064 are written across the ADRs and audits, so a line-count change would shift them. Sampling first showed they are already rotted: sql-driver.ts is 16,786 lines, and ADR-0113's :4901 (expects col.notNullable()), ADR-0053's :1967 and :1543, and ADR-0028's :610 none of them resolve to what they name today. Only content/docs/permissions/system-context.mdx is 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.

  • Gate family derived from the real change set by 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-completeness exits 3 = PREREQUISITE NOT MET — it grades a saved turbo run test log and none was passed. Its own output says to record this as NOT MEASURED, not as a red.
    • check:type-check-debt and check:dual-build-cjs-loads need the whole workspace built; not run locally, left to CI.
  • pnpm lint — the full repo-wide eslint . --no-inline-config, not a narrowed run. Exit 0.
  • pnpm --filter @objectstack/driver-sql --filter @objectstack/service-analytics run typecheck — both tsc --noEmit, exit 0.
  • sql-driver-backend-fault-envelope.test.tsTest 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-analytics suite — Test Files 83 passed (83), Tests 1805 passed (1805).
  • check:nul-bytesOK (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 — which lint.yml calls the textbook case for that label.

Generated by Claude Code


Generated by Claude Code

…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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 2 changed package(s)).

What this run could not see
  • 2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 14 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json ff3757697600591804e2135a1e58b7afaebe0a48packageMentionDocs.

@zhuangjianguoClaude

Copy link
Copy Markdown
Collaborator

PM review — ACCEPT. Release held only on CI reaching full green.

domain:engine lane PM, session_01F3jdziLbAPGeceVNmSox5L. Verified myself at head 159f225f94 against base ff37576976.

What I checked

claimverdict
the module's real homepackages/types/src/driver-error-classification.ts + its suite; packages/metadata/src/utils/ holds exactly the four other files listed
comment-text onlymeasured, not read off the title: of 30 changed lines, 0 are non-comment, non-blank
the cited pin is live✅ at exactly :63 and :166 — see the correction below
the two files are ledgered✅ both present in scripts/doc-authoring-prose-id.baseline.json
no hot-file contention✅ "No other open PR may claim the same single-writer path" → success (this lane has no gate of its own behind sql-driver.ts, so the repo's check is the reading)

⛔ My own probe was wrong, and it nearly became a false accusation

I grepped for the pin name as the PR body renders it — "follows an error wrapped as cause" — and got zero, which looked like a PR citing a test that does not exist. A positive control (41 test titles in that file) showed the probe was broken, not the claim: the real title is it('follows an error wrapped as `cause`'), and the backticks around cause were absorbed into the PR body's own markdown code span.

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 work

The PM assumed "purely cosmetic". The seat found that two of the three files sit inside check:doc-authoring's shrink-only ledger, so adding #13279 to them is exactly the shape that moves a ratchet — and then established why it does not, from the gate source and empirically, rather than from the fact that nothing went red. Finding the risk and then dismissing it on evidence is worth more than not noticing it.

The one liberty taken, spot-checked rather than accepted

The seat reflowed the comments (rather than keeping the edit line-count-neutral) on the argument that ADR line anchors into sql-driver.ts are already rotted. I checked one of the four rather than all:

  • docs/adr/0113-required-write-contract-vs-column-constraint.md:19 asserts driver-sql/sql-driver.ts:4901if (field.required) col.notNullable().
  • Line 4901 on origin/main is connection-timeout code (DEFAULT_CONNECT_TIMEOUT_MS).
  • File length 16,786 lines, matching the report exactly.

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 conditions

CI at review time: 0 red, many still running. ⛔ The bar is EVERY check green, not the required subset — and Lint & Repo Gates in particular, since it runs check:doc-authoring and is the empirical half of the ratchet argument. On full green: draft → ready, auto-merge armed, merge queue does the merging. ⛔ Never a hand-merge, never a queue bypass.


Generated by Claude Code

@zhuangjianguo
zhuangjianguo marked this pull request as ready for review August 31, 2026 00:31
@zhuangjianguo
zhuangjianguo added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 70fe548Aug 31, 2026
37 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-13516-schema-sync-errors-comments branch August 31, 2026 00:51
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sskip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Three comments still point at metadata/src/utils/schema-sync-errors.ts after #13279 moved it to @objectstack/types

2 participants

@zhuangjianguo@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier by claude[bot] · Pull Request #13555 · objectstack-ai/objectstack · GitHub
Skip to content

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier - #13555

Merged
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments
Aug 31, 2026
Merged

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier#13555
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13516

Three prose pointers still named metadata/src/utils/schema-sync-errors.ts after #13279 moved that module into @objectstack/types as driver-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 contains history-cleanup.ts, lru-cache.ts, lru-cache.test.ts and metadata-history-utils.ts, and nothing else.
  • The module now lives at packages/types/src/driver-error-classification.ts, its suite at packages/types/src/driver-error-classification.test.ts.

The sweep: ten hits, three of them stale

git grep schema-sync-errors over 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:

siteverdict
drivers/driver-sql/src/sql-driver.ts:816stale — repaired
drivers/driver-sql/src/sql-driver-backend-fault-envelope.test.ts:77stale — repaired
services/service-analytics/src/analytics-service.ts:194stale — repaired
types/src/driver-error-classification.ts:36correct: names the deleted file as deleted
types/src/driver-error-classification.test.ts:8correct: historical note on the move
types/src/unique-violation.ts:123correct: breadcrumb updated by #13475
types/src/error-leak.test.ts:141correct: breadcrumb updated by #13475
services/service-datasource/src/external-datasource-service.ts:768correct: breadcrumb updated by #13475
metadata/CHANGELOG.md:1514, :4301historical release record — deliberately untouched

The 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:

  • The two driver-sql sites cite a pin by name — "follows an error wrapped as cause". That test name is live in the new suite, at driver-error-classification.test.ts:63 and :166 (once per predicate).
  • The analytics site claims the anchored Postgres relation "x" does not exist shape 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-authoring carries a shrink-only (file, issue-id) ledger over packages/** in scripts/doc-authoring-prose-id.baseline.json, and both sql-driver.ts and analytics-service.ts have entries there. Adding #13279 to 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.ts outright. Confirmed empirically — check:doc-authoring is green on this diff.
  • Line anchors of the form sql-driver.ts:1064 are written across the ADRs and audits, so a line-count change would shift them. Sampling first showed they are already rotted: sql-driver.ts is 16,786 lines, and ADR-0113's :4901 (expects col.notNullable()), ADR-0053's :1967 and :1543, and ADR-0028's :610 none of them resolve to what they name today. Only content/docs/permissions/system-context.mdx is 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.

  • Gate family derived from the real change set by 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-completeness exits 3 = PREREQUISITE NOT MET — it grades a saved turbo run test log and none was passed. Its own output says to record this as NOT MEASURED, not as a red.
    • check:type-check-debt and check:dual-build-cjs-loads need the whole workspace built; not run locally, left to CI.
  • pnpm lint — the full repo-wide eslint . --no-inline-config, not a narrowed run. Exit 0.
  • pnpm --filter @objectstack/driver-sql --filter @objectstack/service-analytics run typecheck — both tsc --noEmit, exit 0.
  • sql-driver-backend-fault-envelope.test.tsTest 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-analytics suite — Test Files 83 passed (83), Tests 1805 passed (1805).
  • check:nul-bytesOK (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 — which lint.yml calls the textbook case for that label.

Generated by Claude Code


Generated by Claude Code

…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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 2 changed package(s)).

What this run could not see
  • 2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 14 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json ff3757697600591804e2135a1e58b7afaebe0a48packageMentionDocs.

@zhuangjianguoClaude

Copy link
Copy Markdown
Collaborator

PM review — ACCEPT. Release held only on CI reaching full green.

domain:engine lane PM, session_01F3jdziLbAPGeceVNmSox5L. Verified myself at head 159f225f94 against base ff37576976.

What I checked

claimverdict
the module's real homepackages/types/src/driver-error-classification.ts + its suite; packages/metadata/src/utils/ holds exactly the four other files listed
comment-text onlymeasured, not read off the title: of 30 changed lines, 0 are non-comment, non-blank
the cited pin is live✅ at exactly :63 and :166 — see the correction below
the two files are ledgered✅ both present in scripts/doc-authoring-prose-id.baseline.json
no hot-file contention✅ "No other open PR may claim the same single-writer path" → success (this lane has no gate of its own behind sql-driver.ts, so the repo's check is the reading)

⛔ My own probe was wrong, and it nearly became a false accusation

I grepped for the pin name as the PR body renders it — "follows an error wrapped as cause" — and got zero, which looked like a PR citing a test that does not exist. A positive control (41 test titles in that file) showed the probe was broken, not the claim: the real title is it('follows an error wrapped as `cause`'), and the backticks around cause were absorbed into the PR body's own markdown code span.

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 work

The PM assumed "purely cosmetic". The seat found that two of the three files sit inside check:doc-authoring's shrink-only ledger, so adding #13279 to them is exactly the shape that moves a ratchet — and then established why it does not, from the gate source and empirically, rather than from the fact that nothing went red. Finding the risk and then dismissing it on evidence is worth more than not noticing it.

The one liberty taken, spot-checked rather than accepted

The seat reflowed the comments (rather than keeping the edit line-count-neutral) on the argument that ADR line anchors into sql-driver.ts are already rotted. I checked one of the four rather than all:

  • docs/adr/0113-required-write-contract-vs-column-constraint.md:19 asserts driver-sql/sql-driver.ts:4901if (field.required) col.notNullable().
  • Line 4901 on origin/main is connection-timeout code (DEFAULT_CONNECT_TIMEOUT_MS).
  • File length 16,786 lines, matching the report exactly.

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 conditions

CI at review time: 0 red, many still running. ⛔ The bar is EVERY check green, not the required subset — and Lint & Repo Gates in particular, since it runs check:doc-authoring and is the empirical half of the ratchet argument. On full green: draft → ready, auto-merge armed, merge queue does the merging. ⛔ Never a hand-merge, never a queue bypass.


Generated by Claude Code

@zhuangjianguo
zhuangjianguo marked this pull request as ready for review August 31, 2026 00:31
@zhuangjianguo
zhuangjianguo added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 70fe548Aug 31, 2026
37 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-13516-schema-sync-errors-comments branch August 31, 2026 00:51
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sskip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Three comments still point at metadata/src/utils/schema-sync-errors.ts after #13279 moved it to @objectstack/types

2 participants

@zhuangjianguo@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier by claude[bot] · Pull Request #13555 · objectstack-ai/objectstack · GitHub
Skip to content

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier - #13555

Merged
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments
Aug 31, 2026
Merged

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier#13555
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13516

Three prose pointers still named metadata/src/utils/schema-sync-errors.ts after #13279 moved that module into @objectstack/types as driver-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 contains history-cleanup.ts, lru-cache.ts, lru-cache.test.ts and metadata-history-utils.ts, and nothing else.
  • The module now lives at packages/types/src/driver-error-classification.ts, its suite at packages/types/src/driver-error-classification.test.ts.

The sweep: ten hits, three of them stale

git grep schema-sync-errors over 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:

siteverdict
drivers/driver-sql/src/sql-driver.ts:816stale — repaired
drivers/driver-sql/src/sql-driver-backend-fault-envelope.test.ts:77stale — repaired
services/service-analytics/src/analytics-service.ts:194stale — repaired
types/src/driver-error-classification.ts:36correct: names the deleted file as deleted
types/src/driver-error-classification.test.ts:8correct: historical note on the move
types/src/unique-violation.ts:123correct: breadcrumb updated by #13475
types/src/error-leak.test.ts:141correct: breadcrumb updated by #13475
services/service-datasource/src/external-datasource-service.ts:768correct: breadcrumb updated by #13475
metadata/CHANGELOG.md:1514, :4301historical release record — deliberately untouched

The 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:

  • The two driver-sql sites cite a pin by name — "follows an error wrapped as cause". That test name is live in the new suite, at driver-error-classification.test.ts:63 and :166 (once per predicate).
  • The analytics site claims the anchored Postgres relation "x" does not exist shape 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-authoring carries a shrink-only (file, issue-id) ledger over packages/** in scripts/doc-authoring-prose-id.baseline.json, and both sql-driver.ts and analytics-service.ts have entries there. Adding #13279 to 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.ts outright. Confirmed empirically — check:doc-authoring is green on this diff.
  • Line anchors of the form sql-driver.ts:1064 are written across the ADRs and audits, so a line-count change would shift them. Sampling first showed they are already rotted: sql-driver.ts is 16,786 lines, and ADR-0113's :4901 (expects col.notNullable()), ADR-0053's :1967 and :1543, and ADR-0028's :610 none of them resolve to what they name today. Only content/docs/permissions/system-context.mdx is 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.

  • Gate family derived from the real change set by 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-completeness exits 3 = PREREQUISITE NOT MET — it grades a saved turbo run test log and none was passed. Its own output says to record this as NOT MEASURED, not as a red.
    • check:type-check-debt and check:dual-build-cjs-loads need the whole workspace built; not run locally, left to CI.
  • pnpm lint — the full repo-wide eslint . --no-inline-config, not a narrowed run. Exit 0.
  • pnpm --filter @objectstack/driver-sql --filter @objectstack/service-analytics run typecheck — both tsc --noEmit, exit 0.
  • sql-driver-backend-fault-envelope.test.tsTest 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-analytics suite — Test Files 83 passed (83), Tests 1805 passed (1805).
  • check:nul-bytesOK (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 — which lint.yml calls the textbook case for that label.

Generated by Claude Code


Generated by Claude Code

…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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 2 changed package(s)).

What this run could not see
  • 2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 14 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json ff3757697600591804e2135a1e58b7afaebe0a48packageMentionDocs.

@zhuangjianguoClaude

Copy link
Copy Markdown
Collaborator

PM review — ACCEPT. Release held only on CI reaching full green.

domain:engine lane PM, session_01F3jdziLbAPGeceVNmSox5L. Verified myself at head 159f225f94 against base ff37576976.

What I checked

claimverdict
the module's real homepackages/types/src/driver-error-classification.ts + its suite; packages/metadata/src/utils/ holds exactly the four other files listed
comment-text onlymeasured, not read off the title: of 30 changed lines, 0 are non-comment, non-blank
the cited pin is live✅ at exactly :63 and :166 — see the correction below
the two files are ledgered✅ both present in scripts/doc-authoring-prose-id.baseline.json
no hot-file contention✅ "No other open PR may claim the same single-writer path" → success (this lane has no gate of its own behind sql-driver.ts, so the repo's check is the reading)

⛔ My own probe was wrong, and it nearly became a false accusation

I grepped for the pin name as the PR body renders it — "follows an error wrapped as cause" — and got zero, which looked like a PR citing a test that does not exist. A positive control (41 test titles in that file) showed the probe was broken, not the claim: the real title is it('follows an error wrapped as `cause`'), and the backticks around cause were absorbed into the PR body's own markdown code span.

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 work

The PM assumed "purely cosmetic". The seat found that two of the three files sit inside check:doc-authoring's shrink-only ledger, so adding #13279 to them is exactly the shape that moves a ratchet — and then established why it does not, from the gate source and empirically, rather than from the fact that nothing went red. Finding the risk and then dismissing it on evidence is worth more than not noticing it.

The one liberty taken, spot-checked rather than accepted

The seat reflowed the comments (rather than keeping the edit line-count-neutral) on the argument that ADR line anchors into sql-driver.ts are already rotted. I checked one of the four rather than all:

  • docs/adr/0113-required-write-contract-vs-column-constraint.md:19 asserts driver-sql/sql-driver.ts:4901if (field.required) col.notNullable().
  • Line 4901 on origin/main is connection-timeout code (DEFAULT_CONNECT_TIMEOUT_MS).
  • File length 16,786 lines, matching the report exactly.

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 conditions

CI at review time: 0 red, many still running. ⛔ The bar is EVERY check green, not the required subset — and Lint & Repo Gates in particular, since it runs check:doc-authoring and is the empirical half of the ratchet argument. On full green: draft → ready, auto-merge armed, merge queue does the merging. ⛔ Never a hand-merge, never a queue bypass.


Generated by Claude Code

@zhuangjianguo
zhuangjianguo marked this pull request as ready for review August 31, 2026 00:31
@zhuangjianguo
zhuangjianguo added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 70fe548Aug 31, 2026
37 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-13516-schema-sync-errors-comments branch August 31, 2026 00:51
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sskip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Three comments still point at metadata/src/utils/schema-sync-errors.ts after #13279 moved it to @objectstack/types

2 participants

@zhuangjianguo@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier by claude[bot] · Pull Request #13555 · objectstack-ai/objectstack · GitHub
Skip to content

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier - #13555

Merged
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments
Aug 31, 2026
Merged

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier#13555
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13516

Three prose pointers still named metadata/src/utils/schema-sync-errors.ts after #13279 moved that module into @objectstack/types as driver-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 contains history-cleanup.ts, lru-cache.ts, lru-cache.test.ts and metadata-history-utils.ts, and nothing else.
  • The module now lives at packages/types/src/driver-error-classification.ts, its suite at packages/types/src/driver-error-classification.test.ts.

The sweep: ten hits, three of them stale

git grep schema-sync-errors over 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:

siteverdict
drivers/driver-sql/src/sql-driver.ts:816stale — repaired
drivers/driver-sql/src/sql-driver-backend-fault-envelope.test.ts:77stale — repaired
services/service-analytics/src/analytics-service.ts:194stale — repaired
types/src/driver-error-classification.ts:36correct: names the deleted file as deleted
types/src/driver-error-classification.test.ts:8correct: historical note on the move
types/src/unique-violation.ts:123correct: breadcrumb updated by #13475
types/src/error-leak.test.ts:141correct: breadcrumb updated by #13475
services/service-datasource/src/external-datasource-service.ts:768correct: breadcrumb updated by #13475
metadata/CHANGELOG.md:1514, :4301historical release record — deliberately untouched

The 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:

  • The two driver-sql sites cite a pin by name — "follows an error wrapped as cause". That test name is live in the new suite, at driver-error-classification.test.ts:63 and :166 (once per predicate).
  • The analytics site claims the anchored Postgres relation "x" does not exist shape 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-authoring carries a shrink-only (file, issue-id) ledger over packages/** in scripts/doc-authoring-prose-id.baseline.json, and both sql-driver.ts and analytics-service.ts have entries there. Adding #13279 to 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.ts outright. Confirmed empirically — check:doc-authoring is green on this diff.
  • Line anchors of the form sql-driver.ts:1064 are written across the ADRs and audits, so a line-count change would shift them. Sampling first showed they are already rotted: sql-driver.ts is 16,786 lines, and ADR-0113's :4901 (expects col.notNullable()), ADR-0053's :1967 and :1543, and ADR-0028's :610 none of them resolve to what they name today. Only content/docs/permissions/system-context.mdx is 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.

  • Gate family derived from the real change set by 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-completeness exits 3 = PREREQUISITE NOT MET — it grades a saved turbo run test log and none was passed. Its own output says to record this as NOT MEASURED, not as a red.
    • check:type-check-debt and check:dual-build-cjs-loads need the whole workspace built; not run locally, left to CI.
  • pnpm lint — the full repo-wide eslint . --no-inline-config, not a narrowed run. Exit 0.
  • pnpm --filter @objectstack/driver-sql --filter @objectstack/service-analytics run typecheck — both tsc --noEmit, exit 0.
  • sql-driver-backend-fault-envelope.test.tsTest 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-analytics suite — Test Files 83 passed (83), Tests 1805 passed (1805).
  • check:nul-bytesOK (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 — which lint.yml calls the textbook case for that label.

Generated by Claude Code


Generated by Claude Code

…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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 2 changed package(s)).

What this run could not see
  • 2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 14 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json ff3757697600591804e2135a1e58b7afaebe0a48packageMentionDocs.

@zhuangjianguoClaude

Copy link
Copy Markdown
Collaborator

PM review — ACCEPT. Release held only on CI reaching full green.

domain:engine lane PM, session_01F3jdziLbAPGeceVNmSox5L. Verified myself at head 159f225f94 against base ff37576976.

What I checked

claimverdict
the module's real homepackages/types/src/driver-error-classification.ts + its suite; packages/metadata/src/utils/ holds exactly the four other files listed
comment-text onlymeasured, not read off the title: of 30 changed lines, 0 are non-comment, non-blank
the cited pin is live✅ at exactly :63 and :166 — see the correction below
the two files are ledgered✅ both present in scripts/doc-authoring-prose-id.baseline.json
no hot-file contention✅ "No other open PR may claim the same single-writer path" → success (this lane has no gate of its own behind sql-driver.ts, so the repo's check is the reading)

⛔ My own probe was wrong, and it nearly became a false accusation

I grepped for the pin name as the PR body renders it — "follows an error wrapped as cause" — and got zero, which looked like a PR citing a test that does not exist. A positive control (41 test titles in that file) showed the probe was broken, not the claim: the real title is it('follows an error wrapped as `cause`'), and the backticks around cause were absorbed into the PR body's own markdown code span.

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 work

The PM assumed "purely cosmetic". The seat found that two of the three files sit inside check:doc-authoring's shrink-only ledger, so adding #13279 to them is exactly the shape that moves a ratchet — and then established why it does not, from the gate source and empirically, rather than from the fact that nothing went red. Finding the risk and then dismissing it on evidence is worth more than not noticing it.

The one liberty taken, spot-checked rather than accepted

The seat reflowed the comments (rather than keeping the edit line-count-neutral) on the argument that ADR line anchors into sql-driver.ts are already rotted. I checked one of the four rather than all:

  • docs/adr/0113-required-write-contract-vs-column-constraint.md:19 asserts driver-sql/sql-driver.ts:4901if (field.required) col.notNullable().
  • Line 4901 on origin/main is connection-timeout code (DEFAULT_CONNECT_TIMEOUT_MS).
  • File length 16,786 lines, matching the report exactly.

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 conditions

CI at review time: 0 red, many still running. ⛔ The bar is EVERY check green, not the required subset — and Lint & Repo Gates in particular, since it runs check:doc-authoring and is the empirical half of the ratchet argument. On full green: draft → ready, auto-merge armed, merge queue does the merging. ⛔ Never a hand-merge, never a queue bypass.


Generated by Claude Code

@zhuangjianguo
zhuangjianguo marked this pull request as ready for review August 31, 2026 00:31
@zhuangjianguo
zhuangjianguo added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 70fe548Aug 31, 2026
37 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-13516-schema-sync-errors-comments branch August 31, 2026 00:51
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sskip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Three comments still point at metadata/src/utils/schema-sync-errors.ts after #13279 moved it to @objectstack/types

2 participants

@zhuangjianguo@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier by claude[bot] · Pull Request #13555 · objectstack-ai/objectstack · GitHub
Skip to content

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier - #13555

Merged
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments
Aug 31, 2026
Merged

docs(driver-sql,service-analytics): repoint three comments at the moved driver-error classifier#13555
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13516-schema-sync-errors-comments

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13516

Three prose pointers still named metadata/src/utils/schema-sync-errors.ts after #13279 moved that module into @objectstack/types as driver-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 contains history-cleanup.ts, lru-cache.ts, lru-cache.test.ts and metadata-history-utils.ts, and nothing else.
  • The module now lives at packages/types/src/driver-error-classification.ts, its suite at packages/types/src/driver-error-classification.test.ts.

The sweep: ten hits, three of them stale

git grep schema-sync-errors over 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:

siteverdict
drivers/driver-sql/src/sql-driver.ts:816stale — repaired
drivers/driver-sql/src/sql-driver-backend-fault-envelope.test.ts:77stale — repaired
services/service-analytics/src/analytics-service.ts:194stale — repaired
types/src/driver-error-classification.ts:36correct: names the deleted file as deleted
types/src/driver-error-classification.test.ts:8correct: historical note on the move
types/src/unique-violation.ts:123correct: breadcrumb updated by #13475
types/src/error-leak.test.ts:141correct: breadcrumb updated by #13475
services/service-datasource/src/external-datasource-service.ts:768correct: breadcrumb updated by #13475
metadata/CHANGELOG.md:1514, :4301historical release record — deliberately untouched

The 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:

  • The two driver-sql sites cite a pin by name — "follows an error wrapped as cause". That test name is live in the new suite, at driver-error-classification.test.ts:63 and :166 (once per predicate).
  • The analytics site claims the anchored Postgres relation "x" does not exist shape 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-authoring carries a shrink-only (file, issue-id) ledger over packages/** in scripts/doc-authoring-prose-id.baseline.json, and both sql-driver.ts and analytics-service.ts have entries there. Adding #13279 to 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.ts outright. Confirmed empirically — check:doc-authoring is green on this diff.
  • Line anchors of the form sql-driver.ts:1064 are written across the ADRs and audits, so a line-count change would shift them. Sampling first showed they are already rotted: sql-driver.ts is 16,786 lines, and ADR-0113's :4901 (expects col.notNullable()), ADR-0053's :1967 and :1543, and ADR-0028's :610 none of them resolve to what they name today. Only content/docs/permissions/system-context.mdx is 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.

  • Gate family derived from the real change set by 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-completeness exits 3 = PREREQUISITE NOT MET — it grades a saved turbo run test log and none was passed. Its own output says to record this as NOT MEASURED, not as a red.
    • check:type-check-debt and check:dual-build-cjs-loads need the whole workspace built; not run locally, left to CI.
  • pnpm lint — the full repo-wide eslint . --no-inline-config, not a narrowed run. Exit 0.
  • pnpm --filter @objectstack/driver-sql --filter @objectstack/service-analytics run typecheck — both tsc --noEmit, exit 0.
  • sql-driver-backend-fault-envelope.test.tsTest 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-analytics suite — Test Files 83 passed (83), Tests 1805 passed (1805).
  • check:nul-bytesOK (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 — which lint.yml calls the textbook case for that label.

Generated by Claude Code


Generated by Claude Code

…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
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 2 changed package(s)).

What this run could not see
  • 2 changed file(s) yielded no anchor (packages/drivers/driver-sql/src/sql-driver.ts, packages/services/service-analytics/src/analytics-service.ts) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 14 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json ff3757697600591804e2135a1e58b7afaebe0a48packageMentionDocs.

@zhuangjianguoClaude

Copy link
Copy Markdown
Collaborator

PM review — ACCEPT. Release held only on CI reaching full green.

domain:engine lane PM, session_01F3jdziLbAPGeceVNmSox5L. Verified myself at head 159f225f94 against base ff37576976.

What I checked

claimverdict
the module's real homepackages/types/src/driver-error-classification.ts + its suite; packages/metadata/src/utils/ holds exactly the four other files listed
comment-text onlymeasured, not read off the title: of 30 changed lines, 0 are non-comment, non-blank
the cited pin is live✅ at exactly :63 and :166 — see the correction below
the two files are ledgered✅ both present in scripts/doc-authoring-prose-id.baseline.json
no hot-file contention✅ "No other open PR may claim the same single-writer path" → success (this lane has no gate of its own behind sql-driver.ts, so the repo's check is the reading)

⛔ My own probe was wrong, and it nearly became a false accusation

I grepped for the pin name as the PR body renders it — "follows an error wrapped as cause" — and got zero, which looked like a PR citing a test that does not exist. A positive control (41 test titles in that file) showed the probe was broken, not the claim: the real title is it('follows an error wrapped as `cause`'), and the backticks around cause were absorbed into the PR body's own markdown code span.

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 work

The PM assumed "purely cosmetic". The seat found that two of the three files sit inside check:doc-authoring's shrink-only ledger, so adding #13279 to them is exactly the shape that moves a ratchet — and then established why it does not, from the gate source and empirically, rather than from the fact that nothing went red. Finding the risk and then dismissing it on evidence is worth more than not noticing it.

The one liberty taken, spot-checked rather than accepted

The seat reflowed the comments (rather than keeping the edit line-count-neutral) on the argument that ADR line anchors into sql-driver.ts are already rotted. I checked one of the four rather than all:

  • docs/adr/0113-required-write-contract-vs-column-constraint.md:19 asserts driver-sql/sql-driver.ts:4901if (field.required) col.notNullable().
  • Line 4901 on origin/main is connection-timeout code (DEFAULT_CONNECT_TIMEOUT_MS).
  • File length 16,786 lines, matching the report exactly.

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 conditions

CI at review time: 0 red, many still running. ⛔ The bar is EVERY check green, not the required subset — and Lint & Repo Gates in particular, since it runs check:doc-authoring and is the empirical half of the ratchet argument. On full green: draft → ready, auto-merge armed, merge queue does the merging. ⛔ Never a hand-merge, never a queue bypass.


Generated by Claude Code

@zhuangjianguo
zhuangjianguo marked this pull request as ready for review August 31, 2026 00:31
@zhuangjianguo
zhuangjianguo added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 70fe548Aug 31, 2026
37 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-13516-schema-sync-errors-comments branch August 31, 2026 00:51
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sskip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Three comments still point at metadata/src/utils/schema-sync-errors.ts after #13279 moved it to @objectstack/types

2 participants

@zhuangjianguo@claude