You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sole authority for the domain:cli seat. Single writer: only the sitting PM edits the body. Read side: body + comments newer than the body's last edit. Compacted at the R39 takeover — every R37/R38 addendum is now older than this body and is archive, not current state. Durable readings appendix: comment 5350278135. Everything still live is restated here.
1. 当前 PM
Session session_01UjujZN219uFzBhSYfMykCd, identity os-litant. Took over 2026-08-26T00:5xZ on the maintainer's instruction: 「前任已交班」.
The previous holder os-trump (session_01HbG3rGVLjZStHQxHDtzJdJ) released the seat explicitly at 00:49:37Z (comment 5419019215, "Seat released", in-flight 0, six cards merged). ⛔ Nothing of theirs is left running and none of their Routines will wake this session.
⚠️This is the seat's THIRD account, not just a third session.os-litant ≠ os-trump ≠ os-zhuang:
⭐⭐ A contract-review verdict is recorded on the CARD, never on the PR (references/contract-review.md). The lane's single most expensive error: R34 searched the PRs, found nothing, held two green PRs 26 hours and escalated twice. General rule: a zero-hit is reverse-checked against the PROTOCOL that defines where a positive would appear — not against a term that merely exists in whatever population you searched.
⭐ The clause-② gate is a TIER gate, not an IDENTITY gate.Fuse (⛔ self-report is not a reading):get_session (no args) → external_metadata.last_served_model vs CONTRACT_REVIEW_TIER (scripts/pm/dispatch-gates.mjs). ⛔ session_context.model is the configured tier and is NOT a fuse input.
⭐ Clause ② is the CLAIMING seat's call at claim time — including against triage, and the gate is hung in the same stroke as the claim.
claude-fable-5 unavailable to this lane (maintainer 2026-08-20) ⇒ Clause-② cards dispatch at opus under the quota exemption, keepingneeds:contract-review.
⛔ domain:* and type are TRIAGE's to produce. File findings unlabelled. ⛔ finding is OBSERVATION-class only — a concrete measured defect is filed unlabelled.
ACCEPT path fork: governed surfaces (docs/adr/** · .claude/** · skills/** · AGENTS.md · CLAUDE.md) ⇒ ⛔ never flip ready / enqueue / arm; human merge is the audit record.
pm:retriage coexists with the existing pm:* label, ⛔ never replaces it; a pm:queue card carrying it is ⛔ skipped.
Seat title vocabulary is a closed set (check-half-states.mjs): 🟢 (holder MUST equal an assignee) · ⏳ vacant · ⏸/⏸️. ⛔ ⚪ is not in it.
Seat rulings in force.① same-package EXEMPT, same file HARD SERIAL, no region exemption — enqueued ≠ released; the MERGE (or a CLOSE) releases a serial. ② discretionary downgrade SPENT. ③ landing attaches to the SESSION. ④ ceiling 3. ⑤ 家族派发 needs all five gates. ⑥#9936 Option B. Fold vs serial: file adjacency forces a serial; only a shared question justifies a fold.
Platform readings that have cost this lane a cycle each:
⚠️A label write on a PR can ADD check runs — re-read CI after ANY label change preceding an arm (measured 38→41, 31→37).
⛔ A comment citing another comment must not be issued in the SAME BATCH as it — the calls run concurrently, so neither id exists when either body is written.
⚠️API rate limit already exceeded is a STATE, not a race. ⛔ Do not retry into it.
⚠️The shared verify lock is a real lane constraint — queue-timeout (exit 99) and exit 143 (container ~10-min foreground SIGTERM cap) both mean "no turn": nothing ran, and neither is a pass. ⇒ launch long locked runs detached and poll the VERDICT in-round. ⚠️ The task harness reports exit-99 tickets as "exit code 0"; the lock's VERDICT line is the authority.
⚠️issue_readget_labelsREFUSES a PR number · list_issues treats multiple labels as OR · list_pull_requests can return merged: false beside a populated merged_at (pull_request_read method:get is authoritative) · search_issuesin:title zero-hit is not an absence · get_status does NOT cover check runs (1 Vercel status against 41 real runs) — use get_check_runs.
⚠️ Issue bodies silently strip the bare attribution footer; comments get one injected; a PR-body PATCH appends a second. The os-dev-report HTML-comment marker is stripped in issue comments ⇒ collection must also accept the literal-text first-line form.
⛔ Restart-when: is the exit predicate of a pm:on-hold card. A pm:queue card carrying one is dispatchable.
⚠️A scheduled check-in carries the instruction that was correct when it was written. The board outranks any timer's text. Container clock disagrees with the scheduler's ⇒ only relativedelay_minutes is safe for arming a check-in.
⭐ A dispatch order's numbers are the first thing a dev should falsify. Keep "report what you measure, ⛔ do not reconcile" verbatim in every order; distrust the numbers beside it, including your own.
⭐ The FALSE GREEN is the dangerous direction. Prove the instrument produces a positive before trusting its negative — and ⛔ never reverse-check with a substring of the term under test (publish matches inside published).
⭐ mergeable_state: unknown is not "arm anyway" — re-read, or better, probe locally with git merge-tree --write-tree origin/main refs/remotes/pr/NNNNN. Zero quota, one command. A green PR its neighbours have overtaken gets that probe first.
⭐ A missing report is not evidence of missing work, and an empty git ls-remote is not either — a merged branch is deleted. Check ls-remoteand the card's closed_by_pull_requests.
⛔ Raising a debt ledger's ceiling to absorb your own new errors is the gate-weakening floor.
⛔ Repo-scoped REST is 403 in this session class while /rate_limit answers ⇒ label writes fall back to MCP whole-set replace. objectstack-ai/cloud is NOT attachable from this seat (add_repo → "you don't have access"), re-confirmed at R39.
3. 热文件串行队
⭐ R39 correction to the inherited fence list. R37 handed over packages/rest/src/rest-server.ts with the queue #11473 → #11719 → #11735 → #11926. Read against the cards' own measured regions, only #11926 actually edits that file:
⇒ packages/rest/src/rest-server.ts — FENCED by #11926 (R39, in flight). Behind it: nothing that has been measured to need it. ⚠️ This correction is derived from card bodies, the same instrument R37 used; every R39 dev declares its actual surface and stops on breach, which is what settles it.
packages/cli/test/** spawner neighbourhood — SERIAL, ⛔ NOT a fold (gate ① fails: "no env option" ≠ "childEnv forwards NODE_PATH" ≠ "a gate over the class"). #11595 · #11464 · #11707. ⛔ Before any is dispatched, measure it file-by-file against #12294's landed diff (packages/cli/test/helpers/serve-process.ts, packages/cli/test/vitest-resolution-base-collapse.e2e.test.ts, scripts/check-test-source-alias.mjs). ⛔ Not assumed clear. #11595 additionally still owes an answer on its domain:devx face (scripts/check-cli-test-child-env.mjs).
⭐ All three are LATENT, not live. Deprioritised below live defects on that ground, ⛔ not on effort.
H17 on-hold trigger-file index touching this lane (#7898): packages/core/src/security/auth-gate.ts · packages/runtime/src/http-dispatcher.ts. ⛔ Any dispatch whose surface reaches either must stop and report before touching it.
R39 in flight (this seat, os-litant), file surfaces disjoint by construction:
#11624 and #11926 both read packages/spec but ⛔ neither may edit it — a fix requiring a packages/spec edit stops and transfers to the spec seat. #11624 and #11719 share no file; ruling ① exempts same-package adjacency. None intersects the H17 index or the packages/cli/test neighbourhood.
4. 说明
Queue: 16 pm:queue unassigned (3 now claimed ⇒ 13 free). Take with the lane's full order: priority:p0 > pm:blocking > target: > type Bug > age. ⛔ 优先是排序,不是豁免.
Patrol rows handled at R39 takeover:H19 #10938 and H11 #8343 were both disposed by R37 ~15h earlier with current readings, and nothing has changed — cloud is still unattachable (independently re-confirmed) and ghcr still needs a credential this session lacks. ⛔ Confirmed rather than re-posted; re-issuing the same disposition is noise, not diligence. Both holds stand unchanged. #7898 is the H17 trigger-file index, carried into §3 as a dispatch constraint.
⚠️ The lane's structural constraint remains the contract-review chain, not throughput. This seat's fuse bars it from clearing needs:contract-review; #11926 will land ACCEPTED-and-gated. The chain is not a dead end — R37 measured #11925, #12047 and #11718 all clearing and merging through it.
Sole authority for the
domain:cliseat. Single writer: only the sitting PM edits the body. Read side: body + comments newer than the body's last edit. Compacted at the R39 takeover — every R37/R38 addendum is now older than this body and is archive, not current state. Durable readings appendix: comment5350278135. Everything still live is restated here.1. 当前 PM
Session
session_01UjujZN219uFzBhSYfMykCd, identityos-litant. Took over 2026-08-26T00:5xZ on the maintainer's instruction: 「前任已交班」.The previous holder
os-trump(session_01HbG3rGVLjZStHQxHDtzJdJ) released the seat explicitly at 00:49:37Z (comment5419019215, "Seat released", in-flight 0, six cards merged). ⛔ Nothing of theirs is left running and none of their Routines will wake this session.os-litant≠os-trump≠os-zhuang:os-zhuangstill holds A fifth client-SDK erasure spelling no grep in #8140's census counted: 38 methods with NO return annotation, typed fromunwrapResponse< …any… >#11925 (pm:dispatched, assigned, PR fix(client): bind the three verifiable methods of the unannotated return-type erasure population (#11925) #12062 merged but the card was never closed out). That card is a different account's ⇒ the cross-account rule at its strictest: ⛔ this seat never touches it — no review, no label write, no arm, no comment on its state. It is a half-state for its own account or triage to clear, ⛔ not this seat.In-flight ceiling 3 (maintainer 「并发降到3」/「当前任务处理完后,并发降到3」, comment
5409654386). ⛔ The R37 ceiling of 5 in the archived body is superseded.2. 继承台账 (inherited, still live)
📌 Job description:
references/lanes/cli.md— ⛔ read fromorigin/main, not the working tree.references/contract-review.md). The lane's single most expensive error: R34 searched the PRs, found nothing, held two green PRs 26 hours and escalated twice. General rule: a zero-hit is reverse-checked against the PROTOCOL that defines where a positive would appear — not against a term that merely exists in whatever population you searched.get_session(no args) →external_metadata.last_served_modelvsCONTRACT_REVIEW_TIER(scripts/pm/dispatch-gates.mjs). ⛔session_context.modelis the configured tier and is NOT a fuse input.claude-fable-5unavailable to this lane (maintainer 2026-08-20) ⇒ Clause-② cards dispatch atopusunder the quota exemption, keepingneeds:contract-review.domain:*andtypeare TRIAGE's to produce. File findings unlabelled. ⛔findingis OBSERVATION-class only — a concrete measured defect is filed unlabelled.docs/adr/**·.claude/**·skills/**·AGENTS.md·CLAUDE.md) ⇒ ⛔ never flip ready / enqueue / arm; human merge is the audit record.pm:retriagecoexists with the existingpm:*label, ⛔ never replaces it; apm:queuecard carrying it is ⛔ skipped.check-half-states.mjs):🟢(holder MUST equal an assignee) ·⏳ vacant·⏸/⏸️. ⛔⚪is not in it.Seat rulings in force. ① same-package EXEMPT, same file HARD SERIAL, no region exemption — enqueued ≠ released; the MERGE (or a CLOSE) releases a serial. ② discretionary downgrade SPENT. ③ landing attaches to the SESSION. ④ ceiling 3. ⑤ 家族派发 needs all five gates. ⑥ #9936 Option B.
Fold vs serial: file adjacency forces a serial; only a shared question justifies a fold.
Platform readings that have cost this lane a cycle each:
API rate limit already exceededis a STATE, not a race. ⛔ Do not retry into it.queue-timeout(exit 99) and exit 143 (container ~10-min foreground SIGTERM cap) both mean "no turn": nothing ran, and neither is a pass. ⇒ launch long locked runs detached and poll theVERDICTin-round.VERDICTline is the authority.issue_readget_labelsREFUSES a PR number ·list_issuestreats multiplelabelsas OR ·list_pull_requestscan returnmerged: falsebeside a populatedmerged_at(pull_request_read method:getis authoritative) ·search_issuesin:titlezero-hit is not an absence ·get_statusdoes NOT cover check runs (1 Vercel status against 41 real runs) — useget_check_runs.os-dev-reportHTML-comment marker is stripped in issue comments ⇒ collection must also accept the literal-text first-line form.Restart-when:is the exit predicate of apm:on-holdcard. Apm:queuecard carrying one is dispatchable.delay_minutesis safe for arming a check-in.publishmatches insidepublished).mergeable_state: unknownis not "arm anyway" — re-read, or better, probe locally withgit merge-tree --write-tree origin/main refs/remotes/pr/NNNNN. Zero quota, one command. A green PR its neighbours have overtaken gets that probe first.git ls-remoteis not either — a merged branch is deleted. Checkls-remoteand the card'sclosed_by_pull_requests./rate_limitanswers ⇒ label writes fall back to MCP whole-set replace.objectstack-ai/cloudis NOT attachable from this seat (add_repo→ "you don't have access"), re-confirmed at R39.3. 热文件串行队
⭐ R39 correction to the inherited fence list. R37 handed over
packages/rest/src/rest-server.tswith the queue #11473 → #11719 → #11735 → #11926. Read against the cards' own measured regions, only #11926 actually edits that file:/metamount is a second, entirely unpinned copy of every metadata write door #11473 — resolutions are a scoping-on fixture and/or themeta-write-door-capability-enumeration.test.tsfilter. Test files, notrest-server.ts.sendError'sextracannot carrydeclaredCode, so every nested-envelope route silently drops an unregistered producer's own code spelling #11719 — its own body states "Region:packages/types/src/response-envelope.ts,sendError'sextraparameter."packages/rest/src/error-response.ts(×2), sixpackages/resttest files, and onepackages/specfile.rest-server.tsis not among them.client.reports.saveaccepts an input its own service contract refuses —SaveReportInput.queryis required and neither the SDK nor the route checks it #11926 — edits thePOST /reportsroute atrest-server.ts⇒ this is the real holder.⇒⚠️ This correction is derived from card bodies, the same instrument R37 used; every R39 dev declares its actual surface and stops on breach, which is what settles it.
packages/rest/src/rest-server.ts— FENCED by #11926 (R39, in flight). Behind it: nothing that has been measured to need it.packages/cli/test/**spawner neighbourhood — SERIAL, ⛔ NOT a fold (gate ① fails: "noenvoption" ≠ "childEnvforwardsNODE_PATH" ≠ "a gate over the class"). #11595 · #11464 · #11707. ⛔ Before any is dispatched, measure it file-by-file against #12294's landed diff (packages/cli/test/helpers/serve-process.ts,packages/cli/test/vitest-resolution-base-collapse.e2e.test.ts,scripts/check-test-source-alias.mjs). ⛔ Not assumed clear. #11595 additionally still owes an answer on itsdomain:devxface (scripts/check-cli-test-child-env.mjs).⭐ All three are LATENT, not live. Deprioritised below live defects on that ground, ⛔ not on effort.
H17 on-hold trigger-file index touching this lane (#7898):
packages/core/src/security/auth-gate.ts·packages/runtime/src/http-dispatcher.ts. ⛔ Any dispatch whose surface reaches either must stop and report before touching it.R39 in flight (this seat,
os-litant), file surfaces disjoint by construction:packages/cli/src/utils/i18n-extract.ts·packages/lint/**·content/docs/ui/translations.mdxpackages/types/src/response-envelope.tspackages/client/src/index.ts·packages/rest/src/rest-server.ts#11624 and #11926 both read
packages/specbut ⛔ neither may edit it — a fix requiring apackages/specedit stops and transfers to the spec seat. #11624 and #11719 share no file; ruling ① exempts same-package adjacency. None intersects the H17 index or thepackages/cli/testneighbourhood.4. 说明
Queue: 16
pm:queueunassigned (3 now claimed ⇒ 13 free). Take with the lane's full order:priority:p0>pm:blocking>target:> typeBug> age. ⛔ 优先是排序,不是豁免.Patrol rows handled at R39 takeover: H19 #10938 and H11 #8343 were both disposed by R37 ~15h earlier with current readings, and nothing has changed —
cloudis still unattachable (independently re-confirmed) and ghcr still needs a credential this session lacks. ⛔ Confirmed rather than re-posted; re-issuing the same disposition is noise, not diligence. Both holds stand unchanged. #7898 is the H17 trigger-file index, carried into §3 as a dispatch constraint.needs:contract-review; #11926 will land ACCEPTED-and-gated. The chain is not a dead end — R37 measured #11925, #12047 and #11718 all clearing and merging through it.Round ledger. R23 4·4 · R24 2·2 · R25 5·5 · R26 3·3 · R27 1·1 · R28 3·3 · R29 2·1 · R30 5 claimed · R31 15·13 · R32 24·22 · R33 9/10 all landed · R34 5 cards / 4 PRs · R35 8·8 ALL MERGED · R36 6 cards, 2 merged, 3 handed over, 11 dev findings · R37 (os-trump) 6 cards landed, 3 filed · R38 folded into R37's wind-down · R39 (os-litant) 3 dispatched.
⛔ Patrol heartbeats are not rounds.