4.0 KiB
4.0 KiB
QA Plan: brief echo-back gate — bcc59d2
Plan-pipeline-addenda §A1. Drafted from the diff (commit bcc59d2) per the BACKLOG QA rule.
Status: DRAFT Run date / operator: BACKLOG item: §C A1 "brief echo-back gate".
Preconditions
- server build/branch: master @
bcc59d2(or later) — rebuild only with the server stopped. - real planner-capable model running (the echo stage is an inference; needs a live model that can emit the structured restatement — cannot be exercised with a stub).
- runtime install (like the research workflow): copy
docs/schemas/brief_echo.json→~/.config/correx/schemas/,examples/workflows/prompts/brief_echo.md→~/.config/correx/prompts/, and add thebrief_echo[[artifacts]]block fromexamples/workflows/artifacts.config.tomlto~/.config/correx/config.toml. Also copy the updatedrole_pipeline.toml. - launch via the
role_pipelineworkflow.
Acceptance gate (one sentence)
The gate is correct iff a faithful restatement lets the pipeline proceed to the planner, while a restatement that drops a requirement or invents a file emits
BriefEchoMismatchEvent, fails thebrief_echostage retryably (planner does NOT run), and the same mismatch is recomputed identically on replay.
Checks
| # | Action | Expected observable evidence | Result |
|---|---|---|---|
| 1 | Run role_pipeline on a normal request; let analyst→architect→brief_echo run | correx events <id> shows a brief_echo stage running + producing a validated brief_echo artifact; flow reaches the planner stage; NO BriefEchoMismatchEvent |
|
| 2 | Inspect the brief_echo artifact (artifact viewer v / events) |
It contains goal / referenced_files / referenced_symbols / acceptance_criteria reflecting the analyst brief | |
| 3 | Force a misread: prompt/seed so the echo DROPS a requirement (or use a model run that does) | BriefEchoMismatchEvent with the dropped requirement in uncoveredRequirements; the brief_echo stage FAILS retryably; planner has NOT produced a plan |
|
| 4 | Force a hallucinated file in the echo (reference a path not in the brief) | BriefEchoMismatchEvent with that path in hallucinatedFiles; stage fails retryably; feedback names the invented file |
|
| 5 | Let the retry happen with the feedback | The re-run echo (corrected) passes → flow proceeds to planner; retry budget respected (≤ max_retries, then surfaces to operator) | |
| 6 | Confirm symbols are non-blocking | An echo referencing a symbol absent from the brief is recorded in hallucinatedSymbols but does NOT by itself fail the stage (isMismatch ignores symbols in v1) |
|
| 7 | correx replay <id> on a session that had a mismatch |
The mismatch is recomputed identically from the recorded analysis + brief_echo artifacts; double-read digest stable; no environment re-query (pure diff) | |
| 8 | Non-opted pipeline (any workflow without brief_echo=true) |
Behaves exactly as before — gate is a no-op; grounding still runs on the analyst stage |
Evidence sources: correx events <id> (stage chain + BriefEchoMismatchEvent), the artifact viewer for the
brief_echo content, correx replay <id> for determinism.
Out of scope (NOT covered this pass)
freestyle_planning.tomlwiring (deliberate follow-up — gate is on role_pipeline only).- Tuning the COVERAGE_THRESHOLD (0.34) — adjust only if live runs show false mismatches/passes.
- A1's sibling addenda items A2 (stage checkpointing) / A3 (calibration) — separate BACKLOG items.
Disposition
- PASS → MOVE the §C A1 entry into
RETRO.md(citebcc59d2, run date, evidence). - FAIL → file each failure as a numbered finding back into
BACKLOG.md(action + repro + wrong/missing signal), fix, re-run only the failed checks. Set Status: FAILED until green.- If live runs show the deterministic diff is too strict/loose (false mismatches or missed misreads),
that's a tuning finding on
COVERAGE_THRESHOLD/ the hallucination heuristic — record the observed case.
- If live runs show the deterministic diff is too strict/loose (false mismatches or missed misreads),
that's a tuning finding on