| 1 | # Review brief: region HA plan 1b, round 3 |
| 2 | |
| 3 | You are an independent second reader. Review the implementation plan |
| 4 | `docs/superpowers/plans/2026-10-06-region-ha-1b-claim-readers.md` at the |
| 5 | commit named in the prompt, against the tree at the working directory |
| 6 | (Go, module github.com/carlosframework/platform) and the approved spec |
| 7 | `docs/superpowers/specs/2026-10-04-region-ha-box-placement-design.md` |
| 8 | (rev 5.4; rulings H1–H19 in §0). Your round 2 findings are in |
| 9 | `CODEX-PLAN-REGION-HA-1B-R2.md`; the author's answers are the table |
| 10 | "Astra plan round 2: dispositions" at the end of the plan. |
| 11 | |
| 12 | ## Fixed: do not re-argue |
| 13 | |
| 14 | - The spec's rulings H1 to H19, and Paul's approval of rev 5.4. |
| 15 | - The scope rule: plan 1b builds only what needs none of the spec's |
| 16 | L1–L20 claim/moves changes; everything under "Waits for the claim" is |
| 17 | out of scope. |
| 18 | - The controller rulings in the plan's header (six, unchanged). |
| 19 | - Everything stays dormant behind CARLOS_REGION_HA and changes nothing on |
| 20 | a one-box region. |
| 21 | - Round 1 findings you marked resolved in round 2 (R1-1 to R1-4, R1-7), |
| 22 | and round 1 and 2 findings the dispositions mark fixed, unless the fix |
| 23 | itself is wrong; say which, and why. |
| 24 | |
| 25 | ## What changed since round 2 |
| 26 | |
| 27 | - Task 6, `edgesLoopState` (in `internal/host/edgesclaims.go`): a claim |
| 28 | pass now waits for the schedule's `retryAt`, and every pass, claim |
| 29 | passes included, records its outcome through `edgesFileSchedule.done`. |
| 30 | New test `TestEdgesLoopClaimPassesObeyTheRetryBackoff`. |
| 31 | - Task 5, `TestDischargeRefusesStoredRecordsThatAreNotEvidence`: three new |
| 32 | stored cases, one per check (empty mapping, terminated state with a |
| 33 | mapping, a volume with no device). |
| 34 | |
| 35 | Nothing else changed. |
| 36 | |
| 37 | ## What to check |
| 38 | |
| 39 | 1. The round 2 table first: are R2-1 and R2-2 (and so R1-5 and R1-6) |
| 40 | resolved, partly resolved (say what is left), or not resolved? |
| 41 | 2. Then only new findings, in the two changed places or anything they |
| 42 | break. In particular: can recording a claim pass's success through |
| 43 | `edgesFileSchedule.done` advance the change-detection baseline past a |
| 44 | registry change that pass did not publish? Does the backoff gate |
| 45 | delay a timer pass or a change pass that would not have been delayed |
| 46 | before, with the flag off or on? |
| 47 | 3. As before: the code compiles, the tests pass as written, and each new |
| 48 | test fails with its mechanism removed. |
| 49 | |
| 50 | ## Output |
| 51 | |
| 52 | Findings ranked P1 (would not compile, a test fails, or unsafe), P2 |
| 53 | (wrong or missing), P3 (clarity). Each: task and step, the problem, the |
| 54 | evidence (file:line, or the plan's own line), and a concrete fix. Start |
| 55 | with the round 2 table, then new findings only. End with a verdict: |
| 56 | ready to build, or not ready. |
| 57 | |