feat(replication): ORCH-101 — расхардкод хоста + секреты нового хоста + smoke (фундамент тиража 10-common) #122

Merged
admin merged 8 commits from feature/ORCH-101-orch-10-common-smoke into main 2026-06-10 21:09:39 +03:00
Owner

ORCH-101 — фундамент тиража 10-common

Платформа разворачивается на новой инфре без правки кода — только env/конфиг. Каждый дефолт = боевому значению (пустой .env ⇒ поведение 1:1; kill-switch-природа, NFR-2). STAGE_TRANSITIONS/QG_CHECKS/check_*/machine-verdict/схема БД — байт-в-байт.

Расхардкод (AC-1, AC-2)

  • Новые ключи Settings: agent_home_dir/agent_git_name/git_email_domain/staging_port (ADR-001 D2/D4).
  • A1: plane_sync.notify_stage_change — ссылки из gitea_public_url(fallback gitea_url)+gitea_owner.
  • A2: launcher.agent_git_env() — единый Settings-driven env обоих мест запуска.
  • A3/A4: self_deploy/post_deploy — HOME+домен из Settings, имена системных акторов — платформенные литералы.
  • D3: SELF_HOSTING_REPO — нормативная платформенная константа (пин-тест).
  • D4: инвариант ORCH-058 усилен — guard fail-closed staging_port == прод-порт → отказ freshness-пути ДО ssh/build, без тихого fallback.

Инфра-файлы (AC-6)

  • compose: ${VAR:-default} по карте D6; группа ORCH-040 (uid/gid/HOME/маунты/useradd) — одни env насквозь; group_add «МИНА 1» сохранён ×3; оба app-сервиса с явным command:.
  • Dockerfile: ARG APP_UID/APP_GID/APP_USER/APP_HOME; CMD exec-form 8500 не тронут (D5).
  • deploy-hook: REPO="${REPO:-…}"; оба инвокера передают REPO= явно (D7; exit-контракт 0/1/2 не тронут).

Секреты (AC-5)

  • Новый stdlib scripts/gen_secrets.py: token_hex(32), печать по умолчанию, --write с отказом на существующем .env (exit=2), перезапись только --force.
  • .env.example — полнота ключей старта; чек-лист внешних токенов; «боевые секреты не копируются».

Smoke + доки (AC-3, AC-4)

  • Новый docs/operations/REPLICATION.md: карта env, секреты, пошаговый smoke с PASS/FAIL (compose config → /health → /queue+/metrics → onboarding sandbox → задача → артефакты 01–04; расширенно до done), границы 10-common vs Lite vs Bundled.
  • Обновлены INFRA.md, README.md, CLAUDE.md, docs/architecture/README.md, CHANGELOG.md.

