# Gate 3 — F4 důkazní artefakt

Vygenerováno: 2026-10-05T07:17:52Z
HEAD: 83e2979

## 1. pytest — celá F4 sada
```
...........................................................              [100%]
59 passed in 0.30s
```

## 2. pytest — celá suite
```
........................................................................ [ 90%]
..................................................................       [100%]
714 passed in 20.88s
```

## 3. ruff
```
All checks passed!
```

## 4. mypy
```
Success: no issues found in 74 source files
```

## 5. Mutační kontrola — verbatim výstup
```
=== BASELINE ===
baseline PASS: 59 passed in 0.32s

PADÁ (test umí umřít)  M1 egress: authorize() not called  -> 9 failed, 50 passed in 0.52s
PADÁ (test umí umřít)  M2 egress: missing-gate fail-closed removed  -> 2 failed, 57 passed in 0.39s
PADÁ (test umí umřít)  M3 router: _get_candidates free filter removed  -> 6 failed, 53 passed in 0.40s
PADÁ (test umí umřít)  M4 router: _get_fallback_candidates free filter removed  -> 6 failed, 53 passed in 0.38s
PADÁ (test umí umřít)  M5 router: _route_specific_model free check removed  -> 2 failed, 57 passed in 0.40s
PADÁ (test umí umřít)  M6 router: free_only default flipped to True  -> 2 failed, 57 passed in 0.35s
PADÁ (test umí umřít)  M7 kilo_config: no-free-model guard removed  -> 1 failed, 58 passed in 0.35s
PADÁ (test umí umřít)  M8 kilo_config: validation gate removed  -> 1 failed, 58 passed in 0.36s
PADÁ (test umí umřít)  M9 kilo_config: _is_free_eligible always True  -> 4 failed, 55 passed in 0.37s
PADÁ (test umí umřít)  M10 role_assignment: backup free filter removed  -> 3 failed, 56 passed in 0.36s
PADÁ (test umí umřít)  M11 router: _is_free_eligible always True  -> 10 failed, 49 passed in 0.43s
PADÁ (test umí umřít)  M12 egress: empty-classification check removed  -> 1 failed, 58 passed in 0.34s
PADÁ (test umí umřít)  M13 egress: digest replaced by empty string  -> 2 failed, 57 passed in 0.35s
PADÁ (test umí umřít)  M14 egress: raw payload written to the log  -> 2 failed, 57 passed in 0.59s
PADÁ (test umí umřít)  M15 gateway: chat skips egress authorization  -> 5 failed, 54 passed in 0.41s
PADÁ (test umí umřít)  M16 gateway: missing classification assumed PUBLIC  -> 1 failed, 58 passed in 0.34s
PADÁ (test umí umřít)  M17 gateway: free_only defaults back to False  -> 3 failed, 56 passed in 0.36s
PADÁ (test umí umřít)  M18 gateway: route() stops forwarding free_only  -> 1 failed, 58 passed in 0.34s
PADÁ (test umí umřít)  M19 kilo_config: atomic replace replaced by in-place write  -> 1 failed, 58 passed in 0.35s
PADÁ (test umí umřít)  M20 role_assignment: verified flag ignored  -> 1 failed, 58 passed in 0.34s
PADÁ (test umí umřít)  M21 gateway: fallback drops the free-only check  -> 2 failed, 57 passed in 0.35s
PADÁ (test umí umřít)  M22 gateway: _model_is_free returns True for unknown models  -> 3 failed, 56 passed in 0.36s
STRUKTURNÍ  M23 router: round-robin lock removed  -> suite zelená, ale jde o souběžnost, kterou jednovláknový test neodhalí (viz STRUCTURAL_NOTE)
STRUKTURNÍ  M24 role_assignment: store lock removed from record_result  -> suite zelená, ale jde o souběžnost, kterou jednovláknový test neodhalí (viz STRUCTURAL_NOTE)
PADÁ (test umí umřít)  M25 router: free_only substitution disclosure removed  -> 1 failed, 58 passed in 0.34s

=== PO OBNOVENI ===
restored PASS: 59 passed in 0.32s

=== SLEPÉ TESTY (kontrola bez testu) ===
žádný
```

## 6. Souhrn

| Oblast | Výsledek |
|---|---|
| pytest F4 sada | 59 passed in 0.30s |
| pytest celá suite | 714 passed in 20.59s |
| ruff | All checks passed |
| mypy | 74 souborů |
| mutace PADÁ | 23 / 23 |
| mutace STRUKTURNÍ | 2 (M23, M24 — zámky, jednovláknově nedetekovatelné) |
| mutace nedosažitelná | 1 (M26 — viz STRUCTURAL_NOTE) |
| slepé testy | žádný |
