Skip to content

Handover for the next domain:ui execution-seat PM — what will burn you, what I got wrong, and what is waiting #7233

Description

@os-warren

Written at the end of a domain:ui dispatch shift (session session_012wwHa4aaFybxXrfmfHioDM, 2026-09-01). Successor to objectui#7089, whose §6 is still the most useful paragraph written about this seat.

⚠️ This card is labelled documentation + domain:ui + pm:queue + priority:p1 on purpose, and linked from the seat post #5560. objectui#7089 carried domain:ui and nothing else — no pm:*, no priority:* — so no query a successor runs returned it. I found it by accident, five hours into my shift, in a sweep I was running for an unrelated reason, and by then I had independently re-derived its central lesson four times. That was the single most expensive thing that happened today. If you write a handover, label it.

Ordered by what will cost you, not by topic.


1. ⭐ The one thing to carry forward: put YOUR OWN readings in the premise-verification gate

objectui#7089 §6 says it, and I proved it six more times. Six PM premises of mine were falsified by the lanes I dispatched, every one caught because the dispatch order told the dev to verify the PM's claims, not just the card's:

my premise what it was
the grid builds $select at one site two, and each fails alone — a one-site fix ships with a green suite and a broken surface
description was the only read-but-unrelayed key three of 46 relayed keys; fieldOrder and rowColor too
the grid's paging footer discloses page-scoping it belongs to plugin-list; a standalone grouped grid renders no footer at all
a gantt issues two requests per load three — one paged, two unbounded
ZONE 1 RULING: raise the Start/End threshold, the dates survive as a sublabel the sublabel is display:none above 640px — the "fix" would have deleted the dates
ZONE 1 RULING: gate the column list feeding buildExpandFields gating the input widens the leak, because the helper reads an empty list as "no restriction"; the gate belongs on the output

Two of those were rulings, not mechanism notes. Both were withdrawn on measurement. Write your orders so a lane can overturn you, and say explicitly that a clean stop on a falsified premise is a full success — one lane returned with no PR and no code, and it was the most valuable result of its round.

And the worst one: I filed objectui#7225 asking for work a standing maintainer ruling on #6482 already forbids. I had read #6482's body and not its comments. My stated reason for filing new rather than reopening ("a five-week-old snapshot") was also false — it was six days old. ⇒ Read the comments. Every time. #7089 §1 says the same thing and I still did not do it.


2. Probe discipline — I produced FOUR false zeros in one shift

A probe can fail in two directions and I hit both:

Cannot match anything (reads as "clean"):

  • wrong path, twice — ObjectStackAdapter.ts does not exist (the class lives in index.ts); a script run from outside the repo
  • in ERE, (a|b) consumes group 1, so a \1 backreference meant for a later group silently matches nothing and exits 0

Matches BOTH sides (reads as "landed" — the harmful direction):

Before trusting any landing probe, verify it is 0 on main AND non-zero on the branch. Derive it from the diff; never guess a symbol name. Two names I guessed (periodStartFor, labelPeriodFor) return 0 on both sides — they do not exist, and either would have been a permanent false negative.

Also standing: git grep -c counts LINES, not entries — use grep -o … | wc -l. And probe for the REPLACEMENT's presence, not the removed token's absence: house style states what was wrong before stating what is right, so a removed phrase is systematically still present in the very file that removed it. When the file's own prose quotes the old form, count whole lines.


3. Environment traps, all measured today

  • happy-dom / jsdom report clientWidth 0 and therefore NEVER fire container-size effects. A gantt's auto-scroll-to-Today is its whole first-paint reproduction and is unmeasurable in the DOM harness — not unreliable, unmeasurable. They also apply CSS @media rules regardless of innerWidth, so getComputedStyle returns the same value at 500 and 1440. One lane would have concluded "this element is never visible" from that. Use the preinstalled Chromium at /opt/pw-browsers; ⛔ never run playwright install.
  • enable_pr_auto_merge echoes method: MERGE even when SQUASH is requested and correctly applied. Seven times today. Ignore the echo; verify by parent count after landing (1 parent = squash).
  • The angle-bracket sanitizer eats issue and PR BODIES — a < followed by a letter is stripped, and if unclosed it takes everything to the end of the body. Backticks do NOT protect it. Comments are safe. Six bodies lost evidence to it today, including two cards' own JSX snippets. Read your posted body back as rendered.
  • The closing-keyword parser ignores negation. There is no safe way to write "does not close #N" — omit the number.
  • API rate limit hit three times, recovering in a few minutes each. Git reads cost zero quota — queue state, main, PR diffs and file contents are all readable. ⛔ /rate_limit reporting quota remaining is not evidence the channel is open; a lane proved that while its search was still refusing.
  • Merge queue: confirm enqueue by git ls-remote origin 'refs/heads/gh-readonly-queue/main/pr-NNNN-*'positives only, ref-absent proves nothing. Judge landing by git merge-base --is-ancestor QUEUE_BUILD_SHA origin/main, never a branch head.
  • Pre-check conflicts against what main is ABOUT to become, not only what it is. I caught fix(app-shell,plugin-list): relay and resolve a list view's own description #7220 conflicting with fix(grid,list,core): union a grid's grouping fields into the query projection #7214's queue build before the queue did, and disarmed it — an ejection rebuilds every entry and taxes whoever else is waiting. main moved seven times in three hours today.

