# Board Protocol Rules

This file is the canonical rule source for the emergent board protocol.

- `evals/inspect_ai` should project these rules into direct-model prompts.
- `skills/emergent-thinking/SKILL.md` should reference these rules instead of restating a divergent version.
- `skills/emergent-thinking/references/how-to-use-subagents.md` should extend these rules, not redefine them.

## Move Order

The board is a sparse search position, not a diary.

1. Reselect first if another path clearly dominates the selected line.
2. If the selected line is still structurally incomplete, do one exact structural sweep next.
3. Only after line selection and structure are coherent may proof closure or implementation happen.

External evidence outranks chat momentum.

## Structure Sweep

- `line.structure-sweep` repairs only the currently selected path.
- If `selected_path: none`, select the best path before any structural, proof, or implementation move.
- If the board exposes `missing_supports_from_selected`, copy that exact list into `supports`.
- If `missing_supports_from_selected: []`, return `"supports":[]`.
- Do not re-list already-covered goals from `active_goals` or `active_cells`.
- If `missing_tool_on_selected: true` and there is exactly one active tool, attach that tool.
- If `missing_tool_on_selected: true` and there is no active tool, attach `"tool/default"`.
- Do not choose `proof.close` or `implement.draft` while support debt or tool debt still exists on the selected path.

## Findings And Proof Closure

- Real validation findings should create or preserve narrow `finding/...` pressure on the broken path or target.
- A passing proof should close only the target that current evidence actually supports.
- If the blocker is gone but proof debt still remains on evidenced goals or constraints, keep closing proof debt instead of stopping at `ready`.
- Completion is allowed only when `board judge` is `converged` and the attention vector has `forcingThreats=0`, `lineDebt=0`, and `proofDebt=0`.
- If the board is still `empty`, `framing`, `contested`, or `ready`, the loop is still open even when artifacts already exist.

<!-- block:prompt-emergent-full:start -->
Priority order:
1. If a different path clearly dominates the selected line, reselect first.
2. If the selected line is structurally incomplete, do one exact structural sweep next.
3. Only after line selection and structure are coherent should proof or implementation moves happen.

Exact structural sweep:
- `line.structure-sweep` repairs only the selected path.
- If `selected_path: none`, choose the best path before any structure, proof, or implementation move.
- If the board shows `missing_supports_from_selected`, copy that exact list into `supports`.
- If `missing_supports_from_selected: []`, return `"supports":[]` and do not restate already-covered goals from `active_goals` or `active_cells`.
- If `missing_tool_on_selected: true` and `active_tools` has exactly one tool, return that tool in `uses`.
- If `missing_tool_on_selected: true` and `active_tools` is empty, return `"uses":"tool/default"`.
- Do not choose `proof.close` or `implement.draft` while support debt or tool debt still remains on the selected path.

Use external evidence over chat momentum.
<!-- block:prompt-emergent-full:end -->

<!-- block:prompt-emergent-compact:start -->
Priority:
1. Better line -> reselect.
2. Selected line debt -> one exact sweep.
3. Proof / implementation only after no line-selection or structure debt remains.

Exact sweep:
- `selected_path: none` -> pick the best path first.
- `supports` must equal `missing_supports_from_selected` exactly.
- If `missing_supports_from_selected: []`, return `"supports":[]`.
- Never re-list goals already covered by `active_cells`.
- If tool debt exists, use the only active tool or `"tool/default"` when no tool exists.

Evidence beats chat momentum.
<!-- block:prompt-emergent-compact:end -->
