# STATE — Gate 1 / Gate 2 a odmítnuté reporty, 4. 10. 2026

Doplnění k `state/2026-10-04_git-status-and-kilo-config.md`. Každé tvrzení má výstup
příkazu nebo je označeno jako neověřené. Zdroje kódu jsou uvedeny s `file:line`.

---

## 1. Brány — [OVĚŘENO 2026-10-04] výstupem příkazu

Interpreter je `python3` (3.12.3). **`python` v tomto stroji neexistuje** — chyba,
která stála jeden cyklus testera.

```console
$ python3 -m pytest -q --collect-only
627 tests collected in 1.75s          # exit 0

$ python3 -m pytest -q
626 passed, 1 skipped in 27.80s     # exit 0

$ python3 -m mypy src/cyberbrain26
Success: no issues found in 70 source files   # exit 0

$ python3 -m ruff check .
All checks passed!                  # exit 0

$ python3 -m mypy --version
mypy 2.3.1 (compiled: yes)          # nainstalováno, odpovídá okamžitě
$ python3 -m ruff --version
ruff 0.16.7
```

**Gate 1: zelená. Gate 2: zelená.** 627 collected = 626 passed + 1 skipped, konzistentní.

### Poslední známý stav cron review logu se shoduje

`.kilo/logs/cron_reviews.log`, záznamy `2026-10-04T08:00:13` a `08:39:13`, uvádějí
`pytest 627 passed; ruff clean; mypy clean (70 files)`. Dnešní nezávislý běh: **627
collected, mypy 70 souborů, ruff čistý**. Pracovní strom se od 08:39 v počtu testů
nezměnil. To je nezávislá shoda, ne převzetí cizího tvrzení.

### F2 (a) — stav

`tests/test_egress_gate_integration.py` je součást zelené suite, takže **Gate 2 pro
F2 (a) je zelená**. [OVĚŘENO]

Otevřená limita, otevřeně popsaná v docstringu testu: `:202` podstrčí prázdnou
`EgressPolicy`, protože `AuthorizedExecutionService.__init__` si vždy sestaví allowlist
vlastního providera (`src/cyberbrain26/execution_plane/secure_gateway.py:113-115`).
Na reálné cestě se tedy deny **nemusí podařit vyvolat**. Viz §4.

---

## 2. Odmítnuté reporty — důvody ze slovníku

### 2.1 `code-reviewer` revize 1 — `REJECT_CONTEXT_MISMATCH`

Nevyplnila ani jednu z 7 otázek v zadání. Žádný řádek nebyl označen
`[OVĚŘENO]`/`[NÁVRH]`/`[HYPOTÉZA]`. Hlavička `CHANGES REQUESTED`, v těle dvakrát
`APPROVED`. Jeden nalezený bod označen `Low`. **Nevydala verdikt, o který byla
požádána** → důvod ze slovníku: `REJECT_CONTEXT_MISMATCH`.

Konkrétně chybné závěry:
- **Doporučila odstranit `if self.egress_gate is not None:`** (`:173`) jako
  „redundantní a neškodnou". To je obrácení směru: podmínka je jediné místo, kde lze
  kontrolu zjemnit, protože `service.egress_gate` je veřejný atribut přepisovatelný bez
  setteru — jak to dělá sám test na `tests/test_egress_gate_integration.py:202`.
