Skip to content

public-proof — A visitor sees the product prove itself, and can check every claim it makes

One recorded scenario tells the whole story — a worker strays, claims it is done, hands over, and is refused until the repository's own test passes — and it drives the homepage hero, its own route, the README's first transcript and the live smoke check, each held to the recorded run by a gate rather than by care.

ACTIVE 3 of 5 issues done

ready
2
blocked
0
active
0
verify
0
done
3
cancelled
0

Problem

A developer who has never seen Majordomus meets a homepage whose first viewport describes a supervisory control layer in its own vocabulary, beside a console that illustrates each lifecycle command separately. Nothing on it shows the tool doing the one thing that sets it apart — refusing work a worker calls finished — as one story a newcomer can follow, and no page exists that a link from outside could send somebody to. The README's first transcript is hand-written. Underneath, the use-case catalogue reached the site without any scenario since scenarios moved into the body, so every executable use case read as merely described.

Outcome

One recorded scenario tells the whole story — a worker strays, claims it is done, hands over, and is refused until the repository's own test passes — and it drives the homepage hero, its own route, the README's first transcript and the live smoke check, each held to the recorded run by a gate rather than by care.

Current state

The homepage hero replays the lifecycle command by command; there is no challenge route; README.md's first block is an illustration; scenario steps can only invoke the tool, so no use case shows a file outside the claimed scope being refused; catalogue.json carries no scenario and every use case's maturity is described; scripts/pages verify asks only which commit the public site serves.

Desired state

A worker step lets a fixture scenario show the change it judges. The challenge use case runs in the site derivation and its run is site/data/generated/challenge.json; /challenge/ and the homepage replay render it and scripts/site-check holds both to it in both directions; README.md's first transcript is a step of it, refused otherwise; maturity is derived from scenarios again; and scripts/pages verify --smoke asks the public bytes for the challenge after every publication.

Scope

  • lib/usecase.sh
  • lib/finish.sh
  • share/schemas/majordomus/use-case
  • .ai/repo/use-cases
  • test/fixtures/commands
  • test/cases
  • scripts/generate-site-data
  • scripts/site-check
  • scripts/pages
  • scripts/lib/interaction-specs
  • site
  • README.md
  • docs
  • .ai/repo/ci/pages.yaml
  • .github/workflows/pages.yml

Out of scope

  • Analytics or any third-party script on the site; the offline rule refuses one, and nothing here needs one
  • Fabricated adoption figures, testimonials, logos or benchmark comparisons
  • A new command that audits a repository Majordomus is not installed in; doctor needs init, and that is a product decision, not a page
  • Generated social images per page; the existing card stays until a generator exists for it

Acceptance criteria

  • A fixture scenario can carry a worker step, recorded with actor worker, refused in a live scenario and beside run or obligation
  • The challenge scenario passes against the tree's own tool, refuses at least once and ends with the work accepted, and the derivation refuses to publish it otherwise
  • /challenge/ and the homepage carry every recorded command and decision line of the run, and nothing else stands in for them
  • README.md's first transcript is a recorded step of the challenge, and the derivation refuses it otherwise
  • catalogue.json carries each use case's scenario and maturity is derived from it
  • The public site serves the merged commit and its smoke routes after the Pages workflow publishes it

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
  • scripts/pages verify --commit <master sha> --smoke

Evidence required

  • challenge_recorded
  • site_holds_the_run
  • public_site_serves_it

Evidence

A milestone is never done because its issues are; the last step is its own acceptance, and it is gated on the rows below.

coverstypecommandresult
challenge_recordedtestMJ_TEST_JOBS=4 bash test/run.sh 632_a_scenario_shows_the_worker_it_judges 103_obligationsok 632 and ok 103 at master 1393d9ef2a; its one issue I1600 is DONE (de14385dd3); site/data/generated/challenge.json holds the 10-step run: check refused on scope, finish refused twice on the failing test, handover then context, accepted finish
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 and pages jobs success; 890e112d04..1393d9ef2a changes no file under apps, lib, scripts, site/templates or test; site-check holds /challenge/ and the homepage replay to every recorded line, the panel count, the CTA and each guarantee link
public_site_serves_itartifactcurl -fsS https://majordomus.dev/challenge/ | grep -o 'data-outcome=\"[a-z]*\"' | sort | uniq -c; curl -fsS https://majordomus.dev/build.jsonHTTP 200; 10 step panels (4 accepted, 3 change, 3 refused) = the 10 recorded steps; the homepage CTA links /challenge/; build.json names master 890e112d04, 0.20.0, dirty false

Issues

Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.

issuestatuswavedepends ontitle
I1600 DONE 0 — The challenge is one recorded run, and every public surface replays it
I2417 DONE 0 — The landing page is a click-through story: an editorial hero and an evidence chain a visitor steps through
I3436 DONE 0 — Every article reads in every language the site declares, and its counterparts are reciprocal
I3437 READY 1 I3436 An article names every language version in one translations table, and every member names the same group
I3438 READY 1 I3436 A translation records the digest of its source, and site-check refuses one its source has moved past

The graph

public-proof dependency graphfrom .ai/repo/project
flowchart LR
    I1600["I1600<br/>The challenge is one recorded run, and every public surface replays it"]:::done
    I2417["I2417<br/>The landing page is a click-through story: an editorial hero and an evidence chain a visitor steps through"]:::done
    I3436["I3436<br/>Every article reads in every language the site declares, and its counterparts are reciprocal"]:::done
    I3437["I3437<br/>An article names every language version in one translations table, and every member names the same group"]:::ready
    I3438["I3438<br/>A translation records the digest of its source, and site-check refuses one its source has moved past"]:::ready
    I3436 --> I3437
    I3436 --> I3438
    classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
    classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
    classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
    classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
    classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
    classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px

Canonical record: .ai/repo/project/milestones/public-proof.yaml. Read it back with majordomus plan show public-proof.

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