specdacular 0.7.1 → 0.8.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/README.md +72 -74
- package/commands/specd/continue.md +59 -0
- package/commands/specd/new.md +65 -0
- package/commands/specd/status.md +1 -1
- package/commands/specd/toolbox.md +59 -0
- package/package.json +1 -1
- package/specdacular/HELP.md +19 -16
- package/specdacular/agents/feature-researcher.md +4 -4
- package/specdacular/references/load-context.md +83 -0
- package/specdacular/references/record-decision.md +61 -0
- package/specdacular/references/select-feature.md +20 -20
- package/specdacular/references/select-phase.md +3 -3
- package/specdacular/references/spawn-research-agents.md +180 -0
- package/specdacular/references/synthesize-research.md +127 -0
- package/specdacular/references/validate-task.md +64 -0
- package/specdacular/templates/{features → tasks}/CHANGELOG.md +2 -8
- package/specdacular/templates/{features → tasks}/CONTEXT.md +6 -17
- package/specdacular/templates/tasks/DECISIONS.md +46 -0
- package/specdacular/templates/{features → tasks}/FEATURE.md +3 -3
- package/specdacular/templates/tasks/PLAN.md +91 -0
- package/specdacular/templates/tasks/RESEARCH.md +121 -0
- package/specdacular/templates/{features → tasks}/ROADMAP.md +6 -43
- package/specdacular/templates/tasks/STATE.md +93 -0
- package/specdacular/templates/tasks/config.json +15 -0
- package/specdacular/workflows/continue.md +275 -0
- package/specdacular/workflows/discuss.md +184 -0
- package/specdacular/workflows/execute.md +174 -0
- package/specdacular/workflows/new.md +299 -0
- package/specdacular/workflows/orchestrator/new.md +265 -0
- package/specdacular/workflows/orchestrator/plan.md +169 -0
- package/specdacular/workflows/plan.md +201 -0
- package/specdacular/workflows/research.md +166 -0
- package/specdacular/workflows/review.md +289 -0
- package/specdacular/workflows/status.md +17 -17
- package/commands/specd/blueprint.md +0 -64
- package/commands/specd/feature/continue.md +0 -84
- package/commands/specd/feature/new.md +0 -67
- package/commands/specd/feature/toolbox.md +0 -49
- package/specdacular/templates/blueprint/index.html +0 -110
- package/specdacular/templates/blueprint/scripts.js +0 -71
- package/specdacular/templates/blueprint/styles.css +0 -429
- package/specdacular/templates/features/DECISIONS.md +0 -109
- package/specdacular/templates/features/DEPENDENCIES.md +0 -47
- package/specdacular/templates/features/PLAN.md +0 -180
- package/specdacular/templates/features/RESEARCH.md +0 -183
- package/specdacular/templates/features/STATE.md +0 -110
- package/specdacular/templates/features/config.json +0 -20
- package/specdacular/workflows/blueprint-diagrams.md +0 -273
- package/specdacular/workflows/blueprint-wireframes.md +0 -312
- package/specdacular/workflows/blueprint.md +0 -372
- package/specdacular/workflows/continue-feature.md +0 -621
- package/specdacular/workflows/discuss-feature.md +0 -382
- package/specdacular/workflows/execute-plan.md +0 -636
- package/specdacular/workflows/insert-phase.md +0 -246
- package/specdacular/workflows/new-feature.md +0 -760
- package/specdacular/workflows/plan-feature.md +0 -691
- package/specdacular/workflows/plan-phase.md +0 -355
- package/specdacular/workflows/prepare-phase.md +0 -745
- package/specdacular/workflows/renumber-phases.md +0 -273
- package/specdacular/workflows/research-feature.md +0 -252
- package/specdacular/workflows/research-phase.md +0 -576
- package/specdacular/workflows/review-feature.md +0 -316
- package/specdacular/workflows/review-phase.md +0 -545
|
@@ -1,110 +0,0 @@
|
|
|
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.0">
|
|
6
|
-
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
|
7
|
-
<title>{feature-name} Blueprint</title>
|
|
8
|
-
<style>
|
|
9
|
-
{styles}
|
|
10
|
-
</style>
|
|
11
|
-
</head>
|
|
12
|
-
<body>
|
|
13
|
-
<div class="blueprint-container">
|
|
14
|
-
<nav class="blueprint-sidebar">
|
|
15
|
-
<div class="sidebar-header">
|
|
16
|
-
<h2>{feature-name}</h2>
|
|
17
|
-
<span class="subtitle">Blueprint</span>
|
|
18
|
-
</div>
|
|
19
|
-
<ul class="nav-tabs">
|
|
20
|
-
<li><a href="#overview" class="tab-link active" data-tab="overview">Overview</a></li>
|
|
21
|
-
<li><a href="#decisions" class="tab-link" data-tab="decisions">Decisions</a></li>
|
|
22
|
-
<li><a href="#context" class="tab-link" data-tab="context">Context</a></li>
|
|
23
|
-
<li><a href="#plans" class="tab-link" data-tab="plans">Plans</a></li>
|
|
24
|
-
<li><a href="#wireframes" class="tab-link {wireframes-disabled}" data-tab="wireframes">Wireframes</a></li>
|
|
25
|
-
<li><a href="#diagrams" class="tab-link {diagrams-disabled}" data-tab="diagrams">Diagrams</a></li>
|
|
26
|
-
</ul>
|
|
27
|
-
<div class="sidebar-footer">
|
|
28
|
-
<span class="generated">Generated: {date}</span>
|
|
29
|
-
</div>
|
|
30
|
-
</nav>
|
|
31
|
-
|
|
32
|
-
<main class="blueprint-content">
|
|
33
|
-
<section id="overview" class="tab-content active">
|
|
34
|
-
<h1>Overview</h1>
|
|
35
|
-
<div class="overview-description">
|
|
36
|
-
{feature-description}
|
|
37
|
-
</div>
|
|
38
|
-
<div class="overview-stats">
|
|
39
|
-
<div class="stat">
|
|
40
|
-
<span class="stat-value">{decisions-count}</span>
|
|
41
|
-
<span class="stat-label">Decisions</span>
|
|
42
|
-
</div>
|
|
43
|
-
<div class="stat">
|
|
44
|
-
<span class="stat-value">{sessions-count}</span>
|
|
45
|
-
<span class="stat-label">Discussion Sessions</span>
|
|
46
|
-
</div>
|
|
47
|
-
<div class="stat">
|
|
48
|
-
<span class="stat-value">{plans-count}</span>
|
|
49
|
-
<span class="stat-label">Plans</span>
|
|
50
|
-
</div>
|
|
51
|
-
</div>
|
|
52
|
-
<div class="overview-timeline">
|
|
53
|
-
<h2>Activity Timeline</h2>
|
|
54
|
-
{timeline-content}
|
|
55
|
-
</div>
|
|
56
|
-
</section>
|
|
57
|
-
|
|
58
|
-
<section id="decisions" class="tab-content">
|
|
59
|
-
<h1>Decisions</h1>
|
|
60
|
-
<p class="section-intro">Click any decision to expand details.</p>
|
|
61
|
-
<div class="phase-tabs">
|
|
62
|
-
{decisions-phase-tabs}
|
|
63
|
-
</div>
|
|
64
|
-
<div class="decisions-list">
|
|
65
|
-
{decisions-content}
|
|
66
|
-
</div>
|
|
67
|
-
</section>
|
|
68
|
-
|
|
69
|
-
<section id="context" class="tab-content">
|
|
70
|
-
<h1>Discussion Context</h1>
|
|
71
|
-
<div class="phase-tabs">
|
|
72
|
-
{context-phase-tabs}
|
|
73
|
-
</div>
|
|
74
|
-
<div class="context-content">
|
|
75
|
-
{context-content}
|
|
76
|
-
</div>
|
|
77
|
-
</section>
|
|
78
|
-
|
|
79
|
-
<section id="plans" class="tab-content">
|
|
80
|
-
<h1>Plans</h1>
|
|
81
|
-
<div class="phase-tabs">
|
|
82
|
-
{plans-phase-tabs}
|
|
83
|
-
</div>
|
|
84
|
-
<div class="plans-content">
|
|
85
|
-
{plans-content}
|
|
86
|
-
</div>
|
|
87
|
-
</section>
|
|
88
|
-
|
|
89
|
-
<section id="wireframes" class="tab-content">
|
|
90
|
-
<h1>Wireframes</h1>
|
|
91
|
-
<div class="wireframes-content">
|
|
92
|
-
{wireframes-content}
|
|
93
|
-
</div>
|
|
94
|
-
</section>
|
|
95
|
-
|
|
96
|
-
<section id="diagrams" class="tab-content">
|
|
97
|
-
<h1>Diagrams</h1>
|
|
98
|
-
<div class="diagrams-content">
|
|
99
|
-
{diagrams-content}
|
|
100
|
-
</div>
|
|
101
|
-
</section>
|
|
102
|
-
</main>
|
|
103
|
-
</div>
|
|
104
|
-
|
|
105
|
-
<script src="https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.min.js"></script>
|
|
106
|
-
<script>
|
|
107
|
-
{scripts}
|
|
108
|
-
</script>
|
|
109
|
-
</body>
|
|
110
|
-
</html>
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
// Initialize Mermaid for diagrams
|
|
2
|
-
mermaid.initialize({
|
|
3
|
-
startOnLoad: true,
|
|
4
|
-
theme: 'default',
|
|
5
|
-
securityLevel: 'loose'
|
|
6
|
-
});
|
|
7
|
-
|
|
8
|
-
// Tab switching
|
|
9
|
-
document.addEventListener('DOMContentLoaded', function() {
|
|
10
|
-
const tabLinks = document.querySelectorAll('.tab-link:not(.disabled)');
|
|
11
|
-
|
|
12
|
-
tabLinks.forEach(link => {
|
|
13
|
-
link.addEventListener('click', function(e) {
|
|
14
|
-
e.preventDefault();
|
|
15
|
-
|
|
16
|
-
// Remove active class from all tabs and content
|
|
17
|
-
document.querySelectorAll('.tab-link').forEach(l => l.classList.remove('active'));
|
|
18
|
-
document.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active'));
|
|
19
|
-
|
|
20
|
-
// Add active class to clicked tab and corresponding content
|
|
21
|
-
this.classList.add('active');
|
|
22
|
-
const tabId = this.getAttribute('data-tab');
|
|
23
|
-
document.getElementById(tabId).classList.add('active');
|
|
24
|
-
|
|
25
|
-
// Re-render Mermaid diagrams in newly visible tab
|
|
26
|
-
const section = document.getElementById(tabId);
|
|
27
|
-
const diagrams = section.querySelectorAll('.mermaid');
|
|
28
|
-
if (diagrams.length > 0) {
|
|
29
|
-
mermaid.init(undefined, diagrams);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
// Phase tab switching (within sections)
|
|
35
|
-
document.querySelectorAll('.phase-tabs').forEach(tabContainer => {
|
|
36
|
-
const tabs = tabContainer.querySelectorAll('.phase-tab');
|
|
37
|
-
const section = tabContainer.closest('.tab-content');
|
|
38
|
-
|
|
39
|
-
tabs.forEach(tab => {
|
|
40
|
-
tab.addEventListener('click', function() {
|
|
41
|
-
// Remove active from all phase tabs in this section
|
|
42
|
-
tabs.forEach(t => t.classList.remove('active'));
|
|
43
|
-
|
|
44
|
-
// Add active to clicked tab
|
|
45
|
-
this.classList.add('active');
|
|
46
|
-
|
|
47
|
-
// Get phase to show
|
|
48
|
-
const phase = this.getAttribute('data-phase');
|
|
49
|
-
|
|
50
|
-
// Hide all phase content in this section
|
|
51
|
-
section.querySelectorAll('.phase-content').forEach(content => {
|
|
52
|
-
content.classList.remove('active');
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
// Show selected phase content
|
|
56
|
-
if (phase === 'all') {
|
|
57
|
-
// Show all phase content
|
|
58
|
-
section.querySelectorAll('.phase-content').forEach(content => {
|
|
59
|
-
content.classList.add('active');
|
|
60
|
-
});
|
|
61
|
-
} else {
|
|
62
|
-
// Show only matching phase
|
|
63
|
-
const targetContent = section.querySelector('.phase-content[data-phase="' + phase + '"]');
|
|
64
|
-
if (targetContent) {
|
|
65
|
-
targetContent.classList.add('active');
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
});
|
|
@@ -1,429 +0,0 @@
|
|
|
1
|
-
* {
|
|
2
|
-
margin: 0;
|
|
3
|
-
padding: 0;
|
|
4
|
-
box-sizing: border-box;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
body {
|
|
8
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
9
|
-
height: 100vh;
|
|
10
|
-
overflow: hidden;
|
|
11
|
-
background: #f5f5f5;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
.blueprint-container {
|
|
15
|
-
display: flex;
|
|
16
|
-
height: 100vh;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/* Sidebar */
|
|
20
|
-
.blueprint-sidebar {
|
|
21
|
-
width: 250px;
|
|
22
|
-
min-width: 250px;
|
|
23
|
-
background: #2c3e50;
|
|
24
|
-
color: white;
|
|
25
|
-
display: flex;
|
|
26
|
-
flex-direction: column;
|
|
27
|
-
overflow-y: auto;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
.sidebar-header {
|
|
31
|
-
padding: 1.5rem;
|
|
32
|
-
background: #1a252f;
|
|
33
|
-
border-bottom: 1px solid #34495e;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.sidebar-header h2 {
|
|
37
|
-
font-size: 1.25rem;
|
|
38
|
-
margin-bottom: 0.25rem;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
.sidebar-header .subtitle {
|
|
42
|
-
font-size: 0.875rem;
|
|
43
|
-
opacity: 0.7;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
.nav-tabs {
|
|
47
|
-
list-style: none;
|
|
48
|
-
flex: 1;
|
|
49
|
-
padding: 1rem 0;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.tab-link {
|
|
53
|
-
display: block;
|
|
54
|
-
padding: 0.875rem 1.5rem;
|
|
55
|
-
color: white;
|
|
56
|
-
text-decoration: none;
|
|
57
|
-
transition: background 0.2s, border-left 0.2s;
|
|
58
|
-
border-left: 4px solid transparent;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.tab-link:hover {
|
|
62
|
-
background: #34495e;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.tab-link.active {
|
|
66
|
-
background: #34495e;
|
|
67
|
-
border-left-color: #3498db;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.tab-link.disabled {
|
|
71
|
-
opacity: 0.4;
|
|
72
|
-
pointer-events: none;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.sidebar-footer {
|
|
76
|
-
padding: 1rem 1.5rem;
|
|
77
|
-
font-size: 0.75rem;
|
|
78
|
-
opacity: 0.6;
|
|
79
|
-
border-top: 1px solid #34495e;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/* Main Content */
|
|
83
|
-
.blueprint-content {
|
|
84
|
-
flex: 1;
|
|
85
|
-
overflow-y: auto;
|
|
86
|
-
padding: 2rem;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.tab-content {
|
|
90
|
-
display: none;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
.tab-content.active {
|
|
94
|
-
display: block;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.tab-content h1 {
|
|
98
|
-
margin-bottom: 1rem;
|
|
99
|
-
color: #2c3e50;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
.section-intro {
|
|
103
|
-
color: #666;
|
|
104
|
-
margin-bottom: 1.5rem;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/* Overview Stats */
|
|
108
|
-
.overview-description {
|
|
109
|
-
background: white;
|
|
110
|
-
padding: 1.5rem;
|
|
111
|
-
border-radius: 8px;
|
|
112
|
-
margin-bottom: 1.5rem;
|
|
113
|
-
line-height: 1.6;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
.overview-stats {
|
|
117
|
-
display: grid;
|
|
118
|
-
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
|
|
119
|
-
gap: 1rem;
|
|
120
|
-
margin-bottom: 2rem;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.stat {
|
|
124
|
-
background: white;
|
|
125
|
-
padding: 1.5rem;
|
|
126
|
-
border-radius: 8px;
|
|
127
|
-
text-align: center;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
.stat-value {
|
|
131
|
-
display: block;
|
|
132
|
-
font-size: 2rem;
|
|
133
|
-
font-weight: bold;
|
|
134
|
-
color: #3498db;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
.stat-label {
|
|
138
|
-
font-size: 0.875rem;
|
|
139
|
-
color: #666;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/* Timeline */
|
|
143
|
-
.overview-timeline {
|
|
144
|
-
background: white;
|
|
145
|
-
padding: 1.5rem;
|
|
146
|
-
border-radius: 8px;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
.overview-timeline h2 {
|
|
150
|
-
margin-bottom: 1rem;
|
|
151
|
-
font-size: 1.125rem;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
.timeline-item {
|
|
155
|
-
padding: 0.75rem 0;
|
|
156
|
-
border-bottom: 1px solid #eee;
|
|
157
|
-
display: flex;
|
|
158
|
-
gap: 1rem;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
.timeline-item:last-child {
|
|
162
|
-
border-bottom: none;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
.timeline-date {
|
|
166
|
-
color: #666;
|
|
167
|
-
font-size: 0.875rem;
|
|
168
|
-
min-width: 100px;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
.timeline-event {
|
|
172
|
-
flex: 1;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/* Decisions (Accordion) */
|
|
176
|
-
.decisions-list {
|
|
177
|
-
display: flex;
|
|
178
|
-
flex-direction: column;
|
|
179
|
-
gap: 0.5rem;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
.decision-item {
|
|
183
|
-
background: white;
|
|
184
|
-
border-radius: 8px;
|
|
185
|
-
overflow: hidden;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
.decision-item summary {
|
|
189
|
-
padding: 1rem 1.5rem;
|
|
190
|
-
cursor: pointer;
|
|
191
|
-
display: flex;
|
|
192
|
-
align-items: center;
|
|
193
|
-
gap: 1rem;
|
|
194
|
-
list-style: none;
|
|
195
|
-
user-select: none;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
.decision-item summary::-webkit-details-marker {
|
|
199
|
-
display: none;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
.decision-item summary:hover {
|
|
203
|
-
background: #f9f9f9;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
.decision-id {
|
|
207
|
-
font-family: monospace;
|
|
208
|
-
background: #e8e8e8;
|
|
209
|
-
padding: 0.25rem 0.5rem;
|
|
210
|
-
border-radius: 4px;
|
|
211
|
-
font-size: 0.875rem;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
.decision-title {
|
|
215
|
-
flex: 1;
|
|
216
|
-
font-weight: 500;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
.decision-status {
|
|
220
|
-
font-size: 0.75rem;
|
|
221
|
-
padding: 0.25rem 0.5rem;
|
|
222
|
-
border-radius: 4px;
|
|
223
|
-
text-transform: uppercase;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
.status-active {
|
|
227
|
-
background: #d4edda;
|
|
228
|
-
color: #155724;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
.status-superseded {
|
|
232
|
-
background: #fff3cd;
|
|
233
|
-
color: #856404;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
.status-revoked {
|
|
237
|
-
background: #f8d7da;
|
|
238
|
-
color: #721c24;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
.decision-date {
|
|
242
|
-
font-size: 0.875rem;
|
|
243
|
-
color: #666;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
.decision-content {
|
|
247
|
-
padding: 1rem 1.5rem;
|
|
248
|
-
border-top: 1px solid #eee;
|
|
249
|
-
background: #fafafa;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
.decision-content p {
|
|
253
|
-
margin-bottom: 0.75rem;
|
|
254
|
-
line-height: 1.6;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
.decision-content ul {
|
|
258
|
-
margin-left: 1.5rem;
|
|
259
|
-
margin-bottom: 0.75rem;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
.decision-content li {
|
|
263
|
-
margin-bottom: 0.25rem;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/* Expand indicator */
|
|
267
|
-
.decision-item summary::after {
|
|
268
|
-
content: '\25b6';
|
|
269
|
-
font-size: 0.75rem;
|
|
270
|
-
transition: transform 0.2s;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
.decision-item[open] summary::after {
|
|
274
|
-
transform: rotate(90deg);
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/* Context */
|
|
278
|
-
.context-content {
|
|
279
|
-
background: white;
|
|
280
|
-
padding: 1.5rem;
|
|
281
|
-
border-radius: 8px;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
.context-section {
|
|
285
|
-
margin-bottom: 2rem;
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
.context-section h3 {
|
|
289
|
-
margin-bottom: 1rem;
|
|
290
|
-
padding-bottom: 0.5rem;
|
|
291
|
-
border-bottom: 2px solid #3498db;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
.resolved-question {
|
|
295
|
-
margin-bottom: 1.5rem;
|
|
296
|
-
padding: 1rem;
|
|
297
|
-
background: #f9f9f9;
|
|
298
|
-
border-radius: 4px;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
.resolved-question h4 {
|
|
302
|
-
margin-bottom: 0.5rem;
|
|
303
|
-
color: #2c3e50;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
/* Plans */
|
|
307
|
-
.plans-content {
|
|
308
|
-
display: flex;
|
|
309
|
-
flex-direction: column;
|
|
310
|
-
gap: 1rem;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
.phase-group {
|
|
314
|
-
background: white;
|
|
315
|
-
border-radius: 8px;
|
|
316
|
-
overflow: hidden;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
.phase-header {
|
|
320
|
-
padding: 1rem 1.5rem;
|
|
321
|
-
background: #3498db;
|
|
322
|
-
color: white;
|
|
323
|
-
font-weight: 600;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
.plan-item {
|
|
327
|
-
padding: 1rem 1.5rem;
|
|
328
|
-
border-bottom: 1px solid #eee;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
.plan-item:last-child {
|
|
332
|
-
border-bottom: none;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
.plan-title {
|
|
336
|
-
font-weight: 500;
|
|
337
|
-
margin-bottom: 0.5rem;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
.plan-summary {
|
|
341
|
-
font-size: 0.875rem;
|
|
342
|
-
color: #666;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
/* Wireframes */
|
|
346
|
-
.wireframes-content {
|
|
347
|
-
background: white;
|
|
348
|
-
padding: 1.5rem;
|
|
349
|
-
border-radius: 8px;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
.wireframe-placeholder {
|
|
353
|
-
padding: 3rem;
|
|
354
|
-
text-align: center;
|
|
355
|
-
color: #999;
|
|
356
|
-
border: 2px dashed #ddd;
|
|
357
|
-
border-radius: 8px;
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
/* Diagrams */
|
|
361
|
-
.diagrams-content {
|
|
362
|
-
background: white;
|
|
363
|
-
padding: 1.5rem;
|
|
364
|
-
border-radius: 8px;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
.diagram-container {
|
|
368
|
-
margin-bottom: 2rem;
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
.diagram-container h3 {
|
|
372
|
-
margin-bottom: 1rem;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
.mermaid {
|
|
376
|
-
background: #fafafa;
|
|
377
|
-
padding: 1rem;
|
|
378
|
-
border-radius: 4px;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
/* Phase Tabs (sub-navigation within sections) */
|
|
382
|
-
.phase-tabs {
|
|
383
|
-
display: flex;
|
|
384
|
-
gap: 0.5rem;
|
|
385
|
-
margin-bottom: 1.5rem;
|
|
386
|
-
border-bottom: 2px solid #eee;
|
|
387
|
-
padding-bottom: 0.5rem;
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
.phase-tab {
|
|
391
|
-
padding: 0.5rem 1rem;
|
|
392
|
-
background: #f5f5f5;
|
|
393
|
-
border: 1px solid #ddd;
|
|
394
|
-
border-radius: 4px 4px 0 0;
|
|
395
|
-
cursor: pointer;
|
|
396
|
-
font-size: 0.875rem;
|
|
397
|
-
color: #666;
|
|
398
|
-
transition: all 0.2s;
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
.phase-tab:hover {
|
|
402
|
-
background: #e8e8e8;
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
.phase-tab.active {
|
|
406
|
-
background: #3498db;
|
|
407
|
-
color: white;
|
|
408
|
-
border-color: #3498db;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
.phase-tab.all-tab {
|
|
412
|
-
font-weight: 500;
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
/* Phase content visibility */
|
|
416
|
-
.phase-content {
|
|
417
|
-
display: none;
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
.phase-content.active {
|
|
421
|
-
display: block;
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
/* No content placeholders */
|
|
425
|
-
.no-content {
|
|
426
|
-
padding: 3rem;
|
|
427
|
-
text-align: center;
|
|
428
|
-
color: #999;
|
|
429
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
# Decisions: {feature-name}
|
|
2
|
-
|
|
3
|
-
**Feature:** {feature-name}
|
|
4
|
-
**Created:** {YYYY-MM-DD}
|
|
5
|
-
**Last Updated:** {YYYY-MM-DD}
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Active Decisions
|
|
10
|
-
|
|
11
|
-
{Decisions currently in effect. These guide implementation.}
|
|
12
|
-
|
|
13
|
-
### DEC-001: {Decision Title}
|
|
14
|
-
|
|
15
|
-
**Date:** {YYYY-MM-DD}
|
|
16
|
-
**Status:** Active
|
|
17
|
-
**Context:** {What situation required this decision}
|
|
18
|
-
**Decision:** {What was decided}
|
|
19
|
-
**Rationale:**
|
|
20
|
-
- {Reason 1}
|
|
21
|
-
- {Reason 2}
|
|
22
|
-
- {Reason 3}
|
|
23
|
-
**Implications:**
|
|
24
|
-
- {What this means for implementation}
|
|
25
|
-
- {Files or patterns affected}
|
|
26
|
-
**References:**
|
|
27
|
-
- `@{path/to/relevant/code}` (if applicable)
|
|
28
|
-
- {Link to docs or external resource} (if applicable)
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
### DEC-002: {Decision Title}
|
|
33
|
-
|
|
34
|
-
**Date:** {YYYY-MM-DD}
|
|
35
|
-
**Status:** Active
|
|
36
|
-
**Context:** {What situation required this decision}
|
|
37
|
-
**Decision:** {What was decided}
|
|
38
|
-
**Rationale:**
|
|
39
|
-
- {Reason}
|
|
40
|
-
**Implications:**
|
|
41
|
-
- {What this means}
|
|
42
|
-
**References:**
|
|
43
|
-
- {References}
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## Superseded Decisions
|
|
48
|
-
|
|
49
|
-
{Decisions that were replaced by newer decisions. Kept for history.}
|
|
50
|
-
|
|
51
|
-
### DEC-000: {Old Decision Title}
|
|
52
|
-
|
|
53
|
-
**Date:** {YYYY-MM-DD}
|
|
54
|
-
**Status:** Superseded by DEC-XXX
|
|
55
|
-
**Original Decision:** {What was originally decided}
|
|
56
|
-
**Why Changed:** {What new information or context led to change}
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## Revoked Decisions
|
|
61
|
-
|
|
62
|
-
{Decisions that were explicitly cancelled without replacement.}
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## Decision Log
|
|
67
|
-
|
|
68
|
-
| ID | Date | Title | Status |
|
|
69
|
-
|----|------|-------|--------|
|
|
70
|
-
| DEC-001 | {date} | {title} | Active |
|
|
71
|
-
| DEC-002 | {date} | {title} | Active |
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## Decision Template
|
|
76
|
-
|
|
77
|
-
Use this format when adding new decisions:
|
|
78
|
-
|
|
79
|
-
```markdown
|
|
80
|
-
### DEC-XXX: {Title}
|
|
81
|
-
|
|
82
|
-
**Date:** YYYY-MM-DD
|
|
83
|
-
**Status:** Active | Superseded | Revoked
|
|
84
|
-
**Context:** {What situation required a decision}
|
|
85
|
-
**Decision:** {What was decided}
|
|
86
|
-
**Rationale:**
|
|
87
|
-
- {Why - the reasoning}
|
|
88
|
-
**Implications:**
|
|
89
|
-
- {What this means for implementation}
|
|
90
|
-
**References:**
|
|
91
|
-
- {Code paths, docs, etc.}
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Guidelines
|
|
97
|
-
|
|
98
|
-
**When to create a decision:**
|
|
99
|
-
- Technology or library choice
|
|
100
|
-
- Architecture pattern choice
|
|
101
|
-
- Scope inclusion/exclusion
|
|
102
|
-
- Approach when multiple valid options exist
|
|
103
|
-
- Constraints discovered during discussion/research
|
|
104
|
-
|
|
105
|
-
**Decision ID format:** DEC-{NNN} (three-digit, zero-padded)
|
|
106
|
-
|
|
107
|
-
**Status transitions:**
|
|
108
|
-
- Active → Superseded (when replaced by new decision)
|
|
109
|
-
- Active → Revoked (when cancelled without replacement)
|