flybrain/docs/loop-review.md
acamilo 660c3cf00d
Some checks failed
ci / node 22 (test + typecheck) (push) Has been cancelled
ci / rust stable (cargo test --workspace --release) (push) Has been cancelled
ci / infra/tests/lint.sh (push) Has been cancelled
ci / playwright apps/stage (allowed to fail) (push) Has been cancelled
flybrain v0.4.0: public tree (history retained privately)
2026-09-21 15:09:46 +00:00

3.8 KiB

Loop review: the standing authorization and the ethos check

The operator, 2026-09-17: "loop watcher. checks for loops. kicks off fable review agent." … "the loop check auto improves the harness without oversight from me as long as changes match the ethos of the project."

The loop

  1. The release watchdog (infra/bin/fly-watchdog check 10) flags a suspected loop: few distinct macros, a short sequence repeating, no growth in places explored. It exports fly_loop_suspected and writes /run/fly/wd/loop.json. It never acts.
  2. The coordinator session (Fable) checks that marker on a schedule. On a flag it pulls the live checkpoint read-only (pct pull, into .local/checkpoints/, never committed), and spawns a review agent with the trap brief: reproduce from the checkpoint with the real cartridge and examples/trap_hunt.rs, name the mechanism, fix it inside the macros, prove it with a ROM-gated test and the trap hunt before/after, run the gates.
  3. Fable reviews the diff against the ethos check below, merges with --no-ff, tags, builds from the tag, deploys with 05-deploy.sh once, restarts flysim and flystage only, verifies on the encoder output and /status, and records the release in docs/stream-mvp-plan.md. No approval round trip with the operator; he sees the record.

The ethos check (every one must hold, or the fix is not shipped)

  • The ROM is never modified. Game memory is read, never written. The only write into the emulator is the joypad register. (docs/design/macros.md section 12.)
  • Knowledge lives inside macros, never in the choice: no ranking, prior, weight, default action, or scripted objective decides which button the fly presses. A fix may change what a macro knows, what buttons the scene puts on the pad, and what a macro does once chosen.
  • Nothing presses for the fly. No timeout, watchdog or fallback ever issues a button. A scene with nothing sensible to press has an empty pad and waits.
  • The button readout is untouched: lif-1ms-f64-v2, fly-kc-mbon-rstdp-v2, the Game Boy preset's numbers, the direction and pulse channels. The macro group may only gain calibration or masking rules that apply equally to every channel.
  • The reward catalog and the adapter version do not change. The compatibility string is byte-identical (--print-compatibility), so the live checkpoint carries over.
  • Ledgers are session state, never checkpointed; a restore starts with no macro running.
  • Every change carries a test that reproduces the trap and a ROM-gated proof where the cartridge is involved; cargo test --workspace, clippy, infra/tests/lint.sh green; the trap hunt from the triggering checkpoint improves (fewer flagged windows, more distinct tiles).
  • Honesty on screen and in chat stays true: the mode chip, the pad, the ticker and the templates describe what actually runs.
  • Commits are plain, no attribution trailers; only tagged commits reach the release box; the bridge and the push unit are not restarted for a macro fix.

Anything outside this list (a reward change, a decoder change, a new mode, a change to what the fly is allowed to do) stops and waits for the operator.

Scope (the operator: "scope. harness. macros. systems.")

The standing authorization covers three areas and nothing else:

  • harness: the sim loop's macro layer, scene detection, ledgers, the trap hunt, benches, tests, the catalog's places and the map/geography data;
  • macros: every macro script, palette binding and precondition;
  • systems: infra, units, watchdog, deploy, capture, bridge plumbing, the stage's rendering of what already exists. Out of scope without the operator: the brain (kernel, plasticity, readout numbers, populations), the reward catalog and adapter version, new modes or doctrine, on-screen copy, anything that changes what the fly is allowed to do.