docs(pm-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet) - #14068

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn
Sep 1, 2026
Merged

docs(pm-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet)#14068
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn

Conversation

@claude

@claudeclaudeBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Part of #13900

Half of the adjudicated two-file repair lands here. The other half is stopped on a
measured ceiling
, with byte-exact floors below — it is an audit input, not an omission.

What landed: the falsified completeness certificate is retracted in place

.claude/skills/pm-dispatch/references/platform-readings.md L147 certified the REST
issues-list endpoint's results as complete — (core 桶、结果**完整**、 ...) — inside the
dedup ladder that routes a seat to that endpoint precisely when search_issues has gone
to a session-level zero. That property is false. The line now reads:

(core 桶、 `labels` 真 AND;⛔ 完整性自证:`&page=N` + 总数核对;...)

The certificate is replaced by the obligation it was standing in for: completeness is
self-proved, by the page-number walk plus a total-count cross-check. Nothing else in
the bullet changed; the two adjacent readings it carries (the MCP branch's 226-of-100
manual-paging reading, and the qualifier tombstone) are untouched.

No causal claim is made, and none is implied. Whether the truncation is GitHub's own
cursor behaviour or the session egress proxy rewriting the Link header is UNMEASURED.
The prescription removes the dependency on that header; it does not diagnose it. The
landed text asserts nothing about cause.

I grepped the whole pm-dispatch surface for completeness claims afterwards: L147 was the
only one about this channel, so no false statement about it remains anywhere in the corpus
even with the second file stopped.

Reproduction, first-hand, this container, this repo

Not inherited from the card — re-measured here against objectstack-ai/objectstack:

how the open-issues population was walkeditems
per_page=100, then follow Link: rel="next"102 (100 + 2, then no further rel="next")
per_page=100&page=1..5 (classic page numbers)448 (100+100+100+100+48)
open_issues_count from the repo endpoint447, re-read 449 (live backlog; counts issues AND PRs)
open PRs, pulls?state=open page-walked23 (page 2 and 3 empty)

The Link header does carry a cursor rather than a page number:

Link: .../repositories/1136691870/issues?state=open&per_page=1&after=Y3Vyc29yOnYyOpLP...&page=2; rel="next"

The cursor walk terminates the way an exhausted walk terminates — no error, no warning —
having returned 102 of ~448. The card measured the identical 102 on a sibling repo, so the
cutoff is not repo-specific.

Premise re-verified on origin/main before editing: both files still carried the
falsified certificate and lacked the prescriptions, and no open PR touches either file
(all 23 open PRs' file lists checked; two touch other files in the same references/
directory — decision-analysis.md and dispatch-runbook.md — neither overlaps).

What is stopped, and the byte-exact floor

The two prescriptions for references/rest-channel.md are not in this PR. The file has
no room and this card carries no ruling that would make room.

Line-ratchet verdict lines at this head, both files:

✓ check-skill-line-ratchet: .../references/platform-readings.md is 314 lines (ceiling 314; headroom 0).
✓ check-skill-line-ratchet: .../references/rest-channel.md is 87 lines (ceiling 87; headroom 0).

Reflow-within-lines was tried first and measured, not assumed. Using the gate's own
splitPrefix / hanAsciiPunctTail / 120-byte budget, plus the break repertoire the corpus
actually uses (a space, or a segment break between two wide characters), an optimal
minimum-line packer
was run over every block of both files:

filelines nowoptimal repackreclaimable
platform-readings.md3143140
rest-channel.md87870

The packer reproducing each file's current line count exactly, block for block, is the
calibration: these files were mechanically re-wrapped once already and are sitting on
their packing floor. There is no slack to reclaim in either file.

What that leaves, measured to the byte:

  • rest-channel.md, list-cards row (L18-19): 212 bytes over 2 lines; it can absorb
    23 more bytes without a third line. The two prescriptions written faithfully — both
    refusals, the &page=1,2,3…-until-a-short-page termination condition, the
    open_issues_count cross-check with the open-PR subtraction, the cause-unknown boundary,
    and the note that a keyword positive control structurally cannot see this class — are
    731 bytes ⇒ 6 lines. Stripped to the two refusals plus the cause boundary: ~450 bytes
    4 lines. Funding 4-6 lines means deleting 4-6 lines of measured content or raising
    the ceiling; the ratchet's own rule is that a raise needs a maintainer ruling quoted in
    the raising PR, and this card has none. So: stopped, not forced.
  • platform-readings.md, certificate bullet (L141-150): 1,140 bytes over 10 lines, and
    it absorbs exactly +26 bytes at 10 lines. The landed correction is +26 — at the
    ceiling to the byte, which is why it says 总数核对 rather than naming
    open_issues_count inline (+33, which needs an 11th line).

One candidate funding source, offered as an observation rather than acted on:
rest-channel.md L58 restates the red-window standing rule that platform-readings.md
owns in its quota section, against rest-channel.md's own header rule that a fact lives in
one place. Retiring it would free a line or two — but that is a content decision about
which file owns a rule, not a reflow, so it belongs to the maintainer, not to this card.

Gates

Derived after the last commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(the script takes the change set from the merge base itself). Union run at head
028dbc85e; exit codes captured before any pipe.

gateexit
pnpm check:pm-skill-ratchet0
pnpm check:pm-skill-id-lint0
pnpm check:skill-frame-sync0
pnpm check:doc-authoring0
pnpm check:agent-test-spelling0
pnpm check:pm-governed-merges0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:nul-bytes0 (not derived; run because any edit owes it)
node scripts/pm/check-governed-queue-guard.mjs1 — NOT MEASURED

Two readings that are not results, stated so they are not read as green or red:

  • check:doc-formula-expressions first exited 3PREREQUISITE NOT MET, its own words
    "Nothing was measured". Building @objectstack/formula and then @objectstack/lint
    cleared it; the 0 above is the re-run.
  • check-governed-queue-guard exits 1 locally because it reads GITHUB_EVENT_PATH and
    there is no workflow event payload in a container. By design it refuses to be green when
    it cannot look. It runs in CI.

Landing

