Run a passing check, repeat it safely, then compare a failing check. You will see why finishing a Run and passing verification are different results.
This exercise uses built-in synthetic fixtures. It does not verify or release a product. You need a local Factory checkout with Node.js 26.8.1 or later. Run every command in the same terminal at the repository root.
Create a separate workspace
Create a new private directory for this exercise. Keep the printed path if you want to inspect the records later.
fixture_demo_dir=$(mktemp -d -t factory-tutorial)
printf '%s\n' "$fixture_demo_dir"
Run a passing check
node src/cli.ts verify pass --run-id tutorial-pass --state-dir "$fixture_demo_dir"
The command prints one JSON document. Find "outcome": "verified" and "state": "valid" inside currentValidity. The exit code is 0. Your output also includes the stored Evidence and the Attempt that produced it.
Repeat the same request
Run the same command again, without changing its arguments.
node src/cli.ts verify pass --run-id tutorial-pass --state-dir "$fixture_demo_dir"
The result still says verified, but action is now replayed. Factory returns the recorded result rather than starting a second Attempt.
Inspect the record
node src/cli.ts inspect --run-id tutorial-pass --state-dir "$fixture_demo_dir"
Find "action": "inspected". Inspection starts no worker. It reads the historical Verdict and checks whether its Evidence and source pins remain valid now.
Compare a failing check
node src/cli.ts verify fail --run-id tutorial-fail --state-dir "$fixture_demo_dir"
This command deliberately exits with code 1 and reports "outcome": "failed". The Run has finished, but the fixture failed its acceptance check. A finished Run alone cannot establish success.
What you learned
You have two Runs with different Verdicts and an unchanged recorded result after a retry. Keep the temporary directory while exploring; it contains only this exercise's records.
If a result says unresolved or invalidated, read its detail and currentValidity.reasons. A changed checkout or runtime can invalidate the pins. Start a fresh exercise directory after resolving that change; do not alter the existing records.
For command options and result fields, see Guarded verification reference. For the distinction between a Verdict and customer value, read the lifecycle.