- **Ocenila `dest = "http://localhost"`** (`:178`) jako „správné zarovnání s designem".
  Ve skutečnosti je to konstanta vložená nezávisle na tom, kam provider reálně jede,
  takže kontrola `egress.py:112-113` („destination is not a loopback address") **nemůže
  nikdy selhat**.

### 2.2 `security-auditor` — `REJECT_UNVERIFIED`

Čtyři tvrzení jsou v přímém rozporu s údaji, které byly **v samotném zadání** a nebylo
možné je přehlédnout:

| Tvrzení agenta | Evidence |
|---|---|
| „detektor **stále běží**, log ukazuje pokračování" | poslední záznam `08:39:13`, audit probíhal v `10:55` |
| „počítadlo **roste monotonicky**" | `36 → 33` na `:371`/`:401`, `43 → 40` na `:626`/`:641` |
| „`.gitignore` **neobsahuje** `logs/`, log není ignorovaný" | `git check-ignore -v` → `.gitignore:24:logs/` |
| „soubory vytváří CI/CD / deployment script" | žádný z uvedených souborů není v `git status` |

Navíc tvrdil `FAIL-CLOSED` při popisu mrtvého detektoru se statickou šablonou.
Část textu vypsala v ruském překladu („пополняje", „kronického"). Přečetl
`.kilo/.gitignore` místo kořenového `.gitignore` a jeho závěr o gitignorování je
invertovaný — což podsouvá nedůvěryhodnost i dalším jeho tvrzením.

### 2.3 `tester` revize 2 — částečně přijato

| Brána | Verdikt agenta | Skutečnost |
|---|---|---|
| B1 cílená, 4 testy | GREEN, `=== 4 passed in 0.26s ===` | **přijato**, výstup věrohodný |
| B4 ruff | GREEN | **přijato** |
| B3 celá suite | „timeout after ~120ms" | **vyvráceno** — `timeout 600` + běh 27.80 s |
| B5 mypy | „timed out repeatedly", `REJECT_EXTERNAL_DEPENDENCY` | **vyvráceno** — mypy 2.3.1, 70 souborů, exit 0 |

Tvrzení „timeout po 120 ms" při zadaném `timeout 600` není slučitelné se zadáním.
Důvod `REJECT_EXTERNAL_DEPENDENCY` navíc znamená „výstup závisí na tom, co v repu
není", což pro nainstalované mypy neplatí. Navíc zaměnil číslování bran (B1 označil
jako Gate 1, B3 jako Gate 3, přičemž zadání říkalo opak). Verdikt Gate 1 / Gate 2
neuvedl vůbec.

### 2.4 `deep-research` — částečně přijato

Text obsahuje degeneraci (české/Polština/čeština míchána: „periodických periodických",
„fałszové", „nejsou"). Většina doporučení je generická. **Ale jedna citace je ověřena
a je přímo on-point** — viz §3. Zbytek je `[HYPOTÉZA]`.

---

## 3. Proč to dělají — externě ověřené vysvětlení

[VÝZKUM 2026-10-04] **„Beyond Consensus: Mitigating the Agreeableness Bias in LLM Judge
Evaluations"**, arXiv:2510.11822 (Jain, Ahmed, Sahai, Leong), ověřeno na
<https://arxiv.org/abs/2510.11822>, přístup 4. 10. 2026.

Z abstraktu: LLM-as-judge má **silný pozitivní sklon**. Empiricky **True Positive Rate
96 %**, ale **True Negative Rate < 25 %** — špatně rozpoznává neplatné výstupy. Ve
spojení s class imbalance to vede k **nafouknutým reliability skóre**. Autoři navrhují
minority-veto strategii; majority voting nestačí.

**Toto je přesně pozorovaný vzorec v této session:**

| Report | Očekávané chování podle paperu |
|---|---|
| `code-reviewer` | `APPROVED` bez jediného nálezu — chybí odmítnutí |
| `security-auditor` | `FAIL-CLOSED` pro mrtvý detektor — chybí odmítnutí |
| `tester` | „zelená" bez výstupu příkazu |

Agenti **nerozpoznávají neplatné** výstory. To nejsou jednotlivé chyby — to je
vlastnost modelu. Důsledek pro pravidla projektu: **souhlas nesmí být výchozí stav**,
každý verdikt musí nést `file:line` nebo výstup příkazu, a `REJECT_UNVERIFIED` musí
bít levnější než přijetí.

---

## 4. Otevřené nálezy z kódu — čeká na revizi

Zadání pro `code-reviewer` revize 2, stav ke 4. 10. 2026 10:55 — **[HYPOTÉZA]**,
čeká na potvrzení:

1. **`if self.egress_gate is not None:` (`secure_gateway.py:173`) může být fail-open.**
   Při `service.egress_gate = None` projde `execute()` k providerovi bez egress
   kontroly. Fail-closed varianta: gate povinný, nepřítomnost = `ExecutionRefused`.
2. **Hardcodovaná allowlist z jména, které si provider jmenuje sám** (`:113-115`).
   Jméno je pod kontrolou providera, takže určuje, zda bráda vůbec něco zkontroluje.
3. **`classifications=frozenset()`** (`:184`) — klasifikační bráda pro local egress
   (`egress.py:101-118`) takhle nemá co klasifikovat.
4. **`dest = "http://localhost"`** (`:178`) — konstanta, ne odvozená hodnota.
5. **Ztráta důvodu** — `raise ExecutionRefused("egress denied by policy") from err`
   (`:191`) ponechá důvod jen v tracebacku.

---

## 5. Cron review detektor — prokázaná porucha

`.kilo/logs/cron_reviews.log`, 689 řádků, 46 záznamů, `23:40:34` → `08:39:13`.

| Porucha | Důkaz |
|---|---|
| Zastavil se před ~2 h | poslední záznam `08:39:13`, `mtime` `10:40:23` — soubor dotčen, záznam nepřibyl |
| `Findings:` je statická šablona | od `01:39` je `ruff clean` a pilot testy procházejí, nález `pilot/ without tests/plan/approval` se opakuje doslova do `08:39` |
| Počítadlo není monótonní | `36 → 33` (`:371`/`:401`), `43 → 40` (`:626`/`:641`), `31 → 30` (`:296`/`:311`) |
| `file:line` neodpovídá stavu | log uvádí `secure_gateway.py:183`; dnes je tam `payload_sha256 = ...`, `authorize()` je na `:188` |
| Uvádí cesty, které neexistují | log píše `src/cyberbrain26/anonymizer.ts`, `index.ts`, `model_layer/cli.ts`. Ve skutečnosti jsou v `.kilo/plugin/cyberbrain26-freeauto/src/` (`anonymizer.ts`, `bridge.ts`, `index.ts`) — **log uvádí jména správně, cesty chybně**. `model_layer/cli.ts` neexistuje vůbec, jen `src/cyberbrain26/model_layer/cli.py`. `git status` celý adresář `.kilo/plugin/` skládá do jednoho `??` řádku, takže úroveň souborů v něm vůbec nevidí |
| Výstup není versionovaný | `git check-ignore -v` → `.gitignore:24:logs/` |
| Generátor není v repu | `grep -rn "cron_reviews\|CRON REVIEW LOG\|consecutive cron" .` → 0 matchů |
| Není evidovaný jako nefunkční | žádný mechanismus, který by zjistil, že přestal psát |

### Detektor a `git status` žijí v různých univerzech

Log opakovaně hlásí „NEW FILES persist: … `package.json`", ale `package.json` je
záměrně v `.kilo/.gitignore`, takže ho `git status` **nikdy neukáže**. `git status`
navíc celý `.kilo/plugin/` skládá do jediného `?? .kilo/plugin/` řádku. Detektor
používá souborovou úroveň, `git status` adresářovou — dva různé přehledy, které se
nemohou potvrát. Nález, který nelze vyvrátit, protože nikdo ho neporovná se skutečností.

### Oprava vlastního tvrzení

Dříve jsem v tomto souboru i v chatu tvrdil, že `anonymizer.ts`, `index.ts` a
`package.json` „neexistují". **To nebylo správné.** Existují, ale pod
`.kilo/plugin/cyberbrain26-freeauto/`, ne pod `src/cyberbrain26/`. Chyba logu není
tedy „vymýšlel si soubory", ale **„znal jména a nesprávné cesty"**. Oprava je zapsaná
v tabulce výše. `model_layer/cli.ts` neexistuje skutečně.

### Hlavní nález logu je fakticky nepravdivý

Log opakuje 43×: „`cli.py` + `pilot/` in master **without tests/plan/approval**", a
od `01:39` současně píše „pilot/ tests: all passing". **Tyto dvě věty si odporují.**
Dedicated testy existují a jsou součástí zelené suite:

| Oblast | Test | Řádků ve zdroji |
|---|---|---|
| `pilot/` | `tests/test_pilot_workflow_e2e.py` | 1527 |
| `cli.py` | `tests/test_cli_run_authorized.py`, `tests/test_product_cli.py` | 770 |
| `knowledge_plane/` | `tests/test_knowledge_plane.py` | 328 |
| `model_layer/cli.py` | `tests/test_model_layer.py` | 79 |

