# CORREX — BACKLOG

> **⚠️ MAINTENANCE RULE — READ FIRST**
> **When an item here is resolved, MOVE it out of this file and into `RETRO.md`.**
> Do not just tick a box and leave it. Cut the entry, paste it into `RETRO.md`
> with the resolving commit hash(es) and the date it landed/was verified. This file
> is the *live* outstanding-work list; `RETRO.md` is the archive of what got done.
> "Resolved" = built **and** verified (live-QA passed where a QA gate is noted).
> Items marked **SHIPPED (pending live-QA)** stay here until their QA gate passes,
> then they move.
>
> **QA RULE — after a feature is done, plan its QA before calling it resolved.**
> Run `/qa-plan <commits|spec>` (or copy `docs/qa/TEMPLATE.md` by hand) to produce a
> `docs/qa/QA-<feature>.md` with observable-evidence checks. A feature is not "resolved"
> until that plan passes live. On PASS → move to `RETRO.md`; on FAIL → refile the misses
> here as numbered findings.

Synthesized 2026-06-14 from the five `docs/plans/2026-06-13-*.md` design specs and
session memory. Pointers are commit hashes / spec sections, not gospel — verify
against current code before acting (memory is point-in-time).

---

## ✅ RESOLVED 2026-06-20 → see `RETRO.md` (branch `feat/backlog-burndown`)

Built + unit-verified this pass (full detail + commit table in `RETRO.md`). **The matching
body bullets below have been cut** (hygiene reconcile 2026-06-22) — what remains in each
section is only the genuinely-live work and the narrowed follow-ups. This index stays as a
quick commit map:

- **G** turnId `/repo`↔`/repo2` collision + WorkspaceStateProbe newline fingerprint — `784accb`
- **I** `.cs`/Godot-Mono symbols — `f715ffa`; structural `.tscn`/`.tres` validator — `0e251d6`
- **A §4** EventStore latency probe (wired) + llama-server probe — `266bbf0`, **registered** `64a90e7` (gated on a configured `llamacpp` provider URL)
- **B §6 + C-A3** `CritiqueFinding` type + calibration projection — `f783eed` *(follow-up: `CritiqueOutcomeCorrelatedEvent` producer)*
- **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`, **activated** `4e08510` (server subscribes to the architect `design` artifact → emits the flag)
- **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`; the deterministic `static_check` stage seam + emitter — `e46777e` *(remaining: production sandboxed-runner activation, live-QA)*
- **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):** H freestyle follow-ups (graph re-route, child-session runner — deep session-lifecycle, want live testing); the dormant *activations* whose deterministic halves are now built (A1 planner prompt; A3/§6 critique calibration — correlator + producer landed `e46777e`, awaiting model-emitted findings; B§5 static_check — seam + emitter landed `e46777e`, awaiting a sandboxed production runner — both live-QA-gated). §E plan-comparison view is BLOCKED (no plan-candidate event; see §E). All cleanly unit-verifiable deterministic tracks are now landed.
**Still blocked in this sandbox:** F live-QA gates + D §6 web approval client (need local model / SearXNG / GPU).

**📋 Live-QA plans drafted** (`docs/qa/QA-*.md`, index `docs/qa/README.md`, env `docs/qa/ENV.md` + `scripts/qa/`):
research-egress (D), architect-contradiction (B§4), llama-health-probe (A§4), idea-promotion (E),
reviewer-static-first (B§5, partial), the **brief-echo-gate ARM-IT** plan (C-A1 — run it before
arming the gate; it's the go/no-go), and **grants** (cross-session PROJECT/GLOBAL + revoke — `c36d41b` `8df0ec7`,
see RETRO 2026-06-21). These features stay listed until their plan **passes live**, then move to RETRO.

---

## A. Observability spec — `docs/plans/2026-06-13-observability-spec.md`

Metrics + CLI + TUI pane and the health backbone are shipped (fe94140, 4f6bfa8,
f8fd260) — those are RETRO candidates once live-QA'd. The §4 LLAMA_SERVER + EVENT_STORE
health probes shipped (`266bbf0`, `64a90e7`) → see RETRO. Remaining:

- [ ] **§4/§3 live health TUI pane** — deferred to follow the metrics cadence
      (projection + CLI first, then pane). `correx health` CLI already exists.
