RFC 0009 — Decision v1
Purpose
Make “Decision” a first-class, named object for Hub narratives and indexing. A Decision points at an approved bundle digest and carries minimal fields for list/filter/export.
This is an index + story layer only (no execution changes).
Fields (decision_v1)
schema: "helix.decision.v1"
canonicalization_id: "json.c14n.v1" (optional but recommended)
decision_id: string
workspace_id: string
project_id: string
decision_kind: string
subject: JSON
state: "proposed" | "approved" | "rejected" | "superseded"
created_at_utc: RFC3339
created_by: string
proposed_bundle_digest: "sha256:…"
policy_digest: "sha256:…"
backend_fingerprint_digest: "sha256:…"
approval: null | {
approval_surface_digest: "sha256:…"
approval_receipt_digests: ["sha256:…", ...]
approved_at_utc: RFC3339
approved_by: [string, ...]
}
approved_bundle_digest: null | "sha256:…"
supersedes_decision_id: string (optional)
superseded_by_decision_id: string (optional; required when state="superseded")
rejection_reason: string (optional)
decision_digest: "sha256:…"
State machine
proposed:proposed_bundle_digestset,approval=null,approved_bundle_digest=nullapproved:approvalpresent,approved_bundle_digestsetrejected:approval=null,approved_bundle_digest=null, optionalrejection_reasonsuperseded:superseded_by_decision_idset (and typically retains approval + approved bundle digest)
Deterministic decision digest
decision_digest is computed as:
sha256(canonical_json(decision_without_decision_digest))
Canonical JSON is defined by RFC 0002.
Reference schema
schemas/hub/decision_v1.schema.jsonsrc/helix/schema/hub/decision_v1.schema.json