Examples › Vibe Tracks › Decisions (Vibe Tracks)

Decisions (Vibe Tracks)

Vibe Tracks' fifteen decision records (its PEPs 0001 to 0013, with 0011a and 0011b), newest first, and the tree of what each one depends on: an edge only where a record names another in its header (builds on, amends, supersedes). The same rows and edges drawn by both graph engines: React Flow to pan and zoom, Mermaid as a static map. Click a decision for its record.

Vibe Trackstablegraph3 views of one decisions.schema.json

The .base file and its data

Every tab above is one entry of this file; the views read these rows. ⋯ in the toolbar copies the current view as YAML.

# Vibe Tracks' decision records (docs/peps 0001-0013) as rows: a table, newest first, and the tree of what each
# depends on, drawn twice: React Flow (interactive) and Mermaid (a static map). Obsidian Bases grammar plus data-ui's
# graph keys (docs/CONTRACT.md §5). Check it: node bin/data-ui.mjs check <this file>
data: decisions.schema.json
views:
  - type: table
    name: Newest first
    order: [date, ref, title, status, depends_on]
    sort:
      - { property: date, direction: DESC }
  - type: graph
    name: Tree
    edges: { property: depends_on }
    layout: { engine: flow, direction: BT }
  - type: graph
    name: Map
    edges: { property: depends_on }
    layout: { engine: mermaid, direction: BT }
{
 "name": "decisions",
 "title": "Decisions (Vibe Tracks)",
 "titleProperty": "title",
 "primaryKey": "id",
 "path": "decisions.json",
 "schema": {
  "fields": [
   { "name": "id", "type": "string", "title": "Id", "hidden": true },
   { "name": "ref", "type": "string", "title": "Ref", "width": 70 },
   { "name": "title", "type": "string", "title": "Decision", "width": 420 },
   { "name": "date", "type": "date", "title": "Date" },
   { "name": "status", "type": "string", "title": "Status", "display": "badge" },
   { "name": "status_text", "type": "string", "title": "Status, as written" },
   { "name": "depends_on", "type": "array", "title": "Depends on", "relation": true, "description": "every record this one builds on, amends or supersedes" },
   { "name": "builds_on", "type": "array", "title": "Builds on", "relation": true },
   { "name": "amends", "type": "array", "title": "Amends", "relation": true },
   { "name": "supersedes", "type": "array", "title": "Supersedes", "relation": true },
   { "name": "kind", "type": "string", "title": "Kind" },
   { "name": "track", "type": "string", "title": "Track" },
   { "name": "source", "type": "string", "title": "Source" }
  ]
 }
}
decisions.schema.json, README.md
{
 "name": "decisions",
 "title": "Decisions (Vibe Tracks)",
 "titleProperty": "title",
 "primaryKey": "id",
 "path": "decisions.json",
 "schema": {
  "fields": [
   { "name": "id", "type": "string", "title": "Id", "hidden": true },
   { "name": "ref", "type": "string", "title": "Ref", "width": 70 },
   { "name": "title", "type": "string", "title": "Decision", "width": 420 },
   { "name": "date", "type": "date", "title": "Date" },
   { "name": "status", "type": "string", "title": "Status", "display": "badge" },
   { "name": "status_text", "type": "string", "title": "Status, as written" },
   { "name": "depends_on", "type": "array", "title": "Depends on", "relation": true, "description": "every record this one builds on, amends or supersedes" },
   { "name": "builds_on", "type": "array", "title": "Builds on", "relation": true },
   { "name": "amends", "type": "array", "title": "Amends", "relation": true },
   { "name": "supersedes", "type": "array", "title": "Supersedes", "relation": true },
   { "name": "kind", "type": "string", "title": "Kind" },
   { "name": "track", "type": "string", "title": "Track" },
   { "name": "source", "type": "string", "title": "Source" }
  ]
 }
}
# Decisions (Vibe Tracks)

Vibe Tracks' fifteen decision records (its PEPs 0001 to 0013, with 0011a and 0011b), newest first, and the tree of
what each one depends on: an edge only where a record names another in its header (builds on, amends, supersedes).
The same rows and edges drawn by both graph engines: React Flow to pan and zoom, Mermaid as a static map. Click a
decision for its record.

- **App:** Vibe Tracks
- **Replaces:** nothing (new): Vibe Tracks has no Decisions page yet; its records are read as files in `docs/peps/`.
- **Shows:** a table sorted by `date` descending; `type: graph` with `edges: {property: depends_on}` and `layout:
  {engine: flow, direction: BT}` (React Flow + dagre) beside the same graph with `layout: {engine: mermaid}` (a
  Mermaid flowchart, loaded only when that view opens); relation properties (`relation: true`), so a record's peek
  links to the records it depends on and keeps the trail.
- **Data:** `decisions.json`, copied verbatim from Vibe Tracks' hand-read acceptance oracle
  (`tests/fixtures/decisions/oracle.json` on branch `claude/vibetracks-decisions`, commit 59b4073): 15 records and
  23 declared dependency edges, none inferred. `decisions.schema.json` names its fields (title, date, the four
  relations) and points at it.

The original UI it replaces

nothing (new): Vibe Tracks has no Decisions page yet; its records are read as files in docs/peps/.

What it shows

a table sorted by date descending; type: graph with edges: {property: depends_on} and layout: {engine: flow, direction: BT} (React Flow + dagre) beside the same graph with layout: {engine: mermaid} (a Mermaid flowchart, loaded only when that view opens); relation properties (relation: true), so a record's peek links to the records it depends on and keeps the trail.

Data

decisions.json, copied verbatim from Vibe Tracks' hand-read acceptance oracle (tests/fixtures/decisions/oracle.json on branch claude/vibetracks-decisions, commit 59b4073): 15 records and 23 declared dependency edges, none inferred. decisions.schema.json names its fields (title, date, the four relations) and points at it.