Compare commits

..

10 Commits

Author SHA1 Message Date
f92b34e9d7 deployer(ET): auto-commit from deployer run_id=314
Some checks failed
CI / test (push) Has been cancelled
2026-06-07 14:40:05 +00:00
ef6d275ead tester(ET): auto-commit from tester run_id=313
All checks were successful
CI / test (push) Successful in 17s
CI / test (pull_request) Successful in 16s
2026-06-07 14:36:16 +00:00
a29d4f0aed reviewer(ET): auto-commit from reviewer run_id=312
All checks were successful
CI / test (push) Successful in 17s
CI / test (pull_request) Successful in 17s
2026-06-07 14:33:57 +00:00
51745d3bce fix(deploy): drop COPY data/ from Dockerfile so worktree-context staging build succeeds
All checks were successful
CI / test (push) Successful in 17s
CI / test (pull_request) Successful in 15s
The ORCH-058 staging rebuild (check_staging_image_fresh) builds the image with
the task git-worktree as the docker build context. A fresh worktree holds only
tracked files, but the Dockerfile did `COPY data/ ./data/` — and `data/` (the
SQLite dir) is gitignored, so it is absent from that context: `docker build`
failed with exit 1 ("BUILD-STAGING: docker build failed - aborting"), bouncing
the task off deploy-staging back to development in a loop.

The COPY was dead weight regardless: `data/` is always supplied at runtime as a
bind-mount volume (./data:/app/data, see docker-compose.yml) which shadows
anything baked into the image. Replace it with `RUN mkdir -p /app/data` so the
mountpoint exists without depending on the build context.

Regression guard: test_tc08b_dockerfile_does_not_copy_gitignored_data_dir
forbids COPY of any gitignored path (the worktree-context invariant).

Refs: ORCH-021

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 14:30:02 +00:00
1e6b00d15e tester(ET): auto-commit from tester run_id=309
All checks were successful
CI / test (push) Successful in 20s
CI / test (pull_request) Successful in 19s
2026-06-07 14:25:35 +00:00
a92a6247fe reviewer(ET): auto-commit from reviewer run_id=308 2026-06-07 14:25:35 +00:00
8273c1fc9d feat(post-deploy): post-deploy prod monitoring + degradation reaction (ORCH-021)
Extend pipeline responsibility past deploy->done: after the terminal
transition for an applicable repo, arm a ~15min observation window that
probes prod and reacts to a degradation the restart-time health-check
missed ("green deploy, red prod").

- src/post_deploy.py: new leaf module (config + lazy qg/db only).
  Sentinel-file restart-safe state (.post-deploy-state-<repo>/<wi>/),
  no DB migration. probe_signals/classify/decide_action/run_rollback,
  all never-raise.
- Reserved-agent job `post-deploy-monitor` (no-LLM, Variant B, calque of
  deploy-finalizer): self-requeues each tick via enqueue_job.
- Deterministic classify: DEGRADED iff >= fail_threshold consecutive
  health failures OR window 5xx ratio > 5xx_threshold; fail-safe HEALTHY.
- Self-hosting invariant (BR-5/AC-8): a tick NEVER restarts the prod
  orchestrator container -> orchestrator is ALWAYS ALERT_ONLY.
- Conditionality (ORCH-35/36/43/58): kill-switch + CSV repos, empty ->
  self-hosting only.
- QG_CHECKS / STAGE_TRANSITIONS / schema unchanged (AC-12).
- Docs: CHANGELOG, CLAUDE artefact list (16-post-deploy-log.md),
  architecture README, .env.example (ORCH_POST_DEPLOY_*).

Refs: ORCH-021

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 14:25:35 +00:00
a4ad55c862 architect(ET): auto-commit from architect run_id=306 2026-06-07 14:25:35 +00:00
7d44e128fa analyst(ET): auto-commit from analyst run_id=305 2026-06-07 14:25:35 +00:00
18deddb37a docs: init ORCH-021 business request 2026-06-07 14:25:35 +00:00

Diff Content Not Available