Dispatch
npx @hansenexus/nextup dispatch p1-garage-loop # dry run: prints the plannpx @hansenexus/nextup dispatch p1-garage-loop --apply # creates the issuesDry run is the default. --apply creates one issue per task, in dependency
order, and nothing else: nextup never edits an existing issue, never removes
a label, never writes into roadmap.yaml.
What an issue looks like
Section titled “What an issue looks like”Title [<item-id>] <task title>. Body:
## Description…task.description…
## Acceptance Criteria- [ ] Three archetypes appear with pay, deadline and difficulty
## Verification commands- `dotnet test Tests/SimCore.Tests --filter JobBoard`
## DependenciesBlocked-by: #42
Roadmap-item: roadmap.yaml#p1-garage-loopRoadmap-task: roadmap.yaml#p1-garage-loop/job-boardThe two marker lines are the link back. status finds an item’s issues by
them (plus the issues: you link by hand), and an issue whose marker points
at no item shows up as an orphan.
Labels
Section titled “Labels”roadmap— the one label nextup creates if missing. Everything else must already exist in the repo (readyin particular; exit4says so).ready— only on tasks whose blockers are all closed. The rest wait for the frontier to reach them; re-running dispatch later putsreadyon nothing either, because it never edits — close the blocker and the daemon that watchesreadyis your business, or link the follow-up by hand.task.labels— copied as given.fleet-<env>— from--env, elsetask.fleet_env, elsemeta.fleet_env.interactive— when the task says so.auto-merge-ok— only with--auto-merge.
Preconditions (exit 4)
Section titled “Preconditions (exit 4)”- the item is
dropped - the item has no tasks
- a task lacks
acceptanceorverify depends_onnames an item that is not done (--force-frontieroverrides)- the repo lacks a label the plan needs
Idempotent
Section titled “Idempotent”Before creating anything, dispatch lists the repo’s roadmap-labelled issues
and reads their Roadmap-task: markers. Tasks that already have an issue are
skipped; running it twice creates nothing the second time.
Blocked-by
Section titled “Blocked-by”Blocked-by: #N lines follow the convention lane daemons already parse
(^[ \t>*-]*blocked[- ]by:\s*#(\d+)), so a dispatched issue is blocked in the
same way a hand-written one is.