# 🔴 Tier 1 — v1.0 Production Blockers

Всё что нужно для production readiness. Без этих фич сервер небезопасен для реального деплоя.

---

## Server Hardening

### Content-Type Validation

Middleware: `415 Unsupported Media Type` если не `application/json`.

- **Усилия**: ~10 строк

### Payload Size Limit

`max_request_size: 1MB`, reject > лимита с HTTP 413.

- **Усилия**: ~10 строк

### Input Validation (tool_name + args depth)

`tool_name`: min 1, max 256, pattern `^[\w.\-]+$`. `args`: max depth + max value length.

- **Усилия**: ~30 строк (Pydantic validators)

### Backpressure / Max Concurrent Checks

`asyncio.Semaphore` middleware, `max_concurrent_checks: 100`, return `503` при перегрузке.

- **Усилия**: ~30 строк

### HTTP Request Lifecycle Timeout

Общий таймаут HTTP запроса (получение тела + обработка + ответ), дефолт 30s.

- **Усилия**: ~10 строк

---

## Approval Flow

### Approval Timeout & Escalation

Сейчас approval висит вечно. Нужен `timeout: 300s`, `on_timeout: BLOCK`, escalation chain.

- **Усилия**: Средние

### Approval Audit Trail

Трейсы не записывают кто одобрил/отклонил и когда. Критично для compliance.

- **Усилия**: ~40 строк

### Stale Approval GC

`_pending` и `_responses` растут бесконечно. Нужен TTL + периодический sweep.

- **Усилия**: ~40 строк

### Concurrent Approval Race Condition

`respond()` не проверяет повторный ответ. Первый ответ должен выигрывать.

- **Усилия**: ~5 строк

### Args Sanitization в Approval

PII/секреты отправляются в Telegram открытым текстом. Нужно sanitize перед отправкой.

- **Усилия**: ~50 строк

### Approval Polling Timeout

Нет `asyncio.wait_for` в HTTP handler для `/check-approval`.

- **Усилия**: ~15 строк

### `_approval_meta` Cleanup

`_approval_meta` в engine растёт бесконечно. Нужен TTL sweep.

- **Усилия**: ~10 строк

---

## Security & Data Protection

### Secret/Credential Detection

PII есть, но нет детектора секретов (AWS keys, JWT, private keys, GitHub tokens).

- **Усилия**: ~80 строк (regex по аналогии с PII)

### Admin Token Separation

Один токен для агентов и админов. Нужно: `POLICYSHIELD_API_TOKEN` (read) + `POLICYSHIELD_ADMIN_TOKEN` (write).

- **Усилия**: ~30 строк

### Sensitive Data в Error Responses

Stack traces в 500 ответах могут содержать пути, args, PII. Нужен `debug` flag.

- **Усилия**: ~20 строк

### Log Sanitization Filter

`logger.error()` может слить PII/секреты. Нужен `logging.Filter`.

- **Усилия**: ~30 строк

### Trace File Permissions

JSONL файлы создаются с `644`. Нужно `600` (owner-only).

- **Усилия**: 1 строка

### Admin Rate Limit / Brute-Force Protection

Нет rate limit на `/kill`, `/reload`. Нет защиты от brute-force подбора токена.

- **Усилия**: ~30 строк

---

## Lifecycle & Reliability

### Graceful Shutdown & Signal Handling

SIGTERM = мгновенная смерть. Нужно: flush traces, stop Telegram poller, drain requests.

- **Усилия**: ~40 строк

### Trace Flush on Shutdown

`tracer.flush()` не вызывается в `lifespan()`. До 99 записей теряются при деплое.

- **Усилия**: 1 строка

### Config Validation at Startup

Сервер не падает при невалидном конфиге. Должен быть fail-fast.

- **Усилия**: ~50 строк

### Fail-Open / Fail-Closed Mode

Сейчас поведение при ошибке engine неопределено. Нужен `on_error: block|allow`.

- **Усилия**: ~30 строк

### Engine Check Timeout

Нет таймаута на `engine.check()`. Катастрофический backtracking regex → зависание.

- **Усилия**: ~20 строк

### Atomic Hot-Reload

Если новые правила невалидны, старые уже сброшены. Нужен load → validate → swap.

- **Усилия**: ~20 строк

### Startup Self-Test

Скомпилировать regex, прогнать dry-run, проверить detectors при старте.

- **Усилия**: ~50 строк

### Python Version Check

Нет runtime проверки Python 3.10+. Пользователь видит непонятный SyntaxError.

- **Усилия**: 3 строки

### Structured Logging (JSON)

Plaintext логи → structlog/JSON formatter для Datadog/ELK.

- **Усилия**: ~30 строк

### Telegram Poller Shutdown

`TelegramApprovalBackend.stop()` не вызывается. Daemon thread умирает без cleanup.

- **Усилия**: ~10 строк
