@jakkrichm/create-nexus-devflow 2.0.25 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +30 -8
  2. package/dist/bin/create-nexus-devflow.d.ts +22 -1
  3. package/dist/bin/create-nexus-devflow.js +658 -11
  4. package/dist/bin/create-nexus-devflow.js.map +1 -1
  5. package/dist/lib/branch-context.d.ts +39 -0
  6. package/dist/lib/branch-context.js +196 -0
  7. package/dist/lib/branch-context.js.map +1 -0
  8. package/dist/lib/code-graph.d.ts +30 -0
  9. package/dist/lib/code-graph.js +209 -0
  10. package/dist/lib/code-graph.js.map +1 -0
  11. package/dist/lib/command-catalog.d.ts +11 -0
  12. package/dist/lib/command-catalog.js +63 -0
  13. package/dist/lib/command-catalog.js.map +1 -0
  14. package/dist/lib/context-slicer.d.ts +31 -0
  15. package/dist/lib/context-slicer.js +234 -0
  16. package/dist/lib/context-slicer.js.map +1 -0
  17. package/dist/lib/current-work.js +97 -49
  18. package/dist/lib/current-work.js.map +1 -1
  19. package/dist/lib/dashboard-page.d.ts +2 -0
  20. package/dist/lib/dashboard-page.js +285 -0
  21. package/dist/lib/dashboard-page.js.map +1 -0
  22. package/dist/lib/dashboard-snapshot.d.ts +62 -0
  23. package/dist/lib/dashboard-snapshot.js +114 -0
  24. package/dist/lib/dashboard-snapshot.js.map +1 -0
  25. package/dist/lib/dashboard.d.ts +2 -0
  26. package/dist/lib/dashboard.js +398 -8
  27. package/dist/lib/dashboard.js.map +1 -1
  28. package/dist/lib/discoveries.d.ts +19 -0
  29. package/dist/lib/discoveries.js +81 -0
  30. package/dist/lib/discoveries.js.map +1 -0
  31. package/dist/lib/doctor.d.ts +26 -0
  32. package/dist/lib/doctor.js +474 -0
  33. package/dist/lib/doctor.js.map +1 -0
  34. package/dist/lib/drift-reconciler.d.ts +38 -0
  35. package/dist/lib/drift-reconciler.js +155 -0
  36. package/dist/lib/drift-reconciler.js.map +1 -0
  37. package/dist/lib/findings.d.ts +26 -2
  38. package/dist/lib/findings.js +165 -1
  39. package/dist/lib/findings.js.map +1 -1
  40. package/dist/lib/gatekeeper.d.ts +20 -0
  41. package/dist/lib/gatekeeper.js +106 -0
  42. package/dist/lib/gatekeeper.js.map +1 -0
  43. package/dist/lib/git-hooks.d.ts +16 -0
  44. package/dist/lib/git-hooks.js +103 -0
  45. package/dist/lib/git-hooks.js.map +1 -0
  46. package/dist/lib/history.d.ts +6 -1
  47. package/dist/lib/history.js +98 -11
  48. package/dist/lib/history.js.map +1 -1
  49. package/dist/lib/ide-extension.d.ts +38 -0
  50. package/dist/lib/ide-extension.js +61 -0
  51. package/dist/lib/ide-extension.js.map +1 -0
  52. package/dist/lib/ideas.d.ts +26 -0
  53. package/dist/lib/ideas.js +179 -0
  54. package/dist/lib/ideas.js.map +1 -0
  55. package/dist/lib/mcp.d.ts +36 -0
  56. package/dist/lib/mcp.js +653 -0
  57. package/dist/lib/mcp.js.map +1 -0
  58. package/dist/lib/status.d.ts +3 -1
  59. package/dist/lib/status.js +60 -6
  60. package/dist/lib/status.js.map +1 -1
  61. package/dist/lib/swarm-orchestrator.d.ts +31 -0
  62. package/dist/lib/swarm-orchestrator.js +134 -0
  63. package/dist/lib/swarm-orchestrator.js.map +1 -0
  64. package/dist/lib/update.js +2 -2
  65. package/dist/lib/update.js.map +1 -1
  66. package/dist/lib/version-check.d.ts +22 -0
  67. package/dist/lib/version-check.js +59 -0
  68. package/dist/lib/version-check.js.map +1 -0
  69. package/dist/lib/webview-studio.d.ts +8 -0
  70. package/dist/lib/webview-studio.js +463 -0
  71. package/dist/lib/webview-studio.js.map +1 -0
  72. package/dist/lib/workflow-state.d.ts +23 -0
  73. package/dist/lib/workflow-state.js +128 -0
  74. package/dist/lib/workflow-state.js.map +1 -0
  75. package/dist/scripts/prepare-template.js +3 -3
  76. package/package.json +1 -1
  77. package/template/{.claude/skills/00-discover → .agents/skills/00-explore}/SKILL.md +10 -10
  78. package/template/.agents/skills/10-define/SKILL.md +4 -4
  79. package/template/.agents/skills/20-spec/SKILL.md +2 -3
  80. package/template/.agents/skills/30-plan/SKILL.md +2 -3
  81. package/template/.agents/skills/40-execute/SKILL.md +2 -2
  82. package/template/.agents/skills/50-verify/SKILL.md +2 -2
  83. package/template/.agents/skills/60-report/SKILL.md +3 -3
  84. package/template/{.claude/skills/70-release → .agents/skills/70-deliver}/SKILL.md +7 -13
  85. package/template/.agents/skills/adopt/SKILL.md +136 -73
  86. package/template/.agents/skills/audit/SKILL.md +275 -0
  87. package/template/.agents/skills/autopilot/SKILL.md +228 -147
  88. package/template/.agents/skills/brainstorm/SKILL.md +3 -3
  89. package/template/.agents/skills/brief/SKILL.md +74 -51
  90. package/template/.agents/skills/check/SKILL.md +96 -76
  91. package/template/.agents/skills/ci/SKILL.md +140 -61
  92. package/template/.agents/skills/complete/SKILL.md +156 -101
  93. package/template/.agents/skills/convert-any-to-md/SKILL.md +2 -2
  94. package/template/.agents/skills/debug/SKILL.md +124 -49
  95. package/template/.agents/skills/devflow/SKILL.md +16 -10
  96. package/template/.agents/skills/discovery/SKILL.md +166 -0
  97. package/template/.agents/skills/doctor/SKILL.md +188 -72
  98. package/template/.agents/skills/feature/SKILL.md +195 -102
  99. package/template/.agents/skills/fix/SKILL.md +41 -90
  100. package/template/.agents/skills/idea/SKILL.md +3 -3
  101. package/template/.agents/skills/implement/SKILL.md +189 -46
  102. package/template/.agents/skills/onboard/SKILL.md +215 -85
  103. package/template/.agents/skills/overview/SKILL.md +51 -85
  104. package/template/.agents/skills/prototype/SKILL.md +82 -27
  105. package/template/.agents/skills/release/SKILL.md +160 -0
  106. package/template/.agents/skills/report-html/SKILL.md +2 -2
  107. package/template/.agents/skills/rollback/SKILL.md +123 -77
  108. package/template/.agents/skills/status/SKILL.md +109 -0
  109. package/template/.agents/skills/test/SKILL.md +2 -2
  110. package/template/.agents/skills/tests/SKILL.md +126 -0
  111. package/template/.agents/skills/try/SKILL.md +77 -65
  112. package/template/{.agents/skills/00-discover → .claude/skills/00-explore}/SKILL.md +9 -9
  113. package/template/.claude/skills/10-define/SKILL.md +2 -2
  114. package/template/.claude/skills/20-spec/SKILL.md +1 -1
  115. package/template/.claude/skills/30-plan/SKILL.md +1 -1
  116. package/template/.claude/skills/60-report/SKILL.md +1 -1
  117. package/template/{.agents/skills/70-release → .claude/skills/70-deliver}/SKILL.md +6 -12
  118. package/template/.claude/skills/adopt/SKILL.md +2 -2
  119. package/template/.claude/skills/audit/SKILL.md +141 -0
  120. package/template/.claude/skills/autopilot/SKILL.md +74 -52
  121. package/template/.claude/skills/brief/SKILL.md +67 -45
  122. package/template/.claude/skills/ci/SKILL.md +1 -1
  123. package/template/.claude/skills/complete/SKILL.md +1 -1
  124. package/template/.claude/skills/debug/SKILL.md +1 -1
  125. package/template/.claude/skills/devflow/SKILL.md +7 -7
  126. package/template/.claude/skills/discovery/SKILL.md +145 -0
  127. package/template/.claude/skills/doctor/SKILL.md +1 -1
  128. package/template/.claude/skills/feature/SKILL.md +67 -18
  129. package/template/.claude/skills/fix/SKILL.md +1 -1
  130. package/template/.claude/skills/idea/SKILL.md +2 -2
  131. package/template/.claude/skills/onboard/SKILL.md +3 -3
  132. package/template/.claude/skills/overview/SKILL.md +39 -88
  133. package/template/.claude/skills/prototype/SKILL.md +1 -1
  134. package/template/.claude/skills/release/SKILL.md +171 -0
  135. package/template/.claude/skills/rollback/SKILL.md +2 -2
  136. package/template/AGENTS.md +5 -5
  137. package/template/devflow/build-plan.md +62 -0
  138. package/template/devflow/context/ai-interaction.md +4 -4
  139. package/template/devflow/context/coding-standards.md +3 -3
  140. package/template/devflow/context/current-stage.md +1 -1
  141. package/template/devflow/context/findings.md +1 -1
  142. package/template/devflow/history/HISTORY.md +2 -2
  143. package/template/devflow/project-plan.md +79 -0
  144. package/template/devflow/reference/mockup.html +476 -0
  145. package/template/devflow/reference/project-overview-template.md +39 -0
  146. package/template/devflow/reference/running-id-contract.md +24 -2
  147. package/template/devflow/reference/studio.html +504 -0
