Journey-first builds, step by step: a grep over generated requirements shows MANUAL_REVIEW as a dead end — routed and tested, never resolved; a vision addendum makes a user-journey document a first-class requirements deliverable and puts manual-review resolution in scope; the requirements stage writes the journey; a human reviews it at the requirements gate on the dashboard; a request-changes reruns the same stage with the comment prepended; and the design traces every journey step to the endpoint that serves it — reviewed, versioned, traced.

Cadora · journey-first builds

The user journey, gated like code

An agent-built app can be engineering-complete and still lose the human: every requirement covered, and the person who resolves the hard case never designed. Journey-first building closes that gap with pieces Cadora already has — the vision demands a journey document, a human reviews it at the requirements gate, and the design must trace to it.

Surface · vision.md + review gates + dashboardRole · operator / gate reviewerCaptured · claims rebuild, aidlc-hitl
01

The dead end a grep can find

Cadora rebuilt an insurance claims adjudication engine — four specialist agents, a supervisor emitting APPROVED / MANUAL_REVIEW / DENIED, a FastAPI surface, an offline mock mode. The generated requirements were excellent on engineering: full FR/BR/API/NFR/AC coverage, a traceability matrix. But grep for the human and the story stops: MANUAL_REVIEW exists as a decision value, two routing rules, and a test case — no queue, no reviewer view, no resolve step. The human step of the claims process was named but never designed.

zsh — the generated requirements, under grep
$ grep -n "MANUAL_REVIEW" aidlc-docs/inception/requirements/requirements.md 74: FR-09 The supervisor emits a final decision: APPROVED | MANUAL_REVIEW | DENIED 118: BR-04 Medical-necessity score 40–69 → route to MANUAL_REVIEW 121: BR-07 Billing anomaly detected → route to MANUAL_REVIEW 203: AC-12 A borderline claim yields decision == "MANUAL_REVIEW" # …and the human who resolves it? $ grep -rinE "review queue|reviewer|resolve" aidlc-docs/inception/requirements/ (no matches — MANUAL_REVIEW is routed, tested, and never resolved)

Every matched line is good engineering. None of them designs the person. That's the gap the method's default artifacts don't catch — a user journey isn't among them, so nobody had to walk the claim to its end.

02

The fix is two paragraphs of vision

The operator caught it at the review gate by asking two questions — where is the user journey? what does the human decide? — and fixed it at the source. Not a patch to the generated docs, not a new Cadora feature: an addendum to vision.md that makes the journey a named deliverable and turns the dead end into scope.

vision.md — the addendum
vision.md · addendumreviewed at the requirements gate

## User journey first (reviewed at the first gate)

Before designing, write aidlc-docs/inception/user-journey.md describing the end-to-end journey for the two personas — the submitter (documents in → decision + rationale back) and the claims reviewer (queue → inspect audit trail → resolve). Cover the three claim fates (clean APPROVED, MANUAL_REVIEW → human resolution, DENIED on exclusion) step by step, naming at each step what the person sees and what the system records. This document is a first-class deliverable of the requirements stage — it will be human-reviewed at the requirements gate, and the design must trace to it.

5. Human adjudication of MANUAL_REVIEW claims

