v0.x This is the released v0.x line — the version that ships in release tarballs and is dogfooded in this repository. The v1.0 rebuild is documented separately in the v1.x preview.

DecisionRecord

A significant choice — architectural, product, or process — recorded with its context, rationale, and alternatives. The ADR (Architecture Decision Record) pattern as a first-class entity.

ID prefixDEC
State machinedecisionrecord
MCP serverdecision-record
Skilldecision-record (Layer 2)

State machine

proposed → accepted → superseded
         ↘ rejected

accepted, rejected, and superseded are terminal.

Fields

Required

FieldTypeDescription
titlestring (1–200)Short declarative title
statestringCurrent state
decisionstringThe chosen option, stated clearly

Optional

FieldTypeDescription
contextstringSituation that prompted the decision
rationalestringWhy this option was chosen
alternativesobject[]Each with option (required) and rejected_because (optional)
consequencesstringKnown or expected downstream effects
decidersACTOR-*[]People / agents who made the decision
supersedesDEC-*Prior decision this replaces
superseded_byDEC-*Later decision that replaces this one
related_workitemsBACK-*[]Work items that motivated or implement this decision
decided_atdatetimeWhen the decision was finalised

Example

---
apiVersion: processkit.projectious.work/v1
kind: DecisionRecord
metadata:
  id: DEC-20260411_0902-SwiftPeak-sqlite-for-index
  created: '2026-04-11T09:02:00Z'
spec:
  title: Use SQLite as the entity index store
  state: accepted
  decision: Use SQLite with WAL mode as the backing store for the index.
  context: |
    We need a queryable index over all context/ entities that agents can
    use without doing filesystem walks.
  rationale: |
    SQLite is zero-config, ships as a Python built-in, and supports
    full-text search via FTS5. No external service needed.
  alternatives:
    - option: PostgreSQL
      rejected_because: Requires a running service; too heavy for local dev.
    - option: DuckDB
      rejected_because: No built-in full-text search; adds a dependency.
  decided_at: '2026-04-09T12:00:00Z'
---

Notes

  • Use supersede_decision to create a clean supersession chain when a decision changes — the old record stays as history, the new one links back via supersedes.
  • Link decisions to work items with link_decision_to_workitem to make the “why was this built?” trail queryable.
  • proposed is the right starting state for decisions that need stakeholder sign-off before being acted on.