@@ -0,0 +1,476 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Nexus-DevFlow — Blueprint Dashboard</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
10
+ <style>
11
+ :root{
12
+ --font-display:'Space Grotesk',sans-serif;
13
+ --font-sans:'Inter',sans-serif;
14
+ --font-mono:'IBM Plex Mono',monospace;
15
+ --bg:#0a2540; --bg-deep:#071b30; --panel:rgba(255,255,255,.035);
16
+ --ink:#eaf3ff; --ink-soft:#b7d3ef; --ink-muted:#6f93b8;
17
+ --line:rgba(191,224,255,.16); --line-strong:rgba(191,224,255,.34);
18
+ --cyan:#7dd8ff; --cyan-dim:#3f7fa8;
19
+ --gold:#f2c14e; --gold-soft:rgba(242,193,78,.14);
20
+ --mint:#6fe3b4; --mint-soft:rgba(111,227,180,.14);
21
+ --redline:#ff6b5b; --redline-soft:rgba(255,107,91,.14);
22
+ --violet:#b39bff; --violet-soft:rgba(179,155,255,.14);
23
+ }
24
+ *{box-sizing:border-box}
25
+ body{
26
+ margin:0;min-height:100vh;background:var(--bg);color:var(--ink);
27
+ font-family:var(--font-sans);-webkit-font-smoothing:antialiased;
28
+ background-image:
29
+ linear-gradient(rgba(125,216,255,.07) 1px,transparent 1px),
30
+ linear-gradient(90deg,rgba(125,216,255,.07) 1px,transparent 1px),
31
+ radial-gradient(circle at 8% -6%,rgba(125,216,255,.14),transparent 40rem);
32
+ background-size:34px 34px,34px 34px,auto;
33
+ }
34
+ .sheet{width:min(1180px,calc(100% - 40px));margin:0 auto;padding:34px 0 70px;position:relative}
35
+ .crop{position:fixed;width:18px;height:18px;border-color:var(--line-strong);opacity:.7;pointer-events:none}
36
+ .crop.tl{top:14px;left:14px;border-top:1px solid;border-left:1px solid}
37
+ .crop.tr{top:14px;right:14px;border-top:1px solid;border-right:1px solid}
38
+ .crop.bl{bottom:14px;left:14px;border-bottom:1px solid;border-left:1px solid}
39
+ .crop.br{bottom:14px;right:14px;border-bottom:1px solid;border-right:1px solid}
40
+
41
+ .titleblock{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding-bottom:18px;margin-bottom:10px;border-bottom:1px solid var(--line-strong);flex-wrap:wrap}
42
+ .dwg-no{font:600 11px/1 var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--cyan);display:flex;align-items:center;gap:8px;margin-bottom:12px}
43
+ .dwg-no::before{content:"";width:20px;height:1px;background:var(--cyan)}
44
+ .titleblock h1{margin:0 0 6px;font-family:var(--font-display);font-weight:700;font-size:clamp(30px,4vw,46px);letter-spacing:-.02em}
45
+ .path{color:var(--ink-muted);font:12px/1.6 var(--font-mono)}
46
+ .badge-row{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
47
+ .badge{padding:3px 9px;border:1px solid var(--line-strong);border-radius:3px;font:600 10px/1.6 var(--font-mono);letter-spacing:.04em;color:var(--ink-muted)}
48
+ .badge.mint{border-color:rgba(111,227,180,.4);color:var(--mint);background:var(--mint-soft)}
49
+ .badge.violet{border-color:rgba(179,155,255,.4);color:var(--violet);background:var(--violet-soft)}
50
+ .tb-table{display:grid;grid-template-columns:auto auto;gap:3px 18px;font:11px/1.5 var(--font-mono);text-align:right}
51
+ .tb-table dt{color:var(--ink-muted);letter-spacing:.06em;text-transform:uppercase;text-align:left}
52
+ .tb-table dd{margin:0;color:var(--ink-soft)}
53
+ .live-wrap{display:flex;align-items:center;gap:8px;margin-bottom:26px}
54
+ .live-dot{position:relative;width:7px;height:7px;border-radius:50%;background:var(--mint)}
55
+ .live-dot::after{content:"";position:absolute;inset:-4px;border-radius:50%;background:var(--mint);opacity:0;animation:pulseRing 2.2s ease-out infinite}
56
+ @keyframes pulseRing{0%{transform:scale(.5);opacity:.5}100%{transform:scale(2.4);opacity:0}}
57
+
58
+ /* ---- dual-track pipeline ---- */
59
+ .pipeline{margin-bottom:26px;padding:22px 24px 20px;border:1px solid var(--line);border-radius:4px;background:var(--panel)}
60
+ .pipeline-head{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:18px;flex-wrap:wrap}
61
+ .pipeline-title{font:600 11px/1 var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--cyan)}
62
+ .track-tabs{display:flex;gap:6px}
63
+ .tab{padding:6px 12px;border:1px solid var(--line-strong);border-radius:99px;background:transparent;color:var(--ink-muted);font:600 10.5px var(--font-mono);letter-spacing:.04em;text-transform:uppercase;cursor:pointer;transition:.15s ease}
64
+ .tab:hover{border-color:var(--cyan);color:var(--cyan)}
65
+ .tab.on{background:var(--cyan);color:var(--bg-deep);border-color:var(--cyan)}
66
+ .track-view{display:none}
67
+ .track-view.on{display:block}
68
+ .stepper{display:flex;gap:0;overflow-x:auto;padding-bottom:4px}
69
+ .step{flex:1 1 0;min-width:100px;position:relative;padding:0 10px 0 0}
70
+ .step:last-child{padding-right:0}
71
+ .step-conn{position:absolute;top:9px;left:calc(50% + 10px);right:calc(-50% + 10px);height:1px;background:var(--line-strong)}
72
+ .step:last-child .step-conn{display:none}
73
+ .step.done .step-conn{background:var(--mint)}
74
+ .step-dot{width:19px;height:19px;border-radius:50%;border:2px solid var(--line-strong);display:flex;align-items:center;justify-content:center;font:700 9px var(--font-mono);color:var(--ink-muted);background:var(--bg-deep);position:relative;z-index:1}
75
+ .step.done .step-dot{border-color:var(--mint);color:var(--mint)}
76
+ .step.active .step-dot{border-color:var(--gold);color:var(--gold);box-shadow:0 0 0 4px rgba(242,193,78,.18)}
77
+ .step-name{margin-top:9px;font:600 10.5px/1.3 var(--font-mono);color:var(--ink-soft);letter-spacing:.02em}
78
+ .step.active .step-name{color:var(--gold)}
79
+ .step.done .step-name{color:var(--mint)}
80
+ .step-cmd{margin-top:3px;font:10px var(--font-mono);color:var(--ink-muted)}
81
+ .track-note{margin-top:14px;color:var(--ink-muted);font:11.5px/1.6 var(--font-mono);padding-top:12px;border-top:1px dashed var(--line)}
82
+ .track-note b{color:var(--ink-soft)}
83
+
84
+ .stats{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:4px;overflow:hidden;margin-bottom:26px}
85
+ .stat{background:var(--bg-deep);padding:14px 16px}
86
+ .stat-num{font:700 24px/1 var(--font-display);color:var(--ink);letter-spacing:-.02em}
87
+ .stat-num.mint{color:var(--mint)} .stat-num.gold{color:var(--gold)} .stat-num.redline{color:var(--redline)} .stat-num.violet{color:var(--violet)}
88
+ .stat-label{margin-top:4px;color:var(--ink-muted);font:10px var(--font-mono);letter-spacing:.08em;text-transform:uppercase}
89
+
90
+ .grid{display:grid;grid-template-columns:repeat(12,1fr);gap:20px;margin-bottom:20px}
91
+ .card{position:relative;grid-column:span 4;min-width:0;padding:clamp(20px,2.4vw,28px);border:1px solid var(--line);border-radius:4px;background:var(--panel);opacity:0;transform:translateY(8px);animation:cardIn .4s cubic-bezier(.4,0,.2,1) forwards}
92
+ .sheet > .card{margin-bottom:20px}
93
+ .card::before,.card::after{content:"";position:absolute;width:8px;height:8px;border-color:var(--line-strong);opacity:.8}
94
+ .card::before{top:-1px;left:-1px;border-top:1px solid;border-left:1px solid}
95
+ .card::after{bottom:-1px;right:-1px;border-bottom:1px solid;border-right:1px solid}
96
+ .card.wide{grid-column:span 8} .card.full{grid-column:1/-1}
97
+ @keyframes cardIn{to{opacity:1;transform:translateY(0)}}
98
+ .card-head{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:16px;flex-wrap:wrap}
99
+ .label{color:var(--cyan);font:600 10px/1 var(--font-mono);letter-spacing:.12em;text-transform:uppercase}
100
+ .value{font:700 18px/1.3 var(--font-display);letter-spacing:-.01em}
101
+ .muted{color:var(--ink-muted);font-size:12.5px;line-height:1.6}
102
+ .tag{padding:4px 9px;border:1px solid var(--line-strong);border-radius:3px;color:var(--ink-muted);background:rgba(255,255,255,.03);font:600 10px/1 var(--font-mono);letter-spacing:.05em;text-transform:uppercase;display:inline-block}
103
+ .tag.ok,.tag.ready,.tag.active{border-color:rgba(111,227,180,.4);background:var(--mint-soft);color:var(--mint)}
104
+ .tag.warning,.tag.blocked{border-color:rgba(255,107,91,.4);background:var(--redline-soft);color:var(--redline)}
105
+ .tag.progress{border-color:rgba(242,193,78,.4);background:var(--gold-soft);color:var(--gold)}
106
+ .tag.track{border-color:rgba(179,155,255,.4);background:var(--violet-soft);color:var(--violet)}
107
+ .facts{display:grid;gap:10px}
108
+ .fact{display:flex;justify-content:space-between;gap:16px;padding-bottom:9px;border-bottom:1px dashed var(--line)}
109
+ .fact:last-child{border-bottom:0;padding-bottom:0}
110
+ .fact span:first-child{color:var(--ink-muted);font-size:11.5px}
111
+ .fact span:last-child{color:var(--ink-soft);font:11.5px var(--font-mono);text-align:right}
112
+ .progress{height:6px;margin:14px 0 9px;border-radius:99px;background:rgba(255,255,255,.06);overflow:hidden}
113
+ .progress-bar{display:block;height:100%;border-radius:inherit;background:var(--gold);box-shadow:0 0 10px rgba(242,193,78,.5)}
114
+ ul{margin:0;padding:0;list-style:none}
115
+ li{padding:9px 0;border-bottom:1px dashed var(--line);color:var(--ink-soft);font-size:12.5px;line-height:1.55}
116
+ li:last-child{border-bottom:0}
117
+ li.empty{color:var(--ink-muted)}
118
+
119
+ .sev-row{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}
120
+ .sev{flex:1;min-width:64px;text-align:center;padding:8px 6px;border:1px solid var(--line);border-radius:3px;background:rgba(255,255,255,.02)}
121
+ .sev-count{font:700 17px var(--font-display)}
122
+ .sev-label{font:9px var(--font-mono);color:var(--ink-muted);letter-spacing:.06em;margin-top:2px}
123
+ .sev.p0 .sev-count{color:var(--redline)} .sev.p1 .sev-count{color:var(--gold)}
124
+ .sev.p2 .sev-count{color:var(--cyan)} .sev.p3 .sev-count{color:var(--ink-muted)}
125
+
126
+ .doctor-item{display:flex;align-items:flex-start;gap:9px;padding:9px 0;border-bottom:1px dashed var(--line);font-size:12.5px;color:var(--ink-soft)}
127
+ .doctor-item:last-child{border-bottom:0}
128
+ .dchk{flex:0 0 auto;width:15px;height:15px;border-radius:3px;display:flex;align-items:center;justify-content:center;font:700 10px var(--font-mono);margin-top:1px}
129
+ .dchk.ok{background:var(--mint-soft);color:var(--mint)} .dchk.warn{background:var(--redline-soft);color:var(--redline)}
130
+
131
+ .disc-item{padding:9px 0;border-bottom:1px dashed var(--line)}
132
+ .disc-item:last-child{border-bottom:0}
133
+ .disc-id{font:700 11px var(--font-mono);color:var(--violet)}
134
+ .disc-title{color:var(--ink-soft);font-size:12.5px;margin-top:2px}
135
+ .disc-status{font:10px var(--font-mono);color:var(--ink-muted);margin-top:3px;text-transform:uppercase;letter-spacing:.05em}
136
+
137
+ .cmd-row{display:flex;flex-wrap:wrap;gap:10px}
138
+ .cmdp{position:relative;padding:8px 13px;border:1px solid var(--line-strong);border-radius:3px;background:rgba(255,255,255,.02);color:var(--ink-soft);font:11px var(--font-mono);cursor:pointer;transition:.15s ease;white-space:nowrap}
139
+ .cmdp:hover{border-color:var(--cyan);color:var(--cyan);background:rgba(125,216,255,.06)}
140
+ .cmdp b{color:var(--cyan);font-weight:700}
141
+ .cmdp::after{content:attr(data-tip);position:absolute;z-index:20;left:50%;bottom:calc(100% + 10px);width:max-content;max-width:min(280px,80vw);padding:9px 11px;border:1px solid var(--line-strong);border-radius:3px;background:#041525;color:var(--ink-soft);font:10.5px/1.5 var(--font-mono);white-space:normal;text-align:left;box-shadow:0 10px 28px rgba(0,0,0,.35);opacity:0;visibility:hidden;transform:translate(-50%,5px);transition:.15s ease;pointer-events:none}
142
+ .cmdp:hover::after,.cmdp:focus-visible::after{opacity:1;visibility:visible;transform:translate(-50%,0)}
143
+
144
+ .adapters{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
145
+ .adapter{padding:14px;border:1px solid var(--line);border-radius:3px;background:rgba(255,255,255,.02)}
146
+ .adapter-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
147
+ .adapter-badge{width:26px;height:22px;border-radius:3px;display:flex;align-items:center;justify-content:center;font:700 9px var(--font-mono);color:var(--bg-deep);flex:0 0 auto}
148
+ .adapter-name{font:600 12px var(--font-mono);color:var(--ink-soft)}
149
+ .adapter-path{font:10px var(--font-mono);color:var(--ink-muted);margin:2px 0 6px}
150
+ .adapter-status{font:11px var(--font-mono);color:var(--ink-muted);display:flex;align-items:center;gap:6px}
151
+ .dot{width:6px;height:6px;border-radius:50%}
152
+ .dot.mint{background:var(--mint)} .dot.redline{background:var(--redline)}
153
+
154
+ .filters{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}
155
+ .chip{padding:6px 12px;border:1px solid var(--line-strong);border-radius:99px;background:transparent;color:var(--ink-muted);font:600 10.5px var(--font-mono);letter-spacing:.04em;text-transform:uppercase;cursor:pointer;transition:.15s ease}
156
+ .chip:hover{border-color:var(--cyan);color:var(--cyan)}
157
+ .chip.on{background:var(--cyan);color:var(--bg-deep);border-color:var(--cyan)}
158
+ .idea{display:grid;grid-template-columns:1fr auto;gap:8px 14px;padding:14px 0;border-bottom:1px dashed var(--line);align-items:start}
159
+ .idea:last-child{border-bottom:0}
160
+ .idea-id{font:700 11px var(--font-mono);color:var(--cyan);letter-spacing:.04em}
161
+ .idea-title{font:600 13.5px var(--font-sans);color:var(--ink);margin-top:3px;line-height:1.4}
162
+ .idea-desc{color:var(--ink-muted);font-size:12px;line-height:1.55;margin-top:5px}
163
+ .idea-feas{margin-top:6px;font:11px var(--font-mono);color:var(--ink-muted)}
164
+ .idea-feas b{color:var(--ink-soft)}
165
+ .idea-feas.high{color:var(--mint)} .idea-feas.med{color:var(--gold)}
166
+ .cmd-chip{align-self:start;padding:5px 10px;border:1px solid var(--line-strong);border-radius:3px;background:rgba(255,255,255,.03);color:var(--cyan);font:600 11px var(--font-mono);cursor:pointer;white-space:nowrap;transition:.15s ease}
167
+ .cmd-chip:hover{background:var(--cyan);color:var(--bg-deep)}
168
+ .more-note{margin-top:12px;color:var(--ink-muted);font:11px var(--font-mono);text-align:center;padding-top:10px;border-top:1px dashed var(--line)}
169
+
170
+ .hist-item{display:flex;gap:12px;padding:10px 0;border-bottom:1px dashed var(--line);align-items:baseline}
171
+ .hist-item:last-child{border-bottom:0}
172
+ .hist-bar{width:3px;align-self:stretch;border-radius:2px;flex:0 0 auto}
173
+ .hist-bar.feature{background:var(--cyan)} .hist-bar.fix{background:var(--gold)} .hist-bar.rollback{background:var(--redline)}
174
+ .hist-type{font:700 10px var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted);flex:0 0 76px}
175
+ .hist-title{color:var(--ink-soft);font-size:12.5px;line-height:1.5}
176
+
177
+ .ticket{background:var(--bg-deep);border:1px solid var(--line-strong)}
178
+ .ticket-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
179
+ .copy-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:3px;background:transparent;color:var(--cyan);border:1px solid var(--cyan-dim);font:600 11px var(--font-mono);cursor:pointer;transition:.15s ease}
180
+ .copy-btn:hover{background:var(--cyan);color:var(--bg-deep)}
181
+ .copy-btn.copied{background:var(--mint);color:var(--bg-deep);border-color:var(--mint)}
182
+ .command{font:700 clamp(20px,3vw,28px)/1.3 var(--font-mono);color:var(--gold);margin:4px 0 8px}
183
+ .ticket .muted{font-size:13px;color:var(--ink-soft)}
184
+
185
+ footer{margin-top:26px;padding-top:16px;border-top:1px solid var(--line);display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;color:var(--ink-muted);font:11px var(--font-mono)}
186
+ footer a{color:var(--cyan);text-decoration:none}
187
+
188
+ @media (max-width:920px){
189
+ .grid .card,.grid .card.wide{grid-column:1/-1}
190
+ .stats{grid-template-columns:repeat(2,1fr)}
191
+ .adapters{grid-template-columns:repeat(2,1fr)}
192
+ .titleblock{flex-direction:column;align-items:flex-start}
193
+ .tb-table{text-align:left}
194
+ .stepper{gap:14px}
195
+ }
196
+ @media (max-width:560px){
197
+ .sheet{width:min(100% - 24px,1180px);padding-top:22px}
198
+ .grid{gap:14px;margin-bottom:14px}
199
+ .card{padding:18px}
200
+ .sheet > .card{margin-bottom:14px}
201
+ .cmdp::after{position:fixed;left:12px;right:12px;bottom:18px;width:auto;max-width:none;transform:translateY(5px)}
202
+ .cmdp:hover::after,.cmdp:focus-visible::after{transform:translateY(0)}
203
+ }
204
+ @media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
205
+ </style>
206
+ </head>
207
+ <body>
208
+ <span class="crop tl"></span><span class="crop tr"></span><span class="crop bl"></span><span class="crop br"></span>
209
+
210
+ <main class="sheet">
211
+
212
+ <header class="titleblock">
213
+ <div>
214
+ <div class="dwg-no">JAKKRICH / NEXUS-DEVFLOW · WORKSPACE STATUS</div>
215
+ <h1>nexus-devflow</h1>
216
+ <div class="path">The 3-Pillars &amp; Dual-Track Agentic Workflow Layer</div>
217
+ <div class="badge-row">
218
+ <span class="badge mint">npm v2.0.25</span>
219
+ <span class="badge mint">Health: OK</span>
220
+ <span class="badge">MIT license</span>
221
+ <span class="badge violet">Track: Idle</span>
222
+ </div>
223
+ </div>
224
+ <dl class="tb-table">
225
+ <dt>Package</dt><dd>@jakkrichm/create-nexus-devflow</dd>
226
+ <dt>Adapters</dt><dd>4 detected</dd>
227
+ <dt>Branch</dt><dd>main</dd>
228
+ <dt>Revision</dt><dd>2026-08-22</dd>
229
+ </dl>
230
+ </header>
231
+ <div class="live-wrap"><span class="live-dot"></span><span class="muted" style="font:11px var(--font-mono)">Status snapshot · health OK · npx @jakkrichm/create-nexus-devflow status</span></div>
232
+
233
+ <!-- Dual-Track Delivery Model -->
234
+ <section class="pipeline">
235
+ <div class="pipeline-head">
236
+ <span class="pipeline-title">Dual-Track Delivery Model</span>
237
+ <div class="track-tabs" id="track-tabs">
238
+ <button class="tab on" data-t="fast">🏎️ Fast-Track · 4 steps</button>
239
+ <button class="tab" data-t="deep">🏗️ Deep-Track · 8 stages</button>
240
+ </div>
241
+ </div>
242
+
243
+ <div class="track-view on" id="view-fast">
244
+ <div class="stepper">
245
+ <div class="step"><span class="step-conn"></span><span class="step-dot">1</span><div class="step-name">feature / fix</div><div class="step-cmd">/feature · /fix</div></div>
246
+ <div class="step"><span class="step-conn"></span><span class="step-dot">2</span><div class="step-name">implement</div><div class="step-cmd">/implement</div></div>
247
+ <div class="step"><span class="step-conn"></span><span class="step-dot">3</span><div class="step-name">check</div><div class="step-cmd">/check</div></div>
248
+ <div class="step"><span class="step-dot">4</span><div class="step-name">complete</div><div class="step-cmd">/complete</div></div>
249
+ </div>
250
+ <div class="track-note"><b>Idle:</b> no active Fast-Track run. Use <code>/feature</code> or <code>/fix</code> to create the Single Living Spec in <code>devflow/context/current-feature.md</code>. Recommended for about 85% of daily engineering work.</div>
251
+ </div>
252
+
253
+ <div class="track-view" id="view-deep">
254
+ <div class="stepper">
255
+ <div class="step"><span class="step-conn"></span><span class="step-dot">00</span><div class="step-name">00-explore</div></div>
256
+ <div class="step"><span class="step-conn"></span><span class="step-dot">10</span><div class="step-name">10-define</div></div>
257
+ <div class="step"><span class="step-conn"></span><span class="step-dot">20</span><div class="step-name">20-spec</div></div>
258
+ <div class="step"><span class="step-conn"></span><span class="step-dot">30</span><div class="step-name">30-plan</div></div>
259
+ <div class="step"><span class="step-conn"></span><span class="step-dot">40</span><div class="step-name">40-execute</div></div>
260
+ <div class="step"><span class="step-conn"></span><span class="step-dot">50</span><div class="step-name">50-verify</div></div>
261
+ <div class="step"><span class="step-conn"></span><span class="step-dot">60</span><div class="step-name">60-report</div></div>
262
+ <div class="step"><span class="step-dot">70</span><div class="step-name">70-deliver</div></div>
263
+ </div>
264
+ <div class="track-note"><b>Reference model:</b> no active Deep-Track run. Recommended for architectural epics, database migrations, security audits, and multi-agent coordination. Progress lives in <code>devflow/context/current-run/</code> and is archived on <code>/70-deliver</code>.</div>
265
+ </div>
266
+ </section>
267
+
268
+ <section class="card full ticket" style="animation-delay:.01s">
269
+ <div class="ticket-head">
270
+ <span class="label">Next Action</span>
271
+ <button class="copy-btn" id="copy-btn">
272
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>
273
+ <span id="copy-text">Copy command</span>
274
+ </button>
275
+ </div>
276
+ <div class="command" id="next-command">/feature</div>
277
+ <div class="muted">Workspace is idle and ready for new work. Start a Fast-Track feature, or use <code>/00-explore</code> when the scope needs deeper discovery first.</div>
278
+ </section>
279
+
280
+ <section class="stats">
281
+ <div class="stat"><div class="stat-num mint">35</div><div class="stat-label">Runs released</div></div>
282
+ <div class="stat"><div class="stat-num redline">0</div><div class="stat-label">Active findings</div></div>
283
+ <div class="stat"><div class="stat-num gold">4</div><div class="stat-label">Pending ideas</div></div>
284
+ <div class="stat"><div class="stat-num">4/4</div><div class="stat-label">Adapters synced</div></div>
285
+ <div class="stat"><div class="stat-num violet">Idle</div><div class="stat-label">Current state</div></div>
286
+ </section>
287
+
288
+ <section class="grid">
289
+ <article class="card" style="animation-delay:.02s">
290
+ <div class="card-head"><span class="label">Nexus-DevFlow</span><span class="tag ok">up to date</span></div>
291
+ <div class="facts">
292
+ <div class="fact"><span>Installed / latest</span><span>v2.0.25 / v2.0.25</span></div>
293
+ <div class="fact"><span>Adapters</span><span>antigravity, codex, claude, copilot</span></div>
294
+ <div class="fact"><span>Architecture</span><span>3-Pillars + Dual-Track</span></div>
295
+ </div>
296
+ </article>
297
+
298
+ <article class="card wide" style="animation-delay:.05s">
299
+ <div class="card-head">
300
+ <span class="label">Current Work</span>
301
+ <span style="display:flex;gap:6px"><span class="tag track">no active track</span><span class="tag ready">ready</span></span>
302
+ </div>
303
+ <div class="value">No active delivery run</div>
304
+ <div class="progress"><span class="progress-bar" style="width:100%;background:var(--mint)"></span></div>
305
+ <div class="muted">Last completed: 039-dynamic-overview-compiler · 2026-08-22</div>
306
+ </article>
307
+
308
+ <article class="card" style="animation-delay:.08s">
309
+ <div class="card-head"><span class="label">Git Status</span><span class="tag warning">1 changed</span></div>
310
+ <div class="facts">
311
+ <div class="fact"><span>Branch</span><span>main</span></div>
312
+ <div class="fact"><span>Working Tree</span><span>1 changed file</span></div>
313
+ <div class="fact"><span>Upstream</span><span>origin/main</span></div>
314
+ </div>
315
+ </article>
316
+
317
+ <article class="card" style="animation-delay:.11s">
318
+ <div class="card-head"><span class="label">Findings Ledger</span><span class="value">0</span></div>
319
+ <div class="sev-row">
320
+ <div class="sev p0"><div class="sev-count">0</div><div class="sev-label">P0</div></div>
321
+ <div class="sev p1"><div class="sev-count">0</div><div class="sev-label">P1</div></div>
322
+ <div class="sev p2"><div class="sev-count">0</div><div class="sev-label">P2</div></div>
323
+ <div class="sev p3"><div class="sev-count">0</div><div class="sev-label">P3</div></div>
324
+ </div>
325
+ <ul><li class="empty">No blocking findings</li></ul>
326
+ </article>
327
+
328
+ <article class="card" style="animation-delay:.14s">
329
+ <div class="card-head"><span class="label">Completion</span><span class="tag ready">idle</span></div>
330
+ <ul><li>No active run to complete</li></ul>
331
+ </article>
332
+
333
+ <article class="card" style="animation-delay:.17s">
334
+ <div class="card-head"><span class="label">Warnings</span><span class="value">0</span></div>
335
+ <ul><li class="empty">No status warnings</li></ul>
336
+ </article>
337
+ </section>
338
+
339
+ <!-- new: doctor + discoveries (extra amenities) -->
340
+ <section class="grid">
341
+ <article class="card wide" style="animation-delay:.19s">
342
+ <div class="card-head"><span class="label">Doctor · Health Check</span><span class="muted">npx create-nexus-devflow doctor</span></div>
343
+ <div class="doctor-item"><span class="dchk ok">✓</span><span>Adapters detected — .agents/skills &amp; .claude/skills present and in sync</span></div>
344
+ <div class="doctor-item"><span class="dchk ok">✓</span><span>package.json scripts wired (devflow, doctor, status)</span></div>
345
+ <div class="doctor-item"><span class="dchk ok">✓</span><span>Installed version matches npm registry latest: <code>2.0.25</code></span></div>
346
+ <div class="doctor-item"><span class="dchk ok">✓</span><span>No orphaned devflow/runs/ legacy folders (2.0 layout confirmed)</span></div>
347
+ </article>
348
+
349
+ <article class="card" style="animation-delay:.22s">
350
+ <div class="card-head"><span class="label">Discoveries</span><span class="value">0</span></div>
351
+ <div class="disc-item">
352
+ <div class="disc-id">NO ACTIVE DISCOVERY</div>
353
+ <div class="disc-title">Use /00-explore to investigate a request before delivery commitment.</div>
354
+ <div class="disc-status" style="color:var(--mint)">workspace ready</div>
355
+ </div>
356
+ </article>
357
+ </section>
358
+
359
+ <!-- new: quick command palette -->
360
+ <section class="card full" style="animation-delay:.24s">
361
+ <div class="card-head"><span class="label">Quick Commands</span><span class="muted">click to copy</span></div>
362
+ <div class="cmd-row" id="cmd-palette">
363
+ <button class="cmdp" data-cmd="devflow" data-tip="Inspect workflow state and route your intent to the right next command."><b>devflow</b></button>
364
+ <button class="cmdp" data-cmd="doctor" data-tip="Run a read-only health check for setup, scripts, adapters, and workflow drift.">doctor</button>
365
+ <button class="cmdp" data-cmd="overview" data-tip="Compile plans and repository context into the living project-overview.md.">overview</button>
366
+ <button class="cmdp" data-cmd="idea" data-tip="Capture and enrich a new idea in the centralized Idea Inbox.">idea</button>
367
+ <button class="cmdp" data-cmd="debug" data-tip="Investigate a bug and establish its root cause before implementation.">debug</button>
368
+ <button class="cmdp" data-cmd="brief" data-tip="Preview scope, dependencies, risks, and likely size before creating a run.">brief</button>
369
+ <button class="cmdp" data-cmd="onboard" data-tip="Detect the stack and establish baseline context for a fresh project.">onboard</button>
370
+ <button class="cmdp" data-cmd="adopt" data-tip="Survey an existing codebase and bootstrap DevFlow context for it.">adopt</button>
371
+ <button class="cmdp" data-cmd="try" data-tip="Guide a human through manual QA: where to go, what to do, and what to expect.">try</button>
372
+ <button class="cmdp" data-cmd="rollback" data-tip="Plan a safe reversal with dependency and regression risk analysis.">rollback</button>
373
+ <button class="cmdp" data-cmd="ci" data-tip="Set up the GitHub Actions verification workflow for the project.">ci</button>
374
+ <button class="cmdp" data-cmd="test" data-tip="Inspect test suites and verify the test runner configuration.">test</button>
375
+ <button class="cmdp" data-cmd="autopilot" data-tip="Run a bounded Fast-Track or Deep-Track execution loop with quality gates.">autopilot</button>
376
+ <button class="cmdp" data-cmd="prototype" data-tip="Create a throwaway static HTML/CSS mockup to settle UI direction before build.">prototype</button>
377
+ <button class="cmdp" data-cmd="report-html" data-tip="Generate the optional standalone interactive HTML delivery report.">report-html</button>
378
+ </div>
379
+ </section>
380
+
381
+ <section class="card full" style="animation-delay:.26s">
382
+ <div class="card-head"><span class="label">Adapter Sync</span><span class="muted">.agents/ · .claude/ · AGENTS.md drift check</span></div>
383
+ <div class="adapters">
384
+ <div class="adapter"><div class="adapter-head"><span class="adapter-badge" style="background:var(--violet)">AG</span><span class="adapter-name">Antigravity</span></div><div class="adapter-path">.agents/skills/&lt;skill&gt;</div><div class="adapter-status"><span class="dot mint"></span>synced · 2m ago</div></div>
385
+ <div class="adapter"><div class="adapter-head"><span class="adapter-badge" style="background:var(--cyan)">CX</span><span class="adapter-name">Codex</span></div><div class="adapter-path">.agents/skills/&lt;skill&gt;</div><div class="adapter-status"><span class="dot mint"></span>synced · 2m ago</div></div>
386
+ <div class="adapter"><div class="adapter-head"><span class="adapter-badge" style="background:var(--gold)">CL</span><span class="adapter-name">Claude Code</span></div><div class="adapter-path">.claude/skills/&lt;skill&gt;</div><div class="adapter-status"><span class="dot mint"></span>synced · just now</div></div>
387
+ <div class="adapter"><div class="adapter-head"><span class="adapter-badge" style="background:var(--ink-muted)">GH</span><span class="adapter-name">GitHub Copilot</span></div><div class="adapter-path">.agents/skills/&lt;skill&gt;</div><div class="adapter-status"><span class="dot mint"></span>detected · synced</div></div>
388
+ </div>
389
+ </section>
390
+
391
+ <section class="card full" style="animation-delay:.28s">
392
+ <div class="card-head"><span class="label">Idea Inbox &amp; Backlog</span><span class="value">4 pending</span></div>
393
+ <div class="muted" style="margin-bottom:6px">From devflow/ideas.md — start with <code>/feature IDEA-xxx</code></div>
394
+ <div class="filters" id="filters">
395
+ <button class="chip on" data-f="all">All</button>
396
+ <button class="chip" data-f="high">High feasibility</button>
397
+ <button class="chip" data-f="med">Medium feasibility</button>
398
+ </div>
399
+ <ul id="idea-list">
400
+ <li class="idea" data-f="med"><div><div class="idea-id">IDEA-003</div><div class="idea-title">Interactive Terminal UI (TUI) Dashboard (Ink / Clack)</div><div class="idea-desc">แดชบอร์ดอินเตอร์แอคทีฟบน Terminal สำหรับ Living Spec, Checklists และ Next Action</div><div class="idea-feas med">⚡ <b>ปานกลาง</b> — ink / @clack/prompts</div></div><button class="cmd-chip" data-cmd="/feature IDEA-003">/feature IDEA-003</button></li>
401
+ <li class="idea" data-f="med"><div><div class="idea-id">IDEA-004</div><div class="idea-title">DevFlow MCP Server &amp; Multi-Agent API</div><div class="idea-desc">ยกระดับ CLI เป็น MCP Server เพื่อให้ AI agents เรียกใช้ DevFlow tools โดยตรง</div><div class="idea-feas med">⚡ <b>ปานกลาง</b> — @modelcontextprotocol/sdk</div></div><button class="cmd-chip" data-cmd="/feature IDEA-004">/feature IDEA-004</button></li>
402
+ <li class="idea" data-f="high"><div><div class="idea-id">IDEA-015</div><div class="idea-title">Configurable Artifact Language (th | en)</div><div class="idea-desc">สลับภาษาเริ่มต้นของเอกสารและบทสนทนาผ่าน nexus-devflow.json</div><div class="idea-feas high">⚡ <b>สูง</b> — artifactLanguage config</div></div><button class="cmd-chip" data-cmd="/feature IDEA-015">/feature IDEA-015</button></li>
403
+ <li class="idea" data-f="high"><div><div class="idea-id">IDEA-023</div><div class="idea-title">Lightweight Zero-Dependency Pure Markdown Mode</div><div class="idea-desc">Export DevFlow เป็น Pure Markdown สำหรับโปรเจกต์ที่ไม่มี Node.js</div><div class="idea-feas high">⚡ <b>สูง</b> — pure Markdown templates</div></div><button class="cmd-chip" data-cmd="/feature IDEA-023">/feature IDEA-023</button></li>
404
+ </ul>
405
+ <div class="more-note">20 shipped ideas archived in devflow/ideas.md</div>
406
+ </section>
407
+
408
+ <section class="card full" style="animation-delay:.30s">
409
+ <div class="card-head"><span class="label">Completed Work Archive</span><span class="value">35 released</span></div>
410
+ <div class="muted" style="margin-bottom:4px">Categorized: devflow/history/{features,fixes,rollbacks}/</div>
411
+ <div>
412
+ <div class="hist-item"><span class="hist-bar feature"></span><span class="hist-type">feature 039</span><span class="hist-title">Dynamic Project Overview Compiler (/overview) พร้อม Living Context Sync</span></div>
413
+ <div class="hist-item"><span class="hist-bar feature"></span><span class="hist-type">feature 038</span><span class="hist-title">Sub-Feature Automatic Splitting Engine และ Sub-Feature ID Contract</span></div>
414
+ <div class="hist-item"><span class="hist-bar feature"></span><span class="hist-type">feature 037</span><span class="hist-title">Feature Briefing &amp; Deep Scope Assessment Skill (/brief)</span></div>
415
+ <div class="hist-item"><span class="hist-bar feature"></span><span class="hist-type">feature 036</span><span class="hist-title">Cloud Deployment Readiness Skill (/release) และ 70-deliver</span></div>
416
+ <div class="hist-item"><span class="hist-bar feature"></span><span class="hist-type">feature 035</span><span class="hist-title">Guided Project Discovery Interview Skill (/discovery)</span></div>
417
+ <div class="hist-item"><span class="hist-bar feature"></span><span class="hist-type">feature 034</span><span class="hist-title">Dedicated Code &amp; Security Audit Skill (/audit)</span></div>
418
+ <div class="hist-item"><span class="hist-bar feature"></span><span class="hist-type">feature 033</span><span class="hist-title">User-Owned Planning Documents (project-plan.md &amp; build-plan.md)</span></div>
419
+ <div class="hist-item"><span class="hist-bar feature"></span><span class="hist-type">feature 032</span><span class="hist-title">CI/CD Quality Gatekeeper และ Git Hooks</span></div>
420
+ <div class="hist-item"><span class="hist-bar feature"></span><span class="hist-type">feature 031</span><span class="hist-title">CLI subcommands: idea, findings, doctor --fix และ archive</span></div>
421
+ <div class="hist-item"><span class="hist-bar feature"></span><span class="hist-type">feature 030</span><span class="hist-title">AI Blueprint Upstream v0.12.1 sync</span></div>
422
+ </div>
423
+ </section>
424
+
425
+ <footer>
426
+ <span>Read-only DevFlow 2.0 status mockup · snapshot from local CLI · <a href="https://github.com/Jakkrich/nexus-devflow" target="_blank" rel="noopener">github.com/Jakkrich/nexus-devflow</a></span>
427
+ <span>rev 2.0.25 · sheet 1 of 1 · MIT license</span>
428
+ </footer>
429
+ </main>
430
+
431
+ <script>
432
+ document.getElementById('track-tabs').addEventListener('click', e => {
433
+ const btn = e.target.closest('.tab');
434
+ if (!btn) return;
435
+ document.querySelectorAll('#track-tabs .tab').forEach(t => t.classList.remove('on'));
436
+ btn.classList.add('on');
437
+ document.querySelectorAll('.track-view').forEach(v => v.classList.remove('on'));
438
+ document.getElementById('view-' + btn.dataset.t).classList.add('on');
439
+ });
440
+
441
+ document.getElementById('filters').addEventListener('click', e => {
442
+ const btn = e.target.closest('.chip');
443
+ if (!btn) return;
444
+ document.querySelectorAll('#filters .chip').forEach(c => c.classList.remove('on'));
445
+ btn.classList.add('on');
446
+ const f = btn.dataset.f;
447
+ document.querySelectorAll('#idea-list .idea').forEach(li => {
448
+ li.style.display = (f === 'all' || li.dataset.f === f) ? '' : 'none';
449
+ });
450
+ });
451
+
452
+ function wireCopy(selector, getText) {
453
+ document.querySelectorAll(selector).forEach(btn => {
454
+ btn.addEventListener('click', () => {
455
+ const text = getText(btn);
456
+ navigator.clipboard?.writeText(text);
457
+ const orig = btn.innerHTML;
458
+ btn.textContent = 'Copied!';
459
+ setTimeout(() => btn.innerHTML = orig, 1000);
460
+ });
461
+ });
462
+ }
463
+ wireCopy('.cmd-chip', btn => btn.dataset.cmd);
464
+ wireCopy('.cmdp', btn => btn.dataset.cmd);
465
+
466
+ const copyBtn = document.getElementById('copy-btn');
467
+ copyBtn.addEventListener('click', () => {
468
+ navigator.clipboard?.writeText(document.getElementById('next-command').textContent.trim());
469
+ const t = document.getElementById('copy-text');
470
+ copyBtn.classList.add('copied');
471
+ t.textContent = 'Copied!';
472
+ setTimeout(() => { copyBtn.classList.remove('copied'); t.textContent = 'Copy command'; }, 1200);
473
+ });
474
+ </script>
475
+ </body>
476
+ </html>
@@ -0,0 +1,39 @@
1
+ # Project Overview & Source of Truth
2
+
3
+ > Living context artifact generated by `scripts/overview.ts` on {{generatedAt}}.
4
+
5
+ ## 1. Project Purpose & Target Users
6
+
7
+ {{projectPurpose}}
8
+
9
+ ## 2. Architecture & Directory Layout
10
+
11
+ {{architecture}}
12
+
13
+ ## 3. Technology Stack & Tooling
14
+
15
+ {{stackAndTooling}}
16
+
17
+ ## 4. Source-of-Truth Constraints & Scope Gaps
18
+
19
+ {{constraints}}
20
+
21
+ ## 5. Upcoming Build Queue
22
+
23
+ {{buildQueue}}
24
+
25
+ ## 6. Shipped Capabilities Snapshot
26
+
27
+ {{shippedCapabilities}}
28
+
29
+ ## 7. Ideas & Backlog Pulse
30
+
31
+ {{ideasSummary}}
32
+
33
+ ## 8. Data Sources Read by Compiler
34
+
35
+ {{dataSources}}
36
+
37
+ ## 9. Verified Developer Commands
38
+
39
+ {{verificationCommands}}
@@ -23,17 +23,39 @@ devflow/
23
23
  │ ├── rollbacks/ # Completed feature reversals (YYYY-MM-DD-xxx-slug.md)
