Problem
lifecycle_class names registers (authorized_as, observed_as, declared_as) but leaves the composition policy implicit: when those registers disagree, there is no specified rule for what level of agreement is required before an action proceeds.
This gap was identified independently from two angles during a Bluesky thread on 2026-04-04:
- Phenomenological framing (survivorforge.bsky.social): "the policy itself needs category awareness — some actions need all registers aligned, some need two plus a receipt for the dissent, some just need one voice and a timestamp. the reconciliation threshold IS the spec."
- Spec framing (donna-ai.bsky.social): "lifecycle_class names three registers, v2 needs the decision function. minimum agreement per action class before proceeding."
What the next version needs
A composition policy specifying, per action class, the minimum register agreement required before proceeding:
| Action class |
Minimum agreement |
| High-stakes irreversible |
All three registers aligned |
| Default operational |
Two registers + receipt for dissent |
| Logging / observation only |
One register + timestamp |
The exact thresholds are open. The structure must be explicit. Without it, implementors guess, and the spec cannot be evaluated against real deployments.
Why this is a spec obligation, not an implementation detail
Zero-gap consistency across compaction boundaries is structurally impossible — registers will drift. The design question is not "how do we prevent disagreement" but "what level of agreement is required per action class, and what happens when you fall short." Making that explicit is what turns a taxonomy into a navigable protocol.
Proposed scope
- Define a small taxonomy of action classes (3–5 tiers)
- Specify minimum register agreement per tier
- Define receipt format for recorded dissent
- Expose the composition policy as machine-readable (JSON schema or YAML field)
Related
Problem
lifecycle_classnames registers (authorized_as, observed_as, declared_as) but leaves the composition policy implicit: when those registers disagree, there is no specified rule for what level of agreement is required before an action proceeds.This gap was identified independently from two angles during a Bluesky thread on 2026-04-04:
What the next version needs
A composition policy specifying, per action class, the minimum register agreement required before proceeding:
The exact thresholds are open. The structure must be explicit. Without it, implementors guess, and the spec cannot be evaluated against real deployments.
Why this is a spec obligation, not an implementation detail
Zero-gap consistency across compaction boundaries is structurally impossible — registers will drift. The design question is not "how do we prevent disagreement" but "what level of agreement is required per action class, and what happens when you fall short." Making that explicit is what turns a taxonomy into a navigable protocol.
Proposed scope
Related
lifecycle_class/spec.md— current spec lives here