- [ ] **§3 tier-2 stats** — full session-completion summary pane polish (basic pane shipped).
- 🚫 **§3 tier-3 Prometheus/Grafana export** — spec says "deferred indefinitely". **Do not build.**

## B. Role reliability spec — `docs/plans/2026-06-13-role-reliability-spec.md`

§3 analyst keystone (894969d), entity grounding (b050dc4), §2 write-manifest (4e5e4e5),
§5 reviewer prompt/needs wiring (3467826), §5 static-first infra (`447fc7a`), §6
`CritiqueFinding` type + calibration projection (`f783eed`), and §4 architect
contradiction-check (`eae0a0c`/`4e08510`) are shipped — see RETRO. Remaining:

- [ ] **§5 static_check stage — production runner activation only** (seam + emitter built
      `e46777e`, see RETRO). The deterministic stage-type seam, `StaticCheckStageExecutor`, the
      TOML fields, and the role_pipeline stage now exist; the stage is a **no-op until** a
      sandboxed, workspace-scoped `CommandRunner` is wired into the orchestrator AND `static_argv`
      is set. That activation (ShellTool-style ProcessBuilder + session cwd + timeout) is
      live-QA-gated — left for a focused pass with a real workspace.
- [ ] **§6 reviewer must emit structured findings** (correlator + producer built `e46777e`, see
      RETRO). `CritiqueOutcomeCorrelator` + the `CritiqueFindingsRecordedEvent` → outcome →
      calibration chain is built and unit-verified; it's **dormant until** the reviewer/plan-critic
      actually emit `CritiqueFindingsRecordedEvent`s (a `review_report` findings array + prompt
      change). That LLM-side emission is model-dependent → live-QA.
- [ ] **§3 symbol grounding** — deferred; needs a real symbol index (file-path grounding done).
- [ ] **§2 dynamic plan-derived diff manifest** — allowed files from the `impl_plan`
      artifact. Future refinement; static per-stage `writes = [globs]` form is shipped.
- ⚠️ **§4 architect ADR shape** (`alternativesConsidered` required non-empty) —
      **DELIBERATELY NOT TAKEN.** Conflicts with the standing "don't raise alternatives
      unless real cost/breakage" preference already encoded in `architect.md`. Revisit only
      with an explicit rationale; do not add by default.

## C. Plan pipeline addenda — `docs/plans/2026-06-13-plan-pipeline-addenda.md`

Gate code is shipped: **A1** brief echo-back gate (`1df7af5`) and **A2** stage-level plan
checkpointing (`1a1b5cc`) → see RETRO. Remaining:

- [ ] **A1 activation** (model-dependent → live-QA) — `planner.md` must emit a `brief_echo`
      block and `role_pipeline.toml` must set `briefEcho="true"` / `briefEchoSource` for the gate
      to fire live. The gate (`BriefEchoMismatchEvent` + comparator/extractor) is already built.
- [ ] **A3 critique calibration tracking** — the projection (`f783eed`) AND the producer
      (`CritiqueOutcomeCorrelator` + loop-resolution hook, `e46777e`) are now built. Remaining is
      only the model-gated reviewer-side emission of `CritiqueFindingsRecordedEvent`s — tracked as
      the narrowed §6 item above.

## D. Research workflow spec — `docs/plans/2026-06-13-research-workflow-spec.md`

Core workflow is **SHIPPED end-to-end, ON by default** (fb1d970..378ee39): extractor +
web_search (T1) + web_fetch (T2) in `:infrastructure:tools`, `research.toml`
(decompose→gather→report), schemas, prompts. Remaining:

- [ ] **Live-QA the full run** — could not validate in-session (no SearXNG/network in sandbox).
      Needs SearXNG running; exercise triage→fetch-approval→report→artifact viewer.
