D-87 — T-54's "output and log panel" is a bottom output dock: read-only, two tabs (Output = the Logger stream, filterable + auto-scroll; Problems = diagnostics moved out of the sidebar). Toggled by a single status-bar widget that replaces the app-status indicator (merged health+log: green check when clean, warn/error counts otherwise) via click or Cmd/Ctrl+J. Needs a bounded ring sink on the Logger (no history today). Amends D-47: the dock is the one surface allowed to push Claude up, capped so Claude stays >=50%. Resolves Q-28 by splitting on interaction: read-only output (logs/problems) goes in the dock; the terminal does NOT — it stays a first-class editor-pane surface, tracked by new T-258 (swap-vs-split, with Q-27). Refines T-54. Wireframe under docs/design/wireframes/output-dock/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
244 lines
12 KiB
JSON
244 lines
12 KiB
JSON
{
|
||
"name": "T-54 Output Log Dock",
|
||
"shapes": {
|
||
"title": {
|
||
"type": "Text",
|
||
"left": 40, "top": 8,
|
||
"text": "T-54 — Output / Log dock · click the status bar to toggle (open state shown)",
|
||
"fontColor": "#c8d0e0", "fontSize": 16
|
||
},
|
||
|
||
"win": {
|
||
"type": "Rectangle",
|
||
"left": 40, "top": 40, "width": 1280, "height": 800,
|
||
"fillColor": "#1a1e24", "strokeColor": "#333340", "corners": [8, 8, 8, 8]
|
||
},
|
||
"chrome": {
|
||
"type": "Rectangle", "parent": "win",
|
||
"left": 40, "top": 40, "width": 1280, "height": 24,
|
||
"fillColor": "#21262f", "strokeColor": "#333340", "corners": [8, 8, 0, 0]
|
||
},
|
||
"chrome-label": {
|
||
"type": "Text", "parent": "chrome",
|
||
"left": 54, "top": 45, "text": "clide · postmeridiem/clide", "fontColor": "#6a7280", "fontSize": 12
|
||
},
|
||
|
||
"sidebar": {
|
||
"type": "Rectangle", "parent": "win",
|
||
"left": 40, "top": 64, "width": 200, "height": 500,
|
||
"fillColor": "#21262f", "strokeColor": "#333340", "corners": [0, 0, 0, 0]
|
||
},
|
||
"sidebar-label": {
|
||
"type": "Text", "parent": "sidebar",
|
||
"left": 54, "top": 76, "text": "tickets · files · git · pql", "fontColor": "#6a7280", "fontSize": 12
|
||
},
|
||
|
||
"workspace": {
|
||
"type": "Rectangle", "parent": "win",
|
||
"left": 240, "top": 64, "width": 740, "height": 500,
|
||
"fillColor": "#1a1e24", "strokeColor": "#333340", "corners": [0, 0, 0, 0]
|
||
},
|
||
"ws-label": {
|
||
"type": "Text", "parent": "workspace",
|
||
"left": 256, "top": 76, "text": "Claude (home) — editor · diff · terminal lift above it (D-49 editor-mode)", "fontColor": "#6a7280", "fontSize": 12
|
||
},
|
||
"ws-msg": {
|
||
"type": "Rectangle", "parent": "workspace",
|
||
"left": 256, "top": 110, "width": 560, "height": 70,
|
||
"fillColor": "#21262f", "strokeColor": "#333340", "corners": [6, 6, 6, 6]
|
||
},
|
||
"ws-prompt": {
|
||
"type": "Rectangle", "parent": "workspace",
|
||
"left": 256, "top": 500, "width": 708, "height": 44,
|
||
"fillColor": "#2a3040", "strokeColor": "#c8d8f0", "corners": [8, 8, 8, 8]
|
||
},
|
||
"ws-prompt-label": {
|
||
"type": "Text", "parent": "ws-prompt",
|
||
"left": 270, "top": 514, "text": "Ask Claude…", "fontColor": "#6a7280", "fontSize": 13
|
||
},
|
||
|
||
"context": {
|
||
"type": "Rectangle", "parent": "win",
|
||
"left": 980, "top": 64, "width": 340, "height": 500,
|
||
"fillColor": "#21262f", "strokeColor": "#333340", "corners": [0, 0, 0, 0]
|
||
},
|
||
"context-label": {
|
||
"type": "Text", "parent": "context",
|
||
"left": 994, "top": 76, "text": "context / reader", "fontColor": "#6a7280", "fontSize": 12
|
||
},
|
||
|
||
"dock": {
|
||
"type": "Rectangle", "parent": "win",
|
||
"left": 40, "top": 564, "width": 1280, "height": 250,
|
||
"fillColor": "#21262f", "strokeColor": "#333340", "corners": [0, 0, 0, 0]
|
||
},
|
||
"dock-accent": {
|
||
"type": "Rectangle", "parent": "dock",
|
||
"left": 40, "top": 564, "width": 1280, "height": 2,
|
||
"fillColor": "#c8d8f0", "strokeColor": "#c8d8f0", "corners": [0, 0, 0, 0]
|
||
},
|
||
"dock-header": {
|
||
"type": "Rectangle", "parent": "dock",
|
||
"left": 40, "top": 566, "width": 1280, "height": 32,
|
||
"fillColor": "#2a3040", "strokeColor": "#333340", "corners": [0, 0, 0, 0]
|
||
},
|
||
"tab-output": {
|
||
"type": "Rectangle", "parent": "dock-header",
|
||
"left": 52, "top": 570, "width": 78, "height": 24,
|
||
"fillColor": "#1a1e24", "strokeColor": "#c8d8f0", "corners": [4, 4, 4, 4]
|
||
},
|
||
"tab-output-label": {
|
||
"type": "Text", "parent": "tab-output",
|
||
"left": 66, "top": 575, "text": "Output", "fontColor": "#c8d8f0", "fontSize": 13
|
||
},
|
||
"tab-problems": {
|
||
"type": "Text", "parent": "dock-header",
|
||
"left": 148, "top": 575, "text": "Problems 2", "fontColor": "#6a7280", "fontSize": 13
|
||
},
|
||
|
||
"filter-box": {
|
||
"type": "Rectangle", "parent": "dock-header",
|
||
"left": 820, "top": 570, "width": 150, "height": 24,
|
||
"fillColor": "#1a1e24", "strokeColor": "#333340", "corners": [4, 4, 4, 4]
|
||
},
|
||
"filter-label": {
|
||
"type": "Text", "parent": "filter-box",
|
||
"left": 830, "top": 575, "text": "Filter…", "fontColor": "#6a7280", "fontSize": 12
|
||
},
|
||
"source-dd": {
|
||
"type": "Rectangle", "parent": "dock-header",
|
||
"left": 980, "top": 570, "width": 122, "height": 24,
|
||
"fillColor": "#1a1e24", "strokeColor": "#333340", "corners": [4, 4, 4, 4]
|
||
},
|
||
"source-label": {
|
||
"type": "Text", "parent": "source-dd",
|
||
"left": 990, "top": 575, "text": "Source: all ▾", "fontColor": "#c8d0e0", "fontSize": 12
|
||
},
|
||
"level-dd": {
|
||
"type": "Rectangle", "parent": "dock-header",
|
||
"left": 1112, "top": 570, "width": 116, "height": 24,
|
||
"fillColor": "#1a1e24", "strokeColor": "#333340", "corners": [4, 4, 4, 4]
|
||
},
|
||
"level-label": {
|
||
"type": "Text", "parent": "level-dd",
|
||
"left": 1122, "top": 575, "text": "Level: info ▾", "fontColor": "#c8d0e0", "fontSize": 12
|
||
},
|
||
"clear-btn": {
|
||
"type": "Rectangle", "parent": "dock-header",
|
||
"left": 1238, "top": 570, "width": 70, "height": 24,
|
||
"fillColor": "#1a1e24", "strokeColor": "#333340", "corners": [4, 4, 4, 4]
|
||
},
|
||
"clear-label": {
|
||
"type": "Text", "parent": "clear-btn",
|
||
"left": 1250, "top": 575, "text": "Clear", "fontColor": "#6a7280", "fontSize": 12
|
||
},
|
||
|
||
"err-row-bg": {
|
||
"type": "Rectangle", "parent": "dock",
|
||
"left": 42, "top": 690, "width": 1276, "height": 46,
|
||
"fillColor": "#2a1f22", "strokeColor": "#2a1f22", "corners": [0, 0, 0, 0]
|
||
},
|
||
|
||
"l1-t": { "type": "Text", "parent": "dock", "left": 56, "top": 612, "text": "10:42:03.114", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"l1-lv": { "type": "Text", "parent": "dock", "left": 158, "top": 612, "text": "INFO", "fontColor": "#7f8a9c", "fontSize": 12 },
|
||
"l1-src": { "type": "Text", "parent": "dock", "left": 222, "top": 612, "text": "ipc", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"l1-msg": { "type": "Text", "parent": "dock", "left": 320, "top": 612, "text": "IPC server listening at $XDG_RUNTIME_DIR/clide/8f3a…sock", "fontColor": "#c8d0e0", "fontSize": 12 },
|
||
|
||
"l2-t": { "type": "Text", "parent": "dock", "left": 56, "top": 638, "text": "10:42:03.140", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"l2-lv": { "type": "Text", "parent": "dock", "left": 158, "top": 638, "text": "INFO", "fontColor": "#7f8a9c", "fontSize": 12 },
|
||
"l2-src": { "type": "Text", "parent": "dock", "left": 222, "top": 638, "text": "mcp", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"l2-msg": { "type": "Text", "parent": "dock", "left": 320, "top": 638, "text": "MCP/SSE listening at http://127.0.0.1:54310", "fontColor": "#c8d0e0", "fontSize": 12 },
|
||
|
||
"l3-t": { "type": "Text", "parent": "dock", "left": 56, "top": 664, "text": "10:42:04.880", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"l3-lv": { "type": "Text", "parent": "dock", "left": 158, "top": 664, "text": "DEBUG", "fontColor": "#5a6270", "fontSize": 12 },
|
||
"l3-src": { "type": "Text", "parent": "dock", "left": 222, "top": 664, "text": "pane", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"l3-msg": { "type": "Text", "parent": "dock", "left": 320, "top": 664, "text": "spawned pane p1 (tmux clide:main)", "fontColor": "#9aa3b2", "fontSize": 12 },
|
||
|
||
"l4-t": { "type": "Text", "parent": "dock", "left": 56, "top": 696, "text": "10:42:06.330", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"l4-lv": { "type": "Text", "parent": "dock", "left": 158, "top": 696, "text": "ERROR", "fontColor": "#f06c6f", "fontSize": 12 },
|
||
"l4-src": { "type": "Text", "parent": "dock", "left": 222, "top": 696, "text": "extensions", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"l4-msg": { "type": "Text", "parent": "dock", "left": 320, "top": 696, "text": "builtin.foo failed to activate: MissingDep('lua')", "fontColor": "#f0a6a8", "fontSize": 12 },
|
||
"l4-stack": { "type": "Text", "parent": "dock", "left": 320, "top": 716, "text": " at LuaExtension.activate (lua_host.dart:88) › expand for full trace", "fontColor": "#6a7280", "fontSize": 11 },
|
||
|
||
"l5-t": { "type": "Text", "parent": "dock", "left": 56, "top": 744, "text": "10:42:07.002", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"l5-lv": { "type": "Text", "parent": "dock", "left": 158, "top": 744, "text": "WARN", "fontColor": "#d08447", "fontSize": 12 },
|
||
"l5-src": { "type": "Text", "parent": "dock", "left": 222, "top": 744, "text": "pql", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"l5-msg": { "type": "Text", "parent": "dock", "left": 320, "top": 744, "text": "decisions sync: 1 broken ref in architecture.md", "fontColor": "#e0b48c", "fontSize": 12 },
|
||
|
||
"l6-t": { "type": "Text", "parent": "dock", "left": 56, "top": 770, "text": "10:42:07.115", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"l6-lv": { "type": "Text", "parent": "dock", "left": 158, "top": 770, "text": "INFO", "fontColor": "#7f8a9c", "fontSize": 12 },
|
||
"l6-src": { "type": "Text", "parent": "dock", "left": 222, "top": 770, "text": "git", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"l6-msg": { "type": "Text", "parent": "dock", "left": 320, "top": 770, "text": "status: 3 changed, 0 staged", "fontColor": "#c8d0e0", "fontSize": 12 },
|
||
|
||
"follow-pill": {
|
||
"type": "Rectangle", "parent": "dock",
|
||
"left": 1180, "top": 776, "width": 124, "height": 24,
|
||
"fillColor": "#1a1e24", "strokeColor": "#00ab9a", "corners": [12, 12, 12, 12]
|
||
},
|
||
"follow-label": {
|
||
"type": "Text", "parent": "follow-pill",
|
||
"left": 1196, "top": 781, "text": "● Following", "fontColor": "#00ab9a", "fontSize": 12
|
||
},
|
||
|
||
"statusbar": {
|
||
"type": "Rectangle", "parent": "win",
|
||
"left": 40, "top": 814, "width": 1280, "height": 26,
|
||
"fillColor": "#2a3040", "strokeColor": "#333340", "corners": [0, 0, 8, 8]
|
||
},
|
||
"sb-branch": { "type": "Text", "parent": "statusbar", "left": 56, "top": 820, "text": "⎇ main", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"sb-toggle": {
|
||
"type": "Rectangle", "parent": "statusbar",
|
||
"left": 1120, "top": 816, "width": 184, "height": 22,
|
||
"fillColor": "#1a1e24", "strokeColor": "#c8d8f0", "corners": [4, 4, 4, 4]
|
||
},
|
||
"sb-toggle-label": {
|
||
"type": "Text", "parent": "sb-toggle",
|
||
"left": 1132, "top": 820, "text": "▼ Output ⚠ 1 ✕ 1", "fontColor": "#c8d8f0", "fontSize": 12
|
||
},
|
||
|
||
"closed-title": {
|
||
"type": "Text",
|
||
"left": 40, "top": 872, "text": "Collapsed + log clean — same widget now reads as the health indicator (green ✓), chevron flips to ▲:", "fontColor": "#6a7280", "fontSize": 13
|
||
},
|
||
"closed-bar": {
|
||
"type": "Rectangle",
|
||
"left": 40, "top": 898, "width": 1280, "height": 26,
|
||
"fillColor": "#2a3040", "strokeColor": "#333340", "corners": [6, 6, 6, 6]
|
||
},
|
||
"closed-branch": { "type": "Text", "parent": "closed-bar", "left": 56, "top": 904, "text": "⎇ main", "fontColor": "#6a7280", "fontSize": 12 },
|
||
"closed-toggle": {
|
||
"type": "Rectangle", "parent": "closed-bar",
|
||
"left": 1120, "top": 900, "width": 184, "height": 22,
|
||
"fillColor": "#1a1e24", "strokeColor": "#00ab9a", "corners": [4, 4, 4, 4]
|
||
},
|
||
"closed-toggle-label": {
|
||
"type": "Text", "parent": "closed-toggle",
|
||
"left": 1132, "top": 904, "text": "▲ Output ✓ clean", "fontColor": "#00ab9a", "fontSize": 12
|
||
},
|
||
|
||
"ann-dock": {
|
||
"type": "Text",
|
||
"left": 1360, "top": 580,
|
||
"text": "BOTTOM DOCK — read-only output\nOutput (logs) + Problems (diagnostics).\nResizable height; remembers last size.\nResolves Q-28: dock = logs/problems only.\nTerminal is NOT here — it's a first-class\nwork surface in the editor pane (D-49),\ntmux-backed so it never stops on swap.",
|
||
"fontColor": "#c8d8f0", "fontSize": 13
|
||
},
|
||
"ann-toggle": {
|
||
"type": "Text",
|
||
"left": 1360, "top": 760,
|
||
"text": "HEALTH + LOG — ONE WIDGET\nReplaces the old app-status indicator, so\nthe bar doesn't gain a segment. Green ✓\nwhen the log is clean; ⚠/✕ counts when not.\nClick (or ⌘J) toggles the dock; ▲/▼ = state.",
|
||
"fontColor": "#c8d8f0", "fontSize": 13
|
||
},
|
||
"ann-follow": {
|
||
"type": "Text",
|
||
"left": 1360, "top": 690,
|
||
"text": "AUTO-SCROLL\nFollows the tail; scrolling up pauses\nfollow and shows 'Jump to latest ↓'.",
|
||
"fontColor": "#c8d0e0", "fontSize": 13
|
||
}
|
||
},
|
||
"connectors": {
|
||
"c-dock": { "tailId": "ann-dock", "headId": "dock-header", "strokeColor": "#c8d8f0" },
|
||
"c-toggle": { "tailId": "ann-toggle", "headId": "sb-toggle", "strokeColor": "#c8d8f0" },
|
||
"c-follow": { "tailId": "ann-follow", "headId": "follow-pill", "strokeColor": "#c8d8f0" }
|
||
}
|
||
}
|