I1600 — The challenge is one recorded run, and every public surface replays it
Record one scenario in which a worker strays outside its scope, claims it is done, hands over, and is refused until the repository's own test passes; render that run on the homepage and on /challenge/; make README.md's first transcript a step of it; and verify the public site serves it after publication.
DONE wave 0 · p1 · implementation profile · runs alone
Part of public-proof — A visitor sees the product prove itself, and can check every claim it makes.
Objective
Record one scenario in which a worker strays outside its scope, claims it is done, hands over, and is refused until the repository's own test passes; render that run on the homepage and on /challenge/; make README.md's first transcript a step of it; and verify the public site serves it after publication.
Why
The tool's differentiator is what it refuses to accept, and the site showed that only as disconnected command illustrations. A newcomer needs one story, and a link from outside needs a page. Every public sentence about it must stay a projection of a run that happened, which is why each surface is held to the recording by a gate.
Current state
No use case shows check refusing a file outside scope, because a scenario step could only invoke the tool. The homepage hero is the lifecycle console. There is no /challenge/ route. README.md's first block is hand-written. catalogue.json carries no scenario, so maturity reads described everywhere.
Desired state
Use case catch-an-agent-that-says-it-is-done runs with worker steps; site/data/generated/challenge.json is its run; /challenge/ and the homepage replay it; site-check, the derivation and scripts/pages verify --smoke hold each surface to it.
Scope
- lib/usecase.sh
- lib/finish.sh
- share/schemas/majordomus/use-case
- .ai/repo/use-cases
- test
- scripts
- site
- README.md
- docs/USE_CASES.md
- docs/LAUNCH.md
- docs/README.md
- .ai/repo/ci/pages.yaml
- .github/workflows/pages.yml
Out of scope
- Analytics, testimonials, adoption numbers, or any claim the repository cannot derive
- Per-page generated social images
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- usecase validate refuses a worker step in a live scenario, beside run, and without an exit code
- the challenge scenario's recorded run shows a scope refusal, a finish refusal on a failing verification, a handover resumed through context, and an accepted finish
- scripts/site-check fails when /challenge/ or the homepage misses a recorded line, renders a different number of steps, or does not link a guarantee a comparison row stands on
- scripts/generate-site-data refuses a challenge that does not pass, refuses nothing, does not end accepted, leans on a claim that is not guaranteed, or whose README transcript is not a recorded step
- finish prints one blocking doctrine per line
Validation
- bash test/run.sh 632_a_scenario_shows_the_worker_it_judges
- bash test/run.sh 103_obligations
- scripts/generate-site-data --check
- scripts/site-check
Evidence required
- challenge_recorded
- site_holds_the_run
- public_site_serves_it
Evidence
| covers | type | command | result | at commit |
|---|---|---|---|---|
| challenge_recorded | test | MJ_TEST_JOBS=4 bash test/run.sh 632_a_scenario_shows_the_worker_it_judges 103_obligations | ok 632 (worker step recorded as actor worker; refused in a live scenario, beside run, and without an exit code) and ok 103 (finish prints one blocking doctrine per line) at master 1393d9ef2a; site/data/generated/challenge.json holds 10 steps: check refused (scope), finish refused twice on 'sh test/parse.sh', handover then context, accepted finish | 1393d9e |
| site_holds_the_run | ci | gh run view 38083715376 --json jobs (validate on master 890e112d04, the site job runs scripts/generate-site-data --check and scripts/site-check --no-sync) | site job success, pages job success; 890e112d04..1393d9ef2a changes no file under apps, lib, scripts, site/templates or test (25 campaign documents only); site-check holds /challenge/ and the homepage replay to every recorded line, the step-panel count, the challenge CTA and each guarantee link, and generate-site-data refuses a challenge with no refusal, a non-guaranteed claim or a README transcript that is not a recorded step | 1393d9e |
| public_site_serves_it | artifact | curl -fsS https://majordomus.dev/challenge/ | grep -o 'data-outcome=\"[a-z]*\"' | sort | uniq -c; curl -fsS https://majordomus.dev/ | grep -cE 'href=\"[^\"]*/challenge/\"[^>]*data-cta=\"challenge\"'; curl -fsS https://majordomus.dev/build.json | HTTP 200; 10 step panels (4 accepted, 3 change, 3 refused) = the 10 steps challenge.json recorded; the homepage's first call to action links /challenge/; build.json names master 890e112d04, version 0.20.0, dirty false | 1393d9e |
Risk
The derivation now runs one more scenario and the homepage replaces its hero console; the console moves under how it works rather than leaving, so the gate that holds every recorded lifecycle panel to the homepage is unchanged.
Timeline
- started
- 2026-10-11T04:18:57Z
- verified
- 2026-10-11T04:40:44Z
- completed
- 2026-10-11T04:40:59Z
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I1600.yaml. Read it back with majordomus plan show I1600.