docs(pm-skill): land the intake family's eight platform readings under the +34 ceiling ruling - #15190
Merged
Merged
Conversation
…ake ruling The maintainer's 2026-09-04 ruling (decision batch 27) sizes the intake family's eight readings at +34 and raises this entry's ceiling by exactly that. It is an ORDINARY raise under the ratchet's own maintainer exit, quoted verbatim beside the row per the header's rule for a raised ceiling — not a cross-file move, and no other ceiling moves. The standing cross-file-move declaration on the same entry carries its pre-move baseline forward with it. That `was` exists only to make the MOVE's raise computable from the tree; left at 314 it would price the maintainer's independent +34 as though this move had claimed it (+44 against a net source decrease of 11) and go red for lines the sources were never asked to pay. At 348 the move's own arithmetic is exactly what it landed with — +10 against -11, map total still down one line — and every guard the declaration exists for still fires: a source that grows back drives the decrease under 10 and reds, and the destination still reads PAID DOWN at or below `was`. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
The eight readings the intake flight measured, written in the file's own voice, wrapped to the gate's real budget of 120 bytes per line, and each placed in the section its fact belongs to: - the page-number walk's hard 422 refusal at offset ~9,900, with the sort=created asc + desc partition recipe and the overlap that proves it; - the payload channel's claim-bearing-field rule and its absence rule — an empty scalar there is not a reading; - the search matcher's query contract: no GitHub qualifiers in the query, scope by parameter, the query written as a sentence; - try-the-other-channel on any refusal, and the label-removal carve-out; - the queue-ref parent-tip position chain, the merge-tree merge-driver caveat, and the full-page first-page zero; - the merge_group progress instrument and its batch-naming trap; - check_suite.completed is a wake, not a gate reading, and the tier script answers only its own tree; - the raw-body source to repair from when the read itself is lossy. +34 lines exactly, per member as the ruling sized them. Deduped against the file first: what it already carries is cited rather than re-spelled, and the three statements the first increment retracted stay deleted. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
This was referenced Sep 4, 2026
os-zhuang
approved these changes
Sep 4, 2026
os-zhuang
marked this pull request as ready for review
September 4, 2026 05:46
os-zhuang
enabled auto-merge
September 4, 2026 05:46
This was referenced Sep 4, 2026
This was referenced Sep 4, 2026
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 free
to 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.
Fixes #14133
Fixes #14694
Fixes #14743
Fixes #14778
Fixes #14798
Fixes #14605
Fixes #14898
Fixes #14445
Part of #15013
The second increment of the
platform-readings.mdintake. The first one landedthe corrections and reported that the family's additions did not fit the ratchet;
this one lands the eight readings under the ruling that sized them.
Attribution, as prose so it survives an edit: produced by Claude Code, session
https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox.The ruling this executes
Maintainer, live PM chat, 2026-09-04, decision batch 27, on the recommendation
presented for #15013 — verbatim and untranslated, adopting option A:
The director record (comment 5535777772) states what that adopts, in its own
words:
It is an ORDINARY raise: not a
CROSS_FILE_MOVESentry, no other ceiling moves,and no re-wrap of untouched paragraphs used as line funding (2026-08-17 rule).
Per member, measured rather than estimated
Every reading was written in the file's own voice and wrapped by the gate's own
wrapLine— the canonical form, so no line can be over budget and no break canland on one of the junctions that render as a space. 120 bytes per line, not
columns.
sort=createdasc+descpartition with its overlap proofevent=merge_groupprogress instrument and the batch-naming trapcheck_suite.completedis a wake (+1); the tier script answers only its own tree (+2)+34 is the ruling's ceiling and this landed exactly at it, so the raise is +34 and
not less. Nothing was shortened to fit, and nothing was padded to reach it.
seat. The ruling and the dispatch both spell it
Fixes, and this body followsthem. The flight flagged that the card is a shift-end report while only its item
③ is in this family, and asked whether the
Part ofspelling for that cardshould be used instead, so that any unaddressed half would survive the merge. The
seat answered on the chain head: item ①1 was dispositioned on 2026-09-03, item ①2
was ruled KEPT on its own card, and item ② was routed — ③ was the only part still
outstanding, and it lands here.
Fixesis correct and stays. Every other memberis single-fact and fully landed.
Two of the twelve edits land without their emphasis markers. Ten carry the
file's own bold convention; the label-removal carve-out and the merge-driver
caveat each cost one line MORE with theirs, which would have put the file at 360
— past the ruled ceiling. They land in the exact un-emphasised text the +34 was
measured on. Measured both ways: all-emphasis is +36, the landed mix is +34.
Deduped against
origin/mainbefore anything was written, exactly as the firstincrement did: a fact the file already carries is cited, not re-spelled. The
three statements the first increment retracted stay deleted — reverse-checked by
grep on the landed tree.
Ratchet verdict, before and after
Before, on
origin/main:After, at
581bc995:Headroom is 0, the same convention every other entry in the map keeps.
This is the reviewer's decision point in this PR. Raising the ceiling row
alone leaves the gate RED, and the reason is a mechanism the ruling did not reach.
The same entry carries a live
CROSS_FILE_MOVESdeclaration — the readingsconsolidation that set the 324 ceiling about a day earlier. Its
was: 314is whatmakes THAT move's raise computable from the tree. With the ceiling at 358 and
wasleft at 314, the gate reads the maintainer's independent +34 as though themove had claimed it, and says so:
That verdict is not wrong about its own arithmetic — it is measuring a raise the
sources were never asked to pay for. The declaration's docblock anticipates a
later raise colliding with it and says the accounting belongs to the later raise's
author, holding the ruling; that is this PR. It writes the case for a later raise
at a SOURCE, so a raise at the DESTINATION is the shape it does not have words for.
What this PR does: carries the destination's baseline forward with the raise,
was: 314→348(= 314 + the ruled 34), with the reasoning written beside it.Everything the declaration exists to guard is preserved, and the numbers are the
ones it landed with:
+10against−11, map total down one line — byte-for-byte the reading the movelanded with when the destination was at 324. A source that grows back still drives
the decrease under 10 and reds; the destination still reads PAID DOWN at or below
was. The reviewer's completeness check changes shape and the comment says so:the SOURCES'
wasare still theirorigin/mainvalues atf3ae441fa2, heldagainst that diff, while the DESTINATION's is that value plus every ordinary ruled
raise since — each carrying its own quoted ruling beside its ceiling.
Alternatives, if the seat prefers one — each is a one-line change: retire the
declaration (strictly weaker: it drops the source-regrowth guard the docblock was
written for), or teach the script to separate an ordinary raise from a move's
raise (a logic change to a governed script, which is a ruling, not an edit).
Nothing else in the map moved, and no new declaration was added.
Measured and NOT landed: the three post-ruling facts
The three facts recorded on the chain head AFTER the ruling — comments 5533510809,
5533845391 and 5534733764 — are outside the +34 the ruling sized, so they are
measured here and left for a later increment.
os-dev-reportcomment must stop at the last closing braceWritten in the file's voice and wrapped by the same
wrapLine, so these arelanding costs, not estimates. The 5533845391 rows supersede 5533510809, which is
why they are one row here and not two. Landing them needs its own sizing decision;
this PR does not take it.
The four prior-regime holds, read line by line against the landed file
Reported so the seat can close them on evidence. ⛔ No hold's text was edited into
the file: only facts among the eight landed. All four remain open here.
#13373 remains open — the payload channel drops the NEWEST timeline items past
the SSR first window (3 of 5 comments; front 15 edges of totalCount 21, back 0 of
21); proposed remedy was to compare rendered edges against
totalCount.untrustworthy, with the same 15-item first window and a measured shape of the
same kind (12 comments served as 3).
on this channel is not a reading unless
hasNextPage: falseor a second channelsays so. Same mechanical test the card asked for, written as the flag the
payload itself carries.
totalCountarithmetic. The file statesthe rule, not that instance's numbers.
#13385 remains open — only the first 15 timeline items render and the tail
comes back EMPTY, so a read-back of a just-posted comment is byte-identical to
sanitizer damage; asked for option B, a discriminator.
hasNextPage: true, verbatimin the file's voice.
wrote it on — the card's rule, with a broader predicate than its
get_commentsspelling.
hasNextPage: falseor a second channel. Cheaper than the card's proposal, which needed aknown-present earlier comment as a positive control.
reading looks exactly like sanitizer damage — carried in substance by 「本档的
缺席不是读数」 plus the separate truncation-diagnosis bullet.
#13387 remains open — the payload is CDN-CACHED and can be minutes-to-hours
stale; a cache-buster query string and a no-cache header did NOT defeat it across
three fetches over 75 minutes. One seat asserted a half-state about another seat's
work on that read.
rule, and it covers the half-state and race-recheck instances by construction.
assignees,pm:*labels,state—are never read from this channel, which is exactly the half-state case behind
the card's damage report.
repair the gap, but attributes it to the first-window truncation.
channel is CDN-cached, or that a cache-buster plus a no-cache header was
measured and did not defeat it. A reader gets the rule but cannot tell why
re-fetching will not help, which is the one thing this card measured that the
other two did not.
if the seat judges the rule sufficient without the mechanism.
#13257 remains open — agent-created Routine transport: sessions fired by
create_triggerget nomcp__github__*tools (two probes, the second excludingthe competing explanation); self-binding wakes an existing session with its tools
loaded;
create_triggertakes neithersourcesnormodeland falls to thedefault tier; agents cannot edit a UI-created Routine; and the orphan-timer
recovery path.
which points at the main file for 定时器选型 and carries only
ccusage blocks.inside the ruling's sizing, and needs its own increment sized on its own.
Scope held
platform-readings.md, plus the one ceiling row with its quotedruling and — declared above — the standing move declaration's baseline, in
scripts/pm/check-skill-line-ratchet.mjs. No other file.rest-channel.mdorlanes/**were not written anywhere.CROSS_FILE_MOVESentry was added; no re-wrap wasused as funding. The two bullets the previous increment reported as unspent
payment candidates are still unspent.
Verification
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands,no paths, re-derived AFTER the final commit — it read the change set from git as
exactly the two paths above and named 27 runnable families. All 27 run green
at
git rev-parse --short HEAD= 581bc99. Every exit code captured byredirect before any pipe; each verdict below is the gate's own line.
check-governed-merges --teston this PR's two paths returns its GOVERNED verdict(exit 3 =
EXIT_TEST_GOVERNED), naming.claude/**as the hit:NOT MEASURED, then repaired to a real verdict:
check:doc-formula-expressionsfirst exited 3 with
PREREQUISITE NOT MET — the workspace package @objectstack/formula is not built, then again with the same for@objectstack/lint. Exit 3 is not a finding; both packages were built through theshared verify lock and the gate re-ran to the green verdict quoted above. Heavy
runs went through
bash scripts/pm/os-verify-lock.sh -c(VERDICT command-exit 0;held 70s, 40s and 354s across three batches, waited 0s / 0s / 0s, and 70s waited on
one build — shared-box seconds, as the lock's own verdict line states).
pnpm lint— a proven narrowing, not a skip. Repo-wideeslint . --no-inline-configis CI's run. Locally the two changed paths were linted directly, and the narrowing
is measured on all three legs the discipline asks for:
file comes back
File ignored because no matching configuration was supplied—eslint's config puts
.mdoutside its population entirely, so the only path ofthis diff eslint judges at all is the
.mjs.--format json: 2 entries returned, 1 judged, 0errors, 0 warnings on
scripts/pm/check-skill-line-ratchet.mjs, exit 0.eslint.config.mjswhich, in its own words at line 327, "never enables type-aware linting (no
parserOptions.project, no typed@typescript-eslintrules) for ANY file".With no cross-file type program, a two-file diff cannot move the verdict on a
file it does not contain.
One name in the dispatch does not exist in this repo:
pnpm check:control-byteshas no such script. The control-byte gate is spelled
check:nul-bytes, it is inthe derived family, and it ran green above. The two changed files were also swept
directly for raw control bytes outside the gate — no hits.
The ratchet script's own test suite is its
--self-test(136 cases, green above);a repo-wide grep over
*.test.*/*.spec.*forskill-line-ratchetreturns nodedicated test file, so nothing else is owed on that leg.
Merge path
.claude/**is a governed surface. Draft, human merge. Not flipped ready, noauto-merge, no reviewers requested — the ruling puts the review request for
os-zhuangandhotlongwith the seat, not with this flight.skip-changesetapplies: nothing is published from any package.
Generated by Claude Code