mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-04 21:58:56 +00:00
feat(process): a failed show verdict re-routes to ask without a fresh budget (#726)
A non-green show verdict that found "something to decide" went down the same path as "fix the code": S6 with a limit of 2. Promoting the task to track:ask was left to the agent's memory, with no named criterion and no trace, and the exhausted budget only surfaced on the next S7 - after a fix nobody would read. The structured verdict now carries `route` (fix | reclassify) and an optional `criterion` (one of the six show criteria of PROCESS.md section 5). The trust boundary reads a missing route as fix, rejects one outside the dictionary and rejects reclassify on a green verdict. `reviewRoute` in process-track.mjs is the single decision: on a code review of an unconfirmed show it moves the task to track:ask and S3-spec; on an owner-confirmed show it adds `blocked` and asks the owner; anywhere else reclassify degrades to fix with a note. The verdict that spends the last cycle sets review-4 at once; the stage budget is shared across tracks, so promotion changes the limit (4), not the count. The "Решение по вердикту" step makes one `process-track.mjs route` call (from dev, like the track step) and only executes its output: comment from a file, labels from add/remove lists, status via status-label.mjs as before. The track step also emits `confirmed` and a `route_note` for the review prompt; the review document anchor gains a route tail that the old reader still parses; wait-verdict reports the two new pipeline comments. The guard's own spent >= limit check stays as the safety net. Issue: #726 User-Visible: no Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
This commit is contained in:
@@ -7,7 +7,8 @@
|
||||
// Этот скрипт делает опрос сам и ГОВОРИТ только при смене состояния: одинаковое
|
||||
// состояние не будит никого. Что доставляется: смена статусной метки (вердикт),
|
||||
// отказ конвейера (комментарий «Ревью не запускалось» / «Слияние отменено» /
|
||||
// «Автоматическое ревью не отработало»), `blocked`, `review-4`, а при `--sha` —
|
||||
// «Автоматическое ревью не отработало»), маршрут вердикта show (#726: трек
|
||||
// повышен до ask / вопрос владельцу), `blocked`, `review-4`, а при `--sha` —
|
||||
// исход Validate на этом SHA. Исторические комментарии до последнего запроса
|
||||
// S4/S7 образуют baseline: иначе новый раунд немедленно завершался по старому
|
||||
// failure. Событие текущего раунда, даже опубликованное до запуска waiter,
|
||||
@@ -36,6 +37,10 @@ export const PIPELINE_EVENTS = [
|
||||
{ re: /^\*\*Код-ревью зелёное — вердикт выше в силе/m, kind: 'merge-conflict', text: 'конвейер: вердикт зелёный, слияние конфликтует — ребейз (rebase-on-dev.mjs) и снова S7' },
|
||||
{ re: /^Автоматическое ревью не отработало/m, kind: 'failure', text: 'конвейер: прогон ревью упал — метка не менялась, смотреть логи, сообщить владельцу' },
|
||||
{ re: /^Лимит циклов ревью исчерпан/m, kind: 'exhausted', text: 'конвейер: лимит циклов исчерпан — решение владельца' },
|
||||
// #726: маршрут вердикта show. После исчерпания: тот же комментарий может нести
|
||||
// и маршрут, но решение тогда за владельцем — первым находится `exhausted`.
|
||||
{ re: /^\*\*Ревью show: решать есть что — трек повышен до `track:ask`\.\*\*/m, kind: 'reclassify', text: 'конвейер: трек повышен до ask: полное ТЗ в теле issue, код класса A не пушить до S5' },
|
||||
{ re: /^\*\*Ревью show: решать есть что — вопрос владельцу\.\*\*/m, kind: 'owner-question', text: 'конвейер: вопрос владельцу о треке show — ждёт владельца' },
|
||||
{ re: /^Конвейер ревью не запущен:/m, kind: 'refused', text: 'конвейер отказал (blocked/review-4) — читать комментарий' },
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user