# QODY CI gate — build-validation policy blocking (MC #106804, 2026-08-05)

# QODY CI gate — build-validation policy sada BLOKIRA merge (MC #106804)

**Datum:** 2026-08-05 · **Izvršio:** FlowForge (dispatch John) · **Nezavisno verifikovao:** verifier agent (6/6 PASS, živi REST pozivi)

## Šta je promijenjeno
- Azure DevOps, repo QODY, grana `refs/heads/main`: **Build validation policy prebačena s `isBlocking=false` na `isBlocking=true`** (policy id=2, revision 1→2).
- Od sada se **nijedan PR ne može completati dok "CI Gates" validation build ne prođe** — ručni complete prije builda vraća `GitPullRequestUpdateRejectedByPolicyException`.

## Zašto
2026-08-03 je PR #301 (payment fix) mergovan **ručno bez ijednog uspješnog validation builda** — policy je postojao ali je bio savjetodavan (`isBlocking=false`). Uz to je CEO primao ~30 "canceled build" mailova jer agentska velocity mergeva otkazuje superseded buildove. Puna istraga: MC #106804, forge dokument `~/system/prompts/forged/106804.md`.

## Živi dokaz (ne "green build" nego stvarni pokušaj proboja)
- Probni PR #316: pokušaj complete PRIJE builda → **ODBIJEN** policy-jem; PR abandonovan, probni branch obrisan, main HEAD netaknut (`956f9f35`).
- Bypass audit: nijedan ACE na repou nema `PolicyExempt`/`PullRequestBypassPolicy`.
- Evidence: `~/system/evidence/106804/{d0-final,d2,peer-verify}/` (before/after JSON, response JSON-i, nezavisni peer verdikt sa sha256 hashevima).

## Šta NIJE urađeno (svjesno) i zašto
1. **Reviewer policy (min 1, bez self-approve) NIJE upaljena**: org ima **samo jedan ljudski ADO identitet** (Alem Basic — svi agenti rade kroz njegov PAT), pa bi obavezan nezavisni reviewer blokirao 100% mergeva. Čeka drugi identitet → vezano za Entra povezivanje (#106841, pauzirano CEO odlukom "Ne" 2026-08-05).
2. **2. self-hosted parallel slot NIJE kupljen**: ADO org nema podešen billing (nije vezan za Azure subscription, korijen: org nije povezan s Entra tenantom). CEO odluka: ne raditi Entra plan za sada. QODY CI ovim NIJE pogođen (ide na MS-hosted pool); Bilko cancel-lanac se rješava throttlingom (#106809).

## Otvoreni rizici (za buduće hardening odluke)
- Alemov PAT identitet drži `EditPolicies` + `ManagePermissions` na QODY repou → **isti identitet koji merga može i ukinuti policy**. Gate je stvaran, ali samoodbranjiv nije — pravi fix traži odvojene identitete (Entra).
- Company Mesh peer-verify infrastruktura (lokalni Ollama) je srušena — peer-verifikacija za ovaj task rađena native-agent putem; Ollama treba restart/popravku.

## Povezani taskovi
#106804 (ovaj), #106809 (Bilko main validacija), #106810 (Rollback-Rehearsal istraga), #106811 (mail digest — TEK nakon punog merge ciklusa s novim gate-om), #106841 (Entra, pauzirano), #106802 (slot, blocked), #106815 (PAT rotacija).

## Dopuna 2026-08-05 — istraga 2 pala builda (MC #106810)
Dva "failed main" runa od 2026-08-03 (20:18, 20:35) NISU glavni CI: to je ručni **stage-rollback rehearsal alat** (`Bilko-Gate0-Stage-Rollback-Rehearsal`, defId=4) koji dira samo stage ACA app-ove. Pao je na vlastitom query bugu (`az containerapp revision list` bez `--all` → prazan rezultat → fail-closed). Bug ispravljen 2026-08-04, run 20260804.4 SUCCEEDED. "Requested for Alem Basic" je PAT artefakt. Nema buildNumber kolizije (obje definicije koriste ADO default brojanje). Zaključak: resolved-in-place. Evidence: `~/system/evidence/106810/istraga-2026-08-05.md`.