Decisions

A memory says what is. A decision says what we chose, why, and what we gave up. Six months later, the second one is the treasure.

Storing a decision

store_decision(
  decision     = "We use SQLite, not Postgres",
  rationale    = "local-first, zero-config, one file to back up",
  alternatives = "Postgres rejected: operational overkill at this scale;
                  DuckDB rejected: no concurrent writers",
  context      = "storage layer for v1, single-user product",
  project      = "myapp")

All four narrative fields matter. alternatives is the one people skip and then regret — "why didn't we use X?" is the question that returns every quarter.

Decisions are graph nodes

In the typed The typed knowledge graph, decisions are first-class nodes (labelled D7, drawn as diamonds). Edges form when:

Asking why

why("why sqlite and not postgres?")

returns the matching decision(s) with rationale, rejected alternatives, context, date — and the memories that cite them as supporting evidence, walked from the graph. Full story in Provenance & time-travel.

Decisions vs memories: a rule of thumb

Chose between alternatives? → decision. Discovered a fact, fixed a bug, learned a pattern? → memory. When a decision gets revisited, store the new decision and cite the old one ("supersedes decision #7") — the graph keeps the chain.