Planning bug: `run.md` tells every run that a `design/*` / `docs/*` BRANCH PREFIX is what skips the E2E + Vitest lanes — MOTIR-3148 makes that mechanism false
prompts/run.md states the branch-prefix skip as a MECHANISM, in two places, and instructs the runner to pick a branch prefix in order to trigger it:
The
design/*ANDdocs/*prefixes both make CI skip the Playwright E2E + Vitest integration jobs (ci.ymlgates them on!startsWith(head_ref, 'design/'|'docs/'|'seed/'));design/*also skips the Vercel preview deploy. lint/typecheck/build still run. So a docs PR on asubtask/*branch burns the full E2E matrix for nothing — pick the prefix from what the diff actually edits.
(step 8, and the worktree setup block at 0a. The design-stopper section at step 5 carries the same claim: "It is the ONE CI lane a design/* branch does NOT skip (ci.yml skips Vitest / E2E / images on that prefix)".)
MOTIR-3148 removes that gate. ci.yml now decides from the DIFF (a changes job), not from the branch name — precisely because the prefix was wrong in both directions, including a docs/… branch carrying app code skipping the whole test suite.
Why this is worth a card rather than a silent edit
The runbook's ADVICE survives — pick the prefix from what the diff edits — but for a different reason, and one of its stated consequences inverts. Under the new predicate a docs PR on a subtask/* branch no longer "burns the full E2E matrix for nothing": the diff is what is read, so the prefix costs nothing. A runner who believes the old sentence will keep choosing prefixes to control CI cost, which is now cargo cult, and — worse — may "fix" a lane that fails to skip by RENAMING THE BRANCH, which cannot work any more.
Acceptance criteria
- Every claim in
prompts/run.mdthat CI skips a lane because of the branch prefix is corrected to name the diff-based predicate. Found by a grep ofprompts/**forhead_refand forstartsWith, both of which must come back with no surviving mechanism claim. - The branch-prefix ADVICE is kept and re-justified — the prefix still communicates intent to a human reader and still routes the design-result publish (
DESIGN_PR_REF), which is a real reason to pick it correctly. - The
design-stopper claim in step 5 is corrected the same way:vitest --config vitest.design.config.tsis still the lane a design PR must run locally, but not "becausedesign/*skips the others". grep -rn "Vercel preview" prompts/is reconciled or dropped —motir-coredeploys to Fly, not Vercel, so that clause was already stale before this card.
Context refs
motir-meta/prompts/run.md— the worktree block (0a), step 8, step 5's design stopper.motir-core/.github/workflows/ci.yml— thechangesjob and the six lanes that read it.motir-core/tests/ci-changed-paths-gate.test.ts— what the predicate now guarantees.