# ROADMAP V8 — plán až do konce + srovnání se skutečným stavem

**Datum:** 3. 10. 2026
**Stav dokumentu:** NÁVRH k potvrzení vlastníkem. Nenahrazuje schválený kód, jen plán.
**Zaklad:** `ROADMAP_V6.md` (1 065 řádků), `ROADMAP_V7.md` (330 řádků), `docs/product/STATE_REPORT_V7.md`, `.kilo/context/decisions/DECISIONS_V7.md` (D1–D16), `CHANGELOG.md`.

---

> **`status: superseded`**
> **superseded_by:** `.kilo/plans/CyberBrain26cil-031026-v2.md` (schválený směr, 3. 10. 2026)
> **superseded:** 4. 10. 2026
>
> **Tento dokument NENÍ autoritativní plán.** Na otázku „co stavíme a v jakém
> pořadí" odpovídá `.kilo/plans/CyberBrain26cil-031026-v2.md`.
>
> Tento soubor materializuje návrh V8, který **nikdy nebyl zapsán ani schválen**
> jako `ROADMAP_V8.md`. Jeho tvrzení o vlastním schválení je nepodložené; §0
> to nezávisle potvrzuje.

---

## 0. KRITICKÁ ZÁLEŽITOST — `ROADMAP_V8.md` V REPĚ NEEXISTUJE

Ověřeno v tomto běhu:

- `glob **/*V8*` → žádné soubory
- `grep -i "ROADMAP_V8|V8"` v celém repa → 6 výskytů, **žádný neodkazuje na soubor ROADMAP_V8.md**
- V repu jsou jen `ROADMAP_V5.md`, `ROADMAP_V6.md`, `ROADMAP_V7.md`

Výskyt „V8" v `.kilo/agent/orchestrator.md:175` a `.kilo/context/LESSONS_AND_DECISIONS.md:110` je **jiná věc** — je to lesson č. 8 („jmenovaná brána, která nikdy nespustila"), ne verze roadmapy. [OVĚŚENO]

