# FlightRules environment. # # Copy to .env and fill in SIGNOZ_API_KEY, which scripts/bootstrap.sh mints for you. # .env is git-ignored. No real secret belongs in this file. # --------------------------------------------------------------------------- # Runtime # --------------------------------------------------------------------------- NODE_ENV=development # self-host permits loopback SigNoz addresses. hosted rejects loopback, link-local and private # addresses to prevent server-side request forgery through a user-supplied SigNoz URL. DEPLOYMENT_MODE=self-host # scripted-demo requires no LLM API key and is the mode automated tests use. # live-provider-demo | external-agent are the other supported modes. RUNTIME_MODE=scripted-demo # --------------------------------------------------------------------------- # FlightRules database (compose.app.yaml publishes PostgreSQL on host port 5433) # --------------------------------------------------------------------------- DATABASE_URL=postgres://flightrules:flightrules@localhost:5433/flightrules # --------------------------------------------------------------------------- # SigNoz (deployed by Foundry from casting.yaml) # --------------------------------------------------------------------------- SIGNOZ_URL=http://localhost:8080 SIGNOZ_MCP_URL=http://localhost:8000/mcp # Minted by scripts/bootstrap.sh via the SigNoz service-account API. Never commit a real value. SIGNOZ_API_KEY=replace-me # --------------------------------------------------------------------------- # OpenTelemetry # --------------------------------------------------------------------------- # OTLP over HTTP. The collector also listens on gRPC 4317. # Ingestion only works after SigNoz first-user setup has completed - see docs/RUNBOOK.md. OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 DEPLOYMENT_ENVIRONMENT_NAME=local # OTEL_SERVICE_NAME is deliberately NOT set here. # # Every entrypoint already names itself - flightrules-api, flightrules-worker, and each demo # service - and this file is loaded by all of them. Setting one value here relabels every process # that is not the API: the worker's spans, metrics and logs then arrive in SigNoz attributed to # flightrules-api, and a violation cannot be traced back to the process that evaluated it. # # Set it per process only, and only to override a default: # OTEL_SERVICE_NAME=flightrules-worker node apps/worker/dist/index.js # In a hosted deployment each service has its own environment, so set it there per service. # --------------------------------------------------------------------------- # Ports # --------------------------------------------------------------------------- API_PORT=4000 WEB_PORT=3000 # --------------------------------------------------------------------------- # Demo # --------------------------------------------------------------------------- # Demo mutation endpoints are disabled unless this is true. DEMO_MODE=true # --------------------------------------------------------------------------- # Safety bounds # --------------------------------------------------------------------------- MAX_TRACES_PER_EVALUATION=500 MAX_SPANS_PER_TRACE=5000 MCP_REQUEST_TIMEOUT_MS=30000 # --------------------------------------------------------------------------- # Salt for the one-way idempotency-key hash emitted as agent.idempotency.key_hash. # Raw idempotency keys are never emitted, logged or stored. Use a locally generated value: # openssl rand -hex 32 # --------------------------------------------------------------------------- IDEMPOTENCY_HASH_SALT=change-me-to-a-locally-generated-32-byte-hex-value # --------------------------------------------------------------------------- # Applications (Phase 09) # --------------------------------------------------------------------------- API_HOST=0.0.0.0 LOG_LEVEL=info DATABASE_POOL_SIZE=10 MAX_REQUEST_BODY_BYTES=1048576 SHUTDOWN_TIMEOUT_MS=10000 # How long a job may sit claimable before GET /health/dependencies reports jobs.status = stalled. # A worker that has stopped claiming work takes no other health signal down with it, so this is the # reading to alert on. JOB_STALLED_AFTER_SECONDS=300 # The demo agent the demo_run job drives. DEMO_AGENT_URL=http://localhost:4100 # Worker. The heartbeat must be shorter than the lease, or a healthy worker loses its own job. WORKER_ID= WORKER_LEASE_SECONDS=120 WORKER_HEARTBEAT_INTERVAL_MS=15000 WORKER_POLL_INTERVAL_MS=1000 WORKER_MAX_ATTEMPTS=3 WORKER_RETRY_DELAY_SECONDS=5 WORKER_RECLAIM_INTERVAL_MS=30000