Concepts
Registry drift
What drift actually means — and what the 33-service delta is really telling you.
“Registry drift” sounds like one number being wrong. On a real host it is usually several registries doing different jobs — and agents reading the wrong one.
The headline numbers
From a production Mac (2026-03-31 research baseline):
| Registry | Count | Path |
|---|---|---|
| ASMP manifests | 46 | ~/.asmp/services/*.asmp.yaml |
| Dashboard config | 46 | config/services.yaml |
| Reeves platform | 13 | ~/.config/reeves/apps.yaml |
| LaunchAgents | 49 | ~/Library/LaunchAgents/ |
The tempting story: 46 vs 13 = 33 services lost in the void.
The reframed story
After migration, ASMP and dashboard names match 1:1 (46 = 46, zero name delta). The 33 are not missing — they are out of scope for Reeves deployment:
director-daemon,knox,docker,claude-findcaddy,tailscale,macdash- Claude session tools, bridges, tunnels
apps.yaml answers: “What does Reeves daemon provision?”
ASMP answers: “What exists on this machine?”
Different questions. Different counts. Not drift — scope.
What drift actually looks like
Type 1: Duplicate inventory (process drift)
Two files must be hand-edited to stay in sync:
~/.asmp/services/email.asmp.yaml
config/services.yaml ← copy; will diverge on next add
Fix: One read path. Dashboard loads ~/.asmp/ only.
Type 2: Agent documentation drift (authority drift)
Worse than duplicate YAML: an endpoint that tells agents the wrong source of truth.
Example anti-pattern:
{
"registry": {
"file": "~/.config/reeves/apps.yaml",
"description": "Source of truth for all Reeves services"
}
}
Agents follow /ai/docs and learn a ritual that bypasses ASMP entirely — even when MCP discovery is wired.
Fix: Agent-facing docs point at ~/.asmp/host.yaml and http://127.0.0.1:7700.
Type 3: Incomplete discovery (content drift)
Manifest exists but discovery fails:
name: knox
description: "Secrets and approval boundary"
# no capabilities.provides → service_find returns nothing
Fix: Every inventory entry declares at least one provides capability (even tools.knox as placeholder).
Type 4: Schema drift (deployment vs inventory)
apps.yaml has fields ASMP v0.1 lacks:
entrypoint,units,venv,dev_port
You cannot delete apps.yaml without losing deployment semantics. That is not drift — it is an unmigrated layer.
Fix: Deployment layer ADR before merge.
Drift checklist
| Check | Healthy |
|---|---|
| ASMP name set = dashboard name set | Same names |
| Agent docs point at ASMP registry | Not legacy YAML |
Every manifest has capabilities.provides | Discovery works |
apps.yaml subset of ASMP Reeves apps | 13 ⊆ 46, expected |
| New service = one manifest write | Not 2–5 file edits |
Research note
Early finding #0003 framed 33 services as 72% without deployment records. That is true for Reeves daemon scope — but misleading as an ASMP failure metric. ASMP inventory is complete; deployment coverage for non-Reeves services was never apps.yaml’s job.
Updated model: Three layers.