docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service - #14525

Merged
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock
Sep 2, 2026
Merged

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service#14525
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14019

Prose only. One TSDoc block in packages/objectql/src/metadata-facade.ts, plus its changeset.

What was wrong

The class docblock said MetadataFacade is "Registered as the 'metadata' kernel service".
Sixty lines down the same file, registerObjectBothPlaces' header says the opposite —
nothing installs a MetadataFacade into that slot — and the second statement is the true
one. The false half is load-bearing: a reader grepping for who fills the metadata slot
lands on the class docblock first and stops there.

The docblock now says what the class is (an injectable IMetadataService over a
SchemaRegistry, exported from this package's root and core entrypoints for a downstream
host that chooses to install it) and what it is not (installed into the 'metadata'
slot by anything in this repository), names the two real fillers, and points at the
registerObjectBothPlaces header so the two statements cannot be read apart.

Premise re-verified on this branch, not taken from the card

CheckResult on 329608eb0
git grep -n "registerService('metadata'" -- packagesexactly one non-test site: packages/metadata/src/plugin.ts:365, registering this.manager
positive control: git grep -c "registerService(" -- packageswide hits (e.g. packages/core/src/kernel.ts:5) — the pattern engine does see this tree, so a zero above would have meant something
variable-key pathpackages/core/src/kernel.ts:270 (preInjectCoreFallbacks) and :303 (validateSystemRequirements) register CORE_FALLBACK_FACTORIES.metadata, which is createMemoryMetadata (packages/core/src/fallbacks/index.ts:41)
git grep -n "new MetadataFacade" -- packagestest files only; no production construction site

One drift from the card's own text, recorded rather than silently corrected: the manager
registration is at plugin.ts:365 here, not :353. Substance unchanged.

