# Rozhodnutí vlastníka — V7

**Datum:** 2. 10. 2026
**Schváleno:** výslovně vlastníkem, odpovědi na otázky orchestrátoru.

---

# Část A — Rozhodnutí Phase 0 (obchodní brána)

Zdroj: artefakt `cyberbrain26-pricing-business-plan-v7`, zprávy
`board_184c14f4…`, `board_81255feb…`, `board_c82bc28c…`, `board_49e8d3a4…`.

Cross-check `declared_actions = read_file, write_file, execute_python` proti
`ACTION_SCOPE_REQUIREMENTS` (`src/cyberbrain26/security_plane/actions.py:242-272`):
**všechny tři akce jsou v mapě** → brána prošla.

## P1 — `[PROPOSAL]` Trh a měna: EUR globálně + CZK pro ČR

Hlavní ceník je globální a denominovaný v **EUR**. Česká verze je samostatný
regionální produkt s vlastní cenovou hladinou v **CZK**. Jde o jednu entitu
se dvěma odvozenými ceníky, ne o dva produkty.

- [PROPOSAL] — ceny nejsou číselně stanoveny. Stanovení je předmětem
  `docs/business/PRICING_MODELS.md` a průzkumu, ne této brány.

## P2 — `OPEN` Placený segment: rozhodne průzkum

Vlastník výslovně **nerozhodil** a požádal o více verzí. P2 zůstává otevřené
a nesmí se v dokumentech vydávat za rozhodnuté.

- Odkaz na měření: cross-segment dispatch v poslední simulční dávce.
- Podmínka pro uzavření: výsledek srovnání segmentů s uvedením, které
  segmenty se navzájem vylučují a proč.

## P3 — `OPEN` Open-core vs. uzavřené: rozhodne průzkum

Vlastník výslovně **nerozhodil** a prohlásil, že to je věc většího průzkumu.
P3 zůstává otevřené.

- Odkaz na měření: **Q8** v `docs/product/PRICING_DISCOVERY_V7.md`.
- Explicitně zaznamenaný konflikt signálů: v dávce build-vs-buy si 7 z 20
  respondentů implementaci napsalo samo [SIMULOVANÉ], což tlačí k open core;
  proti tomu nulový rozpočet vlastníka neposkytuje monetizační kotvu.
  Obojí je `[SIMULOVANÉ]`, žádná z variant není výchozí.

## P4 — `PROPOSAL]` Cíl prezentace: investiční deck

Prezentace slouží k investičnímu účelu. Důsledky:

- Na slidech smí být pouze `[OVĚŘENO]` a výslovně označené `[SIMULOVANÉ]`.
- **F11 zůstává OPEN** a musí to být uvedeno na slidech, ne v poznámce.
- D9 platí: název „Agent Guard" je zakázán.

## Kódové návrhy — `NOT APPROVED`

Vlastník nebyl schopen odpovědět; všechny čtyři zůstávají **neschválené**.
Do `src/` a `tests/` se nesahá.

| # | Návrh | Stav | Co chybí |
|---|---|---|---|
| 1 | Zelený fail-closed běh | `NOT APPROVED` | Běh, ne definice — `tests/test_execution_provider.py:326` + CI job `no-bubblewrap-fail-closed` existují, zelený běh nebyl pozorován |
| 2 | Audit hash chain / podpis | `NOT APPROVED` | `prev_hash\|chain_hash\|entry_hash` nenalezeno; `AuditLog` appenduje do in-memory listu |
| 3 | Šifrování v klidu | `NOT APPROVED` | `encrypt\|cipher\|AES\|Fernet\|keyring` nenalezeno v `src/` |
| 4 | Úniková cesta pro lockout | `NOT APPROVED` | Chybí; „fail-closed se v 03:00 změní v DoS" je prodejní blokátor |

Důsledek pro dokumentaci: **nic o kódu nesmí být formulováno jako `[OVĚŘENO]`.**
Výslovně se uvádí, že tyto kontroly nebyly spuštěny.

## D14b — Nesrovnalost orchestrator.md vyřešena 2026-10-03 (schváleno vlastníkem)

`.kilo/agent/orchestrator.md` si po D14 protřečí: frontmatter (řádky 6–17)
deklaruje `bash/edit/agent_manager/task: allow`, tělo dokumentu tvrdilo, že `bash`,
`edit` a `agent_manager` jsou `deny`.

