"staging" is a second real-money production environment, and the only path into main
Hannibal is adding a third deployed environment, strykr-staging (46.101.30.145), named "staging"
despite carrying real money — real Bifrost settlement, a dedicated real Betfair account (pending),
real user-equivalent data — because it is operationally identical to prod in every way
financial-security.md cares about. The name was kept as "staging" everywhere (not prod2/prod-b)
for consistency, even though this breaks the common industry assumption that "staging" implies no
real financial consequences. Anyone touching Bifrost/Betfair provider routing, alerting, or
financial-security.md checks must treat "staging" as a full real-money surface, not a test tier.
Alongside this, the branch flow changes from dev → main (direct) to dev → staging → main:
staging becomes the only branch restrict-main-base.yml permits as the head branch for PRs into
main — dev can no longer PR directly into main. Hotfixes push directly to staging first (skip
dev), get tested there, then backport to dev and forward into main. staging is a protected
branch with the same push-allowlist as dev/main (bhargav-forsyt, pmalik, heypran only).
Considered options
- Name the new environment
prod2/prod-bto make its real-money nature obvious from the name alone. Rejected — the user wants uniform "staging" naming across code, docs, CI, and skills; the risk is managed by treating "staging" as real-money by convention/documentation instead (this ADR, plusCLAUDE.local.md's environment table). - Keep
dev → maindirect and addstagingas a parallel, non-gating deploy target. Rejected — the explicit intent is forstagingto be the mandatory build-qualification gate beforemain.
Consequences
- A stale, unrelated environment already named "staging" exists in
docs/infra/DEV-ENVIRONMENTS.md(hannibaldev.forsyt.io, oldhanndevVPS) — that doc set must be archived/removed as part of this rollout so it isn't mistaken for guidance on the realstrykr-stagingenvironment. - Every Claude skill and infra file that hardcodes the environment set as
dev/dev1/dev2/prod(server-inspect,betfair-api-inspector,bifrost-api-inspector,roanuz-api-inspector,ops-hannibal,restrict-main-base.yml,docker-compose.*.yml,infra/monitoring/prometheus/prometheus.yml) needs astagingentry — silent fallthrough to adevdefault on an unrecognized "staging" arg is a live risk until each is updated.