MANUAL_REVIEW is a queue, not a dead end. A claims reviewer must be able to: list the claims awaiting review (with each claim's audit trail and the reasons it was routed), and resolve one with an explicit decision (approve | deny + a mandatory reason). Resolution produces the final decision, appends a resolution entry to the audit trail (who/when/why), and is idempotent-safe (a claim can be resolved once; a second attempt is a clean error).

The run itself doesn't change: cadora run examples/aidlc-hitl.topology.yaml --vision vision.md --hitl. With --hitl, Cadora pauses at every node marked review: true — in this topology, requirements and design — before any downstream work starts.

03

The requirements stage writes the journey

On the next run, user-journey.md arrives with the requirements — two personas, three fates, each walked to its end. The fate that used to be a dead end now reads as a loop: queue → inspect → resolve → recorded, with the person and the system named at every step.

aidlc-docs/inception/user-journey.md — excerpt
user-journey.mdwritten by the requirements stage

# User journey — claims adjudication

persona · claim submitterpersona · claims reviewer

Three fates, end to end: clean APPROVED · MANUAL_REVIEW → human resolution · DENIED on exclusion. Each step names what the person sees and what the system records.

Fate 2 · MANUAL_REVIEW → human resolution
1Routed. A borderline necessity score sends the claim to MANUAL_REVIEW; it lands in the review queue. The submitter sees "in review"; the system records the routing reasons in the audit trail.
2Inspected. The reviewer opens the queue, picks the claim, and reads the full audit trail — what each agent found, and why it routed here.
3Resolved. The reviewer decides approve or deny — with a mandatory reason. No silent buttons.
4Recorded. The resolution (who / when / why) is appended to the audit trail; the submitter sees the final decision with its rationale. A second resolution attempt is a clean error.
04

A human reads it at the gate

The run pauses at the requirements gate with the stage's documents one click away — the journey listed first. The reviewer walks each persona through each fate, asks questions in place, and then decides: approve, request changes, or abort — all before design starts, all recorded in human-review.md.

localhost:8768/runs/claims-rebuild
claims-rebuildaidlc-hitl · 3 nodes · paused at a review gate
running
NEEDS REVIEWrequirements — decide before design starts
aidlc-docs/inception/user-journey.mdJOURNEY · READ FIRSTopen
Optional comment — prepended to the stage prompt if you request changes
ApproveRequest changesAbortdecision recorded in human-review.md
Ask ▾Does fate 2 say what the submitter sees while the claim waits?Send

Away from the dashboard? The gate writes cadora-review-request.json; drop a cadora-review-decision.json beside it and the run proceeds. For asynchronous reviews, run with --review-file and --review-timeout 0 (wait indefinitely).

05

Request changes — same stage, comments first

When the journey is thin — say, the reviewer persona still has no resolve step — the gate doesn't wave it through and it doesn't kill the run. Request changes prepends the comment to the stage prompt and reruns the same stage, up to 3 revisions, while everything downstream waits. The gap is fixed where it was made, before design inherits it.

localhost:8768/runs/claims-rebuild — changes requested
CHANGES REQUESTEDrequirements — revision 1 of 3
The reviewer persona has no resolve step — add the queue → inspect → resolve loop: approve|deny with a mandatory reason, the resolution recorded in the audit trail, and a clean error on a second attempt.
Comment prepended to the requirements prompt · the same stage is re-running · design and construction have not started.
requirements · revision 1/3
design · waiting on the gate
construction · gate: build-test
06

The design must trace to it

At the design gate, the same reviewer runs a short check: each journey step against the piece of design that serves it. For the fate that used to dead-end, every step now lands somewhere concrete — and those endpoints are the claims app's design outcome, drawn out by the journey; Cadora's part was holding the gate until a human asked.

design ↔ user-journey.md — the traceability check
queue → listthe reviewer opens the queue of waiting claimsGET /claims/review-queue
inspectsees the audit trail + the reasons the claim was routedaudit trail in claim detail
resolveapprove | deny, with a mandatory reasonPOST /claims/{id}/resolution
recordresolution entry — who / when / why — in the audit trailaudit-trail entry
resolve twicea second attempt is a clean error, not a silent overwriteclean error + test

An untraced step is a request-changes at the design gate, with the vision's own line as the citation: "the design must trace to it."

reviewedversionedtraced

The frames above reproduce real surfaces — the generated requirements under grep, the vision addendum and journey document as written, and the run dashboard's review gate — rendered as editable HTML rather than raster captures. The gate mechanics themselves are documented in the human-review doc and the method pack in the AI-DLC doc; journey-first is those two composed, so the built app's human story ships the way its code does: reviewed, versioned, and traced.