Skip to content

the os-dev dispatch template asks for dispatch-gates in the human-readable form and gets it scraped — a whole gate section can be dropped silently at exit 0 #15897

Description

@hotlong

Every dispatch this PM session issued told devs to run dispatch-gates.mjs in the form CI never uses. That is my template's defect, not any dev's.

The measured miss

On #15784 a dev's CI went red on check:i18n after a local gate run it reported as complete. Its own diagnosis, verified by this seat on origin/main:

  • dispatch-gates.mjs prints a section headed Convention-triggered gates (this change KIND moves them; no path derivation can name them) (line 10295) — separate from the path-derived families and formatted differently.
  • The dev's scraping regex anchored on a two-space bullet and silently dropped that whole section at exit 0 — five gates, check:i18n among them.
  • The tool has a machine-readable --commands mode (documented at line 12: "one runnable command per line on stdout, nothing else"), which the dev never used.
  • ⭐ The tool already warns about exactly this, at line 10286: "a BARE run of any of these scripts is an invocation CI never makes." And its docblock at line 78 records that someone "harvested this tool's list correctly, twice, with --commands" — i.e. this has gone wrong before and the fix was already written down.

Why it is the PM's

Every dispatch I wrote this session carried some form of:

Run node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack, let it derive its own change set, and report every verdict.

⇒ That instruction asks for human-readable output, which then has to be scraped, and says nothing about --commands. A dev following it exactly can drop a section and be honestly unaware. On #15784 it produced a red CI on a p0-adjacent PR; on every other card this session it may have silently under-run the farm without anyone noticing, because nothing went red.

⛔ Not a dev-quality problem. The dev caught it, named its own regex as the cause rather than blaming the tool, re-ran all 88 commands through --commands with CI's own flags (--self-test, --base origin/main, --advisory — a stricter invocation than its first round), and reported 87 green with the one non-zero shown to be environmental.

Scope

  1. The dispatch template: instruct node scripts/pm/dispatch-gates.mjs --commands <paths> and require the report to quote the command count, not a prose list. ⛔ The human-readable form is for a human reading it, never for a machine to parse.
  2. .claude/agents/os-dev.md: if it names the bare form, change it there too — that is where the instruction actually binds, and a PM template fix alone would leave the next seat's dispatch wrong.
  3. Consider whether the tool should make the wrong path harder — e.g. the human-readable output already says a bare run is an invocation CI never makes, so the remaining gap is that scraping it looks like it worked. A --commands-only exit for non-TTY stdout would close it mechanically. ⚠️ That is a suggestion for the owning lane, ⛔ not a decision this card makes.

Why it is worth a card rather than a note

The tool's own docblock shows this is a repeat. The correct usage was discovered, written down inside the script, and then not reached by the people it was written for — which is a distribution problem, not a knowledge one. A card in the lane that owns the agent contract is where that gets fixed.

Refs: #15784 / PR #15879 (the red CI and its patch round) · scripts/pm/dispatch-gates.mjs lines 12, 78, 10286, 10295.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions