Repository navigation
docs(pm): the dev's writes go through the fleet tools; platform-readings records the relay's first readings - #19771
Conversation
…he relay's first readings os-dev.md: the dev's GitHub writes leave through the `scripts/pm/` write tools, which in a cloud container take the `fleet-write` relay and land as `objectstack-fleet[bot]`; `git push` is not a REST write; the four-write budget names `pr_create` and `label-write` instead of the raw REST paths. One line is retired to pay the ceiling in place: the footer-shape-per-channel rule, which AGENTS.md's attribution paragraph already states and which the next line still points at. platform-readings.md: the relay's first live readings (run created 5 s after the dispatch, job at 17 s, comment written at 22 s, tool wall 31 s; the 90 s / 5 min ceilings unchanged), that write-pace counts a dispatch as the write with the 40-per-hour budget unchanged, and that close-cards spends one dispatch per step. Two lines are retired in place, each restated by the red-window rows beside them. Claude-Session: https://claude.ai/code/session_01XPUwWGnmky4PXPofNsf2w7 Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: ① Derived judgmentsRendered in-seat by the director seat (summon #27,
② VerdictPASS, held. Lands after PR #19737 merges; the seat re-reads the rebased head against this record before enqueuing. Generated by Claude Code |
Contract reviewRecord of record for this head, re-posted with the Served-tier: ① Derived judgmentsRendered in-seat by the director seat (summon #27,
② VerdictReviewed-by: VERDICT: PASS (held) — lands after PR #19737 merges; the seat re-reads the rebased head against this record before enqueuing. Generated by Claude Code |
…endered records, retriage, durable state (objectstack-ai#19795) Fixes objectstack-ai#19777 Clause-②: no ## What changed Three one-line edits, one per reference file, each paid in place under the file's `check-skill-line-ratchet.mjs` ceiling (241 / 469 / 91 — counts unchanged, every line ≤ 120 bytes, no re-wrap). Base `origin/main` at 2cf9db7. | file · section | line added | line paid | |---|---|---| | `dispatch-runbook.md` 〈接手中断的 dev(worktree 接手协议)〉 | `- 账号封禁即死会话:接手者重认领,消失的记录(认领/复核/裁决)按正文行在当前 head 重出。` | folded `- PM 会话已死 ⛔ 不推导其 dev 已死;跨账号活性只认 GitHub 产出读数。` and `- 死后恢复查三态:远程(\`git ls-remote\`)、仅容器磁盘、真没了。` into `- PM 会话已死 ⛔ 不推导其 dev 已死;死后恢复查三态:远程 \`ls-remote\`、仅容器磁盘、真没了。` — the dropped clause 跨账号活性只认 GitHub 产出读数 is line 135 of the same file (〈Routine 传输〉 block) | | `platform-readings.md` 〈API 配额〉 | `- 封号隐藏其全部评论、无 timeline 事件;assignee、PR、正文存活;分诊没了挂 \`pm:retriage\`。` | replaced the older suspension reading in the same block, `- 用户类写绑作者:封号则其评论与卡按作者 404,标签/状态/标题/正文存活。` — the director's measurement (104 cards, zero `comment_deleted` events; assignee, PRs and bodies persist) supersedes it; the `⇒ 耐久算按令牌类重算…` line under it stands | | `seat-post-protocol.md` 〈活性、写侧刷新与收班〉 | `- 耐久状态只住正文或以 App 写入;正文守中继上限 60,000 字节,超大贴由半状态巡查浮出。` | folded `- 超大贴由半状态巡查的 report-only 项浮出,⛔ 不等读取失败。` (〈贴的四段与派生视图〉) into it | Not touched: `contract-review.md` :13 / :19 (objectstack-ai#19061 step ④), `SKILL.md`, `os-dev.md`, `AGENTS.md`; no gate, hook, ratchet or roster. ## Landing Tier S (`.claude/**`) at `CONTRACT_REVIEW_TIER`: the director seat renders the `## Contract review` record on this head and lands it through the queue. `skip-changeset` — nothing published from any released package; the label is the seat's to apply (this dispatch forbids label writes by the dev). The two serial PRs the card named (objectstack-ai#19737, objectstack-ai#19771) are on `main`; nothing to rebase. ## Verification Gates derived by `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` on the edited tree at d192977; each run alone, exit captured before any pipe (`cmd > log 2>&1; ec=$?`). | command | exit | verdict line | |---|---|---| | `node scripts/check-closing-keyword-parity.mjs` | 0 | • packages/spec/CHANGELOG.md -- 6080503 bytes exceeds the sweep's 2097152-byte cutoff for UNREGISTERED files | | `node scripts/check-closing-keyword-parity.mjs --self-test` | 0 | ✓ check-closing-keyword-parity --self-test: 40 assertions, 5 mutations of the shipped parsers each driven to r | | `node scripts/check-comment-mask-corpus.mjs` | 0 | ✓ comment-mask corpus sweep [scripts/js-comment-mask.mjs]: 7015 files, 0 disagree, 0 unparseable, 89.9s (compa | | `node scripts/pm/check-governed-queue-guard.mjs --self-test` | 0 | ✓ check-governed-queue-guard self-test: 279 cases pass (register-driven verdicts, the queue/PR event split, la | | `node scripts/pm/check-harness-current.mjs --self-test` | 0 | check-harness-current --self-test: all 26 cases passed. | | `pnpm --filter @objectstack/lint run check:doc-formula-expressions` | 0 | objectstack-ai#11673). | | `pnpm check:agent-test-spelling` | 0 | which drives this same sweep RED over a temp tree on disk. | | `pnpm check:cross-package-test-inputs` | 0 | OK: 29 package(s) read outside themselves, all declared, and turbo.json hashes every declared glob (6 of them | | `pnpm check:doc-authoring` | 0 | ✓ doc authoring guard: sibling-package prose ids hold the baseline — 819 pinned site(s) across 231 file(s), 90 | | `pnpm check:driver-memory-census` | 0 | check-driver-memory-census: OK — every declaration is ledgered, every ledger entry is live, and every ruled fi | | `pnpm check:gitlink-declared` | 0 | check-gitlink-declared: OK (9269 index entries -- 0 gitlink(s) at mode 160000; no .gitmodules in the index, so | | `pnpm check:nul-bytes` | 0 | check-nul-bytes: OK (scanned 9262 text file(s) -- 9262 tracked, 0 untracked-not-ignored; skipped 7 binary; no | | `pnpm check:pm-governed-merges` | 0 | live: the real generator declared 9 output(s) and certified this tree | | `pnpm check:pm-half-states` | 0 | ✓ check-half-states self-test: 4897 cases pass. Batteries: H66 released queue card 182/172, H19 judged-set fou | | `pnpm check:pm-skill-id-lint` | 0 | ✓ check-skill-id-lint: 30 file(s) clean (pattern /#[0-9]{3,}/g). | | `pnpm check:pm-skill-ratchet` | 0 | ✓ check-skill-line-ratchet: declared cross-file moves: 1, total ceilings down 9 lines. | | `pnpm check:refd-timer-probe` | 0 | 1 code site(s), all inside the approved module, which is present and still reads it. | | `pnpm check:required-contexts` | 0 | governed-surface-guard.yml:governed-surface-guard → 'Governed Surface Queue Guard' | | `pnpm check:skill-frame-sync` | 0 | binding sentence present in it; 1 count mention(s) agree; 86 markdown files scanned for undeclared copies. | | `pnpm check:watch-hint-literal` | 0 | ✓ check-watch-hint-literal: 71 declaration(s) across 4 rostered name(s) -- ROOT_DIR_WATCH_HINTS 47, ROOT_FILE_ | Also run on this head, named by the dispatch and outside the derived list: `pnpm check:skill-frame-freshness` exit 0 · `pnpm check:pm-governed-prose` exit 0. The doc-formula gate measured only after `@objectstack/lint` and its closure were built through `scripts/pm/os-verify-lock.sh` (VERDICT command-exit 0). `--ran` reconciliation: ✓ dispatch-gates --ran: 20 derived famil(ies) accounted for — 20 run, 0 NOT-MEASURED (a DERIVED zero — all 20 recorded an exit code and none of them is 3). --- _Generated by [Claude Code](https://claude.ai/code/session_01XPUwWGnmky4PXPofNsf2w7)_ Co-authored-by: Claude <noreply@anthropic.com>
Fixes #19739
Clause-②: no
What changed
Two files, both governed (
.claude/**, Tier S,CONTRACT_REVIEW_TIER)..claude/agents/os-dev.md— where the file speaks of the dev's GitHub writes (rule 3):scripts/pm/write tools; in a cloud container they take thefleet-writerelay and land asobjectstack-fleet[bot];user.login;git pushis not a REST write and does not take the relay;pr_create(the relay's op for the draft PR) andlabel-writeinstead of the raw REST paths.Net +1 line there, paid in place by retiring the footer-shape-per-channel rule at the file's end (old line 402): AGENTS.md's attribution paragraph states it in full (「what a body write does to the footer depends on the CHANNEL … and the ACTION … ⛔ never generalise one to another … read the body back after every write」), and the line that follows still points at that paragraph. Nothing re-wrapped; the count stays 403 (ceiling 403, headroom 0).
.claude/skills/pm-dispatch/references/platform-readings.md〈API 配额〉, two readings beside the write-pace rows:OS_FLEET_DISPATCH_START_MS90 s andOS_FLEET_DISPATCH_TIMEOUT_MS5 min ceilings unchanged (source: the closure comment on Fleet writes asobjectstack-fleet[bot]from cloud seats: arepository_dispatchrelay workflow in objectstack + adispatchtransport in the five PM write tools (maintainer direct dispatch, 「方案 1」) #19701, probe 2);write-pacecounts a dispatch as the write, the 40-per-hour budget unchanged;close-cardsspends one dispatch per step (the comment throughpost-stamped, the label write, the close as oneissue_patch).Paid in place (+2 / −2): the two red-window rows retired are restatements of their neighbours — 「红窗里 draft 翻转与 auto-merge 挂载照常走 ccr REST,⛔ 不为它们守候」 is said by rows 143–144 (「守候只给上面那几件 GraphQL-only 的,⛔ 其余一切不为配额空等」 and 「红窗里照样走 ccr REST 挂载」), and 「其余动作(评论、标签、请审、读、timeline)照常走 REST」 is row 143's 「其余一切」. Count stays 469 (ceiling 469, headroom 0).
Landing order
⛔ Serial: PR #19737 (#19061 step ③) holds both of these files and lowers
os-dev.md's ceiling 403 → 402 by retiring one line there. This PR is built onorigin/mainat 544767d and lands after PR #19737 merges; it will be rebased then (expected: a clean rebase — different lines in both files — and theos-dev.mdcount landing at 402 against the lowered ceiling). Not enqueued by this dispatch. The director seat renders the## Contract reviewof record.skip-changeset: nothing published; this dispatch forbids label writes, so the label is the seat's to apply.The optional
AGENTS.md:417 clause (card item 5, Tier H) is not in this PR; the dev's reading of whether the paragraph is false without it is in the report on the card.Verification
Gates derived by
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandson the edited tree at 883e80f; each run alone, exit captured before any pipe (cmd > log 2>&1; ec=$?).node scripts/check-closing-keyword-parity.mjsnode scripts/check-closing-keyword-parity.mjs --self-testnode scripts/check-comment-mask-corpus.mjsnode scripts/pm/check-governed-queue-guard.mjs --self-testnode scripts/pm/check-harness-current.mjs --self-testpnpm --filter @objectstack/lint run check:doc-formula-expressionspnpm check:agent-model-declaredpnpm check:agent-test-spellingpnpm check:commit-card-trailerspnpm check:cross-package-test-inputspnpm check:doc-authoringpnpm check:driver-memory-censuspnpm check:gitlink-declaredpnpm check:nul-bytespnpm check:pm-governed-mergespnpm check:pm-half-statespnpm check:pm-skill-id-lintpnpm check:pm-skill-ratchetpnpm check:refd-timer-probepnpm check:required-contextspnpm check:skill-frame-syncpnpm check:watch-hint-literalAlso run on this tree, named by the dispatch and not in the derived list:
pnpm check:skill-frame-freshnessexit 0 ·pnpm check:pm-governed-proseexit 0.--ranreconciliation: ✓ dispatch-gates --ran: 22 derived famil(ies) accounted for — 22 run, 0 NOT-MEASURED (a DERIVED zero — all 22 recorded an exit code and none of them is 3).维护者速读(草稿)
改了什么:两处文字。① dev agent 定义:dev 自己的 GitHub 写(报告评论、开 draft PR、打标签)一律经
scripts/pm/的写工具,云容器里这些工具走fleet-write中继、以objectstack-fleet[bot]落地;git push不是 REST 写、不走中继。② 平台读数表:中继首批实测(dispatch 后 5 s 建 run、17 s 起 job、22 s 评论落地、墙钟 31 s;90 s / 5 min 两个上限不动),write-pace把一次 dispatch 记作一笔写(40/时不变),close-cards每步一次 dispatch。行数预算在本文件内付清,各退一到两行已在别处原样陈述的规则。为什么改:中继已在
main上活着(探针 2 以 App 身份落地),fleet-write派生会话那张卡落地后云席位不再导出任何变量;但 dev 定义里仍写着「curl 带 GITHUB_TOKEN 直写」,读数表里没有中继的任何数字。文字不改,dev 会照旧直写、以自己的用户身份落地。风险与代价(含回滚):只改文字,不加门禁、不加钩子、不动上限。风险一:本 PR 与 PR #19737 同持两文件,本 PR 在其后落地、届时 rebase(预期无冲突,
os-dev.md行数落到 402 与降后上限相符)。风险二:os-dev.md里pr_create是中继的 op 名,本地检出的 dev 仍走with-fleet.sh -- …直连,文字未展开这一分支。回滚 = revert 本 PR,无状态残留。席位意见:(留空,席位定稿)
你要做的:等 PR #19737 合并后,由席位 rebase 本 PR 并出
## Contract review;AGENTS.md:417 那一句是否要加(item 5)由总监席按报告决定,不在本 PR。Generated by Claude Code