Files
correx/BACKLOG.md
T
kami 08b5c63a0f docs: reconcile BACKLOG against shipped work + gitignore tui preview binary
Backlog hygiene per the file's own maintenance rule — resolved items get
moved out, not left ticked-in-place.

- Cut resolved body bullets from BACKLOG §A/B/C/D/E/G/I (health probes,
  static-first infra, CritiqueFinding, architect contradiction-check, A1/A2
  gates, batch fetch-approval, source/egress events, render matrix, markdown,
  session list, idea promotion, turnId/probe/narration, .cs symbols, scene
  validator). All already archived in RETRO's burndown table.
- Narrow partially-done items to their live follow-up rather than delete:
  B5 -> static_check stage emitter only; B6/C-A3 -> CritiqueOutcomeCorrelated
  producer only; C-A1 -> planner-prompt activation only.
- Drop the stale "§E UNBLOCKED" index line (plan-comparison is BLOCKED, no
  PlanCandidate event; idea-promotion shipped f107ff5).
- Archive the operator-requested TUI wave (palette, @ picker, CLAUDE.md L0
  injection, inline action rows, free-scroll/help/filter) in RETRO 2026-06-22
  — never BACKLOG items, would otherwise be orphaned in neither file.
- gitignore apps/tui-go/preview (cmd/preview build artifact).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 08:57:12 +00:00

192 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` *(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):** H freestyle follow-ups (graph re-route, child-session runner — deep session-lifecycle, want live testing); the dormant model-dependent activations (A1 planner prompt, A3 producer, B§5 static_check stage — live-QA-gated, deprioritized to last). §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 (emitter)** — the runner/event/filter are built and live-wired
(`447fc7a`); what's missing is a deterministic workflow stage that actually runs
compiler/ktlint/detekt and emits `StaticFindingsRecordedEvent` (`// TODO(wiring)` in
`StaticAnalysisRunner.kt`). Needs an event-emitting stage-type seam.
- [ ] **§6 `CritiqueOutcomeCorrelatedEvent` producer** (= pipeline-addenda A3) — the
`CritiqueFinding` type + `CriticCalibrationProjection` exist (`f783eed`) but nothing feeds
them; needs a reviewer-loop producer that records finding outcomes. Build once, two consumers.
- [ ] **§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 `CriticCalibrationProjection` exists
(`f783eed`); only the `CritiqueOutcomeCorrelatedEvent` producer is missing. Tracked as the
§6 producer follow-up above (build once, two consumers).
## 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.)
- [ ] **§3 approval ergonomics re-audit** — the spec'd band (single-key y/n/e for T0T2,
mandatory T3+ confirm, navigable queue, never modal-stacked) shipped `d5afcd3`. Re-verify
only because the band has since gained the grant scope-picker (`A`) and inline action rows —
a cheap live look, not a build.
-**§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.