reviewing-user-flows — SKILL.md
Variant: standard · When to use: judging a finished user-flows document as an acceptance gate — checking it is complete, walkable, structured, resilient, accessible, and sound, then emitting VERDICT: approve|revise with actionable findings.
Overview
This skill is the review half of a producing/judging user-flows pair. Loaded by a
reviewer who has a finished user-flows document in hand, it judges that document
against one question: can a downstream wireframing pass enumerate every screen, and
can every path be walked, recovered, completed (incl. by an AT user), and is it a good
flow? A user-flows doc maps the navigation/interaction graph — entry points + the IA
frame, the happy path, decision branches, error/recovery + edge states, interaction
resilience, flow-level accessibility, and the screens/states traversed. This skill
applies a fixed checklist (the same bar a user-flows author produces to, so the
produce-bar and review-bar do not drift), then emits a single machine-parseable verdict
plus findings the author can act on in one revision pass. It is an acceptance gate — it
does not author, fix, or redraw the flows; it judges and returns findings.
When to activate
- A finished user-flows document needs an accept/revise decision before downstream
wireframing begins.
- You are the independent reviewer / gate for a user-flows doc a producer just authored.
- Re-judging a revised user-flows doc after a prior
revise verdict.
- Judging an amendment — a versioned delta against a prior user-flows doc (the
delta-scoped review, condition 13).
Do NOT activate when:
- Authoring or repairing a user-flows doc → use
authoring-user-flows. This skill never
writes the flows.
- Reviewing screen layout / structure (region layout, content hierarchy, components
per screen) or per-screen pixel accessibility (contrast, target size, focus
appearance) → that is a wireframes-review skill. This gate judges how the screens
connect and whether each path can be completed, not what a screen looks like.
- Reviewing the upstream PRD (goals, personas, metrics) → use a PRD-review skill.
- Checking template/section conformance → a template concern; this skill judges quality
against the bar, not whether every heading is present.
- Judging a user journey (emotion/channel/over-time) — a different artifact.
Workflow
Step 1: Read the whole document with fresh, independent eyes
Read the user-flows doc end to end as if encountering it for the first time. Hold the
upstream PRD (goals + personas) alongside it — coverage is judged against those goals;
hold the design system (if one was given) for the nav/component references; on an
amendment, hold the prior version for the delta. Your stance is a gatekeeper for the
next step (wireframing) and for the user who must actually walk these paths: a finding
carries weight when it shows the screens cannot be enumerated, a path cannot be walked /
recovered / completed, an irreversible action is unguarded, or the flow is objectively
worse than the job needs. Note where a flow, branch, exit, or hand-off is load-bearing.
Step 2: Run the checklist — judge each condition pass/gap
For each condition below, decide pass or gap. A condition fails only on a real,
named deficiency — "I'd have drawn it differently" is not a gap (the quality
conditions are objective only; see condition 12). For each gap, capture the exact
location (which flow, step, branch, node, hand-off) and what is missing (Step 4 turns it
into an actionable finding). Conditions scale with the product (see Proportionality).
The capability-boundary checklist item (below) applies ONLY when a capability_record was injected into the authoring invocation and is available as review context. When absent, treat it as n/a — do not penalise a document for lacking capability-boundary markers when no boundary was defined.
Kept core (completeness + walkability):
- Goal/persona coverage — no orphans. Every PRD goal (framed as the job the persona
is getting done) maps to a flow; every flow traces back to a goal/persona; standard
flows are grounded in their established pattern (or the deviation is stated). A
coverage map is present. Gap when a goal has no flow, a flow serves no goal, no
coverage map, or a solved-problem flow is reinvented with no rationale.
- Defined entry + exit. Every flow names all entry points (homepage, deep link,
email, notification — each may start a different state) and a concrete success/
confirmation state (not just an abstract "success"); alternate exits (cancel/
abandon/hand-off) are clean. Gap when a flow begins in mid-air or ends with no
concrete end state. (Non-collapsing baseline: every flow has a success state.)
- Every decision branch resolved. Each decision lists all outgoing branches;
each resolves to a step, another flow, or an exit. Gap on a dangling side or a
branch that points nowhere.
- Every error/edge state has a recovery — no dead ends. Where applicable: empty/
null, invalid input, timeout/network/integration, interruption/session-loss,
permission/auth, back/cancel — each routes back to a productive step; plus the
loading/in-progress state on every async step and the success/confirmation
state. No state strands the user; load-bearing states carry message intent —
error = cause+fix, empty = guide-to-action, success = the result. Gap when an
applicable state is missing, an error path dead-ends, an async step leaps to success
with no loading state, an error lacks a recovery, or a load-bearing state's message
intent is unspecified where it matters.
- Steps unambiguous + walkable. A reader follows the narrative without guessing;
each step names its screen/state + the user action; labels present. Gap on an
ambiguous step or unlabelled node.
- Both notations in sync. Every flow has a Mermaid flowchart AND a numbered
narrative + branch/error list, same graph; multi-actor flows use swimlanes. Gap
when one notation is missing, a node/branch drifts between them, or a multi-actor
flow hides who-does-what in one undifferentiated lane.
- Screens enumerable for wireframing. The screens index is the complete union of
every flow's screens/states (incl. loading + success), each with one canonical
name used identically across diagram/narrative/index, nothing orphaned. Gap on a
referenced screen missing from the index, a name that drifts, an orphaned index
entry, or no index. (Non-collapsing baseline: the naming + index enumeration.)
- Assumptions/open questions surfaced; flow not journey. Thin-PRD assumptions are
stated (challengeable), open questions listed, no silent product decision; the doc
stays the interaction graph (no emotion/channel-per-step). Gap on a buried
decision, or journey content presented as part of the flow. (Non-collapsing
baseline: the flow-vs-journey boundary.)
New (structure, resilience, accessibility, quality, amend):
Navigation & IA frame (where applicable). The nav/app-shell model + wayfinding is
present for a multi-surface product; deep-linking (+ prereq guard/resume) and
cross-device path divergence are addressed where they apply; every cross-flow
hand-off resolves to a defined flow and no flow is orphaned (unreachable + exits
nowhere). Gap on a hand-off to a removed/undefined flow, or a multi-surface product
whose flows ignore its nav model / a real device divergence. Collapse: a
single-screen / single-flow tool has no app shell, no cross-flow graph, one entry —
not a gap.
Interaction resilience (where applicable). Every irreversible/destructive action
carries a confirm or undo; each multi-step flow states resume-vs-restart;
state-changing steps show what changed; optimistic actions define a revert+
feedback path (and aren't used for payments/deletes). Gap on an unguarded
irreversible action, a silent state-change, a long flow with no stated interruption
behavior, or an unsafe/revert-less optimistic action. Collapse: a read-only flow
has nothing to guard/persist/confirm — not a gap.
Flow-level accessibility. Every path is keyboard-completable (no trap) and
AT-completable (errors announced, not color/position-only); focus-order is
managed on step/route change (WCAG 2.2 SC 2.4.3); no required step is mouse-only/
gesture-only. Gap on a mouse-only required step, an error perceivable only
visually (AT user stranded), or unmanaged focus on step change. (Non-collapsing
baseline: keyboard-operable; cross-step focus concern is lighter on a single-screen
flow but the path must still be keyboard/AT-completable.) Per-screen pixel WCAG
(contrast/target-size) is out of scope here — that is wireframes/DS.
Flow quality (objective only). No gratuitous step (the path is no longer than the
job needs — path-length is judged here, once); irreversible actions are prevented
(guard before the act), not only recovered; no step forces recall of what a prior
step established without carry-forward; like jobs use consistent paths. Gap on a
materially-over-long path with no reason, an unprevented irreversible action, a
cross-step recall burden, or unjustified inconsistency between like flows.
Subjective preference is NOT a gap — "a nicer flow exists" never triggers a
revise. Collapse: a trivial flow trivially holds.
Delta-scoped review (only when judging an amendment). Review the diff + its
ripple, not the whole doc: untouched flows are unchanged (no unscoped regenerate);
no cross-flow hand-off points at a removed/renamed flow; no screens-index entry
orphaned/missing; no previously-reachable path newly stranded; diagram⇄narrative
synced on the edit; the doc's version bump matches the change class (MAJOR removed/
renamed flow or removed reachable path · MINOR added · PATCH wording) and the
changelog matches the diff; breaking removals carry deprecation. Gap on any of
these. Collapse: a greenfield first build does not exercise this condition.
Capability routing (n/a when no capability records): each cross-capability transition explicitly labels the source and target capability IDs; entry_point/exit_point labels match the capability records.
Step 3: Decide the verdict
- approve — every applicable condition passes. A wireframing pass can enumerate
every screen and walk every path; the path is recoverable, resilient, completable
(incl. by an AT user), and objectively sound, as written. Approve it even if you can
imagine stylistic improvements; the bar is the checklist, not perfection.
- revise — one or more conditions have a real, named gap (an orphan goal, a flow with
no entry, a dangling branch, a dead-end error path, a missing loading/success state, an
unguarded irreversible action, a mouse-only required step, an AT-stranded error, a
gratuitous-length path, a hand-off to a removed flow, the diagram/narrative out of
sync, a screen missing from the index, a mis-versioned amendment, etc.).
Do not revise to signal effort or to request nice-to-haves, and never on subjective
taste. A condition is either met or it isn't.
Step 4: Emit the verdict + actionable findings
Emit the verdict as a single line — the literal text VERDICT: approve or
VERDICT: revise, on its own line, with no surrounding code fences, quotes, or
extra words (the fences here are illustration only):
VERDICT: approve
Then list findings. On revise, every finding is actionable — the failed condition,
the exact location, and how to fix it — so the author can resolve it in one pass. On
approve, findings are optional non-blocking notes.
A good finding names the gap and the fix:
revise — Resilience (cond. 10): in Flow 3 (Account settings), "Delete account" goes
straight from the button to a success state with no confirm or undo. Fix: add a confirm
step (or a recoverable soft-delete with undo) before the irreversible deletion, and
show what was deleted.
revise — Flow accessibility (cond. 11): in Flow 2 (Onboarding), the "reorder
priorities" step is drag-only with no keyboard alternative, so a keyboard/AT user can't
complete the path. Fix: add a keyboard-operable reorder (move up/down controls) and
ensure focus moves to the reordered item.
A bad finding is vague and unactionable:
The flow could be more robust. (Which flow? Which condition? What fixes it?)
Rules
Hard rules (never violate):
- Emit exactly one verdict line,
VERDICT: approve or VERDICT: revise — that
literal token, on its own line, nothing else on it. Downstream tooling parses it.
- Judge, never author. Return findings; do not redraw, fix, or fill in the flows.
- Single-sourced bar. Judge against the 14 conditions in Step 2 — the same bar the
author produces to. Do not invent extra conditions or a stricter private standard. In
particular, condition 12 is objective only: subjective preference is never a gap.
- No false-revise. A doc that meets every applicable condition is approved, even a
small one for a simple product. Revise only on a real, named gap. The new conditions
(9–13) each collapse on a thin archetype (see Proportionality) — do not manufacture
a gap from a thin flow legitimately omitting an inapplicable section.
- No false-approve. Never approve over a genuine gap. A dead-end path, an orphan goal,
an unguarded irreversible action, an AT-stranded error, a screen missing from the
index, or a hand-off to a removed flow is a
revise.
- Dead ends + unguarded irreversible actions are blocking. A path that strands the
user, or an irreversible action with no confirm/undo, is always a
revise.
- F5/F6 boundary. Per-screen pixel WCAG (contrast/target-size/focus-appearance) is a
wireframes/DS concern, not condition 11; path-length is judged once, in condition 12,
not re-judged in 11.
- Judge against the upstreams the document was given. Assess against its
depends_on
set; a not-produced upstream is never a revise trigger; a document that ignored
a produced upstream it should have drawn on is a fair finding.
- Every revise finding is actionable — failed condition + location + concrete fix.
Preferences (override-able):
- Order findings by severity — blocking gaps (dead ends, unguarded irreversible actions,
orphan goals, missing screens, AT-stranded errors) first, then minor ones.
- Reference the condition number/name in each finding so the author maps it to the bar.
- When citing a location, name the flow + the specific node/step/branch/hand-off.
- Keep approve-notes few and clearly non-blocking.
Proportionality
"Good enough to wireframe from + walkable + resilient + accessible + sound" scales with
the product. A simple product legitimately has few flows, few edge states, no app shell,
no resilience block — a small, complete doc satisfying every applicable condition
passes. The new conditions collapse on a thin archetype: 9 (no app shell /
cross-flow graph on a single-screen tool), 10 (nothing to guard on a read-only flow),
11 (lighter cross-step focus on a single-screen flow, but still keyboard/AT-
completable), 12 (a trivial flow trivially holds), 13 (greenfield doesn't
exercise the delta review). Four conditions are non-collapsing baseline — they apply
at every size because the flow is broken without them at any size: cond-2 (a concrete
success state), cond-7 (canonical naming + screens enumeration), cond-8 (flow not
journey), cond-11 keyboard-operability. Judge completeness/quality-of-paths, not flow
count; manufacturing a gap from brevity is the most common reviewer error here.
Gotchas
- Approving for completeness instead of walkability/resilience. Every flow present
and the doc still un-walkable — a branch with one side missing, an error with no
recovery, a diagram that drifts, an unguarded delete, an AT-stranded error. Judge
whether every path can be walked, recovered, completed, and is sound, not whether the
template is filled.
- Missing the dead-end / the unguarded irreversible. Both hide on the unhappy path;
the happy path always looks complete. Trace every branch + error to its terminus, and
every irreversible action to its guard.
- Missing the silent state-change / the missing loading state. A step that mutates
with no "what changed", or an async step that leaps to success, reads complete but is a
gap (cond. 4/10).
- One notation only. Reading the diagram and skipping the narrative (or vice-versa)
misses a sync defect by construction (cond. 6).
- Importing pixel-WCAG into cond. 11. Contrast/target-size are wireframes/DS, not
flow-level a11y. Don't double-judge.
- False-revise on a simple product. A thin flow correctly omits the app-shell,
resilience, or device-divergence it doesn't have; an inapplicable edge state is not a
gap. The new conditions collapse — calibrate to product size.
- Revising on taste (cond. 12). "I'd design it differently" is never a gap. Condition
12 is objective only.
- Re-judging the whole doc on an amendment. On an amendment, scope the review to the
delta + ripple (cond. 13); don't re-litigate untouched flows.
- Verdict token drift. "Approved", "LGTM", "needs work", or a buried verdict won't
parse. Emit the literal
VERDICT: approve|revise on its own line.
Anti-patterns
- Rubber-stamp approve. Skimming the happy paths and approving without tracing the
unhappy ones, the irreversible actions, or the AT paths.
- Nit-pick revise. Blocking on diagram styling, node shape, or wording dressed up as
gaps; or revising on subjective preference. Revise is for real, named blockers only.
- Silent redraw. Authoring inside a review collapses the produce/judge separation.
- Inventing conditions. Adding a private requirement the author never produced to
(a journey "emotion per step", a subjective "nicer flow") drifts the review-bar off the
produce-bar.
- Judging layout, pixels, or goals. Where a button sits / its contrast (wireframes/
DS) or whether a goal is worth building (PRD) — out of scope for this gate.
- Hedged verdict. "Mostly approve but…" or two verdict lines. Exactly one decision.
Output
A single review result for one user-flows document:
- One verdict line —
VERDICT: approve or VERDICT: revise, verbatim, on its own
line.
- Findings — on
revise, one actionable finding per blocking gap (failed condition +
location + concrete fix); on approve, optional non-blocking notes.
The abstract consumer is whatever orchestrates the produce→review loop: approve accepts
the user-flows doc for the next phase (wireframing); revise returns the findings to the
producer for a bounded revision pass.
Related
authoring-user-flows — the produce half; it writes the flows to the same bar this
skill judges against. Pairing them single-sources the bar so produce and review do not
drift.
- A wireframes-review skill — the sibling gate for the next document down (per-screen
layout + per-screen pixel accessibility). Distinct gate, distinct bar; this skill judges
the navigation graph + path completability that feeds it the screen list.
- A PRD-review skill — the gate for the upstream document (goals/personas/metrics).
This skill checks coverage against those goals but does not re-judge them.
- A user-flows template / content-template tool — owns the section structure; this
skill judges quality against the bar, not structural conformance.
Progressive disclosure
references/completeness-walkability-bar.md — the 13 conditions expanded with
per-condition pass/gap signals, proportionality collapses, and worked finding examples.
Load when a borderline condition needs a sharper pass/gap call.
references/sources.md — research provenance for the review method, the flow-vs-journey
boundary, the resilience/accessibility/quality conditions, and the delta-review.
Body budget
description ≤ 1,024 chars (agentskills.io cap). Claude truncates the combined
description + when_to_use at 1,536 chars in the listing.
- Body ~500 lines / 5,000 tokens (soft target — quality takes precedence; flag if consistently over 700 lines / 7,000 tokens) — kept in context every turn.
- Per reference file: warn >10k tokens, error >25k. Total references: warn >25k tokens,
error >50k.
1---2name: reviewing-user-flows3description: Use when reviewing/judging a finished user-flows document to decide whether a downstream wireframing pass can enumerate every screen and whether each path is complete, walkable, resilient, accessible, and sound — an acceptance gate, not authoring. A user-flows doc is the navigation/interaction graph: entries + IA frame, happy path, branches, error/recovery + edge states, resilience, flow-level accessibility, screens traversed. Judges it against a single-sourced bar: goals map to flows (no orphans), entries+exits defined, branches resolve, no dead ends, states (incl. loading+success) covered, irreversible actions guarded, every path keyboard/ AT-completable, the flow objectively sound, notations synced, screens enumerable; plus a delta-scoped review when amending. Emits exactly `VERDICT: approve|revise` with actionable findings. Approves a doc meeting the bar (no false-revise on a thin one), revises only on a named gap. Not for authoring, not for wireframes, not for the PRD.4---56# `reviewing-user-flows` — SKILL.md78> **Variant:** standard · **When to use:** judging a finished user-flows document as an acceptance gate — checking it is complete, walkable, structured, resilient, accessible, and sound, then emitting `VERDICT: approve|revise` with actionable findings.910## Overview1112This skill is the *review* half of a producing/judging user-flows pair. Loaded by a13reviewer who has a **finished user-flows document** in hand, it judges that document14against one question: **can a downstream wireframing pass enumerate every screen, and15can every path be walked, recovered, completed (incl. by an AT user), and is it a good16flow?** A user-flows doc maps the navigation/interaction graph — entry points + the IA17frame, the happy path, decision branches, error/recovery + edge states, interaction18resilience, flow-level accessibility, and the screens/states traversed. This skill19applies a fixed **checklist** (the same bar a user-flows author produces to, so the20produce-bar and review-bar do not drift), then emits a single machine-parseable verdict21plus findings the author can act on in one revision pass. It is an acceptance gate — it22does **not** author, fix, or redraw the flows; it judges and returns findings.2324## When to activate2526- A finished user-flows document needs an accept/revise decision before downstream27 wireframing begins.28- You are the independent reviewer / gate for a user-flows doc a producer just authored.29- Re-judging a revised user-flows doc after a prior `revise` verdict.30- **Judging an amendment** — a versioned delta against a prior user-flows doc (the31 delta-scoped review, condition 13).3233**Do NOT activate when:**3435- Authoring or repairing a user-flows doc → use `authoring-user-flows`. This skill never36 writes the flows.37- Reviewing **screen layout / structure** (region layout, content hierarchy, components38 per screen) or **per-screen pixel accessibility** (contrast, target size, focus39 appearance) → that is a wireframes-review skill. This gate judges how the screens40 *connect* and whether each path can be *completed*, not what a screen looks like.41- Reviewing the **upstream PRD** (goals, personas, metrics) → use a PRD-review skill.42- Checking template/section conformance → a template concern; this skill judges *quality43 against the bar*, not whether every heading is present.44- Judging a **user journey** (emotion/channel/over-time) — a different artifact.4546## Workflow4748### Step 1: Read the whole document with fresh, independent eyes4950Read the user-flows doc end to end as if encountering it for the first time. Hold the51upstream PRD (goals + personas) alongside it — coverage is judged against those goals;52hold the design system (if one was given) for the nav/component references; on an53amendment, hold the **prior version** for the delta. Your stance is a gatekeeper for the54*next* step (wireframing) and for the user who must actually walk these paths: a finding55carries weight when it shows the screens cannot be enumerated, a path cannot be walked /56recovered / completed, an irreversible action is unguarded, or the flow is objectively57worse than the job needs. Note where a flow, branch, exit, or hand-off is load-bearing.5859### Step 2: Run the checklist — judge each condition pass/gap6061For each condition below, decide **pass** or **gap**. A condition fails only on a *real,62named* deficiency — "I'd have drawn it differently" is **not** a gap (the quality63conditions are objective only; see condition 12). For each gap, capture the exact64location (which flow, step, branch, node, hand-off) and what is missing (Step 4 turns it65into an actionable finding). Conditions scale with the product (see Proportionality).6667The capability-boundary checklist item (below) applies ONLY when a `capability_record` was injected into the authoring invocation and is available as review context. When absent, treat it as n/a — do not penalise a document for lacking capability-boundary markers when no boundary was defined.6869**Kept core (completeness + walkability):**70711. **Goal/persona coverage — no orphans.** Every PRD goal (framed as the job the persona72 is getting done) maps to a flow; every flow traces back to a goal/persona; standard73 flows are grounded in their established pattern (or the deviation is stated). A74 coverage map is present. *Gap* when a goal has no flow, a flow serves no goal, no75 coverage map, or a solved-problem flow is reinvented with no rationale.762. **Defined entry + exit.** Every flow names all entry points (homepage, deep link,77 email, notification — each may start a different state) and a **concrete success/78 confirmation state** (not just an abstract "success"); alternate exits (cancel/79 abandon/hand-off) are clean. *Gap* when a flow begins in mid-air or ends with no80 concrete end state. *(Non-collapsing baseline: every flow has a success state.)*813. **Every decision branch resolved.** Each decision lists **all** outgoing branches;82 each resolves to a step, another flow, or an exit. *Gap* on a dangling side or a83 branch that points nowhere.844. **Every error/edge state has a recovery — no dead ends.** Where applicable: empty/85 null, invalid input, timeout/network/integration, interruption/session-loss,86 permission/auth, back/cancel — each routes back to a productive step; plus the87 **loading/in-progress** state on every async step and the **success/confirmation**88 state. No state strands the user; load-bearing states carry **message intent** —89 error = cause+fix, empty = guide-to-action, success = the result. *Gap* when an90 applicable state is missing, an error path dead-ends, an async step leaps to success91 with no loading state, an error lacks a recovery, or a load-bearing state's message92 intent is unspecified where it matters.935. **Steps unambiguous + walkable.** A reader follows the narrative without guessing;94 each step names its screen/state + the user action; labels present. *Gap* on an95 ambiguous step or unlabelled node.966. **Both notations in sync.** Every flow has a Mermaid flowchart AND a numbered97 narrative + branch/error list, same graph; **multi-actor flows use swimlanes**. *Gap*98 when one notation is missing, a node/branch drifts between them, or a multi-actor99 flow hides who-does-what in one undifferentiated lane.1007. **Screens enumerable for wireframing.** The screens index is the complete union of101 every flow's screens/states (incl. loading + success), each with **one canonical102 name** used identically across diagram/narrative/index, nothing orphaned. *Gap* on a103 referenced screen missing from the index, a name that drifts, an orphaned index104 entry, or no index. *(Non-collapsing baseline: the naming + index enumeration.)*1058. **Assumptions/open questions surfaced; flow not journey.** Thin-PRD assumptions are106 stated (challengeable), open questions listed, no silent product decision; the doc107 stays the interaction graph (no emotion/channel-per-step). *Gap* on a buried108 decision, or journey content presented as part of the flow. *(Non-collapsing109 baseline: the flow-vs-journey boundary.)*110111**New (structure, resilience, accessibility, quality, amend):**1121139. **Navigation & IA frame** (where applicable). The nav/app-shell model + wayfinding is114 present for a multi-surface product; deep-linking (+ prereq guard/resume) and115 cross-device path divergence are addressed where they apply; every **cross-flow116 hand-off resolves to a defined flow** and no flow is orphaned (unreachable + exits117 nowhere). *Gap* on a hand-off to a removed/undefined flow, or a multi-surface product118 whose flows ignore its nav model / a real device divergence. *Collapse:* a119 single-screen / single-flow tool has no app shell, no cross-flow graph, one entry —120 not a gap.12110. **Interaction resilience** (where applicable). Every irreversible/destructive action122 carries a **confirm or undo**; each multi-step flow states resume-vs-restart;123 state-changing steps show **what changed**; optimistic actions define a revert+124 feedback path (and aren't used for payments/deletes). *Gap* on an unguarded125 irreversible action, a silent state-change, a long flow with no stated interruption126 behavior, or an unsafe/revert-less optimistic action. *Collapse:* a read-only flow127 has nothing to guard/persist/confirm — not a gap.12811. **Flow-level accessibility.** Every path is **keyboard-completable** (no trap) and129 **AT-completable** (errors announced, not color/position-only); focus-order is130 managed on step/route change (WCAG 2.2 SC 2.4.3); no required step is mouse-only/131 gesture-only. *Gap* on a mouse-only required step, an error perceivable only132 visually (AT user stranded), or unmanaged focus on step change. *(Non-collapsing133 baseline: keyboard-operable; cross-step focus concern is lighter on a single-screen134 flow but the path must still be keyboard/AT-completable.)* Per-screen pixel WCAG135 (contrast/target-size) is **out of scope** here — that is wireframes/DS.13612. **Flow quality (objective only).** No gratuitous step (the path is no longer than the137 job needs — path-length is judged here, once); irreversible actions are **prevented**138 (guard before the act), not only recovered; no step forces **recall** of what a prior139 step established without carry-forward; like jobs use **consistent** paths. *Gap* on a140 materially-over-long path with no reason, an unprevented irreversible action, a141 cross-step recall burden, or unjustified inconsistency between like flows.142 **Subjective preference is NOT a gap** — "a nicer flow exists" never triggers a143 revise. *Collapse:* a trivial flow trivially holds.14413. **Delta-scoped review** (only when judging an amendment). Review the **diff + its145 ripple**, not the whole doc: untouched flows are unchanged (no unscoped regenerate);146 no cross-flow hand-off points at a removed/renamed flow; no screens-index entry147 orphaned/missing; no previously-reachable path newly stranded; diagram⇄narrative148 synced on the edit; the doc's version bump matches the change class (MAJOR removed/149 renamed flow or removed reachable path · MINOR added · PATCH wording) and the150 changelog matches the diff; breaking removals carry deprecation. *Gap* on any of151 these. *Collapse:* a greenfield first build does not exercise this condition.15215314. **Capability routing (n/a when no capability records):** each cross-capability transition explicitly labels the source and target capability IDs; `entry_point`/`exit_point` labels match the capability records.154155### Step 3: Decide the verdict156157- **approve** — every *applicable* condition passes. A wireframing pass can enumerate158 every screen and walk every path; the path is recoverable, resilient, completable159 (incl. by an AT user), and objectively sound, as written. Approve it even if you can160 imagine stylistic improvements; the bar is the checklist, not perfection.161- **revise** — one or more conditions have a real, named gap (an orphan goal, a flow with162 no entry, a dangling branch, a dead-end error path, a missing loading/success state, an163 unguarded irreversible action, a mouse-only required step, an AT-stranded error, a164 gratuitous-length path, a hand-off to a removed flow, the diagram/narrative out of165 sync, a screen missing from the index, a mis-versioned amendment, etc.).166167Do not revise to signal effort or to request nice-to-haves, and never on subjective168taste. A condition is either met or it isn't.169170### Step 4: Emit the verdict + actionable findings171172Emit the verdict as a single line — the literal text `VERDICT: approve` or173`VERDICT: revise`, on its own line, with **no** surrounding code fences, quotes, or174extra words (the fences here are illustration only):175176```177VERDICT: approve178```179180Then list findings. On `revise`, every finding is **actionable** — the failed condition,181the exact location, and **how to fix it** — so the author can resolve it in one pass. On182`approve`, findings are optional non-blocking notes.183184A good finding names the gap and the fix:185186> **revise** — Resilience (cond. 10): in Flow 3 (Account settings), "Delete account" goes187> straight from the button to a success state with no confirm or undo. Fix: add a confirm188> step (or a recoverable soft-delete with undo) before the irreversible deletion, and189> show what was deleted.190191> **revise** — Flow accessibility (cond. 11): in Flow 2 (Onboarding), the "reorder192> priorities" step is drag-only with no keyboard alternative, so a keyboard/AT user can't193> complete the path. Fix: add a keyboard-operable reorder (move up/down controls) and194> ensure focus moves to the reordered item.195196A bad finding is vague and unactionable:197198> The flow could be more robust. *(Which flow? Which condition? What fixes it?)*199200## Rules201202**Hard rules (never violate):**203204- **Emit exactly one verdict line, `VERDICT: approve` or `VERDICT: revise`** — that205 literal token, on its own line, nothing else on it. Downstream tooling parses it.206- **Judge, never author.** Return findings; do not redraw, fix, or fill in the flows.207- **Single-sourced bar.** Judge against the 14 conditions in Step 2 — the same bar the208 author produces to. Do not invent extra conditions or a stricter private standard. In209 particular, condition 12 is **objective only**: subjective preference is never a gap.210- **No false-revise.** A doc that meets every *applicable* condition is approved, even a211 small one for a simple product. Revise only on a real, named gap. The new conditions212 (9–13) each **collapse** on a thin archetype (see Proportionality) — do not manufacture213 a gap from a thin flow legitimately omitting an inapplicable section.214- **No false-approve.** Never approve over a genuine gap. A dead-end path, an orphan goal,215 an unguarded irreversible action, an AT-stranded error, a screen missing from the216 index, or a hand-off to a removed flow is a `revise`.217- **Dead ends + unguarded irreversible actions are blocking.** A path that strands the218 user, or an irreversible action with no confirm/undo, is always a `revise`.219- **F5/F6 boundary.** Per-screen pixel WCAG (contrast/target-size/focus-appearance) is a220 wireframes/DS concern, not condition 11; path-length is judged once, in condition 12,221 not re-judged in 11.222- **Judge against the upstreams the document was given.** Assess against its `depends_on`223 set; a **not-produced** upstream is **never** a revise trigger; a document that ignored224 a **produced** upstream it should have drawn on **is** a fair finding.225- **Every revise finding is actionable** — failed condition + location + concrete fix.226227**Preferences (override-able):**228229- Order findings by severity — blocking gaps (dead ends, unguarded irreversible actions,230 orphan goals, missing screens, AT-stranded errors) first, then minor ones.231- Reference the condition number/name in each finding so the author maps it to the bar.232- When citing a location, name the flow + the specific node/step/branch/hand-off.233- Keep approve-notes few and clearly non-blocking.234235## Proportionality236237"Good enough to wireframe from + walkable + resilient + accessible + sound" scales with238the product. A simple product legitimately has few flows, few edge states, no app shell,239no resilience block — a small, complete doc satisfying every *applicable* condition240**passes**. The new conditions collapse on a thin archetype: **9** (no app shell /241cross-flow graph on a single-screen tool), **10** (nothing to guard on a read-only flow),242**11** (lighter cross-step focus on a single-screen flow, but still keyboard/AT-243completable), **12** (a trivial flow trivially holds), **13** (greenfield doesn't244exercise the delta review). Four conditions are **non-collapsing baseline** — they apply245at every size because the flow is broken without them at any size: cond-2 (a concrete246success state), cond-7 (canonical naming + screens enumeration), cond-8 (flow not247journey), cond-11 keyboard-operability. Judge completeness/quality-of-paths, not flow248count; manufacturing a gap from brevity is the most common reviewer error here.249250## Gotchas251252- **Approving for completeness instead of walkability/resilience.** Every flow present253 and the doc still un-walkable — a branch with one side missing, an error with no254 recovery, a diagram that drifts, an unguarded delete, an AT-stranded error. Judge255 whether *every path can be walked, recovered, completed, and is sound*, not whether the256 template is filled.257- **Missing the dead-end / the unguarded irreversible.** Both hide on the *unhappy* path;258 the happy path always looks complete. Trace every branch + error to its terminus, and259 every irreversible action to its guard.260- **Missing the silent state-change / the missing loading state.** A step that mutates261 with no "what changed", or an async step that leaps to success, reads complete but is a262 gap (cond. 4/10).263- **One notation only.** Reading the diagram and skipping the narrative (or vice-versa)264 misses a sync defect by construction (cond. 6).265- **Importing pixel-WCAG into cond. 11.** Contrast/target-size are wireframes/DS, not266 flow-level a11y. Don't double-judge.267- **False-revise on a simple product.** A thin flow correctly omits the app-shell,268 resilience, or device-divergence it doesn't have; an inapplicable edge state is not a269 gap. The new conditions collapse — calibrate to product size.270- **Revising on taste (cond. 12).** "I'd design it differently" is never a gap. Condition271 12 is objective only.272- **Re-judging the whole doc on an amendment.** On an amendment, scope the review to the273 delta + ripple (cond. 13); don't re-litigate untouched flows.274- **Verdict token drift.** "Approved", "LGTM", "needs work", or a buried verdict won't275 parse. Emit the literal `VERDICT: approve|revise` on its own line.276277## Anti-patterns278279- **Rubber-stamp approve.** Skimming the happy paths and approving without tracing the280 unhappy ones, the irreversible actions, or the AT paths.281- **Nit-pick revise.** Blocking on diagram styling, node shape, or wording dressed up as282 gaps; or revising on subjective preference. Revise is for real, named blockers only.283- **Silent redraw.** Authoring inside a review collapses the produce/judge separation.284- **Inventing conditions.** Adding a private requirement the author never produced to285 (a journey "emotion per step", a subjective "nicer flow") drifts the review-bar off the286 produce-bar.287- **Judging layout, pixels, or goals.** Where a button sits / its contrast (wireframes/288 DS) or whether a goal is worth building (PRD) — out of scope for this gate.289- **Hedged verdict.** "Mostly approve but…" or two verdict lines. Exactly one decision.290291## Output292293A single review result for one user-flows document:294295- **One verdict line** — `VERDICT: approve` or `VERDICT: revise`, verbatim, on its own296 line.297- **Findings** — on `revise`, one actionable finding per blocking gap (failed condition +298 location + concrete fix); on `approve`, optional non-blocking notes.299300The abstract consumer is whatever orchestrates the produce→review loop: `approve` accepts301the user-flows doc for the next phase (wireframing); `revise` returns the findings to the302producer for a bounded revision pass.303304## Related305306- **`authoring-user-flows`** — the produce half; it writes the flows to the same bar this307 skill judges against. Pairing them single-sources the bar so produce and review do not308 drift.309- A **wireframes-review** skill — the sibling gate for the *next* document down (per-screen310 layout + per-screen pixel accessibility). Distinct gate, distinct bar; this skill judges311 the navigation graph + path completability that feeds it the screen list.312- A **PRD-review** skill — the gate for the *upstream* document (goals/personas/metrics).313 This skill checks coverage against those goals but does not re-judge them.314- A **user-flows template / content-template** tool — owns the section *structure*; this315 skill judges *quality against the bar*, not structural conformance.316317## Progressive disclosure318319- `references/completeness-walkability-bar.md` — the 13 conditions expanded with320 per-condition pass/gap signals, proportionality collapses, and worked finding examples.321 Load when a borderline condition needs a sharper pass/gap call.322- `references/sources.md` — research provenance for the review method, the flow-vs-journey323 boundary, the resilience/accessibility/quality conditions, and the delta-review.324325## Body budget326327- `description` ≤ 1,024 chars (agentskills.io cap). Claude truncates the combined328 `description` + `when_to_use` at 1,536 chars in the listing.329- Body ~500 lines / 5,000 tokens (soft target — quality takes precedence; flag if consistently over 700 lines / 7,000 tokens) — kept in context every turn.330- Per reference file: warn >10k tokens, error >25k. Total references: warn >25k tokens,331 error >50k.