Skip to content

finding(pm-dispatch): shift-end findings from spec@objectui 2026-09-05 — one principle gap, two mechanisable items, six platform facts #15803

Description

@os-sam

Filed by the domain:spec @ objectui execution seat at sign-off (session session_0114Ytxr5sM1vdW19Y9WAx6E, seated 2026-09-05T01:47Z, signed off 08:35Z on the maintainer's instruction to switch accounts). Per the shift-end discipline: three categories only — principle gaps, mechanisable items, platform-fact changes. Anything outside those three is deliberately not filed.

Routed to the domain:skills seat for grading. ⛔ Unassigned, unlabelled beyond finding.


A · Principle gap (→ skills seat, a topic for the maintainer)

Batch independence is judged per PACKAGE, and in a single-package lane that silently caps throughput at 1–2 regardless of batch:.

Measured on domain:spec @ objectui: ~23 queued cards, essentially all landing in packages/types. Under the per-package rule they serialise. But they are spread across at least 7 mutually disjoint files (feedback.ts, data-display.ts, overlay.ts, objectql.ts, base.ts, crud.ts, zod/base.zod.ts), so the collision is a property of the rule's granularity, not of the codebase.

The skill already contains the machinery for the finer grain — the maintainer-exemption clause with its four replacement disciplines (region-level file-surface declaration, merge main before opening, merge again after a sibling lands, conflicts arbitrated by the merge queue with ⛔ no manual PM ordering). What is missing is any statement of when that exemption is the right default rather than an exception.

⚠️ Two things this seat measured that bear on the question, offered as input and ⛔ not as a recommendation:

  • Family dispatch is the cheaper lever and needs no ruling. Sorting the same queue by defect shape rather than subsystem yielded 4 families covering 14 of the 23 cards. That converts ~14 serialised dispatches into ~4 — without touching the independence rule at all.
  • Folding does NOT reduce the model tier. In a contract lane, most cards are Clause-② by nature (adding a mirror or a union arm narrows a published validator's accept set). This seat initially under-estimated that.

Concrete evidence for the file-grain case: objectui#6751 was blocked purely by the package rule while sharing no file with the in-flight work.

B · Mechanisable (→ gates/scripts, ⛔ not prose)

  1. A card auto-closed by a merged Fixes PR keeps its pm:* state label. Reproduced three times this shift (objectui#7112, finding: os test with a ** glob OOMs — resolveGlob readdir-recurses the whole tree including node_modules #7363, refactor(core,plugin-audit,service-storage,plugin-reports): give the __ operation-private-key convention a single owner (#7284) #7352), each stripped by hand at the MERGED reading. The seat post has carried this as a remembered fact since at least 2026-09-02 — a rule that has to be remembered on every landing is the definition of a check-half-states case. It is already report-only-detectable: closed + carrying pm:dispatched is a pure query.

  2. check_suite.completed fires against stale SHAs. This shift received a suite-completion event naming head dfec57b5e when the PR's actual head was e46a218c9. Acting on it would have flipped a Clause-② PR ready on evidence from a commit no longer on the branch. The protocol's "read the full farm by name, then arm" corrective already prevents the bad outcome, but it currently reads as being about aggregate vs by-name; this is a distinct failure — right method, wrong commit. Worth one clause: re-read the head before trusting any suite event.

C · Platform facts (→ references/platform-readings.md, one line each)

  1. check_suite.completed can name a stale head — see B2.
  2. A CI job's failing STEP need not match its NAME. objectui's Type Check job went red on node scripts/check-spec-symbol-derivation.mjs, not on tsc. Inferring the cause from the job name misdiagnoses.
  3. GitHub Actions log retention truncates to post-job cleanup. Two failed jobs were pulled this shift (Bundle Analysis, README Export Check); both returned only cleanup output with the compile errors already aged out. ⇒ "the build failed" is a machine reading; the cause is not assertable from that log.
  4. MCP search_issues is phrasing-sensitive, so a zero is not a reading. A control query built from a card's own verbatim title returned total_count 0; a natural-language query on the same subject returned 14 including that card. This bit two agents this shift — the dev correctly refused to file against a blind channel and handed its findings back to the PM.
  5. check-governed-merges.mjs refuses rather than under-reporting on a shallow clone or stale mirror, stating that a short list reads as compliance. Its git fetch --shallow-since= remedy works. ⚠️ It also reports how many governed repos went unaudited — 4 of 5 this shift, so that window was not a clean sweep.
  6. objectstack's dispatch-gates.mjs does not answer for objectui and says so, returning "no path-derived mandate" plus the standing rule that Clause-② is judged from card CONTENT, never from paths. ⇒ In that lane the tier and Clause-② determination are always human judgement; there is no machine backing to cite.

Not filed, deliberately: the narrative of what this shift dispatched and landed (that is the seat post's job, objectui#5734), and one repo-local quirk already recorded there (skip-changeset is a phantom label in objectui, pinned by scripts/__tests__/ci-cd-pipeline-doc.test.ts:235) — repo-local, not a platform fact.

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions