Status: Reference (non-canon) Purpose: Clarify intentional divergences between canon specifications, the slime-runner harness, and the enterprise deployment.
Canon = specs/ exclusively. Noncanon code is a harness or deployment tool. If runner or deploy diverges from specs/, the runner/deploy is wrong — not the spec.
| Aspect | Canon (specs/) | slime-runner (noncanon) | Enterprise Deploy (noncanon) |
|---|---|---|---|
| Ingress: format errors | 400/413/500 with error + message fields |
Always returns HTTP 200 + IMPOSSIBLE (flattened) |
Same as runner |
| Ingress: impossibility | HTTP 200 + {"status":"IMPOSSIBLE"} |
HTTP 200 + {"status":"IMPOSSIBLE"} |
Same |
| Ingress: payload (base64) | Required field, max 64KB decoded, passed to AB-S | Ignored (parser reads domain + magnitude only) |
Same as runner |
| AB-S Core | Sealed, opaque, compile-time law, non-inspectable | Public checkout uses the stub_ab reference resolver. Private enterprise wiring may swap in the real AB-S engine, but that path is not shipped in this manifest. |
Private deployment may embed the real AB-S engine |
| Egress: ABI | 32 bytes LE: u64 + u64 + u128 | 32 bytes LE: u64 + u64 + u128 | Same |
| Egress: socket ownership | Actuator owns socket (server/listener); SLIME connects as client | SLIME connects as client (fail-closed if absent) | actuator.service creates socket; slime.service requires it |
| Egress: socket path | /run/slime/egress.sock (hardcoded) |
/run/slime/egress.sock |
Same |
| Egress: socket perms | 0660, owner actuator, group slime-actuator |
Best-effort 0660 by actuator-min |
Actuator creates socket; systemd RuntimeDirectory ensures /run/slime exists; permissions enforced by actuator + unit config |
| Domain normalization | domain string → u64 domain_id (R-7: no truncation) |
Static compile-time table: string → Domain(u16). Unknown domains → IMPOSSIBLE. No hash. |
Same as runner |
| Saturation states | SATURATED, then SEALED (terminal) | Not modeled (per-request budget prevents cross-request depletion) | Not modeled |
| Backpressure | Kernel buffer fills, writes block, no bypass | Same (inherited from OS) | Same |
| Dashboard | N/A (out of law scope) | Not implemented | Read-only on port 8081 if deployed (noncanon/enterprise/dashboard) |
| Fail-closed boot | If socket absent at startup, SLIME exits | Exits with code 1 | ExecStartPre polls for socket, fails after timeout |
The following divergences are intentional and expected in the noncanon harness:
-
Flattened error handling — The runner returns
IMPOSSIBLEfor both format errors and true impossibilities. Canon distinguishes these (4xx vs 200). This simplification is acceptable in a test harness but must not be treated as conformant behavior. -
No payload processing — The runner ignores the
payloadfield entirely. Canon requires base64 decoding and size validation before passing to AB-S. -
No saturation/sealed states — The runner does not model cumulative capacity exhaustion across requests. Canon defines terminal SEALED state when the system can no longer authorize actions. The runner uses a fresh per-request Budget, so capacity accounting exists within a single request but no cross-request depletion occurs.
-
Domain table vs hash — Canon allows
u64domain identifiers via stable hash or compile-time table (R-7: no truncation). The runner uses a static compile-time table mapping domain strings toDomain(u16). This is a deliberate choice: table-based resolution is more auditable than hash-based. The mapping is sealed at compile time and unknown domains are structurally impossible. -
Magnitude zero rejection — Canon specifies magnitude range
1..2^64-1. The runner additionally rejects magnitudes exceedingu32::MAXbecause the stub resolver usesMagnitude(u32). Canon allows the fullu64range. -
Actuation token generation — Canon states the
actuation_tokenfield carries authorization metadata and the actuator bridge must verify authenticity. The runner generates a non-zero token from a monotonic counter XOR'd with domain/magnitude. This is NOT cryptographic — a real deployment should use HMAC or similar. -
Egress write failure — Canon says "No retry or recovery mechanism exists." As of v0.4.0, the runner complies: write failure exits the process immediately (fail-closed). Prior versions (≤ v0.3.x) silently reconnected and retried once — this was a spec violation.
-
AUTHORIZED response missing effect_id — Canon specifies
{"status":"AUTHORIZED","effect_id":"<UUID>"}. The runner returns only{"status":"AUTHORIZED"}— noeffect_id. This is an intentional simplification in the harness. -
Content-Type enforcement — Canon does not mandate
Content-Type: application/json. As of v0.4.0, the runner enforces it. Requests withoutapplication/jsoncontent type are rejected. -
integration_demo env var — V1_INVARIANTS §2 states "MUST NOT read environment variables." The
integration_demofeature readsSLIME_DEMO_EGRESS_FILEfrom the environment. This is acknowledged as a noncanon divergence for demo purposes only.
The following item is resolved only in private enterprise wiring, not in the
public slime-runner checkout:
- Stub AB-S — The public runner still uses
stub_abby default to demonstrate interface form. Private enterprise wiring may delegate authorization to the real Anathema-Breaker core, but that dependency path is intentionally not present in the public manifest.
The public slime-runner harness validates interface form with stub_ab and
does not implement the full canon specification.
Remaining gaps:
- Public checkout does not ship the private real AB-S dependency path
- Ignores payload entirely (no validation, no size check)
- Flattens all errors to IMPOSSIBLE (no distinction between format errors and true impossibilities)
- No cross-request saturation model (no SEALED terminal state)
- No FirePlank-Guard binary integrity verification
To achieve full SLIME canon compliance:
- Provide private enterprise wiring for the real AB-S engine outside the public manifest
- Implement full ingress validation (payload base64, size limits, HTTP status codes per canon)
- Deploy FirePlank-Guard (ACTUATOR_TCB.md) for binary integrity verification
- Verify conformance against
specs/- not against the runner
- If you are auditing SLIME, use
specs/as the sole authority. - If you are testing the public harness, expect the divergences listed above and the default
stub_abresolver. - If you need MB01-MB05 or real AB-S wiring, that is private enterprise validation outside the default public path.
- If you are deploying enterprise, the systemd model in
noncanon/enterprise/is the reference. - If you are evaluating security posture, do not treat the public harness as proof of enterprise AB-S integration. Full conformance additionally requires payload validation, private engine wiring, and FirePlank-Guard integrity.
No divergence listed here modifies the canon.
END — SLIME v0 CONFORMANCE MATRIX