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):

RegistryCountPath
ASMP manifests46~/.asmp/services/*.asmp.yaml
Dashboard config46config/services.yaml
Reeves platform13~/.config/reeves/apps.yaml
LaunchAgents49~/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-find
  • caddy, 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

CheckHealthy
ASMP name set = dashboard name setSame names
Agent docs point at ASMP registryNot legacy YAML
Every manifest has capabilities.providesDiscovery works
apps.yaml subset of ASMP Reeves apps13 ⊆ 46, expected
New service = one manifest writeNot 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.