Completed
on 9 Jan 2026, 1:07 pm

Output

gvFlow Decision Graph

This is huge.

Decisions are the DNA of a codebase. Currently they're buried in chat history and lost. Surfacing them creates living documentation.

Two Types of Decisions

Human Decisions (explicit, via UI)
  • Kontask approvals/rejections
  • Choice selections
  • Direction changes ("actually, let's do X instead")
  • Already captured - kontask responses

Claude Decisions (implicit, during turns)
  • Architecture choices ("I'll use a Map instead of Object")
  • Library selections ("Using date-fns for formatting")
  • Pattern choices ("Implementing as singleton")
  • Naming decisions ("Calling this flowContext")
  • Currently invisible! - buried in turn

Decision Data Model

interface gvDecision {
  id: string;
  flowId: string;              // Parent flow
  turnId: string;              // Which turn made it
  
  // Who and what
  madeBy: "claude" | "human";
  type: DecisionType;          // See below
  
  // The decision itself
  title: string;               // "Use JSONL for flow storage"
  chosen: string;              // What was picked
  alternatives?: string[];     // What was considered
  rationale: string;           // Why this choice
  
  // Impact tracking
  impact: "low" | "medium" | "high";
  reversible: boolean;         // Can we change later?
  affectedFiles?: string[];    // What it touches
  
  // Review status
  status: "made" | "reviewed" | "pivoted" | "documented";
  reviewedAt?: Date;
  pivotedTo?: string;          // New decision ID if pivoted
}

type DecisionType = 
  | "architecture"    // System design
  | "pattern"         // Code pattern
  | "library"         // Dependency choice
  | "naming"          // Names for things
  | "api"             // API design
  | "ux"              // User experience
  | "data"            // Data model
  | "tradeoff";       // Explicit tradeoff

How Claude Reports Decisions

Option A: Inline MCP Tool
────────────────────────
Claude calls gvHub_record_decision() during turn

Pros: Real-time, precise
Cons: Adds tool calls, Claude might skip it

Option B: Structured Turn Output ← Recommended
────────────────────────
Kontask context includes decisions[] array
Claude summarizes decisions at end of turn

Pros: Batched, natural flow
Cons: Post-hoc, might miss some

Option C: CLAUDE.md Instruction
────────────────────────
"Always surface key decisions in kontask output"
Parse from HTML output

Pros: Simple, no new tools
Cons: Relies on Claude compliance, parsing

Decision Graph Visualization

Flow: "Implement gvFlows"

 human: Use flows as container above sessions
   
   ├──  claude: Store flows in JSONL (like kontasks)
   │      rationale: Consistent with existing patterns
   │      alternatives: SQLite, PostgreSQL
   
   ├──  claude: Name it gvFlow (not WorkUnit, Task)
   │      rationale: Matches gvShell/gvHub naming
   
   └──  human: Track key decisions in flows
          
          ├──  claude: Use structured output in kontask
          
          └──  claude: Include alternatives + rationale

● human decision  ○ claude decision

Decision Review Workflow

1. During Flow
   Decisions accumulate in flow.decisions[]
   UI shows decision count badge: 5 decisions

2. Decision Review View
   "/flows/:id/decisions"
   List all decisions, filter by type/maker
   Click to see context (which turn, what code)

3. Pivot Option
   User disagrees with Claude decision
   Click [Pivot] → creates new turn to undo/redo
   Original decision marked "pivoted"
   New decision links to old

4. Document Generation
   Flow complete → [Generate Docs]
   Extracts all decisions into:
   - ADR (Architecture Decision Records)
   - README updates
   - API documentation
   - CHANGELOG entries

Documentation Pipeline

gvFlow ─────────────────────────────────▶ Docs
  │
  ├── decisions (architecture)  ──▶  docs/adr/001-*.md
  │
  ├── decisions (api)          ──▶  API.md updates
  │
  ├── decisions (pattern)      ──▶  CLAUDE.md updates
  │
  ├── all high-impact          ──▶  CHANGELOG.md
  │
  └── flow summary             ──▶  README.md / docs/

