reviewing-user-flows

>

Skill file

Preview skill file
---
name: reviewing-user-flows
description: >
  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.
extensions:
  claude:
    when_to_use: "judging a finished user-flows document against the completeness + walkability + structure + resilience + accessibility + quality + amend bar and emitting an approve/revise verdict"
    argument-hint: "<the finished user-flows document to review (+ the prior version, when judging an amendment)>"
version: "1.3.0"
forge:
  status: reviewed
  forged: 2026-06-04
  reviewed: 2026-06-13
---

# `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):**

1. **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.
2. **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.)*
3. **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.
4. **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.
5. **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.
6. **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.
7. **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.)*
8. **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):**

9. **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.
10. **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.
11. **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.
12. **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.
13. **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.

14. **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.

Source

Creator's repository · bm629/agent-skills

View on GitHub

Security

Security checks in progress
Results will appear here once audits complete
Checked by 3 independent security firms
Does it try to trick the AI?Not yet checkedPending · Gen Agent Trust Hub
Does it sneak in hidden code?Not yet checkedPending · Socket
Does it have known bugs?Not yet checkedPending · Snyk