Skip to content

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

coverstypecommandresultat commit
challenge_recordedtestMJ_TEST_JOBS=4 bash test/run.sh 632_a_scenario_shows_the_worker_it_judges 103_obligationsok 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 finish1393d9e
site_holds_the_runcigh 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 step1393d9e
public_site_serves_itartifactcurl -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.jsonHTTP 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 false1393d9e

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.

Searches the titles and descriptions of every page this site publishes.