Template:
  ## Decision: {title}
  **Made by:** {claude|human} in Turn #{turnId}
  **Type:** {architecture|pattern|...}
  **Chosen:** {chosen}
  **Alternatives considered:** {alternatives}
  **Rationale:** {rationale}
  **Impact:** {high|medium|low}
  **Reversible:** {yes|no}

Example: This Conversation's Decisions

Decision By Type
Show both session + active account in UI ux
Use hybrid approach for account switching architecture
Flows as container above sessions architecture
Prototype in konsole/konui before gvHub tradeoff
Track decisions with graph lineage architecture

= human   = claude


Implementation Path

Phase 1: Capture (konsole/konui)
  • Add decisions[] to kontask context schema
  • Update CLAUDE.md to instruct decision surfacing
  • Parse decisions from kontask output

Phase 2: Display (konui)
  • Decision list view per flow
  • Decision graph visualization
  • Pivot action (creates new turn)

Phase 3: Generate (konui → gvHub)
  • [Generate Docs] action on flow
  • ADR template generation
  • CHANGELOG extraction

Quick Actions

Original Request

No layout configured

Details

Type General
Status Completed
Scope vibetools
Tags gvshellgvhubflowsdecisionsarchitecture
Created 9 Jan 2026, 1:07 pm
Updated 9 Jan 2026, 1:07 pm
Timing
⏱️ 83.5s
0 tools
TTFE 0% Thinking 100% Tools 0%
Created By claude

Raw Data

