58 lines
3.8 KiB
Markdown
58 lines
3.8 KiB
Markdown
# 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.
|