viepilot 1.14.0 → 2.4.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.
- package/CHANGELOG.md +191 -0
- package/README.md +27 -17
- package/bin/viepilot.cjs +19 -9
- package/bin/vp-tools.cjs +193 -0
- package/docs/user/features/adapters.md +74 -0
- package/docs/user/features/hooks.md +93 -0
- package/lib/adapters/antigravity.cjs +33 -0
- package/lib/adapters/claude-code.cjs +42 -0
- package/lib/adapters/codex.cjs +34 -0
- package/lib/adapters/cursor.cjs +32 -0
- package/lib/adapters/index.cjs +28 -0
- package/lib/hooks/brainstorm-staleness.cjs +231 -0
- package/lib/viepilot-config.cjs +103 -0
- package/lib/viepilot-install.cjs +125 -152
- package/package.json +1 -3
- package/skills/vp-audit/SKILL.md +23 -23
- package/skills/vp-auto/SKILL.md +23 -9
- package/skills/vp-brainstorm/SKILL.md +44 -38
- package/skills/vp-crystallize/SKILL.md +25 -19
- package/skills/vp-debug/SKILL.md +4 -4
- package/skills/vp-docs/SKILL.md +8 -8
- package/skills/vp-evolve/SKILL.md +26 -13
- package/skills/vp-info/SKILL.md +24 -24
- package/skills/vp-pause/SKILL.md +7 -7
- package/skills/vp-request/SKILL.md +14 -14
- package/skills/vp-resume/SKILL.md +6 -6
- package/skills/vp-rollback/SKILL.md +4 -4
- package/skills/vp-status/SKILL.md +4 -4
- package/skills/vp-task/SKILL.md +2 -2
- package/skills/vp-ui-components/SKILL.md +14 -14
- package/skills/vp-update/SKILL.md +18 -18
- package/templates/architect/apis.html +11 -10
- package/templates/architect/architect-actions.js +217 -0
- package/templates/architect/architecture.html +8 -7
- package/templates/architect/data-flow.html +5 -4
- package/templates/architect/decisions.html +4 -3
- package/templates/architect/deployment.html +10 -9
- package/templates/architect/erd.html +7 -6
- package/templates/architect/feature-map.html +5 -4
- package/templates/architect/sequence-diagram.html +6 -5
- package/templates/architect/style.css +146 -0
- package/templates/architect/tech-notes.html +3 -2
- package/templates/architect/tech-stack.html +8 -7
- package/templates/architect/user-use-cases.html +8 -7
- package/templates/project/AI-GUIDE.md +49 -49
- package/workflows/audit.md +3 -3
- package/workflows/autonomous.md +70 -5
- package/workflows/brainstorm.md +398 -222
- package/workflows/crystallize.md +51 -33
- package/workflows/debug.md +9 -9
- package/workflows/documentation.md +5 -5
- package/workflows/evolve.md +46 -12
- package/workflows/pause-work.md +2 -2
- package/workflows/request.md +8 -8
- package/workflows/resume-work.md +1 -1
- package/workflows/rollback.md +1 -1
- package/dev-install.sh +0 -150
- package/install.sh +0 -125
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>Architecture — {project}</title>
|
|
7
7
|
<link rel="stylesheet" href="style.css" />
|
|
8
8
|
</head>
|
|
9
|
-
<body>
|
|
9
|
+
<body data-arch-slug="architecture">
|
|
10
10
|
<nav class="nav-sidebar">
|
|
11
11
|
<div class="logo">
|
|
12
12
|
<span>ViePilot Architect Mode</span>
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
<button id="theme-toggle" onclick="toggleTheme()">☀️ Light</button>
|
|
38
38
|
</div>
|
|
39
39
|
|
|
40
|
-
<div class="card">
|
|
40
|
+
<div class="card" data-arch-id="ARCH-DIAG1" data-arch-title="C4 Context Diagram">
|
|
41
41
|
<h2>C4 Context Diagram</h2>
|
|
42
42
|
<div class="mermaid-wrap">
|
|
43
43
|
<div class="mermaid">
|
|
@@ -55,7 +55,7 @@ C4Context
|
|
|
55
55
|
</div>
|
|
56
56
|
</div>
|
|
57
57
|
|
|
58
|
-
<div class="card">
|
|
58
|
+
<div class="card" data-arch-id="ARCH-DIAG2" data-arch-title="System Diagram">
|
|
59
59
|
<h2>System Diagram</h2>
|
|
60
60
|
<div class="mermaid-wrap">
|
|
61
61
|
<div class="mermaid">
|
|
@@ -89,13 +89,13 @@ graph TD
|
|
|
89
89
|
</tr>
|
|
90
90
|
</thead>
|
|
91
91
|
<tbody>
|
|
92
|
-
<tr>
|
|
92
|
+
<tr data-arch-id="C1">
|
|
93
93
|
<td>{Component 1}</td>
|
|
94
94
|
<td>{Responsibility}</td>
|
|
95
95
|
<td>{Technology}</td>
|
|
96
96
|
<td>{Notes}</td>
|
|
97
97
|
</tr>
|
|
98
|
-
<tr>
|
|
98
|
+
<tr data-arch-id="C2">
|
|
99
99
|
<td>{Component 2}</td>
|
|
100
100
|
<td>{Responsibility}</td>
|
|
101
101
|
<td>{Technology}</td>
|
|
@@ -124,7 +124,7 @@ graph TD
|
|
|
124
124
|
</tr>
|
|
125
125
|
</thead>
|
|
126
126
|
<tbody>
|
|
127
|
-
<tr>
|
|
127
|
+
<tr data-arch-id="C3">
|
|
128
128
|
<td>{External System 1}</td>
|
|
129
129
|
<td>{SaaS / Internal / 3rd party}</td>
|
|
130
130
|
<td>{What it does}</td>
|
|
@@ -132,7 +132,7 @@ graph TD
|
|
|
132
132
|
<td>{Team / Vendor}</td>
|
|
133
133
|
<td>{Notes}</td>
|
|
134
134
|
</tr>
|
|
135
|
-
<tr>
|
|
135
|
+
<tr data-arch-id="C4">
|
|
136
136
|
<td>{External System 2}</td>
|
|
137
137
|
<td>{SaaS / Internal / 3rd party}</td>
|
|
138
138
|
<td>{What it does}</td>
|
|
@@ -155,5 +155,6 @@ graph TD
|
|
|
155
155
|
mermaid.initialize({ startOnLoad: false, theme: isLight ? 'default' : 'dark' });
|
|
156
156
|
}
|
|
157
157
|
</script>
|
|
158
|
+
<script src="architect-actions.js"></script>
|
|
158
159
|
</body>
|
|
159
160
|
</html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>Data Flow — {project}</title>
|
|
7
7
|
<link rel="stylesheet" href="style.css" />
|
|
8
8
|
</head>
|
|
9
|
-
<body>
|
|
9
|
+
<body data-arch-slug="data-flow">
|
|
10
10
|
<nav class="nav-sidebar">
|
|
11
11
|
<div class="logo">
|
|
12
12
|
<span>ViePilot Architect Mode</span>
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
<button id="theme-toggle" onclick="toggleTheme()">☀️ Light</button>
|
|
38
38
|
</div>
|
|
39
39
|
|
|
40
|
-
<div class="card">
|
|
40
|
+
<div class="card" data-arch-id="DF-DIAG1" data-arch-title="Primary Request Flow">
|
|
41
41
|
<h2>Primary Request Flow</h2>
|
|
42
42
|
<div class="mermaid-wrap">
|
|
43
43
|
<div class="mermaid">
|
|
@@ -58,7 +58,7 @@ sequenceDiagram
|
|
|
58
58
|
</div>
|
|
59
59
|
</div>
|
|
60
60
|
|
|
61
|
-
<div class="card">
|
|
61
|
+
<div class="card" data-arch-id="DF-DIAG2" data-arch-title="Event Flow (Async)">
|
|
62
62
|
<h2>Event Flow (Async)</h2>
|
|
63
63
|
<div class="mermaid-wrap">
|
|
64
64
|
<div class="mermaid">
|
|
@@ -83,7 +83,7 @@ flowchart LR
|
|
|
83
83
|
</tr>
|
|
84
84
|
</thead>
|
|
85
85
|
<tbody>
|
|
86
|
-
<tr>
|
|
86
|
+
<tr data-arch-id="DF1">
|
|
87
87
|
<td>{Flow name}</td>
|
|
88
88
|
<td>{Trigger}</td>
|
|
89
89
|
<td>{Steps}</td>
|
|
@@ -104,5 +104,6 @@ flowchart LR
|
|
|
104
104
|
mermaid.initialize({ startOnLoad: false, theme: isLight ? 'default' : 'dark' });
|
|
105
105
|
}
|
|
106
106
|
</script>
|
|
107
|
+
<script src="architect-actions.js"></script>
|
|
107
108
|
</body>
|
|
108
109
|
</html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>Architecture Decisions — {project}</title>
|
|
7
7
|
<link rel="stylesheet" href="style.css" />
|
|
8
8
|
</head>
|
|
9
|
-
<body>
|
|
9
|
+
<body data-arch-slug="decisions">
|
|
10
10
|
<nav class="nav-sidebar">
|
|
11
11
|
<div class="logo">
|
|
12
12
|
<span>ViePilot Architect Mode</span>
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
</tr>
|
|
53
53
|
</thead>
|
|
54
54
|
<tbody>
|
|
55
|
-
<tr data-updated="true" class="updated">
|
|
55
|
+
<tr data-updated="true" class="updated" data-arch-id="D1">
|
|
56
56
|
<td>D001</td>
|
|
57
57
|
<td>{date}</td>
|
|
58
58
|
<td>{Topic, e.g. "Database choice"}</td>
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
<td>{Rationale}</td>
|
|
62
62
|
<td><span class="badge badge-decided">Decided</span></td>
|
|
63
63
|
</tr>
|
|
64
|
-
<tr>
|
|
64
|
+
<tr data-arch-id="D2">
|
|
65
65
|
<td>D002</td>
|
|
66
66
|
<td>{date}</td>
|
|
67
67
|
<td>{Topic}</td>
|
|
@@ -91,5 +91,6 @@
|
|
|
91
91
|
document.getElementById('theme-toggle').textContent = isLight ? '🌙 Dark' : '☀️ Light';
|
|
92
92
|
}
|
|
93
93
|
</script>
|
|
94
|
+
<script src="architect-actions.js"></script>
|
|
94
95
|
</body>
|
|
95
96
|
</html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>Deployment — {project}</title>
|
|
7
7
|
<link rel="stylesheet" href="style.css" />
|
|
8
8
|
</head>
|
|
9
|
-
<body>
|
|
9
|
+
<body data-arch-slug="deployment">
|
|
10
10
|
<nav class="nav-sidebar">
|
|
11
11
|
<div class="logo">
|
|
12
12
|
<span>ViePilot Architect Mode</span>
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
<button id="theme-toggle" onclick="toggleTheme()">☀️ Light</button>
|
|
38
38
|
</div>
|
|
39
39
|
|
|
40
|
-
<div class="card">
|
|
40
|
+
<div class="card" data-arch-id="DEP-DIAG1" data-arch-title="Infrastructure Diagram">
|
|
41
41
|
<h2>Infrastructure Diagram</h2>
|
|
42
42
|
<div class="mermaid-wrap">
|
|
43
43
|
<div class="mermaid">
|
|
@@ -83,21 +83,21 @@ graph TD
|
|
|
83
83
|
</tr>
|
|
84
84
|
</thead>
|
|
85
85
|
<tbody>
|
|
86
|
-
<tr>
|
|
86
|
+
<tr data-arch-id="DEP1">
|
|
87
87
|
<td>Dev</td>
|
|
88
88
|
<td>http://localhost:3000</td>
|
|
89
89
|
<td>Local development</td>
|
|
90
90
|
<td>App, DB</td>
|
|
91
91
|
<td>{Notes}</td>
|
|
92
92
|
</tr>
|
|
93
|
-
<tr>
|
|
93
|
+
<tr data-arch-id="DEP2">
|
|
94
94
|
<td>Staging</td>
|
|
95
95
|
<td>{staging URL}</td>
|
|
96
96
|
<td>QA / integration testing</td>
|
|
97
97
|
<td>App, DB, Cache, LB</td>
|
|
98
98
|
<td>{Notes}</td>
|
|
99
99
|
</tr>
|
|
100
|
-
<tr>
|
|
100
|
+
<tr data-arch-id="DEP3">
|
|
101
101
|
<td>Production</td>
|
|
102
102
|
<td>{prod URL}</td>
|
|
103
103
|
<td>Live system</td>
|
|
@@ -121,28 +121,28 @@ graph TD
|
|
|
121
121
|
</tr>
|
|
122
122
|
</thead>
|
|
123
123
|
<tbody>
|
|
124
|
-
<tr>
|
|
124
|
+
<tr data-arch-id="DEP4">
|
|
125
125
|
<td>App Server</td>
|
|
126
126
|
<td>Compute</td>
|
|
127
127
|
<td>{AWS EC2 / GCP GCE / Heroku / ...}</td>
|
|
128
128
|
<td>{Instance size}</td>
|
|
129
129
|
<td>{Notes}</td>
|
|
130
130
|
</tr>
|
|
131
|
-
<tr>
|
|
131
|
+
<tr data-arch-id="DEP5">
|
|
132
132
|
<td>Database</td>
|
|
133
133
|
<td>Managed DB</td>
|
|
134
134
|
<td>{RDS / Cloud SQL / PlanetScale / ...}</td>
|
|
135
135
|
<td>{Size}</td>
|
|
136
136
|
<td>{Notes}</td>
|
|
137
137
|
</tr>
|
|
138
|
-
<tr>
|
|
138
|
+
<tr data-arch-id="DEP6">
|
|
139
139
|
<td>Cache</td>
|
|
140
140
|
<td>In-memory</td>
|
|
141
141
|
<td>{ElastiCache / Upstash / ...}</td>
|
|
142
142
|
<td>{Size}</td>
|
|
143
143
|
<td>{Notes}</td>
|
|
144
144
|
</tr>
|
|
145
|
-
<tr>
|
|
145
|
+
<tr data-arch-id="DEP7">
|
|
146
146
|
<td>CDN</td>
|
|
147
147
|
<td>Content delivery</td>
|
|
148
148
|
<td>{CloudFront / Cloudflare / ...}</td>
|
|
@@ -179,5 +179,6 @@ flowchart LR
|
|
|
179
179
|
mermaid.initialize({ startOnLoad: false, theme: isLight ? 'default' : 'dark' });
|
|
180
180
|
}
|
|
181
181
|
</script>
|
|
182
|
+
<script src="architect-actions.js"></script>
|
|
182
183
|
</body>
|
|
183
184
|
</html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>ERD — {project}</title>
|
|
7
7
|
<link rel="stylesheet" href="style.css" />
|
|
8
8
|
</head>
|
|
9
|
-
<body>
|
|
9
|
+
<body data-arch-slug="erd">
|
|
10
10
|
<nav class="nav-sidebar">
|
|
11
11
|
<div class="logo">
|
|
12
12
|
<span>ViePilot Architect Mode</span>
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
<button id="theme-toggle" onclick="toggleTheme()">☀️ Light</button>
|
|
38
38
|
</div>
|
|
39
39
|
|
|
40
|
-
<div class="card">
|
|
40
|
+
<div class="card" data-arch-id="ERD-DIAG1" data-arch-title="ERD Diagram">
|
|
41
41
|
<h2>ERD Diagram</h2>
|
|
42
42
|
<div class="mermaid-wrap">
|
|
43
43
|
<div class="mermaid">
|
|
@@ -89,14 +89,14 @@ erDiagram
|
|
|
89
89
|
</tr>
|
|
90
90
|
</thead>
|
|
91
91
|
<tbody>
|
|
92
|
-
<tr>
|
|
92
|
+
<tr data-arch-id="E1">
|
|
93
93
|
<td><strong>{Entity 1}</strong></td>
|
|
94
94
|
<td>{id, name, ...}</td>
|
|
95
95
|
<td>id</td>
|
|
96
96
|
<td>—</td>
|
|
97
97
|
<td>{notes}</td>
|
|
98
98
|
</tr>
|
|
99
|
-
<tr>
|
|
99
|
+
<tr data-arch-id="E2">
|
|
100
100
|
<td><strong>{Entity 2}</strong></td>
|
|
101
101
|
<td>{id, entity1_id, ...}</td>
|
|
102
102
|
<td>id</td>
|
|
@@ -120,14 +120,14 @@ erDiagram
|
|
|
120
120
|
</tr>
|
|
121
121
|
</thead>
|
|
122
122
|
<tbody>
|
|
123
|
-
<tr>
|
|
123
|
+
<tr data-arch-id="E3">
|
|
124
124
|
<td>{Entity A}</td>
|
|
125
125
|
<td>one-to-many</td>
|
|
126
126
|
<td>{Entity B}</td>
|
|
127
127
|
<td>{label}</td>
|
|
128
128
|
<td>{notes}</td>
|
|
129
129
|
</tr>
|
|
130
|
-
<tr>
|
|
130
|
+
<tr data-arch-id="E4">
|
|
131
131
|
<td>{Entity B}</td>
|
|
132
132
|
<td>many-to-one</td>
|
|
133
133
|
<td>{Entity C}</td>
|
|
@@ -149,5 +149,6 @@ erDiagram
|
|
|
149
149
|
mermaid.initialize({ startOnLoad: false, theme: isLight ? 'default' : 'dark' });
|
|
150
150
|
}
|
|
151
151
|
</script>
|
|
152
|
+
<script src="architect-actions.js"></script>
|
|
152
153
|
</body>
|
|
153
154
|
</html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>Feature Map — {project}</title>
|
|
7
7
|
<link rel="stylesheet" href="style.css" />
|
|
8
8
|
</head>
|
|
9
|
-
<body>
|
|
9
|
+
<body data-arch-slug="features">
|
|
10
10
|
<nav class="nav-sidebar">
|
|
11
11
|
<div class="logo">
|
|
12
12
|
<span>ViePilot Architect Mode</span>
|
|
@@ -69,7 +69,7 @@ mindmap
|
|
|
69
69
|
</tr>
|
|
70
70
|
</thead>
|
|
71
71
|
<tbody>
|
|
72
|
-
<tr>
|
|
72
|
+
<tr data-arch-id="F1">
|
|
73
73
|
<td>{Feature name}</td>
|
|
74
74
|
<td>{Frontend/Backend/Infra}</td>
|
|
75
75
|
<td>Phase 1</td>
|
|
@@ -77,7 +77,7 @@ mindmap
|
|
|
77
77
|
<td>{todo/in-progress/done}</td>
|
|
78
78
|
<td>{notes}</td>
|
|
79
79
|
</tr>
|
|
80
|
-
<tr>
|
|
80
|
+
<tr data-arch-id="F2">
|
|
81
81
|
<td>{Feature name}</td>
|
|
82
82
|
<td>{Layer}</td>
|
|
83
83
|
<td>Phase 2</td>
|
|
@@ -85,7 +85,7 @@ mindmap
|
|
|
85
85
|
<td>{status}</td>
|
|
86
86
|
<td>{notes}</td>
|
|
87
87
|
</tr>
|
|
88
|
-
<tr>
|
|
88
|
+
<tr data-arch-id="F3">
|
|
89
89
|
<td>{Feature name}</td>
|
|
90
90
|
<td>{Layer}</td>
|
|
91
91
|
<td>Phase 3</td>
|
|
@@ -108,5 +108,6 @@ mindmap
|
|
|
108
108
|
mermaid.initialize({ startOnLoad: false, theme: isLight ? 'default' : 'dark' });
|
|
109
109
|
}
|
|
110
110
|
</script>
|
|
111
|
+
<script src="architect-actions.js"></script>
|
|
111
112
|
</body>
|
|
112
113
|
</html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>Sequence Diagram — {project}</title>
|
|
7
7
|
<link rel="stylesheet" href="style.css" />
|
|
8
8
|
</head>
|
|
9
|
-
<body>
|
|
9
|
+
<body data-arch-slug="sequence">
|
|
10
10
|
<nav class="nav-sidebar">
|
|
11
11
|
<div class="logo">
|
|
12
12
|
<span>ViePilot Architect Mode</span>
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
</tr>
|
|
58
58
|
</thead>
|
|
59
59
|
<tbody>
|
|
60
|
-
<tr>
|
|
60
|
+
<tr data-arch-id="SEQ1">
|
|
61
61
|
<td>SEQ-01</td>
|
|
62
62
|
<td>{Scenario name}</td>
|
|
63
63
|
<td>{Actor A, Actor B}</td>
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
<td>{UC-ID}</td>
|
|
66
66
|
<td>{Notes}</td>
|
|
67
67
|
</tr>
|
|
68
|
-
<tr>
|
|
68
|
+
<tr data-arch-id="SEQ2">
|
|
69
69
|
<td>SEQ-02</td>
|
|
70
70
|
<td>{Scenario name}</td>
|
|
71
71
|
<td>{Actor A, Actor B}</td>
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
</table>
|
|
78
78
|
</div>
|
|
79
79
|
|
|
80
|
-
<div class="card">
|
|
80
|
+
<div class="card" data-arch-id="SEQ-DIAG1" data-arch-title="SEQ-01: {Scenario 1 Name}">
|
|
81
81
|
<h2>SEQ-01: {Scenario 1 Name}</h2>
|
|
82
82
|
<div class="mermaid-wrap">
|
|
83
83
|
<div class="mermaid">
|
|
@@ -97,7 +97,7 @@ sequenceDiagram
|
|
|
97
97
|
</div>
|
|
98
98
|
</div>
|
|
99
99
|
|
|
100
|
-
<div class="card">
|
|
100
|
+
<div class="card" data-arch-id="SEQ-DIAG2" data-arch-title="SEQ-02: {Scenario 2 Name}">
|
|
101
101
|
<h2>SEQ-02: {Scenario 2 Name}</h2>
|
|
102
102
|
<div class="mermaid-wrap">
|
|
103
103
|
<div class="mermaid">
|
|
@@ -128,5 +128,6 @@ sequenceDiagram
|
|
|
128
128
|
mermaid.initialize({ startOnLoad: false, theme: isLight ? 'default' : 'dark' });
|
|
129
129
|
}
|
|
130
130
|
</script>
|
|
131
|
+
<script src="architect-actions.js"></script>
|
|
131
132
|
</body>
|
|
132
133
|
</html>
|
|
@@ -217,3 +217,149 @@ tr:hover td { background: var(--surface-alt); }
|
|
|
217
217
|
.cols-3, .cols-2 { grid-template-columns: 1fr; }
|
|
218
218
|
.nav-sidebar { display: none; }
|
|
219
219
|
}
|
|
220
|
+
|
|
221
|
+
/* ── Architect Item Actions (ENH-033) ── */
|
|
222
|
+
/* Item ID badge */
|
|
223
|
+
.arch-id-badge {
|
|
224
|
+
display: inline-block;
|
|
225
|
+
font-family: "SF Mono", "Fira Code", ui-monospace, monospace;
|
|
226
|
+
font-size: 10px;
|
|
227
|
+
padding: 1px 5px;
|
|
228
|
+
border-radius: 3px;
|
|
229
|
+
background: var(--surface-alt);
|
|
230
|
+
color: var(--text-muted);
|
|
231
|
+
border: 1px solid var(--border);
|
|
232
|
+
letter-spacing: 0.03em;
|
|
233
|
+
user-select: none;
|
|
234
|
+
white-space: nowrap;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/* Action buttons container */
|
|
238
|
+
.arch-item-actions {
|
|
239
|
+
display: inline-flex;
|
|
240
|
+
align-items: center;
|
|
241
|
+
gap: 5px;
|
|
242
|
+
opacity: 0;
|
|
243
|
+
transition: opacity 0.15s ease;
|
|
244
|
+
white-space: nowrap;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/* Reveal on row/card hover */
|
|
248
|
+
tr:hover .arch-item-actions,
|
|
249
|
+
.card:hover > .arch-item-actions,
|
|
250
|
+
[data-arch-id]:hover > .arch-item-actions {
|
|
251
|
+
opacity: 1;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/* Always visible in actions cell */
|
|
255
|
+
.arch-actions-cell .arch-item-actions {
|
|
256
|
+
opacity: 0;
|
|
257
|
+
}
|
|
258
|
+
tr:hover .arch-actions-cell .arch-item-actions {
|
|
259
|
+
opacity: 1;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/* Actions column header — minimal width, no label */
|
|
263
|
+
.arch-actions-th {
|
|
264
|
+
width: 140px;
|
|
265
|
+
min-width: 140px;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/* Actions column cell */
|
|
269
|
+
.arch-actions-cell {
|
|
270
|
+
white-space: nowrap;
|
|
271
|
+
vertical-align: middle;
|
|
272
|
+
padding: 4px 8px !important;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/* Base button */
|
|
276
|
+
.arch-btn {
|
|
277
|
+
display: inline-flex;
|
|
278
|
+
align-items: center;
|
|
279
|
+
gap: 3px;
|
|
280
|
+
padding: 2px 8px;
|
|
281
|
+
border-radius: 4px;
|
|
282
|
+
border: 1px solid transparent;
|
|
283
|
+
font-size: 11px;
|
|
284
|
+
font-weight: 500;
|
|
285
|
+
cursor: pointer;
|
|
286
|
+
transition: background 0.12s, color 0.12s, border-color 0.12s;
|
|
287
|
+
line-height: 1.6;
|
|
288
|
+
user-select: none;
|
|
289
|
+
}
|
|
290
|
+
.arch-btn:focus-visible {
|
|
291
|
+
outline: 2px solid var(--accent);
|
|
292
|
+
outline-offset: 2px;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/* Approve button — green tint */
|
|
296
|
+
.arch-btn-approve {
|
|
297
|
+
background: #16a34a18;
|
|
298
|
+
color: #4ade80;
|
|
299
|
+
border-color: #16a34a40;
|
|
300
|
+
}
|
|
301
|
+
.arch-btn-approve:hover {
|
|
302
|
+
background: #16a34a30;
|
|
303
|
+
border-color: #16a34a70;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/* Edit button — accent tint */
|
|
307
|
+
.arch-btn-edit {
|
|
308
|
+
background: #6366f118;
|
|
309
|
+
color: #a5b4fc;
|
|
310
|
+
border-color: #6366f140;
|
|
311
|
+
}
|
|
312
|
+
.arch-btn-edit:hover {
|
|
313
|
+
background: #6366f130;
|
|
314
|
+
border-color: #6366f170;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/* "Copied!" feedback state */
|
|
318
|
+
.arch-btn.copied {
|
|
319
|
+
background: #f59e0b20;
|
|
320
|
+
color: #fbbf24;
|
|
321
|
+
border-color: #f59e0b50;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* Light-mode overrides */
|
|
325
|
+
html.light .arch-btn-approve { background: #dcfce7; color: #16a34a; border-color: #bbf7d0; }
|
|
326
|
+
html.light .arch-btn-approve:hover { background: #bbf7d0; }
|
|
327
|
+
html.light .arch-btn-edit { background: #ede9fe; color: #4f46e5; border-color: #c4b5fd; }
|
|
328
|
+
html.light .arch-btn-edit:hover { background: #c4b5fd; }
|
|
329
|
+
html.light .arch-btn.copied { background: #fef9c3; color: #b45309; border-color: #fde68a; }
|
|
330
|
+
html.light .arch-id-badge { background: #f1f5f9; color: #64748b; border-color: #e2e8f0; }
|
|
331
|
+
|
|
332
|
+
/* ── Architect Gap / Stale Indicators (ENH-034) ── */
|
|
333
|
+
/* Amber — "brainstorm detected a gap, HTML not synced yet"
|
|
334
|
+
Distinct from .updated (yellow = recently changed by architect session) */
|
|
335
|
+
|
|
336
|
+
.arch-gap-badge {
|
|
337
|
+
display: inline-block;
|
|
338
|
+
font-size: 10px;
|
|
339
|
+
font-weight: 600;
|
|
340
|
+
padding: 1px 5px;
|
|
341
|
+
border-radius: 3px;
|
|
342
|
+
background: rgba(245, 158, 11, 0.15);
|
|
343
|
+
color: #f59e0b;
|
|
344
|
+
border: 1px solid rgba(245, 158, 11, 0.3);
|
|
345
|
+
margin-left: 6px;
|
|
346
|
+
vertical-align: middle;
|
|
347
|
+
letter-spacing: 0.3px;
|
|
348
|
+
cursor: default;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
[data-arch-stale="true"] {
|
|
352
|
+
border-left: 3px solid #f59e0b !important;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
tr[data-arch-stale="true"] td:first-child .arch-gap-badge,
|
|
356
|
+
.card[data-arch-stale="true"] h2 .arch-gap-badge {
|
|
357
|
+
display: inline-block;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/* Light mode overrides */
|
|
361
|
+
html.light .arch-gap-badge {
|
|
362
|
+
background: rgba(217, 119, 6, 0.1);
|
|
363
|
+
color: #d97706;
|
|
364
|
+
border-color: rgba(217, 119, 6, 0.3);
|
|
365
|
+
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>Tech Notes — {project}</title>
|
|
7
7
|
<link rel="stylesheet" href="style.css" />
|
|
8
8
|
</head>
|
|
9
|
-
<body>
|
|
9
|
+
<body data-arch-slug="tech-notes">
|
|
10
10
|
<nav class="nav-sidebar">
|
|
11
11
|
<div class="logo">
|
|
12
12
|
<span>ViePilot Architect Mode</span>
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
</div>
|
|
72
72
|
</div>
|
|
73
73
|
|
|
74
|
-
<div class="card">
|
|
74
|
+
<div class="card" data-arch-id="TN1">
|
|
75
75
|
<h2>Additional Notes</h2>
|
|
76
76
|
<p style="color:var(--text-muted);font-size:13px;">{Additional context, constraints, or design notes that don't fit in other sections}</p>
|
|
77
77
|
</div>
|
|
@@ -84,5 +84,6 @@
|
|
|
84
84
|
document.getElementById('theme-toggle').textContent = isLight ? '🌙 Dark' : '☀️ Light';
|
|
85
85
|
}
|
|
86
86
|
</script>
|
|
87
|
+
<script src="architect-actions.js"></script>
|
|
87
88
|
</body>
|
|
88
89
|
</html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>Tech Stack — {project}</title>
|
|
7
7
|
<link rel="stylesheet" href="style.css" />
|
|
8
8
|
</head>
|
|
9
|
-
<body>
|
|
9
|
+
<body data-arch-slug="tech-stack">
|
|
10
10
|
<nav class="nav-sidebar">
|
|
11
11
|
<div class="logo">
|
|
12
12
|
<span>ViePilot Architect Mode</span>
|
|
@@ -50,42 +50,42 @@
|
|
|
50
50
|
</tr>
|
|
51
51
|
</thead>
|
|
52
52
|
<tbody>
|
|
53
|
-
<tr>
|
|
53
|
+
<tr data-arch-id="TS1">
|
|
54
54
|
<td><strong>Frontend</strong></td>
|
|
55
55
|
<td>{e.g. React + TypeScript}</td>
|
|
56
56
|
<td>{version}</td>
|
|
57
57
|
<td>{rationale}</td>
|
|
58
58
|
<td>{alternatives}</td>
|
|
59
59
|
</tr>
|
|
60
|
-
<tr>
|
|
60
|
+
<tr data-arch-id="TS2">
|
|
61
61
|
<td><strong>Backend</strong></td>
|
|
62
62
|
<td>{e.g. Node.js + Express}</td>
|
|
63
63
|
<td>{version}</td>
|
|
64
64
|
<td>{rationale}</td>
|
|
65
65
|
<td>{alternatives}</td>
|
|
66
66
|
</tr>
|
|
67
|
-
<tr>
|
|
67
|
+
<tr data-arch-id="TS3">
|
|
68
68
|
<td><strong>Database</strong></td>
|
|
69
69
|
<td>{e.g. PostgreSQL}</td>
|
|
70
70
|
<td>{version}</td>
|
|
71
71
|
<td>{rationale}</td>
|
|
72
72
|
<td>{alternatives}</td>
|
|
73
73
|
</tr>
|
|
74
|
-
<tr>
|
|
74
|
+
<tr data-arch-id="TS4">
|
|
75
75
|
<td><strong>Cache</strong></td>
|
|
76
76
|
<td>{e.g. Redis}</td>
|
|
77
77
|
<td>{version}</td>
|
|
78
78
|
<td>{rationale}</td>
|
|
79
79
|
<td>{alternatives}</td>
|
|
80
80
|
</tr>
|
|
81
|
-
<tr>
|
|
81
|
+
<tr data-arch-id="TS5">
|
|
82
82
|
<td><strong>Infrastructure</strong></td>
|
|
83
83
|
<td>{e.g. AWS ECS + RDS}</td>
|
|
84
84
|
<td>—</td>
|
|
85
85
|
<td>{rationale}</td>
|
|
86
86
|
<td>{alternatives}</td>
|
|
87
87
|
</tr>
|
|
88
|
-
<tr>
|
|
88
|
+
<tr data-arch-id="TS6">
|
|
89
89
|
<td><strong>DevOps</strong></td>
|
|
90
90
|
<td>{e.g. GitHub Actions + Terraform}</td>
|
|
91
91
|
<td>—</td>
|
|
@@ -109,5 +109,6 @@
|
|
|
109
109
|
document.getElementById('theme-toggle').textContent = isLight ? '🌙 Dark' : '☀️ Light';
|
|
110
110
|
}
|
|
111
111
|
</script>
|
|
112
|
+
<script src="architect-actions.js"></script>
|
|
112
113
|
</body>
|
|
113
114
|
</html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>User Use Cases — {project}</title>
|
|
7
7
|
<link rel="stylesheet" href="style.css" />
|
|
8
8
|
</head>
|
|
9
|
-
<body>
|
|
9
|
+
<body data-arch-slug="use-cases">
|
|
10
10
|
<nav class="nav-sidebar">
|
|
11
11
|
<div class="logo">
|
|
12
12
|
<span>ViePilot Architect Mode</span>
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
<button id="theme-toggle" onclick="toggleTheme()">☀️ Light</button>
|
|
38
38
|
</div>
|
|
39
39
|
|
|
40
|
-
<div class="card">
|
|
40
|
+
<div class="card" data-arch-id="UC-DIAG1" data-arch-title="Actor / Use Case Diagram">
|
|
41
41
|
<h2>Actor / Use Case Diagram</h2>
|
|
42
42
|
<div class="mermaid-wrap">
|
|
43
43
|
<div class="mermaid">
|
|
@@ -82,7 +82,7 @@ flowchart LR
|
|
|
82
82
|
</tr>
|
|
83
83
|
</thead>
|
|
84
84
|
<tbody>
|
|
85
|
-
<tr>
|
|
85
|
+
<tr data-arch-id="UC1">
|
|
86
86
|
<td>UC-001</td>
|
|
87
87
|
<td>{Use case name}</td>
|
|
88
88
|
<td>{Actor}</td>
|
|
@@ -90,7 +90,7 @@ flowchart LR
|
|
|
90
90
|
<td>{Brief main flow}</td>
|
|
91
91
|
<td><span class="badge badge-phase-1">Phase 1</span></td>
|
|
92
92
|
</tr>
|
|
93
|
-
<tr>
|
|
93
|
+
<tr data-arch-id="UC2">
|
|
94
94
|
<td>UC-002</td>
|
|
95
95
|
<td>{Use case name}</td>
|
|
96
96
|
<td>{Actor}</td>
|
|
@@ -98,7 +98,7 @@ flowchart LR
|
|
|
98
98
|
<td>{Brief main flow}</td>
|
|
99
99
|
<td><span class="badge badge-phase-2">Phase 2</span></td>
|
|
100
100
|
</tr>
|
|
101
|
-
<tr>
|
|
101
|
+
<tr data-arch-id="UC3">
|
|
102
102
|
<td>UC-003</td>
|
|
103
103
|
<td>{Use case name}</td>
|
|
104
104
|
<td>{Actor}</td>
|
|
@@ -122,13 +122,13 @@ flowchart LR
|
|
|
122
122
|
</tr>
|
|
123
123
|
</thead>
|
|
124
124
|
<tbody>
|
|
125
|
-
<tr>
|
|
125
|
+
<tr data-arch-id="UC4">
|
|
126
126
|
<td><strong>{Actor 1}</strong></td>
|
|
127
127
|
<td>{Role description}</td>
|
|
128
128
|
<td>{Primary goals}</td>
|
|
129
129
|
<td>{notes}</td>
|
|
130
130
|
</tr>
|
|
131
|
-
<tr>
|
|
131
|
+
<tr data-arch-id="UC5">
|
|
132
132
|
<td><strong>{Actor 2}</strong></td>
|
|
133
133
|
<td>{Role description}</td>
|
|
134
134
|
<td>{Primary goals}</td>
|
|
@@ -149,5 +149,6 @@ flowchart LR
|
|
|
149
149
|
mermaid.initialize({ startOnLoad: false, theme: isLight ? 'default' : 'dark' });
|
|
150
150
|
}
|
|
151
151
|
</script>
|
|
152
|
+
<script src="architect-actions.js"></script>
|
|
152
153
|
</body>
|
|
153
154
|
</html>
|