diff --git a/CHANGELOG_RU.md b/CHANGELOG_RU.md index bc7682a..4357f9c 100644 --- a/CHANGELOG_RU.md +++ b/CHANGELOG_RU.md @@ -1,5 +1,37 @@ # Журнал изменений +## release-readiness-v0.1 - 2026-06-03 + +Назначение этапа: довести DetMir/AWatch-rus до проверяемого release-readiness +пакета для пилота, экспертной оценки и последующей публикации релиза без +раскрытия приватного коммерческого контура. + +### Добавлено + +- UI-блок портала `Готовность системы`: статус `OK/WARN/FAIL`, дата bundle, + статус checksum, статус detached signature, fingerprint публичного ключа и + ручная кнопка проверки bundle. +- Prometheus/Grafana alert rules: + `detmir_readiness_ok == 0` и + `detmir_readiness_signature_verified == 0`. +- Подпись readiness bundle через detached signature `sha256sums.txt.sig`. +- Retention для readiness archives и unit-тесты на подпись/retention. +- `docs/RELEASE_READINESS_V0.1_RU.md` - сводный акт готовности релиза v0.1. +- `docs/SBOM_V0.1_RU.md` - human-readable SBOM profile и команды генерации + машинных SBOM artifacts. +- `docs/PORTAL_SCREENSHOTS_RU.md` - перечень обезличенных screenshots портала. +- `docs/diagrams/release-readiness-v0.1.md` - схема release-readiness path. + +### Проверено + +- `cargo fmt --manifest-path adk-rust/Cargo.toml --all -- --check`. +- `cargo test --manifest-path adk-rust/Cargo.toml -p detmir-readiness -p detmir-portal`. +- `cargo clippy --manifest-path adk-rust/Cargo.toml -p detmir-readiness -p detmir-portal --all-targets -- -D warnings`. +- `node --check adk-rust/crates/detmir-portal/src/static/app.js`. +- Ansible syntax-check для AW server и DetMir portal deploy playbooks. +- Runtime deployment на проектные сервисы DetMir без изменения pfSense или + Proxmox platform layer. + ## v1.0.1-public-review - 2026-06-03 Назначение релиза: публичный пакет для экспертной оценки DetMir/AWatch-rus и diff --git a/docs/ARCHITECTURE_RU.md b/docs/ARCHITECTURE_RU.md index d7f8f59..ced210d 100644 --- a/docs/ARCHITECTURE_RU.md +++ b/docs/ARCHITECTURE_RU.md @@ -152,4 +152,5 @@ DetMir не заявляется как сертифицированная СЗ - `docs/ADMIN_GUIDE_RU.md` - `docs/OPERATOR_GUIDE_RU.md` - `docs/GRAFANA_DASHBOARDS_RU.md` +- `docs/diagrams/release-readiness-v0.1.md` - `adk-rust/RUNBOOK.md` diff --git a/docs/PORTAL_SCREENSHOTS_RU.md b/docs/PORTAL_SCREENSHOTS_RU.md new file mode 100644 index 0000000..9543a90 --- /dev/null +++ b/docs/PORTAL_SCREENSHOTS_RU.md @@ -0,0 +1,24 @@ +# Скриншоты портала release-readiness v0.1 + +Скриншоты предназначены для публичной демонстрации и экспертной оценки. Они +сняты на обезличенных mock data с реальным frontend-кодом портала. + +Правило: screenshots не должны содержать live domains, private IPs, +пользовательские ФИО, live case IDs, runtime evidence paths или реальные +forensic hashes. + +## Состав + +| Экран | Файл | +|---|---| +| Оператор и готовность системы | `docs/screenshots/release-v0.1/portal-operator-readiness.png` | +| Руководитель и объяснение индекса | `docs/screenshots/release-v0.1/portal-manager-workforce.png` | +| Инциденты ИБ и evidence | `docs/screenshots/release-v0.1/portal-incidents-evidence.png` | +| Отчеты, UEBA/risk и Markdown export | `docs/screenshots/release-v0.1/portal-reports-risk.png` | +| Владелец и summary | `docs/screenshots/release-v0.1/portal-owner-summary.png` | + +## Повторная генерация + +Скриншоты можно переснимать только на demo/mock данных или на специально +обезличенном стенде. Live commercial DetMir contour не использовать как +источник публичных PNG без отдельной ручной проверки приватности. diff --git a/docs/RELEASE_MANIFEST_2026-06.md b/docs/RELEASE_MANIFEST_2026-06.md index d63e365..c9ae570 100644 --- a/docs/RELEASE_MANIFEST_2026-06.md +++ b/docs/RELEASE_MANIFEST_2026-06.md @@ -16,6 +16,20 @@ contains sanitized source, documentation, install-kit archives, SBOM inputs and checksums. It does not contain private runtime configuration, live customer inventory, tokens, passwords, screenshots, runtime databases or evidence. +## Release-readiness v0.1 overlay + +Additional readiness artifacts: + +- `docs/RELEASE_READINESS_V0.1_RU.md` +- `docs/SBOM_V0.1_RU.md` +- `docs/PORTAL_SCREENSHOTS_RU.md` +- `docs/diagrams/release-readiness-v0.1.md` +- `docs/screenshots/release-v0.1/portal-operator-readiness.png` +- `docs/screenshots/release-v0.1/portal-manager-workforce.png` +- `docs/screenshots/release-v0.1/portal-incidents-evidence.png` +- `docs/screenshots/release-v0.1/portal-reports-risk.png` +- `docs/screenshots/release-v0.1/portal-owner-summary.png` + ## Artifacts ```text diff --git a/docs/RELEASE_NOTES_2026-06.md b/docs/RELEASE_NOTES_2026-06.md index 6bb707b..ed3cbbb 100644 --- a/docs/RELEASE_NOTES_2026-06.md +++ b/docs/RELEASE_NOTES_2026-06.md @@ -4,6 +4,18 @@ Release tag: `v1.0.1-public-review` Release type: public expert-review/source package. +## Release-readiness v0.1 addendum + +Добавлен отдельный слой готовности поставки: + +- portal UI блок `Готовность системы`; +- signed readiness bundle с `sha256sums.txt.sig`; +- Prometheus/Grafana alerts по readiness и signature verification; +- SBOM profile `docs/SBOM_V0.1_RU.md`; +- release readiness акт `docs/RELEASE_READINESS_V0.1_RU.md`; +- architecture схема `docs/diagrams/release-readiness-v0.1.md`; +- обезличенные screenshots портала в `docs/screenshots/release-v0.1/`. + ## Что входит - Обезличенный public source package DetMir/AWatch-rus. diff --git a/docs/RELEASE_READINESS_V0.1_RU.md b/docs/RELEASE_READINESS_V0.1_RU.md new file mode 100644 index 0000000..3c3a786 --- /dev/null +++ b/docs/RELEASE_READINESS_V0.1_RU.md @@ -0,0 +1,141 @@ +# Release readiness v0.1 + +Документ фиксирует готовность DetMir/AWatch-rus к первому управляемому release +readiness циклу: проверяемость сборки, SBOM, installation/runbook, архитектура, +портал, readiness bundle и публичная гигиена. + +Дата фиксации: `2026-06-03`. + +## 1. Назначение + +`release-readiness-v0.1` не является отдельным коммерческим SKU и не заменяет +GitHub release tag. Это контрольная точка готовности поставки перед пилотом, +экспертной оценкой и публикацией release assets. + +Цели: + +- показать, что контур проверяется одной readiness-командой; +- подтвердить подпись и checksum readiness bundle; +- зафиксировать SBOM/third-party inventory; +- дать эксперту повторяемую установку и ручной сценарий проверки; +- приложить обезличенные screenshots портала; +- сохранить разделение public source и live commercial DetMir runtime. + +## 2. Состав release-readiness пакета + +| Блок | Файл/артефакт | Статус | +|---|---|---| +| Changelog | `CHANGELOG_RU.md` | готов | +| Release notes | `docs/RELEASE_NOTES_2026-06.md` | готов | +| Manifest | `docs/RELEASE_MANIFEST_2026-06.md` | готов | +| SBOM profile | `docs/SBOM_V0.1_RU.md` | готов | +| SBOM checklist | `docs/SBOM_RELEASE_CHECKLIST_RU.md` | готов | +| Installation | `docs/INSTALL_FOR_EXPERT_RU.md`, `docs/INSTALL_RU.md` | готов | +| Runbook | `adk-rust/RUNBOOK.md`, `docs/runbook.md` | готов | +| Architecture | `docs/ARCHITECTURE_RU.md`, `docs/diagrams/release-readiness-v0.1.md` | готов | +| Portal screenshots | `docs/PORTAL_SCREENSHOTS_RU.md`, `docs/screenshots/release-v0.1/*.png` | готов | +| Readiness docs | `docs/PRODUCTION_READINESS_RU.md` | готов | +| Public audit | `docs/RELEASE_AUDIT_2026-06.md` | готов | + +## 3. Readiness bundle + +Минимальный состав latest bundle: + +- `detmir-readiness-latest.json`; +- `detmir-readiness-act.md`; +- `detmir-readiness-act.html`; +- `sha256sums.txt`; +- `sha256sums.txt.sig`; +- `public-key.pem`; +- `detmir-readiness-status.json`; +- `detmir-readiness.prom`. + +Критерии приемки: + +- `detmir_readiness_ok 1`; +- `detmir_readiness_signature_verified 1`; +- `checksum_verified=true`; +- `signature.verified=true`; +- `signature.public_key_fingerprint_sha256` совпадает с публично + зафиксированным fingerprint в `adk-rust/RUNBOOK.md`. + +## 4. Portal readiness UI + +В портале должен быть виден блок `Готовность системы`: + +- статус `OK/WARN/FAIL`; +- дата генерации readiness bundle; +- статус подписи; +- статус checksum; +- короткий fingerprint публичного ключа; +- кнопка `Проверить bundle`. + +Проверяемые API: + +```text +GET /api/readiness/bundle +GET /api/readiness/verify +``` + +Через внешний gateway эти endpoints должны оставаться под действующей схемой +аутентификации портала. + +## 5. Prometheus/Grafana alerts + +Alert rules: + +```promql +detmir_readiness_ok == 0 +detmir_readiness_signature_verified == 0 +``` + +Поставочный файл: + +```text +aw-server/detmir-readiness-alerts.yml +``` + +Цель: оператор должен увидеть не только падение health-check, но и нарушение +доказуемости readiness bundle. + +## 6. Проверки перед публикацией + +```bash +node --check adk-rust/crates/detmir-portal/src/static/app.js +cargo fmt --manifest-path adk-rust/Cargo.toml --all -- --check +CARGO_TARGET_DIR=/tmp/detmir-release-target \ + cargo test --manifest-path adk-rust/Cargo.toml -p detmir-readiness -p detmir-portal +CARGO_TARGET_DIR=/tmp/detmir-release-target \ + cargo clippy --manifest-path adk-rust/Cargo.toml -p detmir-readiness -p detmir-portal --all-targets -- -D warnings +ansible-playbook -i ansible/inventory.ini ansible/deploy_aw_server.yml --syntax-check +ansible-playbook -i ansible/inventory.ini ansible/deploy_detmir_portal.yml --syntax-check +git diff --check +``` + +Public hygiene gate: + +```bash +PRIVATE_MARKERS_REGEX='||||' +git grep -n -E "$PRIVATE_MARKERS_REGEX" -- \ + ':!docs/RELEASE_AUDIT_2026-06.md' ':!*.zip' ':!*.tar.gz' ':!adk-rust/target/**' || true +git ls-files | grep -E '(^|/)secrets(/|$)|\.env$|inventory\.ini$' || true +``` + +## 7. Ограничения + +- Screenshots для публичной поставки должны быть обезличены и сняты на mock + data или demo contour. +- Live inventory, live domains, private IPs, case IDs, forensic paths, + screenshots с реальными пользователями и runtime evidence не входят в Git. +- Telegram runtime остается Python. +- pfSense/network layer не входит в этот release-readiness этап. + +## 8. Следующий уровень + +Для `release-readiness-v0.2` нужны: + +- машинный CycloneDX/SPDX SBOM как release asset; +- подписанный Git tag; +- release asset checksum verification в CI; +- smoke screenshots как CI artifact; +- отдельный customer pilot acceptance акт. diff --git a/docs/SBOM_V0.1_RU.md b/docs/SBOM_V0.1_RU.md new file mode 100644 index 0000000..1739f75 --- /dev/null +++ b/docs/SBOM_V0.1_RU.md @@ -0,0 +1,118 @@ +# SBOM v0.1 + +Этот документ является human-readable SBOM profile для +`release-readiness-v0.1`. Машинные SBOM artifacts должны формироваться из +проверенного commit и публиковаться как release assets. + +## 1. Идентификатор + +| Поле | Значение | +|---|---| +| Product | DetMir, программный комплекс AWatch-rus | +| SBOM profile | v0.1 | +| Date | 2026-06-03 | +| Scope | Source + Rust workspace + Python exceptions + Node/Playwright tooling + OS/service dependencies | + +## 2. Основные компоненты + +| Компонент | Роль | Тип зависимости | +|---|---|---| +| ActivityWatch | Сбор и хранение активности | upstream application | +| aw-server-rust | ActivityWatch server runtime | upstream/Rust | +| DetMir Rust crates | status, checks, portal, readiness, DLP/worktime helpers | собственный код | +| Grafana | Dashboards и визуализация | third-party application | +| Prometheus | Metrics и alert rules | third-party application | +| Hayabusa | Offline forensic/security analytics | third-party tool | +| Ansible | Deployment automation | third-party tool | +| Telegram bot runtime | Оповещения и operator workflow | Python exception | +| Playwright | Browser smoke/screenshots | test/release tooling | + +## 3. Rust SBOM input + +Команды генерации: + +```bash +mkdir -p dist/sbom +cargo metadata --manifest-path adk-rust/Cargo.toml --format-version 1 \ + > dist/sbom/cargo-metadata-v0.1.json +(cd adk-rust && cargo tree --workspace) \ + > dist/sbom/cargo-tree-v0.1.txt +``` + +Рекомендуемый CycloneDX: + +```bash +cargo install cargo-cyclonedx --locked +cargo cyclonedx --manifest-path adk-rust/Cargo.toml \ + --format json --output-cdx dist/sbom/cyclonedx-rust-v0.1.json +``` + +## 4. Python SBOM input + +Python остается как исключение, а не ядро продукта: + +- Telegram runtime; +- legacy fallbacks; +- MCP/AI/ETL helpers; +- installer/release utilities. + +Команды: + +```bash +find aw-server clickhouse-1c detmir-mcp scripts -maxdepth 4 -type f \ + \( -name 'requirements.txt' -o -name 'pyproject.toml' -o -name 'setup.py' \) \ + -print -exec sha256sum {} \; > dist/sbom/python-inputs-v0.1.txt +``` + +Если используется virtualenv: + +```bash +python3 -m pip freeze > dist/sbom/python-freeze-v0.1.txt +``` + +## 5. Node/Playwright SBOM input + +Node используется для browser smoke и release screenshots. + +```bash +npm ls --all --json > dist/sbom/npm-tree-v0.1.json +``` + +Если проект не содержит production Node runtime, этот artifact помечается как +`test/release tooling only`. + +## 6. OS/service inventory + +Для эталонной Debian/Ubuntu VM: + +```bash +dpkg-query -W -f='${Package}\t${Version}\n' \ + > dist/sbom/debian-packages-v0.1.tsv +systemctl list-unit-files 'detmir-*' 'aw-*' --no-pager \ + > dist/sbom/systemd-units-v0.1.txt +``` + +## 7. License inventory + +Основной документ: + +```text +THIRD_PARTY_LICENSES_RU.md +``` + +Дополнительные checks: + +```bash +cargo install cargo-deny --locked +(cd adk-rust && cargo deny check licenses) +``` + +## 8. Критерии приемки SBOM v0.1 + +- SBOM artifacts сформированы из того же commit, что и release package. +- SBOM не содержит secrets, live IPs, live domains, user home paths или + runtime evidence. +- Для каждого крупного компонента понятны роль, upstream и license source. +- Python обозначен как исключение/интеграционный слой, не как ядро продукта. +- Машинные SBOM JSON/TXT публикуются в GitHub Release assets, а не обязательно + хранятся в tracked source. diff --git a/docs/diagrams/release-readiness-v0.1.md b/docs/diagrams/release-readiness-v0.1.md new file mode 100644 index 0000000..5ef5662 --- /dev/null +++ b/docs/diagrams/release-readiness-v0.1.md @@ -0,0 +1,61 @@ +# Release-readiness v0.1 architecture + +```mermaid +flowchart LR + subgraph Runtime["DetMir runtime"] + AW["ActivityWatch / Worktime / DLP telemetry"] + Portal["detmir-portal"] + Readiness["detmir-readiness"] + Metrics["Prometheus metrics"] + Grafana["Grafana alerts"] + end + + subgraph Bundle["Readiness bundle"] + JSON["detmir-readiness-latest.json"] + Act["act.md / act.html"] + Sums["sha256sums.txt"] + Sig["sha256sums.txt.sig"] + Pub["public-key.pem"] + Prom["detmir-readiness.prom"] + end + + subgraph Release["Release readiness package"] + Change["CHANGELOG_RU.md"] + SBOM["docs/SBOM_V0.1_RU.md"] + Install["docs/INSTALL_FOR_EXPERT_RU.md"] + Runbook["adk-rust/RUNBOOK.md"] + Arch["docs/ARCHITECTURE_RU.md"] + Shots["docs/screenshots/release-v0.1"] + end + + AW --> Readiness + Readiness --> JSON + Readiness --> Act + Readiness --> Sums + Sums --> Sig + Pub --> Sig + Readiness --> Prom + Prom --> Metrics + Metrics --> Grafana + JSON --> Portal + Sums --> Portal + Sig --> Portal + Pub --> Portal + Portal --> Shots + Bundle --> Release + Change --> Release + SBOM --> Release + Install --> Release + Runbook --> Release + Arch --> Release +``` + +## Контрольные точки + +1. `detmir-readiness` формирует bundle и Prometheus metrics. +2. Bundle имеет SHA-256 checksums и detached signature. +3. Portal показывает статус readiness и ручную проверку bundle. +4. Prometheus/Grafana поднимают alert при `detmir_readiness_ok == 0` или + `detmir_readiness_signature_verified == 0`. +5. Release package содержит changelog, SBOM profile, install/runbook, + architecture и обезличенные screenshots. diff --git a/docs/screenshots/release-v0.1/portal-incidents-evidence.png b/docs/screenshots/release-v0.1/portal-incidents-evidence.png new file mode 100644 index 0000000..c90556d Binary files /dev/null and b/docs/screenshots/release-v0.1/portal-incidents-evidence.png differ diff --git a/docs/screenshots/release-v0.1/portal-manager-workforce.png b/docs/screenshots/release-v0.1/portal-manager-workforce.png new file mode 100644 index 0000000..137217d Binary files /dev/null and b/docs/screenshots/release-v0.1/portal-manager-workforce.png differ diff --git a/docs/screenshots/release-v0.1/portal-operator-readiness.png b/docs/screenshots/release-v0.1/portal-operator-readiness.png new file mode 100644 index 0000000..f3a2a52 Binary files /dev/null and b/docs/screenshots/release-v0.1/portal-operator-readiness.png differ diff --git a/docs/screenshots/release-v0.1/portal-owner-summary.png b/docs/screenshots/release-v0.1/portal-owner-summary.png new file mode 100644 index 0000000..c642e33 Binary files /dev/null and b/docs/screenshots/release-v0.1/portal-owner-summary.png differ diff --git a/docs/screenshots/release-v0.1/portal-reports-risk.png b/docs/screenshots/release-v0.1/portal-reports-risk.png new file mode 100644 index 0000000..aa229e8 Binary files /dev/null and b/docs/screenshots/release-v0.1/portal-reports-risk.png differ