Skip to content

docs(pm): the dev's writes go through the fleet tools; platform-readings records the relay's first readings - #19771

Merged
hotlong merged 1 commit into
mainfrom
claude/issue-19739-fleet-write-dev-and-readings
Sep 23, 2026
Merged

hotlong merged 1 commit into
mainfrom
claude/issue-19739-fleet-write-dev-and-readings

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

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):

  • the dev's GitHub writes leave through the scripts/pm/ write tools; in a cloud container they take the fleet-write relay and land as objectstack-fleet[bot];
  • attribution stays the session id in the text, not user.login; git push is not a REST write and does not take the relay;
  • the four-write budget names pr_create (the relay's op for the draft PR) and label-write instead 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:

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 on origin/main at 544767d and lands after PR #19737 merges; it will be rebased then (expected: a clean rebase — different lines in both files — and the os-dev.md count landing at 402 against the lowered ceiling). Not enqueued by this dispatch. The director seat renders the ## Contract review of 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 --commands on the edited tree at 883e80f; 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]: 7011 files, 0 disagree, 0 unparseable, 93.4s (compa
node scripts/pm/check-governed-queue-guard.mjs --self-test 0 ✓ check-governed-queue-guard self-test: 312 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 #11673).
pnpm check:agent-model-declared 0 0 justified inherit(s); no definition leaves its tier to the dispatching session.
pnpm check:agent-test-spelling 0 which drives this same sweep RED over a temp tree on disk.
pnpm check:commit-card-trailers 0 ✓ check-commit-card-trailers self-test: 81 cases pass.
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 (9246 index entries -- 0 gitlink(s) at mode 160000; no .gitmodules in the index, so
pnpm check:nul-bytes 0 check-nul-bytes: OK (scanned 9239 text file(s) -- 9239 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: 5170 cases pass. Batteries: H66 released queue card 183/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; 77 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 tree, named by the dispatch and not in the derived list: pnpm check:skill-frame-freshness exit 0 · pnpm check:pm-governed-prose exit 0. --ran reconciliation: ✓ 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

…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>
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation labels Sep 23, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 883e80f2dc18666e072d4ebf453c206bd2180af9

① Derived judgments

Rendered in-seat by the director seat (summon #27, session_0129ZpnaBcYZZ51rCvQiXg6C, the fable tier). The contract is #19739's re-ruled body, items 2 and 4: the dev's own writes go through the fleet tools (and so the relay in a cloud container; git push unchanged), and platform-readings.md 〈API 配额〉 records the relay's first live readings; ⛔ nothing else.

② Verdict

PASS, held. Lands after PR #19737 merges; the seat re-reads the rebased head against this record before enqueuing.


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Record of record for this head, re-posted with the Reviewed-by: line and the **VERDICT: PASS** spelling the queue guard reads (the 02:04Z record lacked both — the guard removed PR #19770 from the queue at 02:05Z on that omission). Judgments unchanged.

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 883e80f2dc18666e072d4ebf453c206bd2180af9

① Derived judgments

Rendered in-seat by the director seat (summon #27, session_0129ZpnaBcYZZ51rCvQiXg6C, the fable tier). The contract is #19739's re-ruled body, items 2 and 4: the dev's own writes go through the fleet tools (and so the relay in a cloud container; git push unchanged), and platform-readings.md 〈API 配额〉 records the relay's first live readings; ⛔ nothing else.

② Verdict

Reviewed-by: session_0129ZpnaBcYZZ51rCvQiXg6C

VERDICT: PASS (held) — lands after PR #19737 merges; the seat re-reads the rebased head against this record before enqueuing.


Generated by Claude Code

@hotlong
hotlong marked this pull request as ready for review September 23, 2026 02:35
@hotlong
hotlong merged commit 2005a55 into main Sep 23, 2026
33 of 35 checks passed
@hotlong
hotlong deleted the claude/issue-19739-fleet-write-dev-and-readings branch September 23, 2026 02:35
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Sep 28, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s

Projects

None yet

Development

Successfully merging this pull request may close these issues.

protocol(pm): cloud seats write as objectstack-fleet[bot] — export OS_FLEET_SESSION at 开轮 and name the relay in the channel text

2 participants