- [ ] **§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).
- [ ] **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/`).
- 🚫 No headless browser, no LLM-based extraction, no public approval endpoint (non-responsibilities).

## E. TUI requirements spec — `docs/plans/2026-06-13-tui-requirements-spec.md`

§2 last-event clock + unknown-event fallback (8b896b5), §5.1 deterministic command-parse
card (65df3f4), §2 per-event render matrix + coverage guard (`2a99e15`), markdown chat
turns (`da72ee5`), session list / resume view (`1f7a5d9`), approval ergonomics
(`d5afcd3`), and idea-board → profile promotion (`f107ff5`) are shipped — see RETRO.
A second wave of operator-requested TUI work (command palette, @ file picker, CLAUDE.md
L0 injection, inline action rows, free-scroll/help/filter) is archived under RETRO
2026-06-22. Remaining:

- 🚫 **§3/§4 plan comparison view** — **BLOCKED (no data source).** Top-2 candidates side-by-side,
      compact stage graphs, diff-highlighted, lint/critique findings inline. The server emits no
      plan-candidate event — only `workflow.proposed` (candidate *workflows*, not *plans*). Per the
      spec this "lands with the planning pipeline" (a multi-candidate planner), which is unbuilt, so
      there is no wire shape to render against and nothing to unit-verify. Do NOT build a blind TUI
      view; revisit only once a `PlanCandidate`-bearing event exists. (Checked 2026-06-21.)
- ⏸ **§5.2 command-card LLM annotation layer** — deferred by spec ("ship layer 1, live with it,
      then decide whether layer 2 earns its place"). Build only after using layer 1.

## F. In-flight QA gates (move to RETRO when each passes)

These are SHIPPED in code but prompt-/server-/network-dependent and not yet live-verified:

- [ ] **Epic 15 live-QA gate** — server up → `correx events` / `correx replay` on a real
      session, confirm MDC sessionIds in logs. (Code complete a7d5211..75703ec.)
- [ ] **Idea board live-QA** — needs a real router model to emit the `{"ideas":[…]}` block.
- [ ] **Clarification loop + workflow-propose panel live-QA** — both prompt-dependent (need a
      real router/analyst model to emit the structured json blocks).
- [ ] **Research workflow live-QA** — see §D.
- [ ] **TUI kernel-steering + AMD gauge fresh live-QA** — approve+note actually revising the
      *same* stage's output; AMD VRAM/RAM gauge on the real box.
- [ ] **Unit-tested-only fixes, not live-verified:** `1a7eb05` (verdict-edge rejection),
      `e195c79` (stale-parking `OrchestrationPaused ABANDONED_STALE`), `df3ee0b` (bare-id
      narration model match).

## G. Low-severity hardening

The turnId `repomap:` prefix collision + WorkspaceStateProbe newline fingerprint (`784accb`)
and the narration-lane lag (`eff8f8d`) shipped — see RETRO. Remaining:

- ⚠️ **`PreemptRedirectEvent` has no producer** (QA bug #6) — B3 hard re-route is unreachable
      from the TUI. Intended flow: steering → router proposes → operator confirms. Skipped by
      design; build only if the hard-reroute path is actually wanted.

## H. Freestyle mode — deferred follow-ups (epic COMPLETE, B4 PASSED)

- [ ] **Graph re-routing by preemptive steering** — only priority-directive surfacing is built
      today; mid-execution input cannot re-route the compiled graph.
- [ ] **Child-session `SubagentRunner` impl** — seam exists (`InSessionSubagentRunner`);
      child-session is the intended drop-in swap. Sequential only (no-parallel-agents invariant).
- [ ] **Post-lock `ApprovalDecisionResolvedEvent.userSteering` → L0 promotion** — currently
      stays L2; out of freestyle's exercised path (gate is pre-lock).

## I. Gamedev / Godot readiness (operator intent)

`.cs` / Godot-Mono symbols in `RepoMapIndexer` (`f715ffa`) and the structural `.tscn`/`.tres`
`SceneValidator` (`0e251d6`) shipped — see RETRO. Remaining:

- [ ] **(far future) Scene editing behind approval+diff** + derive a fine-tuning dataset from
      the event log. ⚠️ Fine-tuning is on CLAUDE.md's intentionally-NOT-implemented list — needs
      an explicit epic + operator de-listing, not an incidental add.

---

## Ops notes (not backlog items, but bite repeatedly)

- Config copies of `examples/*` in `~/.config/correx` go **stale silently** — e.g. a missing
  `inject_artifact_kinds` in a copied workflow TOML caused invented artifact kinds. Re-sync
  after editing the repo examples.
- **Do not rebuild jars while the server JVM is running** — lazy classloading breaks
  (`NoClassDefFoundError`). Stop the server first.
