docs: reconcile BACKLOG→RETRO for static_check stage + critique producer (e46777e)
Per the hygiene rule: the §B-§5 static_check stage seam + emitter and the §B-§6/A3 critique-outcome producer are built and unit-verified, so move them out of the live "missing" list. Both narrowed to their remaining live-QA-gated *activations* (a sandboxed production CommandRunner for §B-§5; model-emitted CritiqueFindingsRecordedEvents for §6), with a dated RETRO entry + commit map. Updated QA-reviewer-static-first (the producing stage now exists — check 4 reframed from "blocked on unbuilt seam" to an activation step) and its README index line. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+17
-12
@@ -36,13 +36,13 @@ quick commit map:
|
||||
- **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`)*
|
||||
- **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 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.
|
||||
**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/`):
|
||||
@@ -71,13 +71,17 @@ health probes shipped (`266bbf0`, `64a90e7`) → see RETRO. Remaining:
|
||||
`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.
|
||||
- [ ] **§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.
|
||||
@@ -94,9 +98,10 @@ 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).
|
||||
- [ ] **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`
|
||||
|
||||
|
||||
@@ -53,6 +53,23 @@ viewer scrolling one line at a time; `db27b34` adds paging. Item moved out of BA
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-22 — reviewer reliability: static_check stage + critique calibration producer (branch `feat/backlog-burndown`)
|
||||
|
||||
Two deterministic role-reliability tracks whose consumer halves already existed but had nothing
|
||||
feeding them. Both built + unit-verified (Gradle green, detekt clean); their *activations* are
|
||||
model-/sandbox-gated and stay narrowed in BACKLOG.
|
||||
|
||||
| Commit | What | Item |
|
||||
|--------|------|------|
|
||||
| `e46777e` | **§B-§5 deterministic `static_check` stage seam + emitter.** `StaticCheckStageExecutor` runs a configured tool (`static_tool`/`static_argv` via stage metadata) through the existing `StaticAnalysisRunner` and emits `StaticFindingsRecordedEvent`; `DefaultSessionOrchestrator.enterStage` dispatches any `metadata["stage_type"]=="static_check"` stage to it instead of the LLM subagent and advances on the unconditional exit edge; `TomlWorkflowLoader` gained `stage_type`/`static_tool`/`static_argv` fields; `role_pipeline.toml` carries a `static_check` stage between implementer and reviewer. **No-op until** a sandboxed, workspace-scoped `CommandRunner` is wired + `static_argv` set (live-QA-gated). Tests: `StaticCheckStageExecutorTest` (4) + `StaticCheckStageTest` integration (1). | B §5 |
|
||||
| `e46777e` | **§B-§6 / A3 critique-outcome producer.** New `CritiqueFindingsRecordedEvent` (+ `CritiqueVerdict`) is the producing side — a critic's findings + verdict per iteration, with `modelHash`. `CritiqueOutcomeCorrelator` (pure, in the reviewer-loop runtime) decides UPHELD / DISMISSED / INCONCLUSIVE per critic and finding id; a hook in `completeWorkflow`/`failWorkflow` correlates recorded findings into `CritiqueOutcomeCorrelatedEvent`s at loop resolution (no-op + idempotent), feeding the existing `:core:critique` calibration projection. **Dormant until** the reviewer/plan-critic emit `CritiqueFindingsRecordedEvent`s (model-gated). Tests: `CritiqueOutcomeCorrelatorTest` (8) + `CritiqueCalibrationWiringTest` integration (1). | B §6 / C-A3 |
|
||||
|
||||
Both follow the same shape as the earlier dormant-activation work: the deterministic seam + the
|
||||
event wiring land and are unit-proven now; the LLM-/sandbox-side activation is the live-QA-gated
|
||||
follow-up. `docs/qa/QA-reviewer-static-first.md` updated (no longer "producing stage not built").
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-21 — wider grants + revoke (branch `feat/backlog-burndown`)
|
||||
|
||||
Operator-requested (not a prior BACKLOG item): grants that outlive a single session, plus a
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
**Status:** DRAFT (PARTIAL — see gap)
|
||||
**Run date / operator:**
|
||||
**BACKLOG item:** §B-§5 "reviewer static-first INFRA" — runner + event + context-exclusion `447fc7a`.
|
||||
**BACKLOG item:** §B-§5 "reviewer static-first" — runner + event + context-exclusion `447fc7a`; deterministic `static_check` stage seam + emitter `e46777e`.
|
||||
|
||||
---
|
||||
|
||||
## Gap up front (read first)
|
||||
|
||||
The exclusion **filter** is live-wired into reviewer context assembly, and `StaticAnalysisRunner` + `StaticFindingsRecordedEvent` are built and unit-tested — but **no stock workflow stage emits `StaticFindingsRecordedEvent` yet** (the deterministic static-check stage-type seam is an open BACKLOG follow-up). So this pass verifies the **filter behavior by injecting the event**; the end-to-end "a stage runs detekt and the reviewer skips those findings" flow is blocked on that seam.
|
||||
The exclusion **filter** is live-wired into reviewer context assembly; `StaticAnalysisRunner` + `StaticFindingsRecordedEvent` are built; and the deterministic **`static_check` stage seam + emitter now exist** (`e46777e`): the orchestrator runs any `stage_type = "static_check"` stage through `StaticCheckStageExecutor`, and `role_pipeline.toml` carries one between implementer and reviewer. The remaining gap is **activation**: that stage is a **no-op until** a sandboxed, workspace-scoped `CommandRunner` is wired into the orchestrator AND the stage sets `static_argv`. So checks 1–3 verify the **filter by injecting the event** (unchanged); check 4 is now an **activation** check (configure `static_argv` + wire a runner) rather than "blocked on an unbuilt seam".
|
||||
|
||||
## Preconditions
|
||||
|
||||
@@ -29,16 +29,16 @@ The exclusion **filter** is live-wired into reviewer context assembly, and `Stat
|
||||
| 1 | Seed a `StaticFindingsRecordedEvent` for the session with a known finding (e.g. an unused-import lint at `Foo.kt:12`). | The event is in `correx events {id}`. | |
|
||||
| 2 | Drive the implementer→reviewer step so reviewer context is assembled. | The reviewer's input context (server log of the assembled prompt / context pack) **does not** contain a feedback entry restating the seeded static finding — `excludeStaticFindingsFromReview` stripped it. | |
|
||||
| 3 | Seed a finding that does **not** match any retry-feedback entry. | Non-matching entries are untouched; only restatements of recorded static findings are dropped. | |
|
||||
| 4 | (When the static-check stage seam lands) run a workflow whose static stage emits the event for real. | The reviewer never re-raises the compiler/detekt issues the deterministic tool already caught. _(Deferred — seam not built.)_ | |
|
||||
| 4 | **Activate** the `static_check` stage: wire a sandboxed `CommandRunner` into the orchestrator and set `static_argv` (e.g. `./gradlew detekt --console=plain`) on the role_pipeline stage, then run a workflow that produces a patch with a real lint/compile issue. | A `StaticFindingsRecordedEvent` with the tool's parsed findings appears in `correx events {id}`, and the reviewer never re-raises those issues. _(Activation is the open §B-§5 follow-up — the seam + emitter are built.)_ | |
|
||||
|
||||
Evidence sources: server logs of the assembled reviewer context / context pack, `correx events {id}`.
|
||||
|
||||
## Out of scope (explicitly NOT covered this pass)
|
||||
|
||||
- The **producing** static-check stage (open BACKLOG §B-§5 follow-up: "a stage that emits `StaticFindingsRecordedEvent`"). Check 4 stays deferred until that seam exists.
|
||||
- **Production runner activation** (open BACKLOG §B-§5 follow-up): wiring a sandboxed, workspace-scoped `CommandRunner` is itself live-QA-gated. The seam + emitter are built (`e46777e`) and unit-verified (`StaticCheckStageExecutorTest`, `StaticCheckStageTest`); check 4 exercises the activation once a runner is wired.
|
||||
- The reviewer prompt half (shipped earlier, `3467826`).
|
||||
|
||||
## Disposition
|
||||
|
||||
- **PASS (partial)** → record in `RETRO.md` that the **filter** is live-verified (checks 1–3) and keep the §B-§5 *producing-stage* follow-up open in BACKLOG. Do not claim the full static-first loop until check 4 passes.
|
||||
- **PASS (partial)** → record in `RETRO.md` that the **filter** is live-verified (checks 1–3) and keep the §B-§5 *production-runner activation* follow-up open in BACKLOG. Do not claim the full static-first loop until check 4 passes.
|
||||
- **FAIL** → numbered findings. Status: FAILED until green.
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ to RETRO with the run date + cited evidence; on FAIL → refile each miss as a n
|
||||
| `QA-architect-contradiction.md` | architect contradiction-check (display-only) | `4e08510` `eae0a0c` | model + **llamacpp embedder** + `project.enabled`, 2 sessions/1 process |
|
||||
| `QA-llama-health-probe.md` | LLAMA_SERVER liveness probe | `64a90e7` `9eef936` `266bbf0` | static llama-server you can stop |
|
||||
| `QA-idea-promotion.md` | idea-board → `.correx/project.toml` promotion | `f107ff5` | bound workspace (router model optional — can seed the event) |
|
||||
| `QA-reviewer-static-first.md` | reviewer static-findings exclusion (PARTIAL — producing stage not built) | `447fc7a` | seed `StaticFindingsRecordedEvent` |
|
||||
| `QA-reviewer-static-first.md` | reviewer static-findings exclusion (PARTIAL — stage seam+emitter built `e46777e`; runner activation pending) | `447fc7a` `e46777e` | seed `StaticFindingsRecordedEvent` |
|
||||
| `QA-brief-echo-gate.md` | **ARM-IT** plan: brief echo-back gate (off by default; risky to arm blind) | `1df7af5` | prod-candidate model |
|
||||
| `QA-grants.md` | cross-session grants (PROJECT/GLOBAL) + revoke | `c36d41b` `8df0ec7` | model + a T2+ tool call, 2 sessions, 2 workspaces |
|
||||
| `QA-tui-v2.md` | Bubble Tea v2 + Shift+Enter + native cursor + window title | `d247b19` `85af2c6` | **kitty-protocol terminal** + a server with a resumable session |
|
||||
|
||||
Reference in New Issue
Block a user