Product teams, operators, and application developers

Decision model

Record immutable Decisions, retrieve the current answer, and preserve every change through explicit supersession.

Task 1

Record a Decision
Create a durable Decision with a stable key, rationale, Actor attribution, and optional source provenance.

Permission boundary

decisions.create.workspace

Steps

  1. 1Choose a stable decisionKey that callers can reuse when the wording changes.
  2. 2Record the Decision text and rationale as the meaning-bearing, immutable statement.
  3. 3Attach source provenance when evidence is available; do not copy evidence into an editable note.
  4. 4Use a DecisionCandidate instead when the proposed meaning still requires review.

CLI from this repository

pnpm decision-log decisions create \
  --key architecture/database \
  --title "Use Postgres for the system of record" \
  --decision-text "Decision data is stored in Postgres." \
  --rationale "Transactions protect append-only writes."

Creates are idempotent and audited. Once active, meaning changes require a new Decision and a DecisionSupersession relationship.

Task 2

Retrieve the current answer
Resolve the active Decision by stable key without hiding the historical Decisions it superseded.

Permission boundary

decisions.read.workspace

Steps

  1. 1Send the stable decisionKey, plus a Project context when the key is scoped to a Project.
  2. 2Treat the returned Decision as the current answer for that key and context.
  3. 3Follow its supersession history when the reason for change matters.

GraphQL, CLI, and MCP

GraphQL query: currentDecision
pnpm decision-log decisions current architecture/database
MCP tool: decision_log.get_current_decision
MCP resource: decision-log://current/{decisionKey}

Current retrieval is available through GraphQL, CLI, and MCP against the same permission boundary.

Task 3

Supersede safely
Replace changed meaning with a new immutable Decision and an explicit link to the prior record.

Permission boundary

decisions.supersede.workspace

Steps

  1. 1Retrieve the current Decision and confirm it is the record being replaced.
  2. 2Create the replacement with the new Decision text, rationale, and reason for change.
  3. 3Verify the replacement is current and the prior Decision remains retrievable in history.

Supported surfaces

GraphQL mutation: supersedeDecision
pnpm decision-log decisions supersede {decisionId}
MCP tool: decision_log.supersede_decision

Supersession and replacement creation are atomic and audited. The prior Decision is never rewritten.