feat(staging): deterministic staging-runner replacing LLM deployer on deploy-staging (ORCH-115)
Replace the LLM `deployer` agent on the `deploy-staging` stage (self-hosting orchestrator) with a deterministic staging-runner intercepted in launch_job BEFORE _spawn (the deploy-finalizer / post-deploy-monitor reserved-agent precedent). The runner executes the SAME staging suite, maps the exit-code to `staging_status:` via the existing self_deploy.map_exit_code_to_status contract, writes 15-staging-log.md, and initiates the UNCHANGED check_staging_status gate exactly as a finished LLM-deployer would. Invariant (NFR-1): this replaces only the *producer* of the artifact — the artifact contract, the gate / _parse_staging_status / check_staging_status name, STAGE_TRANSITIONS, the machine-verdict key `staging_status:` and the DB schema are byte-for-byte unchanged. Additive, under a kill-switch + repo-scope CSV, never-raise, fail-safe back to the LLM path. Two-level outcome (D5, anti ORCH-110): suite executed -> verdict -> advance (FAILED -> the existing deploy-staging -> development rollback + developer-retry, same as a FAILED LLM verdict); tool-error (suite did not execute) -> bounded DEFER -> fail-closed FAILED + alert on exhaustion (infra != code fault; never a silent advance / false green). First implemented slice of the LLM determinization roadmap (ORCH-118 A6, replace-deterministic-now). - New leaf src/staging_runner.py (never-raise; proc_group tree-kill + timeout) - launch_job intercept + _run_staging_runner_job (mirror _run_deploy_finalizer_job) - config: ORCH_STAGING_RUNNER_* keys (enabled/repos/timeout/infra-retry budget) - GET /queue staging_runner observability block - docs: llm-call-sites/roadmap/usage-policy (A6 implemented; machine blocks + single-transport invariant intact), deployer.md (LLM branch -> fallback), CLAUDE.md, CHANGELOG.md, overview (tech-pipeline/tech-agents/tech-quality-security), .env.example - tests/test_orch115_staging_runner.py (TC-01..TC-13); LLM anti-drift green (TC-14) Refs: ORCH-115 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -45,6 +45,16 @@ then emit `staging_status:` / `deploy_status:`.
|
||||
|
||||
Run the staging test suite against the live staging environment and write the verdict.
|
||||
|
||||
> **ORCH-115 — deterministic runner leads this stage for in-scope repos.** On `deploy-staging` for
|
||||
> the self-hosting `orchestrator` repo, this stage is now driven by **deterministic code**
|
||||
> (`src/staging_runner.py`, intercepted in `launch_job` BEFORE `_spawn`, mirroring the prod Phase
|
||||
> A/B/C pattern) — it runs the SAME canonical staging suite below, maps the exit code to
|
||||
> `staging_status:` via the same `0 → SUCCESS / non-zero → FAILED` contract, writes
|
||||
> `15-staging-log.md`, and initiates the unchanged `check_staging_status` gate. The LLM steps below
|
||||
> remain the **fallback** under a disabled kill-switch (`ORCH_STAGING_RUNNER_ENABLED=false`) or for
|
||||
> non-self repos. The artifact contract / gate / machine key `staging_status:` are unchanged. Details:
|
||||
> `docs/work-items/ORCH-115/06-adr/ADR-001-deterministic-staging-runner.md`.
|
||||
|
||||
**Steps:**
|
||||
|
||||
1. Run the staging suite. **CANONICAL: run INSIDE the `orchestrator-staging` container via
|
||||
|
||||
Reference in New Issue
Block a user