Langfuse labels are binary. production iff env is literally prd, else development/latest. A prd-dm that isn't literally "prd" silently pulls non-prod prompts; agents' compaction prompt label is hardcoded production the other way.
Wrong INNGEST_ENV = silent event-routing loss (in ai-platform's own docs). App IDs are hardcoded and shared, so a demo env in the same Inngest environment collides with real workers — and even a separate env still shares the account budget (see the third-parties pillar).
Shared observability tenancy. Axiom dataset is v3-<account_env>; agents don't set a per-env dataset at all (defaults agents-dev). Demo logs mix into dev/prd; Langfuse host and public keys are hardcoded shared.
Feature flags are a permanent per-flag tax. PostHog projects are per app-env combo (e.g. "[dev] [v3] Legal OS"), and flags are scoped purely by the project API key the env carries. Share the dev project and a demo flag toggle is a dev flag toggle. Give the demo its own project and every future flag is created and maintained in triplicate — and the state a demo wants (unreleased features ON) is exactly what neither the dev nor the prd project encodes. This is ongoing cost, not one-time setup: one of the two recurring ownership items (with "promote before the demo" from decision 3).
S3 name collisions on account_env. lawhive-ingestion-${account_env} and lawhive-artifact-generation-${account_env} resolve to the real dev/prd buckets if the env collapses — data bleed into the warehouse.
ingestionIngestion hardcodes the matter buckets it reads. The Textract region map (pdf_extractor_textract.py:101-106) only knows v3-matters-prd/dev, v3-platform-emails-prd and lawhive-platform-cases-*, and silently falls back to eu-west-2 — a demo bucket gets OCR'd in the wrong region without erroring. Below it, the s3-handler library is written against "the v3-matters bucket" by design (s3_handler/handler.py:1), DEFAULT_BUCKET defaults to v3-matters-local (env.py:101-103), and source buckets are readable only when tagged ingestion-access-granted. A demo env's buckets need four things: creation, the tag, region-map entries, and the SSM param.
Queue schema strips -{ENVIRONMENT}. queues/queue.py:66-85 — if names carry -prd-dm but ENVIRONMENT is prd, schema lookup raises "No schema found for queue". Naming must match ENVIRONMENT.
PgBouncer & graphile RLS. Agent worlds need a direct session connection; a txn-mode pooler makes UI streams hang deployed-only. graphile _private_tasks RLS needs the root-migrates / rw-runs split or runs stick Pending. Health-check grace of 0 rolls slow-boot services back on day one.