Анти-регресс (AC-7)

  • tests/test_no_host_hardcodes.py: tokenize-сканер запрещённых литералов (82.22.50.71//home/slin/mva154/duckdns) в исполняемом коде src/**+watchdog/**; config-модули — структурное исключение; allowlist пуст; негативная самопроверка.
  • test_host_config_keys / test_infra_parametrization / test_secrets_gen / test_replication_smoke (TC-01…TC-12).
  • Согласованные структурные правки: test_orch040_compose (судит резолв дефолтов = docker compose config при пустом env), test_deploy_hook_rollback_sim (REPO через env-override = контракт D7).

Полный регресс: 1764 passed. Прод-контейнер в рамках задачи не рестартуется (NFR-1); compose/Dockerfile вступают в силу при следующем штатном деплое (staging 8501 → Confirm Deploy).

ADR: docs/work-items/ORCH-101/06-adr/ADR-001-host-parametrization-secrets-smoke.md, сквозной adr-0036.

Refs: ORCH-101

🤖 Generated with Claude Code

## ORCH-101 — фундамент тиража 10-common Платформа разворачивается на новой инфре **без правки кода** — только env/конфиг. **Каждый дефолт = боевому значению** (пустой `.env` ⇒ поведение 1:1; kill-switch-природа, NFR-2). `STAGE_TRANSITIONS`/`QG_CHECKS`/`check_*`/machine-verdict/схема БД — байт-в-байт. ### Расхардкод (AC-1, AC-2) - Новые ключи `Settings`: `agent_home_dir`/`agent_git_name`/`git_email_domain`/`staging_port` (ADR-001 D2/D4). - A1: `plane_sync.notify_stage_change` — ссылки из `gitea_public_url`(fallback `gitea_url`)+`gitea_owner`. - A2: `launcher.agent_git_env()` — единый Settings-driven env обоих мест запуска. - A3/A4: `self_deploy`/`post_deploy` — HOME+домен из Settings, имена системных акторов — платформенные литералы. - D3: `SELF_HOSTING_REPO` — нормативная платформенная константа (пин-тест). - D4: **инвариант ORCH-058 усилен** — guard fail-closed `staging_port == прод-порт` → отказ freshness-пути ДО ssh/build, без тихого fallback. ### Инфра-файлы (AC-6) - compose: `${VAR:-default}` по карте D6; группа ORCH-040 (uid/gid/HOME/маунты/useradd) — одни env насквозь; `group_add` «МИНА 1» сохранён ×3; оба app-сервиса с явным `command:`. - Dockerfile: `ARG APP_UID/APP_GID/APP_USER/APP_HOME`; CMD exec-form 8500 не тронут (D5). - deploy-hook: `REPO="${REPO:-…}"`; оба инвокера передают `REPO=` явно (D7; exit-контракт 0/1/2 не тронут). ### Секреты (AC-5) - Новый stdlib `scripts/gen_secrets.py`: `token_hex(32)`, печать по умолчанию, `--write` с отказом на существующем `.env` (exit=2), перезапись только `--force`. - `.env.example` — полнота ключей старта; чек-лист внешних токенов; «боевые секреты не копируются». ### Smoke + доки (AC-3, AC-4) - Новый `docs/operations/REPLICATION.md`: карта env, секреты, пошаговый smoke с PASS/FAIL (compose config → /health → /queue+/metrics → onboarding sandbox → задача → артефакты 01–04; расширенно до done), границы 10-common vs Lite vs Bundled. - Обновлены `INFRA.md`, `README.md`, `CLAUDE.md`, `docs/architecture/README.md`, `CHANGELOG.md`. ### Анти-регресс (AC-7) - `tests/test_no_host_hardcodes.py`: tokenize-сканер запрещённых литералов (`82.22.50.71`/`/home/slin`/`mva154`/`duckdns`) в исполняемом коде `src/**`+`watchdog/**`; config-модули — структурное исключение; allowlist пуст; негативная самопроверка. - `test_host_config_keys` / `test_infra_parametrization` / `test_secrets_gen` / `test_replication_smoke` (TC-01…TC-12). - Согласованные структурные правки: `test_orch040_compose` (судит резолв дефолтов = `docker compose config` при пустом env), `test_deploy_hook_rollback_sim` (REPO через env-override = контракт D7). **Полный регресс: 1764 passed.** Прод-контейнер в рамках задачи не рестартуется (NFR-1); compose/Dockerfile вступают в силу при следующем штатном деплое (staging 8501 → Confirm Deploy). ADR: `docs/work-items/ORCH-101/06-adr/ADR-001-host-parametrization-secrets-smoke.md`, сквозной `adr-0036`. Refs: ORCH-101 🤖 Generated with [Claude Code](https://claude.com/claude-code)
admin added 4 commits 2026-06-10 20:51:22 +03:00
docs: init ORCH-101 business request
All checks were successful
CI / test (push) Successful in 59s
9d0f2e40b7
analyst(ET): auto-commit from analyst run_id=602
All checks were successful
CI / test (push) Successful in 1m9s
69aa6eacde
architect(ET): auto-commit from architect run_id=603
All checks were successful
CI / test (push) Successful in 59s
26bdd783d6
feat(replication): расхардкод хоста + секреты нового хоста + smoke-runbook
All checks were successful
CI / test (push) Successful in 57s
CI / test (pull_request) Successful in 55s
f1635ddb39
Фундамент тиража 10-common (эпик ORCH-10): платформа разворачивается на
новой инфре без правки кода — только env/конфиг. Каждый дефолт = боевому
значению (пустой .env => поведение 1:1, kill-switch-природа, NFR-2);
STAGE_TRANSITIONS/QG_CHECKS/check_*/machine-verdict/схема БД не тронуты.

- config: agent_home_dir / agent_git_name / git_email_domain / staging_port
  (ADR-001 D2/D4); код-блокеры A1-A4 закрыты: plane_sync ссылки из
  gitea_public_url+gitea_owner, launcher - единый agent_git_env() (x2 места),
  self_deploy/post_deploy - HOME+домен из Settings (имена системных акторов -
  платформенные литералы)
- image_freshness: staging_port из конфига + fail-closed guard
  staging_port == прод-порт -> отказ ДО ssh/build (инвариант ORCH-058 AC-9
  стал исполняемым); REPO= передаётся хуку явно обоими инвокерами (D7)
- SELF_HOSTING_REPO - нормативная платформенная константа (D3, пин-тест)
- compose: полная ${VAR:-default}-интерполяция (реестр B, карта D6); группа
  ORCH-040 uid/gid/HOME/маунты двигается согласованно (build.args APP_*);
  group_add "МИНА 1" сохранён x3; оба app-сервиса с явным command:
- Dockerfile: ARG APP_UID/APP_GID/APP_USER/APP_HOME (CMD exec-form 8500
  сознательно не тронут - D5); deploy-hook: REPO="${REPO:-...}" (D1 реестра)
- секреты: stdlib scripts/gen_secrets.py (token_hex(32); печать по умолчанию;
  --write никогда не перезаписывает существующий .env молча, exit=2;
  перезапись только --force); .env.example дополнен до полноты ключей старта
- доки: новый docs/operations/REPLICATION.md (карта env, чек-лист секретов,
  smoke-процедура с PASS/FAIL, границы 10-common/Lite/Bundled), INFRA.md,
  README, CLAUDE.md, CHANGELOG
- анти-регресс: tests/test_no_host_hardcodes.py (tokenize-сканер запрещённых
  литералов, config-модули - структурное исключение, allowlist пуст,
  негативная самопроверка) + test_host_config_keys / test_infra_parametrization
  / test_secrets_gen / test_replication_smoke; согласованные структурные
  правки test_orch040_compose (судит резолв дефолтов) и
  test_deploy_hook_rollback_sim (REPO через env-override = контракт D7)

Полный регресс: 1764 passed.

Refs: ORCH-101

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
admin added 1 commit 2026-06-10 20:57:23 +03:00
reviewer(ET): auto-commit from reviewer run_id=605
All checks were successful
CI / test (push) Successful in 1m1s
CI / test (pull_request) Successful in 59s
26fe4cdd5e
admin added 1 commit 2026-06-10 21:00:14 +03:00
tester(ET): auto-commit from tester run_id=606
All checks were successful
CI / test (push) Successful in 56s
CI / test (pull_request) Successful in 55s
c55f956d78
admin added 1 commit 2026-06-10 21:02:47 +03:00
docs(ORCH-101): staging gate log — staging_status SUCCESS (8/10, C9a/C9b infra-waived)
All checks were successful
CI / test (push) Successful in 1m2s
CI / test (pull_request) Successful in 1m3s
cb1f27e9c0
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
admin added 1 commit 2026-06-10 21:09:39 +03:00
deploy(ORCH-036): finalize SUCCESS for ORCH-101
All checks were successful
CI / test (push) Successful in 56s
CI / test (pull_request) Successful in 58s
c1e3c46f98
admin merged commit ede5ec9473 into main 2026-06-10 21:09:39 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/orchestrator#122