docs(backlog): record egress activation + batch-approval (D) in RETRO

ab7e4be (egress activation) and 4b0024f (batch source-list approval) move to RETRO;
§D is now fully landed except the standalone web-approval client (needs network/SearXNG).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-21 07:15:15 +00:00
parent 4b0024f7d9
commit eeb6830387
2 changed files with 9 additions and 8 deletions
+6 -7
View File
@@ -33,14 +33,14 @@ matching bullets below are superseded; only the noted follow-ups remain live:
- **C-A1** brief echo-back gate — `1df7af5` *(follow-up: `planner.md` brief_echo + `role_pipeline` metadata to activate)*
- **C-A2** stage-level plan checkpointing — `1a1b5cc`
- **B §4** architect contradiction-check (display-only) — `eae0a0c` *(follow-up: decision emit hook + in-session L3 embedding)*
- **D** dedicated `SourceFetched`/`LowQualityExtraction` events — `b098d87`; dynamic per-session egress allowlist — `027ff1f` *(follow-up: thread sessionId into `NetworkHostRule`; batch fetch-approval still unbuilt)*
- **D** dedicated `SourceFetched`/`LowQualityExtraction` events — `b098d87`; dynamic per-session egress allowlist — `027ff1f`, **activated** `ab7e4be` (session state threaded into assessment input); batch source-list fetch-approval — `4b0024f`
- **B §5** reviewer static-first (runner + event + context-exclusion, live-wired) — `447fc7a` *(follow-up: a stage that emits `StaticFindingsRecordedEvent`)*
- **G** narration-lane lag — `eff8f8d`
- **E** tui-go go.mod directive fix — `1e6699a`; markdown rendering — `da72ee5`; session list / resume view — `1f7a5d9`; per-event render-matrix golden tests — `2a99e15`; approval ergonomics (queue + tier-gated confirm) — `d5afcd3`
- **B §2** plan-derived diff manifest — `641051b`
**Remaining (deeper / lower-verifiability):** D batch fetch-approval (approval-flow surgery); H freestyle follow-ups (graph re-route, child-session runner); the 5 dormant follow-up activations (A1 planner prompt, A3 producer, B§4 decision hook, egress sessionId, B§5 static_check stage); §E plan-comparison view + idea-board→profile.
**Remaining (deeper / lower-verifiability):** H freestyle follow-ups (graph re-route, child-session runner); the dormant follow-up activations (A1 planner prompt, A3 producer, B§4 decision hook, B§5 static_check stage); §E plan-comparison view + idea-board→profile.
**§E tui-go remaining (UNBLOCKED — Go via `GOTOOLCHAIN=auto` go1.24.2):** plan comparison view; idea-board→profile promotion.
**Still blocked in this sandbox:** F live-QA gates + D §6 web approval client (need local model / SearXNG / GPU).
@@ -105,11 +105,10 @@ web_search (T1) + web_fetch (T2) in `:infrastructure:tools`, `research.toml`
- [ ] **§6 web approval client** — the one larger unbuilt piece. Third client on the existing
Ktor REST+WS bus: approval cards + event strip + session list. Behind WireGuard/Tailscale
only, never public. Independent track (spec ordering #5).
- [ ] **§3 batch fetch-approval at source-list level** — currently per-fetch T2; operator
should approve the source list once, not each URL.
- [ ] **Dedicated `SourceFetched` / `LowQualityExtraction` events**quality +
content_sha256 currently ride inside `ToolExecutionCompletedEvent` metadata only.
- [ ] **Dynamic per-session egress allowlist** — currently static `networkAllowedHosts` + T2 gate.
- [x] **§3 batch fetch-approval at source-list level** — `4b0024f`. `POST /sessions/{id}/approve-sources`
→ one `EgressHostsGrantedEvent` for the whole list. → RETRO.
- [x] **Dedicated `SourceFetched` / `LowQualityExtraction` events**`b098d87`. → RETRO.
- [x] **Dynamic per-session egress allowlist**`027ff1f`, activated `ab7e4be`. → RETRO.
- [ ] **Fresh-machine runtime install** — copy `research.toml` + `prompts/` + `schemas/` and
the `[[artifacts]]` / `[tools.research]` config entries into `~/.config/correx`
(already done on this box; repo source is `examples/workflows/` + `docs/schemas/`).
+3 -1
View File
@@ -31,13 +31,15 @@ Nine tracks, each compiled + unit-tested green before commit.
| `2a99e15` | tui-go per-event render-matrix golden tests (37 cases) + a coverage guard that parses `protocol.go` so any new event type without a golden fails | E §2 |
| `d5afcd3` | tui-go approval ergonomics: navigable pending-approval queue (no modal stacking) + `y/n/e` keys + tier-gated T3+ arm/confirm | E §3 |
| `641051b` | Plan-derived diff manifest: `PlanStage.writes` + `PlanDerivedManifest.deriveAllowedWrites`/`combine`, unioned into `StageConfig.writeManifest` at compile, enforced by the existing containment matcher | B §2 |
| `ab7e4be` | Egress allowlist **activation**: `resolveSessionEgressHosts` threads the session's `EgressAllowlistProjection` state into `ToolCallAssessmentInput` at `runPlane2Assessment`, so `NetworkHostRule` now consults the live per-session union (was fed `emptySet()`) | D (activation) |
| `4b0024f` | Batch source-list fetch-approval: `POST /sessions/{id}/approve-sources``SourceListHosts.extract` (java.net.URI, lower-cased, ports stripped, dossier-line tolerant) → one `EgressHostsGrantedEvent`; live allowlist then auto-clears those web_fetches (no per-URL T2) | D |
### Follow-ups created this pass (refiled into BACKLOG)
- **C-A1 activation** — `planner.md` must emit a `brief_echo` block and `role_pipeline.toml` must set `briefEcho="true"` / `briefEchoSource` for the gate to fire live (model-dependent → live-QA).
- **C-A3 producer** — nothing emits `CritiqueOutcomeCorrelatedEvent` yet; the calibration projection has no live feed until a reviewer-loop producer records finding outcomes.
- **B §4 wiring** — `ArchitectContradictionChecker` is unwired: needs an architect-decision emit hook on the server side, and prior decisions embedded into L3 in-session (today they only land at session end).
- **A §4 llama wiring** — `LlamaServerHealthProbe` is unregistered: an `HttpClient` + tokens/sec telemetry aren't exposed to the health-monitor scope yet (`// TODO(wiring)` in `Main.kt`).
- **D egress wiring** — `NetworkHostRule` consults the session set via a pure helper but is fed `emptySet()`: `ToolCallAssessmentInput` carries no `sessionId`, so going live needs session context threaded into the assessment input (`// TODO(wiring)` in `NetworkHostRule.kt`). Batch fetch-approval (approve a source list → one `EgressHostsGrantedEvent`) still unbuilt — needs approval-flow surgery.
- **D egress wiring** — ✅ DONE (`ab7e4be`): session egress state is now threaded into `ToolCallAssessmentInput` at `runPlane2Assessment`, so `NetworkHostRule` consults the live union. Batch fetch-approval ✅ DONE (`4b0024f`): `POST /sessions/{id}/approve-sources` emits one `EgressHostsGrantedEvent` for the whole source list.
- **B §5 static_check stage** — runner/event/filter complete and the filter is live, but no workflow stage emits `StaticFindingsRecordedEvent` yet (`// TODO(wiring)` in `StaticAnalysisRunner.kt`); needs an event-emitting deterministic stage-type seam.
- **E toolchain** — tui-go now builds via auto-downloaded go1.24.2 (`GOTOOLCHAIN=auto`). The committed directive fix assumes 1.26 was unintended; bump if a specific newer release is actually wanted.