change_id: CHG-2026-014907
risk_class: R2
autonomy_tier: A2
controls: ['TPR-05', 'TRC-01', 'CHG-04']
data_classification: public
originator: olaf@freundcloud.com
agent_identity: svc-agent-platform
model_route: gateway/tier-balanced
supersedes: None
Approach
Wrap, do not restate. The Makefile already defines the loop and the gates, and it is
what CI and AGENTS.md both point at; the justfile calls it. The demo script sequences
those same commands and narrates them.
The only genuinely new artefact is the ordering and the self-check — that the demo knows when it has failed. That is what makes it a test rather than a performance, and it is why this change was worth making rather than writing a runbook.
Files
flake.nixflake.lockdevenv.nixjustfile.envrcscripts/demo/run_demo.shREADME.md
Sequence
flake.nixwith the pinned toolchain. → verify:nix flake checkpasses.devenv.nixdeclaring the same set, deferring to the flake. → verify: it names the same tools and the same Python.justfiledelegating every loop recipe tomake. → verify:just --listis self-explanatory; nomakecommand is restated.scripts/demo/run_demo.sh, nine acts, narrated, exit-coded. → verify:just demo-fastexits zero on a healthy tree, non-zero with a deliberately broken act..envrcfor direnv users. → verify:direnv allowyields the shell.- README pointing at the one command. → verify: the claim matches the recipe.
Risks
| Risk | Likelihood | Mitigation |
|---|---|---|
| The justfile and the Makefile drift into two definitions of “green” | high — the standard fate of a second task runner | Every loop and gate recipe delegates to make; the justfile adds only what make is bad at |
| The demo rots silently between engagements | high | It exits non-zero on a failed act, so just demo-fast is a test and can run in CI |
| Nix becomes a precondition for running the repository | medium | Additive only; python -m venv .venv && make stays supported and is what CI uses |
make negative refuses to run because the tree is dirty |
medium, and it will happen mid-demo | The script surfaces the message rather than swallowing it; the fix is to commit, which is the correct instruction |
| The demo appears to pass because an act printed something plausible | medium | Each act’s exit status is checked, not its output |
Rejected
- Replacing the Makefile with the justfile. CI,
AGENTS.mdand the eval suite all referencemake. Moving them buys tidiness and costs the property that the agent and CI run literally the same commands. - Recording the demo and replaying it. Faster and reliable, and it would make the demonstration exactly the artefact this repository argues against.
- Adding the demo as a gate. It is a rehearsal tool. A gate that runs nine acts on every pull request buys nothing the individual gates do not already prove.
Tests
just demo-fast— the whole sequence, exit-codednix flake check— the environment evaluatesjust ci— check, eval, substitution, negative in CI’s order
Rollback
Delete the four new files. Nothing depends on them: the Makefile, the gates and the workflows are untouched by this change.