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

13 KiB
Raw Blame History

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 viewBLOCKED (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.