Voost Control · valul #1265–#1272 · 10–12 iul 2026

Valul Kaya: 8 probleme dintr-o seară de operare

Pe 10 iulie ai livrat PRD #1245 și apoi ai folosit sistemul pe o zi reală. Seara aia a produs 8 issues — nu dintr-un plan, ci din frecarea cu realitatea: un apel Kaya, două canare agățate, un digest poluat. Pagina asta e harta valului: de unde a venit fiecare problemă, ce o repară, și ce a prins plasa de verificare încrucișată pe drum.

ACTUL 1

Seara de 10 iulie, oră cu oră

Fiecare incident din seara aia a devenit un issue. Apasă pe un moment ca să vezi ce s-a întâmplat de fapt:

Toate în aceeași seară, toate din folosire — nu din audit. De-asta valul ăsta nu e un PRD: e copilul operării.

ACTUL 2

Rejucarea apelului Kaya

Cel mai bun test al valului: același apel, prin sistemul de atunci și prin cel de acum. Comută:

ACTUL 3

Harta valului: 8 issues → 8 PR-uri

Apasă pe oricare pentru problemă → fix → unde e PR-ul:

ACTUL 4

Plasa încrucișată: cine a verificat pe cine

Fiecare PR a fost implementat de un model și verificat de celălalt: Fable a scris → gpt-5.6-sol a făcut review; gpt-5.6-sol a scris → Fable a auditat (cu run roșu re-verificat). Toate suitele erau verzi înainte de verificare — astea sunt defectele găsite după:

ImplementareFable sau gpt-5.6-sol
Suite verzilint · build · 2900+ teste
Verificare încrucișatăcelălalt model
Remedierepe branch, cu test

Niciunul n-ar fi fost prins de CI: suitele erau verzi. Verificarea a mers în ambele direcții — iar de două ori verificatorul uman al verificatorului (wrapper-ul) a respins finding-uri Codex greșite înainte să ajungă pe PR.

ACTUL 5

Ce rămâne pe masa ta

Ordinea de merge (minimizează conflictele; unde scrie ⚠, e o rezolvare mică de conflict):

  1. #1273 (date relative) — curat
  2. #1274 (dry-run safety) — curat
  3. #1275 (căutare) ⚠ inventarul PP: regenerează cu pnpm pp:inventory, nu-l uni de mână
  4. #1277 (canary + backfill; migrarea rulează la deploy) ⚠ ADR-0043: păstrează ambele note de extensie
  5. #1278 (ticket settle, ADR-0087) — curat
  6. #1279 (sweep horizon, ADR-0088) ⚠ INDEX.md: uniunea rândurilor, next-free → 0089
  7. #1281 (extracție; se retargetează singur pe main după #1273) ⚠ help CLI, docs/API.md, INDEX.md (next-free → 0090), inventar PP
  8. #1283 (UI grupare) — ultimul ⚠ docs/API.md + tasks.api.test.ts: păstrează ambele părți

Ordinea și conflictele sunt verificate mecanic cu git merge-tree de review-ul global — 9 conflicte reale, toate la nivel de docs/inventar, niciunul în codul de produs.

După deploy: migrarea #1277 rulează singură; apoi închizi manual cele două apeluri blocate — voost calls close-no-action --dry-run--apply pe f5bbaeea / f7d80128. La final: pnpm dev:teardown pe cele 8 worktree-uri.

Verdictul review-ului global (Fable, pe compunerea celor 8): valul se compune — primitivele de date și ancoră sunt partajate, nu bifurcate; excluderea de canary acoperă și suprafețele noi. Un singur gap real de interacțiune, aflat în codul de pe main, nu în val: o Decizie de sweep emisă înainte ca aprobarea unui tichet să închidă task-ul poate fi încă aprobată din digest și răstoarnă rezultatul (done → cancelled). Tichet: #1284, de rezolvat înainte sau imediat după trenul de merge.

Rămase deschise: #1284 (guard-ul de mai sus), #1276 (frații de căutare), cele 8 task-uri Kaya deja create în producție (le superseduiești după deploy, acum în siguranță cu #1274), și curățenia discului intern (17 GiB — sub pragul de freeze al guard-ului).

Decizia de design a valului (a ta): gate-urile hard sunt doar pentru verificări deterministe; clasificarea semantică rămâne la AI și cel mult avertizează — consemnată în ADR-0089, argumentată în explainer-ul gate-urilor pe cuvinte.

Un PRD îți dă felii. O seară de folosit sistemul îți dă adevărul.
Valul ăsta e adevărul, cu plasă de siguranță.