docs-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair - #13782

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor
Aug 31, 2026
Merged

docs-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair#13782
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13471

isCodeShaped has called OS_MODE an identifier since the shape guard was written — it is
pinned as SCREAMING_SNAKE in the self-test's own shape cases — while
literalAnchorsFromLines accepted only three lowercase-initial shapes and so declined to mint
any anchor from it. One predicate in the pair called the token an identifier, the other
silently called it prose, and nothing reported the split. This makes the pair agree on that
shape, and then pins the agreement so neither side can drift back out of step quietly.

Re-derived against today's file first

The card warned its own shape description might be stale, and it was worth checking: the file
has drifted three times since the record window (blob 0a42496… to 61e0f44c… to
be1584869 today, the last move being #13738 at 09:40Z). The description survived — the
literal test was still exactly three lowercase-initial regexes. Both predicates, run on the
same tokens, on today's implementation:

OS_CLOUD_URL isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_MODE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_TENANCY_POSTURE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
ERROR_CODE_LEDGER isCodeShaped=true literalAnchorsFromLines=false DISAGREE
controlled_by_parent isCodeShaped=true literalAnchorsFromLines=true agree
auditMetaItem isCodeShaped=true literalAnchorsFromLines=true agree
meta.getAudit isCodeShaped=true literalAnchorsFromLines=true agree
label isCodeShaped=false literalAnchorsFromLines=false agree

Measured before changing anything

Two arms of the real tool over the 60 most recent packages/** commits, with every added row
attributed to the declaration that minted it — the per-row provenance published by #13738 is
what turned "will widening get noisier?" from a judgement call into a count.

baselineaccepting SCREAMING_SNAKE
rows across 60 runs374383 (+9, +2.4%)
rows lost0
overbroadAnchors (hub terms the corpus-share guard caught)88 (+0)
runs that moved at all2 of 60

Every new anchor named its declaration: FlowRefusalCode, AUTHZ_STORE_UNAVAILABLE_CODE,
codes. Four of the nine were vendor MySQL driver codes (ER_DUP_KEYNAME and friends) which
matched no page at all, so they cost nothing — an anchor no doc names is not a row.

Ground truth. On b6d3d76b5, whose own commit edited three docs pages, the advisory went
from 0 of those 3 (it listed two releases/** pages and nothing else) to 2 of 3
api/client-sdk.mdx and automation/flows.mdx, both minted from FlowRefusalCode.

The structural alternative was measured too, and rejected

Collapsing the literal test into isCodeShaped looks like the tidier fix — one predicate
instead of two — and the same 60 commits say no: rows 374 to 408 (+9.1%), and it admits
'unchanged.', 'means.' and 'version.', quoted sentence fragments that reach
isCodeShaped's . arm. The two predicates run over different populations — a
declaration NAME versus an arbitrary quoted span that may be prose — so they must stay
separate. Those three fragments are now pinned as non-anchors, so a future collapse goes red
with the reason attached.

Blast radius, kept as small as the card measured it

⛔ The card's own pull commit 4d98d9eab gains zero rows from this. That page was already
listed there, through the route anchor /api/v1/runtime/config; all this adds is a second
via clause naming OS_TELEMETRY_CLIENT_ERROR_REPORTING_ENABLED. The recall win is real and
it is b6d3d76b5-shaped, not 4d98d9eab-shaped. The three sibling misses in #13306's record
window remain out of scope and unfixed by this — those env vars were new to the page, so no
anchor of any shape could have matched.

Also unchanged, deliberately: a bare all-caps word such as EEXIT is not admitted, because the
shape requires a segment break. Prose does not shout in underscores; it can shout in one word.

Verification

  • --self-test 503 to 516 cases, all pass (exit 0, captured before any pipe).
  • The shipped file reproduces the measured arm on 60 of 60 runs, so the numbers above
    describe this diff rather than a throwaway mutant.
  • Reverse-verified: removing the fourth shape takes --self-test to exit 1, 7 cases
    failing
    , the agreement pin among them. Restore proven by observed state — working blob
    f1315ee83874ece9fdaba707005ff79f295ff020 equal to HEAD's, empty git diff HEAD, empty
    git status. No rebuild is involved: this script is dependency-free and node runs the source
    directly, so there is no dist/ between the edit and the run.
  • Gate families derived with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
    after the final commit (4a26def1c): 18 GREEN, 0 RED, 1 NOT MEASURED —
    check-test-completeness.mjs exits 3 PREREQUISITE NOT MET because it grades a saved
    turbo run test log that only CI produces, which its own failure text says to record as NOT
    MEASURED rather than as a red. Both convention-triggered obligations for a gate-script edit
    (bare-root-worklist.mjs --self-test, check:pm-dispatch-gates) are in that green set, as are
    check:docs-audit-scope, check-affected-docs.mjs, check-drift-comment.mjs and
    check:nul-bytes.

skip-changeset: the diff is one repo-root dev script. The root manifest is private: true and
no package manifest covers scripts/, so nothing is published. Check Changeset has no
path-based exemption — it enforces on any diff unless labelled — so the label is applied rather
than assumed.


Generated by Claude Code

… predicate pair
`isCodeShaped` has called `OS_MODE` an identifier since the shape guard was written
(it is pinned as `SCREAMING_SNAKE` in the self-test's shape cases), while
`literalAnchorsFromLines` accepted only three lowercase-initial shapes and so declined
to mint any anchor from it. One predicate in the pair called the token an identifier,
the other silently called it prose, and nothing reported the split.
Measured both ways over the 60 most recent `packages/**` commits, attributing every
added row to the declaration that minted it (the provenance published by #13738):
rows 374 -> 383 (+2.4%), zero rows lost, `overbroadAnchors` unchanged at 8, and only
2 of 60 runs moved. On `b6d3d76b5` the advisory went from 0 to 2 of the 3 docs pages
that commit edited itself.
Also pins the agreement as an invariant, and pins the disagreements that remain as
deliberate: delegating the literal test to `isCodeShaped` was measured at +9.1% and
admits quoted sentence fragments.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC
@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

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see
  • 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 — 0 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 4301f78461c7733850ee0dc75aab39a9ee782f77packageMentionDocs.

@os-project-manager
os-project-manager marked this pull request as ready for review August 31, 2026 12:08
@os-project-manager
os-project-manager added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit e5461baAug 31, 2026
35 checks passed
@os-project-manager
os-project-manager deleted the claude/issue-13471-screaming-snake-anchor branch August 31, 2026 12:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants

@os-project-manager@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-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair - #13782

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor
Aug 31, 2026
Merged

docs-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair#13782
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13471

isCodeShaped has called OS_MODE an identifier since the shape guard was written — it is
pinned as SCREAMING_SNAKE in the self-test's own shape cases — while
literalAnchorsFromLines accepted only three lowercase-initial shapes and so declined to mint
any anchor from it. One predicate in the pair called the token an identifier, the other
silently called it prose, and nothing reported the split. This makes the pair agree on that
shape, and then pins the agreement so neither side can drift back out of step quietly.

Re-derived against today's file first

The card warned its own shape description might be stale, and it was worth checking: the file
has drifted three times since the record window (blob 0a42496… to 61e0f44c… to
be1584869 today, the last move being #13738 at 09:40Z). The description survived — the
literal test was still exactly three lowercase-initial regexes. Both predicates, run on the
same tokens, on today's implementation:

OS_CLOUD_URL isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_MODE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_TENANCY_POSTURE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
ERROR_CODE_LEDGER isCodeShaped=true literalAnchorsFromLines=false DISAGREE
controlled_by_parent isCodeShaped=true literalAnchorsFromLines=true agree
auditMetaItem isCodeShaped=true literalAnchorsFromLines=true agree
meta.getAudit isCodeShaped=true literalAnchorsFromLines=true agree
label isCodeShaped=false literalAnchorsFromLines=false agree

Measured before changing anything

Two arms of the real tool over the 60 most recent packages/** commits, with every added row
attributed to the declaration that minted it — the per-row provenance published by #13738 is
what turned "will widening get noisier?" from a judgement call into a count.

baselineaccepting SCREAMING_SNAKE
rows across 60 runs374383 (+9, +2.4%)
rows lost0
overbroadAnchors (hub terms the corpus-share guard caught)88 (+0)
runs that moved at all2 of 60

Every new anchor named its declaration: FlowRefusalCode, AUTHZ_STORE_UNAVAILABLE_CODE,
codes. Four of the nine were vendor MySQL driver codes (ER_DUP_KEYNAME and friends) which
matched no page at all, so they cost nothing — an anchor no doc names is not a row.

Ground truth. On b6d3d76b5, whose own commit edited three docs pages, the advisory went
from 0 of those 3 (it listed two releases/** pages and nothing else) to 2 of 3
api/client-sdk.mdx and automation/flows.mdx, both minted from FlowRefusalCode.

The structural alternative was measured too, and rejected

Collapsing the literal test into isCodeShaped looks like the tidier fix — one predicate
instead of two — and the same 60 commits say no: rows 374 to 408 (+9.1%), and it admits
'unchanged.', 'means.' and 'version.', quoted sentence fragments that reach
isCodeShaped's . arm. The two predicates run over different populations — a
declaration NAME versus an arbitrary quoted span that may be prose — so they must stay
separate. Those three fragments are now pinned as non-anchors, so a future collapse goes red
with the reason attached.

Blast radius, kept as small as the card measured it

⛔ The card's own pull commit 4d98d9eab gains zero rows from this. That page was already
listed there, through the route anchor /api/v1/runtime/config; all this adds is a second
via clause naming OS_TELEMETRY_CLIENT_ERROR_REPORTING_ENABLED. The recall win is real and
it is b6d3d76b5-shaped, not 4d98d9eab-shaped. The three sibling misses in #13306's record
window remain out of scope and unfixed by this — those env vars were new to the page, so no
anchor of any shape could have matched.

Also unchanged, deliberately: a bare all-caps word such as EEXIT is not admitted, because the
shape requires a segment break. Prose does not shout in underscores; it can shout in one word.

Verification

  • --self-test 503 to 516 cases, all pass (exit 0, captured before any pipe).
  • The shipped file reproduces the measured arm on 60 of 60 runs, so the numbers above
    describe this diff rather than a throwaway mutant.
  • Reverse-verified: removing the fourth shape takes --self-test to exit 1, 7 cases
    failing
    , the agreement pin among them. Restore proven by observed state — working blob
    f1315ee83874ece9fdaba707005ff79f295ff020 equal to HEAD's, empty git diff HEAD, empty
    git status. No rebuild is involved: this script is dependency-free and node runs the source
    directly, so there is no dist/ between the edit and the run.
  • Gate families derived with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
    after the final commit (4a26def1c): 18 GREEN, 0 RED, 1 NOT MEASURED —
    check-test-completeness.mjs exits 3 PREREQUISITE NOT MET because it grades a saved
    turbo run test log that only CI produces, which its own failure text says to record as NOT
    MEASURED rather than as a red. Both convention-triggered obligations for a gate-script edit
    (bare-root-worklist.mjs --self-test, check:pm-dispatch-gates) are in that green set, as are
    check:docs-audit-scope, check-affected-docs.mjs, check-drift-comment.mjs and
    check:nul-bytes.

skip-changeset: the diff is one repo-root dev script. The root manifest is private: true and
no package manifest covers scripts/, so nothing is published. Check Changeset has no
path-based exemption — it enforces on any diff unless labelled — so the label is applied rather
than assumed.


Generated by Claude Code

… predicate pair
`isCodeShaped` has called `OS_MODE` an identifier since the shape guard was written
(it is pinned as `SCREAMING_SNAKE` in the self-test's shape cases), while
`literalAnchorsFromLines` accepted only three lowercase-initial shapes and so declined
to mint any anchor from it. One predicate in the pair called the token an identifier,
the other silently called it prose, and nothing reported the split.
Measured both ways over the 60 most recent `packages/**` commits, attributing every
added row to the declaration that minted it (the provenance published by #13738):
rows 374 -> 383 (+2.4%), zero rows lost, `overbroadAnchors` unchanged at 8, and only
2 of 60 runs moved. On `b6d3d76b5` the advisory went from 0 to 2 of the 3 docs pages
that commit edited itself.
Also pins the agreement as an invariant, and pins the disagreements that remain as
deliberate: delegating the literal test to `isCodeShaped` was measured at +9.1% and
admits quoted sentence fragments.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC
@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

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see
  • 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 — 0 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 4301f78461c7733850ee0dc75aab39a9ee782f77packageMentionDocs.

@os-project-manager
os-project-manager marked this pull request as ready for review August 31, 2026 12:08
@os-project-manager
os-project-manager added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit e5461baAug 31, 2026
35 checks passed
@os-project-manager
os-project-manager deleted the claude/issue-13471-screaming-snake-anchor branch August 31, 2026 12:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants

@os-project-manager@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-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair - #13782

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor
Aug 31, 2026
Merged

docs-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair#13782
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13471

isCodeShaped has called OS_MODE an identifier since the shape guard was written — it is
pinned as SCREAMING_SNAKE in the self-test's own shape cases — while
literalAnchorsFromLines accepted only three lowercase-initial shapes and so declined to mint
any anchor from it. One predicate in the pair called the token an identifier, the other
silently called it prose, and nothing reported the split. This makes the pair agree on that
shape, and then pins the agreement so neither side can drift back out of step quietly.

Re-derived against today's file first

The card warned its own shape description might be stale, and it was worth checking: the file
has drifted three times since the record window (blob 0a42496… to 61e0f44c… to
be1584869 today, the last move being #13738 at 09:40Z). The description survived — the
literal test was still exactly three lowercase-initial regexes. Both predicates, run on the
same tokens, on today's implementation:

OS_CLOUD_URL isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_MODE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_TENANCY_POSTURE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
ERROR_CODE_LEDGER isCodeShaped=true literalAnchorsFromLines=false DISAGREE
controlled_by_parent isCodeShaped=true literalAnchorsFromLines=true agree
auditMetaItem isCodeShaped=true literalAnchorsFromLines=true agree
meta.getAudit isCodeShaped=true literalAnchorsFromLines=true agree
label isCodeShaped=false literalAnchorsFromLines=false agree

Measured before changing anything

Two arms of the real tool over the 60 most recent packages/** commits, with every added row
attributed to the declaration that minted it — the per-row provenance published by #13738 is
what turned "will widening get noisier?" from a judgement call into a count.

baselineaccepting SCREAMING_SNAKE
rows across 60 runs374383 (+9, +2.4%)
rows lost0
overbroadAnchors (hub terms the corpus-share guard caught)88 (+0)
runs that moved at all2 of 60

Every new anchor named its declaration: FlowRefusalCode, AUTHZ_STORE_UNAVAILABLE_CODE,
codes. Four of the nine were vendor MySQL driver codes (ER_DUP_KEYNAME and friends) which
matched no page at all, so they cost nothing — an anchor no doc names is not a row.

Ground truth. On b6d3d76b5, whose own commit edited three docs pages, the advisory went
from 0 of those 3 (it listed two releases/** pages and nothing else) to 2 of 3
api/client-sdk.mdx and automation/flows.mdx, both minted from FlowRefusalCode.

The structural alternative was measured too, and rejected

Collapsing the literal test into isCodeShaped looks like the tidier fix — one predicate
instead of two — and the same 60 commits say no: rows 374 to 408 (+9.1%), and it admits
'unchanged.', 'means.' and 'version.', quoted sentence fragments that reach
isCodeShaped's . arm. The two predicates run over different populations — a
declaration NAME versus an arbitrary quoted span that may be prose — so they must stay
separate. Those three fragments are now pinned as non-anchors, so a future collapse goes red
with the reason attached.

Blast radius, kept as small as the card measured it

⛔ The card's own pull commit 4d98d9eab gains zero rows from this. That page was already
listed there, through the route anchor /api/v1/runtime/config; all this adds is a second
via clause naming OS_TELEMETRY_CLIENT_ERROR_REPORTING_ENABLED. The recall win is real and
it is b6d3d76b5-shaped, not 4d98d9eab-shaped. The three sibling misses in #13306's record
window remain out of scope and unfixed by this — those env vars were new to the page, so no
anchor of any shape could have matched.

Also unchanged, deliberately: a bare all-caps word such as EEXIT is not admitted, because the
shape requires a segment break. Prose does not shout in underscores; it can shout in one word.

Verification

  • --self-test 503 to 516 cases, all pass (exit 0, captured before any pipe).
  • The shipped file reproduces the measured arm on 60 of 60 runs, so the numbers above
    describe this diff rather than a throwaway mutant.
  • Reverse-verified: removing the fourth shape takes --self-test to exit 1, 7 cases
    failing
    , the agreement pin among them. Restore proven by observed state — working blob
    f1315ee83874ece9fdaba707005ff79f295ff020 equal to HEAD's, empty git diff HEAD, empty
    git status. No rebuild is involved: this script is dependency-free and node runs the source
    directly, so there is no dist/ between the edit and the run.
  • Gate families derived with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
    after the final commit (4a26def1c): 18 GREEN, 0 RED, 1 NOT MEASURED —
    check-test-completeness.mjs exits 3 PREREQUISITE NOT MET because it grades a saved
    turbo run test log that only CI produces, which its own failure text says to record as NOT
    MEASURED rather than as a red. Both convention-triggered obligations for a gate-script edit
    (bare-root-worklist.mjs --self-test, check:pm-dispatch-gates) are in that green set, as are
    check:docs-audit-scope, check-affected-docs.mjs, check-drift-comment.mjs and
    check:nul-bytes.

skip-changeset: the diff is one repo-root dev script. The root manifest is private: true and
no package manifest covers scripts/, so nothing is published. Check Changeset has no
path-based exemption — it enforces on any diff unless labelled — so the label is applied rather
than assumed.


Generated by Claude Code

… predicate pair
`isCodeShaped` has called `OS_MODE` an identifier since the shape guard was written
(it is pinned as `SCREAMING_SNAKE` in the self-test's shape cases), while
`literalAnchorsFromLines` accepted only three lowercase-initial shapes and so declined
to mint any anchor from it. One predicate in the pair called the token an identifier,
the other silently called it prose, and nothing reported the split.
Measured both ways over the 60 most recent `packages/**` commits, attributing every
added row to the declaration that minted it (the provenance published by #13738):
rows 374 -> 383 (+2.4%), zero rows lost, `overbroadAnchors` unchanged at 8, and only
2 of 60 runs moved. On `b6d3d76b5` the advisory went from 0 to 2 of the 3 docs pages
that commit edited itself.
Also pins the agreement as an invariant, and pins the disagreements that remain as
deliberate: delegating the literal test to `isCodeShaped` was measured at +9.1% and
admits quoted sentence fragments.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC
@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

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see
  • 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 — 0 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 4301f78461c7733850ee0dc75aab39a9ee782f77packageMentionDocs.

@os-project-manager
os-project-manager marked this pull request as ready for review August 31, 2026 12:08
@os-project-manager
os-project-manager added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit e5461baAug 31, 2026
35 checks passed
@os-project-manager
os-project-manager deleted the claude/issue-13471-screaming-snake-anchor branch August 31, 2026 12:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants

@os-project-manager@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-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair - #13782

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor
Aug 31, 2026
Merged

docs-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair#13782
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13471

isCodeShaped has called OS_MODE an identifier since the shape guard was written — it is
pinned as SCREAMING_SNAKE in the self-test's own shape cases — while
literalAnchorsFromLines accepted only three lowercase-initial shapes and so declined to mint
any anchor from it. One predicate in the pair called the token an identifier, the other
silently called it prose, and nothing reported the split. This makes the pair agree on that
shape, and then pins the agreement so neither side can drift back out of step quietly.

Re-derived against today's file first

The card warned its own shape description might be stale, and it was worth checking: the file
has drifted three times since the record window (blob 0a42496… to 61e0f44c… to
be1584869 today, the last move being #13738 at 09:40Z). The description survived — the
literal test was still exactly three lowercase-initial regexes. Both predicates, run on the
same tokens, on today's implementation:

OS_CLOUD_URL isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_MODE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_TENANCY_POSTURE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
ERROR_CODE_LEDGER isCodeShaped=true literalAnchorsFromLines=false DISAGREE
controlled_by_parent isCodeShaped=true literalAnchorsFromLines=true agree
auditMetaItem isCodeShaped=true literalAnchorsFromLines=true agree
meta.getAudit isCodeShaped=true literalAnchorsFromLines=true agree
label isCodeShaped=false literalAnchorsFromLines=false agree

Measured before changing anything

Two arms of the real tool over the 60 most recent packages/** commits, with every added row
attributed to the declaration that minted it — the per-row provenance published by #13738 is
what turned "will widening get noisier?" from a judgement call into a count.

baselineaccepting SCREAMING_SNAKE
rows across 60 runs374383 (+9, +2.4%)
rows lost0
overbroadAnchors (hub terms the corpus-share guard caught)88 (+0)
runs that moved at all2 of 60

Every new anchor named its declaration: FlowRefusalCode, AUTHZ_STORE_UNAVAILABLE_CODE,
codes. Four of the nine were vendor MySQL driver codes (ER_DUP_KEYNAME and friends) which
matched no page at all, so they cost nothing — an anchor no doc names is not a row.

Ground truth. On b6d3d76b5, whose own commit edited three docs pages, the advisory went
from 0 of those 3 (it listed two releases/** pages and nothing else) to 2 of 3
api/client-sdk.mdx and automation/flows.mdx, both minted from FlowRefusalCode.

The structural alternative was measured too, and rejected

Collapsing the literal test into isCodeShaped looks like the tidier fix — one predicate
instead of two — and the same 60 commits say no: rows 374 to 408 (+9.1%), and it admits
'unchanged.', 'means.' and 'version.', quoted sentence fragments that reach
isCodeShaped's . arm. The two predicates run over different populations — a
declaration NAME versus an arbitrary quoted span that may be prose — so they must stay
separate. Those three fragments are now pinned as non-anchors, so a future collapse goes red
with the reason attached.

Blast radius, kept as small as the card measured it

⛔ The card's own pull commit 4d98d9eab gains zero rows from this. That page was already
listed there, through the route anchor /api/v1/runtime/config; all this adds is a second
via clause naming OS_TELEMETRY_CLIENT_ERROR_REPORTING_ENABLED. The recall win is real and
it is b6d3d76b5-shaped, not 4d98d9eab-shaped. The three sibling misses in #13306's record
window remain out of scope and unfixed by this — those env vars were new to the page, so no
anchor of any shape could have matched.

Also unchanged, deliberately: a bare all-caps word such as EEXIT is not admitted, because the
shape requires a segment break. Prose does not shout in underscores; it can shout in one word.

Verification

  • --self-test 503 to 516 cases, all pass (exit 0, captured before any pipe).
  • The shipped file reproduces the measured arm on 60 of 60 runs, so the numbers above
    describe this diff rather than a throwaway mutant.
  • Reverse-verified: removing the fourth shape takes --self-test to exit 1, 7 cases
    failing
    , the agreement pin among them. Restore proven by observed state — working blob
    f1315ee83874ece9fdaba707005ff79f295ff020 equal to HEAD's, empty git diff HEAD, empty
    git status. No rebuild is involved: this script is dependency-free and node runs the source
    directly, so there is no dist/ between the edit and the run.
  • Gate families derived with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
    after the final commit (4a26def1c): 18 GREEN, 0 RED, 1 NOT MEASURED —
    check-test-completeness.mjs exits 3 PREREQUISITE NOT MET because it grades a saved
    turbo run test log that only CI produces, which its own failure text says to record as NOT
    MEASURED rather than as a red. Both convention-triggered obligations for a gate-script edit
    (bare-root-worklist.mjs --self-test, check:pm-dispatch-gates) are in that green set, as are
    check:docs-audit-scope, check-affected-docs.mjs, check-drift-comment.mjs and
    check:nul-bytes.

skip-changeset: the diff is one repo-root dev script. The root manifest is private: true and
no package manifest covers scripts/, so nothing is published. Check Changeset has no
path-based exemption — it enforces on any diff unless labelled — so the label is applied rather
than assumed.


Generated by Claude Code

… predicate pair
`isCodeShaped` has called `OS_MODE` an identifier since the shape guard was written
(it is pinned as `SCREAMING_SNAKE` in the self-test's shape cases), while
`literalAnchorsFromLines` accepted only three lowercase-initial shapes and so declined
to mint any anchor from it. One predicate in the pair called the token an identifier,
the other silently called it prose, and nothing reported the split.
Measured both ways over the 60 most recent `packages/**` commits, attributing every
added row to the declaration that minted it (the provenance published by #13738):
rows 374 -> 383 (+2.4%), zero rows lost, `overbroadAnchors` unchanged at 8, and only
2 of 60 runs moved. On `b6d3d76b5` the advisory went from 0 to 2 of the 3 docs pages
that commit edited itself.
Also pins the agreement as an invariant, and pins the disagreements that remain as
deliberate: delegating the literal test to `isCodeShaped` was measured at +9.1% and
admits quoted sentence fragments.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC
@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

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see
  • 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 — 0 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 4301f78461c7733850ee0dc75aab39a9ee782f77packageMentionDocs.

@os-project-manager
os-project-manager marked this pull request as ready for review August 31, 2026 12:08
@os-project-manager
os-project-manager added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit e5461baAug 31, 2026
35 checks passed
@os-project-manager
os-project-manager deleted the claude/issue-13471-screaming-snake-anchor branch August 31, 2026 12:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants

@os-project-manager@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-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair - #13782

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor
Aug 31, 2026
Merged

docs-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair#13782
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13471

isCodeShaped has called OS_MODE an identifier since the shape guard was written — it is
pinned as SCREAMING_SNAKE in the self-test's own shape cases — while
literalAnchorsFromLines accepted only three lowercase-initial shapes and so declined to mint
any anchor from it. One predicate in the pair called the token an identifier, the other
silently called it prose, and nothing reported the split. This makes the pair agree on that
shape, and then pins the agreement so neither side can drift back out of step quietly.

Re-derived against today's file first

The card warned its own shape description might be stale, and it was worth checking: the file
has drifted three times since the record window (blob 0a42496… to 61e0f44c… to
be1584869 today, the last move being #13738 at 09:40Z). The description survived — the
literal test was still exactly three lowercase-initial regexes. Both predicates, run on the
same tokens, on today's implementation:

OS_CLOUD_URL isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_MODE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_TENANCY_POSTURE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
ERROR_CODE_LEDGER isCodeShaped=true literalAnchorsFromLines=false DISAGREE
controlled_by_parent isCodeShaped=true literalAnchorsFromLines=true agree
auditMetaItem isCodeShaped=true literalAnchorsFromLines=true agree
meta.getAudit isCodeShaped=true literalAnchorsFromLines=true agree
label isCodeShaped=false literalAnchorsFromLines=false agree

Measured before changing anything

Two arms of the real tool over the 60 most recent packages/** commits, with every added row
attributed to the declaration that minted it — the per-row provenance published by #13738 is
what turned "will widening get noisier?" from a judgement call into a count.

baselineaccepting SCREAMING_SNAKE
rows across 60 runs374383 (+9, +2.4%)
rows lost0
overbroadAnchors (hub terms the corpus-share guard caught)88 (+0)
runs that moved at all2 of 60

Every new anchor named its declaration: FlowRefusalCode, AUTHZ_STORE_UNAVAILABLE_CODE,
codes. Four of the nine were vendor MySQL driver codes (ER_DUP_KEYNAME and friends) which
matched no page at all, so they cost nothing — an anchor no doc names is not a row.

Ground truth. On b6d3d76b5, whose own commit edited three docs pages, the advisory went
from 0 of those 3 (it listed two releases/** pages and nothing else) to 2 of 3
api/client-sdk.mdx and automation/flows.mdx, both minted from FlowRefusalCode.

The structural alternative was measured too, and rejected

Collapsing the literal test into isCodeShaped looks like the tidier fix — one predicate
instead of two — and the same 60 commits say no: rows 374 to 408 (+9.1%), and it admits
'unchanged.', 'means.' and 'version.', quoted sentence fragments that reach
isCodeShaped's . arm. The two predicates run over different populations — a
declaration NAME versus an arbitrary quoted span that may be prose — so they must stay
separate. Those three fragments are now pinned as non-anchors, so a future collapse goes red
with the reason attached.

Blast radius, kept as small as the card measured it

⛔ The card's own pull commit 4d98d9eab gains zero rows from this. That page was already
listed there, through the route anchor /api/v1/runtime/config; all this adds is a second
via clause naming OS_TELEMETRY_CLIENT_ERROR_REPORTING_ENABLED. The recall win is real and
it is b6d3d76b5-shaped, not 4d98d9eab-shaped. The three sibling misses in #13306's record
window remain out of scope and unfixed by this — those env vars were new to the page, so no
anchor of any shape could have matched.

Also unchanged, deliberately: a bare all-caps word such as EEXIT is not admitted, because the
shape requires a segment break. Prose does not shout in underscores; it can shout in one word.

Verification

  • --self-test 503 to 516 cases, all pass (exit 0, captured before any pipe).
  • The shipped file reproduces the measured arm on 60 of 60 runs, so the numbers above
    describe this diff rather than a throwaway mutant.
  • Reverse-verified: removing the fourth shape takes --self-test to exit 1, 7 cases
    failing
    , the agreement pin among them. Restore proven by observed state — working blob
    f1315ee83874ece9fdaba707005ff79f295ff020 equal to HEAD's, empty git diff HEAD, empty
    git status. No rebuild is involved: this script is dependency-free and node runs the source
    directly, so there is no dist/ between the edit and the run.
  • Gate families derived with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
    after the final commit (4a26def1c): 18 GREEN, 0 RED, 1 NOT MEASURED —
    check-test-completeness.mjs exits 3 PREREQUISITE NOT MET because it grades a saved
    turbo run test log that only CI produces, which its own failure text says to record as NOT
    MEASURED rather than as a red. Both convention-triggered obligations for a gate-script edit
    (bare-root-worklist.mjs --self-test, check:pm-dispatch-gates) are in that green set, as are
    check:docs-audit-scope, check-affected-docs.mjs, check-drift-comment.mjs and
    check:nul-bytes.

skip-changeset: the diff is one repo-root dev script. The root manifest is private: true and
no package manifest covers scripts/, so nothing is published. Check Changeset has no
path-based exemption — it enforces on any diff unless labelled — so the label is applied rather
than assumed.


Generated by Claude Code

… predicate pair
`isCodeShaped` has called `OS_MODE` an identifier since the shape guard was written
(it is pinned as `SCREAMING_SNAKE` in the self-test's shape cases), while
`literalAnchorsFromLines` accepted only three lowercase-initial shapes and so declined
to mint any anchor from it. One predicate in the pair called the token an identifier,
the other silently called it prose, and nothing reported the split.
Measured both ways over the 60 most recent `packages/**` commits, attributing every
added row to the declaration that minted it (the provenance published by #13738):
rows 374 -> 383 (+2.4%), zero rows lost, `overbroadAnchors` unchanged at 8, and only
2 of 60 runs moved. On `b6d3d76b5` the advisory went from 0 to 2 of the 3 docs pages
that commit edited itself.
Also pins the agreement as an invariant, and pins the disagreements that remain as
deliberate: delegating the literal test to `isCodeShaped` was measured at +9.1% and
admits quoted sentence fragments.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC
@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

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see
  • 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 — 0 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 4301f78461c7733850ee0dc75aab39a9ee782f77packageMentionDocs.

@os-project-manager
os-project-manager marked this pull request as ready for review August 31, 2026 12:08
@os-project-manager
os-project-manager added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit e5461baAug 31, 2026
35 checks passed
@os-project-manager
os-project-manager deleted the claude/issue-13471-screaming-snake-anchor branch August 31, 2026 12:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants

@os-project-manager@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-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair - #13782

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor
Aug 31, 2026
Merged

docs-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair#13782
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13471

isCodeShaped has called OS_MODE an identifier since the shape guard was written — it is
pinned as SCREAMING_SNAKE in the self-test's own shape cases — while
literalAnchorsFromLines accepted only three lowercase-initial shapes and so declined to mint
any anchor from it. One predicate in the pair called the token an identifier, the other
silently called it prose, and nothing reported the split. This makes the pair agree on that
shape, and then pins the agreement so neither side can drift back out of step quietly.

Re-derived against today's file first

The card warned its own shape description might be stale, and it was worth checking: the file
has drifted three times since the record window (blob 0a42496… to 61e0f44c… to
be1584869 today, the last move being #13738 at 09:40Z). The description survived — the
literal test was still exactly three lowercase-initial regexes. Both predicates, run on the
same tokens, on today's implementation:

OS_CLOUD_URL isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_MODE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_TENANCY_POSTURE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
ERROR_CODE_LEDGER isCodeShaped=true literalAnchorsFromLines=false DISAGREE
controlled_by_parent isCodeShaped=true literalAnchorsFromLines=true agree
auditMetaItem isCodeShaped=true literalAnchorsFromLines=true agree
meta.getAudit isCodeShaped=true literalAnchorsFromLines=true agree
label isCodeShaped=false literalAnchorsFromLines=false agree

Measured before changing anything

Two arms of the real tool over the 60 most recent packages/** commits, with every added row
attributed to the declaration that minted it — the per-row provenance published by #13738 is
what turned "will widening get noisier?" from a judgement call into a count.

baselineaccepting SCREAMING_SNAKE
rows across 60 runs374383 (+9, +2.4%)
rows lost0
overbroadAnchors (hub terms the corpus-share guard caught)88 (+0)
runs that moved at all2 of 60

Every new anchor named its declaration: FlowRefusalCode, AUTHZ_STORE_UNAVAILABLE_CODE,
codes. Four of the nine were vendor MySQL driver codes (ER_DUP_KEYNAME and friends) which
matched no page at all, so they cost nothing — an anchor no doc names is not a row.

Ground truth. On b6d3d76b5, whose own commit edited three docs pages, the advisory went
from 0 of those 3 (it listed two releases/** pages and nothing else) to 2 of 3
api/client-sdk.mdx and automation/flows.mdx, both minted from FlowRefusalCode.

The structural alternative was measured too, and rejected

Collapsing the literal test into isCodeShaped looks like the tidier fix — one predicate
instead of two — and the same 60 commits say no: rows 374 to 408 (+9.1%), and it admits
'unchanged.', 'means.' and 'version.', quoted sentence fragments that reach
isCodeShaped's . arm. The two predicates run over different populations — a
declaration NAME versus an arbitrary quoted span that may be prose — so they must stay
separate. Those three fragments are now pinned as non-anchors, so a future collapse goes red
with the reason attached.

Blast radius, kept as small as the card measured it

⛔ The card's own pull commit 4d98d9eab gains zero rows from this. That page was already
listed there, through the route anchor /api/v1/runtime/config; all this adds is a second
via clause naming OS_TELEMETRY_CLIENT_ERROR_REPORTING_ENABLED. The recall win is real and
it is b6d3d76b5-shaped, not 4d98d9eab-shaped. The three sibling misses in #13306's record
window remain out of scope and unfixed by this — those env vars were new to the page, so no
anchor of any shape could have matched.

Also unchanged, deliberately: a bare all-caps word such as EEXIT is not admitted, because the
shape requires a segment break. Prose does not shout in underscores; it can shout in one word.

Verification

  • --self-test 503 to 516 cases, all pass (exit 0, captured before any pipe).
  • The shipped file reproduces the measured arm on 60 of 60 runs, so the numbers above
    describe this diff rather than a throwaway mutant.
  • Reverse-verified: removing the fourth shape takes --self-test to exit 1, 7 cases
    failing
    , the agreement pin among them. Restore proven by observed state — working blob
    f1315ee83874ece9fdaba707005ff79f295ff020 equal to HEAD's, empty git diff HEAD, empty
    git status. No rebuild is involved: this script is dependency-free and node runs the source
    directly, so there is no dist/ between the edit and the run.
  • Gate families derived with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
    after the final commit (4a26def1c): 18 GREEN, 0 RED, 1 NOT MEASURED —
    check-test-completeness.mjs exits 3 PREREQUISITE NOT MET because it grades a saved
    turbo run test log that only CI produces, which its own failure text says to record as NOT
    MEASURED rather than as a red. Both convention-triggered obligations for a gate-script edit
    (bare-root-worklist.mjs --self-test, check:pm-dispatch-gates) are in that green set, as are
    check:docs-audit-scope, check-affected-docs.mjs, check-drift-comment.mjs and
    check:nul-bytes.

skip-changeset: the diff is one repo-root dev script. The root manifest is private: true and
no package manifest covers scripts/, so nothing is published. Check Changeset has no
path-based exemption — it enforces on any diff unless labelled — so the label is applied rather
than assumed.


Generated by Claude Code

… predicate pair
`isCodeShaped` has called `OS_MODE` an identifier since the shape guard was written
(it is pinned as `SCREAMING_SNAKE` in the self-test's shape cases), while
`literalAnchorsFromLines` accepted only three lowercase-initial shapes and so declined
to mint any anchor from it. One predicate in the pair called the token an identifier,
the other silently called it prose, and nothing reported the split.
Measured both ways over the 60 most recent `packages/**` commits, attributing every
added row to the declaration that minted it (the provenance published by #13738):
rows 374 -> 383 (+2.4%), zero rows lost, `overbroadAnchors` unchanged at 8, and only
2 of 60 runs moved. On `b6d3d76b5` the advisory went from 0 to 2 of the 3 docs pages
that commit edited itself.
Also pins the agreement as an invariant, and pins the disagreements that remain as
deliberate: delegating the literal test to `isCodeShaped` was measured at +9.1% and
admits quoted sentence fragments.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC
@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

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see
  • 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 — 0 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 4301f78461c7733850ee0dc75aab39a9ee782f77packageMentionDocs.

@os-project-manager
os-project-manager marked this pull request as ready for review August 31, 2026 12:08
@os-project-manager
os-project-manager added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit e5461baAug 31, 2026
35 checks passed
@os-project-manager
os-project-manager deleted the claude/issue-13471-screaming-snake-anchor branch August 31, 2026 12:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants

@os-project-manager@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-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair - #13782

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor
Aug 31, 2026
Merged

docs-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair#13782
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13471

isCodeShaped has called OS_MODE an identifier since the shape guard was written — it is
pinned as SCREAMING_SNAKE in the self-test's own shape cases — while
literalAnchorsFromLines accepted only three lowercase-initial shapes and so declined to mint
any anchor from it. One predicate in the pair called the token an identifier, the other
silently called it prose, and nothing reported the split. This makes the pair agree on that
shape, and then pins the agreement so neither side can drift back out of step quietly.

Re-derived against today's file first

The card warned its own shape description might be stale, and it was worth checking: the file
has drifted three times since the record window (blob 0a42496… to 61e0f44c… to
be1584869 today, the last move being #13738 at 09:40Z). The description survived — the
literal test was still exactly three lowercase-initial regexes. Both predicates, run on the
same tokens, on today's implementation:

OS_CLOUD_URL isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_MODE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_TENANCY_POSTURE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
ERROR_CODE_LEDGER isCodeShaped=true literalAnchorsFromLines=false DISAGREE
controlled_by_parent isCodeShaped=true literalAnchorsFromLines=true agree
auditMetaItem isCodeShaped=true literalAnchorsFromLines=true agree
meta.getAudit isCodeShaped=true literalAnchorsFromLines=true agree
label isCodeShaped=false literalAnchorsFromLines=false agree

Measured before changing anything

Two arms of the real tool over the 60 most recent packages/** commits, with every added row
attributed to the declaration that minted it — the per-row provenance published by #13738 is
what turned "will widening get noisier?" from a judgement call into a count.

baselineaccepting SCREAMING_SNAKE
rows across 60 runs374383 (+9, +2.4%)
rows lost0
overbroadAnchors (hub terms the corpus-share guard caught)88 (+0)
runs that moved at all2 of 60

Every new anchor named its declaration: FlowRefusalCode, AUTHZ_STORE_UNAVAILABLE_CODE,
codes. Four of the nine were vendor MySQL driver codes (ER_DUP_KEYNAME and friends) which
matched no page at all, so they cost nothing — an anchor no doc names is not a row.

Ground truth. On b6d3d76b5, whose own commit edited three docs pages, the advisory went
from 0 of those 3 (it listed two releases/** pages and nothing else) to 2 of 3
api/client-sdk.mdx and automation/flows.mdx, both minted from FlowRefusalCode.

The structural alternative was measured too, and rejected

Collapsing the literal test into isCodeShaped looks like the tidier fix — one predicate
instead of two — and the same 60 commits say no: rows 374 to 408 (+9.1%), and it admits
'unchanged.', 'means.' and 'version.', quoted sentence fragments that reach
isCodeShaped's . arm. The two predicates run over different populations — a
declaration NAME versus an arbitrary quoted span that may be prose — so they must stay
separate. Those three fragments are now pinned as non-anchors, so a future collapse goes red
with the reason attached.

Blast radius, kept as small as the card measured it

⛔ The card's own pull commit 4d98d9eab gains zero rows from this. That page was already
listed there, through the route anchor /api/v1/runtime/config; all this adds is a second
via clause naming OS_TELEMETRY_CLIENT_ERROR_REPORTING_ENABLED. The recall win is real and
it is b6d3d76b5-shaped, not 4d98d9eab-shaped. The three sibling misses in #13306's record
window remain out of scope and unfixed by this — those env vars were new to the page, so no
anchor of any shape could have matched.

Also unchanged, deliberately: a bare all-caps word such as EEXIT is not admitted, because the
shape requires a segment break. Prose does not shout in underscores; it can shout in one word.

Verification

  • --self-test 503 to 516 cases, all pass (exit 0, captured before any pipe).
  • The shipped file reproduces the measured arm on 60 of 60 runs, so the numbers above
    describe this diff rather than a throwaway mutant.
  • Reverse-verified: removing the fourth shape takes --self-test to exit 1, 7 cases
    failing
    , the agreement pin among them. Restore proven by observed state — working blob
    f1315ee83874ece9fdaba707005ff79f295ff020 equal to HEAD's, empty git diff HEAD, empty
    git status. No rebuild is involved: this script is dependency-free and node runs the source
    directly, so there is no dist/ between the edit and the run.
  • Gate families derived with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
    after the final commit (4a26def1c): 18 GREEN, 0 RED, 1 NOT MEASURED —
    check-test-completeness.mjs exits 3 PREREQUISITE NOT MET because it grades a saved
    turbo run test log that only CI produces, which its own failure text says to record as NOT
    MEASURED rather than as a red. Both convention-triggered obligations for a gate-script edit
    (bare-root-worklist.mjs --self-test, check:pm-dispatch-gates) are in that green set, as are
    check:docs-audit-scope, check-affected-docs.mjs, check-drift-comment.mjs and
    check:nul-bytes.

skip-changeset: the diff is one repo-root dev script. The root manifest is private: true and
no package manifest covers scripts/, so nothing is published. Check Changeset has no
path-based exemption — it enforces on any diff unless labelled — so the label is applied rather
than assumed.


Generated by Claude Code

… predicate pair
`isCodeShaped` has called `OS_MODE` an identifier since the shape guard was written
(it is pinned as `SCREAMING_SNAKE` in the self-test's shape cases), while
`literalAnchorsFromLines` accepted only three lowercase-initial shapes and so declined
to mint any anchor from it. One predicate in the pair called the token an identifier,
the other silently called it prose, and nothing reported the split.
Measured both ways over the 60 most recent `packages/**` commits, attributing every
added row to the declaration that minted it (the provenance published by #13738):
rows 374 -> 383 (+2.4%), zero rows lost, `overbroadAnchors` unchanged at 8, and only
2 of 60 runs moved. On `b6d3d76b5` the advisory went from 0 to 2 of the 3 docs pages
that commit edited itself.
Also pins the agreement as an invariant, and pins the disagreements that remain as
deliberate: delegating the literal test to `isCodeShaped` was measured at +9.1% and
admits quoted sentence fragments.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC
@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

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see
  • 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 — 0 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 4301f78461c7733850ee0dc75aab39a9ee782f77packageMentionDocs.

@os-project-manager
os-project-manager marked this pull request as ready for review August 31, 2026 12:08
@os-project-manager
os-project-manager added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit e5461baAug 31, 2026
35 checks passed
@os-project-manager
os-project-manager deleted the claude/issue-13471-screaming-snake-anchor branch August 31, 2026 12:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants

@os-project-manager@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-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair - #13782

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor
Aug 31, 2026
Merged

docs-audit: let a SCREAMING_SNAKE literal mint an anchor, and pin the predicate pair#13782
os-project-manager merged 1 commit into
mainfrom
claude/issue-13471-screaming-snake-anchor

Conversation

@claude

@claudeclaudeBot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes#13471

isCodeShaped has called OS_MODE an identifier since the shape guard was written — it is
pinned as SCREAMING_SNAKE in the self-test's own shape cases — while
literalAnchorsFromLines accepted only three lowercase-initial shapes and so declined to mint
any anchor from it. One predicate in the pair called the token an identifier, the other
silently called it prose, and nothing reported the split. This makes the pair agree on that
shape, and then pins the agreement so neither side can drift back out of step quietly.

Re-derived against today's file first

The card warned its own shape description might be stale, and it was worth checking: the file
has drifted three times since the record window (blob 0a42496… to 61e0f44c… to
be1584869 today, the last move being #13738 at 09:40Z). The description survived — the
literal test was still exactly three lowercase-initial regexes. Both predicates, run on the
same tokens, on today's implementation:

OS_CLOUD_URL isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_MODE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
OS_TENANCY_POSTURE isCodeShaped=true literalAnchorsFromLines=false DISAGREE
ERROR_CODE_LEDGER isCodeShaped=true literalAnchorsFromLines=false DISAGREE
controlled_by_parent isCodeShaped=true literalAnchorsFromLines=true agree
auditMetaItem isCodeShaped=true literalAnchorsFromLines=true agree
meta.getAudit isCodeShaped=true literalAnchorsFromLines=true agree
label isCodeShaped=false literalAnchorsFromLines=false agree

Measured before changing anything

Two arms of the real tool over the 60 most recent packages/** commits, with every added row
attributed to the declaration that minted it — the per-row provenance published by #13738 is
what turned "will widening get noisier?" from a judgement call into a count.

baselineaccepting SCREAMING_SNAKE
rows across 60 runs374383 (+9, +2.4%)
rows lost0
overbroadAnchors (hub terms the corpus-share guard caught)88 (+0)
runs that moved at all2 of 60

Every new anchor named its declaration: FlowRefusalCode, AUTHZ_STORE_UNAVAILABLE_CODE,
codes. Four of the nine were vendor MySQL driver codes (ER_DUP_KEYNAME and friends) which
matched no page at all, so they cost nothing — an anchor no doc names is not a row.

Ground truth. On b6d3d76b5, whose own commit edited three docs pages, the advisory went
from 0 of those 3 (it listed two releases/** pages and nothing else) to 2 of 3
api/client-sdk.mdx and automation/flows.mdx, both minted from FlowRefusalCode.

The structural alternative was measured too, and rejected

Collapsing the literal test into isCodeShaped looks like the tidier fix — one predicate
instead of two — and the same 60 commits say no: rows 374 to 408 (+9.1%), and it admits
'unchanged.', 'means.' and 'version.', quoted sentence fragments that reach
isCodeShaped's . arm. The two predicates run over different populations — a
declaration NAME versus an arbitrary quoted span that may be prose — so they must stay
separate. Those three fragments are now pinned as non-anchors, so a future collapse goes red
with the reason attached.

Blast radius, kept as small as the card measured it

⛔ The card's own pull commit 4d98d9eab gains zero rows from this. That page was already
listed there, through the route anchor /api/v1/runtime/config; all this adds is a second
via clause naming OS_TELEMETRY_CLIENT_ERROR_REPORTING_ENABLED. The recall win is real and
it is b6d3d76b5-shaped, not 4d98d9eab-shaped. The three sibling misses in #13306's record
window remain out of scope and unfixed by this — those env vars were new to the page, so no
anchor of any shape could have matched.

Also unchanged, deliberately: a bare all-caps word such as EEXIT is not admitted, because the
shape requires a segment break. Prose does not shout in underscores; it can shout in one word.

Verification

  • --self-test 503 to 516 cases, all pass (exit 0, captured before any pipe).
  • The shipped file reproduces the measured arm on 60 of 60 runs, so the numbers above
    describe this diff rather than a throwaway mutant.
  • Reverse-verified: removing the fourth shape takes --self-test to exit 1, 7 cases
    failing
    , the agreement pin among them. Restore proven by observed state — working blob
    f1315ee83874ece9fdaba707005ff79f295ff020 equal to HEAD's, empty git diff HEAD, empty
    git status. No rebuild is involved: this script is dependency-free and node runs the source
    directly, so there is no dist/ between the edit and the run.
  • Gate families derived with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
    after the final commit (4a26def1c): 18 GREEN, 0 RED, 1 NOT MEASURED —
    check-test-completeness.mjs exits 3 PREREQUISITE NOT MET because it grades a saved
    turbo run test log that only CI produces, which its own failure text says to record as NOT
    MEASURED rather than as a red. Both convention-triggered obligations for a gate-script edit
    (bare-root-worklist.mjs --self-test, check:pm-dispatch-gates) are in that green set, as are
    check:docs-audit-scope, check-affected-docs.mjs, check-drift-comment.mjs and
    check:nul-bytes.

skip-changeset: the diff is one repo-root dev script. The root manifest is private: true and
no package manifest covers scripts/, so nothing is published. Check Changeset has no
path-based exemption — it enforces on any diff unless labelled — so the label is applied rather
than assumed.


Generated by Claude Code

… predicate pair
`isCodeShaped` has called `OS_MODE` an identifier since the shape guard was written
(it is pinned as `SCREAMING_SNAKE` in the self-test's shape cases), while
`literalAnchorsFromLines` accepted only three lowercase-initial shapes and so declined
to mint any anchor from it. One predicate in the pair called the token an identifier,
the other silently called it prose, and nothing reported the split.
Measured both ways over the 60 most recent `packages/**` commits, attributing every
added row to the declaration that minted it (the provenance published by #13738):
rows 374 -> 383 (+2.4%), zero rows lost, `overbroadAnchors` unchanged at 8, and only
2 of 60 runs moved. On `b6d3d76b5` the advisory went from 0 to 2 of the 3 docs pages
that commit edited itself.
Also pins the agreement as an invariant, and pins the disagreements that remain as
deliberate: delegating the literal test to `isCodeShaped` was measured at +9.1% and
admits quoted sentence fragments.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC
@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

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see
  • 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 — 0 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 4301f78461c7733850ee0dc75aab39a9ee782f77packageMentionDocs.

@os-project-manager
os-project-manager marked this pull request as ready for review August 31, 2026 12:08
@os-project-manager
os-project-manager added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit e5461baAug 31, 2026
35 checks passed
@os-project-manager
os-project-manager deleted the claude/issue-13471-screaming-snake-anchor branch August 31, 2026 12:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants

@os-project-manager@claude