Multi-actor flows
Test workflows that span multiple users and cross-role state propagation.
A flow is a journey across multiple actors:
Admin invites a candidate → candidate signs up → admin approves → candidate sees approval in their dashboard.
Traditional E2E tests each stage in isolation. They miss state propagation bugs: what if the admin’s approval doesn’t actually surface on the candidate’s dashboard?
Nitpick’s multi-role-e2e skill tests flows as a single coordinated journey.
Defining a flow
In nitpick.yaml:
flows:
- name:"Candidate onboarding"
description: |
Admin logs in at /admin/invitations and creates a new invitation.
Candidate receives the invite link, goes to /signup, fills the form,
and submits. Admin reviews the application at /admin/candidates and
clicks Approve. Candidate sees the approval on their /dashboard.
Plain language. No YAML schema to remember.
What runs
When a flow is in scope, Nitpick spins up a Flow Lead subagent (multi-role-e2e skill). The Flow Lead:
- Parses the flow narrative: identifies stages, actors, transitions
- Delegates each stage to a Junior QA (same
prd-e2e-orchestratorskill as per-page tests) - Advances state between stages, if admin submits a form, that form is actually submitted, creating the record the next stage depends on
- Runs cross-actor assertions “after admin approves, candidate’s dashboard should reflect it”
Cross-actor assertions
These are the checks traditional E2E misses. Example:
Stage 1: Admin creates invitation for candidate@example.com
Stage 2: Candidate signs up at /signup
Stage 3: Admin approves candidate
Cross-actor check:
After Stage 3, switch to candidate auth state, navigate to /dashboard,
assert"Approved" badge is visible.
If the backend fires the approve API but doesn’t update the candidate’s dashboard query, Nitpick catches it. Traditional tests don’t.
Per-stage reports + unified flow report
Each stage gets its own compliance report (generated by the Junior QA running that stage). The Flow Lead aggregates them into a unified flow report:
- Timeline visualization (stage-by-stage progression)
- Per-stage pass/fail
- Cross-actor assertion results
- Blocked stages (if Stage 2 fails, Stage 3 and 4 are blocked)
- Aggregate metrics
Scope controls
Flows run by default when --scope full is set. To test only flows for a targeted change:
nitpick run --scope iterative --change"I refactored the candidate approval logic"
Nitpick will propose flows that touch candidate approval.
To skip flows entirely:
nitpick run --scope targeted --url /dashboard/tasks
Data isolation
Each flow run uses unique data (timestamp-suffixed emails, UUID identifiers) so repeated runs don’t collide. Downstream stages find the entity via captured_data from the advancing stage.