States
abandoned is the explicit terminal exit. One wave may be open per project at a time.
Gates
Lenses
Three are fixed —amplify (what’s working, push it), avoid (what’s failing, stop it), entropy (what hasn’t been tried) — and two are written for the wave with distinct charters. Each reads the snapshot independently; none sees another’s findings until synthesis. reflection.create opens the wave.

The project graph a wave publishes.
Consolidation and publish
Passing reflection review makes the research decision authoritative and starts code consolidation: one immutable proposal must account for every experiment, and a separateconsolidation_reviewer checks it. The runner then compare-and-swaps that exact proposal into Merv’s central Git ref. Only after that receipt does publish happen, atomically: record the graph version, apply approved claim changes, create the approved experiment wave, record the event.
When a wave is triggered
The project has no status column of its own; its state is derived:
Experiment-scoped status calls stay focused on that experiment and carry the project’s reflection signal alongside.
Running one: Running research → Reflection wave.
