walk-prototype
Understand a working prototype by using it, the way the people it serves would. Works out who it serves and what each sets out to do, then walks each journey a step at a time through the walk_prototyp
SKILL.mdcore/components/skills/walk-prototype/SKILL.md
GitHubwalk-prototype
A screen shows what a prototype has. A journey shows what it is for: who comes to it, what
they set out to do, and what they get. /discover-intent drafts business intents from that — so a
business intent says what a person gets, not what the screens hold or what rules they enforce.
Input
| Field | Required | Meaning |
|---|---|---|
source |
yes | The prototype: a file path, a local page, or a link |
source_manifest |
yes | The capture's manifest — its view-… files are the views the journeys must cover |
may_change_data |
yes | true for a file or a local prototype; for a deployed site, what the person said (true only when they said it is safe) |
walk_script |
yes | <play-dir>/scripts/walk_prototype.py |
check_script |
yes | <play-dir>/scripts/check_journeys.py |
journeys_path |
yes | Where to write journeys.yaml |
evidence_dir |
yes | Where the step pictures and text go (<source evidence>/journeys/) |
Process
Read the captured views — every
view-…text (and picture) the manifest lists, and the first screen. List the views by name.Work out who the prototype serves and what each sets out to do. Start from its main sections — the tabs, the top-level menu, the parts of its first screen — and list them as
main_sections. Every main section is the goal of a journey of its own (a person comes to it for a reason), with that section as the journey'ssection, so a section is never only a step on the way to another goal: reading what a list holds is its own journey, even when another journey also passes through it. From what the screens say to their users — headings, help text, empty states, the names of actions — name each kind of person and each thing they come to do. Write the goal as what they want to have at the end, in the product's own words ("see where every piece of work stands before planning the week"), not as a feature ("use the Board tab"). The sample data is only an example of what the product handles: name goals that hold for any such content, never the sample's company, items or counts. Any process or tool the screens talk about is content the product shows: name what the person gets from the product, never how that process works behind it, and never use the words of the tools that run this walk.Walk each journey a step at a time. Start from the first screen. Each step is one call:
python3 <walk_script> --source <source> --steps <evidence_dir>/<journey>.steps.json \ --out-dir <evidence_dir> --name <journey>-NN --session <journey> [--allow-changes]The steps file holds every step so far plus the next one (
click,type,press,back; a target by its words or#n).--sessionkeeps the journey's browser open, so a step costs well under a second. The answer tells you only what changed (addedlines,gonecount) and thecontrolsandfieldsnow on screen: read that, not the whole page — open<journey>-NN.txtonly when the change is not enough to decide. Choose the next step from what a person with this goal would do now. When the journey ends, runpython3 <walk_script> --session <journey> --stop. Go on until the person has what they came for, or the prototype stops them (a step that cannot be taken is a finding, not a failure — note it and try another way). Walk deeply: through cards one after another, into a piece and back out, a comment typed, an answer given. Pass--allow-changesonly whenmay_change_dataistrue.Cover every view. For each captured view no journey reached, find the journey that would — a person who needs it — and walk it; or, if no person's goal leads there (a help panel, a decorative toggle), list it under
not_walkedwith why.Write
journeys.yaml:main_sections: [Board, Reports, Settings] journeys: - id: plan-the-week section: Board # the main section this journey's goal serves who: a team lead who plans a software team's work sets_out_to: see where every piece of work stands before planning the week steps: - do: open Board shows: the items in three stage columns, 24 items in all view: [plan-the-week-01.png, plan-the-week-01.txt] covers: [view-02-board] # the captured views this step reached - do: open the item "Export report" shows: its owner, due date and the item it waits on view: [plan-the-week-02.png, plan-the-week-02.txt] ends_with: knows which items are late or blocked could_not: [] # steps the prototype did not allow, with why not_walked: - view: view-35-later-keep-unread why: the same card as the step before, reached by swiping leftCheck it:
python3 <check_script> --journeys <journeys_path> --source-manifest <source_manifest> \ --evidence-dir <evidence_dir> --out <journeys_path dir>/journeys-check.jsonFix every gap (walk the missing journey, add the step's
shows, name the view with why) and run it again until it readsok: true.
Output
journeys.yaml at journeys_path, the step files under evidence_dir, and
journeys-check.json beside journeys.yaml.
Rules
- Walk; do not guess. Every
showsis what the step's answer shows. - Every main section of the prototype is some journey's goal.
- A goal is what the person wants to have, never a screen or a rule.
- Never take a data-changing step on a deployed site unless
may_change_dataistrue. - No view is left silent: on a journey, or named as not walked, with why.