Files
dzentra_bot/docs/migrations/build_060_30_architecture.md

821 lines
41 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Build 060.30 — Market Data Acquisition Final Documentation Architecture
**Статус:** Accepted
**Build:** 060.30
**Подсистема:** Market Data / Trades Feed (Time & Sales)
**Дата начала:** 2026-08-02
**Дата завершения:** 2026-08-03
**Версия документа:** 1.1
---
## Связанные документы
- [Текущая архитектура Trades Feed](../architecture/trades_feed.md)
- [Эксплуатация Trade Stream Runtime](../operations/trades_feed_runtime.md)
- [Целевая архитектура Dzentra](../architecture/dzentra_target_architecture.md)
- [Master Roadmap](../roadmap/master-roadmap.md)
- [Итог Build 060.29](build_060_29.md)
- [Итог Build 060.30](build_060_30.md)
---
## 1. Назначение
Build 060.30 завершает ветку Trades Feed (Time & Sales) не новой
функциональностью, а согласованной документацией фактически
реализованной системы Builds 060.20060.29.
Build должен дать три уровня документации:
1. одну текущую архитектурную страницу Trades Feed;
2. одно эксплуатационное руководство Production Runtime;
3. исторические Build-документы, сохраняющие принятые решения и
результаты проверок соответствующего этапа.
По умолчанию Build 060.30 не меняет Production Runtime, SQL-схему,
Storage, Access или Replay. Изменение поведения допускается только при
воспроизведённом эксплуатационном дефекте, после отдельного анализа и
явного согласования.
---
## 2. Статус подэтапов
| Подэтап | Название | Статус |
|---|---|---|
| 060.30.0 | Documentation Baseline | Accepted |
| 060.30.1 | As-Built Trades Feed Architecture | Accepted |
| 060.30.2 | Production Operations Guide | Accepted |
| 060.30.3 | Project Entry Documentation | Accepted |
| 060.30.4 | Target Architecture Alignment | Accepted |
| 060.30.5 | Navigation and Historical Normalization | Accepted |
| 060.30.6 | Documentation Integrity Gate | Accepted |
| 060.30.7 | Final Documentation Verification | Accepted |
| 060.30.8 | Closure | Accepted |
Все подэтапы 060.30.0060.30.8 прошли формальный review и приняты.
Архитектурный документ имеет статус `Accepted`, итоговый report —
`Completed`; Build 060.30 закрыт 2026-08-03.
Перед 060.30.3 обязателен отдельный corrective gate **Docker Production
Safety Hardening**. ADR-060.30-008 реализован, прошёл формальный
read-only review и принят 2026-08-03.
---
## 3. Исходное состояние и инварианты
1. Builds 060.20060.29 завершены и имеют итоговые отчёты.
2. Фактическое поведение определяют текущие production-код, SQL
migrations, settings и тесты.
3. Принятый Build architecture фиксирует решения своего этапа, но не
обязан быть текущей обзорной страницей всей подсистемы.
4. Исторический список `out of scope` старого Build не является
описанием текущих ограничений после выполнения следующих Builds.
5. Production vertical slice завершён для Trades.
6. Quotes и Candles имеют Canonical models, PostgreSQL repositories,
Historical Access и Replay contracts, но не подключены как
Production Runtime consumers.
7. Storage write-side, Persistent Checkpoint, Historical Access и Replay
сохраняют разные границы ответственности и lifecycle.
8. История доступна только за фактически сохранённый период. Initial
exchange backfill и completeness metadata не реализованы.
9. Retention запускается только явно; автоматического scheduler нет.
10. Replay является caller-owned Python API без Bootstrap wiring и
automatic startup.
11. Пользовательское изменение `.gitignore` не относится к Build 060.30.
12. Перестановка локальных commits Build 045/046 выполняется отдельной
операцией после завершения Build 060.30 и до будущего push.
13. ADR-060.30-008 ограничивает Docker context production allowlist,
использует file-backed secrets и hardened containers. Images,
собранные до этого исправления, остаются потенциально
скомпрометированными и не должны публиковаться.
---
## 4. Иерархия источников истины
Для текущего поведения используется следующий приоритет:
```text
production code + SQL migrations + tests + settings
accepted current architecture + operations guide
overview + project structure + target architecture + roadmap
```
Для исторического вопроса источником являются architecture и report
соответствующего Build. Старый report не имеет приоритета над текущей
as-built страницей при ответе на вопрос, как система работает сейчас.
Исторические evidence, test counts и первоначальный scope не
переписываются задним числом. Устаревшая будущая нумерация получает
краткое retrospective-уточнение.
---
## 5. Целевая структура документации
```text
README.md
docs/architecture/trades_feed.md
├── фактическая архитектура и ownership
└── docs/operations/trades_feed_runtime.md
└── настройка, запуск, recovery и проверка
docs/migrations/build_060_20...build_060_30
└── исторические решения и verification evidence
docs/roadmap/master-roadmap.md
└── текущая последовательность и фактические статусы
```
Текущая архитектура не должна дублировать длинную историю исправлений.
Operations Guide не должен подменять архитектуру или обещать
неавтоматизированные функции.
---
## 6. Контракт текущей архитектуры Trades Feed
[Текущая архитектура Trades Feed](../architecture/trades_feed.md)
обязана фиксировать:
- точный scope Production Trades vertical slice;
- транспортную границу Dzengi и Canonical models;
- Live processing path;
- Startup Hydration и Startup Recovery;
- reconnect → subscription restore → Recovery → Live;
- единый Consistency state для Live и Recovery;
- durable write до продвижения checkpoint;
- Application, Runtime и task ownership;
- Scheduler, Supervisor и transport liveness;
- разделение Storage write-side, Historical Access и Replay;
- направление зависимостей между пакетами;
- доступный период истории;
- фактические ограничения Quotes, Candles, Retention и Replay.
На этой странице запрещено объявлять весь Market Data Acquisition
завершённым: production-завершён только Trades Feed.
---
## 7. Контракт Production Operations Guide
[Эксплуатационное руководство](../operations/trades_feed_runtime.md)
обязано содержать:
- проверенные требования Python и PostgreSQL;
- local и Docker Compose способы запуска;
- полный список Trade Stream и Market Data Storage settings;
- обязательную зависимость
`MARKET_DATA_STORAGE_ENABLED=true → TRADE_STREAM_ENABLED=true`;
- `DB_HOST=localhost` для host-run и `DB_HOST=postgres` для Compose;
- startup и graceful shutdown sequence;
- фатальность ошибок включённого Runtime и persistent write;
- автоматический запуск migrations 19;
- предупреждение о блокирующей migration 9;
- backup, benchmark и maintenance window для большой базы;
- ручной характер Retention;
- caller-owned характер Historical Access и Replay;
- безопасные unit, integration, PostgreSQL, stress и live-команды;
- troubleshooting и границу полноты истории;
- запрет публикации credentials и production DSN.
Runbook обязан описывать hardened Docker baseline без преувеличения его
возможностей и отдельно предупреждать о старых images, собранных до
появления проверенного `.dockerignore`.
Версионная политика PostgreSQL закрыта следующей границей:
1. PostgreSQL 16.14 остаётся единственным поддерживаемым production
deployment baseline и закреплён в текущем hardened Compose.
2. Совместимость приложения с PostgreSQL 17.10 проверена изолированной
matrix 060.30.7 для migrations, repositories, checkpoint, Historical
Access, Replay и Trade Runtime integration.
3. Этот результат не является приёмкой hardened PostgreSQL 17 image,
Compose cutover или upgrade существующего volume. Такой production
переход требует отдельного infrastructure gate.
---
## 8. Scope подэтапов
### 060.30.0 — Documentation Baseline
- инвентаризация README, architecture, roadmap и Builds 060.20060.29;
- фиксация источников истины;
- определение стабильных и исторических документов;
- фиксация текущих расхождений и границ Build;
- создание настоящего документа.
### 060.30.1 — As-Built Trades Feed Architecture
- создание `docs/architecture/trades_feed.md`;
- описание фактических Live, Recovery, Persistence, Checkpoint,
Historical Access и Replay boundaries;
- описание startup, reconnect и shutdown;
- фиксация Production scope только для Trades.
### 060.30.2 — Production Operations Guide
- создание `docs/operations/trades_feed_runtime.md`;
- проверка settings и feature flags по коду;
- описание host/Compose конфигурации PostgreSQL;
- описание migrations, Retention, Replay и verification procedures;
- фиксация временной PostgreSQL 16/17 policy до 060.30.7.
- фиксация Docker secret-in-image blocker без скрытого расширения scope.
### 060.30.3 — Project Entry Documentation
- обновление корневого `README.md` и `app/README.md`;
- обновление `overview.md` и `project_structure.md`;
- отделение общего/исторического `storage` foundation от
`market_data/storage`;
- замена устаревшего `app/src/storage/README.md`;
- согласование `.env.example` с фактическими settings;
- описание обычного developer workflow и обязательного Pyright gate;
- добавление понятной навигации к архитектуре и runbook.
### 060.30.4 — Target Architecture Alignment
- актуализация статусов 060.26060.29;
- добавление Persistent Storage, Checkpoint, Access и Replay;
- исправление фактической схемы partitioning;
- фиксация 060.30 как текущего Build до его закрытия;
- актуализация Master Roadmap по фактическим статусам;
- сокращение исторического дублирования в Master Roadmap до ссылок.
### 060.30.5 — Navigation and Historical Normalization
- рабочие относительные Markdown-ссылки;
- retrospective-уточнения ошибочной будущей нумерации;
- единая семантика статусов architecture/report;
- явная маркировка исторических Stage roadmaps как архивных;
- сохранение исторических scope и evidence без широкого переписывания.
### 060.30.6 — Documentation Integrity Gate
- локальная проверка обязательных документов и относительных ссылок;
- запрет ссылок за пределы repository;
- включение gate в обычную offline regression;
- отсутствие сетевой зависимости и изменения Production Runtime.
### 060.30.7 — Final Documentation Verification
- Pyright `0 errors, 0 warnings`;
- full offline regression и `compileall`;
- `pip check` и `git diff --check`;
- проверка команд, env names и Compose configuration;
- PostgreSQL 17 application compatibility verification с явным
сохранением PostgreSQL 16.14 production baseline;
- отдельные read-only review архитектуры, runbook и полного diff.
### 060.30.8 — Closure
- создание `docs/migrations/build_060_30.md`;
- перевод всех подэтапов в `Accepted`, Build в `Completed`;
- перевод Master Roadmap на `060.30 Completed / 061.00 Planned`;
- подготовка точного staging-списка без `.gitignore`.
---
## 9. Политика исторических документов
Исторические Build-документы сохраняют:
- принятый на тот момент scope;
- архитектурные решения;
- результаты тестов;
- известные на тот момент ограничения.
В них допускаются только ограниченные корректировки:
- неверное имя или номер будущего Build;
- неработающая локальная ссылка;
- status metadata;
- trailing whitespace и окончание файла;
- краткое retrospective-пояснение, что downstream Build уже выполнен.
Запрещено заменять историческое описание новым состоянием системы или
пересчитывать старые verification results.
---
## 10. Политика языка, ссылок и секретов
1. Документация и комментарии проекта пишутся на русском языке.
2. Названия классов, методов, settings, протоколов и команд сохраняются
в исходном английском написании.
3. Навигация использует настоящие относительные Markdown-ссылки.
4. Backticks используются для идентификаторов, а не вместо ссылок.
5. В примерах запрещены настоящие токены, пароли, API secrets и
production DSN.
6. Команды с destructive test cleanup допускаются только для harness,
который проверяет loopback endpoint и имя базы `dzentra_test_*`.
---
## 11. Критерии приёмки 060.30.0060.30.2
### 060.30.0
Подэтап может быть принят, если:
1. зафиксированы источники истины и границы Build;
2. перечислены все подэтапы 060.30;
3. определены три канонических документа;
4. Production-код, SQL и `.gitignore` не изменены;
5. исправление Git history явно оставлено отдельной операцией.
### 060.30.1
Подэтап может быть принят, если:
1. current architecture соответствует фактическому dependency graph;
2. Live и Recovery используют общий Consistency owner;
3. durable write и checkpoint описаны в правильном порядке;
4. startup, reconnect и shutdown соответствуют production-коду;
5. Access и Replay не представлены как часть automatic Runtime;
6. Quotes и Candles не названы production feeds;
7. все локальные ссылки разрешаются.
### 060.30.2
Подэтап может быть принят, если:
1. settings сверены с `config.py` и `.env.example`;
2. указано, что обычный Application startup требует PostgreSQL для
базовой схемы даже при выключенном Market Data Storage;
3. host/Compose DB addressing описан однозначно;
4. PostgreSQL 16/17 status не преувеличен;
5. migration 9 имеет backup/benchmark/maintenance warning;
6. Retention и Replay не названы автоматическими;
7. команды соответствуют pytest markers и safety harness;
8. документ не содержит секретов;
9. текущий Compose build не представлен как production-safe до появления
проверенного `.dockerignore` и согласованного hardening.
---
## 12. Критерии приёмки 060.30.3060.30.8
### 060.30.3
1. README описывает запуск существующего checkout, а не генерацию нового.
2. Overview и Project Structure перечисляют фактические пакеты.
3. Общий/исторический `storage` и Canonical `market_data/storage`
разведены без ложного объявления всего `src.storage` устаревшим.
4. `.env.example` содержит все поддерживаемые settings без secrets.
5. Developer workflow включает requirements, Pyright и pytest markers.
6. Входные страницы ведут к current architecture и runbook.
### 060.30.4
1. Target Architecture содержит фактические результаты 060.26060.29.
2. Физическое partitioning описано как отдельный parent/default table
каждого типа и явно создаваемые UTC-month partitions.
3. Master Roadmap показывает 060.30 текущим до его завершения.
4. Подробная историческая спецификация не дублируется в roadmap.
5. После closure следующий этап указан как 061.00.
### 060.30.5
1. Исправлена явно неверная downstream-нумерация Builds.
2. Architecture имеет статус `Accepted`, итоговый report — `Completed`.
3. Historical scope и test evidence сохранены.
4. Stage roadmaps явно обозначены как архивные.
5. Внутренние переходы являются настоящими Markdown-ссылками.
### 060.30.6
1. Link gate работает локально без сети.
2. Проверяются обязательные документы, отсутствующие targets и выход за
repository root.
3. Gate входит в default offline regression.
4. Production Runtime и SQL не меняются.
### 060.30.7
1. Pyright возвращает `0 errors, 0 warnings`.
2. Offline regression, `compileall` и `pip check` проходят.
3. Documentation link gate и `git diff --check` проходят.
4. Compose config проверен без раскрытия secrets.
5. PostgreSQL 17.10 application compatibility matrix проходит, а
PostgreSQL 17 явно не включается в поддерживаемый deployment baseline.
6. Независимые read-only review не содержат открытых findings.
### 060.30.8
1. Создан итоговый `build_060_30.md` без преждевременных claims.
2. Все подэтапы переведены в `Accepted`, Build — в `Completed`.
3. Master Roadmap переведён на `060.30 Completed / 061.00 Planned`.
4. Подготовлен точный staging-список без `.gitignore`.
5. Commit и push выполняются только по отдельному поручению.
---
## 13. Общие критерии закрытия Build
Build 060.30 может быть закрыт, если:
1. стабильные страницы согласованы между собой и с кодом;
2. README ведёт к текущей архитектуре и runbook;
3. Target Architecture и Master Roadmap имеют фактические статусы;
4. документационный static gate проходит без сети;
5. Pyright, offline regression, PostgreSQL verification и compileall
проходят;
6. `git diff --check` не содержит ошибок;
7. полный read-only review не содержит открытых findings;
8. итоговый report создан только после фактической приёмки;
9. `.gitignore` не входит в staging;
10. Docker secret-in-image blocker устранён либо Compose явно исключён из
поддерживаемых production deployment paths;
11. commit и push выполняются только по отдельному поручению.
---
## 14. Архитектурные решения
### ADR-060.30-001 — Current-state отделён от Build history
**Статус:** Accepted
Текущая архитектура описывается одной стабильной страницей, а Build
reports остаются историческими evidence.
### ADR-060.30-002 — Trades Feed имеет одну каноническую страницу
**Статус:** Accepted
Обзорные документы и README ссылаются на
`docs/architecture/trades_feed.md`, а не копируют подробности Runtime.
### ADR-060.30-003 — Operations имеют один канонический runbook
**Статус:** Accepted
Settings, startup, recovery, migrations и verification procedures
поддерживаются в `docs/operations/trades_feed_runtime.md`.
### ADR-060.30-004 — Исторические документы не переписываются широко
**Статус:** Accepted
060.30 исправляет навигацию и явно устаревшие метаданные, но сохраняет
исторические решения и результаты.
### ADR-060.30-005 — Documentation links получают static gate
**Статус:** Accepted
060.30.6 добавляет локальную проверку обязательных документов и
внутренних Markdown-ссылок.
### ADR-060.30-006 — Production behavior не меняется без дефекта
**Статус:** Accepted
Финальная документация не является основанием для скрытого изменения
Runtime или SQL. Реальный дефект анализируется и согласуется отдельно.
### ADR-060.30-007 — Git history repair отделён от Build 060.30
**Статус:** Accepted
Перестановка Build 045/046 и повторная проверка локальных commits
выполняются после фиксации 060.30, но до push, с backup ref и отдельным
разрешением.
### ADR-060.30-008 — Docker hardening обязателен до 060.30.3
**Статус решения:** Accepted
**Статус реализации:** Accepted (2026-08-03)
Утверждён отдельный corrective gate со следующими границами:
- корневой `.dockerignore` исключает secrets, `.venv`, caches, tests,
logs, data и локальные artifacts;
- Dockerfile копирует только production requirements и `app/src`,
использует закреплённый image, полный hash-lock и non-root user;
- Compose не содержит placeholder secrets, не публикует PostgreSQL
наружу по умолчанию и не создаёт бесконечный fatal crash loop;
- Compose требует явный project namespace; оператор обязан проверить
его уникальность, потому что повторное имя подключит существующие
named volumes этого namespace;
- production secrets поддерживают явный file-backed contract `*_FILE`
с fail-fast проверками конфликтов и пустых значений;
- container получает `no-new-privileges`, минимальные capabilities,
read-only filesystem, отдельный writable `/tmp` и явный shutdown
budget;
- PostgreSQL 16.14 остаётся единственным поддерживаемым production
deployment baseline; совместимость приложения с PostgreSQL 17.10
проверена отдельно, но production cutover требует нового gate;
- PostgreSQL bootstrap-admin отделён от непривилегированной application
role; role setup атомарен, а healthcheck отклоняет legacy superuser,
memberships и неверного owner;
- image использует `SIGINT`: до запуска Aiogram polling его принимает
`asyncio.run`, превращая остановку в cancellation с ожиданием уже
начатой blocking lifecycle operation;
- verification доказывает отсутствие `.env` и test secret во всех image
layers, non-root execution и clean Compose configuration;
- удаление старых images и rotation реальных credentials требуют
отдельного разрешения.
Corrective gate не меняет Trade Runtime, SQL или Market Data contracts.
---
## 15. План файлов
Новые файлы 060.30.0060.30.2:
```text
docs/migrations/build_060_30_architecture.md
docs/architecture/trades_feed.md
docs/operations/trades_feed_runtime.md
```
Файлы corrective gate ADR-060.30-008:
```text
.dockerignore
app/.env.example
app/requirements.lock
app/src/core/config.py
app/tests/unit/core/test_config.py
app/tests/unit/infra/test_docker_hardening.py
infra/compose/docker-compose.yml
infra/compose/docker-compose.exchange-auth.yml
infra/docker/Dockerfile
infra/docker/postgres/Dockerfile
infra/docker/postgres/init-application-role.sh
infra/docker/postgres/healthcheck-application-role.sh
docs/migrations/build_060_30_architecture.md
docs/operations/trades_feed_runtime.md
```
Планируемые изменения следующих подэтапов:
```text
README.md
app/README.md
app/src/storage/README.md
docs/architecture/overview.md
docs/architecture/project_structure.md
docs/operations/trades_feed_runtime.md (точечная синхронизация)
docs/architecture/dzentra_target_architecture.md
docs/roadmap/master-roadmap.md
historical Build documents с точечными retrospective fixes
documentation integrity gate
```
Итоговый файл создаётся только в 060.30.8:
```text
docs/migrations/build_060_30.md
```
---
## 16. Вне scope
- изменение Trade Runtime, Storage, Access или Replay behavior;
- SQL migration 10;
- online replacement для migration 9;
- initial historical backfill;
- automatic Retention Scheduler;
- Production consumers Quotes и Candles;
- Replay Bootstrap или automatic startup;
- Backtesting, Analytics API и exchange simulator;
- новая Market Data feed;
- deployment, commit или push;
- изменение пользовательского `.gitignore`;
- переписывание Git history в составе документационного Build.
Исправление Docker security finding не входит в принятые
060.30.0060.30.2. Оно реализовано отдельным corrective gate перед
060.30.3 и принято 2026-08-03. Deployment, удаление старых images и
rotation реальных credentials по-прежнему находятся вне scope.
---
## 17. Verification evidence
Проверки реализации 060.30.0060.30.2 на 2026-08-02:
```text
Новые canonical documents: 3
Проверено относительных Markdown links: 41, clean
Ссылки за пределы repository: 0
Settings из config отражены в guide: 36/36
Лишние core settings в guide: 0
Синтаксис сложных shell recipes: clean
Whitespace новых файлов: clean
Production/SQL files changed: 0
Git index: empty
Постороннее изменение .gitignore: сохранено вне Build
```
Независимые read-only review архитектурного контракта, as-built страницы
и исправленного operations guide завершены без открытых findings.
Единственный P2 основной схемы исправлен и прошёл узкий повторный review.
060.30.0060.30.2 приняты 2026-08-02.
Docker secret-in-image blocker зарегистрирован; отдельный hardening
contract реализован, прошёл отдельный приёмочный read-only review и
принят 2026-08-03.
Проверки реализации ADR-060.30-008:
```text
Target config/Docker tests: 73 passed
Pyright: 0 errors, 0 warnings
Full offline regression: 2723 passed, 95 deselected
Compose base + exchange override config: clean
Fail-fast обязательных Compose controls: 8/8 clean
Production dependency hash-lock: 25 packages, clean
Pinned bot/PostgreSQL image builds: clean
Image pip check: clean
Image layers: 9 checked
Project .env/.venv/tests/cache in layers: 0
Sentinel secret content in layers: 0
Container UID/GID: 10001:10001
Read-only root + dropped capabilities: clean
PostgreSQL isolated network/public ports: clean / 0
PostgreSQL application dangerous flags: 5/5 disabled
PostgreSQL owner + application DDL probe: clean
Normalized admin/application equality: rejected
Privileged-role healthcheck rejection: clean
PostgreSQL role membership rejection: clean
Atomic role-init rollback fault probe: clean
Cross-UID file-secret read probe: clean
Early-startup stop-signal probe: clean
Existing PostgreSQL 17 volume: detected, untouched
Controlled Docker cleanup: clean
```
Test-only Compose container, network, volumes, layer archives и
secret-файлы после проверки удалены. Старые локальные/registry images и
реальные credentials автоматически не удалялись и не менялись.
Проверки реализации 060.30.3 на 2026-08-03:
```text
Application settings в .env.example: 41/41
Относительные ссылки touched pages: 46, clean
Documented command paths: clean
LF / final newline / trailing whitespace: 8 files, clean
Target config/Docker tests: 73 passed
Pyright: 0 errors, 0 warnings
Full offline regression: 2723 passed, 95 deselected
Новые Production/SQL/Docker изменения: 0
Пользовательский .gitignore: сохранён вне scope
```
Первичный независимый architecture review обнаружил три P2 в описании
Quote/Candle scope, Bootstrap I/O и legacy import graph. Формулировки
исправлены; повторный review и два параллельных scope/settings review
завершены без открытых findings. 060.30.3 принят 2026-08-03.
Проверки реализации 060.30.4 на 2026-08-03:
```text
Итоговые reports 060.26060.29: 4/4 Completed
Partitioned parent/default families: 3/3
Partition/Retention wiring в Bootstrap: отсутствует
Относительные ссылки touched pages: 24, clean
Stale-фразы предыдущей редакции: 0
Master Roadmap: 1751 -> 227 строк
Изменения отдельных Stage-roadmaps: 0
LF / final newline / trailing whitespace: clean
Git diff --check: clean
Pyright: 0 errors, 0 warnings
Full offline regression: 2723 passed, 95 deselected
Новые Production/SQL/Docker изменения: 0
Пользовательский .gitignore: сохранён вне scope
```
Три независимых read-only review обнаружили три уникальные P2:
преждевременное закрытие всего Market Data Acquisition в roadmap,
неверную гарантию межстраничного Historical snapshot и слишком узкий
UTC-only контракт Replay Clock. Формулировки исправлены; все три
повторных review завершены без открытых findings. 060.30.4 принят
2026-08-03.
Проверки реализации 060.30.5 на 2026-08-03:
```text
Architecture statuses 060.20060.29: 11/11 Accepted
Final report statuses 060.20060.29: 11/11 Completed
Retrospective notes: 9/9
Архивные Stage roadmaps: 7/7
Ссылки Master -> Stage: 7/7, clean
Ссылки Stage -> Master/Target: 14/14, clean
Relative links во всех docs: 229, broken 0
Документы scope 060.30.5: 34
CRLF / missing final newline: 0 / 0
Stage 08/09 files: 0
Git diff --check: clean
Новые Production/SQL/Docker изменения: 0
Пользовательский .gitignore: сохранён вне scope
```
Первичный acceptance review выявил два класса P2: неполную фактическую
цепочку в части retrospective-примечаний и оставшиеся некликабельные
переходы/списки связанных документов. Все девять примечаний приведены к
единой цепочке до 060.30 и ограничению будущей нумерации только 061.00;
навигация нормализована. Три повторных review завершены без открытых
findings. 060.30.5 принят 2026-08-03.
Проверки реализации 060.30.6 на 2026-08-03:
```text
Целевой documentation static: 331 passed
Полный static-набор: 332 passed
Documentation integrity gate: 365 documents, 252 links, 0 issues
Pyright: 0 errors, 0 warnings
Полная offline-регрессия: 3054 passed, 95 deselected
Git diff --check: clean
Новые Production Runtime / SQL изменения: 0 / 0
Пользовательский .gitignore: сохранён вне scope
```
Приёмочные read-only review отдельно проверили Markdown/CommonMark
precedence, безопасность URI и filesystem paths, переносимость Windows,
линейность обработки больших документов и wiring команд в README,
runbook, pytest и Pyright. Все воспроизведённые пограничные findings
исправлены с regression-тестами; повторные review завершены без открытых
замечаний. 060.30.6 и ADR-060.30-005 приняты 2026-08-03.
Выполненная verification matrix 060.30.7:
```text
Documentation integrity gate: 365 documents, 252 links, 0 issues
Полный static-набор: 332 passed
Pyright: 0 errors, 0 warnings
Dependency integrity: pip check clean
Compileall во временном cache: 618 files, clean
Полная offline-регрессия: 3054 passed, 95 deselected
Target config/Docker tests: 73 passed
Compose base + exchange-auth config: clean
Shell syntax затронутых scripts: clean
PostgreSQL application compatibility: 17.10 / 170010
PostgreSQL official image digest: sha256:8189a1f6e40904781fc9e2612687877791d21679866db58b1de996b31fc312e4
Application-role dangerous flags: 5/5 disabled
Полный PostgreSQL 17 integration: 90 passed
Критические PG17 race/restart repeats: 10 x 6 = 60 passed
Durable restart probe: preserved
Test-only container/network/volume/image: removed
Test-only secret files: removed
PostgreSQL 16.14 deployment baseline: unchanged
Существующие Docker resources: untouched
Git index: empty
Пользовательский .gitignore: сохранён вне scope
```
Предварительный review 060.30.7 обнаружил три P2: смешение application
compatibility с deployment acceptance, ложную гарантию уникальности
Compose namespace и backup-команду, привязанную к default database
settings. Границы и runbook исправлены без изменения Runtime, SQL или
Compose behavior.
Три финальных read-only review дополнительно обнаружили четыре P2:
устаревший current-status, небезопасный lifetime cleanup trap в
`compileall` recipe, ослабленную offline regression-команду и
неоднозначное расширение точного PostgreSQL 16.14 baseline до
произвольного PostgreSQL 16. Все findings исправлены; повторные
architecture, runbook/security и full-diff review завершены без открытых
замечаний. 060.30.7 принят 2026-08-03.
---
## 18. Итог
060.30.0060.30.8 и corrective gate ADR-060.30-008 формально приняты.
Итоговый report создан; Build 060.30 имеет статус `Completed`.
Во время подготовки runbook был обнаружен pre-production finding:
прежний Docker context включал `app/.env`. ADR-060.30-008 исправил этот
дефект allowlist-контекстом, явным `COPY`, file-backed secrets,
non-root/read-only containers и закрытой database network.
PostgreSQL 16.14 остаётся единственным production deployment baseline.
PostgreSQL 17.10 проверен только как application compatibility target.
Следующий запланированный Build — 061.00 Validation and Canonicalization
Boundary Refactoring. Он не начат и требует отдельного read-only
архитектурного анализа.
Commit, аудит локальной Git history и push не входят в Closure и
выполняются только по отдельным поручениям.