How To Admit A Wave
You have a topic in ongoing state. You want to admit a new wave under it.
Recipe
- Confirm topic state.
topic.yamlshowsstate: ongoing. Ifpending, move toongoingfirst (or admit a remediation wave that justifies reactivating). - Authoritative wave id. Compose
wave_idfollowingwave-N-<slug>pattern; ensure no collision with existing waves in this topic. - Add wave entry to
topic.yaml. Required fields:wave_id,slug,state(start ascandidate)primary_closure_goal(one paragraph)deps(list of prior closed waves this depends on; can be empty)owner_domain(one primary owner domain)parallelizable_after(one of admitted values)selected: true(if this is now the active wave)
- At most one selected wave. Set previously-selected wave's
selected: false. - Author packet artifact. Use a wave-qualified packet id and filename, for example
packet-wave-2-content-rewrite.md. Required fields arepacket_id,topic_id,wave_id,packet_kind,status,authority_owner,canonical_seams,forbidden_shortcuts,acceptance_invariants,negative_tests, andreopen_conditions. For worker-bound packets, also includeallowed_readsandallowed_writesso the execution boundary is explicit. - Run preflight.
preflight-result-<wave_id>.mdwith verdict. - If authority convergence gate fires (packet kind is
authority/spec/redesign/preflightor refs.nimi/spec/): run pre-implementation audit; recordresult_kind: audit, verdict: PASS. - Update wave state.
state: candidate → admittedintopic.yamlonce preflight (and audit, if required) PASS. - Update
topic.yaml.last_transition_reason. Concise reason likewave-2-foo-admitted_after_pre_audit_pass.
What To Watch For
| Symptom | Meaning |
|---|---|
Two waves both selected: true | Reject; only one selected at a time |
| Wave admitted without preflight | Reject; preflight is the stop-line |
Wave touches .nimi/spec/ without pre-audit | Reject; authority convergence gate must fire |
deps references a wave id that does not exist | Reject; deps must be real |
owner_domain says multiple domains | Reject; one primary owner per packet |
| Packet id omits the wave identity | Reject; generated packet-*.md names can become ambiguous |
Reader Scenario
You are managing a docs remediation topic. Wave-1 closed; user accepted; wave-2 needs admission.
| Step | Output |
|---|---|
| Confirm topic ongoing | Yes |
Wave id wave-2-content-rewrite | Composed |
| Add to topic.yaml | state: candidate, selected: true |
| Set wave-1 selected: false | Done |
| Author packet | All required fields present |
| Preflight PASS | Recorded |
| No spec touch → no auth convergence required | OK |
| Move state to admitted | Done |
last_transition_reason updated | "wave-2-content-rewrite_admitted_after_user_acceptance_of_wave_1" |
Wave-2 is now ready for dispatch.