**Důsledek:** plán V8 byl v předchozí session domluven a schválen v rozhodnutí („V8 nahradí V7"), ale **nikdy zapsán**. Tento plán ho materializuje.

---

## 1. Co se od V7 změnilo — shrnutí delty

| Oblast | V7 (2. 10.) | Stav 3. 10. | Značka |
|---|---|---|---|
| Gate 0 | **24 selhání / 51 testů** | **54 passed**, zelená | [OVĚŘENO] `CHANGELOG.md:42-44` |
| `tester.md` YAML | rozbitý frontmatter | opraveno, uvozovky vloženy | [OVĚŘENO] `.kilo/agent/tester.md:2` |
| 8 agentů mimo mapu `agent` | chyběli | **všech 11 v `.kilo/kilo.jsonc:17-62`** | [OVĚŘENO] |
| `orchestrator.md` si protřečí s D14 | ANO | **NE** — tělo opraveno | [OV�EEŘENO] `DECISIONS_V7.md:69-80` |
| `mcp.cyberbrain26` | — | `{"enabled": false}`, fail-closed | [OVĚŚENO] `.kilo/kilo.jsonc:93` |
| Celý suite | 553 testů, 24 selhání | **591 passed**, 0 selhání | [OVĚŚENO] `CHANGELOG.md:44` |
| `default_agent` | `promptmaster` (D11) | `promptmaster` — beze změny | [OVĚŚENO] `.kilo/kilo.jsonc:9` |
| Implementer oddělen od testera | neexistovalo | **D16** — `bash: deny`, `task: {tester: allow}` | [OVĚŚENO] `DECISIONS_V7.md:142-176` |
| F3 MCP server | neexistuje | **stále neexistuje** (`src/cyberbrain26/mcp/` prázdná) | [OVĚŚENO] |

---

## 2. SROVNÁNÍ: fáze V6/V7 proti skutečnosti

| Fáze | Gate z roadmapy | Skutečný stav 3. 10. 2026 | Verdikt |
|---|---|---|---|
| **F0** baseline | zelená CI, první běh vůbec | Gate 0 zelená **lokálně**. CI **nikdy neběžela** — `git remote` je stále prázdný | ⚠️ **ČÁSTEČNĚ** |
| **F1** Kilo základ | policy-test nad `.md`, `bash: deny` u všech | Test existuje a je zelený, ale `bash: allow` u `orchestrator` + `tester` (**D14/D16**), `default_agent: promptmaster` (**D11**). Gate byl V7 přepsán | ✅ **HOTOVO** (gate přepsán) |
| **F2** PromptMaster | artefakt s `declared_actions`, žádná delegace | `promptmaster.md` existuje, `mode: primary` v mapě | ✅ **HOTOVO** |
| **F3** MCP server | `cyberbrain26_*` nástroje | **NEEXISTUJE.** `src/cyberbrain26/mcp/` neobsahuje žádný soubor, MCP SDK není v `pyproject.toml`, `enabled: false` | ❌ **NEZAČATO** |
| **F4** Orchestrátor + registry | hloubka 1, `bash: deny` všem | Hloubka 1 ✅, 11 agentů zaregistrováno ✅, `bash: deny` zrušeno D14 | ✅ **HOTOVO** (gate přepsán) |
| **F5** Verifikace + eval harness | fail-closed test zelený, baseline snapshot, semgrep | `verifier.md` existuje, Gate 0 zelený. **Eval harness (promptfoo/Inspect) NEEXISTUJE. semgrep chybí v CI i v prostředí** | ⚠️ **ČÁSTEČNĚ** |
| **F6** Deep research | politika vynucena | `deep-research.md` existuje a má politiku | ✅ **HOTOVO** |
| **F7** Hardening | 9 oprav (a)–(i), žádný fail-open bypass | **0 z 9 hotových.** 4 návrhy jsou `NOT APPROVED` | ❌ **NEZAČATO** |
| **F8** Scénář P0 | demo zelené < 2 min | `cyberbrain run` je fail-closed a autorizovaný (D2), ale **end-to-end demo P0 nebylo ověřeno jako celek** | ⚠️ **ČÁSTEČNĚ** |
| **F9** Odstranění mrtvého kódu | žádný modul s 0 importéry | `control_plane/api`, `control_plane/registry` stále existují | ❌ **NEZAČATO** |
| **F10** Dokumentace + one-pager | threat model pokryt | `docs/SECURITY_ONE_PAGER.md` existuje; `SECURITY_ONE_PAGER_V6.md` neexistuje | ⚠️ **ČÁSTEČNĚ** |
| **F11** Tržní validace | ≥5 respondentů, ≥3 tasky, ≥2 nabídky | **0 reálných rozhovorů**, 250 fiktivních | ❌ **OPEN** |

**Shrnutí:** 4 hotové (F1, F2, F4, F6), 4 částečné (F0, F5, F8, F10), 4 nezačaté (F3, F7, F9), 1 trvale otevřená (F11).

---

## 3. Kritická cesta — co blokuje co

```
F0 (CI nikdy neběžela)
 └─► F3 (MCP server)
      └─► F4 doplnění (konečné exekuce přes cyberbrain26_*)
           └─► F7 Hardening (audit chain, šifrování, lockout)
                └─► F8 P0 demo
                     └─► F10 one-pager V6

F0 └─► F5 eval harness (promptfoo) ──► F8 (brzy, low-risk)
F11 (trh) — nezávislá, neblokuje F1–F10, ale BLOKUJE každé cenové tvrzení
```

**Dva nejvyšší náboje:**
1. **F0** — bez remote a bez zeleného hostovaného CI běhu je každé tvrzení „brána je zelená" jen lokální měření.
2. **F7** — 4 mezery, které jsou `NOT APPROVED` a jsou přesně ty, které nelze prodat (audit chain, šifrování v klidu, lockout cesta).

---

## 4. Plán až do konce — pořadí kroků

### Fáze A —Uzavření F0 (baseline)

1. Nastavit `git remote` (GitHub `CyberSecGuru26/CyberBrain26-v4`).
2. Rozhodnout, zda 591 necommitnutých položek tvoří jeden release commit, nebo jestli se rozdělí na `feat` + `docs`.
3. Spustit CI poprvé; `dependency-audit` přehodnotit z `continue-on-error: true` na `false` (`ci.yml`).
4. Otagovat baseline `v4.1.0` — bez toho nelze audit chain ani snapshot (V6 §13.14).
5. Gate: zelený hostovaný běh + tag.

### Fáze B — F5 eval harness (nejnižší riziko, nejvyšší přínos pro důkazy)

6. Rozhodnout promptfoo vs Inspect AI. Doporučení: **promptfoo** — deklarativní YAML, auditovatelný v diffu, lokální, bez SaaS (V6 §500).
7. `evals/` s baseline snapshotem pro PromptMaster artefakt + fail-closed asert.
8. `semgrep` jako CI krok s pravidly v repu jako jediným místem pravdy — jinak zůstává lesson V8 („jmenovaná brána, která nikdy nespustila").
9. Gate: zelený fail-closed běh **v CI**, ne jen lokálně; semgrep běží; baseline snapshot uložen v repu.

### Fáze C — F3 MCP server

10. `src/cyberbrain26/integration_layer/mcp_server.py` — jediný kus kódu závislý na MCP SDK; interní tool contract zůstává oddělen od wire contractu (`extension_layer/tool_protocol.py:23-24`).
11. Read-only sada nástrojů podle V6 §13.5: `cyberbrain26_list_actions`, `_check_vocabulary`, `_authorize_action`, `_approve_action`, `_execute`, `_run_tests`, `_run_audit`, `_write_handoff`.
12. **Žádný `bash` v serveru.** Autorizace před každým provozem přes `AuthorizedExecutionService` (`execution_plane/secure_gateway.py:82-169`).
13. Přepnout `mcp.cyberbrain26` na `{"enabled": true}` až po zeleném testu fail-closed bez serveru.
14. Gate: žádný `bash`; odmítnutí bez sandboxu vyhozí `ExecutionRefused`.

### Fáze D — F7 Hardening (vyžaduje schválení vlastníka)

15. **Nejdřív schválení.** Všechny čtyři mezery jsou `NOT APPROVED` — do `src/` a `tests/` se nesahá bez výslovného schválení s diffem.
16. Pořadí podle obchodní hodnoty (V7 §5.1): (1) zelený fail-closed běh → (2) lockout úniková cesta → (3) audit hash chain → (4) šifrování v klidu.
17. Hash chain: `prev_hash` → `chain_hash` → `entry_hash`; dotkne se D4/MCP, proto až po F3.
18. Opravit nebo zrušit tvrzení „append-only" v `audit/__init__.py:104-107` — kód ho vyvrací (`clear()` `:264-269`, `prune_expired()` `:271-277`).
19. Gate: žádný fail-open bypass; testy odolnosti auditu proti manipulaci existují.

### Fáze E — F8 P0 scénář

20. Jeden end-to-end flow z `ROADMAP_V5.md:117-128`: příkaz → zobrazení akce ke schválení → identita + policy před každým voláním → fail-closed bez sandboxu → git worktree + diff → persistovaný audit → historie.
21. Odstranit 4 známé pasti z `PROJECT_STATUS.md:178-201` (viz §6).
22. Gate: demo zelené pod 2 minuty; každá mezera z V6 §5 ozanulovaná nebo výslovně mimo scope.

### Fáze F — F9 + F10

23. F9: rozhodnout o `control_plane/api` (450 řádků, 0 importů) a `control_plane/registry` (246 řádků) — smazat nebo zapojit.
24. F10: `SECURITY_ONE_PAGER_V6.md` + doplnit `docs/SECURITY_ONE_PAGER.md` o V6/V7/V8 threaty (Kilo jako závislost, Kilo Memory, prompt injection).
25. Sjednotit **šest různých tvrzení o testech** v repu na jedno ověřené číslo.

### Fáze G — F11 tržní validace (nezávislá, nezablokuje A–F)

26. ≥5 reálných rozhovorů. Dnes 0. Jakýkoli outreach vyžaduje výslovný pokyn vlastníka.
27. Uzavře P2 (placený segment) a P3 (open-core vs uzavřené), obojí `OPEN`.

---

## 5. Co V8 oproti V7 přidává

| # | Přídavek | Proč |
|---|---|---|
| 1 | **Gate 0 zelený jako výchozí stav**, ne jako výstup k dosažení | V7 ho popisoval jako červený problém; 3. 10. je zelený |
| 2 | **D16 v základní konfiguraci** | V7 ho neznal — oddělení autor/kontrolor je teď součástí `implementer.md` |
| 3 | **Lesson V8 jako tvrdé pravidlo** | Jmenovaná brána musí mít spustitelný krok v repu, ne jen zmínku v textu |
| 4 | **F3 explicitně nezačatá** | V7 ji mlčky považovala za „beze změny"; ve skutečnosti chybí celý MCP server |
| 5 | **V8 plně nahrazuje V7** | V7 se stává historickou deltou |
| 6 | **Nová omezení pro V9**: lesson V7 „subagentní výstup není důkaz" z `.kilo/context/LESSONS_AND_DECISIONS.md:49-51` | Dnes je Gate 2 ověřeno náčtem `CHANGELOG`, ne novým během |

---

## 6. Známé pasti, které je nutné zavřít (z `PROJECT_STATUS.md`)

| # | Past | Dopad | Gate |
|---|---|---|---|
| 1 | `plan --steps N` ignoruje `max_steps`, vrací `range(1, 4)` | plánování nefunguje | F8 |
| 2 | `plan` nepřepisuje COMPLETED result → stale reuse stejného `--id` | tiché staré výsledky | F8 |
| 3 | `--scopes` platí jen pro roli `coder`; security/evaluator kód projde a spadne až později | zmatení, ne bypass | F8 |
| 4 | `python3 -m cyberbrain26.cli` tiše skončí 0 a nic neudělá (chybí `__main__`) | tichý průchod — **přímo porušuje invariant 1** | F8 |

**Past 4 je invariantní porušení** — tichý přechod bez chyby. Doporučuji ji zvednout výše než ostatní.

---

## 7. Otevřené otázky pro vlastníka

| # | Otázka | Doporučení |
|---|---|---|
| 1 | Schválit zápis `ROADMAP_V8.md` do kořene repa? | **Ano** — bez souboru je V8 jen domluva v paměti |
| 2 | `default_agent` — vrátit na `orchestrator` (D6 „jediný delegátor"), nebo ponechat `promptmaster` (D11)? | Ponechat `promptmaster`; D11 to schválilo výslovně 2. 10. |
| 3 | Vytvořit `git remote` a commitnout 591 položek? | Ano, ale **ve dvou commitech**: kód, pak dokumentace |
| 4 | schválit F7 hardening (4 mezery `NOT APPROVED`)? | Nejdřív položky 1–2 (fail-closed běh, lockout) — triviální a odstraňuje jediné `[HYPOTÉZA]` tvrzení |
| 5 | promptfoo nebo Inspect AI? | promptfoo |
| 6 | Zapnout `semgrep` v CI, nebo odstranit tvrzení o semgrep bráně? | Zapnout — jinak zůstává lesson V8 |

---

## 8. Validace plánu

- Každý krok má measurable gate; žádný gate není „vypadá to dobře".
- Gate 0 (`tests/test_kilo_agent_policy.py`) je **regresní pojistka pro celý plán** — pokud F3/F5/F7 rozbijí `.kilo/` konfiguraci, Gate 0 to chytí. NESMÍ být obejito.
- Autorita pro stavové údaje: `CHANGELOG.md` [Unreleased] a výstup `tester`. **Není** autoritkou žádný `PROJECT_STATUS.md`, `SECURITY_ONE_PAGER.md` ani prezentace — v `docs/product/STATE_REPORT_V7.md:59` je evidováno šest různých tvrzení o testech a žádné nebylo re-verifikováno.

---

# Konec plánu