Build 060.30: finalize Market Data Acquisition documentation
This commit is contained in:
820
docs/migrations/build_060_30_architecture.md
Normal file
820
docs/migrations/build_060_30_architecture.md
Normal file
@@ -0,0 +1,820 @@
|
||||
# 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.20–060.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.0–060.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.20–060.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 1–9;
|
||||
- предупреждение о блокирующей 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.20–060.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.26–060.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.0–060.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.3–060.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.26–060.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.0–060.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.0–060.30.2. Оно реализовано отдельным corrective gate перед
|
||||
060.30.3 и принято 2026-08-03. Deployment, удаление старых images и
|
||||
rotation реальных credentials по-прежнему находятся вне scope.
|
||||
|
||||
---
|
||||
|
||||
## 17. Verification evidence
|
||||
|
||||
Проверки реализации 060.30.0–060.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.0–060.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.26–060.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.20–060.29: 11/11 Accepted
|
||||
Final report statuses 060.20–060.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.0–060.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 и
|
||||
выполняются только по отдельным поручениям.
|
||||
Reference in New Issue
Block a user