docs(pm): express the entry guard's self-test size as a floor, not a reading - #14002

Merged
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored
Aug 31, 2026
Merged

docs(pm): express the entry guard's self-test size as a floor, not a reading#14002
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13963

The docblock above this file's --self-test entry guard carried two figures frozen at PR #9897, and both had rotted. The card names one; reading the sentence turned up the other sitting beside it.

figure as writtentrue at PR #9897true todaydrift
"THIS file's 77 assertions"77 (measured, see below)255factor 3.3
"for the same reason line 810 carries it"line 810 really was the main-invocation guardline 810 is an unrelated try { in the regeneration predicate; the guard is at line 2336points at the wrong code

Both were true when written and neither is anchored to the moment that made it true, so both read as present-tense claims about this file. That is exactly the defect class #13536 describes.

The shape, copied from the sibling

Per triage, this follows what landed in dispatch-gates.mjs as 010518bb rather than inventing a shape:

  • the 77 is kept and anchored to PR feat(pm): ci-failure — a red check's assertion in one command #9897 as the historical fact it is (it was true there);
  • today's size is a FLOOR — "more than three times that" — written as a floor on purpose, pointing at --self-test's checked as the live reading;
  • the line number is replaced by a reference to the guard itself, which cannot drift;
  • a sentence says why it is a floor, and asks the next reader not to "helpfully" refresh either figure back into a reading.

Refreshing 77 to 255 was explicitly not done: it re-arms the identical defect one value later. No gate pins the figure to the live count either — #13536 rules that out, and this PR adds none.

The floor premise, re-measured on THIS file

Triage required this premise be re-run here rather than inherited from the sibling. Across all 13 commits that have ever touched this file (introduced 2026-08-18, never renamed), static assert( call sites went:

22 -> 70 -> 70 -> 74 -> 74 -> 83 -> 112 -> 122 -> 153 -> 185 -> 198 -> 223 -> 248
UP: 10 FLAT: 2 DOWN: 0

It has never once gone down, so a floor stays true where a reading rots. The counting method reproduces both independent readings already on record — 70 static at a065e46550b4 and 223 at 9c4c431fd — which is what makes the sweep trustworthy rather than merely self-consistent.

The historical 77 is measured, not assumed: the file at a065e46550b4 was run directly and printed 77 assertions.

Two notes worth recording. The clone this ran in arrived shallow (floor 2026-08-30, 208 commits), where this file has only 2 commits of history and PR #9897's commit does not resolve at all — the premise is unmeasurable in that state and a sweep run there would have "confirmed" a 2-commit history. It was unshallowed first (28s, strictly additive; --shallow-since was avoided because it can silently shorten, as scripts/pm/git-history.mjs documents). Second, the live count is not even constant across environments: --self-test prints 255 in an installed tree and 253 without node_modules, where the generator-provenance row fails closed and says so on its live: line. Both are green and truthful — a further reason the prose should not carry a number as a reading.

Verification

Gate union derived from the change set by node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (no hand-fed paths), run on final head 226bbc000:

  • 15 of 16 green, including pnpm check:pm-governed-merges (✓ 255 assertions), pnpm check:entry-guard, pnpm check:pm-dispatch-gates, node scripts/pm/bare-root-worklist.mjs --self-test (both convention-triggered gates for editing a gate script), and node scripts/check-skills-token-ratchet.mjs.
  • node scripts/check-test-completeness.mjs exits 3 = PREREQUISITE NOT MET, recorded as NOT MEASURED, not as a red: it grades a saved turbo run test log, none exists locally, and CI passes the path on every invocation, so the branch is unreachable there.

No behaviour change: the guard and the self-test are untouched, and the count is identical either side of the diff — 255 at the merge base, 255 at head. The diff is comment-only, one hunk, 17 insertions / 7 deletions.

Sibling card #13896 (same file) is closed, and no open PR touches this file, so nothing serialises against this one.

Generated by Claude Code


Generated by Claude Code

…reading
The docblock above the `--self-test` entry guard carried two figures frozen at
PR #9897 and both had rotted:
* "THIS file's 77 assertions" read as a present-tense claim about this
file's current suite. It printed 77 at PR #9897 and prints 255 today — a
factor of 3.3.
* "the same reason line 810 carries it" pointed at the sibling
main-invocation guard, which really was line 810 at PR #9897. Line 810 is
now an unrelated `try {` inside the regeneration predicate; the guard has
moved to line 2336.
Writing today's numbers would re-freeze the same defect one value later, so
the 77 is now anchored to PR #9897 as the historical fact it is, today's size
is a FLOOR ("more than three times that") stated as a floor on purpose and
pointing at `--self-test`'s `checked` as the live reading, and the line number
is replaced by a reference to the guard itself, which cannot drift.
Measured before choosing the shape, on this file's own history rather than
inherited from the sibling: across all 13 commits that have ever touched it
(introduced 2026-08-18, never renamed), the static `assert(` count went up 10
times, held flat twice, and has never once gone down (22 -> 248 static). The
counting method reproduces the two independent readings on record — 70 static
at a065e46 and 223 at 9c4c431.
The runtime figure is not even constant across environments, which is a second
reason a floor beats a reading: `--self-test` prints 255 in an installed tree
and 253 without node_modules, where the generator-provenance row fails closed
and says so on its `live:` line. Both readings are green and truthful.
No behaviour change: the guard and the self-test are untouched, and the count
is identical before and after this commit (255 at the merge base, 255 here).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@os-sam
os-sam marked this pull request as ready for review August 31, 2026 23:22
@os-sam
os-sam requested a review from hotlong as a code ownerAugust 31, 2026 23:22
@os-sam
os-sam enabled auto-merge August 31, 2026 23:22
@os-sam
os-sam added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 62a137bAug 31, 2026
34 checks passed
@os-sam
os-sam deleted the claude/issue-13963-selftest-count-unanchored branch August 31, 2026 23:39
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] check-governed-merges.mjs sizes its own self-test at "THIS file's 77 assertions" — unanchored and stale; the live count is 223+

2 participants

@os-sam@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(pm): express the entry guard's self-test size as a floor, not a reading - #14002

Merged
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored
Aug 31, 2026
Merged

docs(pm): express the entry guard's self-test size as a floor, not a reading#14002
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13963

The docblock above this file's --self-test entry guard carried two figures frozen at PR #9897, and both had rotted. The card names one; reading the sentence turned up the other sitting beside it.

figure as writtentrue at PR #9897true todaydrift
"THIS file's 77 assertions"77 (measured, see below)255factor 3.3
"for the same reason line 810 carries it"line 810 really was the main-invocation guardline 810 is an unrelated try { in the regeneration predicate; the guard is at line 2336points at the wrong code

Both were true when written and neither is anchored to the moment that made it true, so both read as present-tense claims about this file. That is exactly the defect class #13536 describes.

The shape, copied from the sibling

Per triage, this follows what landed in dispatch-gates.mjs as 010518bb rather than inventing a shape:

  • the 77 is kept and anchored to PR feat(pm): ci-failure — a red check's assertion in one command #9897 as the historical fact it is (it was true there);
  • today's size is a FLOOR — "more than three times that" — written as a floor on purpose, pointing at --self-test's checked as the live reading;
  • the line number is replaced by a reference to the guard itself, which cannot drift;
  • a sentence says why it is a floor, and asks the next reader not to "helpfully" refresh either figure back into a reading.

Refreshing 77 to 255 was explicitly not done: it re-arms the identical defect one value later. No gate pins the figure to the live count either — #13536 rules that out, and this PR adds none.

The floor premise, re-measured on THIS file

Triage required this premise be re-run here rather than inherited from the sibling. Across all 13 commits that have ever touched this file (introduced 2026-08-18, never renamed), static assert( call sites went:

22 -> 70 -> 70 -> 74 -> 74 -> 83 -> 112 -> 122 -> 153 -> 185 -> 198 -> 223 -> 248
UP: 10 FLAT: 2 DOWN: 0

It has never once gone down, so a floor stays true where a reading rots. The counting method reproduces both independent readings already on record — 70 static at a065e46550b4 and 223 at 9c4c431fd — which is what makes the sweep trustworthy rather than merely self-consistent.

The historical 77 is measured, not assumed: the file at a065e46550b4 was run directly and printed 77 assertions.

Two notes worth recording. The clone this ran in arrived shallow (floor 2026-08-30, 208 commits), where this file has only 2 commits of history and PR #9897's commit does not resolve at all — the premise is unmeasurable in that state and a sweep run there would have "confirmed" a 2-commit history. It was unshallowed first (28s, strictly additive; --shallow-since was avoided because it can silently shorten, as scripts/pm/git-history.mjs documents). Second, the live count is not even constant across environments: --self-test prints 255 in an installed tree and 253 without node_modules, where the generator-provenance row fails closed and says so on its live: line. Both are green and truthful — a further reason the prose should not carry a number as a reading.

Verification

Gate union derived from the change set by node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (no hand-fed paths), run on final head 226bbc000:

  • 15 of 16 green, including pnpm check:pm-governed-merges (✓ 255 assertions), pnpm check:entry-guard, pnpm check:pm-dispatch-gates, node scripts/pm/bare-root-worklist.mjs --self-test (both convention-triggered gates for editing a gate script), and node scripts/check-skills-token-ratchet.mjs.
  • node scripts/check-test-completeness.mjs exits 3 = PREREQUISITE NOT MET, recorded as NOT MEASURED, not as a red: it grades a saved turbo run test log, none exists locally, and CI passes the path on every invocation, so the branch is unreachable there.

No behaviour change: the guard and the self-test are untouched, and the count is identical either side of the diff — 255 at the merge base, 255 at head. The diff is comment-only, one hunk, 17 insertions / 7 deletions.

Sibling card #13896 (same file) is closed, and no open PR touches this file, so nothing serialises against this one.

Generated by Claude Code


Generated by Claude Code

…reading
The docblock above the `--self-test` entry guard carried two figures frozen at
PR #9897 and both had rotted:
* "THIS file's 77 assertions" read as a present-tense claim about this
file's current suite. It printed 77 at PR #9897 and prints 255 today — a
factor of 3.3.
* "the same reason line 810 carries it" pointed at the sibling
main-invocation guard, which really was line 810 at PR #9897. Line 810 is
now an unrelated `try {` inside the regeneration predicate; the guard has
moved to line 2336.
Writing today's numbers would re-freeze the same defect one value later, so
the 77 is now anchored to PR #9897 as the historical fact it is, today's size
is a FLOOR ("more than three times that") stated as a floor on purpose and
pointing at `--self-test`'s `checked` as the live reading, and the line number
is replaced by a reference to the guard itself, which cannot drift.
Measured before choosing the shape, on this file's own history rather than
inherited from the sibling: across all 13 commits that have ever touched it
(introduced 2026-08-18, never renamed), the static `assert(` count went up 10
times, held flat twice, and has never once gone down (22 -> 248 static). The
counting method reproduces the two independent readings on record — 70 static
at a065e46 and 223 at 9c4c431.
The runtime figure is not even constant across environments, which is a second
reason a floor beats a reading: `--self-test` prints 255 in an installed tree
and 253 without node_modules, where the generator-provenance row fails closed
and says so on its `live:` line. Both readings are green and truthful.
No behaviour change: the guard and the self-test are untouched, and the count
is identical before and after this commit (255 at the merge base, 255 here).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@os-sam
os-sam marked this pull request as ready for review August 31, 2026 23:22
@os-sam
os-sam requested a review from hotlong as a code ownerAugust 31, 2026 23:22
@os-sam
os-sam enabled auto-merge August 31, 2026 23:22
@os-sam
os-sam added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 62a137bAug 31, 2026
34 checks passed
@os-sam
os-sam deleted the claude/issue-13963-selftest-count-unanchored branch August 31, 2026 23:39
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] check-governed-merges.mjs sizes its own self-test at "THIS file's 77 assertions" — unanchored and stale; the live count is 223+

2 participants

@os-sam@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(pm): express the entry guard's self-test size as a floor, not a reading - #14002

Merged
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored
Aug 31, 2026
Merged

docs(pm): express the entry guard's self-test size as a floor, not a reading#14002
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13963

The docblock above this file's --self-test entry guard carried two figures frozen at PR #9897, and both had rotted. The card names one; reading the sentence turned up the other sitting beside it.

figure as writtentrue at PR #9897true todaydrift
"THIS file's 77 assertions"77 (measured, see below)255factor 3.3
"for the same reason line 810 carries it"line 810 really was the main-invocation guardline 810 is an unrelated try { in the regeneration predicate; the guard is at line 2336points at the wrong code

Both were true when written and neither is anchored to the moment that made it true, so both read as present-tense claims about this file. That is exactly the defect class #13536 describes.

The shape, copied from the sibling

Per triage, this follows what landed in dispatch-gates.mjs as 010518bb rather than inventing a shape:

  • the 77 is kept and anchored to PR feat(pm): ci-failure — a red check's assertion in one command #9897 as the historical fact it is (it was true there);
  • today's size is a FLOOR — "more than three times that" — written as a floor on purpose, pointing at --self-test's checked as the live reading;
  • the line number is replaced by a reference to the guard itself, which cannot drift;
  • a sentence says why it is a floor, and asks the next reader not to "helpfully" refresh either figure back into a reading.

Refreshing 77 to 255 was explicitly not done: it re-arms the identical defect one value later. No gate pins the figure to the live count either — #13536 rules that out, and this PR adds none.

The floor premise, re-measured on THIS file

Triage required this premise be re-run here rather than inherited from the sibling. Across all 13 commits that have ever touched this file (introduced 2026-08-18, never renamed), static assert( call sites went:

22 -> 70 -> 70 -> 74 -> 74 -> 83 -> 112 -> 122 -> 153 -> 185 -> 198 -> 223 -> 248
UP: 10 FLAT: 2 DOWN: 0

It has never once gone down, so a floor stays true where a reading rots. The counting method reproduces both independent readings already on record — 70 static at a065e46550b4 and 223 at 9c4c431fd — which is what makes the sweep trustworthy rather than merely self-consistent.

The historical 77 is measured, not assumed: the file at a065e46550b4 was run directly and printed 77 assertions.

Two notes worth recording. The clone this ran in arrived shallow (floor 2026-08-30, 208 commits), where this file has only 2 commits of history and PR #9897's commit does not resolve at all — the premise is unmeasurable in that state and a sweep run there would have "confirmed" a 2-commit history. It was unshallowed first (28s, strictly additive; --shallow-since was avoided because it can silently shorten, as scripts/pm/git-history.mjs documents). Second, the live count is not even constant across environments: --self-test prints 255 in an installed tree and 253 without node_modules, where the generator-provenance row fails closed and says so on its live: line. Both are green and truthful — a further reason the prose should not carry a number as a reading.

Verification

Gate union derived from the change set by node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (no hand-fed paths), run on final head 226bbc000:

  • 15 of 16 green, including pnpm check:pm-governed-merges (✓ 255 assertions), pnpm check:entry-guard, pnpm check:pm-dispatch-gates, node scripts/pm/bare-root-worklist.mjs --self-test (both convention-triggered gates for editing a gate script), and node scripts/check-skills-token-ratchet.mjs.
  • node scripts/check-test-completeness.mjs exits 3 = PREREQUISITE NOT MET, recorded as NOT MEASURED, not as a red: it grades a saved turbo run test log, none exists locally, and CI passes the path on every invocation, so the branch is unreachable there.

No behaviour change: the guard and the self-test are untouched, and the count is identical either side of the diff — 255 at the merge base, 255 at head. The diff is comment-only, one hunk, 17 insertions / 7 deletions.

Sibling card #13896 (same file) is closed, and no open PR touches this file, so nothing serialises against this one.

Generated by Claude Code


Generated by Claude Code

…reading
The docblock above the `--self-test` entry guard carried two figures frozen at
PR #9897 and both had rotted:
* "THIS file's 77 assertions" read as a present-tense claim about this
file's current suite. It printed 77 at PR #9897 and prints 255 today — a
factor of 3.3.
* "the same reason line 810 carries it" pointed at the sibling
main-invocation guard, which really was line 810 at PR #9897. Line 810 is
now an unrelated `try {` inside the regeneration predicate; the guard has
moved to line 2336.
Writing today's numbers would re-freeze the same defect one value later, so
the 77 is now anchored to PR #9897 as the historical fact it is, today's size
is a FLOOR ("more than three times that") stated as a floor on purpose and
pointing at `--self-test`'s `checked` as the live reading, and the line number
is replaced by a reference to the guard itself, which cannot drift.
Measured before choosing the shape, on this file's own history rather than
inherited from the sibling: across all 13 commits that have ever touched it
(introduced 2026-08-18, never renamed), the static `assert(` count went up 10
times, held flat twice, and has never once gone down (22 -> 248 static). The
counting method reproduces the two independent readings on record — 70 static
at a065e46 and 223 at 9c4c431.
The runtime figure is not even constant across environments, which is a second
reason a floor beats a reading: `--self-test` prints 255 in an installed tree
and 253 without node_modules, where the generator-provenance row fails closed
and says so on its `live:` line. Both readings are green and truthful.
No behaviour change: the guard and the self-test are untouched, and the count
is identical before and after this commit (255 at the merge base, 255 here).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@os-sam
os-sam marked this pull request as ready for review August 31, 2026 23:22
@os-sam
os-sam requested a review from hotlong as a code ownerAugust 31, 2026 23:22
@os-sam
os-sam enabled auto-merge August 31, 2026 23:22
@os-sam
os-sam added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 62a137bAug 31, 2026
34 checks passed
@os-sam
os-sam deleted the claude/issue-13963-selftest-count-unanchored branch August 31, 2026 23:39
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] check-governed-merges.mjs sizes its own self-test at "THIS file's 77 assertions" — unanchored and stale; the live count is 223+

2 participants

@os-sam@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(pm): express the entry guard's self-test size as a floor, not a reading - #14002

Merged
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored
Aug 31, 2026
Merged

docs(pm): express the entry guard's self-test size as a floor, not a reading#14002
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13963

The docblock above this file's --self-test entry guard carried two figures frozen at PR #9897, and both had rotted. The card names one; reading the sentence turned up the other sitting beside it.

figure as writtentrue at PR #9897true todaydrift
"THIS file's 77 assertions"77 (measured, see below)255factor 3.3
"for the same reason line 810 carries it"line 810 really was the main-invocation guardline 810 is an unrelated try { in the regeneration predicate; the guard is at line 2336points at the wrong code

Both were true when written and neither is anchored to the moment that made it true, so both read as present-tense claims about this file. That is exactly the defect class #13536 describes.

The shape, copied from the sibling

Per triage, this follows what landed in dispatch-gates.mjs as 010518bb rather than inventing a shape:

  • the 77 is kept and anchored to PR feat(pm): ci-failure — a red check's assertion in one command #9897 as the historical fact it is (it was true there);
  • today's size is a FLOOR — "more than three times that" — written as a floor on purpose, pointing at --self-test's checked as the live reading;
  • the line number is replaced by a reference to the guard itself, which cannot drift;
  • a sentence says why it is a floor, and asks the next reader not to "helpfully" refresh either figure back into a reading.

Refreshing 77 to 255 was explicitly not done: it re-arms the identical defect one value later. No gate pins the figure to the live count either — #13536 rules that out, and this PR adds none.

The floor premise, re-measured on THIS file

Triage required this premise be re-run here rather than inherited from the sibling. Across all 13 commits that have ever touched this file (introduced 2026-08-18, never renamed), static assert( call sites went:

22 -> 70 -> 70 -> 74 -> 74 -> 83 -> 112 -> 122 -> 153 -> 185 -> 198 -> 223 -> 248
UP: 10 FLAT: 2 DOWN: 0

It has never once gone down, so a floor stays true where a reading rots. The counting method reproduces both independent readings already on record — 70 static at a065e46550b4 and 223 at 9c4c431fd — which is what makes the sweep trustworthy rather than merely self-consistent.

The historical 77 is measured, not assumed: the file at a065e46550b4 was run directly and printed 77 assertions.

Two notes worth recording. The clone this ran in arrived shallow (floor 2026-08-30, 208 commits), where this file has only 2 commits of history and PR #9897's commit does not resolve at all — the premise is unmeasurable in that state and a sweep run there would have "confirmed" a 2-commit history. It was unshallowed first (28s, strictly additive; --shallow-since was avoided because it can silently shorten, as scripts/pm/git-history.mjs documents). Second, the live count is not even constant across environments: --self-test prints 255 in an installed tree and 253 without node_modules, where the generator-provenance row fails closed and says so on its live: line. Both are green and truthful — a further reason the prose should not carry a number as a reading.

Verification

Gate union derived from the change set by node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (no hand-fed paths), run on final head 226bbc000:

  • 15 of 16 green, including pnpm check:pm-governed-merges (✓ 255 assertions), pnpm check:entry-guard, pnpm check:pm-dispatch-gates, node scripts/pm/bare-root-worklist.mjs --self-test (both convention-triggered gates for editing a gate script), and node scripts/check-skills-token-ratchet.mjs.
  • node scripts/check-test-completeness.mjs exits 3 = PREREQUISITE NOT MET, recorded as NOT MEASURED, not as a red: it grades a saved turbo run test log, none exists locally, and CI passes the path on every invocation, so the branch is unreachable there.

No behaviour change: the guard and the self-test are untouched, and the count is identical either side of the diff — 255 at the merge base, 255 at head. The diff is comment-only, one hunk, 17 insertions / 7 deletions.

Sibling card #13896 (same file) is closed, and no open PR touches this file, so nothing serialises against this one.

Generated by Claude Code


Generated by Claude Code

…reading
The docblock above the `--self-test` entry guard carried two figures frozen at
PR #9897 and both had rotted:
* "THIS file's 77 assertions" read as a present-tense claim about this
file's current suite. It printed 77 at PR #9897 and prints 255 today — a
factor of 3.3.
* "the same reason line 810 carries it" pointed at the sibling
main-invocation guard, which really was line 810 at PR #9897. Line 810 is
now an unrelated `try {` inside the regeneration predicate; the guard has
moved to line 2336.
Writing today's numbers would re-freeze the same defect one value later, so
the 77 is now anchored to PR #9897 as the historical fact it is, today's size
is a FLOOR ("more than three times that") stated as a floor on purpose and
pointing at `--self-test`'s `checked` as the live reading, and the line number
is replaced by a reference to the guard itself, which cannot drift.
Measured before choosing the shape, on this file's own history rather than
inherited from the sibling: across all 13 commits that have ever touched it
(introduced 2026-08-18, never renamed), the static `assert(` count went up 10
times, held flat twice, and has never once gone down (22 -> 248 static). The
counting method reproduces the two independent readings on record — 70 static
at a065e46 and 223 at 9c4c431.
The runtime figure is not even constant across environments, which is a second
reason a floor beats a reading: `--self-test` prints 255 in an installed tree
and 253 without node_modules, where the generator-provenance row fails closed
and says so on its `live:` line. Both readings are green and truthful.
No behaviour change: the guard and the self-test are untouched, and the count
is identical before and after this commit (255 at the merge base, 255 here).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@os-sam
os-sam marked this pull request as ready for review August 31, 2026 23:22
@os-sam
os-sam requested a review from hotlong as a code ownerAugust 31, 2026 23:22
@os-sam
os-sam enabled auto-merge August 31, 2026 23:22
@os-sam
os-sam added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 62a137bAug 31, 2026
34 checks passed
@os-sam
os-sam deleted the claude/issue-13963-selftest-count-unanchored branch August 31, 2026 23:39
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] check-governed-merges.mjs sizes its own self-test at "THIS file's 77 assertions" — unanchored and stale; the live count is 223+

2 participants

@os-sam@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(pm): express the entry guard's self-test size as a floor, not a reading - #14002

Merged
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored
Aug 31, 2026
Merged

docs(pm): express the entry guard's self-test size as a floor, not a reading#14002
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13963

The docblock above this file's --self-test entry guard carried two figures frozen at PR #9897, and both had rotted. The card names one; reading the sentence turned up the other sitting beside it.

figure as writtentrue at PR #9897true todaydrift
"THIS file's 77 assertions"77 (measured, see below)255factor 3.3
"for the same reason line 810 carries it"line 810 really was the main-invocation guardline 810 is an unrelated try { in the regeneration predicate; the guard is at line 2336points at the wrong code

Both were true when written and neither is anchored to the moment that made it true, so both read as present-tense claims about this file. That is exactly the defect class #13536 describes.

The shape, copied from the sibling

Per triage, this follows what landed in dispatch-gates.mjs as 010518bb rather than inventing a shape:

  • the 77 is kept and anchored to PR feat(pm): ci-failure — a red check's assertion in one command #9897 as the historical fact it is (it was true there);
  • today's size is a FLOOR — "more than three times that" — written as a floor on purpose, pointing at --self-test's checked as the live reading;
  • the line number is replaced by a reference to the guard itself, which cannot drift;
  • a sentence says why it is a floor, and asks the next reader not to "helpfully" refresh either figure back into a reading.

Refreshing 77 to 255 was explicitly not done: it re-arms the identical defect one value later. No gate pins the figure to the live count either — #13536 rules that out, and this PR adds none.

The floor premise, re-measured on THIS file

Triage required this premise be re-run here rather than inherited from the sibling. Across all 13 commits that have ever touched this file (introduced 2026-08-18, never renamed), static assert( call sites went:

22 -> 70 -> 70 -> 74 -> 74 -> 83 -> 112 -> 122 -> 153 -> 185 -> 198 -> 223 -> 248
UP: 10 FLAT: 2 DOWN: 0

It has never once gone down, so a floor stays true where a reading rots. The counting method reproduces both independent readings already on record — 70 static at a065e46550b4 and 223 at 9c4c431fd — which is what makes the sweep trustworthy rather than merely self-consistent.

The historical 77 is measured, not assumed: the file at a065e46550b4 was run directly and printed 77 assertions.

Two notes worth recording. The clone this ran in arrived shallow (floor 2026-08-30, 208 commits), where this file has only 2 commits of history and PR #9897's commit does not resolve at all — the premise is unmeasurable in that state and a sweep run there would have "confirmed" a 2-commit history. It was unshallowed first (28s, strictly additive; --shallow-since was avoided because it can silently shorten, as scripts/pm/git-history.mjs documents). Second, the live count is not even constant across environments: --self-test prints 255 in an installed tree and 253 without node_modules, where the generator-provenance row fails closed and says so on its live: line. Both are green and truthful — a further reason the prose should not carry a number as a reading.

Verification

Gate union derived from the change set by node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (no hand-fed paths), run on final head 226bbc000:

  • 15 of 16 green, including pnpm check:pm-governed-merges (✓ 255 assertions), pnpm check:entry-guard, pnpm check:pm-dispatch-gates, node scripts/pm/bare-root-worklist.mjs --self-test (both convention-triggered gates for editing a gate script), and node scripts/check-skills-token-ratchet.mjs.
  • node scripts/check-test-completeness.mjs exits 3 = PREREQUISITE NOT MET, recorded as NOT MEASURED, not as a red: it grades a saved turbo run test log, none exists locally, and CI passes the path on every invocation, so the branch is unreachable there.

No behaviour change: the guard and the self-test are untouched, and the count is identical either side of the diff — 255 at the merge base, 255 at head. The diff is comment-only, one hunk, 17 insertions / 7 deletions.

Sibling card #13896 (same file) is closed, and no open PR touches this file, so nothing serialises against this one.

Generated by Claude Code


Generated by Claude Code

…reading
The docblock above the `--self-test` entry guard carried two figures frozen at
PR #9897 and both had rotted:
* "THIS file's 77 assertions" read as a present-tense claim about this
file's current suite. It printed 77 at PR #9897 and prints 255 today — a
factor of 3.3.
* "the same reason line 810 carries it" pointed at the sibling
main-invocation guard, which really was line 810 at PR #9897. Line 810 is
now an unrelated `try {` inside the regeneration predicate; the guard has
moved to line 2336.
Writing today's numbers would re-freeze the same defect one value later, so
the 77 is now anchored to PR #9897 as the historical fact it is, today's size
is a FLOOR ("more than three times that") stated as a floor on purpose and
pointing at `--self-test`'s `checked` as the live reading, and the line number
is replaced by a reference to the guard itself, which cannot drift.
Measured before choosing the shape, on this file's own history rather than
inherited from the sibling: across all 13 commits that have ever touched it
(introduced 2026-08-18, never renamed), the static `assert(` count went up 10
times, held flat twice, and has never once gone down (22 -> 248 static). The
counting method reproduces the two independent readings on record — 70 static
at a065e46 and 223 at 9c4c431.
The runtime figure is not even constant across environments, which is a second
reason a floor beats a reading: `--self-test` prints 255 in an installed tree
and 253 without node_modules, where the generator-provenance row fails closed
and says so on its `live:` line. Both readings are green and truthful.
No behaviour change: the guard and the self-test are untouched, and the count
is identical before and after this commit (255 at the merge base, 255 here).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@os-sam
os-sam marked this pull request as ready for review August 31, 2026 23:22
@os-sam
os-sam requested a review from hotlong as a code ownerAugust 31, 2026 23:22
@os-sam
os-sam enabled auto-merge August 31, 2026 23:22
@os-sam
os-sam added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 62a137bAug 31, 2026
34 checks passed
@os-sam
os-sam deleted the claude/issue-13963-selftest-count-unanchored branch August 31, 2026 23:39
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] check-governed-merges.mjs sizes its own self-test at "THIS file's 77 assertions" — unanchored and stale; the live count is 223+

2 participants

@os-sam@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(pm): express the entry guard's self-test size as a floor, not a reading - #14002

Merged
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored
Aug 31, 2026
Merged

docs(pm): express the entry guard's self-test size as a floor, not a reading#14002
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13963

The docblock above this file's --self-test entry guard carried two figures frozen at PR #9897, and both had rotted. The card names one; reading the sentence turned up the other sitting beside it.

figure as writtentrue at PR #9897true todaydrift
"THIS file's 77 assertions"77 (measured, see below)255factor 3.3
"for the same reason line 810 carries it"line 810 really was the main-invocation guardline 810 is an unrelated try { in the regeneration predicate; the guard is at line 2336points at the wrong code

Both were true when written and neither is anchored to the moment that made it true, so both read as present-tense claims about this file. That is exactly the defect class #13536 describes.

The shape, copied from the sibling

Per triage, this follows what landed in dispatch-gates.mjs as 010518bb rather than inventing a shape:

  • the 77 is kept and anchored to PR feat(pm): ci-failure — a red check's assertion in one command #9897 as the historical fact it is (it was true there);
  • today's size is a FLOOR — "more than three times that" — written as a floor on purpose, pointing at --self-test's checked as the live reading;
  • the line number is replaced by a reference to the guard itself, which cannot drift;
  • a sentence says why it is a floor, and asks the next reader not to "helpfully" refresh either figure back into a reading.

Refreshing 77 to 255 was explicitly not done: it re-arms the identical defect one value later. No gate pins the figure to the live count either — #13536 rules that out, and this PR adds none.

The floor premise, re-measured on THIS file

Triage required this premise be re-run here rather than inherited from the sibling. Across all 13 commits that have ever touched this file (introduced 2026-08-18, never renamed), static assert( call sites went:

22 -> 70 -> 70 -> 74 -> 74 -> 83 -> 112 -> 122 -> 153 -> 185 -> 198 -> 223 -> 248
UP: 10 FLAT: 2 DOWN: 0

It has never once gone down, so a floor stays true where a reading rots. The counting method reproduces both independent readings already on record — 70 static at a065e46550b4 and 223 at 9c4c431fd — which is what makes the sweep trustworthy rather than merely self-consistent.

The historical 77 is measured, not assumed: the file at a065e46550b4 was run directly and printed 77 assertions.

Two notes worth recording. The clone this ran in arrived shallow (floor 2026-08-30, 208 commits), where this file has only 2 commits of history and PR #9897's commit does not resolve at all — the premise is unmeasurable in that state and a sweep run there would have "confirmed" a 2-commit history. It was unshallowed first (28s, strictly additive; --shallow-since was avoided because it can silently shorten, as scripts/pm/git-history.mjs documents). Second, the live count is not even constant across environments: --self-test prints 255 in an installed tree and 253 without node_modules, where the generator-provenance row fails closed and says so on its live: line. Both are green and truthful — a further reason the prose should not carry a number as a reading.

Verification

Gate union derived from the change set by node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (no hand-fed paths), run on final head 226bbc000:

  • 15 of 16 green, including pnpm check:pm-governed-merges (✓ 255 assertions), pnpm check:entry-guard, pnpm check:pm-dispatch-gates, node scripts/pm/bare-root-worklist.mjs --self-test (both convention-triggered gates for editing a gate script), and node scripts/check-skills-token-ratchet.mjs.
  • node scripts/check-test-completeness.mjs exits 3 = PREREQUISITE NOT MET, recorded as NOT MEASURED, not as a red: it grades a saved turbo run test log, none exists locally, and CI passes the path on every invocation, so the branch is unreachable there.

No behaviour change: the guard and the self-test are untouched, and the count is identical either side of the diff — 255 at the merge base, 255 at head. The diff is comment-only, one hunk, 17 insertions / 7 deletions.

Sibling card #13896 (same file) is closed, and no open PR touches this file, so nothing serialises against this one.

Generated by Claude Code


Generated by Claude Code

…reading
The docblock above the `--self-test` entry guard carried two figures frozen at
PR #9897 and both had rotted:
* "THIS file's 77 assertions" read as a present-tense claim about this
file's current suite. It printed 77 at PR #9897 and prints 255 today — a
factor of 3.3.
* "the same reason line 810 carries it" pointed at the sibling
main-invocation guard, which really was line 810 at PR #9897. Line 810 is
now an unrelated `try {` inside the regeneration predicate; the guard has
moved to line 2336.
Writing today's numbers would re-freeze the same defect one value later, so
the 77 is now anchored to PR #9897 as the historical fact it is, today's size
is a FLOOR ("more than three times that") stated as a floor on purpose and
pointing at `--self-test`'s `checked` as the live reading, and the line number
is replaced by a reference to the guard itself, which cannot drift.
Measured before choosing the shape, on this file's own history rather than
inherited from the sibling: across all 13 commits that have ever touched it
(introduced 2026-08-18, never renamed), the static `assert(` count went up 10
times, held flat twice, and has never once gone down (22 -> 248 static). The
counting method reproduces the two independent readings on record — 70 static
at a065e46 and 223 at 9c4c431.
The runtime figure is not even constant across environments, which is a second
reason a floor beats a reading: `--self-test` prints 255 in an installed tree
and 253 without node_modules, where the generator-provenance row fails closed
and says so on its `live:` line. Both readings are green and truthful.
No behaviour change: the guard and the self-test are untouched, and the count
is identical before and after this commit (255 at the merge base, 255 here).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@os-sam
os-sam marked this pull request as ready for review August 31, 2026 23:22
@os-sam
os-sam requested a review from hotlong as a code ownerAugust 31, 2026 23:22
@os-sam
os-sam enabled auto-merge August 31, 2026 23:22
@os-sam
os-sam added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 62a137bAug 31, 2026
34 checks passed
@os-sam
os-sam deleted the claude/issue-13963-selftest-count-unanchored branch August 31, 2026 23:39
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] check-governed-merges.mjs sizes its own self-test at "THIS file's 77 assertions" — unanchored and stale; the live count is 223+

2 participants

@os-sam@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(pm): express the entry guard's self-test size as a floor, not a reading - #14002

Merged
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored
Aug 31, 2026
Merged

docs(pm): express the entry guard's self-test size as a floor, not a reading#14002
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13963

The docblock above this file's --self-test entry guard carried two figures frozen at PR #9897, and both had rotted. The card names one; reading the sentence turned up the other sitting beside it.

figure as writtentrue at PR #9897true todaydrift
"THIS file's 77 assertions"77 (measured, see below)255factor 3.3
"for the same reason line 810 carries it"line 810 really was the main-invocation guardline 810 is an unrelated try { in the regeneration predicate; the guard is at line 2336points at the wrong code

Both were true when written and neither is anchored to the moment that made it true, so both read as present-tense claims about this file. That is exactly the defect class #13536 describes.

The shape, copied from the sibling

Per triage, this follows what landed in dispatch-gates.mjs as 010518bb rather than inventing a shape:

  • the 77 is kept and anchored to PR feat(pm): ci-failure — a red check's assertion in one command #9897 as the historical fact it is (it was true there);
  • today's size is a FLOOR — "more than three times that" — written as a floor on purpose, pointing at --self-test's checked as the live reading;
  • the line number is replaced by a reference to the guard itself, which cannot drift;
  • a sentence says why it is a floor, and asks the next reader not to "helpfully" refresh either figure back into a reading.

Refreshing 77 to 255 was explicitly not done: it re-arms the identical defect one value later. No gate pins the figure to the live count either — #13536 rules that out, and this PR adds none.

The floor premise, re-measured on THIS file

Triage required this premise be re-run here rather than inherited from the sibling. Across all 13 commits that have ever touched this file (introduced 2026-08-18, never renamed), static assert( call sites went:

22 -> 70 -> 70 -> 74 -> 74 -> 83 -> 112 -> 122 -> 153 -> 185 -> 198 -> 223 -> 248
UP: 10 FLAT: 2 DOWN: 0

It has never once gone down, so a floor stays true where a reading rots. The counting method reproduces both independent readings already on record — 70 static at a065e46550b4 and 223 at 9c4c431fd — which is what makes the sweep trustworthy rather than merely self-consistent.

The historical 77 is measured, not assumed: the file at a065e46550b4 was run directly and printed 77 assertions.

Two notes worth recording. The clone this ran in arrived shallow (floor 2026-08-30, 208 commits), where this file has only 2 commits of history and PR #9897's commit does not resolve at all — the premise is unmeasurable in that state and a sweep run there would have "confirmed" a 2-commit history. It was unshallowed first (28s, strictly additive; --shallow-since was avoided because it can silently shorten, as scripts/pm/git-history.mjs documents). Second, the live count is not even constant across environments: --self-test prints 255 in an installed tree and 253 without node_modules, where the generator-provenance row fails closed and says so on its live: line. Both are green and truthful — a further reason the prose should not carry a number as a reading.

Verification

Gate union derived from the change set by node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (no hand-fed paths), run on final head 226bbc000:

  • 15 of 16 green, including pnpm check:pm-governed-merges (✓ 255 assertions), pnpm check:entry-guard, pnpm check:pm-dispatch-gates, node scripts/pm/bare-root-worklist.mjs --self-test (both convention-triggered gates for editing a gate script), and node scripts/check-skills-token-ratchet.mjs.
  • node scripts/check-test-completeness.mjs exits 3 = PREREQUISITE NOT MET, recorded as NOT MEASURED, not as a red: it grades a saved turbo run test log, none exists locally, and CI passes the path on every invocation, so the branch is unreachable there.

No behaviour change: the guard and the self-test are untouched, and the count is identical either side of the diff — 255 at the merge base, 255 at head. The diff is comment-only, one hunk, 17 insertions / 7 deletions.

Sibling card #13896 (same file) is closed, and no open PR touches this file, so nothing serialises against this one.

Generated by Claude Code


Generated by Claude Code

…reading
The docblock above the `--self-test` entry guard carried two figures frozen at
PR #9897 and both had rotted:
* "THIS file's 77 assertions" read as a present-tense claim about this
file's current suite. It printed 77 at PR #9897 and prints 255 today — a
factor of 3.3.
* "the same reason line 810 carries it" pointed at the sibling
main-invocation guard, which really was line 810 at PR #9897. Line 810 is
now an unrelated `try {` inside the regeneration predicate; the guard has
moved to line 2336.
Writing today's numbers would re-freeze the same defect one value later, so
the 77 is now anchored to PR #9897 as the historical fact it is, today's size
is a FLOOR ("more than three times that") stated as a floor on purpose and
pointing at `--self-test`'s `checked` as the live reading, and the line number
is replaced by a reference to the guard itself, which cannot drift.
Measured before choosing the shape, on this file's own history rather than
inherited from the sibling: across all 13 commits that have ever touched it
(introduced 2026-08-18, never renamed), the static `assert(` count went up 10
times, held flat twice, and has never once gone down (22 -> 248 static). The
counting method reproduces the two independent readings on record — 70 static
at a065e46 and 223 at 9c4c431.
The runtime figure is not even constant across environments, which is a second
reason a floor beats a reading: `--self-test` prints 255 in an installed tree
and 253 without node_modules, where the generator-provenance row fails closed
and says so on its `live:` line. Both readings are green and truthful.
No behaviour change: the guard and the self-test are untouched, and the count
is identical before and after this commit (255 at the merge base, 255 here).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@os-sam
os-sam marked this pull request as ready for review August 31, 2026 23:22
@os-sam
os-sam requested a review from hotlong as a code ownerAugust 31, 2026 23:22
@os-sam
os-sam enabled auto-merge August 31, 2026 23:22
@os-sam
os-sam added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 62a137bAug 31, 2026
34 checks passed
@os-sam
os-sam deleted the claude/issue-13963-selftest-count-unanchored branch August 31, 2026 23:39
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] check-governed-merges.mjs sizes its own self-test at "THIS file's 77 assertions" — unanchored and stale; the live count is 223+

2 participants

@os-sam@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(pm): express the entry guard's self-test size as a floor, not a reading - #14002

Merged
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored
Aug 31, 2026
Merged

docs(pm): express the entry guard's self-test size as a floor, not a reading#14002
os-sam merged 1 commit into
mainfrom
claude/issue-13963-selftest-count-unanchored

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13963

The docblock above this file's --self-test entry guard carried two figures frozen at PR #9897, and both had rotted. The card names one; reading the sentence turned up the other sitting beside it.

figure as writtentrue at PR #9897true todaydrift
"THIS file's 77 assertions"77 (measured, see below)255factor 3.3
"for the same reason line 810 carries it"line 810 really was the main-invocation guardline 810 is an unrelated try { in the regeneration predicate; the guard is at line 2336points at the wrong code

Both were true when written and neither is anchored to the moment that made it true, so both read as present-tense claims about this file. That is exactly the defect class #13536 describes.

The shape, copied from the sibling

Per triage, this follows what landed in dispatch-gates.mjs as 010518bb rather than inventing a shape:

  • the 77 is kept and anchored to PR feat(pm): ci-failure — a red check's assertion in one command #9897 as the historical fact it is (it was true there);
  • today's size is a FLOOR — "more than three times that" — written as a floor on purpose, pointing at --self-test's checked as the live reading;
  • the line number is replaced by a reference to the guard itself, which cannot drift;
  • a sentence says why it is a floor, and asks the next reader not to "helpfully" refresh either figure back into a reading.

Refreshing 77 to 255 was explicitly not done: it re-arms the identical defect one value later. No gate pins the figure to the live count either — #13536 rules that out, and this PR adds none.

The floor premise, re-measured on THIS file

Triage required this premise be re-run here rather than inherited from the sibling. Across all 13 commits that have ever touched this file (introduced 2026-08-18, never renamed), static assert( call sites went:

22 -> 70 -> 70 -> 74 -> 74 -> 83 -> 112 -> 122 -> 153 -> 185 -> 198 -> 223 -> 248
UP: 10 FLAT: 2 DOWN: 0

It has never once gone down, so a floor stays true where a reading rots. The counting method reproduces both independent readings already on record — 70 static at a065e46550b4 and 223 at 9c4c431fd — which is what makes the sweep trustworthy rather than merely self-consistent.

The historical 77 is measured, not assumed: the file at a065e46550b4 was run directly and printed 77 assertions.

Two notes worth recording. The clone this ran in arrived shallow (floor 2026-08-30, 208 commits), where this file has only 2 commits of history and PR #9897's commit does not resolve at all — the premise is unmeasurable in that state and a sweep run there would have "confirmed" a 2-commit history. It was unshallowed first (28s, strictly additive; --shallow-since was avoided because it can silently shorten, as scripts/pm/git-history.mjs documents). Second, the live count is not even constant across environments: --self-test prints 255 in an installed tree and 253 without node_modules, where the generator-provenance row fails closed and says so on its live: line. Both are green and truthful — a further reason the prose should not carry a number as a reading.

Verification

Gate union derived from the change set by node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (no hand-fed paths), run on final head 226bbc000:

  • 15 of 16 green, including pnpm check:pm-governed-merges (✓ 255 assertions), pnpm check:entry-guard, pnpm check:pm-dispatch-gates, node scripts/pm/bare-root-worklist.mjs --self-test (both convention-triggered gates for editing a gate script), and node scripts/check-skills-token-ratchet.mjs.
  • node scripts/check-test-completeness.mjs exits 3 = PREREQUISITE NOT MET, recorded as NOT MEASURED, not as a red: it grades a saved turbo run test log, none exists locally, and CI passes the path on every invocation, so the branch is unreachable there.

No behaviour change: the guard and the self-test are untouched, and the count is identical either side of the diff — 255 at the merge base, 255 at head. The diff is comment-only, one hunk, 17 insertions / 7 deletions.

Sibling card #13896 (same file) is closed, and no open PR touches this file, so nothing serialises against this one.

Generated by Claude Code


Generated by Claude Code

…reading
The docblock above the `--self-test` entry guard carried two figures frozen at
PR #9897 and both had rotted:
* "THIS file's 77 assertions" read as a present-tense claim about this
file's current suite. It printed 77 at PR #9897 and prints 255 today — a
factor of 3.3.
* "the same reason line 810 carries it" pointed at the sibling
main-invocation guard, which really was line 810 at PR #9897. Line 810 is
now an unrelated `try {` inside the regeneration predicate; the guard has
moved to line 2336.
Writing today's numbers would re-freeze the same defect one value later, so
the 77 is now anchored to PR #9897 as the historical fact it is, today's size
is a FLOOR ("more than three times that") stated as a floor on purpose and
pointing at `--self-test`'s `checked` as the live reading, and the line number
is replaced by a reference to the guard itself, which cannot drift.
Measured before choosing the shape, on this file's own history rather than
inherited from the sibling: across all 13 commits that have ever touched it
(introduced 2026-08-18, never renamed), the static `assert(` count went up 10
times, held flat twice, and has never once gone down (22 -> 248 static). The
counting method reproduces the two independent readings on record — 70 static
at a065e46 and 223 at 9c4c431.
The runtime figure is not even constant across environments, which is a second
reason a floor beats a reading: `--self-test` prints 255 in an installed tree
and 253 without node_modules, where the generator-provenance row fails closed
and says so on its `live:` line. Both readings are green and truthful.
No behaviour change: the guard and the self-test are untouched, and the count
is identical before and after this commit (255 at the merge base, 255 here).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026
@os-sam
os-sam marked this pull request as ready for review August 31, 2026 23:22
@os-sam
os-sam requested a review from hotlong as a code ownerAugust 31, 2026 23:22
@os-sam
os-sam enabled auto-merge August 31, 2026 23:22
@os-sam
os-sam added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 62a137bAug 31, 2026
34 checks passed
@os-sam
os-sam deleted the claude/issue-13963-selftest-count-unanchored branch August 31, 2026 23:39
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] check-governed-merges.mjs sizes its own self-test at "THIS file's 77 assertions" — unanchored and stale; the live count is 223+

2 participants

@os-sam@claude