fix(ready): per-AC status is not recorded on the ready gate's QA phases — sequant ready and --ready-gate skip the #1525 producer, so the AC record goes stale after the gate

Aperta
#1,621 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
38/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
typescript
Ambito
backend, testing

Direzione di ricerca

Read src/lib/workflow/ac-status.ts and trace the ready gate QA calls through src/lib/workflow/ready-gate.ts, src/commands/ready.ts, and src/lib/workflow/batch-executor.ts. Compare those paths with the existing producer call in the batch executor and the acceptance criteria in src/lib/workflow/ac-status.integration.test.ts. Done means ready gate QA records current AC statuses, loop recording still works, and the producer has one definition.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

enhancement graph-2026-10-review-surface

Follow-up of #1525 (PR #1619); QA 1's human-flagged gap. Blocked by #1525.

Problem

#1525's Done-when reads: "After a QA phase, state.json's AC items and the run log's acs[] say what QA said, per criterion." Its producer, recordAcStatuses (src/lib/workflow/ac-status.ts), has one call site: recordLoopPhaseOutcome in src/lib/workflow/batch-executor.ts, the sequant run quality loop. The ready gate's qa → loop → qa pipeline dispatches its QA phases through runPhaseTracked (src/lib/workflow/ready-gate.ts:841) via the ReadyPhaseRunner wrappers in src/commands/ready.ts:373 (sequant ready) and src/lib/workflow/batch-executor.ts:1086 (sequant run --ready-gate). None of the three calls the producer.

So sequant run is covered and sequant ready / --ready-gate are not: after a gate run, the AC record and acs[] still say what the last loop QA said, which is older than the gate's own verdict, and every renderer that reads the record (#1526) shows the stale row. ready-gate.ts holds no StateManager; ready.ts gets one from getStateManager().

Candidate fix sites, not decided here:

  1. The two ReadyPhaseRunner wrappers (ready.ts:373, batch-executor.ts:1086): two call lines, the gate module untouched.
  2. runPhaseTracked in ready-gate.ts, given a StateManager through RunReadyGateOptions.
  3. executePhaseWithRetry in src/lib/workflow/phase-executor.ts, so every caller gets it and the loop hook at batch-executor.ts retires: one producer, one call site. Touches #1471's file.

Acceptance Criteria

  • AC-1: A QA phase run by the ready gate writes the AC record. Evidence: npx vitest run src/lib/workflow/ac-status.integration.test.ts -t "ready gate" → ≥ 1 passed, 0 failed (real StateManager on a temp dir, no fs mock; a stub ReadyPhaseRunner returns a QA PhaseResult whose output carries AC rows; after the gate path runs, getAcceptanceCriteria(issue).items carry those statuses)
  • AC-1 is classified as a gate test by isGateTestEvidence; the PR body carries its SEQUANT_MUTATION record (remove the producer call from the gate path → the new case fails; restore).
  • AC-2: The producer keeps one definition and the loop path still records. Evidence: grep -rn 'export async function recordAcStatuses' src --include='*.ts' | wc -l | tr -d ' ' → 1 and npx vitest run src/lib/workflow/ac-status.integration.test.ts → ≥ 7 passed, 0 failed (the six #1525 cases plus the new one)
  • AC-3: No skill directory is touched. Evidence: git diff --name-only $(git merge-base origin/main HEAD)..HEAD | grep -cE '^(plugin/|\.claude/skills/|templates/skills/)' → 0 (constraint)

May touch

src/commands/ready.ts, src/lib/workflow/ready-gate.ts, src/lib/workflow/batch-executor.ts (the --ready-gate wrapper and, under fix 3, retiring the loop hook), src/lib/workflow/phase-executor.ts (fix 3 only), src/lib/workflow/ac-status.integration.test.ts, CHANGELOG.

Non-Goals

  • Changing what the producer parses or writes (#1525, and the SEQUANT_AC marker issue).
  • Rendering (#1526).
  • No edits under plugin/, .claude/skills/, templates/skills/ (plugin freeze).
Lingua principale
TypeScript
Stelle
1
Fork
1
Merge medio
10h 59m
PR unite (30g)
86

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di sequant-io/sequant

Tutte le issue di sequant-io/sequant

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.