# Candidate Production Service Graph These files are a design/validation candidate, not installed runtime units. Promotion requires the Gate 2 evidence below and explicit implementation authorization. ## Dependency graph `ollama.service` and `chromadb.service` are required upstream components for the current Workstation profile. `cezen-api.service` requires and orders after both. The nginx drop-in only *wants* and orders after the API so static local recovery/help remains reachable during API failure. The transactional `nexus-one-activation-health.service` requires the complete model/vector/API/nginx graph; any failed window triggers `nexus-one-activation-rollback.service`. `activation-health-window.py` accepts only literal loopback HTTP URLs and exact semantic JSON responses containing `service` and `status`. It does not resolve hostnames or contact LAN/Internet addresses. Required components must report `ready`. An optional component may report `degraded` only when both the signed profile marks it optional and the activation invocation explicitly enables degraded acceptance; the default rejects degradation. Timeout, non-200 response, wrong content type/shape/identity/status, oversized response, malformed JSON and unreachable endpoint reject immediately. Exit `0` means the requested consecutive window completed as `ready`, or explicitly policy-accepted `degraded`. Exit `23` means a semantic health rejection and is the contract used by systemd `OnFailure`. Exit `2` means invalid configuration/evidence I/O and also fails the unit. Evidence is canonical JSON, mode `0600`, fsynced and atomically published without wall-clock-dependent fields. The per-request timeout is capped by the remaining monotonic total-window deadline. The validator rejects with `WINDOW_TIMEOUT` when the deadline has expired or when the configured interval makes the next required sample impossible. It never extends the deadline because a component responds slowly. Each health-profile component also declares `systemd_unit` (a literal `.service` name or `null`) and `max_restarts`. Before HTTP evaluation, the validator reads `NRestarts`, `ActiveState` and `SubState` using a fixed `systemctl show` argv. A count above the signed profile limit rejects as `RESTART_STORM`; an unavailable/malformed unit state or a non-active unit also rejects. `null` is permitted only for a profile component whose lifecycle is demonstrably outside systemd. Restart checks occur before HTTP so a stale or separately served healthy endpoint cannot conceal an unstable unit. Category/profile resolution may replace Ollama with another signed model-runtime unit or omit an unsupported optional component, but it must generate a closed graph before activation. A missing required unit fails the transaction; it is not silently downgraded. ## Active-operation environment contract `/var/lib/nexus-one/installer/active-operation.env` is root-owned mode `0600`, atomically published and contains only these validated, systemd-safe assignments: ```text OPERATION_ID= HEALTH_PROFILE_CONFIG=/usr/share/nexus-one/health-profiles/.json HEALTH_SAMPLES=3 HEALTH_INTERVAL_SECONDS= HEALTH_TIMEOUT_SECONDS= HEALTH_WINDOW_TIMEOUT_SECONDS= HEALTH_EVIDENCE_PATH=/var/lib/nexus-one/installer/evidence/.json JOURNAL_PATH=/var/lib/nexus-one/installer/operations//journal.json CHECKPOINT_PATH=/var/lib/nexus-one/installer/operations//checkpoint TARGET_PATH=/opt/cezen/ ``` Values must not contain whitespace, quotes, `%`, `$`, shell syntax or path traversal. All paths are canonicalized and checked against their allowed roots before publication. The file contains no secret. It remains until the health unit commits success or rollback reaches terminal state, then is archived with the evidence record and removed atomically. ## Promotion gates - Lock and sign the health profile, health-window/recovery executables and unit/drop-in bytes. - Define semantic probes for Ollama/model availability, Chroma heartbeat, API `/api/health`, and nginx portal/API proxy behavior, including category-aware degraded states. - Approve sample interval, total timeout, restart policy and consecutive-success count. - Prove clean boot, activation, dependency failure, restart storm, timeout, rollback and recovery-portal access on the real services with zero network access. - Verify ownership, modes, ACLs, xattrs, SELinux/AppArmor implications and least-privilege write paths. - Resolve whether CPU-only installations still require Ollama; generate a different graph if not. - Replace the current Ansible-created unit content only after the candidate passes these gates.