4. Landed this shift

PR card note
#7213 #6943 a red gate on main (check:published-dist), found in the unlabelled sweep
#7214 #7179 grid $select blind to grouping.fields[] — both sites
#7223 #7210 gantt paging footer — halves 1 and 3 only
#7220 #7199 per-view description relay + i18n locale map
#7226 #7189 grouped-grid partial disclosure — disclosure half only
#7227 #7203 gantt toolbar period label + steppers
#7229 #7215 $expand FLS gate — in the queue as this was written

⚠️ #7229 found that objectui#6898 was believed closed and had a LIVE BYPASS: the $select projection gated its columns and then re-added the expand roots unconditionally, justified in-comment as "known-valid because buildExpandFields() derived them from the object schema" — valid, yes; readable, never asked. A denied lookup walked straight back in. If you audit FLS, do not trust #6898 as settled history.


5. Open on purpose — do NOT close these as done

6. Queued and ready, rulings already recorded in their triage comments

#7173 · #7096 · #7216 · #7218 · #7217 · #7230 · #7231 · #7232

Each has a triage comment with the disposition already argued, so dispatch is short.


7. The unlabelled pool — measure it, do not estimate it

55 of 307 open issues carry no labels, measured repo-wide with a count cross-check (100 + 100 + 100 + 7 = 307, final page hasNextPage: false) and controls in both directions. All 55 are numbered ≥ #6790 — pages 3 and 4, 107 issues over five weeks, are 100% triaged.

⇒ This is filing outrunning triage right now, not chronic debt. Do not plan a burn-down; the failure is that a card can be filed into a state no sweep returns.

I worked ~19. ~36 remain unread. ⛔ Never grade from titles — that shortcut is what #6318 cost a lane.

That pool has already yielded: a red gate on main (#6943), this seat's own handover (#7089), an ordering constraint on a ruled retirement (#7181), and a second build-ready tier-blocked card (#7188). It is the highest-yield thing to do with spare capacity.


8. Two rulings of mine you may want to overturn

① Split a card when one half is invariant to the open question. #7210's footer fix shipped while its unbounded-fetch decision stayed open, because "whichever way it is settled, the footer and the chart should describe the same fetch." Same for #7189. This got work moving without pre-empting a maintainer — but it does leave cards open with a landed PR attached, which reads oddly in a sweep. Make sure the landing note says loudly what is still open.

② File a narrow card rather than reopening a stale one. I did this for #6482#7225 and it was wrong (§1). The reopen-vs-file test I would use now: reopen when the original card's asks are undischarged; file new when the tree has moved past its description. I applied the second test without checking whether the first applied.


9. Seat mechanics worth keeping

  • A claim is assign PLUS a claim comment carrying session ID and branch — all agents share one GitHub identity, so the assignee field alone proves nothing. Re-read comments before writing code.
  • Dispatch orders in three zones: ZONE 1 ruling (not re-adjudicable) · ZONE 2 the PM's own assumptions, falsify freely · ZONE 3 suggested route. The zone-2 block is where every one of §1's six corrections came from.
  • File-overlap is a real scheduling constraint. Three queued cards were held today not on priority but because they touch a file a running lane was editing.
  • Landing verification is by CONTENT with a live control, never by sha (squash makes a new commit). The control is what catches a probe that would pass against a deleted feature.

Good luck. The lanes on this repo are very good — four of them corrected me today, and every correction improved the result. Write your orders so they can.

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

    documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seattracking

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions