# HANDOFF — čisté vlákno, 2. 10. 2026

**status: superseded** — nahrazeno `SESSION_HANDOFF_2026-11-03.md` (3. 11. 2026)
**Čtenář:** agent, který právě začíná v tomto repu. Tento soubor je **stav, ne plán**.
Žádné tvrzení zde není fact, dokud nemá odkaz na `file:line` nebo na výstup příkazu.

**Projekt:** CyberBrain26 — lokální bezpečnostní a policy vrstva.
**Status:** testovaný Python prototyp. **Není** produkčně připravený ani bezpečnostně
certifikovaný. **Není** ochrana proti libovolnému nepřátelskému kódu.
**F11 (tržní validace) zůstává `OPEN`.** P2 a P3 zůstávají `OPEN`.

---

## 1. Stav — ověřeno příkazem, ne slovem agenta

```
553 passed in 9.17s
All checks passed!          (ruff)
Success: 58 source files    (mypy)
```

**[OVĚŘENO]** 2. 10. 2026, Pythonu **3.12.3**.

**Poznámka k interpretaci:**

- Běženo na **3.12.3**. CI specifikuje 3.11 / 3.12 / 3.13 — **rozdíl NEOVĚŘEN**.
- CI v repu **nikdy neběželo**: `.git/config` nemá sekci `[remote]`.
- **Zelené = lokální běh, ne ověřený build.** Necituj to jako výsledek CI.

Před D13/D16 byl stejný běh `24 failed, 529 passed`. Rozdíl vyrobila oprava
`.kilo/agent/tester.md:2` (viz §2).

---

## 2. Co bylo zapsáno — vše schváleno vlastníkem

| Soubor | Změna |
|---|---|
| `.kilo/agent/tester.md:2` | uvozovky — YAML se přestal parsovat, to shazovalo 22 testů |
| `.kilo/kilo.jsonc:17-62` | mapa `agent` 3 → 11 (D13, gate F1) |
| `tests/test_kilo_agent_policy.py` | `test_primary_agents_cannot_edit` s výjimkou D14; `test_default_agent_is_a_declared_primary_agent`; ruff `--fix` (58× UP032 + 1× RUF002); `PRIMARY_TOOL_ALLOW_EXCEPTIONS`; `AGENT_DELEGATION_ALLOWLIST` |
| `.kilo/agent/implementer.md:7-8` | `bash: deny`, `task: {"*": "deny", "tester": "allow"}` |
| `.kilo/context/decisions/DECISIONS_V7.md` | D16 |

**Žádný git příkaz. Žádný zásah do `src/`. Žádná síť. Žádná instalace.**

---

## 3. Kdo co umí — pozor, to je často přehlížené

| Agent | `bash` | delegace |
|---|---|---|
| `orchestrator` | ano | kdokoli |
| `tester` | ano | nikoho |
| `implementer` | **ne** | jen `tester` |
| `verifier`, `security-auditor`, `code-reviewer`, `threat-modeler`, `explore`, `documenter`, `pricing-researcher`, `deep-research` | **ne** | nikoho |

### Kritické

**Testy, ruff a mypy spustí JEN `orchestrator` nebo `tester`.**
Když `implementer` něco změní, musí se to poslat testerovi — on to sám spustit nemůže.
To je záměr D16 (autor nepodepisuje vlastní změnu), ne chyba.

---

## 4. Kdo umí co NEUMÍ — a to je past (V9)

**Agent bez `bash` tvrdí „soubor neexistuje" místo „nevím".**
Jeho glob přeskakuje skryté adresáře — `.kilo/` je skrytá.

Dnes takto popřeli existenci `.kilo/agent/orchestrator.md.bak-pre-v7b`.
**Soubor existuje** a `:11-18` má 8jmenný allowlist delegace, který **dnes v repu jinde není**.
(Je gitignorovaný vzorem `*.bak-*`.)

**Pravidlo: každé tvrzení agenta bez `bash` ověř vlastním příkazem.**
Tvrzení agenta s `bash` je měření. Tvrzení agenta bez `bash` je odhad.

---

## 5. Ověřené fakty — nesmějí být překročeny

- **`b8c71d2` EXISTUJE** a je rodič HEAD (`.git/logs/HEAD:3-4`).
  `ROADMAP_V7.md:58` tvrdí opak — je to lež. **[OVĚŘENO]**
- **Hash audit chain NEEXISTUJE** — 0 výskytů `entry_hash|chain_hash|prev_hash` v `src/` i `tests/`.
  `clear()` (`audit/__init__.py:264-269`) a `prune_expired()` (`:271-277`) **MAŽOU řádky**,
  takže docstring `:104-107` „append-only, cannot be modified or deleted" **leží**.
  Testy odolnosti auditu proti manipulaci neexistují. **[OVĚŘENO]**
- **Šifrování v klidu neexistuje.** Grep `encrypt|cipher|AES|Fernet|keyring` = 0.
  Co existuje: SHA-256 digest API klíče (`api/__init__.py:419`) porovnávaný přes
  `hmac.compare_digest` (`:431`) — to je ochrana klíče, **ne** šifrování v klidu.
- **Multi-tenant neexistuje** — 0 výskytů `tenant`.
- **`BubblewrapExecutionProvider` je čistý** (jediné spuštění `create_subprocess_exec` `:178`,
  binary z `shutil.which` `:129`). Fail-closed test **nepřeskakuje** — prošel dvakrát nezávisle.

### Zlaté pravidlo

`.kilo/kilo.jsonc` se cachuje při startu session.
**Změna se neprojeví bez reloadu** — test validuje soubor, ne běžící konfiguraci.
Gate F1 z `.kilo/kilo.jsonc:17-62` je tedy zatím validace souboru, ne běžící konfigurace.

---

## 6. Co je HOTOVO a NESMÍ se znovu otevřít

- Gate 0 zelená: **24 selhání → 0**
- ruff čistý: **59 chyb → 0**
- D13 — mapa `agent` doplněna na 11 položek
- D16 — zapsáno

---

## 7. OPEN — čeká na vlastníka

### 1. Vlna B — tři mezery mimo bezpečnostní řetěz, **každá samostatně**

**a) `switch_space.py:130` — `--child` pryč.**
`subprocess.run(cmd, env=env, check=False)` s libovolným `argparse.REMAINDER`.
Nikdo ho nevolá (grep = 0 v runtime, testu i importu).
Smazat i `import subprocess:6`, jinak ruff F401. Smazat i per-file-ignore
v `pyproject.toml:138`, jinak RUF100.

**b) `secure_gateway.py:73` — vynutit typ. NE `ptah_bridge.py:153`.**
`self.provider = provider` přijímá cokoliv. `ExecutionProvider` je
`@runtime_checkable` protokol, takže `isinstance` **projde cokoliv, co má `.execute`**.
Kontrolovat konkrétní typ, ne protokol.
`execution_plane/__init__.py:3` exportuje provider veřejně, takže je volatelný i přímo.

**c) `bubblewrap_provider.py:152-175` — `--seccomp`.**
Profil v repu **neexistuje**. bwrap 0.9.0.
**POZOR:** bwrap při chybném filtru vrátí **nenulový návratový kód, ne výjimku** →
selhání bezpečnostní kontroly vypadá jako selhání kroku. **Vyžaduje samostatné kolo.**

### 2. Reload Kilo session

Jinak je D13 validace souboru, ne běžící konfigurace.

### 3. `CHANGELOG.md:11-14`

Hlásí „[Unreleased] Nothing recorded yet" přes 11 agentů a dnešní změny.

### 4. Stará čísla v dokumentech

`docs/SECURITY_ONE_PAGER.md:222,227` a `PROJECT_STATUS.md:45,51` tvrdí „All checks passed"
— to je **dnes poprvé pravda**, ale čísla testů (413 / 369 / 360) jsou **stará**.

### 5. `ROADMAP_V7.md:90,92,108,110`

Zastaralé po dnešních změnách.
**`:92` nese `[OVĚŘENO]` na větě, kterou dnešní změna vyvrátila** — to je vzorec V3 v živé podobě.

### 6. `F4_EXPECTED_PENDING` (`tests/test_kilo_agent_policy.py:34-42`)

Všech **7 jmen** je zastaralých, ne jen chybějící `pricing-researcher`.

### 7. Zákaz názvu „Agent Guard" (D9)

Porušen v **7 dokumentech**. `docs/presentations/…:18` ho označuje jako
„schválený produktový záměr" — což je **v rozporu s `AGENTS.md`**.

### 8. Chybí 2 ze 7 deliverables

`docs/business/BUSINESS_PLAN_V7.md`, `PRESENTATION_V7.md`.
`docs/business/` má jen `PRICING_MODELS.md`.

### 9. Tvrzení „250 rozhovorů / 8–12 převáží všech 250"

Nemá **žádný artefakt** v repu. Grep `250|převáží` v `CUSTOMER_DISCOVERY_V5.md` = 0.

---

## 8. Lessons

`.kilo/context/LESSONS_AND_DECISIONS.md` — **8 vzorců chyb**.
Nejdůležitější pro další práci:

- **V1** — čitelný soubor shodí všechny brány, které ho čtou.
  Prevence je v lessons zapsaná, ale **v kódu NEIMPLEMENTOVANÁ**.
- **V2** — wildcard zruší test tak, že pak vypadá jako běžící. Stalo se dvakrát.
- **V3** — `[OVĚŘENO]` bez artefaktu.
- **V4** — stará čísla jako zdroj lzi.
- **V9** (nový) — agent bez `bash` tvrdí „neexistuje" místo „nevím".

### ⚠️ Varování

**`LESSONS_AND_DECISIONS.md` má 4 chybné citace a 2 zastaralé věty.**
Ověřuj je, neber je pravdivě. §2 i §3 jsou **stav pracovního stromu k 2026-10-02**,
ne trvalá pravda — pracovní strom se mění, `file:line` se posouvá.