The dist/*.d.ts measurement (PM assumption 2 — CONFIRMED)

Built with pnpm --filter '@objectstack/objectql^...' build && pnpm --filter @objectstack/objectql build
(under the shared verify lock; VERDICT command-exit 0), then grepped the emitted declarations:

  • New phrase — the sentence "Nothing in this repository installs a MetadataFacade": 1 hit in
    dist/util-BKgrGIUi.d.ts, 0 in dist/index.d.ts / dist/core.d.ts.
  • Positive control — the sentence the rewrite deliberately keeps ("multi-kernel servers
    can give every kernel its own…"): 1 hit, same file, 0 in the other two. So the zeroes
    above are about which file carries the declaration, not about TSDoc being stripped.
  • Negative control — the removed false sentence: absent from the whole dist/ tree.
  • Reachability: dist/index.d.ts and dist/core.d.ts both re-export M as MetadataFacade
    from ./util-BKgrGIUi.js, types is dist/index.d.ts, and files is ["dist", …].

⇒ The class docblock does ship to consumers — it is what an editor hover shows on an
imported MetadataFacade — so this is a reader-visible change in the published package and
a @objectstack/objectql: patch changeset is owed. It is in the diff; no skip-changeset
label is claimed.

Clause-②: no, read from this diff

git diff over the source file: 18 added / 5 removed lines, every one a * TSDoc
comment-body line
— the complement grep (changed lines that are not comment-body lines)
returns nothing. No emitted runtime byte, no public type, no accept/reject behaviour, no
gate move. No ablation is owed for a comment-only diff, and none was run.

Scope

No registration change. Installing a MetadataFacade into the metadata slot is behaviour
and belongs to #13331's solution space (a priority:p0 card, mentioned here only as the
card whose premise this docblock likely produced — nothing about it is claimed or changed
by this PR).

The registerObjectBothPlaces header at :134 was not edited: it already carries the
true statement, and the rewritten class docblock now agrees with it and points at it, which
is the one-voice requirement the triage set. Editing it too would have been churn on a
sentence that was never wrong.

Verification (all at 329608eb0, the final commit)

  • Gate family re-derived on this tree after the last commit:
    node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands → 30 commands.
    All 30 run; 27 exit 0, and 3 report NOT MEASURED in their own words rather than a red:
    check-test-completeness.mjs (exit 3 — needs a saved turbo run test log; "It is not a red,
    and there is nothing here to fix"), scripts/pm/check-half-states.mjs (exit 3 — needs
    repo-scoped REST egress this container does not have), and check:dual-build-cjs-loads
    (exit 3 — "PREREQUISITE NOT MET … Run pnpm build first"; only objectql's closure is built
    locally, CI builds the workspace).
  • Always-runs named in the dispatch: pnpm lintwhole repo, exit 0 in 74s (no narrowing
    needed), pnpm check:nul-bytes exit 0 (7922 files scanned), pnpm check:error-status-conformance
    exit 0, pnpm --filter @objectstack/objectql typecheck exit 0 (source, scripts, and the
    test-layer project — 44 test files).
  • Every exit code above was captured after a redirect, never through a pipe.
  • Declared narrowing: objectql's full vitest run was not run locally. Grounds: every
    changed line is inside a TSDoc block (proof above), no test or gate reads this file as text
    (git grep for the removed sentence returns nothing tree-wide), the package builds and
    type-checks green, and CI's Test Core runs the suite on this PR. The box was also running
    another seat's full objectql suite under the shared lock at the time.

The derivation printed a STALE TREE warning (this branch is 4 commits behind origin/main,
one family file changed in that range: scripts/measure-durability-swallow-family.mjs).
Inspected: that diff only repoints the durability self-test's "dark control" example file and
rewrites its prose — it does not change which families my two paths map to, and re-deriving
after git fetch origin main produced a byte-identical command list.

🤖 Generated with Claude Code

https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68


Generated by Claude Code

…file's own true statement
The class docblock claimed the facade is "Registered as the 'metadata' kernel
service"; sixty lines later, registerObjectBothPlaces' header states the
opposite and is the true one. Re-measured on this tree: the only non-test
ctx.registerService('metadata', ...) site registers MetadataPlugin's manager,
the kernel's core-fallback pre-injection registers createMemoryMetadata, and
new MetadataFacade(...) appears nowhere outside tests.
Rewrite the class docblock to say what the class is (an injectable
IMetadataService over a SchemaRegistry, exported for downstream hosts) and
what it is not (installed into the 'metadata' slot by anything here), and
bind the two statements so the next reader cannot pick the wrong one. Prose
only; no registration and no behaviour change.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
…rection
The class docblock reaches the published declaration chunk that
dist/index.d.ts and dist/core.d.ts re-export MetadataFacade from, so the
correction is a reader-visible change in the published package.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 — 16 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 8e9e63087c6846da3f669c85e529e74f657e73d1packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance (engine execution seat, session_0112hMx9hjJ9BgB28X97DS68) — flipped to ready at 13:10Z and auto-merge (squash) armed at 13:11Z on head 329608eb0 (the 10:36Z flip window was missed while the seat's session was held by a rate limit; nothing about the PR changed in between).


Generated by Claude Code

Merged via the queue into main with commit b8562ffSep 2, 2026
35 checks passed
@os-musk
os-musk deleted the claude/issue-14019-metadata-facade-docblock branch September 2, 2026 13:33
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/stooling

Projects

None yet

2 participants

@os-musk@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service - #14525

Merged
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock
Sep 2, 2026
Merged

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service#14525
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14019

Prose only. One TSDoc block in packages/objectql/src/metadata-facade.ts, plus its changeset.

What was wrong

The class docblock said MetadataFacade is "Registered as the 'metadata' kernel service".
Sixty lines down the same file, registerObjectBothPlaces' header says the opposite —
nothing installs a MetadataFacade into that slot — and the second statement is the true
one. The false half is load-bearing: a reader grepping for who fills the metadata slot
lands on the class docblock first and stops there.

The docblock now says what the class is (an injectable IMetadataService over a
SchemaRegistry, exported from this package's root and core entrypoints for a downstream
host that chooses to install it) and what it is not (installed into the 'metadata'
slot by anything in this repository), names the two real fillers, and points at the
registerObjectBothPlaces header so the two statements cannot be read apart.

Premise re-verified on this branch, not taken from the card

CheckResult on 329608eb0
git grep -n "registerService('metadata'" -- packagesexactly one non-test site: packages/metadata/src/plugin.ts:365, registering this.manager
positive control: git grep -c "registerService(" -- packageswide hits (e.g. packages/core/src/kernel.ts:5) — the pattern engine does see this tree, so a zero above would have meant something
variable-key pathpackages/core/src/kernel.ts:270 (preInjectCoreFallbacks) and :303 (validateSystemRequirements) register CORE_FALLBACK_FACTORIES.metadata, which is createMemoryMetadata (packages/core/src/fallbacks/index.ts:41)
git grep -n "new MetadataFacade" -- packagestest files only; no production construction site

One drift from the card's own text, recorded rather than silently corrected: the manager
registration is at plugin.ts:365 here, not :353. Substance unchanged.

The dist/*.d.ts measurement (PM assumption 2 — CONFIRMED)

Built with pnpm --filter '@objectstack/objectql^...' build && pnpm --filter @objectstack/objectql build
(under the shared verify lock; VERDICT command-exit 0), then grepped the emitted declarations:

  • New phrase — the sentence "Nothing in this repository installs a MetadataFacade": 1 hit in
    dist/util-BKgrGIUi.d.ts, 0 in dist/index.d.ts / dist/core.d.ts.
  • Positive control — the sentence the rewrite deliberately keeps ("multi-kernel servers
    can give every kernel its own…"): 1 hit, same file, 0 in the other two. So the zeroes
    above are about which file carries the declaration, not about TSDoc being stripped.
  • Negative control — the removed false sentence: absent from the whole dist/ tree.
  • Reachability: dist/index.d.ts and dist/core.d.ts both re-export M as MetadataFacade
    from ./util-BKgrGIUi.js, types is dist/index.d.ts, and files is ["dist", …].

⇒ The class docblock does ship to consumers — it is what an editor hover shows on an
imported MetadataFacade — so this is a reader-visible change in the published package and
a @objectstack/objectql: patch changeset is owed. It is in the diff; no skip-changeset
label is claimed.

Clause-②: no, read from this diff

git diff over the source file: 18 added / 5 removed lines, every one a * TSDoc
comment-body line
— the complement grep (changed lines that are not comment-body lines)
returns nothing. No emitted runtime byte, no public type, no accept/reject behaviour, no
gate move. No ablation is owed for a comment-only diff, and none was run.

Scope

No registration change. Installing a MetadataFacade into the metadata slot is behaviour
and belongs to #13331's solution space (a priority:p0 card, mentioned here only as the
card whose premise this docblock likely produced — nothing about it is claimed or changed
by this PR).

The registerObjectBothPlaces header at :134 was not edited: it already carries the
true statement, and the rewritten class docblock now agrees with it and points at it, which
is the one-voice requirement the triage set. Editing it too would have been churn on a
sentence that was never wrong.

Verification (all at 329608eb0, the final commit)

  • Gate family re-derived on this tree after the last commit:
    node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands → 30 commands.
    All 30 run; 27 exit 0, and 3 report NOT MEASURED in their own words rather than a red:
    check-test-completeness.mjs (exit 3 — needs a saved turbo run test log; "It is not a red,
    and there is nothing here to fix"), scripts/pm/check-half-states.mjs (exit 3 — needs
    repo-scoped REST egress this container does not have), and check:dual-build-cjs-loads
    (exit 3 — "PREREQUISITE NOT MET … Run pnpm build first"; only objectql's closure is built
    locally, CI builds the workspace).
  • Always-runs named in the dispatch: pnpm lintwhole repo, exit 0 in 74s (no narrowing
    needed), pnpm check:nul-bytes exit 0 (7922 files scanned), pnpm check:error-status-conformance
    exit 0, pnpm --filter @objectstack/objectql typecheck exit 0 (source, scripts, and the
    test-layer project — 44 test files).
  • Every exit code above was captured after a redirect, never through a pipe.
  • Declared narrowing: objectql's full vitest run was not run locally. Grounds: every
    changed line is inside a TSDoc block (proof above), no test or gate reads this file as text
    (git grep for the removed sentence returns nothing tree-wide), the package builds and
    type-checks green, and CI's Test Core runs the suite on this PR. The box was also running
    another seat's full objectql suite under the shared lock at the time.

The derivation printed a STALE TREE warning (this branch is 4 commits behind origin/main,
one family file changed in that range: scripts/measure-durability-swallow-family.mjs).
Inspected: that diff only repoints the durability self-test's "dark control" example file and
rewrites its prose — it does not change which families my two paths map to, and re-deriving
after git fetch origin main produced a byte-identical command list.

🤖 Generated with Claude Code

https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68


Generated by Claude Code

…file's own true statement
The class docblock claimed the facade is "Registered as the 'metadata' kernel
service"; sixty lines later, registerObjectBothPlaces' header states the
opposite and is the true one. Re-measured on this tree: the only non-test
ctx.registerService('metadata', ...) site registers MetadataPlugin's manager,
the kernel's core-fallback pre-injection registers createMemoryMetadata, and
new MetadataFacade(...) appears nowhere outside tests.
Rewrite the class docblock to say what the class is (an injectable
IMetadataService over a SchemaRegistry, exported for downstream hosts) and
what it is not (installed into the 'metadata' slot by anything here), and
bind the two statements so the next reader cannot pick the wrong one. Prose
only; no registration and no behaviour change.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
…rection
The class docblock reaches the published declaration chunk that
dist/index.d.ts and dist/core.d.ts re-export MetadataFacade from, so the
correction is a reader-visible change in the published package.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 — 16 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 8e9e63087c6846da3f669c85e529e74f657e73d1packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance (engine execution seat, session_0112hMx9hjJ9BgB28X97DS68) — flipped to ready at 13:10Z and auto-merge (squash) armed at 13:11Z on head 329608eb0 (the 10:36Z flip window was missed while the seat's session was held by a rate limit; nothing about the PR changed in between).


Generated by Claude Code

Merged via the queue into main with commit b8562ffSep 2, 2026
35 checks passed
@os-musk
os-musk deleted the claude/issue-14019-metadata-facade-docblock branch September 2, 2026 13:33
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/stooling

Projects

None yet

2 participants

@os-musk@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service - #14525

Merged
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock
Sep 2, 2026
Merged

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service#14525
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14019

Prose only. One TSDoc block in packages/objectql/src/metadata-facade.ts, plus its changeset.

What was wrong

The class docblock said MetadataFacade is "Registered as the 'metadata' kernel service".
Sixty lines down the same file, registerObjectBothPlaces' header says the opposite —
nothing installs a MetadataFacade into that slot — and the second statement is the true
one. The false half is load-bearing: a reader grepping for who fills the metadata slot
lands on the class docblock first and stops there.

The docblock now says what the class is (an injectable IMetadataService over a
SchemaRegistry, exported from this package's root and core entrypoints for a downstream
host that chooses to install it) and what it is not (installed into the 'metadata'
slot by anything in this repository), names the two real fillers, and points at the
registerObjectBothPlaces header so the two statements cannot be read apart.

Premise re-verified on this branch, not taken from the card

CheckResult on 329608eb0
git grep -n "registerService('metadata'" -- packagesexactly one non-test site: packages/metadata/src/plugin.ts:365, registering this.manager
positive control: git grep -c "registerService(" -- packageswide hits (e.g. packages/core/src/kernel.ts:5) — the pattern engine does see this tree, so a zero above would have meant something
variable-key pathpackages/core/src/kernel.ts:270 (preInjectCoreFallbacks) and :303 (validateSystemRequirements) register CORE_FALLBACK_FACTORIES.metadata, which is createMemoryMetadata (packages/core/src/fallbacks/index.ts:41)
git grep -n "new MetadataFacade" -- packagestest files only; no production construction site

One drift from the card's own text, recorded rather than silently corrected: the manager
registration is at plugin.ts:365 here, not :353. Substance unchanged.

The dist/*.d.ts measurement (PM assumption 2 — CONFIRMED)

Built with pnpm --filter '@objectstack/objectql^...' build && pnpm --filter @objectstack/objectql build
(under the shared verify lock; VERDICT command-exit 0), then grepped the emitted declarations:

  • New phrase — the sentence "Nothing in this repository installs a MetadataFacade": 1 hit in
    dist/util-BKgrGIUi.d.ts, 0 in dist/index.d.ts / dist/core.d.ts.
  • Positive control — the sentence the rewrite deliberately keeps ("multi-kernel servers
    can give every kernel its own…"): 1 hit, same file, 0 in the other two. So the zeroes
    above are about which file carries the declaration, not about TSDoc being stripped.
  • Negative control — the removed false sentence: absent from the whole dist/ tree.
  • Reachability: dist/index.d.ts and dist/core.d.ts both re-export M as MetadataFacade
    from ./util-BKgrGIUi.js, types is dist/index.d.ts, and files is ["dist", …].

⇒ The class docblock does ship to consumers — it is what an editor hover shows on an
imported MetadataFacade — so this is a reader-visible change in the published package and
a @objectstack/objectql: patch changeset is owed. It is in the diff; no skip-changeset
label is claimed.

Clause-②: no, read from this diff

git diff over the source file: 18 added / 5 removed lines, every one a * TSDoc
comment-body line
— the complement grep (changed lines that are not comment-body lines)
returns nothing. No emitted runtime byte, no public type, no accept/reject behaviour, no
gate move. No ablation is owed for a comment-only diff, and none was run.

Scope

No registration change. Installing a MetadataFacade into the metadata slot is behaviour
and belongs to #13331's solution space (a priority:p0 card, mentioned here only as the
card whose premise this docblock likely produced — nothing about it is claimed or changed
by this PR).

The registerObjectBothPlaces header at :134 was not edited: it already carries the
true statement, and the rewritten class docblock now agrees with it and points at it, which
is the one-voice requirement the triage set. Editing it too would have been churn on a
sentence that was never wrong.

Verification (all at 329608eb0, the final commit)

  • Gate family re-derived on this tree after the last commit:
    node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands → 30 commands.
    All 30 run; 27 exit 0, and 3 report NOT MEASURED in their own words rather than a red:
    check-test-completeness.mjs (exit 3 — needs a saved turbo run test log; "It is not a red,
    and there is nothing here to fix"), scripts/pm/check-half-states.mjs (exit 3 — needs
    repo-scoped REST egress this container does not have), and check:dual-build-cjs-loads
    (exit 3 — "PREREQUISITE NOT MET … Run pnpm build first"; only objectql's closure is built
    locally, CI builds the workspace).
  • Always-runs named in the dispatch: pnpm lintwhole repo, exit 0 in 74s (no narrowing
    needed), pnpm check:nul-bytes exit 0 (7922 files scanned), pnpm check:error-status-conformance
    exit 0, pnpm --filter @objectstack/objectql typecheck exit 0 (source, scripts, and the
    test-layer project — 44 test files).
  • Every exit code above was captured after a redirect, never through a pipe.
  • Declared narrowing: objectql's full vitest run was not run locally. Grounds: every
    changed line is inside a TSDoc block (proof above), no test or gate reads this file as text
    (git grep for the removed sentence returns nothing tree-wide), the package builds and
    type-checks green, and CI's Test Core runs the suite on this PR. The box was also running
    another seat's full objectql suite under the shared lock at the time.

The derivation printed a STALE TREE warning (this branch is 4 commits behind origin/main,
one family file changed in that range: scripts/measure-durability-swallow-family.mjs).
Inspected: that diff only repoints the durability self-test's "dark control" example file and
rewrites its prose — it does not change which families my two paths map to, and re-deriving
after git fetch origin main produced a byte-identical command list.

🤖 Generated with Claude Code

https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68


Generated by Claude Code

…file's own true statement
The class docblock claimed the facade is "Registered as the 'metadata' kernel
service"; sixty lines later, registerObjectBothPlaces' header states the
opposite and is the true one. Re-measured on this tree: the only non-test
ctx.registerService('metadata', ...) site registers MetadataPlugin's manager,
the kernel's core-fallback pre-injection registers createMemoryMetadata, and
new MetadataFacade(...) appears nowhere outside tests.
Rewrite the class docblock to say what the class is (an injectable
IMetadataService over a SchemaRegistry, exported for downstream hosts) and
what it is not (installed into the 'metadata' slot by anything here), and
bind the two statements so the next reader cannot pick the wrong one. Prose
only; no registration and no behaviour change.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
…rection
The class docblock reaches the published declaration chunk that
dist/index.d.ts and dist/core.d.ts re-export MetadataFacade from, so the
correction is a reader-visible change in the published package.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 — 16 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 8e9e63087c6846da3f669c85e529e74f657e73d1packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance (engine execution seat, session_0112hMx9hjJ9BgB28X97DS68) — flipped to ready at 13:10Z and auto-merge (squash) armed at 13:11Z on head 329608eb0 (the 10:36Z flip window was missed while the seat's session was held by a rate limit; nothing about the PR changed in between).


Generated by Claude Code

Merged via the queue into main with commit b8562ffSep 2, 2026
35 checks passed
@os-musk
os-musk deleted the claude/issue-14019-metadata-facade-docblock branch September 2, 2026 13:33
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/stooling

Projects

None yet

2 participants

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

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service - #14525

Merged
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock
Sep 2, 2026
Merged

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service#14525
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14019

Prose only. One TSDoc block in packages/objectql/src/metadata-facade.ts, plus its changeset.

What was wrong

The class docblock said MetadataFacade is "Registered as the 'metadata' kernel service".
Sixty lines down the same file, registerObjectBothPlaces' header says the opposite —
nothing installs a MetadataFacade into that slot — and the second statement is the true
one. The false half is load-bearing: a reader grepping for who fills the metadata slot
lands on the class docblock first and stops there.

The docblock now says what the class is (an injectable IMetadataService over a
SchemaRegistry, exported from this package's root and core entrypoints for a downstream
host that chooses to install it) and what it is not (installed into the 'metadata'
slot by anything in this repository), names the two real fillers, and points at the
registerObjectBothPlaces header so the two statements cannot be read apart.

Premise re-verified on this branch, not taken from the card

CheckResult on 329608eb0
git grep -n "registerService('metadata'" -- packagesexactly one non-test site: packages/metadata/src/plugin.ts:365, registering this.manager
positive control: git grep -c "registerService(" -- packageswide hits (e.g. packages/core/src/kernel.ts:5) — the pattern engine does see this tree, so a zero above would have meant something
variable-key pathpackages/core/src/kernel.ts:270 (preInjectCoreFallbacks) and :303 (validateSystemRequirements) register CORE_FALLBACK_FACTORIES.metadata, which is createMemoryMetadata (packages/core/src/fallbacks/index.ts:41)
git grep -n "new MetadataFacade" -- packagestest files only; no production construction site

One drift from the card's own text, recorded rather than silently corrected: the manager
registration is at plugin.ts:365 here, not :353. Substance unchanged.

The dist/*.d.ts measurement (PM assumption 2 — CONFIRMED)

Built with pnpm --filter '@objectstack/objectql^...' build && pnpm --filter @objectstack/objectql build
(under the shared verify lock; VERDICT command-exit 0), then grepped the emitted declarations:

  • New phrase — the sentence "Nothing in this repository installs a MetadataFacade": 1 hit in
    dist/util-BKgrGIUi.d.ts, 0 in dist/index.d.ts / dist/core.d.ts.
  • Positive control — the sentence the rewrite deliberately keeps ("multi-kernel servers
    can give every kernel its own…"): 1 hit, same file, 0 in the other two. So the zeroes
    above are about which file carries the declaration, not about TSDoc being stripped.
  • Negative control — the removed false sentence: absent from the whole dist/ tree.
  • Reachability: dist/index.d.ts and dist/core.d.ts both re-export M as MetadataFacade
    from ./util-BKgrGIUi.js, types is dist/index.d.ts, and files is ["dist", …].

⇒ The class docblock does ship to consumers — it is what an editor hover shows on an
imported MetadataFacade — so this is a reader-visible change in the published package and
a @objectstack/objectql: patch changeset is owed. It is in the diff; no skip-changeset
label is claimed.

Clause-②: no, read from this diff

git diff over the source file: 18 added / 5 removed lines, every one a * TSDoc
comment-body line
— the complement grep (changed lines that are not comment-body lines)
returns nothing. No emitted runtime byte, no public type, no accept/reject behaviour, no
gate move. No ablation is owed for a comment-only diff, and none was run.

Scope

No registration change. Installing a MetadataFacade into the metadata slot is behaviour
and belongs to #13331's solution space (a priority:p0 card, mentioned here only as the
card whose premise this docblock likely produced — nothing about it is claimed or changed
by this PR).

The registerObjectBothPlaces header at :134 was not edited: it already carries the
true statement, and the rewritten class docblock now agrees with it and points at it, which
is the one-voice requirement the triage set. Editing it too would have been churn on a
sentence that was never wrong.

Verification (all at 329608eb0, the final commit)

  • Gate family re-derived on this tree after the last commit:
    node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands → 30 commands.
    All 30 run; 27 exit 0, and 3 report NOT MEASURED in their own words rather than a red:
    check-test-completeness.mjs (exit 3 — needs a saved turbo run test log; "It is not a red,
    and there is nothing here to fix"), scripts/pm/check-half-states.mjs (exit 3 — needs
    repo-scoped REST egress this container does not have), and check:dual-build-cjs-loads
    (exit 3 — "PREREQUISITE NOT MET … Run pnpm build first"; only objectql's closure is built
    locally, CI builds the workspace).
  • Always-runs named in the dispatch: pnpm lintwhole repo, exit 0 in 74s (no narrowing
    needed), pnpm check:nul-bytes exit 0 (7922 files scanned), pnpm check:error-status-conformance
    exit 0, pnpm --filter @objectstack/objectql typecheck exit 0 (source, scripts, and the
    test-layer project — 44 test files).
  • Every exit code above was captured after a redirect, never through a pipe.
  • Declared narrowing: objectql's full vitest run was not run locally. Grounds: every
    changed line is inside a TSDoc block (proof above), no test or gate reads this file as text
    (git grep for the removed sentence returns nothing tree-wide), the package builds and
    type-checks green, and CI's Test Core runs the suite on this PR. The box was also running
    another seat's full objectql suite under the shared lock at the time.

The derivation printed a STALE TREE warning (this branch is 4 commits behind origin/main,
one family file changed in that range: scripts/measure-durability-swallow-family.mjs).
Inspected: that diff only repoints the durability self-test's "dark control" example file and
rewrites its prose — it does not change which families my two paths map to, and re-deriving
after git fetch origin main produced a byte-identical command list.

🤖 Generated with Claude Code

https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68


Generated by Claude Code

…file's own true statement
The class docblock claimed the facade is "Registered as the 'metadata' kernel
service"; sixty lines later, registerObjectBothPlaces' header states the
opposite and is the true one. Re-measured on this tree: the only non-test
ctx.registerService('metadata', ...) site registers MetadataPlugin's manager,
the kernel's core-fallback pre-injection registers createMemoryMetadata, and
new MetadataFacade(...) appears nowhere outside tests.
Rewrite the class docblock to say what the class is (an injectable
IMetadataService over a SchemaRegistry, exported for downstream hosts) and
what it is not (installed into the 'metadata' slot by anything here), and
bind the two statements so the next reader cannot pick the wrong one. Prose
only; no registration and no behaviour change.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
…rection
The class docblock reaches the published declaration chunk that
dist/index.d.ts and dist/core.d.ts re-export MetadataFacade from, so the
correction is a reader-visible change in the published package.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 — 16 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 8e9e63087c6846da3f669c85e529e74f657e73d1packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance (engine execution seat, session_0112hMx9hjJ9BgB28X97DS68) — flipped to ready at 13:10Z and auto-merge (squash) armed at 13:11Z on head 329608eb0 (the 10:36Z flip window was missed while the seat's session was held by a rate limit; nothing about the PR changed in between).


Generated by Claude Code

Merged via the queue into main with commit b8562ffSep 2, 2026
35 checks passed
@os-musk
os-musk deleted the claude/issue-14019-metadata-facade-docblock branch September 2, 2026 13:33
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/stooling

Projects

None yet

2 participants

@os-musk@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service - #14525

Merged
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock
Sep 2, 2026
Merged

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service#14525
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14019

Prose only. One TSDoc block in packages/objectql/src/metadata-facade.ts, plus its changeset.

What was wrong

The class docblock said MetadataFacade is "Registered as the 'metadata' kernel service".
Sixty lines down the same file, registerObjectBothPlaces' header says the opposite —
nothing installs a MetadataFacade into that slot — and the second statement is the true
one. The false half is load-bearing: a reader grepping for who fills the metadata slot
lands on the class docblock first and stops there.

The docblock now says what the class is (an injectable IMetadataService over a
SchemaRegistry, exported from this package's root and core entrypoints for a downstream
host that chooses to install it) and what it is not (installed into the 'metadata'
slot by anything in this repository), names the two real fillers, and points at the
registerObjectBothPlaces header so the two statements cannot be read apart.

Premise re-verified on this branch, not taken from the card

CheckResult on 329608eb0
git grep -n "registerService('metadata'" -- packagesexactly one non-test site: packages/metadata/src/plugin.ts:365, registering this.manager
positive control: git grep -c "registerService(" -- packageswide hits (e.g. packages/core/src/kernel.ts:5) — the pattern engine does see this tree, so a zero above would have meant something
variable-key pathpackages/core/src/kernel.ts:270 (preInjectCoreFallbacks) and :303 (validateSystemRequirements) register CORE_FALLBACK_FACTORIES.metadata, which is createMemoryMetadata (packages/core/src/fallbacks/index.ts:41)
git grep -n "new MetadataFacade" -- packagestest files only; no production construction site

One drift from the card's own text, recorded rather than silently corrected: the manager
registration is at plugin.ts:365 here, not :353. Substance unchanged.

The dist/*.d.ts measurement (PM assumption 2 — CONFIRMED)

Built with pnpm --filter '@objectstack/objectql^...' build && pnpm --filter @objectstack/objectql build
(under the shared verify lock; VERDICT command-exit 0), then grepped the emitted declarations:

  • New phrase — the sentence "Nothing in this repository installs a MetadataFacade": 1 hit in
    dist/util-BKgrGIUi.d.ts, 0 in dist/index.d.ts / dist/core.d.ts.
  • Positive control — the sentence the rewrite deliberately keeps ("multi-kernel servers
    can give every kernel its own…"): 1 hit, same file, 0 in the other two. So the zeroes
    above are about which file carries the declaration, not about TSDoc being stripped.
  • Negative control — the removed false sentence: absent from the whole dist/ tree.
  • Reachability: dist/index.d.ts and dist/core.d.ts both re-export M as MetadataFacade
    from ./util-BKgrGIUi.js, types is dist/index.d.ts, and files is ["dist", …].

⇒ The class docblock does ship to consumers — it is what an editor hover shows on an
imported MetadataFacade — so this is a reader-visible change in the published package and
a @objectstack/objectql: patch changeset is owed. It is in the diff; no skip-changeset
label is claimed.

Clause-②: no, read from this diff

git diff over the source file: 18 added / 5 removed lines, every one a * TSDoc
comment-body line
— the complement grep (changed lines that are not comment-body lines)
returns nothing. No emitted runtime byte, no public type, no accept/reject behaviour, no
gate move. No ablation is owed for a comment-only diff, and none was run.

Scope

No registration change. Installing a MetadataFacade into the metadata slot is behaviour
and belongs to #13331's solution space (a priority:p0 card, mentioned here only as the
card whose premise this docblock likely produced — nothing about it is claimed or changed
by this PR).

The registerObjectBothPlaces header at :134 was not edited: it already carries the
true statement, and the rewritten class docblock now agrees with it and points at it, which
is the one-voice requirement the triage set. Editing it too would have been churn on a
sentence that was never wrong.

Verification (all at 329608eb0, the final commit)

  • Gate family re-derived on this tree after the last commit:
    node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands → 30 commands.
    All 30 run; 27 exit 0, and 3 report NOT MEASURED in their own words rather than a red:
    check-test-completeness.mjs (exit 3 — needs a saved turbo run test log; "It is not a red,
    and there is nothing here to fix"), scripts/pm/check-half-states.mjs (exit 3 — needs
    repo-scoped REST egress this container does not have), and check:dual-build-cjs-loads
    (exit 3 — "PREREQUISITE NOT MET … Run pnpm build first"; only objectql's closure is built
    locally, CI builds the workspace).
  • Always-runs named in the dispatch: pnpm lintwhole repo, exit 0 in 74s (no narrowing
    needed), pnpm check:nul-bytes exit 0 (7922 files scanned), pnpm check:error-status-conformance
    exit 0, pnpm --filter @objectstack/objectql typecheck exit 0 (source, scripts, and the
    test-layer project — 44 test files).
  • Every exit code above was captured after a redirect, never through a pipe.
  • Declared narrowing: objectql's full vitest run was not run locally. Grounds: every
    changed line is inside a TSDoc block (proof above), no test or gate reads this file as text
    (git grep for the removed sentence returns nothing tree-wide), the package builds and
    type-checks green, and CI's Test Core runs the suite on this PR. The box was also running
    another seat's full objectql suite under the shared lock at the time.

The derivation printed a STALE TREE warning (this branch is 4 commits behind origin/main,
one family file changed in that range: scripts/measure-durability-swallow-family.mjs).
Inspected: that diff only repoints the durability self-test's "dark control" example file and
rewrites its prose — it does not change which families my two paths map to, and re-deriving
after git fetch origin main produced a byte-identical command list.

🤖 Generated with Claude Code

https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68


Generated by Claude Code

…file's own true statement
The class docblock claimed the facade is "Registered as the 'metadata' kernel
service"; sixty lines later, registerObjectBothPlaces' header states the
opposite and is the true one. Re-measured on this tree: the only non-test
ctx.registerService('metadata', ...) site registers MetadataPlugin's manager,
the kernel's core-fallback pre-injection registers createMemoryMetadata, and
new MetadataFacade(...) appears nowhere outside tests.
Rewrite the class docblock to say what the class is (an injectable
IMetadataService over a SchemaRegistry, exported for downstream hosts) and
what it is not (installed into the 'metadata' slot by anything here), and
bind the two statements so the next reader cannot pick the wrong one. Prose
only; no registration and no behaviour change.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
…rection
The class docblock reaches the published declaration chunk that
dist/index.d.ts and dist/core.d.ts re-export MetadataFacade from, so the
correction is a reader-visible change in the published package.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 — 16 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 8e9e63087c6846da3f669c85e529e74f657e73d1packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance (engine execution seat, session_0112hMx9hjJ9BgB28X97DS68) — flipped to ready at 13:10Z and auto-merge (squash) armed at 13:11Z on head 329608eb0 (the 10:36Z flip window was missed while the seat's session was held by a rate limit; nothing about the PR changed in between).


Generated by Claude Code

Merged via the queue into main with commit b8562ffSep 2, 2026
35 checks passed
@os-musk
os-musk deleted the claude/issue-14019-metadata-facade-docblock branch September 2, 2026 13:33
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/stooling

Projects

None yet

2 participants

@os-musk@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service - #14525

Merged
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock
Sep 2, 2026
Merged

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service#14525
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14019

Prose only. One TSDoc block in packages/objectql/src/metadata-facade.ts, plus its changeset.

What was wrong

The class docblock said MetadataFacade is "Registered as the 'metadata' kernel service".
Sixty lines down the same file, registerObjectBothPlaces' header says the opposite —
nothing installs a MetadataFacade into that slot — and the second statement is the true
one. The false half is load-bearing: a reader grepping for who fills the metadata slot
lands on the class docblock first and stops there.

The docblock now says what the class is (an injectable IMetadataService over a
SchemaRegistry, exported from this package's root and core entrypoints for a downstream
host that chooses to install it) and what it is not (installed into the 'metadata'
slot by anything in this repository), names the two real fillers, and points at the
registerObjectBothPlaces header so the two statements cannot be read apart.

Premise re-verified on this branch, not taken from the card

CheckResult on 329608eb0
git grep -n "registerService('metadata'" -- packagesexactly one non-test site: packages/metadata/src/plugin.ts:365, registering this.manager
positive control: git grep -c "registerService(" -- packageswide hits (e.g. packages/core/src/kernel.ts:5) — the pattern engine does see this tree, so a zero above would have meant something
variable-key pathpackages/core/src/kernel.ts:270 (preInjectCoreFallbacks) and :303 (validateSystemRequirements) register CORE_FALLBACK_FACTORIES.metadata, which is createMemoryMetadata (packages/core/src/fallbacks/index.ts:41)
git grep -n "new MetadataFacade" -- packagestest files only; no production construction site

One drift from the card's own text, recorded rather than silently corrected: the manager
registration is at plugin.ts:365 here, not :353. Substance unchanged.

The dist/*.d.ts measurement (PM assumption 2 — CONFIRMED)

Built with pnpm --filter '@objectstack/objectql^...' build && pnpm --filter @objectstack/objectql build
(under the shared verify lock; VERDICT command-exit 0), then grepped the emitted declarations:

  • New phrase — the sentence "Nothing in this repository installs a MetadataFacade": 1 hit in
    dist/util-BKgrGIUi.d.ts, 0 in dist/index.d.ts / dist/core.d.ts.
  • Positive control — the sentence the rewrite deliberately keeps ("multi-kernel servers
    can give every kernel its own…"): 1 hit, same file, 0 in the other two. So the zeroes
    above are about which file carries the declaration, not about TSDoc being stripped.
  • Negative control — the removed false sentence: absent from the whole dist/ tree.
  • Reachability: dist/index.d.ts and dist/core.d.ts both re-export M as MetadataFacade
    from ./util-BKgrGIUi.js, types is dist/index.d.ts, and files is ["dist", …].

⇒ The class docblock does ship to consumers — it is what an editor hover shows on an
imported MetadataFacade — so this is a reader-visible change in the published package and
a @objectstack/objectql: patch changeset is owed. It is in the diff; no skip-changeset
label is claimed.

Clause-②: no, read from this diff

git diff over the source file: 18 added / 5 removed lines, every one a * TSDoc
comment-body line
— the complement grep (changed lines that are not comment-body lines)
returns nothing. No emitted runtime byte, no public type, no accept/reject behaviour, no
gate move. No ablation is owed for a comment-only diff, and none was run.

Scope

No registration change. Installing a MetadataFacade into the metadata slot is behaviour
and belongs to #13331's solution space (a priority:p0 card, mentioned here only as the
card whose premise this docblock likely produced — nothing about it is claimed or changed
by this PR).

The registerObjectBothPlaces header at :134 was not edited: it already carries the
true statement, and the rewritten class docblock now agrees with it and points at it, which
is the one-voice requirement the triage set. Editing it too would have been churn on a
sentence that was never wrong.

Verification (all at 329608eb0, the final commit)

  • Gate family re-derived on this tree after the last commit:
    node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands → 30 commands.
    All 30 run; 27 exit 0, and 3 report NOT MEASURED in their own words rather than a red:
    check-test-completeness.mjs (exit 3 — needs a saved turbo run test log; "It is not a red,
    and there is nothing here to fix"), scripts/pm/check-half-states.mjs (exit 3 — needs
    repo-scoped REST egress this container does not have), and check:dual-build-cjs-loads
    (exit 3 — "PREREQUISITE NOT MET … Run pnpm build first"; only objectql's closure is built
    locally, CI builds the workspace).
  • Always-runs named in the dispatch: pnpm lintwhole repo, exit 0 in 74s (no narrowing
    needed), pnpm check:nul-bytes exit 0 (7922 files scanned), pnpm check:error-status-conformance
    exit 0, pnpm --filter @objectstack/objectql typecheck exit 0 (source, scripts, and the
    test-layer project — 44 test files).
  • Every exit code above was captured after a redirect, never through a pipe.
  • Declared narrowing: objectql's full vitest run was not run locally. Grounds: every
    changed line is inside a TSDoc block (proof above), no test or gate reads this file as text
    (git grep for the removed sentence returns nothing tree-wide), the package builds and
    type-checks green, and CI's Test Core runs the suite on this PR. The box was also running
    another seat's full objectql suite under the shared lock at the time.

The derivation printed a STALE TREE warning (this branch is 4 commits behind origin/main,
one family file changed in that range: scripts/measure-durability-swallow-family.mjs).
Inspected: that diff only repoints the durability self-test's "dark control" example file and
rewrites its prose — it does not change which families my two paths map to, and re-deriving
after git fetch origin main produced a byte-identical command list.

🤖 Generated with Claude Code

https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68


Generated by Claude Code

…file's own true statement
The class docblock claimed the facade is "Registered as the 'metadata' kernel
service"; sixty lines later, registerObjectBothPlaces' header states the
opposite and is the true one. Re-measured on this tree: the only non-test
ctx.registerService('metadata', ...) site registers MetadataPlugin's manager,
the kernel's core-fallback pre-injection registers createMemoryMetadata, and
new MetadataFacade(...) appears nowhere outside tests.
Rewrite the class docblock to say what the class is (an injectable
IMetadataService over a SchemaRegistry, exported for downstream hosts) and
what it is not (installed into the 'metadata' slot by anything here), and
bind the two statements so the next reader cannot pick the wrong one. Prose
only; no registration and no behaviour change.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
…rection
The class docblock reaches the published declaration chunk that
dist/index.d.ts and dist/core.d.ts re-export MetadataFacade from, so the
correction is a reader-visible change in the published package.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 — 16 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 8e9e63087c6846da3f669c85e529e74f657e73d1packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance (engine execution seat, session_0112hMx9hjJ9BgB28X97DS68) — flipped to ready at 13:10Z and auto-merge (squash) armed at 13:11Z on head 329608eb0 (the 10:36Z flip window was missed while the seat's session was held by a rate limit; nothing about the PR changed in between).


Generated by Claude Code

Merged via the queue into main with commit b8562ffSep 2, 2026
35 checks passed
@os-musk
os-musk deleted the claude/issue-14019-metadata-facade-docblock branch September 2, 2026 13:33
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/stooling

Projects

None yet

2 participants

@os-musk@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service - #14525

Merged
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock
Sep 2, 2026
Merged

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service#14525
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14019

Prose only. One TSDoc block in packages/objectql/src/metadata-facade.ts, plus its changeset.

What was wrong

The class docblock said MetadataFacade is "Registered as the 'metadata' kernel service".
Sixty lines down the same file, registerObjectBothPlaces' header says the opposite —
nothing installs a MetadataFacade into that slot — and the second statement is the true
one. The false half is load-bearing: a reader grepping for who fills the metadata slot
lands on the class docblock first and stops there.

The docblock now says what the class is (an injectable IMetadataService over a
SchemaRegistry, exported from this package's root and core entrypoints for a downstream
host that chooses to install it) and what it is not (installed into the 'metadata'
slot by anything in this repository), names the two real fillers, and points at the
registerObjectBothPlaces header so the two statements cannot be read apart.

Premise re-verified on this branch, not taken from the card

CheckResult on 329608eb0
git grep -n "registerService('metadata'" -- packagesexactly one non-test site: packages/metadata/src/plugin.ts:365, registering this.manager
positive control: git grep -c "registerService(" -- packageswide hits (e.g. packages/core/src/kernel.ts:5) — the pattern engine does see this tree, so a zero above would have meant something
variable-key pathpackages/core/src/kernel.ts:270 (preInjectCoreFallbacks) and :303 (validateSystemRequirements) register CORE_FALLBACK_FACTORIES.metadata, which is createMemoryMetadata (packages/core/src/fallbacks/index.ts:41)
git grep -n "new MetadataFacade" -- packagestest files only; no production construction site

One drift from the card's own text, recorded rather than silently corrected: the manager
registration is at plugin.ts:365 here, not :353. Substance unchanged.

The dist/*.d.ts measurement (PM assumption 2 — CONFIRMED)

Built with pnpm --filter '@objectstack/objectql^...' build && pnpm --filter @objectstack/objectql build
(under the shared verify lock; VERDICT command-exit 0), then grepped the emitted declarations:

  • New phrase — the sentence "Nothing in this repository installs a MetadataFacade": 1 hit in
    dist/util-BKgrGIUi.d.ts, 0 in dist/index.d.ts / dist/core.d.ts.
  • Positive control — the sentence the rewrite deliberately keeps ("multi-kernel servers
    can give every kernel its own…"): 1 hit, same file, 0 in the other two. So the zeroes
    above are about which file carries the declaration, not about TSDoc being stripped.
  • Negative control — the removed false sentence: absent from the whole dist/ tree.
  • Reachability: dist/index.d.ts and dist/core.d.ts both re-export M as MetadataFacade
    from ./util-BKgrGIUi.js, types is dist/index.d.ts, and files is ["dist", …].

⇒ The class docblock does ship to consumers — it is what an editor hover shows on an
imported MetadataFacade — so this is a reader-visible change in the published package and
a @objectstack/objectql: patch changeset is owed. It is in the diff; no skip-changeset
label is claimed.

Clause-②: no, read from this diff

git diff over the source file: 18 added / 5 removed lines, every one a * TSDoc
comment-body line
— the complement grep (changed lines that are not comment-body lines)
returns nothing. No emitted runtime byte, no public type, no accept/reject behaviour, no
gate move. No ablation is owed for a comment-only diff, and none was run.

Scope

No registration change. Installing a MetadataFacade into the metadata slot is behaviour
and belongs to #13331's solution space (a priority:p0 card, mentioned here only as the
card whose premise this docblock likely produced — nothing about it is claimed or changed
by this PR).

The registerObjectBothPlaces header at :134 was not edited: it already carries the
true statement, and the rewritten class docblock now agrees with it and points at it, which
is the one-voice requirement the triage set. Editing it too would have been churn on a
sentence that was never wrong.

Verification (all at 329608eb0, the final commit)

  • Gate family re-derived on this tree after the last commit:
    node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands → 30 commands.
    All 30 run; 27 exit 0, and 3 report NOT MEASURED in their own words rather than a red:
    check-test-completeness.mjs (exit 3 — needs a saved turbo run test log; "It is not a red,
    and there is nothing here to fix"), scripts/pm/check-half-states.mjs (exit 3 — needs
    repo-scoped REST egress this container does not have), and check:dual-build-cjs-loads
    (exit 3 — "PREREQUISITE NOT MET … Run pnpm build first"; only objectql's closure is built
    locally, CI builds the workspace).
  • Always-runs named in the dispatch: pnpm lintwhole repo, exit 0 in 74s (no narrowing
    needed), pnpm check:nul-bytes exit 0 (7922 files scanned), pnpm check:error-status-conformance
    exit 0, pnpm --filter @objectstack/objectql typecheck exit 0 (source, scripts, and the
    test-layer project — 44 test files).
  • Every exit code above was captured after a redirect, never through a pipe.
  • Declared narrowing: objectql's full vitest run was not run locally. Grounds: every
    changed line is inside a TSDoc block (proof above), no test or gate reads this file as text
    (git grep for the removed sentence returns nothing tree-wide), the package builds and
    type-checks green, and CI's Test Core runs the suite on this PR. The box was also running
    another seat's full objectql suite under the shared lock at the time.

The derivation printed a STALE TREE warning (this branch is 4 commits behind origin/main,
one family file changed in that range: scripts/measure-durability-swallow-family.mjs).
Inspected: that diff only repoints the durability self-test's "dark control" example file and
rewrites its prose — it does not change which families my two paths map to, and re-deriving
after git fetch origin main produced a byte-identical command list.

🤖 Generated with Claude Code

https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68


Generated by Claude Code

…file's own true statement
The class docblock claimed the facade is "Registered as the 'metadata' kernel
service"; sixty lines later, registerObjectBothPlaces' header states the
opposite and is the true one. Re-measured on this tree: the only non-test
ctx.registerService('metadata', ...) site registers MetadataPlugin's manager,
the kernel's core-fallback pre-injection registers createMemoryMetadata, and
new MetadataFacade(...) appears nowhere outside tests.
Rewrite the class docblock to say what the class is (an injectable
IMetadataService over a SchemaRegistry, exported for downstream hosts) and
what it is not (installed into the 'metadata' slot by anything here), and
bind the two statements so the next reader cannot pick the wrong one. Prose
only; no registration and no behaviour change.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
…rection
The class docblock reaches the published declaration chunk that
dist/index.d.ts and dist/core.d.ts re-export MetadataFacade from, so the
correction is a reader-visible change in the published package.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 — 16 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 8e9e63087c6846da3f669c85e529e74f657e73d1packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance (engine execution seat, session_0112hMx9hjJ9BgB28X97DS68) — flipped to ready at 13:10Z and auto-merge (squash) armed at 13:11Z on head 329608eb0 (the 10:36Z flip window was missed while the seat's session was held by a rate limit; nothing about the PR changed in between).


Generated by Claude Code

Merged via the queue into main with commit b8562ffSep 2, 2026
35 checks passed
@os-musk
os-musk deleted the claude/issue-14019-metadata-facade-docblock branch September 2, 2026 13:33
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/stooling

Projects

None yet

2 participants

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

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service - #14525

Merged
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock
Sep 2, 2026
Merged

docs(objectql): correct MetadataFacade's class docblock — it is not the installed 'metadata' kernel service#14525
os-musk merged 2 commits into
mainfrom
claude/issue-14019-metadata-facade-docblock

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14019

Prose only. One TSDoc block in packages/objectql/src/metadata-facade.ts, plus its changeset.

What was wrong

The class docblock said MetadataFacade is "Registered as the 'metadata' kernel service".
Sixty lines down the same file, registerObjectBothPlaces' header says the opposite —
nothing installs a MetadataFacade into that slot — and the second statement is the true
one. The false half is load-bearing: a reader grepping for who fills the metadata slot
lands on the class docblock first and stops there.

The docblock now says what the class is (an injectable IMetadataService over a
SchemaRegistry, exported from this package's root and core entrypoints for a downstream
host that chooses to install it) and what it is not (installed into the 'metadata'
slot by anything in this repository), names the two real fillers, and points at the
registerObjectBothPlaces header so the two statements cannot be read apart.

Premise re-verified on this branch, not taken from the card

CheckResult on 329608eb0
git grep -n "registerService('metadata'" -- packagesexactly one non-test site: packages/metadata/src/plugin.ts:365, registering this.manager
positive control: git grep -c "registerService(" -- packageswide hits (e.g. packages/core/src/kernel.ts:5) — the pattern engine does see this tree, so a zero above would have meant something
variable-key pathpackages/core/src/kernel.ts:270 (preInjectCoreFallbacks) and :303 (validateSystemRequirements) register CORE_FALLBACK_FACTORIES.metadata, which is createMemoryMetadata (packages/core/src/fallbacks/index.ts:41)
git grep -n "new MetadataFacade" -- packagestest files only; no production construction site

One drift from the card's own text, recorded rather than silently corrected: the manager
registration is at plugin.ts:365 here, not :353. Substance unchanged.

The dist/*.d.ts measurement (PM assumption 2 — CONFIRMED)

Built with pnpm --filter '@objectstack/objectql^...' build && pnpm --filter @objectstack/objectql build
(under the shared verify lock; VERDICT command-exit 0), then grepped the emitted declarations:

  • New phrase — the sentence "Nothing in this repository installs a MetadataFacade": 1 hit in
    dist/util-BKgrGIUi.d.ts, 0 in dist/index.d.ts / dist/core.d.ts.
  • Positive control — the sentence the rewrite deliberately keeps ("multi-kernel servers
    can give every kernel its own…"): 1 hit, same file, 0 in the other two. So the zeroes
    above are about which file carries the declaration, not about TSDoc being stripped.
  • Negative control — the removed false sentence: absent from the whole dist/ tree.
  • Reachability: dist/index.d.ts and dist/core.d.ts both re-export M as MetadataFacade
    from ./util-BKgrGIUi.js, types is dist/index.d.ts, and files is ["dist", …].

⇒ The class docblock does ship to consumers — it is what an editor hover shows on an
imported MetadataFacade — so this is a reader-visible change in the published package and
a @objectstack/objectql: patch changeset is owed. It is in the diff; no skip-changeset
label is claimed.

Clause-②: no, read from this diff

git diff over the source file: 18 added / 5 removed lines, every one a * TSDoc
comment-body line
— the complement grep (changed lines that are not comment-body lines)
returns nothing. No emitted runtime byte, no public type, no accept/reject behaviour, no
gate move. No ablation is owed for a comment-only diff, and none was run.

Scope

No registration change. Installing a MetadataFacade into the metadata slot is behaviour
and belongs to #13331's solution space (a priority:p0 card, mentioned here only as the
card whose premise this docblock likely produced — nothing about it is claimed or changed
by this PR).

The registerObjectBothPlaces header at :134 was not edited: it already carries the
true statement, and the rewritten class docblock now agrees with it and points at it, which
is the one-voice requirement the triage set. Editing it too would have been churn on a
sentence that was never wrong.

Verification (all at 329608eb0, the final commit)

  • Gate family re-derived on this tree after the last commit:
    node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands → 30 commands.
    All 30 run; 27 exit 0, and 3 report NOT MEASURED in their own words rather than a red:
    check-test-completeness.mjs (exit 3 — needs a saved turbo run test log; "It is not a red,
    and there is nothing here to fix"), scripts/pm/check-half-states.mjs (exit 3 — needs
    repo-scoped REST egress this container does not have), and check:dual-build-cjs-loads
    (exit 3 — "PREREQUISITE NOT MET … Run pnpm build first"; only objectql's closure is built
    locally, CI builds the workspace).
  • Always-runs named in the dispatch: pnpm lintwhole repo, exit 0 in 74s (no narrowing
    needed), pnpm check:nul-bytes exit 0 (7922 files scanned), pnpm check:error-status-conformance
    exit 0, pnpm --filter @objectstack/objectql typecheck exit 0 (source, scripts, and the
    test-layer project — 44 test files).
  • Every exit code above was captured after a redirect, never through a pipe.
  • Declared narrowing: objectql's full vitest run was not run locally. Grounds: every
    changed line is inside a TSDoc block (proof above), no test or gate reads this file as text
    (git grep for the removed sentence returns nothing tree-wide), the package builds and
    type-checks green, and CI's Test Core runs the suite on this PR. The box was also running
    another seat's full objectql suite under the shared lock at the time.

The derivation printed a STALE TREE warning (this branch is 4 commits behind origin/main,
one family file changed in that range: scripts/measure-durability-swallow-family.mjs).
Inspected: that diff only repoints the durability self-test's "dark control" example file and
rewrites its prose — it does not change which families my two paths map to, and re-deriving
after git fetch origin main produced a byte-identical command list.

🤖 Generated with Claude Code

https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68


Generated by Claude Code

…file's own true statement
The class docblock claimed the facade is "Registered as the 'metadata' kernel
service"; sixty lines later, registerObjectBothPlaces' header states the
opposite and is the true one. Re-measured on this tree: the only non-test
ctx.registerService('metadata', ...) site registers MetadataPlugin's manager,
the kernel's core-fallback pre-injection registers createMemoryMetadata, and
new MetadataFacade(...) appears nowhere outside tests.
Rewrite the class docblock to say what the class is (an injectable
IMetadataService over a SchemaRegistry, exported for downstream hosts) and
what it is not (installed into the 'metadata' slot by anything here), and
bind the two statements so the next reader cannot pick the wrong one. Prose
only; no registration and no behaviour change.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
…rection
The class docblock reaches the published declaration chunk that
dist/index.d.ts and dist/core.d.ts re-export MetadataFacade from, so the
correction is a reader-visible change in the published package.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/objectql/src/metadata-facade.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 — 16 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 8e9e63087c6846da3f669c85e529e74f657e73d1packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance (engine execution seat, session_0112hMx9hjJ9BgB28X97DS68) — flipped to ready at 13:10Z and auto-merge (squash) armed at 13:11Z on head 329608eb0 (the 10:36Z flip window was missed while the seat's session was held by a rate limit; nothing about the PR changed in between).


Generated by Claude Code

Merged via the queue into main with commit b8562ffSep 2, 2026
35 checks passed
@os-musk
os-musk deleted the claude/issue-14019-metadata-facade-docblock branch September 2, 2026 13:33
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/stooling

Projects

None yet

2 participants

@os-musk@claude