Appearance
Service Naming Decoupling
Status: Implemented Spec folder:
specs/014-decouple-service-codenames/Source of truth: Makefile andservices/*/service.yaml
Decision
Codenames are fun metadata. They are not service identity.
From this point forward, the platform uses functional service names and arc-* image names as the primary references in:
- architecture docs
- specifications and plans
- config defaults
- wire contracts
- operational runbooks
- service maps
Codenames may still appear in metadata fields and narrative docs, but only as secondary labels.
Naming Hierarchy
When there is any ambiguity, use this order:
- Root Makefile target name
service.yamlname- GHCR image name
- Service directory under
services/ codenamefield
What Changed
Primary references now use service names
Use:
arc-reasonerarc-messagingarc-streamingarc-cachearc-persistencearc-storagearc-realtimearc-gatewayarc-vaultarc-flagsarc-cortexarc-fridayarc-friday-collector
Codenames are now secondary only
Allowed:
codename:metadata inservice.yaml- optional secondary mention in prose
- sidecar annotations where useful for historical continuity
Not allowed as primary identifiers:
- package names
- config defaults
- DNS/container assumptions
- NATS subjects
- Pulsar topics
- service maps
- spec titles and main architecture references
Authoritative Service Mapping
Derived from Makefile includes and the current service.yaml files.
| Make target | Primary runtime name | Directory | Image | Codename metadata |
|---|---|---|---|---|
gateway | arc-gateway | services/gateway/ | ghcr.io/arc-framework/arc-gateway:latest | Heimdall |
flags | arc-flags | services/flags/ | ghcr.io/arc-framework/arc-flags:latest | Mystique |
vault | arc-vault | services/secrets/ | ghcr.io/arc-framework/arc-vault:latest | Nick Fury |
messaging | arc-messaging | services/messaging/ | ghcr.io/arc-framework/arc-messaging:latest | Flash |
streaming | arc-streaming | services/streaming/ | ghcr.io/arc-framework/arc-streaming:latest | Strange |
cache | arc-cache | services/cache/ | ghcr.io/arc-framework/arc-cache:latest | Sonic |
persistence | arc-persistence | services/persistence/ | ghcr.io/arc-framework/arc-persistence:latest | Oracle |
storage | arc-storage | services/storage/ | ghcr.io/arc-framework/arc-storage:latest | Tardis |
realtime | arc-realtime | services/realtime/ | ghcr.io/arc-framework/arc-realtime:latest | Daredevil |
reasoner | arc-reasoner | services/reasoner/ | ghcr.io/arc-framework/arc-reasoner:latest | Sherlock |
cortex | arc-cortex | services/cortex/ | ghcr.io/arc-framework/arc-cortex:latest | Cortex |
otel | arc-friday | services/otel/ | ghcr.io/arc-framework/arc-friday:latest | Friday |
friday-collector | arc-friday-collector | services/otel/ | ghcr.io/arc-framework/arc-friday-collector:latest | Friday Collector |
Planned Services
Planned services should be documented, but they must not be mixed into the authoritative runtime map until they exist in Makefile or have a concrete service.yaml.
Use a separate planned section for items such as:
arc-voice-agentarc-guardarc-criticarc-gymarc-billingarc-db-vectorarc-identityarc-chaos
That keeps documentation honest:
- implemented = operable now
- planned = architectural intent
Realtime Sidecars
The realtime target is the operator-facing unit, but the runtime stack also includes:
| Runtime service | Image | Purpose | Codename metadata |
|---|---|---|---|
arc-realtime-ingress | ghcr.io/arc-framework/arc-realtime-ingress:latest | RTMP ingest | Sentry |
arc-realtime-egress | ghcr.io/arc-framework/arc-realtime-egress:latest | Recording/export | Scribe |
Operational Guidance
Prefer these forms in all new docs:
arc-reasonerinstead of a codename-first labelarc-messaginginstead of a codename-first labelarc-streaminginstead of a codename-first labelarc-cacheinstead of a codename-first labelarc-realtimeinstead of a codename-first label
If a codename is included for readability, format it as secondary metadata, for example:
arc-reasoner (codename: Sherlock)
Not the other way around.
Impact
This keeps naming stable across:
- implementation
- deployment
- contracts
- diagrams
- future service additions
It also removes the mismatch between historical codename-heavy docs and the actual operational model exposed by Makefile.
DgtalBug