### EDGE 1 — NOT-A-FINDING with a reason: PASS (0) ###
  section           : ## Observations
  observation items : 1
      OK  1. NOT-A-FINDING
observations gate OK — every observation is either filed or explicitly declared
EXIT=0

### EDGE 2 — FILED with a row that does NOT resolve: REFUSE (1) ###
     `FILED: R-99999` does not resolve — no row for R-99999 in OPEN-ITEMS.md or CLOSED-ITEMS.md

An observation that lives only in REPORT.md has a lifetime of ONE SESSION — this file is overwritten every time. That is how the cooldown-grain finding was lost on 2026-08-23 and had to be re-derived the next day.
Fix: add `FILED: R-NNN` naming the row you opened for it, or `NOT-A-FINDING: <why this is not worth a row>`. Opening the row is the default; declaring is the exception and needs its reason stated.
EXIT=1

### EDGE 3 — NOT-A-FINDING with no reason: REFUSE (1) ###
     `NOT-A-FINDING:` carries no reason — the reason is the whole point of the marker

An observation that lives only in REPORT.md has a lifetime of ONE SESSION — this file is overwritten every time. That is how the cooldown-grain finding was lost on 2026-08-23 and had to be re-derived the next day.
Fix: add `FILED: R-NNN` naming the row you opened for it, or `NOT-A-FINDING: <why this is not worth a row>`. Opening the row is the default; declaring is the exception and needs its reason stated.
EXIT=1

### EDGE 4 — BOTH markers on one item: REFUSE (1) ###
     carries BOTH `FILED:` and `NOT-A-FINDING:` — decide which it is

An observation that lives only in REPORT.md has a lifetime of ONE SESSION — this file is overwritten every time. That is how the cooldown-grain finding was lost on 2026-08-23 and had to be re-derived the next day.
Fix: add `FILED: R-NNN` naming the row you opened for it, or `NOT-A-FINDING: <why this is not worth a row>`. Opening the row is the default; declaring is the exception and needs its reason stated.
EXIT=1

### EDGE 5 — section present, NO numbered items: INCONCLUSIVE (2) ###
OBSERVATIONS GATE INCONCLUSIVE: found the section '## Observations' but no numbered items under it.
  Items must be a numbered list (`1.`, `2.` …). If the section is deliberately empty, remove the heading — an empty section reads as coverage while providing none.
EXIT=2

### EDGE 6 — REPORT.md absent: INCONCLUSIVE (2) ###
OBSERVATIONS GATE INCONCLUSIVE: no REPORT.md at /tmp/claude-1000/-mnt-5-hdd-felhom-eu-git/3b17bdbd-9113-4908-9b30-15678f2978bc/scratchpad/gate11/does-not-exist.md
  This gate is registered here because this repo keeps one. If it was removed deliberately, unregister the gate in the runner rather than leaving it unreadable.
EXIT=2

### EDGE 7 — the R-182 TRAP: a bare mention must NOT satisfy the gate (1) ###
     neither `FILED: R-NNN` nor `NOT-A-FINDING: <reason>`

An observation that lives only in REPORT.md has a lifetime of ONE SESSION — this file is overwritten every time. That is how the cooldown-grain finding was lost on 2026-08-23 and had to be re-derived the next day.
Fix: add `FILED: R-NNN` naming the row you opened for it, or `NOT-A-FINDING: <why this is not worth a row>`. Opening the row is the default; declaring is the exception and needs its reason stated.
EXIT=1
