ship-roadmap — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ship-roadmap (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Run the entire agentic workflow unattended between human decision points: one interactive founding turn that asks everything, then a /loop-driven build loop that plans, implements, reviews, opens and (optionally) merges one PR per feature until the roadmap is done — ending in a final report that recommends issues, newly discovered features, and the product-audit cadence.
This is the expensive skill: a full run burns planning, implementation and review tokens for every roadmap feature. It exists to spend them well — strong tiers only where judgment lives, cheap tiers where code gets typed, humans only where a wrong call is expensive to undo.
Ultracode tip: for large roadmaps, the user can enable theultracodesession setting (/effort ultracode) before starting the loop — the conductor then fans out independent sub-work (review axes, report evidence gathering) more aggressively. It is a session toggle only the user can set; this skill cannot declare or enable it (effort:accepts only low/medium/high/xhigh/max).
head — and want the whole application built with supervision only at merge points and at the end.
plan-feature → execute-phase), one bug(plan-fix), or exploratory work. The autopilot ships a locked scope; it is the wrong tool when the scope is still being discovered.
Read before acting: the agent guide (CLAUDE.md/AGENTS.md) and its Workflow conventions (forge CLI, verification gate, docs language), the documentation map, docs/features/ROADMAP.md, the fix index, the architecture doc, and .github/ templates. Then establish run context:
roadmap + fix index → founding is skipped and interview rounds 3–4 collapse to confirmations of what the docs already state. Missing pieces → founding will create them.
plan-feature, execute-phase,review-change, and audit-pr are actually available in this environment (e.g. listed by the skills CLI or present under the skills directory), and record the discovered skills-directory path in the decision record — subagent prompts reference it. Missing → stop and instruct: npx skills add gtrabanco/agentic-workflow. Without these files the loop silently degrades.
docs/features/SHIP_DECISIONS.md exists — on anybranch — or a docs/ship-founding PR is open → a run exists: --continue resumes it; a bare /ship-roadmap prints run status and the resume command instead of re-interviewing (never a second founding).
tree (an unexplained dirty default branch is a stop condition, never something to clean up silently).
/ship-roadmap [--fullauto]1. The interview — all questions up front, then silence. Small batched rounds; recommended defaults on every question; skip what discovery already answered. After Round 6 locks, no further questions for the entire run — every later decision is made silently and logged with a one-line rationale.
| Round | Covers |
|---|---|
| 1 — Product | What it is, for whom; scale ceiling (solo / team / thousands of customers); lifespan & ambition (throwaway, internal, long-lived production). Calibrates every ceremony decision downstream. |
| 2 — Features | The feature list (or "elicit" → draft one from the goal); must-have vs can-wait; ordering constraints; explicit out-of-scope. |
| 3 — Stack & architecture | Stack decided? else recommend from features/constraints. Architecture chosen? else recommend the lightest structure proportional to Round 1 — a solo tool gets a flat modular layout, a thousands-of-customers system gets enforced boundaries; never default to DDD, hexagonal, or any named pattern. Platform/runtime constraints, library vetoes. |
| 4 — Quality & ops | Test depth (smoke / workflow default / strict); whether a11y, SEO, i18n, perf budgets apply (proposed from platform type); deploy target + scaffold CI?; secrets posture; confirm the proposed verification gate commands — they become the gate every phase must pass. |
| 5 — Workflow & autonomy | Docs language (default English); forge + CLI (verify with a real authenticated call now, e.g. gh auth status — not mid-loop); merge policy (default human-merge vs --fullauto); the sensitive-area list (defaults: auth, payments, destructive migrations/data deletion, secrets, CI config — seeded with every integration named in rounds 2–4, e.g. the payment processor or auth provider the user mentioned); budget caps (default: max iterations = 4× roadmap feature count; 2 retries per red gate; 2 review-fix and 2 audit-fix cycles; optional "pause after N shipped features" checkpoint and milestone stop lines); model-routing confirmation; recommend enabling ultracode for the loop. |
| 6 — Confirm & launch | The drafted roadmap (numbers, order, deps, sizes) and the full decision record, presented for one last edit. Then: founding artifacts written, exact /loop command printed. |
2. Founding (only what's missing). Compose init-workspace's process in-turn (both opus/high — within the ≥ rule), pre-fed with the interview answers so it asks nothing. Branch discipline:
ROADMAP.md, decision record) is the repo's initial commit on the default branch — there is no history to protect and no base for a PR yet.
docs/ship-founding branch as a PR.Default mode: stop after the interview — print the PR and require it merged before the loop starts (building features against an unmerged substrate would stack PRs). --fullauto: gate the founding PR with audit-pr like every other PR, then merge it.
3. The roadmap. Adopt existing entries (never renumber), fill gaps the interview surfaced, append elicited features. If absent, write the complete table: NN in dependency-respecting order, slug, status: planned, depends-on, one-line summary with a provisional XS/S/M/L size in the summary text (the template's 3-status legend and column schema stay exactly as they are — plan-feature re-sizes authoritatively at planning time; a size change is logged silently). Greenfield: feature 01 is always the project skeleton (stack init, gate wiring, CI if requested), sized S — and every other feature's depends-on closure must include 01 (directly or transitively), so SELECT can never start a feature on a default branch that lacks the skeleton.
4. The run state — two artifacts, deliberately split:
docs/features/SHIP_DECISIONS.md — committed (rides the foundingcommit/PR): run mode, safety floors, sensitive-area list, budget caps, stop lines, model routing, docs language, and a digest of every locked interview answer. It is the durable, auditable policy: a crash, another machine, or a fresh clone recovers the full run policy without re-interviewing.
docs/features/.ship-run.log — untracked (founding appends it to.gitignore): the append-only iteration log — one line per iteration (date | NN-slug | stage | outcome | evidence: SHA / PR# / verdict), silent decisions with rationale, partial-stage markers, verdict↔SHA bindings. Machine-local mechanics; committing it would conflict across every open PR.
5. Print the launch contract, mode-dependent — default:
Founded. Start the autopilot with:
/loop /ship-roadmap --continue
Stop when an iteration's first line is SHIP: COMPLETE, SHIP: BLOCKED, or
SHIP: STOPPED. You can also stop the loop manually at any time; iterations
are idempotent and resume cleanly.For a fullauto run the command is /loop /ship-roadmap --continue --fullauto — the flag must ride every iteration, because auto-merge is dual-keyed: the flag on the running command and merge: fullauto in the committed decision record (see Merge policy). One key without the other runs in default mode.
Each /loop firing is a fresh /ship-roadmap --continue turn at this skill's own opus/high (a looped slash command runs at the skill's frontmatter tier on every iteration). Iterations after a terminal banner are cheap no-ops that re-print the same banner — so a missed stop costs tokens, never correctness.
/ship-roadmap --continue [--fullauto]Every iteration is stateless-by-reconstruction — no memory is assumed between turns:
SHIP_DECISIONS.md (missing → `SHIP: STOPPED — no runpolicy; run /ship-roadmap first) and .ship-run.log (missing on this machine → recreate empty; policy lives in the committed record). **Verify the substrate landed:** SHIP_DECISIONS.md must exist on the default branch — an open docs/ship-founding PR means the substrate isn't merged yet → SHIP: BLOCKED with "merge the founding PR" as the unblock map. Read ROADMAP.md; query the forge for open/merged PRs on feat/`, `fix/, docs/ship-founding and docs/ship-report heads; check git state. Reconcile: a feature flips to done when its **PR opens** (built, not merged — see the PR stage), so a done row with an open PR is awaiting a human merge (default mode), not finished shipping. A **merged** PR needs no status change (already done) — it means *shipped*, and **unblocks its dependents** + counts toward SHIP: COMPLETE. The done-flip rides the PR-bound commit, never a lone commit on the default branch. A dirty feature branch from a crashed phase is handed to the next phase subagent to finish or restart (counts against the red-gate retry cap). Uncommitted changes on the default branch confined to docs/features/<NN-slug>/` + ROADMAP.md that match an in-flight roadmap row are the loop's own planning output — resume that feature; the dirty-default stop fires only for changes matching no roadmap unit.
refresh the final report, open the report PR, print the SHIP: banner + status table, end the turn.
next planned feature whose depends-on rows are all merged (forge state, not merely done — a done dep with an open PR isn't on the default branch yet, so a dependent cut from it would lack its code) → PLAN; else nothing startable → SHIP: BLOCKED with the unblock map ("merging #12 unblocks 05 and 07") and the resume command.
plan-feature in-turn via its scoped path (equaltier). The interview path is forbidden mid-run: SPEC gaps are resolved silently from the decision record and logged. JIT planning that reveals the feature's premise is wrong (obsolete, absorbed, impossible on this stack) → mark it blocked with the contradiction recorded; never re-ask.
(execute-phase's native tier; the override is the only mechanism that runs below the conductor's turn tier). Each subagent is instructed to read the installed `execute-phase` SKILL.md first (at the skills directory located in Step 0 and recorded in the decision record — e.g. .claude/skills/execute-phase/SKILL.md in Claude Code) and follow it for exactly one phase (or the single-pass mode for XS/S): tests-first where it applies, gate green, one commit, per-phase docs. Two autopilot overrides to its recipe: (a) never ask — SPEC ambiguity is resolved from the committed decision record with the most conservative reading, and the assumption is surfaced in the phase docs so the conductor logs it; (b) the P1 planning commit also carries `ROADMAP.md` (the feature's in-progress flip rides it; the `done` flip rides the PR-stage commit when the PR opens — for XS/S single-pass features the in-progress→done flips ride the single implementation/PR commit; any flips left at run end ride the report commit). Never bundle phases into one subagent.
review-change in-turn (equal tier), withrisk-proportional cadence: XS/S and non-sensitive M features get ONE review at branch end (matching execute-phase's documented batch pattern); L or sensitive-flagged features get a checkpoint every 2 phases. Persist the review report into the feature's docs folder. fix-now findings → one sonnet fixer subagent + gate + commit (max 2 review-fix cycles); every non-fix-now finding is triaged (review-change composes triage-issue) → tracked forge issue / documented decision, never inlined.
this PR-bound commit), then push and pr create against the default branch with the PR template and Closes #N where issue-born (forge CLI per Workflow conventions). The PR always opens — a unit never ends branch-only.
audit-pr in-turn (equal tier); bind the verdict tothe PR's head SHA in the run log. MERGE-READY → default mode logs and moves on; --fullauto checks the floors, records the merge intent in the run log first, then merges. BLOCKED → in-scope blockers go to a sonnet subagent next iteration (max 2 audit cycles, then the feature is parked and the loop moves on).
The stage sequence is per-feature and size-dependent — always one stage per iteration: XS/S/M → PLAN → EXECUTE (all phases / single pass) → REVIEW → PR → AUDIT; L or sensitive-flagged → PLAN → EXECUTE (≤2 phases) → REVIEW → EXECUTE (next ≤2) → REVIEW → … → PR → AUDIT.
.ship-run.log; print CONTINUE — next: <unit> as thelast line.
Capacity guard: an iteration that cannot finish its stage in one turn (e.g. an oversized review) writes a partial-stage marker and ends cleanly; three consecutive partials on the same stage parks the feature as blocked.
| Stage | Tier | Mechanism |
|---|---|---|
| Interview, founding, roadmap creation | opus/high | this skill's frontmatter; composes init-workspace (equal tier), answers pre-fed |
| Recovery, routing, logging | opus/high | in-turn (tiny token volume; a subagent would add cost, not save it) |
| JIT feature planning | opus/high | compose plan-feature in-turn (its internals are opus/high–medium: ≥ holds) |
| Phase execution, single-pass, fixes | sonnet | subagent per phase with explicit model: sonnet override, following execute-phase's SKILL.md |
| Review checkpoints | opus/high | compose review-change in-turn (equal tier — orchestrators compose what they synthesize) |
| Merge gate | opus/high | compose audit-pr in-turn (the highest-stakes automated verdict; must share one turn with the floor checks) |
| Forge/git mechanics | — | Bash tool calls; no model judgment involved |
| Final-report evidence gathering | haiku (optional) | fan-out subagents for grep-shaped per-feature log collection when ultracode is on; synthesis stays opus |
product-audit | opus/max | never composed, never imitated by a subagent — its effort (max) exceeds the conductor's (high) and a subagent override cannot carry effort: max. Hand-off only: the report prescribes when to run it. |
Default — the human merges. The autopilot opens PRs and never merges. It continues with the next feature whose dependencies are all merged (new branches always cut from the freshly pulled default branch); when everything remaining waits on human merges, it stops with SHIP: BLOCKED + the unblock map. After merging, re-run the same launch command (/loop /ship-roadmap --continue, plus --fullauto on fullauto runs) — recovery records the merges (the rows are already done from PR-open), unblocks the dependents, and resumes.
`--fullauto` — dual-keyed. Auto-merge requires both the --fullauto flag on the running command and merge: fullauto in the committed decision record — a stray flag or a stale record alone can never enable it. The first feature PR of a greenfield run is always human-merged (calibration: inspect one complete artifact — code, tests, docs, review trail — before delegating). Non-negotiable floors, evaluated fresh immediately before every merge — fail-closed: a floor that cannot be evaluated counts as breached:
the audit verdict is evidence, fresh green CI is the precondition. In a no-CI project the accepted evidence is a fresh local verification-gate run on the PR's exact head SHA, recorded in the run log — without one of the two, the floor is unevaluable and therefore breached.
SHA; any later commit forces a re-audit.
never auto-merged; the run continues around them and the report flags them.
diffs pause even when not in the declared set (users forget to declare it).
force-push, never merge to anything but the default branch; a refused merge parks the PR and is reported.
--fullauto.| Banner | Fires when |
|---|---|
SHIP: COMPLETE | Every roadmap feature is done and its PR merged (default mode: the human merged them all; --fullauto: merged under the floors) — done alone is not enough, since it only means built + PR open. Report written, report PR open. |
SHIP: BLOCKED | Everything remaining is done-but-pr-open awaiting human merges, or planned with unmerged deps (default mode); or a parked feature transitively blocks the rest. Always includes the unblock map. |
SHIP: STOPPED | Budget/iteration cap; a Round-5 milestone stop line; substrate invariant broken (gate unrunnable, roadmap unparseable, unexplained dirty default branch, decision record missing); forge unavailable (no stage that depends on PR state may proceed on guesses). |
| (feature parked, run continues) | Repeated red gate (retry cap), review ping-pong (2 cycles), audit ping-pong (2 cycles), capacity guard (3 partials), planning contradiction. |
| Systemic drift stop | review-change flags SPEC drift on two consecutive features → the locked founding assumptions are probably stale; the whole run stops rather than auto-merging a compounding error. |
Written by the terminal iteration to docs/features/SHIP_REPORT_<date>.md on a docs/ship-report branch as a docs-only PR (default: human merges; --fullauto: audit-gated like any PR), and printed in full under the banner:
(merged / done-awaiting-merge / parked / not started).
review findings folded vs postponed, audit verdict + SHA, PR + final state, merged by human or autopilot.
and the trigger that should reopen it (feeds triage-issue's verification model); suggested next command: one batch /triage-issue.
serve the product goal (Round 1 quoted as the yardstick), each sized with a suggested roadmap slot. Recommend-only.
--fullauto merges deserving a secondlook, parked features and why, silent decisions with outsized consequences.
checkpoint's manual checks plus audit notes: what no gate proved.
product-audit cadence for this project(first one now if ≥2–3 features merged; then ~every 5 or pre-release), and the suggested command sequence to continue.
Closing line, verbatim policy: this report recommends; the human decides.
is the single exception. One PR per unit, never stacked; roadmap status flips ride PR-bound commits only.
unconditional — no flag, mode, or interview answer disables them.
through sonnet execute-phase subagents, one phase per subagent — that keeps the cost model honest and execute-phase the single implementation pathway.
implementation goes below the turn tier via explicit subagent model overrides; product-audit is never run by this skill. ultracode is a user-owned session setting — recommended, never claimed.
record and logged; contradictions park the feature with the evidence recorded. Re-interviewing mid-run is forbidden — the recovery from a wrong founding call is a reported stop and a human-restarted run.
issues or report proposals — never in-run side quests.
interview language; recommendations proportional to the interviewed scale, recorded in the project's own docs so every sub-skill discovers them through its normal Step 0.
Known limits (stated, not hidden): subagent overrides pin the model but not the effort, so execution subagents inherit the session's effort — cost can drift if the session runs high. /loop's stop-on-banner matching should be treated as a convenience, not a guarantee — iterations after a terminal banner are idempotent no-ops, and the loop can always be stopped manually. Budget caps count iterations, not tokens — and the count lives in the machine-local log, so it bounds each machine's run, not the run's lifetime across machines. Verdicts persist in the run log and feature docs, but a crash between a review and its PR may re-run one review — accepted cost, never a correctness risk.
init-workspace (founding, answerspre-fed), plan-feature (JIT planning, scoped path), review-change (checkpoints), audit-pr (merge gate), audit-docs (docs-only founding / report PR coherence).
execute-phase discipline — phases,XS/S single passes, fix-now folding, audit-blocker fixes.
product-auditalways (its effort max exceeds the conductor's high — composing it would under-power it, the exact regression the ≥ rule exists to prevent); triage-issue for the report's issue batch.
plan-feature → execute-phase → review-change →audit-pr, feature by feature) remains the default way of working — ship-roadmap is the same flow with the human moved to its edges.
open; the roadmap's statuses are true; every PR is merged, open-and-audited, or parked with its reason recorded.
SHIP_DECISIONS.md, iteration evidence in the run log, outcomes and recommendations in the report.
proposals, product-audit timing — without reading anything but the report.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.