Uh oh!
There was an error while loading. Please reload this page.
docs(pm-dispatch): pin the security-object enumeration's method and calibration case - #13108
Merged
Merged
Conversation
…alibration case The standing security-object platform-object enumeration appends its NUMBERS to the seat post but never its METHOD, so the duty does not reproduce across seats: the recorded watch item could not be re-derived from anything written down. Record, in the triage-seat runbook where the other standing round duties live: - the surface half as a member-level diff against the recorded baseline ref (column-declaration lines), which is strictly stronger than comparing two totals and cheaper; - the reader-half classification rules the count depends on: generated bundles are not readers, a packages/spec contract declaration IS a read point, and the bare key: literal spelling counts per matching line; - the watch item as the CALIBRATION case, so a run that cannot reproduce it knows its instrument is wrong BEFORE it records a zero; - a zero without a positive control is recorded as NOT MEASURED, never as 0. Ratchet net-0: the 19 added lines are paid for by canonically re-wrapping 16 paragraphs in the same file (whitespace only, zero content removed, no new over-120-byte line; three pre-existing over-length lines are resolved). The recorded recipe excludes the .claude instruction surface, so this file naming the calibration key does not perturb the next run's count.
… not re-wrapping REWORK. The previous commit funded a 19-line section entirely by re-wrapping 16 paragraphs with zero content removed. That is banned: SKILL.md's ratchet row (maintainer 2026-08-17) reads 「⛔ re-wrap(折行合并)不得用作筹行 —— 棘轮治理的是 内容体量,行数只是机读代理,新增以删减付账;密度优化仅随净减内容的 PR 顺带」. Line count stayed flat while content volume rose, which is exactly the shape the rule forbids. - Every one of the 16 re-wraps is reverted: outside the five cut regions and the new section, this file is byte-identical to origin/main. - The section is compressed 19 -> 11 lines (three bullets, each at its own 120-byte minimum) while keeping all four pinned items, the calibration case and the load-bearing .claude pathspec exclusion. - Payment is now REAL DELETION with a surviving home named per cut (8 lines): the seat-post back-pointer (home: seat-post-protocol.md); the re-quoted 2026-08-20 ruling plus the director-seat parenthetical (home: SKILL.md, same quote and date); the restated mechanical flag (home: the half-states gate script header this line already declares authoritative); the re-quoted three partition names (home: SKILL.md, which delegates only the per-partition dev obligations here); and the 已发布包/changeset conditional clause, whose rationale is verbatim in review-checklist.md and whose obligation is in os-dev.md. Cuts were re-derived against the post-13106 tree and avoid its hunks, so none of the cuts it already spends are claimed here. RESIDUAL DEFICIT: 4 lines (274 -> 278). check:pm-skill-ratchet is RED by construction and this number is the evidence for the ceiling decision; per the rework instruction no further re-wrapping was used to close it.
…rget Bullet 1's 「⛔ 不比总数」 point moves into its label, which lets the whole bullet wrap in 2 lines instead of 3 without dropping the baseline-ref rule or its 2026-08-26 provenance. Section 11 -> 10 lines, residual deficit 4 -> 3. 10 is the structural floor, not a stopping point chosen for convenience: the two recipes are single unbreakable code atoms of 75 and 46 bytes, so bullet 1 cannot go below 2 lines while carrying both, and bullets 2 and 3 are already at their own minimum line counts. Going lower means deleting a recipe or the parentheticals that say why each rule is what it is. RESIDUAL DEFICIT: 3 lines (274 -> 277).
This was referenced Aug 29, 2026
Maintainer ruling 2026-08-29 (verbatim: 12813 tong yi, option A): one ruling covering the merged end-state of the three stacked PRs on this file. Conflict resolved keeping both landed intents; ceiling raised to the measured 278 with the ruling quoted in the gate's own comment. Co-Authored-By: Claude <noreply@anthropic.com>
os-litant
commented
Aug 29, 2026
CollaboratorAuthor
天花板裁决落地(PM 亲笔,新 head Generated by Claude Code |
os-zhuang
approved these changes
Aug 29, 2026
os-zhuang
marked this pull request as ready for review
August 29, 2026 10:15
os-zhuang
enabled auto-merge
August 29, 2026 10:15
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.
Fixes#12813
section first; this PR asks for a ceiling decision, not for a green gate.
The standing security-object platform-object enumeration (triage-seat instruction ⑦)
appends its NUMBERS to the seat post but never its METHOD. The card measured the
consequence: the surface half reproduced, the reader half did not — the recorded watch
item (3 non-declaration read points) could not be re-derived from anything written down.
This PR records the method in prose, in the file that already carries the triage seat's
other standing round duties.
⛔ The seat post itself is untouched — it belongs to another seat.
Session: https://claude.ai/code/session_01MnijPVVDakqK2J335JoJtq (carried in prose because
a body edit downgrades the footer form).
What the rework changed
The first commit funded a 19-line section entirely by re-wrapping 16 paragraphs with
zero content removed. That is banned, by the ratchet's own row in the PM SKILL.md
(maintainer 2026-08-17, verbatim):
Line count stayed flat while content volume rose — exactly the shape the rule forbids. The
whitespace-only / wrapLine-canonical proof the first body offered addressed fidelity,
which was never the objection; the objection is governance.
Three changes since:
file is byte-identical to
origin/main— verified by diff, not asserted.pinned items, the calibration case, and the load-bearing
.claudepathspec exclusion.The section as landed (10 lines)
Placeholders are spelled as words here because GitHub's body sanitizer eats short
angle-bracket fragments, including inside backticks: read
BASELINE_REF,TWO_PLUGINS,KEYandDECLARING_OBJECT_FILEfor the file's基线ref,两插件,键and声明该列的 *.object.ts.All four requested items are there: ① member-level diff, not two totals agreeing (now
carried in the bullet's own label, which is what let it wrap in two lines); ② the three
classification answers, stated as THE rule; ③ the watch item as the calibration case, with
both wrong answers compressed into the parenthetical; ④ a zero without a positive control
is 「没读到」, not 0.
The
.claudeexclusion is not decoration: this file now names the calibration key, sowithout it the next run's positive control reads 4 and this PR would have manufactured the
exact failure it repairs.
Cut ledger — real deletion, surviving home named per cut
seat-post-protocol.mdL32-33 states the same relationship from its own side, verbatimSKILL.mdL352-353 (same quote, same date, verbatim);SKILL.mdL944 (director seat = manual summons, contract-review chain). The section heading already carries the date.scripts/pm/check-half-states.mjsheader — the H-numbered flag list this very line already declares authoritativeSKILL.mdL633-634 quotes all three verbatim and delegates only the per-partition dev obligations here (「细则见 runbook」), which are keptreview-checklist.mdL21-24 carries the rationale verbatim;os-dev.mdrule 4 + DoD carry the obligation.SKILL.md's conditional-clause index (L662-664) names three conditional clauses and not this one, so nothing points here.Total recovered: 8 lines.
Every cut was re-derived against the post-13106 tree. PR 13106's three hunks on this
file cover roughly L105-119, L242-248 and L259-268 (with context); none of my five regions
falls inside them, so no cut 13106 already spends is claimed here and the two diffs should
merge without touching each other. The two cuts abandoned for that reason are worth naming:
the 云卡 item-4
subscribe_pr_activityduplicate (2 lines) is blocked becauseSKILL.mdL678 pins the count as 「云卡四课全文见 runbook」, so removing item 4 would need an edit to
the serially-occupied
SKILL.md; and the 落卡分析模板 pointer bullet (2 lines) sits inside13106's hunk context.
Ratchet — the deficit, stated plainly
.claude/skills/pm-dispatch/references/dispatch-runbook.mdcheck:pm-skill-ratchetis RED by construction. Its own verdict line:3 is a measured floor, not a stopping point picked for convenience, and the measurement
is reproducible: the two recipes are single unbreakable code atoms of 75 and 46 bytes, so
bullet 1 cannot drop below 2 lines while carrying both (checked down to a 176-byte stripped
variant), and bullets 2 and 3 already land on their own minimum line counts at 286 and 290
bytes. Below 10 lines the only things left to remove are a whole recipe, or the
parentheticals that say WHY each rule is what it is — and a rule recorded without its
reasoning being re-derived wrong is the exact failure this card documents.
Offered as the evidence for a ceiling decision (274 → the measured need, which a maintainer
may wish to size to cover PR 13098's bullet in the same ruling).
Measured, not asserted: the set of over-120-byte lines went 18 → 17, with 0 introduced.
Evidence: both recorded recipes were run, as recorded
Reader half, the recipe exactly as landed:
⇒ The positive control passes under the pinned rules; the card's two candidate numbers are
exactly the ① -omitted and ② -over-applied answers.
Surface half, the recipe exactly as landed:
⇒ One object file changed, and not in its column declarations: member-level identity,
proven by diff.
b000ab59resolves (docs(glossary): …, 2026-08-26).Gates
Union re-derived with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackand re-run at
git rev-parse --short HEAD= 55f24d1, each redirected to a filebefore capturing
$?. Verdicts are the gates' own printed lines.check:pm-skill-ratchet✗ … dispatch-runbook.md is 277 lines; the ratchet ceiling is 274.— the deficit abovecheck:pm-skill-id-lint✓ check-skill-id-lint: 23 file(s) clean (pattern /#[0-9]{3,}/g).check:skill-frame-sync✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 filescheck:doc-authoring✓ doc authoring guard: 392 files clean — no bare metadata literals.check:agent-test-spelling✓ check-agent-test-spelling: 0 violations — 398 file(s) · 4575 bare -- token(s) …check:pm-governed-mergeslive: the real generator declared 9 output(s) and certified this treecheck:doc-formula-expressions✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 425 files / 1453 TS blocks judged cleancheck:nul-bytescheck-nul-bytes: OK (scanned 7281 text file(s) … no raw ASCII control bytes).check:doc-formula-expressionsfirst answeredPREREQUISITE NOT MET(@objectstack/formulaand
@objectstack/lintunbuilt in the recreated worktree). That is not a red gate — nothingwas measured. Both were built through the shared verify lock
(
scripts/pm/os-verify-lock.sh,VERDICT command-exit 0), after which it ran green.check:pm-skill-ratchetis the one true red, and it is the deliverable of this reworkrather than a defect to hide.
Changeset
None. The diff is
.claude/only — no published package, nothing user-visible.skip-changesetis on the PR (read-union-write plus a compare read-back at PR-open).Not claimed
under the rules now written down; what was missing was the writing down.