Uh oh!
There was an error while loading. Please reload this page.
docs(pm-skills): retract the REST issues-list completeness certificate (cursor half stopped on the ratchet) - #14068
Merged
Conversation
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.
os-zhuang
approved these changes
Sep 1, 2026
os-zhuang
marked this pull request as ready for review
September 1, 2026 06:33
os-zhuang
enabled auto-merge
September 1, 2026 06:33
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.mdL147 certified the RESTissues-list endpoint's results as complete —
(core 桶、结果**完整**、 ...)— inside thededup ladder that routes a seat to that endpoint precisely when
search_issueshas goneto a session-level zero. That property is false. The line now reads:
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
Linkheader 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:per_page=100, then followLink: rel="next"rel="next")per_page=100&page=1..5(classic page numbers)open_issues_countfrom the repo endpointpulls?state=openpage-walkedThe
Linkheader does carry a cursor rather than a page number: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/mainbefore editing: both files still carried thefalsified 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.mdanddispatch-runbook.md— neither overlaps).What is stopped, and the byte-exact floor
The two prescriptions for
references/rest-channel.mdare not in this PR. The file hasno room and this card carries no ruling that would make room.
Line-ratchet verdict lines at this head, both files:
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 corpusactually uses (a space, or a segment break between two wide characters), an optimal
minimum-line packer was run over every block of both files:
platform-readings.mdrest-channel.mdThe 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 absorb23 more bytes without a third line. The two prescriptions written faithfully — both
refusals, the
&page=1,2,3…-until-a-short-page termination condition, theopen_issues_countcross-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, andit 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 namingopen_issues_countinline (+33, which needs an 11th line).One candidate funding source, offered as an observation rather than acted on:
rest-channel.mdL58 restates the red-window standing rule thatplatform-readings.mdowns in its quota section, against
rest-channel.md's own header rule that a fact lives inone 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.pnpm check:pm-skill-ratchetpnpm check:pm-skill-id-lintpnpm check:skill-frame-syncpnpm check:doc-authoringpnpm check:agent-test-spellingpnpm check:pm-governed-mergespnpm --filter @objectstack/lint run check:doc-formula-expressionspnpm check:nul-bytesnode scripts/pm/check-governed-queue-guard.mjsTwo readings that are not results, stated so they are not read as green or red:
check:doc-formula-expressionsfirst exited 3 —PREREQUISITE NOT MET, its own words"Nothing was measured". Building
@objectstack/formulaand then@objectstack/lintcleared it; the 0 above is the re-run.
check-governed-queue-guardexits 1 locally because it readsGITHUB_EVENT_PATHandthere 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 thecurrent head. No changeset — the diff is
.claude/**-only, soskip-changesetis applied(additively) instead.
Generated by Claude Code
Generated by Claude Code