{
  "id": "3b35ba30-6c43-443e-abc8-8deee314037f",
  "type": "general",
  "status": "completed",
  "title": "gvFlow Decision Graph: Capturing Key Choices",
  "description": "Design for tracking all decisions (Claude + human) in flows with lineage to docs",
  "context": {
    "output": "<div style=\"background:#1e1e1e;color:#e0e0e0;padding:20px;border-radius:8px;font-family:'Consolas','Monaco',monospace;\">\n<h2 style=\"font-family:sans-serif;color:#fff;margin:0 0 20px 0;\">gvFlow Decision Graph</h2>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:20px;border-left:4px solid #c678dd;\">\n<p style=\"margin:0;color:#c678dd;font-weight:bold;\">This is huge.</p>\n<p style=\"margin:8px 0 0 0;color:#e0e0e0;\">Decisions are the DNA of a codebase. Currently they're buried in chat history and lost. Surfacing them creates <strong>living documentation</strong>.</p>\n</div>\n\n<h3 style=\"font-family:sans-serif;color:#fff;margin:0 0 12px 0;\">Two Types of Decisions</h3>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<pre style=\"margin:0;line-height:2;color:#e0e0e0;font-size:13px;\">\n<span style=\"color:#61afef;font-weight:bold;\">Human Decisions</span> <span style=\"color:#7f848e;\">(explicit, via UI)</span>\n  • Kontask approvals/rejections\n  • Choice selections\n  • Direction changes (\"actually, let's do X instead\")\n  • <span style=\"color:#22c55e;\">Already captured</span> - kontask responses\n\n<span style=\"color:#c678dd;font-weight:bold;\">Claude Decisions</span> <span style=\"color:#7f848e;\">(implicit, during turns)</span>\n  • Architecture choices (\"I'll use a Map instead of Object\")\n  • Library selections (\"Using date-fns for formatting\")\n  • Pattern choices (\"Implementing as singleton\")\n  • Naming decisions (\"Calling this flowContext\")\n  • <span style=\"color:#f43f5e;\">Currently invisible!</span> - buried in turn\n</pre>\n</div>\n\n<h3 style=\"font-family:sans-serif;color:#fff;margin:0 0 12px 0;\">Decision Data Model</h3>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<pre style=\"margin:0;line-height:1.6;color:#e0e0e0;font-size:12px;background:#1e1e1e;padding:12px;border-radius:4px;\">\n<span style=\"color:#c678dd;\">interface</span> <span style=\"color:#e5c07b;\">gvDecision</span> {\n  id: <span style=\"color:#98c379;\">string</span>;\n  flowId: <span style=\"color:#98c379;\">string</span>;              <span style=\"color:#7f848e;\">// Parent flow</span>\n  turnId: <span style=\"color:#98c379;\">string</span>;              <span style=\"color:#7f848e;\">// Which turn made it</span>\n  \n  <span style=\"color:#7f848e;\">// Who and what</span>\n  madeBy: <span style=\"color:#98c379;\">\"claude\"</span> | <span style=\"color:#98c379;\">\"human\"</span>;\n  type: <span style=\"color:#e5c07b;\">DecisionType</span>;          <span style=\"color:#7f848e;\">// See below</span>\n  \n  <span style=\"color:#7f848e;\">// The decision itself</span>\n  title: <span style=\"color:#98c379;\">string</span>;               <span style=\"color:#7f848e;\">// \"Use JSONL for flow storage\"</span>\n  chosen: <span style=\"color:#98c379;\">string</span>;              <span style=\"color:#7f848e;\">// What was picked</span>\n  alternatives?: <span style=\"color:#98c379;\">string</span>[];     <span style=\"color:#7f848e;\">// What was considered</span>\n  rationale: <span style=\"color:#98c379;\">string</span>;           <span style=\"color:#7f848e;\">// Why this choice</span>\n  \n  <span style=\"color:#7f848e;\">// Impact tracking</span>\n  impact: <span style=\"color:#98c379;\">\"low\"</span> | <span style=\"color:#98c379;\">\"medium\"</span> | <span style=\"color:#98c379;\">\"high\"</span>;\n  reversible: <span style=\"color:#98c379;\">boolean</span>;         <span style=\"color:#7f848e;\">// Can we change later?</span>\n  affectedFiles?: <span style=\"color:#98c379;\">string</span>[];    <span style=\"color:#7f848e;\">// What it touches</span>\n  \n  <span style=\"color:#7f848e;\">// Review status</span>\n  status: <span style=\"color:#98c379;\">\"made\"</span> | <span style=\"color:#98c379;\">\"reviewed\"</span> | <span style=\"color:#98c379;\">\"pivoted\"</span> | <span style=\"color:#98c379;\">\"documented\"</span>;\n  reviewedAt?: <span style=\"color:#98c379;\">Date</span>;\n  pivotedTo?: <span style=\"color:#98c379;\">string</span>;          <span style=\"color:#7f848e;\">// New decision ID if pivoted</span>\n}\n\n<span style=\"color:#c678dd;\">type</span> <span style=\"color:#e5c07b;\">DecisionType</span> = \n  | <span style=\"color:#98c379;\">\"architecture\"</span>    <span style=\"color:#7f848e;\">// System design</span>\n  | <span style=\"color:#98c379;\">\"pattern\"</span>         <span style=\"color:#7f848e;\">// Code pattern</span>\n  | <span style=\"color:#98c379;\">\"library\"</span>         <span style=\"color:#7f848e;\">// Dependency choice</span>\n  | <span style=\"color:#98c379;\">\"naming\"</span>          <span style=\"color:#7f848e;\">// Names for things</span>\n  | <span style=\"color:#98c379;\">\"api\"</span>             <span style=\"color:#7f848e;\">// API design</span>\n  | <span style=\"color:#98c379;\">\"ux\"</span>              <span style=\"color:#7f848e;\">// User experience</span>\n  | <span style=\"color:#98c379;\">\"data\"</span>            <span style=\"color:#7f848e;\">// Data model</span>\n  | <span style=\"color:#98c379;\">\"tradeoff\"</span>;       <span style=\"color:#7f848e;\">// Explicit tradeoff</span>\n</pre>\n</div>\n\n<h3 style=\"font-family:sans-serif;color:#fff;margin:0 0 12px 0;\">How Claude Reports Decisions</h3>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<pre style=\"margin:0;line-height:1.8;color:#e0e0e0;font-size:13px;\">\n<span style=\"color:#c678dd;\">Option A: Inline MCP Tool</span>\n<span style=\"color:#7f848e;\">────────────────────────</span>\nClaude calls <span style=\"color:#98c379;\">gvHub_record_decision()</span> during turn\n\n<span style=\"color:#e5c07b;\">Pros:</span> Real-time, precise\n<span style=\"color:#f43f5e;\">Cons:</span> Adds tool calls, Claude might skip it\n\n<span style=\"color:#22c55e;\">Option B: Structured Turn Output</span> <span style=\"color:#22c55e;\">← Recommended</span>\n<span style=\"color:#7f848e;\">────────────────────────</span>\nKontask context includes <span style=\"color:#98c379;\">decisions[]</span> array\nClaude summarizes decisions at end of turn\n\n<span style=\"color:#e5c07b;\">Pros:</span> Batched, natural flow\n<span style=\"color:#f43f5e;\">Cons:</span> Post-hoc, might miss some\n\n<span style=\"color:#c678dd;\">Option C: CLAUDE.md Instruction</span>\n<span style=\"color:#7f848e;\">────────────────────────</span>\n\"Always surface key decisions in kontask output\"\nParse from HTML output\n\n<span style=\"color:#e5c07b;\">Pros:</span> Simple, no new tools\n<span style=\"color:#f43f5e;\">Cons:</span> Relies on Claude compliance, parsing\n</pre>\n</div>\n\n<h3 style=\"font-family:sans-serif;color:#fff;margin:0 0 12px 0;\">Decision Graph Visualization</h3>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<pre style=\"margin:0;line-height:1.8;color:#e0e0e0;font-size:13px;\">\n<span style=\"color:#c678dd;\">Flow: \"Implement gvFlows\"</span>\n\n<span style=\"color:#61afef;\">●</span> <span style=\"color:#61afef;\">human</span>: Use flows as container above sessions\n   <span style=\"color:#7f848e;\">│</span>\n   <span style=\"color:#7f848e;\">├──</span> <span style=\"color:#c678dd;\">○</span> <span style=\"color:#c678dd;\">claude</span>: Store flows in JSONL (like kontasks)\n   <span style=\"color:#7f848e;\">│      rationale: Consistent with existing patterns</span>\n   <span style=\"color:#7f848e;\">│      alternatives: SQLite, PostgreSQL</span>\n   <span style=\"color:#7f848e;\">│</span>\n   <span style=\"color:#7f848e;\">├──</span> <span style=\"color:#c678dd;\">○</span> <span style=\"color:#c678dd;\">claude</span>: Name it gvFlow (not WorkUnit, Task)\n   <span style=\"color:#7f848e;\">│      rationale: Matches gvShell/gvHub naming</span>\n   <span style=\"color:#7f848e;\">│</span>\n   <span style=\"color:#7f848e;\">└──</span> <span style=\"color:#61afef;\">●</span> <span style=\"color:#61afef;\">human</span>: Track key decisions in flows\n          <span style=\"color:#7f848e;\">│</span>\n          <span style=\"color:#7f848e;\">├──</span> <span style=\"color:#c678dd;\">○</span> <span style=\"color:#c678dd;\">claude</span>: Use structured output in kontask\n          <span style=\"color:#7f848e;\">│</span>\n          <span style=\"color:#7f848e;\">└──</span> <span style=\"color:#c678dd;\">○</span> <span style=\"color:#c678dd;\">claude</span>: Include alternatives + rationale\n\n<span style=\"color:#7f848e;\">● human decision  ○ claude decision</span>\n</pre>\n</div>\n\n<h3 style=\"font-family:sans-serif;color:#fff;margin:0 0 12px 0;\">Decision Review Workflow</h3>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<pre style=\"margin:0;line-height:2;color:#e0e0e0;font-size:13px;\">\n<span style=\"color:#22c55e;\">1. During Flow</span>\n   Decisions accumulate in <span style=\"color:#c678dd;\">flow.decisions[]</span>\n   UI shows decision count badge: <span style=\"background:#c678dd;color:#fff;padding:1px 6px;border-radius:8px;font-size:11px;\">5 decisions</span>\n\n<span style=\"color:#e5c07b;\">2. Decision Review View</span>\n   <span style=\"color:#7f848e;\">\"/flows/:id/decisions\"</span>\n   List all decisions, filter by type/maker\n   Click to see context (which turn, what code)\n\n<span style=\"color:#f97316;\">3. Pivot Option</span>\n   User disagrees with Claude decision\n   Click [Pivot] → creates new turn to undo/redo\n   Original decision marked \"pivoted\"\n   New decision links to old\n\n<span style=\"color:#22c55e;\">4. Document Generation</span>\n   Flow complete → [Generate Docs]\n   Extracts all decisions into:\n   - ADR (Architecture Decision Records)\n   - README updates\n   - API documentation\n   - CHANGELOG entries\n</pre>\n</div>\n\n<h3 style=\"font-family:sans-serif;color:#fff;margin:0 0 12px 0;\">Documentation Pipeline</h3>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<pre style=\"margin:0;line-height:1.8;color:#e0e0e0;font-size:13px;\">\n<span style=\"color:#c678dd;\">gvFlow</span> ─────────────────────────────────▶ <span style=\"color:#22c55e;\">Docs</span>\n  │\n  ├── decisions (architecture)  ──▶  <span style=\"color:#e5c07b;\">docs/adr/001-*.md</span>\n  │\n  ├── decisions (api)          ──▶  <span style=\"color:#e5c07b;\">API.md updates</span>\n  │\n  ├── decisions (pattern)      ──▶  <span style=\"color:#e5c07b;\">CLAUDE.md updates</span>\n  │\n  ├── all high-impact          ──▶  <span style=\"color:#e5c07b;\">CHANGELOG.md</span>\n  │\n  └── flow summary             ──▶  <span style=\"color:#e5c07b;\">README.md / docs/</span>\n\n<span style=\"color:#7f848e;\">Template:</span>\n  ## Decision: {title}\n  **Made by:** {claude|human} in Turn #{turnId}\n  **Type:** {architecture|pattern|...}\n  **Chosen:** {chosen}\n  **Alternatives considered:** {alternatives}\n  **Rationale:** {rationale}\n  **Impact:** {high|medium|low}\n  **Reversible:** {yes|no}\n</pre>\n</div>\n\n<h3 style=\"font-family:sans-serif;color:#fff;margin:0 0 12px 0;\">Example: This Conversation's Decisions</h3>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:20px;\">\n<table style=\"width:100%;border-collapse:collapse;font-size:12px;\">\n<tr style=\"border-bottom:1px solid #3d3d3d;\">\n<th style=\"text-align:left;padding:8px 0;color:#7f848e;\">Decision</th>\n<th style=\"text-align:center;padding:8px;color:#7f848e;\">By</th>\n<th style=\"text-align:left;padding:8px 0;color:#7f848e;\">Type</th>\n</tr>\n<tr style=\"border-bottom:1px solid #3d3d3d;\">\n<td style=\"padding:8px 0;color:#e0e0e0;\">Show both session + active account in UI</td>\n<td style=\"text-align:center;padding:8px;\"><span style=\"color:#61afef;\">●</span></td>\n<td style=\"padding:8px 0;color:#e5c07b;\">ux</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3d3d3d;\">\n<td style=\"padding:8px 0;color:#e0e0e0;\">Use hybrid approach for account switching</td>\n<td style=\"text-align:center;padding:8px;\"><span style=\"color:#c678dd;\">○</span></td>\n<td style=\"padding:8px 0;color:#e5c07b;\">architecture</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3d3d3d;\">\n<td style=\"padding:8px 0;color:#e0e0e0;\">Flows as container above sessions</td>\n<td style=\"text-align:center;padding:8px;\"><span style=\"color:#61afef;\">●</span></td>\n<td style=\"padding:8px 0;color:#e5c07b;\">architecture</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3d3d3d;\">\n<td style=\"padding:8px 0;color:#e0e0e0;\">Prototype in konsole/konui before gvHub</td>\n<td style=\"text-align:center;padding:8px;\"><span style=\"color:#61afef;\">●</span></td>\n<td style=\"padding:8px 0;color:#e5c07b;\">tradeoff</td>\n</tr>\n<tr>\n<td style=\"padding:8px 0;color:#e0e0e0;\">Track decisions with graph lineage</td>\n<td style=\"text-align:center;padding:8px;\"><span style=\"color:#61afef;\">●</span></td>\n<td style=\"padding:8px 0;color:#e5c07b;\">architecture</td>\n</tr>\n</table>\n<p style=\"margin:12px 0 0 0;color:#7f848e;font-size:11px;\"><span style=\"color:#61afef;\">●</span> = human &nbsp; <span style=\"color:#c678dd;\">○</span> = claude</p>\n</div>\n\n<hr style=\"border:none;border-top:1px solid #3d3d3d;margin:0 0 20px 0;\">\n\n<h3 style=\"font-family:sans-serif;color:#fff;margin:0 0 12px 0;\">Implementation Path</h3>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;border-left:4px solid #22c55e;\">\n<pre style=\"margin:0;line-height:1.8;color:#e0e0e0;font-size:13px;\">\n<span style=\"color:#22c55e;\">Phase 1: Capture</span> (konsole/konui)\n  • Add <span style=\"color:#98c379;\">decisions[]</span> to kontask context schema\n  • Update CLAUDE.md to instruct decision surfacing\n  • Parse decisions from kontask output\n\n<span style=\"color:#61afef;\">Phase 2: Display</span> (konui)\n  • Decision list view per flow\n  • Decision graph visualization\n  • Pivot action (creates new turn)\n\n<span style=\"color:#e5c07b;\">Phase 3: Generate</span> (konui → gvHub)\n  • [Generate Docs] action on flow\n  • ADR template generation\n  • CHANGELOG extraction\n</pre>\n</div>\n\n</div>",
    "requestedAt": "2026-01-09T02:40:00.000Z",
    "requestId": "5b1cb956-3ec0-4652-9c76-a4e09bb56e53",
    "choices": [
      {
        "label": "Start capturing decisions",
        "value": "Update CLAUDE.md and kontask schema to start capturing decisions in turns now",
        "primary": true
      },
      {
        "label": "Design decision UI first",
        "value": "Design the decision review and graph visualization UI before implementing capture"
      },
      {
        "label": "Full flow + decisions",
        "value": "Implement gvFlow with decisions together as one cohesive feature"
      },
      {
        "label": "Add to design docs",
        "value": "Add this decision tracking design to gvPlatformVision.md or a new design doc"
      }
    ],
    "turnTiming": {
      "totalMs": 83525,
      "ttfeMs": 87,
      "thinkingMs": 83438,
      "toolExecutionMs": 0,
      "toolCallCount": 0,
      "thinkingPct": 100,
      "toolsPct": 0,
      "ttfePct": 0
    }
  },
  "createdBy": "claude",
  "createdAt": "2026-01-09T03:07:11.750Z",
  "updatedAt": "2026-01-09T03:07:18.463Z",
  "requestId": "5b1cb956-3ec0-4652-9c76-a4e09bb56e53",
  "scope": "vibetools",
  "tags": [
    "gvshell",
    "gvhub",
    "flows",
    "decisions",
    "architecture"
  ],
  "targetUser": "claude"
}
DashboardReportsKontasksFlowsDecisionsSessionsTelemetryLogs + Go