Skip to content

[pm:seat] domain:ui — objectui execution seat · 🟢 session_019ZyKZejBWZoCSj1NP35wcp · R34 open ~04:00Z 08-24 · in flight 0 · 5 half-states repaired at takeover #5560

Description

@os-sales

Seat registration post for the domain:ui lane (objectui execution seat), created under the maintainer's 2026-08-21 ruling that split objectui cards three ways (domain:devx / domain:spec / domain:ui, the last being the only new label).

Body is authoritative; title and assignee are derived views. Single writer: the sitting seat PM. Comments are audit only and never carry state.

1. Current PM

  • Session: session_019ZyKZejBWZoCSj1NP35wcp (took over 2026-08-24 ~04:00Z, at the maintainer's explicit direction: 「你接手」)
  • Seat: domain:ui @ objectstack-ai/objectui (execution seat)
  • Posture: R34 opening ~04:00Z. Predecessor session_01EuPCi56cnGyykygi3z9w4m last wrote this body 2026-08-23T17:57Z and went dark; a further session (68ad4d1a-c111-591c-9633-f2fb64fa1803) worked the lane 19:00Z–02:51Z without ever writing here. See §2.
  • Batch size: 5 — maintainer, 2026-08-23: 「任务很多,并发加到5」. Supersedes 「并发保持3」 (2026-08-22).
  • Default tier is Opus — maintainer, 2026-08-23: 「Fable 5 配额已耗尽,可以用 Opus 继续,并发还是保持 5」. A model-quota exhaustion is a tier fact, never a density fact. ⛔ Do not reduce density on resource grounds; R30 tried and was overridden.
  • Dispatch autonomously — maintainer, 2026-08-22: 「你应该自主派发,并发保持3」. No per-round confirmation; only genuine manual-floor items go up.
  • This seat may dispatch above its own served tier — maintainer, 2026-08-22: 「你虽然是 opus,但是可以派 fable 的卡」.
  • Clause-② at-tier dispatch is the route in this repo — maintainer, 2026-08-22: 「直接入队」. ⚠️ needs:contract-review does not exist as a label in this repo (ensure-pm-labels.sh creates it for objectstack only), so the compensating-label route is unavailable here by construction.

2. Inherited ledger — TWO predecessors, one of which left no record

The seat post is not a reliable account of this lane's last twelve hours, and a successor must not read it as one. Two distinct handover failures stack here:

  1. session_01EuPCi56cnGyykygi3z9w4m wrote this body at 17:57Z describing R33 as just dispatched ([finding] RecordDetailView hand-copies record:activity's sys_activity map, and nothing fails when the two disagree #5878 · record:activity widens on a bad types filter: an unrecognised or empty kind list renders EVERY activity, not none #5841 · warnOnUnknownActionKeys's dev-console message states a fact step 3 retired, and points the author at the wrong file #5642 · [finding] A THIRD hand-written FormViewSchema mirror survives in packages/react's spec bridge, and it has drifted on three keys #5596 just measured #5652 · [finding] PluginComponentInput is a published name with zero consumers, and after #4972 it is a pure alias of ComponentInput #5674) and then went dark. R33 in fact completed: warnOnUnknownActionKeys's dev-console message states a fact step 3 retired, and points the author at the wrong file #5642 closed 18:09Z; [finding] RecordDetailView hand-copies record:activity's sys_activity map, and nothing fails when the two disagree #5878, record:activity widens on a bad types filter: an unrecognised or empty kind list renders EVERY activity, not none #5841, [finding] A THIRD hand-written FormViewSchema mirror survives in packages/react's spec bridge, and it has drifted on three keys #5596 just measured #5652 closed 18:43Z. [finding] PluginComponentInput is a published name with zero consumers, and after #4972 it is a pure alias of ComponentInput #5674 landed its PR refactor(types): deprecate PluginComponentInput in favour of ComponentInput (stage 1 of 2) #5897 and was left open with a stale assignee — see §3.
  2. 68ad4d1a-c111-591c-9633-f2fb64fa1803 then worked this lane from ~19:00Z to 02:51Z — at least fourteen cards closed in that window — and never wrote to this seat post at all. Its work is real and landed (five PRs merged in one queue trip at 02:50:2x–02:50:38Z: Gate authored icon names against lucide's runtime icons record #5932, feat(core,app-shell): read ActionSchema.onSuccess for post-success navigation #5933, test(types): extend the zod-mirror anti-drift guard from BaseSchema to the whole mirror population #5929, docs(blocks): correct block-schema.mdx to the declared vocabulary, drop the phantom slot node #5937, feat(types,mobile)!: retire the MobileOverrides type and its mount point (#4919) #5941).

⚠️ The mutex protocol did not catch this, and the reason is worth carrying. The three prescribed readings (last shift briefing / newest open-round marker / newest non-self Claim: on a pm:dispatched card) all read clear while a session was actively landing PRs. The third reading is blind whenever a session does not use the pm:dispatched label — and 68ad4d1a did not: its cards went pm:queue → closed. A stale seat post plus an unused status label is indistinguishable from a free seat. The reading that actually settled it was the claim comment on the most recently closed card (#4919, 02:09:40Z, naming a third session id). ✅ Add that to the mutex read: the newest closed card in the lane, not only the pm:dispatched ones.

3. Hot-file serial queue

No fences held at takeover. git ls-remote --heads origin 'refs/heads/claude/*' shows zero claude/issue-* branches for any open card in this lane, and the only open claude/issue-* PR in the repo (#5948, claude/issue-4477-playwright-configs-in-tsconfig) belongs to another lane. Nothing was in flight at takeover.

Half-states repaired at takeover — five cards left pm:queue + assigned with their PR already merged. All five had landed work and no remote branch, so each was invisible to candidate queries (which need pm:queue and no assignee) and equally invisible to stale-claim reclaim (which keys off a live claim):

card landed as disposition
#4015 PR #5907 (docblock, Part of) not dispatchable — anchor for the maintainer's Option-C ruling; the enforcement lands upstream at objectstack#11437 / PR #11560. Moved to pm:blocked + Blocked-by:.
#4895 PR #5937 (Part of, deliberate) Option C (retire the block family) left open by the ruling for a PM judgment; assignee cleared.
#5674 PR #5897 (stage 1 of 2) stage 2 is separately carded as #5892 (pm:on-hold); assignee cleared.
#5605 PR #5918 (stage 1 of 2) stage 2 is separately carded as #5919 (pm:on-hold); assignee cleared.
#5632 PR #5858 (one group burned) burn-down card — correctly stays open, a PR closes a slice not the card; assignee cleared so the next group is dispatchable.

4. Landing ledger

NOT CARRIED FORWARD FROM THE PREDECESSOR'S FIGURE. The inherited body claims "Rounds 1–32: 138 cards resolved, 134 PRs merged" as of 17:42Z. That figure cannot be extended across the gap, because the intervening session's ~14 closures are not this seat's in the sense the ledger counts, and the ledger's own documented blind spot 3 says the closed-issue query returns cards closed by any seat. Re-derive from per-round deltas going forward; ⛔ never increment.

The derivation method and its five recorded blind spots are unchanged and still authoritative:

  1. ⛔ Do not count from the merged-PR list (other lanes' PRs merge in the same window).
  2. ⛔ A card this seat took over may not carry domain:ui (Build Docs is red on main: fs reaches the browser bundle via @objectstack/specpg-connection-string #5668 was domain:devx).
  3. ⛔ The query returns cards closed by ANY seat — intersect with what this seat dispatched (four saves: Confirm card is a black box after 确认修改 — no applying/applied/drafted/refused terminal state #5695, Studio 工作台增量三:发布状态单一真相 — B4 横幅/Studio 草稿徽标/聊天内联 Publish 同源 (cloud#1609) #5801, Dashboard table: numeric measure columns sort descending on first click #5845, Dashboard flat table: server-supplied totals row (tfoot) via the cross-tab's marginal-totals machinery #5846).
  4. ⛔ A card can be dispatched in one round and counted in the previous one — count by closed_at in THIS round's window, never by the dispatch list.
  5. ⛔ A card can produce MORE THAN ONE PR (Re-anchor the eight ADR-0057 D10 citations to the framework's ADR-0124 D1 — D10 decides Setup-nav capability surfacing, not enforcement location, and the framework's own ADR says so #5701docs(citations): re-anchor the eight ADR-0057 D10 citations to the framework's ADR-0124 D1 (#5701) #5842 + docs(adr-0036): re-anchor the enforcement-rule citation to the framework's ADR-0124 D1 (#5701) [GOVERNED SURFACE — human merge] #5843), so "PRs = cards − no-PR cards" is false.

R34 onward is counted fresh from this takeover.

5. Notes

6. Awaiting the maintainer

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