**[OVĚŘENO 2026-10-03]** Provedeno na výslovný pokyn vlastníka („všechno oprav, ať to funguje").
Opraveny řádky tvrdící `bash: deny` a `edit: deny`; doplněna delegační matice všech
10 subagentů, standardní workflow typů 1–6 a formát reportu vlastníkovi.
`agent_manager` zůstává v frontmatteru `deny` — jde o **přísnější** hodnotu než D14,
které povolovalo `allow`; testy `PRIMARY_TOOL_ALLOW_EXCEPTIONS`
(`tests/test_kilo_agent_policy.py:758-764`) D14 nadále snesou.

---

# Část B — Rozhodnutí V7 orchestration

## D11 — Vstupní bod je PromptMaster

`default_agent` v `.kilo/kilo.jsonc` změněno z `orchestrator` na `promptmaster`.
Každá nová úloha vstupuje PromptMasterem; ten dotáže zadání, vylepší ho,
přeloží do angličtiny a předá artefakt Orchestrátorovi.

## D12 — Předání artefaktu

PromptMaster předává artefakt přímo (výstup + board záznam), Orchestrátor jej načte.
Křížová kontrola akcí probíhá přes MCP, a pokud MCP není dostupné, přes offline
čtení `src/cyberbrain26/security_plane/actions.py:242-272` (`ACTION_SCOPE_REQUIREMENTS`).

## D13 — Plné definice subagentů, bez pevného stropu

Založeno všech 9 agentů v `.kilo/agent/*.md` včetně nového `pricing-researcher`.
Orchestrátor smí definovat další agenty sám; každý je `mode: subagent`, `task: deny`,
`deny-by-default`, a `external_directory: deny`. `subagent_depth: 1` zůstává, takže
subagenty nespouštějí dál.

## D14 — ZMĚNA D3: Orchestrátor má bash, edit, agent_manager, plné task

**[OVĚŘENO]** D3 původně znělo: žádný agent v tomto repozitáři nemá běh na hostovi.
Toto rozhodnutí **D3 mění** a záměrně.

Základní profil agenta se nemění: `bash: deny`, `edit: deny`, `task: deny`,
`external_directory: deny`. **Výjimkou je Orchestrátor**, který má `bash: allow`,
`edit: allow`, `agent_manager: allow` a `task: {"*": "allow"}`.

### Přijaté riziko (vlastník byl informován)

- Kód spouštěný agenty přes Kilo běží na hostiteli, **mimo `BubblewrapExecutionProvider`**.
  Ten zůstává v platnosti pro `cyberbrain run` (D4) a pro MCP, až bude F3 existovat.
- `external_directory: deny` zůstává: nic mimo `/home/oem/CyberBrain26-v4`.
- `doom_loop: deny` zůstává.
- Protiváha: Gate 1 a Gate 2 už **lze** spouštět (`tester`), takže tvrzení o kódu už
  nemusí zůstat `[HYPOTÉZA]`.

### Schvalování, které zůstává povinné

Zápis a mazání do `src/`, `tests/`, `.github/`, `.kilo/kilo.jsonc` nebo `pyproject.toml`
vyžaduje výslovné schválení vlastníka s předchozím zobrazením diffu. Dokumentace
v `docs/`, `ROADMAP_*.md`, `.kilo/context/**` a `CHANGELOG.md` se zapisují bez čekání.
Delší práce se rozkládá na kratší kroky, aby schválení neviselo příliš dlouho.

## D15 — Stále tvrdé invarianty

- **D10** „žádné tiché přechody“ a „jeden orchestration path“ zůstávají tvrdé.
  Entitlement/licenční kontrola musí být fail-closed s explicitním zaznamenaným odmítnutím,
  nikdy tichým downgradem.
- **D6** PromptMaster stále nedeleguje.
- **D9** Zákaz názvu „Agent Guard“ a zákaz prodeje neexistujících vlastností zůstávají.

---

# Část C — Rozhodnutí po uzavření Gate 0

## D16 — Oddělený autor a kontrolor

**Datum:** 2. 10. 2026. **Schválil:** vlastník výslovně.
**Stav:** zapsáno v `.kilo/agent/implementer.md:7-8` a v `tests/test_kilo_agent_policy.py:538-544`, `:627-630`.

### Rozhodnutí

`implementer` **mění kód, ale nesmí ho testovat**.

| Agent | `bash` | `task` | Důvod |
|---|---|---|---|
| `orchestrator` | `allow` | `{"*": "allow"}` | D14 — jediný delegátor |
| `tester` | `allow` | `{"*": "deny"}` | jediný, kdo spouští brány |
| `implementer` | **`deny`** | `{"*": "deny", "tester": "allow"}` | **D16** — autor nepodepisuje vlastní změnu |

`implementer.md:7` = `bash: deny`. `implementer.md:8` = `task: { "*": "deny", "tester": "allow" }`.

### Odůvodnění

**Autor nepodepisuje vlastní změnu.** Toto je **totéž pravidlo, jaké už `verifier.md:31` obsahuje**
(„Nikdy nepodepisuj vlastní změnu. Jsi kontrolor, ne autor"). D16 je přesouvá z kontroloru
na autora, aby se vztahovalo i na zapisování kódu.

Před D16 `implementer` měnil kód **i ho testoval**. To by v zeleném testu znamenalo
potvrzení vlastní práce autorem samotným — brána, která by nebránila ničemu,
protože autor by si mohl „opravit" test, nebo jej přeskočit.

`bash: deny` u `implementer` **není** samoúčelné omezení, nýbrž podmínka oddělení:
kontrola „implementer nemá spouštět kód" musí být v konfiguraci, ne v zvyku.

### Výjimka je navázaná na funkci, ne na `mode`, a je jednosměrná

- Funkční, ne režimová: výjimka se vztahuje ke konkrétnímu agentovi, ne ke všem
  `mode: subagent`. Jinak by propustila každého budoucího autora.
- Jednosměrná: `implementer` → `tester` **jen**. Opačná hrana (`tester` → `implementer`)
  neexistuje a nesmí vzniknout — kontrolor neříká autorovi, co má opravit.
- Delegace je navíc **přes `task`, ne přes `bash`**: `implementer` nemá shell,
  jen žádost o jeho spuštění.

### Co zůstává beze změny

- `orchestrator` smí delegovat komukoli (D14 `{"*": "allow"}`) a je **jediný**, kdo smí
  neomezeně. `AGENT_DELEGATION_ALLOWLIST` (`tests/test_kilo_agent_policy.py:627-630`) kóduje
  `orchestrator: None` (D14 wildcard) a `implementer: {"tester"}`.
- `AGENT_DELEGATION_ALLOWLIST` je **data, ne `if path.stem in {...}`**. Důvod: forma `if`
  by byla no-op kontrola — viz lessons **V2** (wildcard/predicate zruší test tak, že pak
  vypadá jako běžící).
- `PRIMARY_TOOL_ALLOW_EXCEPTIONS` (`tests/test_kilo_agent_policy.py:538-544`) drží
  `(orchestrator, bash|agent_manager|edit|task)` a `(tester, bash)`.
  **`implementer` tam není a nesmí být přidán** — jeho `bash` je `deny` a výjimka by přeskočila
  kontrolu, která právě hlídá, že ji nemá. Zdrojový komentář v kódu: `:530-537`.
- `subagent_depth: 1` (`tests/test_kilo_agent_policy.py:577-584`), `external_directory: deny`,
  `doom_loop: deny`, `cyberbrain26_*: ask` — beze změny.
- `edit: deny` u všech kromě `orchestrator` (D14) a `implementer` (D16) — beze změny.

### Protiváha, která zůstává otevřená

`tester` má `bash: allow` mimo D14, protože **bez shellu se brány nespustí**. Jde o funkční
nutnost, ne o novou výjimku D14: `tester` je kontrolor, autorem není, takže oddělení
rolí neporušuje. Důsledek, který zůstává otevřený a vyžaduje vlastníka: kód spuštěný
přes Kilo běží **mimo `BubblewrapExecutionProvider`** — viz D14 „Přijaté riziko".

### Co D16 neřeší

- D16 není `EXECUTION_SECURITY_REVIEW`. Nepopisuje `BubblewrapExecutionProvider` ani jinou
  prototypovou kontrolu jako ochranu proti libovolnému nepřátelskému kódu.
- Multi-tenant izolace, šifrování v klidu ani certifikovaná izolace v repu **neexistují**
  a D16 je nezavádí.
- **F11 (tržní validace) zůstává `OPEN`** a D16 na ně nemá vliv.
