Skip to content

[Decision] platform-readings.md ceiling 359 → 362 for the fourth readings increment (PR #15955, red on the ratchet by design) #15960

Closed

Description

@os-steve

维护者速读

改了什么:PR #15955 往 PM 的「平台读数事实表」(references/platform-readings.md)加三条实测规则,各一行:① 零配额通道读卡片时间线时,两个数组各比 edges 长度与 totalCount,短即最新几条缺席,认领检查改走分页 get_comments;② turbo 一个任务失败会让多个包同印 ELIFECYCLE Command failed,权威读数只是 Failed: 行与该包自己的错误;③ 平台在尾部横线前后正反两向归一空行,比对正文只按首个差异偏移,不按长度。该文件行数上限 359/359 满格,dev 实测 333 对相邻规则行里零对能折进 120 字节,于是三行顶着棘轮落地:PR 红 3 行,设计如此;dev 没有自行抬上限,也没有删任何事实。

为什么改:三条都是本班实测到的假阴性,不是推测:第一条已造成一次未遂的重复认领(席位据缓存通道判「没人认领」);第二条让人把陪葬包读成故障源;第三条让两个不同的正文因长度相等被判「相同」。

风险与代价(含回滚):纯文档,零运行时影响;唯一代价是事实表上限抬 3 行。回滚 = revert 一个 commit。

席位意见:建议 A,抬到 362。

你要做的:回一个字母 A / B / C。

背景

第三批读数(#15192)走过同一条路:PR 红在棘轮上,决策卡 #15275 裁 1A 抬 +39。之后成员 3(PR #15641)把该文件规则化重写到 359 行并重锁在 359。本批三条事实在重写后的文件里缺席(dev 逐条 grep 去重,六个候选里三个已存在、跳过)。

Governing text

.claude/skills/pm-dispatch/SKILL.md 门禁表第 786 行(git grep -n '抬上限需维护者裁决' origin/main -- .claude/skills/pm-dispatch/SKILL.md):「scripts/pm/check-skill-line-ratchet.mjs | 本文件行数只降不升(pnpm check:pm-skill-ratchet);抬上限需维护者裁决引用在 PR 正文;⛔ re-wrap …」;人工地板第 392 行(git grep -n '抬 ratchet 上限' origin/main -- .claude/skills/pm-dispatch/SKILL.md):「门禁削弱(降阈值、删必查项、抬 ratchet 上限、跳过测试)」。⇒ 本卡的选项空间与该文本一致:上限只能由维护者裁,本卡即该请求;不是要改文本的卡。

协议声明、是否改协议

不涉 packages/spec,不改协议。

带 re-check 命令的前提

  • 文件 359 行、上限 359(main 904e707):node scripts/pm/check-skill-line-ratchet.mjs 2>&1 | grep platform-readings。
  • PR docs(pm-dispatch): three measured platform readings into the readings ledger #15955 头 b4a0e42 只 +3/−0,棘轮红 3:同命令在 PR 头上跑,读 is 362 lines; the ratchet ceiling is 359。
  • 三条事实在 main 缺席:git grep -c 'ELIFECYCLE' origin/main -- .claude/skills/pm-dispatch/references/platform-readings.md(0)、git grep -c '首个差异偏移' origin/main -- …(0)、git grep -c 'edges' origin/main -- …(0)。
  • 零折行余量:dev 对 333 对相邻规则行的合并测量(PR 正文)—— 席位未复测,列为置信缺口。

具体问题

把上限抬到 362 让三行全落,还是保留 359:删事实,或删三行既有内容付账。

选项

  • A 抬 359 → 362,三行全落。补丁轮:上限行改 362、PR 正文引本裁决原文、ruledRaises 记录 +3。业务等于:三条查表规则从此在事实表里,席位不必再各自实测。
  • B 你点名删掉一或两条,上限按剩余行数抬。业务等于:被删的那条下次由别的席位再踩一次、再测一次。
  • C 删三行既有内容付账,上限不动。业务等于:用 3 小时前刚规则化重写过的事实表里的三条已验证读数换这三条;dev 查过一遍,剩下的是相邻不是重复,C 是静默的质量损失。

推荐

A;回退 B(若必须删一条,第二条 ELIFECYCLE 最弱)。置信缺口:席位未复测「333 对零可折」这一读数。

相关单与 PR

PR #15955 · #15647(第 1 节)· #15917 · 前例 #15275(第三批,裁 1A)· PR #15641(规则化重写至 359)。

os-decision-facets

  • ① 项目长远合理性:缩小特例 —— 三条都收紧读数契约,长期减少各席重复测量;抬 3 行不新增任何机制。
  • ② 实际业务拉动:本班三次撞上(未遂重复认领、CI 误诊、正文误判相同),不是投机面。
  • ③ 防 AI 犯错:三条都把「从缺席推断」换成可核对的判别式(比两个数、读 Failed: 行、按偏移比对),响亮优于静默。
  • ④ 创业阶段不扩散:事实表 +3 行、零新面、零新机制;C 的「删既有内容」是静默的质量损失。
    推荐 A(回退 B);置信缺口:席位未复测零折行余量;三条中第二条最弱,若须删一条先删它。

Generated by Claude Code

Activity

  1. os-zhuang commented on Sep 6, 2026

    @os-zhuang
    Contributor

    Ruling recorded — option A: the platform-readings.md ratchet ceiling is raised 359 → 362 so the three measured rules land whole (director seat, decision batch #56, 2026-09-06 14:10Z)

    Maintainer's reply to the batch, verbatim: 「其他同意」 — recommendation A adopted as ruled.

    What is ruled

    • The ceiling in scripts/pm/check-skill-line-ratchet.mjs for .claude/skills/pm-dispatch/references/platform-readings.md moves 359 → 362; ruledRaises records +3 with this comment as the citation; PR docs(pm-dispatch): three measured platform readings into the readings ledger #15955's body quotes this ruling verbatim (the SKILL.md gate row: 「抬上限需维护者裁决引用在 PR 正文」).
    • All three lines land as authored (zero-quota timeline truncation; the authoritative turbo Failed: reading over multi-package ELIFECYCLE; first-differing-offset comparison after trailing-blank normalisation). No existing line is deleted to pay for them (option C rejected); no line is dropped (option B not needed).

    State: needs-user-decision → pm:queue in this stroke; domain:skills, priority:p2, documentation kept. Governed surface (.claude/**) — the patch round lands on PR #15955 and merges by hand.


    Generated by Claude Code

  2. claude commented on Sep 6, 2026

    @claude
    Contributor

    Blocked-by: #14768

    Ruling A (14:10Z) is executed as the patch round on PR #15955 (#15647 section 1 + #15917): the platform-readings.md ceiling 359 → 362 in scripts/pm/check-skill-line-ratchet.mjs with a ruledRaises record citing the ruling, and the PR body quoting it. That file is held right now by flight B (#14768 + #15959 + #15975 + #15957, the retirement-playbook pin 328 → 326), so the patch round is hard-serial behind it — same file, a flight already running, no fold. The seat dispatches the patch round the moment flight B's PR merges; the round adds Fixes #15960 to PR #15955 so this card closes with the ruling's landing. #15647 and #15917 keep Blocked-by: #15960 meanwhile.


    Generated by Claude Code

  3. claude commented on Sep 6, 2026

    @claude
    Contributor

    Claim: PM loop round 8 (continued) — flight L, the patch round that executes this card's ruling A (14:10Z, decision batch #56, maintainer 「其他同意」) on PR #15955 (#15647 section 1 + #15917, the fourth readings increment, red on the ratchet by design): the platform-readings.md ceiling in scripts/pm/check-skill-line-ratchet.mjs moves 359 → 362 with a ruledRaises record quoting the ruling, the PR body quotes the ruling verbatim (the SKILL.md gate row 「抬上限需维护者裁决引用在 PR 正文」), and the PR gains Fixes #15960 so this card closes with the landing. #15647 and #15917 return to pm:dispatched in the same stroke — their flight resumes.
    Session: session_019RfFHiRCSs3JXLK4cwcfox
    Branch: claude/issue-15647-readings-increment-four (PR #15955's existing branch; the round merges origin/main into it — never a rebase, never a force-push)
    Worktree: objectstack-issue-15647
    Domain: domain:skills
    File surface: scripts/pm/check-skill-line-ratchet.mjs (the ceiling entry + one ruledRaises record) on top of the branch's existing platform-readings.md diff. ⛔ No other file.
    Container & model: XS, mode:subagent, opus — dispatch-gates.mjs --tier: no path-derived mandate on references/platform-readings.md or scripts/pm/**; prose plus a pinned constant.
    Clause-②: no
    Serial: flight B's PR #16357 (f5c08e9589, at the governed terminal) also edits the ratchet map (the retirement pin at the row-bytes table); this round touches the ceiling table and ruledRaises only and must prove git merge-tree --write-tree clean against f5c08e9589 before pushing. GOVERNED (.claude/** via the branch's own diff) ⇒ the PR stays a draft; in-seat review, os-zhuang + hotlong, needs-user-decision + the 维护者速读 at ACCEPT, human merge.


    Generated by Claude Code

  4. claude commented on Sep 6, 2026

    @claude
    Contributor

    os-dev-report

    {
    "issue": 15960,
    "status": "done",
    "branch": "claude/issue-15647-readings-increment-four",
    "pr": "#15955",
    "premise_still_valid": true,
    "summary": "The patch round executing ruling A on PR #15955's existing branch: origin/main (f377394) merged in as a merge commit (no rebase, no amend, no force-push), then ONE file changed on top of the branch's existing diff - scripts/pm/check-skill-line-ratchet.mjs. The ceiling entry for .claude/skills/pm-dispatch/references/platform-readings.md moves 359 to 362, its comment stack gains the ruling quoted verbatim with the comment id (5559776878) and the +3 accounted line by line, and CROSS_FILE_MOVES' declaration for the same file gains one ruledRaises record: delta 3, date 2026-09-06, quoting the ruling in both spellings the shape bar accepts. was stays 314; nothing else in the map moves; platform-readings.md itself was NOT re-edited. Both shape bars are satisfied and were checked against the live gate, not assumed: the record quotes a ruling, and the ruled-raise total 37 stands under the 48 lines the ceiling now stands above was. The move arithmetic reads +11 before and after - the +3 lands in the ruled-raise column rather than in the move's, which is the whole reason was was not carried forward - and the map-wide total is still DOWN 9 lines. After the merge the branch's own diff against origin/main is exactly the three readings lines plus this ceiling change (2 files, +41/-1). CI on the new head 04b61b5 is fully converged: 33 check runs, 25 success, 8 skipped, ZERO failures, zero still running; the ratchet step inside Lint & Repo Gates is GREEN, having been red by design. PR stays DRAFT - not flipped ready, not enqueued, no auto-merge armed, no review submitted. Body edited in place on PR #15955 (no second PR) and read back in full. TWO OBSERVATIONS, neither filed as a card (neither is a reproducible defect, a contract violation, nor a metadata-authoring trap): (1) the ruledRaises docblock comment still illustrates the subtraction with 397 - 314 - (34 + 39) leaves the +10 ... against the same net source decrease of 11, and all three of those figures are now historical - the ceiling is 362, the +39 record is retired, and the sources' net decrease has since grown to 20; it reads as a description of the live state and is not one, so a future author may check their arithmetic against stale numbers. Deliberately NOT edited here: it is outside the ruling's nothing else moves instruction and outside this card. (2) The check-skill-line-ratchet live run prints exactly one advisory, and it is not this diff's: it names .claude/skills/spec-property-retirement/SKILL.md's row-bytes pin (headroom 2, lower to 326), whose file and whose pin row are both byte-identical to origin/main on this branch - it is the pin flight B's PR #16357 is paying down. Reported rather than silently absorbed because the dispatch asked for zero advisories.",
    "tests": "All figures from commit 04b61b5, the final head; every exit captured BEFORE any pipe (redirect-then-capture), and every gate result quoted from the gate's own verdict line rather than from a bare $?. (1) node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack - the script derived the change set itself from the merge base (2 committed paths, 0 working-tree, 0 untracked; stderr names the repo and commit and confirms --repo holds against this checkout's origin) and derived 38 families. All 38 were run and reconciled: dispatch-gates --ran: 38 derived famil(ies) accounted for - 38 run, 0 NOT-MEASURED. (exit 0). (2) 37 of the 38 green on the first pass. The 38th, pnpm --filter @objectstack/lint run check:doc-formula-expressions, exited 3 = PREREQUISITE NOT MET, which measures nothing and is not a finding; after pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint (through the verify lock, VERDICT command-exit 0, held 2s) it exits 0. (3) pnpm check:pm-skill-ratchet = self-test + live: check-skill-line-ratchet self-test: 155 cases pass. and the live line the ruling names, verbatim: check-skill-line-ratchet: .claude/skills/pm-dispatch/references/platform-readings.md is 362 lines (ceiling 362; headroom 0). Zero red lines in the whole run. The move line: cross-file move into .claude/skills/pm-dispatch/references/platform-readings.md: +11 (314->362, less 37 lines of ordinary ruled raise) against a net source decrease of 20 (lanes/cli.md 35->29, lanes/services.md 30->27, rest-channel.md 93->82); authorised by #14685 item 5 (comment 5520452691). plus declared cross-file moves: 1, total ceilings down 9 lines. One advisory, pre-existing and not this diff's (see summary). (4) node scripts/pm/check-skill-id-lint.mjs self-test + live - green; the added ruling citations live in the .mjs, which is outside its scan set (pm-dispatch markdown + .claude/agents/os-dev.md + AGENTS.md). (5) node scripts/pm/check-half-states.mjs --self-test - exit 0, check-half-states self-test: 2553 cases pass. (6) node scripts/pm/check-governed-merges.mjs --test on the real two-path list - exit 3, GOVERNED - a human merge is the review record, .claude/** x1. PR left draft accordingly. (7) pnpm check:nul-bytes - exit 0, 75 self-test assertions, scanned 8030 text file(s) ... no raw ASCII control bytes; plus a direct scan of both changed files for the wider control-character class (grep -naP over the 0x00-0x08,0x0b,0x0c,0x0e-0x1f,0x7f class): 0 hits. (8) Whole-repo pnpm lint (eslint . --no-inline-config, FULL population, no narrowing) through bash scripts/pm/os-verify-lock.sh -c slot issue-15647, acquired once: VERDICT command-exit 0 - held the lock 104s (1m44s) - waited 0s. Shared-box seconds, as the wrapper's own line states. (9) Merge-tree proof against flight B's head f5c08e9, run TWICE because this repo registers a custom merge=os-regen driver per clone and a driver's exit 0 means the driver took it, not no conflict: git merge-tree --write-tree HEAD f5c08e9589 -> exit 0, 0 CONFLICT lines; git -c merge.os-regen.driver=false merge-tree --write-tree HEAD f5c08e9589 -> exit 0, 0 CONFLICT lines. Both emit the identical tree 867c5e239f, so the two readings agree rather than merely both being green. (10) Edits proven on disk, not inferred from an editor's exit code: grep counts after writing - ceiling ', 362] = 1, ceiling ', 359] = 0, delta: 3, = 1, and the ruling quotation present twice (2 of the file's 5 occurrences of that phrase are mine; the other 3 are pre-existing batch approvals). No ablation was run this round - nothing here needed one. (11) CI on 04b61b5: 33 check runs, all completed - 25 success, 8 skipped, 0 failure, 0 in_progress/queued; combined commit status success. Polled in the foreground until convergence. (12) PR body PATCHed in place on #15955 and read back in FULL, compared at the first differing offset rather than by length (the very rule this PR lands): the sent text is a strict PREFIX of the stored text, which carries one platform-appended BARE-form footer after it. That is consistent with the ledger's standing rule that the append shape varies by channel and action and must be read back, not predicted - it is a confirmation, not a new fact. No mutation, no control bytes, no eaten fragments; relation lines read Part of #15647 / Fixes #15917 / Fixes #15960. Labels read back on the PR: documentation, size/s, skip-changeset - skip-changeset present, and the size label moved xs->s by the labeler's own write, not by a seat.",
    "mcp_calls": "0 - the container carries a working GITHUB_TOKEN, so every read (cards, comments, PR, check runs, labels) and every write (the PR body PATCH, the three report comments) went through authenticated REST in-container; no MCP GitHub call was made this run.",
    "open_questions": [],
    "out_of_scope_findings": []
    }


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions