---
staging_status: FAILED
timestamp: 2026-06-06T04:47:45Z
base_url: http://localhost:8501
mode: stub
result: 9/10 checks PASS
failed_checks: [B6]
---

# Staging Gate Log — ORCH-046

Staging test suite **FAILED**. Exit code 1 (9/10 checks passed).

## Verdict

The staging gate is **red**: one check failed (`B6`). Per pipeline policy a
non-zero staging suite is `staging_status: FAILED` → rollback to `development`.

## Failed check

```
✗ FAIL  B6 Registry: sandbox present, prod ET/ORCH absent
        [sandbox=NO, prod-ET=YES(BAD!), prod-ORCH=YES(BAD!)]
```

**What it means.** The staging container's project registry is **not isolated**:
it sees the production projects `enduro-trails` (ET) and `orchestrator` (ORCH),
and the `orchestrator-sandbox` (SANDBOX) project is **absent**. This violates the
hard isolation invariant for staging (`docs/operations/INFRA.md`: «Staging видит
ТОЛЬКО `orchestrator-sandbox` (SANDBOX) — изоляция»). The staging gate exists
precisely to catch this class of safety breach before any prod deploy of the
self-hosting orchestrator.

**Triage note (for humans).** This is a **staging environment / configuration**
issue — the staging container's `ORCH_PROJECTS_JSON` is pointing at the prod
registry instead of the sandbox-only registry. It is **not** a code regression
introduced by the ORCH-046 changeset (which only touches `src/review_parse.py`
and rollback `task_desc` enrichment). However, the gate is authoritative and red,
so the work item cannot pass to `deploy`. Fix the staging `.env.staging` /
`ORCH_PROJECTS_JSON` to expose only SANDBOX, re-run the staging suite, and the
gate will go green.

> ⚠️ Safety note: the first run aborted at `A3` because `ORCH_STAGING` was not
> set in the runner env (the script's guard against accidentally hitting prod).
> Re-run with `ORCH_STAGING=true` against the staging URL (8501) executed the
> full suite. Prod (8500) was never touched.

## Full suite output

```
============================================================
  ORCH-33 Staging Check Suite
  base_url : http://localhost:8501
  mode     : stub
  utc_time : 2026-06-06T04:47:27.628664+00:00
============================================================

[Block A] SMOKE
  ✓ PASS  A1 GET /health → 200 status=ok  [HTTP 200, body={'status': 'ok', 'service': 'orchestrator'}]
  ✓ PASS  A2 GET /queue → 200 with counts/max_concurrency/resilience  [HTTP 200, keys=['counts', 'max_concurrency', 'poll_interval', 'resilience', 'recent']]
  ✓ PASS  A3 ORCH_STAGING=true (not prod)  [ORCH_STAGING=true]

[Block B] ACCESS
  ✓ PASS  B4 Plane: sandbox project accessible  [HTTP 200, found 5 project(s), sandbox=YES]
  ✓ PASS  B5 Gitea: orchestrator-sandbox accessible, push=true  [HTTP 200, permissions={'admin': True, 'push': True, 'pull': True}]
  ✗ FAIL  B6 Registry: sandbox present, prod ET/ORCH absent  [sandbox=NO, prod-ET=YES(BAD!), prod-ORCH=YES(BAD!)]

[Block C] E2E  (mode=stub)
  ·      C7: Creating issue in SANDBOX project...
  ✓ PASS  C7 Create issue in Plane SANDBOX  [HTTP 201, issue_id=2fcbcb0c-1b29-4b76-8ba8-a8fe42cebdb4]
  ·      C8: Triggering pipeline via POST /webhook/plane ...
  ·        Using HMAC signature (secret len=40)
  ✓ PASS  C8 Trigger pipeline via /webhook/plane  [HTTP 200, resp={'status': 'accepted'}]
  ·      C9a: Polling for branch in orchestrator-sandbox (up to 60s)...
  ✓ PASS  C9a Branch appears in orchestrator-sandbox  [branch=feature/SANDBOX-011-staging-check-e2e-20260606t044]
  ·      C9b: Checking staging job queue for analyst job (up to 30s)...
  ·        (Plane comment check skipped: bot-tokens not added to SANDBOX project)
  ✓ PASS  C9b Analyst job enqueued in staging queue  [job_id=7, status=queued, agent=analyst]

[CLEANUP]
  ✓ PASS  CLEANUP: deleted branch 'feature/SANDBOX-011-staging-check-e2e-20260606t044' (HTTP 204)
  ✓ PASS  CLEANUP: deleted Plane issue 2fcbcb0c-1b29-4b76-8ba8-a8fe42cebdb4 (HTTP 204)
  ·      CLEANUP DB: no task row found for plane_id=2fcbcb0c-1b29-4b76-8ba8-a8fe42cebdb4
  ·      CLEANUP DB dedup: no such table: events_dedup

============================================================
  RESULT: 9/10 checks PASS
============================================================
EXIT_CODE=1
```