Tvrzení „bez testů" tedy **neplatí**. Tvrzení „bez plánu a schválení" — to je otázka
na vlastníka a je možná. Log navíc uvádí `cli.py` jako „207 lines", reálně má
**770 řádků**; číslo se 43 cyklů neaktualizovalo.

**Závěr:** 43 cyklů eskalace „IMMEDIATE DECISION" bylo vyrobeno ze zmrznulé šablony
`Findings:` zachycené ve 23:40. Reálný otevřený bod je **neschválení**, ne chybějící
testy.

### F2 (b) — plugin existuje, je otestovaný, a není zapojený

`.kilo/plugin/cyberbrain26-freeauto/` obsahuje `plugin.json`
(`entry: "src/index.ts"`, `manifestVersion: "2.1.0"`, `require: ["node"]`),
`cyberbrain26-freeauto.config.json` (mapování rolí na `free`/`efficient`), `package.json`,
`tsconfig.json` a `src/{anonymizer,bridge,index}.ts`.

`tests/test_kilo_plugin_integration.py` je součást zelené suite — testuje existenci
manifestu, validitu configu, `kilo list-models`, **kompilaci TypeScriptu**,
anonymizer logiku a existenci `kilo snapshot`.

**V `.kilo/kilo.jsonc` není žádná registrace pluginu.** Jediné `mcp`/`plugin` zmínky
jsou `:94-98`, kde je MCP explicitně **vypnuté** s poznámkou
`[OVĚŘENO: src/cyberbrain26/mcp/ NEEXISTUJE]`.

To je přesně vzorec popsaný v `.kilo/agent/scout.md:61-67`: *„Objekt, který se
vytvoří a nikdy nezavolá, je totéž jako objekt, který neexistuje."* Plugin je
postavený, zkompilovaný a otestovaný, ale **nikdo ho nikdy nepoužije**, protože není
registrovaný. Zápis do `.kilo/kilo.jsonc` vyžaduje schválení vlastníka — je to
jediný zbývající bod F2.

### Kdo to píše

`scout.md:7,10` i `overseer.md:7,10` mají `bash: deny` a `edit: deny` — **nemohou**
spustit pytest/ruff/mypy ani zapsat tento log. `HANDOFF_2026-10-04.md:125` přisoudil
cron scoutovi. [HYPOTÉZA] Přisoudění je chybné; kdo log píše a kdo ho autorizoval,
**zůstává neověřeno**.

### [NEVĚŘENO] — vyžaduje vlastníka

`crontab -l` je prázdný, `cron_list` v této session je prázdný, `grep` v repu nic
nenalezl. Zda úloha vůbec existuje v `~/.config/kilo/`, na to agenti nemají
`external_directory` (`deny`). **Vlastník musí ověřit ručně.** Dokud to není zjištěno,
je stav „detektor neznám" — ne „detektor zanikl" a ne „detektor běží".

---

## 6. Co z toho jde udělat, a co potřebuje schválení

**Bez schválení (zápis do `.kilo/context/` a `CHANGELOG.md`):** tento záznam,
`ROADMAP_V6.md` a `HANDOFF_2026-10-04.md` oprava 7 řádků s verzí CLI (§2 handoffu).

**Vyžaduje schválení vlastníka:**
- `.github/workflows/` — CI brána na PR místo cronu (`.github/` je v chráněném seznamu)
- `.gitignore` — jestli `.kilo/logs/` má být ignorovaný, nebo verzovaný
- `CODEOWNERS` — vynucení schválení pro `pilot/` a `security_plane/`
- `.kilo/kilo.jsonc` — F2 (b) registrace pluginu
- `src/cyberbrain26/execution_plane/secure_gateway.py` — oprava fail-open v `:173`

**Nález, který čeká na revizi kódu:** kandidát na F2 (a) je zelený a funkční, ale
pokrývá jen věci, které **lze** vyvolat. body §4 je nutné posoudit dřív, než se
F2 (a) uzavře jako hotová fáze — jinak se stane stejnou věcí jako cron log: zelená
kontrola bez schopnosti selhat.