Agentiskt arbetsflöde

Granskningsåterkoppling

Behandla kommentarer från Codex / CodeRabbit som misslyckade tester. Agenten kör igen tills granskningarna är rena.

Maskinöversatt från engelska — källa: reviewer-feedback-loop.md.

Implementeringsstatus: Designanteckning — kodifierar den stående minnesregeln om Codex-granskningspolling (feedback_codex_review_loop.md) in i PRD-till-PR-pipelinen.

Byggt idag: disciplinen (minnesreglerna feedback_codex_review_loop.md och feedback_no_auto_merge_until_full_ci_and_review.md) — människor kör gh api repos/{org}/{repo}/pulls/<n>/comments manuellt efter varje push och kör agenten igen på P1/P2.

Mål-tillägg: automatiserad polling på be-agent-service/apps/server/src/pipeline/codex-poll.ts, severitets-klassificerare, och återinträdes-hook in i Editor-steget. Idempotens via comment-id-spårning i summary.json. Ingen av denna kod existerar än; en rg "pulls/.*comments" be-agent-service returnerar inga träffar.

Externa granskare (Codex, CodeRabbit) postar inline-kommentarer efter varje push, inte bara vid initial PR-öppning. Att behandla deras kommentarer som rådgivande betyder att riktiga buggar slinker igenom. Loopen nedan behandlar varje oadresserad P1 / P2 som ett misslyckat test och kör Editor-steget igen automatiskt.

Pollingen

Efter varje git push kör Reviewer-feedback-agenten:

gh api repos/{org}/{repo}/pulls/{n}/comments

Svaret är en lista av inline-kommentarer, var och en bärande:

Agenten klassificerar varje kommentar efter allvarlighet (regex på vanliga granskarformat — **P1**, 🚨, Critical, osv.) och lagrar dem i PR:ns statusobjekt.

Allvarlighet → åtgärd

Allvarlighet Åtgärd
P1 Hård blockering. Kör Editor igen med kommentaren som input. Lös innan merge — argumentera aldrig ned.
P2 Mjuk blockering. Kör Editor igen om inte agenten har ett motiverat motargument commitat till PR-beskrivningen.
P3 Kvittera i PR-beskrivningen; blockera inte.
Stil / nit Kvittera tyst i PR-beskrivningen; blockera inte.

Agenten argumenterar ned via en kommentar som:

Granskaren tog upp "X kan regressera under hög samtidighet". Den relevanta kodvägen är enkeltrådad per request-scope; samtidighet kan inte trigga denna väg. Ändrar inte.

Om granskaren svarar med en förfining fortsätter loopen.

Återinträde i editorn

När en P1 / P2 landar och agenten beslutar att fixa:

  1. Reviewer-feedback-agenten lägger till kommentaren som ett ärende i en scratchpad på worktree-branchen.
  2. Den startar Editorn igen med inputs.review_findings = [...] plus den ursprungliga specen.
  3. Editorns iterationsloop har nu två stoppvillkor: spec-tester går grönt OCH granskningsfynd åtgärdade.
  4. Efter den nya commiten kör Verifier igen och loopen upprepas.

Idempotens

Pollingen är idempotent — kommentarer försvinner inte, så återkörningar ser samma uppsättning. Agenten spårar "comment id → status" i summary.json så att:

När loopen ska kortslutas

Två fall där loopen avsiktligt avslutas utan att adressera en kommentar:

  1. Inaktuell kommentar — filen eller raden finns inte längre efter en refactor. Agenten postar ett "ej längre tillämpligt"-svar och går vidare.
  2. Utanför omfång — kommentaren refererar till beteende utanför denna PR:s spec. Agenten lägger upp en uppföljningsplan i wiki/plans/ och svarar med en länk.

Båda kräver att en motivering commitas till PR-beskrivningen så att granskare ser exit-resonemanget.

Varför detta inte är valfritt

Stående minnesregler:

Båda föregår detta avsnitt men har samma form: externa granskar-bottar kan misslyckas tyst om man inte pollar, och parallella merges kan kapa förbi "required check"-grinden om man inte väntar på aggregatet grönt. Pipelinen kodifierar båda som grindar orkestreraren inte kan hoppa över.

Korsreferenser