Skip to content

⚪ RELEASED · last seat session_019aCUUSwWefnbCJ4Xk1vqQW · R41+R42 closed 2026-09-03T16:50Z · 6 landed (#6467 #6600 #7185 + #5174 b9/b10/b11) · UNGATED_DOCS 32→26 · #3240 delivered, AWAITING HUMAN MERGE (PR #7523, governed) · queue: #5174 next batch, #6653 p2 · findings #7446 #7448 #7460 #7466 #7483 #7524 #7525 #5748

Description

@os-zhuang

Seat registration — domain:devx @ objectui. Lane scope and standing duties live in the pm-dispatch skill (references/lanes/devx.md); this post carries current state only. Readers: body + comments later than the body's last edit.

1 · Current PM

> ## ⚪ RELEASED — last held by PM session session_019aCUUSwWefnbCJ4Xk1vqQW (GitHub login os-sales), R41 + R42, 2026-09-03T04:31Z → 16:50Z
>
> Released on the maintainer's instruction (「当前任务处理完,合并后就下班」). The shift-end brief is the comment posted immediately after this edit; it is the release marker.

Rounds R41 and R42 closed. R41 released at 07:40Z; the seat was re-taken at 07:50Z on the maintainer's instruction (「你应该自主继续派发」) because #5174 was sitting dispatchable in the queue — releasing with dispatchable work in the queue was the wrong call and is recorded as such
Dispatched 10 dispatches on 7 cards, all mode:subagent#6467 (patch round + merge round), #6600 (×2, after a fable-quota kill), #7185 (diagnosis, then the clause), #5174 b9/b10/b11, #3240 (resumed once after a server 500)
Landed (merged) 6 PRs: #7332 (#6467) · #7449 (#6600) · #7452 (#7185, governed, human-merged) · #7458 (b9) · #7484 (b11) · #7485 (b10). Each verified on main by content, never by the merge event
Delivered, ⛔ NOT merged #3240 → PR #7523, 106 files, CI 27 green / 0 red, draft, both approvers requested. Governed (AGENTS.md), so a human merges it. ⛔ Never nag
UNGATED_DOCS 32 → 26, and the .mdx half is now empty — all 26 remaining are package READMEs plus the root
Filed #7446 · #7448 · #7460 · #7466 · #7483 · #7524 · #7525
Evidence added, ⛔ no grading #5250 (three consumers, three mechanisms, discriminators for each) · #6653 (14/14 measurement; byte-exact body-write counter-measurement) · #7035 (wider metric-card measurement, recorded rather than filed as a near-duplicate)
Queue at close #5174 pm:queue — next ledger batch, scope measured below · #6653 pm:queue p2 (triage re-judged it out of pm:retriage today) · #4853 pm:retriage · #6342 another identity's claim

2 · Inherited ledger

⚠️ objectui now has a central triage seat (maintainer ruling 2026-09-03, 「objectui 也纳入,分仓报数」). It re-judged #6653 out of pm:retriage and moved #5250 into needs-user-decision during this shift. The execution seat's "evidence only, ⛔ never grade" posture is now correct and has a counterpart — keep it.

Awaiting a human:

Next UNGATED_DOCS batch (re-take the census on main, ⛔ do not inherit): takeable by density are plugin-chatbot, auth, plugin-calendar, react (~10 blocks each). ⛔ plugin-gantt (18, the largest) and plugin-kanban stay owned by #7302 / PARTIAL_EXCERPTSplugin-gantt being biggest is exactly what a density-first instinct reaches for.

Lane facts — corrections and additions from this shift:

  1. "REST is 403, MCP only" is FALSE. Repo-scoped REST reads and writes return 200/201; only /search/* is 403, and that 403 is the local egress proxy, not GitHub ("sessions are bound to their configured repositories"). Three devs ran entire deliveries at zero MCP calls. ⚠️ The PM seat cannot do REST writes — the permission classifier blocks curl to the GitHub API — so PM writes remain MCP-only and the PM is the quota bottleneck, not the devs.
  2. MCP issue_read mangles bodies on the READ side; the stored body is intact. Byte-confirmed in two forms (angle-bracket fragments eaten, titles HTML-entity-escaped).
  3. A PM seat CAN safely write a body line — measured twice, byte-exact — provided it never round-trips through the read channel: read raw over REST, inspect for tag-shaped fragments first, write, read back and diff. (Counter-measurement to objectstack#14898's stronger claim; recorded on finding(pm): 17 of 24 domain:ui pm:blocked cards carry no machine-readable Blocked-by: line — they are invisible to the unlock scan's reverse index #6653.)
  4. Governed reviewer requests: pass draft: true explicitly in the same update_pull_request call and read back. Verified working on test(repo): one vitest config, one verdict — delete the 17 per-package configs (#3240) #7523 — draft survived. docs(agents): record how the Actions workflow registry is keyed, and the paginated-listing rule #6183 is the incident where it did not.
  5. Shallow clone: git merge-base returns an empty string rather than failing; git rev-list --left-right --count then reads plausibly and wrongly. git fetch origin --deepen=500 first.
  6. node --check passes a file whose block comment was truncated by a stray */. Verify config edits with a real import().
  7. enable_pr_auto_merge prints both a populated and an empty confirmation for the same call — the output is not a signal. The queue ref is the receipt, it is transient, and auto_merge: not armed on a queued PR is the normal post-enqueue state.
  8. Console eager-closure margin is ~9.5 KB (3181.9 / 3191.4). It moves with main, so a docs-only PR showing a delta is the base moving, not the diff.

3 · Hot-file serial queue

file / family holder note
scripts/check-doc-snippet-types.mjs (UNGATED_DOCS) — free Batches 10 and 11 ran in parallel and merged as a clean union. The licence is removals only — verified +0/-2 on both before release, and merge-tested against each other beforehand. ⛔ Removal-vs-insertion is not the case that fact was measured on (batch 9 was serialised behind #7449 for exactly that reason).
the three doc gates' roots — (#7449 landed) all three now walk apps/*/docs/**; the fences/snippets walk-equality pin still couples two of them
AGENTS.md (governed and hot) PR #7523 (draft, awaiting human) #7452 landed earlier this shift
every packages/*/vite.config.ts + vitest.config.* PR #7523 the whole config surface is in one PR; ⛔ nothing else should touch it until that merges or closes

4 · Notes

#3240 is the shift's most consequential delivery and is not merged. Direction A was ruled 2026-08-06, and the card sat held from 2026-08-25 behind a scheduling condition — "board drained or near-drained, single dev, no other work in flight" — that existed only as prose in a comment. Nothing evaluates prose, so the card stayed held through periods when its own condition was true. R42 wrote that condition into the body as a machine-readable Restart-when:, measured it true, and dispatched into the ruled exclusive window.

⚠️ And immediately got it wrong once: the first version required "zero other pm:queue cards", which dropped the ruling's "or near-drained" and made the condition unreachable while #5174 cycles batches. An invisible condition replaced by an unsatisfiable one is the same defect in a machine-readable coat. Corrected the same day. Whoever backfills the other twelve should expect exactly that failure mode: transcribing prose into a predicate is where meaning gets narrowed.

The recurring discipline, and it was mostly the PM failing it. A control proves your probe is alive; it does not prove your scope is right. Four instances this shift, three of them mine: a filename-shaped grep that missed a pin test which exists; a guessed workflow filename returning zero with a control that also returned zero; a 403 read as GitHub's when its body said "local proxy"; and a count differenced against a stale comment's count, where the comment had simply miscounted. Devs caught three of the four.

The devs modelled the inverse repeatedly: three consecutive batches predicted in writing that a probe would come back green, then used that green to bound where a gate's checking starts — producing discriminators for three distinct "green about nothing" mechanisms (BaseSchema's index signature, a bare-any props parameter, and the labelled-block parse trap, whose tell turns out to be key count). #3240's dev went further: executing the ruling literally would have moved 14 packages onto the vite.config fallback route and re-opened the hole #5406 closed, so it closed that route first.

Standing constraints. Governed surface (.claude/**, docs/adr/**, skills/**, AGENTS.md, CLAUDE.md): draft only, request review from os-zhuang and hotlong with draft: true in the same call, ⛔ never ready / enqueued / auto-merged / approved by this seat. Release is human-only. Entry to the merge queue requires every check green, not the required subset. Closing strips pm:* on the card being closed; ⛔ no bulk cleanup of leftover pm:* on already-closed cards.

Activity

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