Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions docs/superpowers/plans/2026-07-30-plan-8-go-edge-hardening.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Plan 8 — Go edge hardening (SSE client + snapshot + WAL)

**Depends on:** Plans 1–7 (merged to `main`, including PR #16)
**Target branch:** `feat/go-edge-hardening`
**Status:** **DONE** — PR A (#18), PR B (#20), PR C (#21) merged. Next: dashboard (§13 step 13).
**Target branch:** `feat/go-edge-hardening` (historical; work landed via split PRs)
**Goal:** Wire the Go edge verifier to the control-plane sync surface: versioned SSE client, atomic in-memory snapshot (scores/keys/policy), atomic on-disk snapshot persistence, and a bounded local decision WAL with flush + drop metrics.

**Maps to:** productization design §4.5 (edge sync + decision path), §4.7 (degraded modes), §13 step 12.
Expand Down Expand Up @@ -101,7 +102,7 @@ Plan 8 **does not** redo RFC 9421 (already Plan 3). It replaces mock trust/key s
- Default `wal_max_bytes = 256 MiB`; on full → **drop oldest** + increment `decisions_dropped_total` (Prometheus counter)
- Enterprise `no_drop_decisions` (from policy or flag): block writers when full; size via `max(8 GiB, ceil(p99_wal_bytes/s × required_outage_seconds × 1.5))` with `required_outage_seconds` default **900** (independent of snapshot age)
- Flush worker: batch by count/time with `batch_id` + `payload_hash`; POST to control-plane decision ingest when the route exists
- **v1 pragmatism:** if decision ingest HTTP API is not yet exposed on the control plane, implement WAL + metrics + an internal flush interface with a **stub transport** (log/no-op) behind an interface; do **not** block Plan 8 on building the full CP ingest handler — track as Task follow-up / Plan 8 PR C if needed. Schema for `decision_*` already exists (migration 006).
- **v1 pragmatism (executed):** PR B shipped WAL + metrics + stub flush transport; PR C (#21) wired `POST /v1/decisions/batch` + HTTP flush. Schema for `decision_*` already existed (migration 006).
11. **Config flags (edge):**
- `VERILINK_CONTROL_PLANE_URL` (required for sync mode)
- `VERILINK_API_KEY` (required for sync mode)
Expand Down
10 changes: 5 additions & 5 deletions docs/superpowers/plans/HANDOVER.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Handover Note — VeriLink Productization

> **Updated:** 2026-07-31
> **Repo HEAD:** `main` @ Plan 8 PR B (#20) merged
> **Status:** Plans 1–8 PR A+B done. Plan 8 PR C (decision ingest) in flight.
> **Next session:** Land Plan 8 PR C → dashboard (design §13 step 13)
> **Repo HEAD:** `main` @ Plan 8 PR C (#21) merged
> **Status:** Plans 1–8 done (A+B+C).
> **Next session:** Dashboard (design §13 step 13)
Comment thread
qodo-code-review[bot] marked this conversation as resolved.

---

Expand Down Expand Up @@ -76,13 +76,13 @@ User judgment: **Plans 1–4 are covered well enough to move on.** Remaining wor

---

## Plan 8 — Go edge hardening — PR C IN FLIGHT
## Plan 8 — Go edge hardening — DONE

- Plan doc: `docs/superpowers/plans/2026-07-30-plan-8-go-edge-hardening.md` (merged PR #17)
- Design: §4.5 + §4.7 + §13 step 12
- **PR A (#18):** `internal/edgeverifier` snapshot + apply + SSE/cpclient + disk + proxy read-path — **merged**
- **PR B (#20):** decision WAL + flush interface + metrics — **merged**
- **PR C:** control-plane `POST /v1/decisions/batch` + HTTP flush transport — **in progress** (`feat/go-edge-hardening-pr-c`)
- **PR C (#21):** control-plane `POST /v1/decisions/batch` + HTTP flush transport — **merged**
- **RFC 9421 already done** (Plan 3) — Plan 8 replaces mock trust/key sources with synced state

### What’s after Plan 8 (§13)
Expand Down
Loading