.claude/** is a governed surface: draft only, human merge, approval pinned to the
current head. No changeset — the diff is .claude/**-only, so skip-changeset is applied
(additively) instead.

Generated by Claude Code


Generated by Claude Code

The dedup ladder's REST branch certified the list endpoint's results as
complete. Measured in one container against this repo: walking the
`Link: rel="next"` cursor the endpoint returns reports itself exhausted
at 102 items, while the `&page=1,2,3...` walk over the identical query
returns 448 and matches `open_issues_count` (449 at re-read, 23 open
PRs). A dedup grep over the returned 102 answers "no duplicate" with
total confidence -- the failure the ladder routes seats INTO when
`search_issues` goes to a session-level zero.
The certificate is replaced in place by the obligation it was standing
in for: completeness is self-proved, by the page-number walk plus a
total-count cross-check. Line-neutral -- the file stays at its 314-line
ceiling, and the change is a correction of a measured-false line, not an
addition.
The cause is NOT explained here and is not claimed to be: whether the
truncation is GitHub's own cursor behaviour or the session egress proxy
rewriting the `Link` header is unmeasured. The prescription removes the
dependency on that header; it does not diagnose it.
@github-actionsgithub-actionsBot added size/xs documentation Improvements or additions to documentation labels Sep 1, 2026
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 1, 2026
@claude
claudeBot requested review from hotlong and os-zhuangSeptember 1, 2026 02:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-zhuang@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-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet) - #14068

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn
Sep 1, 2026
Merged

docs(pm-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet)#14068
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn

Conversation

@claude

@claudeclaudeBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Part of #13900

Half of the adjudicated two-file repair lands here. The other half is stopped on a
measured ceiling
, with byte-exact floors below — it is an audit input, not an omission.

What landed: the falsified completeness certificate is retracted in place

.claude/skills/pm-dispatch/references/platform-readings.md L147 certified the REST
issues-list endpoint's results as complete — (core 桶、结果**完整**、 ...) — inside the
dedup ladder that routes a seat to that endpoint precisely when search_issues has gone
to a session-level zero. That property is false. The line now reads:

(core 桶、 `labels` 真 AND;⛔ 完整性自证:`&page=N` + 总数核对;...)

The certificate is replaced by the obligation it was standing in for: completeness is
self-proved, by the page-number walk plus a total-count cross-check. Nothing else in
the bullet changed; the two adjacent readings it carries (the MCP branch's 226-of-100
manual-paging reading, and the qualifier tombstone) are untouched.

No causal claim is made, and none is implied. Whether the truncation is GitHub's own
cursor behaviour or the session egress proxy rewriting the Link header is UNMEASURED.
The prescription removes the dependency on that header; it does not diagnose it. The
landed text asserts nothing about cause.

I grepped the whole pm-dispatch surface for completeness claims afterwards: L147 was the
only one about this channel, so no false statement about it remains anywhere in the corpus
even with the second file stopped.

Reproduction, first-hand, this container, this repo

Not inherited from the card — re-measured here against objectstack-ai/objectstack:

how the open-issues population was walkeditems
per_page=100, then follow Link: rel="next"102 (100 + 2, then no further rel="next")
per_page=100&page=1..5 (classic page numbers)448 (100+100+100+100+48)
open_issues_count from the repo endpoint447, re-read 449 (live backlog; counts issues AND PRs)
open PRs, pulls?state=open page-walked23 (page 2 and 3 empty)

The Link header does carry a cursor rather than a page number:

Link: .../repositories/1136691870/issues?state=open&per_page=1&after=Y3Vyc29yOnYyOpLP...&page=2; rel="next"

The cursor walk terminates the way an exhausted walk terminates — no error, no warning —
having returned 102 of ~448. The card measured the identical 102 on a sibling repo, so the
cutoff is not repo-specific.

Premise re-verified on origin/main before editing: both files still carried the
falsified certificate and lacked the prescriptions, and no open PR touches either file
(all 23 open PRs' file lists checked; two touch other files in the same references/
directory — decision-analysis.md and dispatch-runbook.md — neither overlaps).

What is stopped, and the byte-exact floor

The two prescriptions for references/rest-channel.md are not in this PR. The file has
no room and this card carries no ruling that would make room.

Line-ratchet verdict lines at this head, both files:

✓ check-skill-line-ratchet: .../references/platform-readings.md is 314 lines (ceiling 314; headroom 0).
✓ check-skill-line-ratchet: .../references/rest-channel.md is 87 lines (ceiling 87; headroom 0).

Reflow-within-lines was tried first and measured, not assumed. Using the gate's own
splitPrefix / hanAsciiPunctTail / 120-byte budget, plus the break repertoire the corpus
actually uses (a space, or a segment break between two wide characters), an optimal
minimum-line packer
was run over every block of both files:

filelines nowoptimal repackreclaimable
platform-readings.md3143140
rest-channel.md87870

The packer reproducing each file's current line count exactly, block for block, is the
calibration: these files were mechanically re-wrapped once already and are sitting on
their packing floor. There is no slack to reclaim in either file.

What that leaves, measured to the byte:

  • rest-channel.md, list-cards row (L18-19): 212 bytes over 2 lines; it can absorb
    23 more bytes without a third line. The two prescriptions written faithfully — both
    refusals, the &page=1,2,3…-until-a-short-page termination condition, the
    open_issues_count cross-check with the open-PR subtraction, the cause-unknown boundary,
    and the note that a keyword positive control structurally cannot see this class — are
    731 bytes ⇒ 6 lines. Stripped to the two refusals plus the cause boundary: ~450 bytes
    4 lines. Funding 4-6 lines means deleting 4-6 lines of measured content or raising
    the ceiling; the ratchet's own rule is that a raise needs a maintainer ruling quoted in
    the raising PR, and this card has none. So: stopped, not forced.
  • platform-readings.md, certificate bullet (L141-150): 1,140 bytes over 10 lines, and
    it absorbs exactly +26 bytes at 10 lines. The landed correction is +26 — at the
    ceiling to the byte, which is why it says 总数核对 rather than naming
    open_issues_count inline (+33, which needs an 11th line).

One candidate funding source, offered as an observation rather than acted on:
rest-channel.md L58 restates the red-window standing rule that platform-readings.md
owns in its quota section, against rest-channel.md's own header rule that a fact lives in
one place. Retiring it would free a line or two — but that is a content decision about
which file owns a rule, not a reflow, so it belongs to the maintainer, not to this card.

Gates

Derived after the last commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(the script takes the change set from the merge base itself). Union run at head
028dbc85e; exit codes captured before any pipe.

gateexit
pnpm check:pm-skill-ratchet0
pnpm check:pm-skill-id-lint0
pnpm check:skill-frame-sync0
pnpm check:doc-authoring0
pnpm check:agent-test-spelling0
pnpm check:pm-governed-merges0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:nul-bytes0 (not derived; run because any edit owes it)
node scripts/pm/check-governed-queue-guard.mjs1 — NOT MEASURED

Two readings that are not results, stated so they are not read as green or red:

  • check:doc-formula-expressions first exited 3PREREQUISITE NOT MET, its own words
    "Nothing was measured". Building @objectstack/formula and then @objectstack/lint
    cleared it; the 0 above is the re-run.
  • check-governed-queue-guard exits 1 locally because it reads GITHUB_EVENT_PATH and
    there is no workflow event payload in a container. By design it refuses to be green when
    it cannot look. It runs in CI.

Landing

.claude/** is a governed surface: draft only, human merge, approval pinned to the
current head. No changeset — the diff is .claude/**-only, so skip-changeset is applied
(additively) instead.

Generated by Claude Code


Generated by Claude Code

The dedup ladder's REST branch certified the list endpoint's results as
complete. Measured in one container against this repo: walking the
`Link: rel="next"` cursor the endpoint returns reports itself exhausted
at 102 items, while the `&page=1,2,3...` walk over the identical query
returns 448 and matches `open_issues_count` (449 at re-read, 23 open
PRs). A dedup grep over the returned 102 answers "no duplicate" with
total confidence -- the failure the ladder routes seats INTO when
`search_issues` goes to a session-level zero.
The certificate is replaced in place by the obligation it was standing
in for: completeness is self-proved, by the page-number walk plus a
total-count cross-check. Line-neutral -- the file stays at its 314-line
ceiling, and the change is a correction of a measured-false line, not an
addition.
The cause is NOT explained here and is not claimed to be: whether the
truncation is GitHub's own cursor behaviour or the session egress proxy
rewriting the `Link` header is unmeasured. The prescription removes the
dependency on that header; it does not diagnose it.
@github-actionsgithub-actionsBot added size/xs documentation Improvements or additions to documentation labels Sep 1, 2026
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 1, 2026
@claude
claudeBot requested review from hotlong and os-zhuangSeptember 1, 2026 02:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-zhuang@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-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet) - #14068

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn
Sep 1, 2026
Merged

docs(pm-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet)#14068
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn

Conversation

@claude

@claudeclaudeBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Part of #13900

Half of the adjudicated two-file repair lands here. The other half is stopped on a
measured ceiling
, with byte-exact floors below — it is an audit input, not an omission.

What landed: the falsified completeness certificate is retracted in place

.claude/skills/pm-dispatch/references/platform-readings.md L147 certified the REST
issues-list endpoint's results as complete — (core 桶、结果**完整**、 ...) — inside the
dedup ladder that routes a seat to that endpoint precisely when search_issues has gone
to a session-level zero. That property is false. The line now reads:

(core 桶、 `labels` 真 AND;⛔ 完整性自证:`&page=N` + 总数核对;...)

The certificate is replaced by the obligation it was standing in for: completeness is
self-proved, by the page-number walk plus a total-count cross-check. Nothing else in
the bullet changed; the two adjacent readings it carries (the MCP branch's 226-of-100
manual-paging reading, and the qualifier tombstone) are untouched.

No causal claim is made, and none is implied. Whether the truncation is GitHub's own
cursor behaviour or the session egress proxy rewriting the Link header is UNMEASURED.
The prescription removes the dependency on that header; it does not diagnose it. The
landed text asserts nothing about cause.

I grepped the whole pm-dispatch surface for completeness claims afterwards: L147 was the
only one about this channel, so no false statement about it remains anywhere in the corpus
even with the second file stopped.

Reproduction, first-hand, this container, this repo

Not inherited from the card — re-measured here against objectstack-ai/objectstack:

how the open-issues population was walkeditems
per_page=100, then follow Link: rel="next"102 (100 + 2, then no further rel="next")
per_page=100&page=1..5 (classic page numbers)448 (100+100+100+100+48)
open_issues_count from the repo endpoint447, re-read 449 (live backlog; counts issues AND PRs)
open PRs, pulls?state=open page-walked23 (page 2 and 3 empty)

The Link header does carry a cursor rather than a page number:

Link: .../repositories/1136691870/issues?state=open&per_page=1&after=Y3Vyc29yOnYyOpLP...&page=2; rel="next"

The cursor walk terminates the way an exhausted walk terminates — no error, no warning —
having returned 102 of ~448. The card measured the identical 102 on a sibling repo, so the
cutoff is not repo-specific.

Premise re-verified on origin/main before editing: both files still carried the
falsified certificate and lacked the prescriptions, and no open PR touches either file
(all 23 open PRs' file lists checked; two touch other files in the same references/
directory — decision-analysis.md and dispatch-runbook.md — neither overlaps).

What is stopped, and the byte-exact floor

The two prescriptions for references/rest-channel.md are not in this PR. The file has
no room and this card carries no ruling that would make room.

Line-ratchet verdict lines at this head, both files:

✓ check-skill-line-ratchet: .../references/platform-readings.md is 314 lines (ceiling 314; headroom 0).
✓ check-skill-line-ratchet: .../references/rest-channel.md is 87 lines (ceiling 87; headroom 0).

Reflow-within-lines was tried first and measured, not assumed. Using the gate's own
splitPrefix / hanAsciiPunctTail / 120-byte budget, plus the break repertoire the corpus
actually uses (a space, or a segment break between two wide characters), an optimal
minimum-line packer
was run over every block of both files:

filelines nowoptimal repackreclaimable
platform-readings.md3143140
rest-channel.md87870

The packer reproducing each file's current line count exactly, block for block, is the
calibration: these files were mechanically re-wrapped once already and are sitting on
their packing floor. There is no slack to reclaim in either file.

What that leaves, measured to the byte:

  • rest-channel.md, list-cards row (L18-19): 212 bytes over 2 lines; it can absorb
    23 more bytes without a third line. The two prescriptions written faithfully — both
    refusals, the &page=1,2,3…-until-a-short-page termination condition, the
    open_issues_count cross-check with the open-PR subtraction, the cause-unknown boundary,
    and the note that a keyword positive control structurally cannot see this class — are
    731 bytes ⇒ 6 lines. Stripped to the two refusals plus the cause boundary: ~450 bytes
    4 lines. Funding 4-6 lines means deleting 4-6 lines of measured content or raising
    the ceiling; the ratchet's own rule is that a raise needs a maintainer ruling quoted in
    the raising PR, and this card has none. So: stopped, not forced.
  • platform-readings.md, certificate bullet (L141-150): 1,140 bytes over 10 lines, and
    it absorbs exactly +26 bytes at 10 lines. The landed correction is +26 — at the
    ceiling to the byte, which is why it says 总数核对 rather than naming
    open_issues_count inline (+33, which needs an 11th line).

One candidate funding source, offered as an observation rather than acted on:
rest-channel.md L58 restates the red-window standing rule that platform-readings.md
owns in its quota section, against rest-channel.md's own header rule that a fact lives in
one place. Retiring it would free a line or two — but that is a content decision about
which file owns a rule, not a reflow, so it belongs to the maintainer, not to this card.

Gates

Derived after the last commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(the script takes the change set from the merge base itself). Union run at head
028dbc85e; exit codes captured before any pipe.

gateexit
pnpm check:pm-skill-ratchet0
pnpm check:pm-skill-id-lint0
pnpm check:skill-frame-sync0
pnpm check:doc-authoring0
pnpm check:agent-test-spelling0
pnpm check:pm-governed-merges0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:nul-bytes0 (not derived; run because any edit owes it)
node scripts/pm/check-governed-queue-guard.mjs1 — NOT MEASURED

Two readings that are not results, stated so they are not read as green or red:

  • check:doc-formula-expressions first exited 3PREREQUISITE NOT MET, its own words
    "Nothing was measured". Building @objectstack/formula and then @objectstack/lint
    cleared it; the 0 above is the re-run.
  • check-governed-queue-guard exits 1 locally because it reads GITHUB_EVENT_PATH and
    there is no workflow event payload in a container. By design it refuses to be green when
    it cannot look. It runs in CI.

Landing

.claude/** is a governed surface: draft only, human merge, approval pinned to the
current head. No changeset — the diff is .claude/**-only, so skip-changeset is applied
(additively) instead.

Generated by Claude Code


Generated by Claude Code

The dedup ladder's REST branch certified the list endpoint's results as
complete. Measured in one container against this repo: walking the
`Link: rel="next"` cursor the endpoint returns reports itself exhausted
at 102 items, while the `&page=1,2,3...` walk over the identical query
returns 448 and matches `open_issues_count` (449 at re-read, 23 open
PRs). A dedup grep over the returned 102 answers "no duplicate" with
total confidence -- the failure the ladder routes seats INTO when
`search_issues` goes to a session-level zero.
The certificate is replaced in place by the obligation it was standing
in for: completeness is self-proved, by the page-number walk plus a
total-count cross-check. Line-neutral -- the file stays at its 314-line
ceiling, and the change is a correction of a measured-false line, not an
addition.
The cause is NOT explained here and is not claimed to be: whether the
truncation is GitHub's own cursor behaviour or the session egress proxy
rewriting the `Link` header is unmeasured. The prescription removes the
dependency on that header; it does not diagnose it.
@github-actionsgithub-actionsBot added size/xs documentation Improvements or additions to documentation labels Sep 1, 2026
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 1, 2026
@claude
claudeBot requested review from hotlong and os-zhuangSeptember 1, 2026 02:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-zhuang@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-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet) - #14068

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn
Sep 1, 2026
Merged

docs(pm-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet)#14068
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn

Conversation

@claude

@claudeclaudeBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Part of #13900

Half of the adjudicated two-file repair lands here. The other half is stopped on a
measured ceiling
, with byte-exact floors below — it is an audit input, not an omission.

What landed: the falsified completeness certificate is retracted in place

.claude/skills/pm-dispatch/references/platform-readings.md L147 certified the REST
issues-list endpoint's results as complete — (core 桶、结果**完整**、 ...) — inside the
dedup ladder that routes a seat to that endpoint precisely when search_issues has gone
to a session-level zero. That property is false. The line now reads:

(core 桶、 `labels` 真 AND;⛔ 完整性自证:`&page=N` + 总数核对;...)

The certificate is replaced by the obligation it was standing in for: completeness is
self-proved, by the page-number walk plus a total-count cross-check. Nothing else in
the bullet changed; the two adjacent readings it carries (the MCP branch's 226-of-100
manual-paging reading, and the qualifier tombstone) are untouched.

No causal claim is made, and none is implied. Whether the truncation is GitHub's own
cursor behaviour or the session egress proxy rewriting the Link header is UNMEASURED.
The prescription removes the dependency on that header; it does not diagnose it. The
landed text asserts nothing about cause.

I grepped the whole pm-dispatch surface for completeness claims afterwards: L147 was the
only one about this channel, so no false statement about it remains anywhere in the corpus
even with the second file stopped.

Reproduction, first-hand, this container, this repo

Not inherited from the card — re-measured here against objectstack-ai/objectstack:

how the open-issues population was walkeditems
per_page=100, then follow Link: rel="next"102 (100 + 2, then no further rel="next")
per_page=100&page=1..5 (classic page numbers)448 (100+100+100+100+48)
open_issues_count from the repo endpoint447, re-read 449 (live backlog; counts issues AND PRs)
open PRs, pulls?state=open page-walked23 (page 2 and 3 empty)

The Link header does carry a cursor rather than a page number:

Link: .../repositories/1136691870/issues?state=open&per_page=1&after=Y3Vyc29yOnYyOpLP...&page=2; rel="next"

The cursor walk terminates the way an exhausted walk terminates — no error, no warning —
having returned 102 of ~448. The card measured the identical 102 on a sibling repo, so the
cutoff is not repo-specific.

Premise re-verified on origin/main before editing: both files still carried the
falsified certificate and lacked the prescriptions, and no open PR touches either file
(all 23 open PRs' file lists checked; two touch other files in the same references/
directory — decision-analysis.md and dispatch-runbook.md — neither overlaps).

What is stopped, and the byte-exact floor

The two prescriptions for references/rest-channel.md are not in this PR. The file has
no room and this card carries no ruling that would make room.

Line-ratchet verdict lines at this head, both files:

✓ check-skill-line-ratchet: .../references/platform-readings.md is 314 lines (ceiling 314; headroom 0).
✓ check-skill-line-ratchet: .../references/rest-channel.md is 87 lines (ceiling 87; headroom 0).

Reflow-within-lines was tried first and measured, not assumed. Using the gate's own
splitPrefix / hanAsciiPunctTail / 120-byte budget, plus the break repertoire the corpus
actually uses (a space, or a segment break between two wide characters), an optimal
minimum-line packer
was run over every block of both files:

filelines nowoptimal repackreclaimable
platform-readings.md3143140
rest-channel.md87870

The packer reproducing each file's current line count exactly, block for block, is the
calibration: these files were mechanically re-wrapped once already and are sitting on
their packing floor. There is no slack to reclaim in either file.

What that leaves, measured to the byte:

  • rest-channel.md, list-cards row (L18-19): 212 bytes over 2 lines; it can absorb
    23 more bytes without a third line. The two prescriptions written faithfully — both
    refusals, the &page=1,2,3…-until-a-short-page termination condition, the
    open_issues_count cross-check with the open-PR subtraction, the cause-unknown boundary,
    and the note that a keyword positive control structurally cannot see this class — are
    731 bytes ⇒ 6 lines. Stripped to the two refusals plus the cause boundary: ~450 bytes
    4 lines. Funding 4-6 lines means deleting 4-6 lines of measured content or raising
    the ceiling; the ratchet's own rule is that a raise needs a maintainer ruling quoted in
    the raising PR, and this card has none. So: stopped, not forced.
  • platform-readings.md, certificate bullet (L141-150): 1,140 bytes over 10 lines, and
    it absorbs exactly +26 bytes at 10 lines. The landed correction is +26 — at the
    ceiling to the byte, which is why it says 总数核对 rather than naming
    open_issues_count inline (+33, which needs an 11th line).

One candidate funding source, offered as an observation rather than acted on:
rest-channel.md L58 restates the red-window standing rule that platform-readings.md
owns in its quota section, against rest-channel.md's own header rule that a fact lives in
one place. Retiring it would free a line or two — but that is a content decision about
which file owns a rule, not a reflow, so it belongs to the maintainer, not to this card.

Gates

Derived after the last commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(the script takes the change set from the merge base itself). Union run at head
028dbc85e; exit codes captured before any pipe.

gateexit
pnpm check:pm-skill-ratchet0
pnpm check:pm-skill-id-lint0
pnpm check:skill-frame-sync0
pnpm check:doc-authoring0
pnpm check:agent-test-spelling0
pnpm check:pm-governed-merges0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:nul-bytes0 (not derived; run because any edit owes it)
node scripts/pm/check-governed-queue-guard.mjs1 — NOT MEASURED

Two readings that are not results, stated so they are not read as green or red:

  • check:doc-formula-expressions first exited 3PREREQUISITE NOT MET, its own words
    "Nothing was measured". Building @objectstack/formula and then @objectstack/lint
    cleared it; the 0 above is the re-run.
  • check-governed-queue-guard exits 1 locally because it reads GITHUB_EVENT_PATH and
    there is no workflow event payload in a container. By design it refuses to be green when
    it cannot look. It runs in CI.

Landing

.claude/** is a governed surface: draft only, human merge, approval pinned to the
current head. No changeset — the diff is .claude/**-only, so skip-changeset is applied
(additively) instead.

Generated by Claude Code


Generated by Claude Code

The dedup ladder's REST branch certified the list endpoint's results as
complete. Measured in one container against this repo: walking the
`Link: rel="next"` cursor the endpoint returns reports itself exhausted
at 102 items, while the `&page=1,2,3...` walk over the identical query
returns 448 and matches `open_issues_count` (449 at re-read, 23 open
PRs). A dedup grep over the returned 102 answers "no duplicate" with
total confidence -- the failure the ladder routes seats INTO when
`search_issues` goes to a session-level zero.
The certificate is replaced in place by the obligation it was standing
in for: completeness is self-proved, by the page-number walk plus a
total-count cross-check. Line-neutral -- the file stays at its 314-line
ceiling, and the change is a correction of a measured-false line, not an
addition.
The cause is NOT explained here and is not claimed to be: whether the
truncation is GitHub's own cursor behaviour or the session egress proxy
rewriting the `Link` header is unmeasured. The prescription removes the
dependency on that header; it does not diagnose it.
@github-actionsgithub-actionsBot added size/xs documentation Improvements or additions to documentation labels Sep 1, 2026
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 1, 2026
@claude
claudeBot requested review from hotlong and os-zhuangSeptember 1, 2026 02:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-zhuang@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-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet) - #14068

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn
Sep 1, 2026
Merged

docs(pm-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet)#14068
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn

Conversation

@claude

@claudeclaudeBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Part of #13900

Half of the adjudicated two-file repair lands here. The other half is stopped on a
measured ceiling
, with byte-exact floors below — it is an audit input, not an omission.

What landed: the falsified completeness certificate is retracted in place

.claude/skills/pm-dispatch/references/platform-readings.md L147 certified the REST
issues-list endpoint's results as complete — (core 桶、结果**完整**、 ...) — inside the
dedup ladder that routes a seat to that endpoint precisely when search_issues has gone
to a session-level zero. That property is false. The line now reads:

(core 桶、 `labels` 真 AND;⛔ 完整性自证:`&page=N` + 总数核对;...)

The certificate is replaced by the obligation it was standing in for: completeness is
self-proved, by the page-number walk plus a total-count cross-check. Nothing else in
the bullet changed; the two adjacent readings it carries (the MCP branch's 226-of-100
manual-paging reading, and the qualifier tombstone) are untouched.

No causal claim is made, and none is implied. Whether the truncation is GitHub's own
cursor behaviour or the session egress proxy rewriting the Link header is UNMEASURED.
The prescription removes the dependency on that header; it does not diagnose it. The
landed text asserts nothing about cause.

I grepped the whole pm-dispatch surface for completeness claims afterwards: L147 was the
only one about this channel, so no false statement about it remains anywhere in the corpus
even with the second file stopped.

Reproduction, first-hand, this container, this repo

Not inherited from the card — re-measured here against objectstack-ai/objectstack:

how the open-issues population was walkeditems
per_page=100, then follow Link: rel="next"102 (100 + 2, then no further rel="next")
per_page=100&page=1..5 (classic page numbers)448 (100+100+100+100+48)
open_issues_count from the repo endpoint447, re-read 449 (live backlog; counts issues AND PRs)
open PRs, pulls?state=open page-walked23 (page 2 and 3 empty)

The Link header does carry a cursor rather than a page number:

Link: .../repositories/1136691870/issues?state=open&per_page=1&after=Y3Vyc29yOnYyOpLP...&page=2; rel="next"

The cursor walk terminates the way an exhausted walk terminates — no error, no warning —
having returned 102 of ~448. The card measured the identical 102 on a sibling repo, so the
cutoff is not repo-specific.

Premise re-verified on origin/main before editing: both files still carried the
falsified certificate and lacked the prescriptions, and no open PR touches either file
(all 23 open PRs' file lists checked; two touch other files in the same references/
directory — decision-analysis.md and dispatch-runbook.md — neither overlaps).

What is stopped, and the byte-exact floor

The two prescriptions for references/rest-channel.md are not in this PR. The file has
no room and this card carries no ruling that would make room.

Line-ratchet verdict lines at this head, both files:

✓ check-skill-line-ratchet: .../references/platform-readings.md is 314 lines (ceiling 314; headroom 0).
✓ check-skill-line-ratchet: .../references/rest-channel.md is 87 lines (ceiling 87; headroom 0).

Reflow-within-lines was tried first and measured, not assumed. Using the gate's own
splitPrefix / hanAsciiPunctTail / 120-byte budget, plus the break repertoire the corpus
actually uses (a space, or a segment break between two wide characters), an optimal
minimum-line packer
was run over every block of both files:

filelines nowoptimal repackreclaimable
platform-readings.md3143140
rest-channel.md87870

The packer reproducing each file's current line count exactly, block for block, is the
calibration: these files were mechanically re-wrapped once already and are sitting on
their packing floor. There is no slack to reclaim in either file.

What that leaves, measured to the byte:

  • rest-channel.md, list-cards row (L18-19): 212 bytes over 2 lines; it can absorb
    23 more bytes without a third line. The two prescriptions written faithfully — both
    refusals, the &page=1,2,3…-until-a-short-page termination condition, the
    open_issues_count cross-check with the open-PR subtraction, the cause-unknown boundary,
    and the note that a keyword positive control structurally cannot see this class — are
    731 bytes ⇒ 6 lines. Stripped to the two refusals plus the cause boundary: ~450 bytes
    4 lines. Funding 4-6 lines means deleting 4-6 lines of measured content or raising
    the ceiling; the ratchet's own rule is that a raise needs a maintainer ruling quoted in
    the raising PR, and this card has none. So: stopped, not forced.
  • platform-readings.md, certificate bullet (L141-150): 1,140 bytes over 10 lines, and
    it absorbs exactly +26 bytes at 10 lines. The landed correction is +26 — at the
    ceiling to the byte, which is why it says 总数核对 rather than naming
    open_issues_count inline (+33, which needs an 11th line).

One candidate funding source, offered as an observation rather than acted on:
rest-channel.md L58 restates the red-window standing rule that platform-readings.md
owns in its quota section, against rest-channel.md's own header rule that a fact lives in
one place. Retiring it would free a line or two — but that is a content decision about
which file owns a rule, not a reflow, so it belongs to the maintainer, not to this card.

Gates

Derived after the last commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(the script takes the change set from the merge base itself). Union run at head
028dbc85e; exit codes captured before any pipe.

gateexit
pnpm check:pm-skill-ratchet0
pnpm check:pm-skill-id-lint0
pnpm check:skill-frame-sync0
pnpm check:doc-authoring0
pnpm check:agent-test-spelling0
pnpm check:pm-governed-merges0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:nul-bytes0 (not derived; run because any edit owes it)
node scripts/pm/check-governed-queue-guard.mjs1 — NOT MEASURED

Two readings that are not results, stated so they are not read as green or red:

  • check:doc-formula-expressions first exited 3PREREQUISITE NOT MET, its own words
    "Nothing was measured". Building @objectstack/formula and then @objectstack/lint
    cleared it; the 0 above is the re-run.
  • check-governed-queue-guard exits 1 locally because it reads GITHUB_EVENT_PATH and
    there is no workflow event payload in a container. By design it refuses to be green when
    it cannot look. It runs in CI.

Landing

.claude/** is a governed surface: draft only, human merge, approval pinned to the
current head. No changeset — the diff is .claude/**-only, so skip-changeset is applied
(additively) instead.

Generated by Claude Code


Generated by Claude Code

The dedup ladder's REST branch certified the list endpoint's results as
complete. Measured in one container against this repo: walking the
`Link: rel="next"` cursor the endpoint returns reports itself exhausted
at 102 items, while the `&page=1,2,3...` walk over the identical query
returns 448 and matches `open_issues_count` (449 at re-read, 23 open
PRs). A dedup grep over the returned 102 answers "no duplicate" with
total confidence -- the failure the ladder routes seats INTO when
`search_issues` goes to a session-level zero.
The certificate is replaced in place by the obligation it was standing
in for: completeness is self-proved, by the page-number walk plus a
total-count cross-check. Line-neutral -- the file stays at its 314-line
ceiling, and the change is a correction of a measured-false line, not an
addition.
The cause is NOT explained here and is not claimed to be: whether the
truncation is GitHub's own cursor behaviour or the session egress proxy
rewriting the `Link` header is unmeasured. The prescription removes the
dependency on that header; it does not diagnose it.
@github-actionsgithub-actionsBot added size/xs documentation Improvements or additions to documentation labels Sep 1, 2026
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 1, 2026
@claude
claudeBot requested review from hotlong and os-zhuangSeptember 1, 2026 02:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-zhuang@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-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet) - #14068

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn
Sep 1, 2026
Merged

docs(pm-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet)#14068
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn

Conversation

@claude

@claudeclaudeBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Part of #13900

Half of the adjudicated two-file repair lands here. The other half is stopped on a
measured ceiling
, with byte-exact floors below — it is an audit input, not an omission.

What landed: the falsified completeness certificate is retracted in place

.claude/skills/pm-dispatch/references/platform-readings.md L147 certified the REST
issues-list endpoint's results as complete — (core 桶、结果**完整**、 ...) — inside the
dedup ladder that routes a seat to that endpoint precisely when search_issues has gone
to a session-level zero. That property is false. The line now reads:

(core 桶、 `labels` 真 AND;⛔ 完整性自证:`&page=N` + 总数核对;...)

The certificate is replaced by the obligation it was standing in for: completeness is
self-proved, by the page-number walk plus a total-count cross-check. Nothing else in
the bullet changed; the two adjacent readings it carries (the MCP branch's 226-of-100
manual-paging reading, and the qualifier tombstone) are untouched.

No causal claim is made, and none is implied. Whether the truncation is GitHub's own
cursor behaviour or the session egress proxy rewriting the Link header is UNMEASURED.
The prescription removes the dependency on that header; it does not diagnose it. The
landed text asserts nothing about cause.

I grepped the whole pm-dispatch surface for completeness claims afterwards: L147 was the
only one about this channel, so no false statement about it remains anywhere in the corpus
even with the second file stopped.

Reproduction, first-hand, this container, this repo

Not inherited from the card — re-measured here against objectstack-ai/objectstack:

how the open-issues population was walkeditems
per_page=100, then follow Link: rel="next"102 (100 + 2, then no further rel="next")
per_page=100&page=1..5 (classic page numbers)448 (100+100+100+100+48)
open_issues_count from the repo endpoint447, re-read 449 (live backlog; counts issues AND PRs)
open PRs, pulls?state=open page-walked23 (page 2 and 3 empty)

The Link header does carry a cursor rather than a page number:

Link: .../repositories/1136691870/issues?state=open&per_page=1&after=Y3Vyc29yOnYyOpLP...&page=2; rel="next"

The cursor walk terminates the way an exhausted walk terminates — no error, no warning —
having returned 102 of ~448. The card measured the identical 102 on a sibling repo, so the
cutoff is not repo-specific.

Premise re-verified on origin/main before editing: both files still carried the
falsified certificate and lacked the prescriptions, and no open PR touches either file
(all 23 open PRs' file lists checked; two touch other files in the same references/
directory — decision-analysis.md and dispatch-runbook.md — neither overlaps).

What is stopped, and the byte-exact floor

The two prescriptions for references/rest-channel.md are not in this PR. The file has
no room and this card carries no ruling that would make room.

Line-ratchet verdict lines at this head, both files:

✓ check-skill-line-ratchet: .../references/platform-readings.md is 314 lines (ceiling 314; headroom 0).
✓ check-skill-line-ratchet: .../references/rest-channel.md is 87 lines (ceiling 87; headroom 0).

Reflow-within-lines was tried first and measured, not assumed. Using the gate's own
splitPrefix / hanAsciiPunctTail / 120-byte budget, plus the break repertoire the corpus
actually uses (a space, or a segment break between two wide characters), an optimal
minimum-line packer
was run over every block of both files:

filelines nowoptimal repackreclaimable
platform-readings.md3143140
rest-channel.md87870

The packer reproducing each file's current line count exactly, block for block, is the
calibration: these files were mechanically re-wrapped once already and are sitting on
their packing floor. There is no slack to reclaim in either file.

What that leaves, measured to the byte:

  • rest-channel.md, list-cards row (L18-19): 212 bytes over 2 lines; it can absorb
    23 more bytes without a third line. The two prescriptions written faithfully — both
    refusals, the &page=1,2,3…-until-a-short-page termination condition, the
    open_issues_count cross-check with the open-PR subtraction, the cause-unknown boundary,
    and the note that a keyword positive control structurally cannot see this class — are
    731 bytes ⇒ 6 lines. Stripped to the two refusals plus the cause boundary: ~450 bytes
    4 lines. Funding 4-6 lines means deleting 4-6 lines of measured content or raising
    the ceiling; the ratchet's own rule is that a raise needs a maintainer ruling quoted in
    the raising PR, and this card has none. So: stopped, not forced.
  • platform-readings.md, certificate bullet (L141-150): 1,140 bytes over 10 lines, and
    it absorbs exactly +26 bytes at 10 lines. The landed correction is +26 — at the
    ceiling to the byte, which is why it says 总数核对 rather than naming
    open_issues_count inline (+33, which needs an 11th line).

One candidate funding source, offered as an observation rather than acted on:
rest-channel.md L58 restates the red-window standing rule that platform-readings.md
owns in its quota section, against rest-channel.md's own header rule that a fact lives in
one place. Retiring it would free a line or two — but that is a content decision about
which file owns a rule, not a reflow, so it belongs to the maintainer, not to this card.

Gates

Derived after the last commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(the script takes the change set from the merge base itself). Union run at head
028dbc85e; exit codes captured before any pipe.

gateexit
pnpm check:pm-skill-ratchet0
pnpm check:pm-skill-id-lint0
pnpm check:skill-frame-sync0
pnpm check:doc-authoring0
pnpm check:agent-test-spelling0
pnpm check:pm-governed-merges0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:nul-bytes0 (not derived; run because any edit owes it)
node scripts/pm/check-governed-queue-guard.mjs1 — NOT MEASURED

Two readings that are not results, stated so they are not read as green or red:

  • check:doc-formula-expressions first exited 3PREREQUISITE NOT MET, its own words
    "Nothing was measured". Building @objectstack/formula and then @objectstack/lint
    cleared it; the 0 above is the re-run.
  • check-governed-queue-guard exits 1 locally because it reads GITHUB_EVENT_PATH and
    there is no workflow event payload in a container. By design it refuses to be green when
    it cannot look. It runs in CI.

Landing

.claude/** is a governed surface: draft only, human merge, approval pinned to the
current head. No changeset — the diff is .claude/**-only, so skip-changeset is applied
(additively) instead.

Generated by Claude Code


Generated by Claude Code

The dedup ladder's REST branch certified the list endpoint's results as
complete. Measured in one container against this repo: walking the
`Link: rel="next"` cursor the endpoint returns reports itself exhausted
at 102 items, while the `&page=1,2,3...` walk over the identical query
returns 448 and matches `open_issues_count` (449 at re-read, 23 open
PRs). A dedup grep over the returned 102 answers "no duplicate" with
total confidence -- the failure the ladder routes seats INTO when
`search_issues` goes to a session-level zero.
The certificate is replaced in place by the obligation it was standing
in for: completeness is self-proved, by the page-number walk plus a
total-count cross-check. Line-neutral -- the file stays at its 314-line
ceiling, and the change is a correction of a measured-false line, not an
addition.
The cause is NOT explained here and is not claimed to be: whether the
truncation is GitHub's own cursor behaviour or the session egress proxy
rewriting the `Link` header is unmeasured. The prescription removes the
dependency on that header; it does not diagnose it.
@github-actionsgithub-actionsBot added size/xs documentation Improvements or additions to documentation labels Sep 1, 2026
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 1, 2026
@claude
claudeBot requested review from hotlong and os-zhuangSeptember 1, 2026 02:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-zhuang@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-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet) - #14068

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn
Sep 1, 2026
Merged

docs(pm-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet)#14068
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn

Conversation

@claude

@claudeclaudeBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Part of #13900

Half of the adjudicated two-file repair lands here. The other half is stopped on a
measured ceiling
, with byte-exact floors below — it is an audit input, not an omission.

What landed: the falsified completeness certificate is retracted in place

.claude/skills/pm-dispatch/references/platform-readings.md L147 certified the REST
issues-list endpoint's results as complete — (core 桶、结果**完整**、 ...) — inside the
dedup ladder that routes a seat to that endpoint precisely when search_issues has gone
to a session-level zero. That property is false. The line now reads:

(core 桶、 `labels` 真 AND;⛔ 完整性自证:`&page=N` + 总数核对;...)

The certificate is replaced by the obligation it was standing in for: completeness is
self-proved, by the page-number walk plus a total-count cross-check. Nothing else in
the bullet changed; the two adjacent readings it carries (the MCP branch's 226-of-100
manual-paging reading, and the qualifier tombstone) are untouched.

No causal claim is made, and none is implied. Whether the truncation is GitHub's own
cursor behaviour or the session egress proxy rewriting the Link header is UNMEASURED.
The prescription removes the dependency on that header; it does not diagnose it. The
landed text asserts nothing about cause.

I grepped the whole pm-dispatch surface for completeness claims afterwards: L147 was the
only one about this channel, so no false statement about it remains anywhere in the corpus
even with the second file stopped.

Reproduction, first-hand, this container, this repo

Not inherited from the card — re-measured here against objectstack-ai/objectstack:

how the open-issues population was walkeditems
per_page=100, then follow Link: rel="next"102 (100 + 2, then no further rel="next")
per_page=100&page=1..5 (classic page numbers)448 (100+100+100+100+48)
open_issues_count from the repo endpoint447, re-read 449 (live backlog; counts issues AND PRs)
open PRs, pulls?state=open page-walked23 (page 2 and 3 empty)

The Link header does carry a cursor rather than a page number:

Link: .../repositories/1136691870/issues?state=open&per_page=1&after=Y3Vyc29yOnYyOpLP...&page=2; rel="next"

The cursor walk terminates the way an exhausted walk terminates — no error, no warning —
having returned 102 of ~448. The card measured the identical 102 on a sibling repo, so the
cutoff is not repo-specific.

Premise re-verified on origin/main before editing: both files still carried the
falsified certificate and lacked the prescriptions, and no open PR touches either file
(all 23 open PRs' file lists checked; two touch other files in the same references/
directory — decision-analysis.md and dispatch-runbook.md — neither overlaps).

What is stopped, and the byte-exact floor

The two prescriptions for references/rest-channel.md are not in this PR. The file has
no room and this card carries no ruling that would make room.

Line-ratchet verdict lines at this head, both files:

✓ check-skill-line-ratchet: .../references/platform-readings.md is 314 lines (ceiling 314; headroom 0).
✓ check-skill-line-ratchet: .../references/rest-channel.md is 87 lines (ceiling 87; headroom 0).

Reflow-within-lines was tried first and measured, not assumed. Using the gate's own
splitPrefix / hanAsciiPunctTail / 120-byte budget, plus the break repertoire the corpus
actually uses (a space, or a segment break between two wide characters), an optimal
minimum-line packer
was run over every block of both files:

filelines nowoptimal repackreclaimable
platform-readings.md3143140
rest-channel.md87870

The packer reproducing each file's current line count exactly, block for block, is the
calibration: these files were mechanically re-wrapped once already and are sitting on
their packing floor. There is no slack to reclaim in either file.

What that leaves, measured to the byte:

  • rest-channel.md, list-cards row (L18-19): 212 bytes over 2 lines; it can absorb
    23 more bytes without a third line. The two prescriptions written faithfully — both
    refusals, the &page=1,2,3…-until-a-short-page termination condition, the
    open_issues_count cross-check with the open-PR subtraction, the cause-unknown boundary,
    and the note that a keyword positive control structurally cannot see this class — are
    731 bytes ⇒ 6 lines. Stripped to the two refusals plus the cause boundary: ~450 bytes
    4 lines. Funding 4-6 lines means deleting 4-6 lines of measured content or raising
    the ceiling; the ratchet's own rule is that a raise needs a maintainer ruling quoted in
    the raising PR, and this card has none. So: stopped, not forced.
  • platform-readings.md, certificate bullet (L141-150): 1,140 bytes over 10 lines, and
    it absorbs exactly +26 bytes at 10 lines. The landed correction is +26 — at the
    ceiling to the byte, which is why it says 总数核对 rather than naming
    open_issues_count inline (+33, which needs an 11th line).

One candidate funding source, offered as an observation rather than acted on:
rest-channel.md L58 restates the red-window standing rule that platform-readings.md
owns in its quota section, against rest-channel.md's own header rule that a fact lives in
one place. Retiring it would free a line or two — but that is a content decision about
which file owns a rule, not a reflow, so it belongs to the maintainer, not to this card.

Gates

Derived after the last commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(the script takes the change set from the merge base itself). Union run at head
028dbc85e; exit codes captured before any pipe.

gateexit
pnpm check:pm-skill-ratchet0
pnpm check:pm-skill-id-lint0
pnpm check:skill-frame-sync0
pnpm check:doc-authoring0
pnpm check:agent-test-spelling0
pnpm check:pm-governed-merges0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:nul-bytes0 (not derived; run because any edit owes it)
node scripts/pm/check-governed-queue-guard.mjs1 — NOT MEASURED

Two readings that are not results, stated so they are not read as green or red:

  • check:doc-formula-expressions first exited 3PREREQUISITE NOT MET, its own words
    "Nothing was measured". Building @objectstack/formula and then @objectstack/lint
    cleared it; the 0 above is the re-run.
  • check-governed-queue-guard exits 1 locally because it reads GITHUB_EVENT_PATH and
    there is no workflow event payload in a container. By design it refuses to be green when
    it cannot look. It runs in CI.

Landing

.claude/** is a governed surface: draft only, human merge, approval pinned to the
current head. No changeset — the diff is .claude/**-only, so skip-changeset is applied
(additively) instead.

Generated by Claude Code


Generated by Claude Code

The dedup ladder's REST branch certified the list endpoint's results as
complete. Measured in one container against this repo: walking the
`Link: rel="next"` cursor the endpoint returns reports itself exhausted
at 102 items, while the `&page=1,2,3...` walk over the identical query
returns 448 and matches `open_issues_count` (449 at re-read, 23 open
PRs). A dedup grep over the returned 102 answers "no duplicate" with
total confidence -- the failure the ladder routes seats INTO when
`search_issues` goes to a session-level zero.
The certificate is replaced in place by the obligation it was standing
in for: completeness is self-proved, by the page-number walk plus a
total-count cross-check. Line-neutral -- the file stays at its 314-line
ceiling, and the change is a correction of a measured-false line, not an
addition.
The cause is NOT explained here and is not claimed to be: whether the
truncation is GitHub's own cursor behaviour or the session egress proxy
rewriting the `Link` header is unmeasured. The prescription removes the
dependency on that header; it does not diagnose it.
@github-actionsgithub-actionsBot added size/xs documentation Improvements or additions to documentation labels Sep 1, 2026
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 1, 2026
@claude
claudeBot requested review from hotlong and os-zhuangSeptember 1, 2026 02:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-zhuang@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-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet) - #14068

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn
Sep 1, 2026
Merged

docs(pm-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet)#14068
os-zhuang merged 1 commit into
mainfrom
claude/issue-13900-rest-cursor-underreturn

Conversation

@claude

@claudeclaudeBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Part of #13900

Half of the adjudicated two-file repair lands here. The other half is stopped on a
measured ceiling
, with byte-exact floors below — it is an audit input, not an omission.

What landed: the falsified completeness certificate is retracted in place

.claude/skills/pm-dispatch/references/platform-readings.md L147 certified the REST
issues-list endpoint's results as complete — (core 桶、结果**完整**、 ...) — inside the
dedup ladder that routes a seat to that endpoint precisely when search_issues has gone
to a session-level zero. That property is false. The line now reads:

(core 桶、 `labels` 真 AND;⛔ 完整性自证:`&page=N` + 总数核对;...)

The certificate is replaced by the obligation it was standing in for: completeness is
self-proved, by the page-number walk plus a total-count cross-check. Nothing else in
the bullet changed; the two adjacent readings it carries (the MCP branch's 226-of-100
manual-paging reading, and the qualifier tombstone) are untouched.

No causal claim is made, and none is implied. Whether the truncation is GitHub's own
cursor behaviour or the session egress proxy rewriting the Link header is UNMEASURED.
The prescription removes the dependency on that header; it does not diagnose it. The
landed text asserts nothing about cause.

I grepped the whole pm-dispatch surface for completeness claims afterwards: L147 was the
only one about this channel, so no false statement about it remains anywhere in the corpus
even with the second file stopped.

Reproduction, first-hand, this container, this repo

Not inherited from the card — re-measured here against objectstack-ai/objectstack:

how the open-issues population was walkeditems
per_page=100, then follow Link: rel="next"102 (100 + 2, then no further rel="next")
per_page=100&page=1..5 (classic page numbers)448 (100+100+100+100+48)
open_issues_count from the repo endpoint447, re-read 449 (live backlog; counts issues AND PRs)
open PRs, pulls?state=open page-walked23 (page 2 and 3 empty)

The Link header does carry a cursor rather than a page number:

Link: .../repositories/1136691870/issues?state=open&per_page=1&after=Y3Vyc29yOnYyOpLP...&page=2; rel="next"

The cursor walk terminates the way an exhausted walk terminates — no error, no warning —
having returned 102 of ~448. The card measured the identical 102 on a sibling repo, so the
cutoff is not repo-specific.

Premise re-verified on origin/main before editing: both files still carried the
falsified certificate and lacked the prescriptions, and no open PR touches either file
(all 23 open PRs' file lists checked; two touch other files in the same references/
directory — decision-analysis.md and dispatch-runbook.md — neither overlaps).

What is stopped, and the byte-exact floor

The two prescriptions for references/rest-channel.md are not in this PR. The file has
no room and this card carries no ruling that would make room.

Line-ratchet verdict lines at this head, both files:

✓ check-skill-line-ratchet: .../references/platform-readings.md is 314 lines (ceiling 314; headroom 0).
✓ check-skill-line-ratchet: .../references/rest-channel.md is 87 lines (ceiling 87; headroom 0).

Reflow-within-lines was tried first and measured, not assumed. Using the gate's own
splitPrefix / hanAsciiPunctTail / 120-byte budget, plus the break repertoire the corpus
actually uses (a space, or a segment break between two wide characters), an optimal
minimum-line packer
was run over every block of both files:

filelines nowoptimal repackreclaimable
platform-readings.md3143140
rest-channel.md87870

The packer reproducing each file's current line count exactly, block for block, is the
calibration: these files were mechanically re-wrapped once already and are sitting on
their packing floor. There is no slack to reclaim in either file.

What that leaves, measured to the byte:

  • rest-channel.md, list-cards row (L18-19): 212 bytes over 2 lines; it can absorb
    23 more bytes without a third line. The two prescriptions written faithfully — both
    refusals, the &page=1,2,3…-until-a-short-page termination condition, the
    open_issues_count cross-check with the open-PR subtraction, the cause-unknown boundary,
    and the note that a keyword positive control structurally cannot see this class — are
    731 bytes ⇒ 6 lines. Stripped to the two refusals plus the cause boundary: ~450 bytes
    4 lines. Funding 4-6 lines means deleting 4-6 lines of measured content or raising
    the ceiling; the ratchet's own rule is that a raise needs a maintainer ruling quoted in
    the raising PR, and this card has none. So: stopped, not forced.
  • platform-readings.md, certificate bullet (L141-150): 1,140 bytes over 10 lines, and
    it absorbs exactly +26 bytes at 10 lines. The landed correction is +26 — at the
    ceiling to the byte, which is why it says 总数核对 rather than naming
    open_issues_count inline (+33, which needs an 11th line).

One candidate funding source, offered as an observation rather than acted on:
rest-channel.md L58 restates the red-window standing rule that platform-readings.md
owns in its quota section, against rest-channel.md's own header rule that a fact lives in
one place. Retiring it would free a line or two — but that is a content decision about
which file owns a rule, not a reflow, so it belongs to the maintainer, not to this card.

Gates

Derived after the last commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(the script takes the change set from the merge base itself). Union run at head
028dbc85e; exit codes captured before any pipe.

gateexit
pnpm check:pm-skill-ratchet0
pnpm check:pm-skill-id-lint0
pnpm check:skill-frame-sync0
pnpm check:doc-authoring0
pnpm check:agent-test-spelling0
pnpm check:pm-governed-merges0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:nul-bytes0 (not derived; run because any edit owes it)
node scripts/pm/check-governed-queue-guard.mjs1 — NOT MEASURED

Two readings that are not results, stated so they are not read as green or red:

  • check:doc-formula-expressions first exited 3PREREQUISITE NOT MET, its own words
    "Nothing was measured". Building @objectstack/formula and then @objectstack/lint
    cleared it; the 0 above is the re-run.
  • check-governed-queue-guard exits 1 locally because it reads GITHUB_EVENT_PATH and
    there is no workflow event payload in a container. By design it refuses to be green when
    it cannot look. It runs in CI.

Landing

.claude/** is a governed surface: draft only, human merge, approval pinned to the
current head. No changeset — the diff is .claude/**-only, so skip-changeset is applied
(additively) instead.

Generated by Claude Code


Generated by Claude Code

The dedup ladder's REST branch certified the list endpoint's results as
complete. Measured in one container against this repo: walking the
`Link: rel="next"` cursor the endpoint returns reports itself exhausted
at 102 items, while the `&page=1,2,3...` walk over the identical query
returns 448 and matches `open_issues_count` (449 at re-read, 23 open
PRs). A dedup grep over the returned 102 answers "no duplicate" with
total confidence -- the failure the ladder routes seats INTO when
`search_issues` goes to a session-level zero.
The certificate is replaced in place by the obligation it was standing
in for: completeness is self-proved, by the page-number walk plus a
total-count cross-check. Line-neutral -- the file stays at its 314-line
ceiling, and the change is a correction of a measured-false line, not an
addition.
The cause is NOT explained here and is not claimed to be: whether the
truncation is GitHub's own cursor behaviour or the session egress proxy
rewriting the `Link` header is unmeasured. The prescription removes the
dependency on that header; it does not diagnose it.
@github-actionsgithub-actionsBot added size/xs documentation Improvements or additions to documentation labels Sep 1, 2026
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 1, 2026
@claude
claudeBot requested review from hotlong and os-zhuangSeptember 1, 2026 02:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-zhuang@claude