24
24
  │ └── HISTORY.md # Master release ledger summary table
25
25
 
26
- └── 🔍 discoveries/ # Pre-delivery discovery records (DISC-YYYYMMDD-NNN-slug/00-discover.md)
26
+ └── 🔍 discoveries/ # Pre-delivery discovery records (DISC-YYYYMMDD-NNN-slug/00-explore.md)
27
27
  ```
28
28
 
29
+ ---
30
+
29
31
  ## Running ID Naming Convention
30
32
 
33
+ ### 1. Standard Running IDs
31
34
  - **Format**: `xxx-slug` (e.g. `001-setup-auth`, `021-categorized-history-and-clean-living-spec-architecture`)
32
35
  - **Prefix Removal**: The legacy `RUN-` prefix is discontinued in favor of clean 3-digit sequential numbering.
33
36
  - **Git Branch Standard**: `feature/{xxx-slug}` or `fix/{xxx-slug}`.
34
37
 
38
+ ### 2. Sub-Feature Running IDs (`xxx[a-z]-slug`)
39
+ - **Format**: `xxx[a-z]-slug` (e.g. `038a-backend-schema-and-api`, `038b-frontend-ui-and-state`)
40
+ - **Git Branch Standard**: `feature/{xxx[a-z]-slug}`
41
+ - **Build Plan Notation**: `- [ ] 4a. Backend Schema...`, `- [ ] 4b. Frontend UI...`
42
+ - **When to Use**: Used when a feature is decomposed via the **Sub-Feature Automatic Splitting Engine** to prevent context overflow on `L`/`XL` tasks.
43
+
44
+ ---
45
+
46
+ ## Multi-Factor Sizing Heuristic & Splitting Engine
47
+
48
+ A feature is considered **Oversized (`L` or `XL`)** and recommended for sub-feature splitting when any of the following conditions are met:
49
+ 1. **Files Touched**: Predicted to modify or create $\ge 6$ files.
50
+ 2. **Architectural Layers**: Crosses $\ge 3$ distinct layers (e.g. Database Migrations + Backend APIs + Frontend UI + State Store).
51
+ 3. **Task Complexity**: Contains $\ge 6$ checklist tasks or involves heavy multi-service integrations.
52
+
53
+ When detected during `/feature` or `/brief`, the AI triggers the **Interactive Split Gate**, proposing a clean `4a`, `4b` sub-feature breakdown before opening the first spec.
54
+
55
+ ---
56
+
35
57
  ## Single Active Run Rule (One Thing at a Time)
36
58
 
37
59
  1. Only **one active run** is permitted at any given time across both Fast-Track and Deep-Track.
38
60
  2. Before opening a new run (`/feature`, `/fix`, or `10-define`), the AI checks `current-stage.md` and `current-feature.md`.
39
- 3. If an active run is in progress, the AI **blocks** starting a new task and requires closing the active run via `/complete` or `70-release` (or explicitly cancelling/rolling back).
61
+ 3. If an active run is in progress, the AI **blocks** starting a new task and requires closing the active run via `/complete` or `70-deliver` (or explicitly cancelling/rolling back).