@davidbalzan/groundwork 0.3.1
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/LICENSE +21 -0
- package/README.md +323 -0
- package/docs/DECISIONS.md +170 -0
- package/package.json +38 -0
- package/payload/doc-templates/COMMANDS.md +419 -0
- package/payload/doc-templates/DECISIONS.md +168 -0
- package/payload/doc-templates/FACTS.md +43 -0
- package/payload/doc-templates/GROUNDWORK_METHODOLOGY.md +1300 -0
- package/payload/doc-templates/STACK_MAP.md +90 -0
- package/payload/doc-templates/WORKSTREAMS.md +79 -0
- package/payload/doc-templates/_INDEX.md +54 -0
- package/payload/doc-templates/phases/README.md +36 -0
- package/payload/doc-templates/phases/templates/README.md +63 -0
- package/payload/doc-templates/phases/templates/TASK_TEMPLATE.md +302 -0
- package/payload/doc-templates/phases/templates/task_template_prompt.md +229 -0
- package/payload/doc-templates/templates/ARCHITECTURE_GUIDE_TEMPLATE.md +250 -0
- package/payload/doc-templates/templates/DESIGN_SYSTEM_TEMPLATE.md +336 -0
- package/payload/doc-templates/templates/DONE_TEMPLATE.md +21 -0
- package/payload/doc-templates/templates/PHASES_README_TEMPLATE.md +144 -0
- package/payload/doc-templates/templates/PHASE_README_TEMPLATE.md +142 -0
- package/payload/doc-templates/templates/PRD_TEMPLATE.md +348 -0
- package/payload/doc-templates/templates/PRODUCTION_ROADMAP_TEMPLATE.md +168 -0
- package/payload/doc-templates/templates/QUEUE_TEMPLATE.md +17 -0
- package/payload/doc-templates/templates/TECH_STACK_TEMPLATE.md +199 -0
- package/payload/scripts/check-task.mjs +98 -0
- package/payload/scripts/check-versions.mjs +113 -0
- package/payload/scripts/phase-status.mjs +69 -0
- package/payload/scripts/set-fact.mjs +86 -0
- package/payload/skills/add-data-layer/SKILL.md +129 -0
- package/payload/skills/check-task/SKILL.md +35 -0
- package/payload/skills/check-versions/SKILL.md +47 -0
- package/payload/skills/create-prd/SKILL.md +90 -0
- package/payload/skills/domain-model/SKILL.md +90 -0
- package/payload/skills/kickstart/SKILL.md +157 -0
- package/payload/skills/log-decision/SKILL.md +65 -0
- package/payload/skills/next/SKILL.md +65 -0
- package/payload/skills/plan-phase/SKILL.md +108 -0
- package/payload/skills/remember/SKILL.md +77 -0
- package/payload/skills/start-session/SKILL.md +52 -0
- package/payload/skills/update-workstreams/SKILL.md +60 -0
- package/src/cli.mjs +115 -0
- package/src/commands/add.mjs +39 -0
- package/src/commands/artifacts.mjs +24 -0
- package/src/commands/doctor.mjs +292 -0
- package/src/commands/init.mjs +147 -0
- package/src/commands/knowledge.mjs +148 -0
- package/src/commands/list.mjs +61 -0
- package/src/commands/status.mjs +96 -0
- package/src/commands/update.mjs +128 -0
- package/src/lib/adr-tripwire.mjs +171 -0
- package/src/lib/artifacts.mjs +124 -0
- package/src/lib/config.mjs +43 -0
- package/src/lib/fs.mjs +46 -0
- package/src/lib/log.mjs +22 -0
- package/src/lib/paths.mjs +36 -0
- package/src/lib/progress.mjs +26 -0
- package/src/lib/skills.mjs +42 -0
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AI Commands Guide"
|
|
3
|
+
tags: [groundwork/reference]
|
|
4
|
+
aliases: ["Commands"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# AI Assistant Commands Guide
|
|
8
|
+
|
|
9
|
+
This guide explains how to use the Groundwork workflow commands across different IDEs.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Quick Reference
|
|
14
|
+
|
|
15
|
+
| Command | Purpose | When to Use |
|
|
16
|
+
| --------------- | ----------------------------- | ---------------------------------- |
|
|
17
|
+
| `create-prd` | Define the product (PRD) | **First** — right after install |
|
|
18
|
+
| `kickstart` | Scaffold project docs FROM the PRD | After the PRD exists |
|
|
19
|
+
| `domain-model` | Build the ubiquitous-language glossary + context map | During system design |
|
|
20
|
+
| `check-versions` | Audit deps vs latest stable | Right after kickstart + periodically |
|
|
21
|
+
| `plan-phase` | Create phase task breakdown | Starting a new development phase |
|
|
22
|
+
| `start-session` | Load project context | Start of each coding session |
|
|
23
|
+
| `next` | Recommend the next step | Whenever unsure where you are |
|
|
24
|
+
| `check-task` | Mark tasks complete | After completing a task |
|
|
25
|
+
| `update-workstreams` | Update live parallel-stream state | End of session or on stream change |
|
|
26
|
+
| `log-decision` | Record architectural decision | After making tech choices |
|
|
27
|
+
| `add-data-layer` | Add optional Drizzle + DB layer | When a feature needs persistence |
|
|
28
|
+
| `remember` | Capture a cross-project lesson | After discovering a useful pattern |
|
|
29
|
+
|
|
30
|
+
(Phase progress is read-only — just ask, or run `groundwork status`.)
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Workflow Overview
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
┌─────────────────────────────────────────────────────────────────────┐
|
|
38
|
+
│ PROJECT LIFECYCLE │
|
|
39
|
+
├─────────────────────────────────────────────────────────────────────┤
|
|
40
|
+
│ │
|
|
41
|
+
│ ┌────────────┐ ┌──────────┐ ┌────────────┐ ┌────────────┐ │
|
|
42
|
+
│ │ create-prd │ ──▶│kickstart │ ──▶│ plan-phase │ ──▶│start-session│ │
|
|
43
|
+
│ └────────────┘ └──────────┘ └────────────┘ └────────────┘ │
|
|
44
|
+
│ │ │ │
|
|
45
|
+
│ ▼ ▼ │
|
|
46
|
+
│ Defines the Scaffolds docs/ Creates tasks │ │
|
|
47
|
+
│ product (PRD) FROM the PRD for Phase 1 │ │
|
|
48
|
+
│ │ │
|
|
49
|
+
│ DEVELOPMENT LOOP │ │
|
|
50
|
+
│ ┌────────────────────────┐ │ │
|
|
51
|
+
│ │ │ │ │
|
|
52
|
+
│ ▼ │ │ │
|
|
53
|
+
│ ┌──────────┐ ┌─────┴──────┐ │ │
|
|
54
|
+
│ │check-task│ ◀────────── │ Code! │ ◀──────┘ │
|
|
55
|
+
│ └──────────┘ └────────────┘ │
|
|
56
|
+
│ │ ▲ │
|
|
57
|
+
│ ▼ │ │
|
|
58
|
+
│ ┌────────────┐ ┌─────┴──────┐ │
|
|
59
|
+
│ │workstreams │ ────────▶ │log-decision│ │
|
|
60
|
+
│ └────────────┘ └────────────┘ │
|
|
61
|
+
│ │
|
|
62
|
+
│ (phase progress: `groundwork status` — read-only, on demand) │
|
|
63
|
+
│ │
|
|
64
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## IDE-Specific Usage
|
|
70
|
+
|
|
71
|
+
### Claude Code (Terminal)
|
|
72
|
+
|
|
73
|
+
Use slash commands directly:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Initialize a new project
|
|
77
|
+
/kickstart MyProject
|
|
78
|
+
|
|
79
|
+
# Create product requirements
|
|
80
|
+
/create-prd "E-commerce platform"
|
|
81
|
+
|
|
82
|
+
# Start a coding session
|
|
83
|
+
/start-session
|
|
84
|
+
|
|
85
|
+
# Plan a phase
|
|
86
|
+
/plan-phase 1 "Foundation"
|
|
87
|
+
|
|
88
|
+
# Log a decision
|
|
89
|
+
/log-decision "Use PostgreSQL for database"
|
|
90
|
+
|
|
91
|
+
# Update workstreams
|
|
92
|
+
/update-workstreams "Phase 2 auth stream: middleware done, RBAC next"
|
|
93
|
+
|
|
94
|
+
# Mark a task complete
|
|
95
|
+
/check-task 2.3
|
|
96
|
+
|
|
97
|
+
# Capture a cross-project learning
|
|
98
|
+
/remember "typescript: Always use Zod for runtime validation"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Cursor
|
|
102
|
+
|
|
103
|
+
Type `/` in Agent chat (Cmd+L) to see available commands:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
/create-prd
|
|
107
|
+
/kickstart
|
|
108
|
+
/check-versions
|
|
109
|
+
/plan-phase
|
|
110
|
+
/start-session
|
|
111
|
+
/next
|
|
112
|
+
/check-task
|
|
113
|
+
/update-workstreams
|
|
114
|
+
/log-decision
|
|
115
|
+
/domain-model
|
|
116
|
+
/add-data-layer
|
|
117
|
+
/remember
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Alternative: Use `@` file references:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
@kickstart.md - initialize my new project
|
|
124
|
+
@create-prd.md - create PRD for authentication system
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### VS Code Copilot
|
|
128
|
+
|
|
129
|
+
1. Open Copilot Chat (Cmd+Shift+I)
|
|
130
|
+
2. Click the paperclip icon or type `/`
|
|
131
|
+
3. Select "Prompt..." from the menu
|
|
132
|
+
4. Choose the prompt you want
|
|
133
|
+
|
|
134
|
+
Available prompts:
|
|
135
|
+
|
|
136
|
+
- `create-prd.prompt.md`
|
|
137
|
+
- `kickstart.prompt.md`
|
|
138
|
+
- `check-versions.prompt.md`
|
|
139
|
+
- `plan-phase.prompt.md`
|
|
140
|
+
- `start-session.prompt.md`
|
|
141
|
+
- `next.prompt.md`
|
|
142
|
+
- `check-task.prompt.md`
|
|
143
|
+
- `update-workstreams.prompt.md`
|
|
144
|
+
- `log-decision.prompt.md`
|
|
145
|
+
- `domain-model.prompt.md`
|
|
146
|
+
- `add-data-layer.prompt.md`
|
|
147
|
+
- `remember.prompt.md`
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Command Details
|
|
152
|
+
|
|
153
|
+
### `/kickstart`
|
|
154
|
+
|
|
155
|
+
**Purpose**: Scaffold a project's documentation **from an existing PRD**. Run after `/create-prd`.
|
|
156
|
+
|
|
157
|
+
**What it does**:
|
|
158
|
+
|
|
159
|
+
0. Reads [[PRD]] and derives project name, scope, and phases from it (no re-interview)
|
|
160
|
+
1. Creates folder structure (`docs/`, `apps/web/`, `apps/api/`, `packages/shared/`)
|
|
161
|
+
2. Guides through tech stack selection → [[TECH_STACK]]
|
|
162
|
+
3. Records architecture decisions → [[ARCHITECTURE_GUIDE]], [[DECISIONS]]
|
|
163
|
+
4. Sets up phase structure (from the PRD) → [[PRODUCTION_ROADMAP]], `phases/`
|
|
164
|
+
5. Initializes workstreams tracking → [[WORKSTREAMS]]
|
|
165
|
+
6. Optionally creates design system → [[DESIGN_SYSTEM]]
|
|
166
|
+
|
|
167
|
+
**When to use**: After the PRD exists, to turn it into the project scaffold. (If you ran
|
|
168
|
+
`/create-prd` first — as you should — kickstart won't re-ask what the PRD already covers.)
|
|
169
|
+
|
|
170
|
+
**Example**:
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
/kickstart "TaskFlow - A project management app"
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
### `/create-prd`
|
|
179
|
+
|
|
180
|
+
**Purpose**: Generate a comprehensive Product Requirements Document.
|
|
181
|
+
|
|
182
|
+
**What it does**:
|
|
183
|
+
|
|
184
|
+
1. Guides through problem discovery
|
|
185
|
+
2. Captures vision and measurable goals
|
|
186
|
+
3. Defines user personas and stories
|
|
187
|
+
4. Documents functional requirements with acceptance criteria
|
|
188
|
+
5. Captures non-functional requirements (performance, security)
|
|
189
|
+
6. Identifies risks and creates timeline
|
|
190
|
+
|
|
191
|
+
**When to use**: Before starting development, to define what you're building.
|
|
192
|
+
|
|
193
|
+
**Example**:
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
/create-prd "User authentication system with OAuth support"
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Output**: [[PRD]] or `docs/PRD_[ProductName].md`
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
### `/start-session`
|
|
204
|
+
|
|
205
|
+
**Purpose**: Load project context at the beginning of a coding session.
|
|
206
|
+
|
|
207
|
+
**What it does**:
|
|
208
|
+
|
|
209
|
+
1. Reads [[WORKSTREAMS]] for live stream state
|
|
210
|
+
2. Reviews phase progress from roadmap
|
|
211
|
+
3. Checks recent decisions that affect current work
|
|
212
|
+
4. Summarizes blockers and next steps
|
|
213
|
+
|
|
214
|
+
**When to use**: Every time you start working on the project.
|
|
215
|
+
|
|
216
|
+
**Example**:
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
/start-session
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**Output**: Session summary with current task, recent progress, and suggested next steps.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
### `/plan-phase`
|
|
227
|
+
|
|
228
|
+
**Purpose**: Create detailed task breakdown for a development phase.
|
|
229
|
+
|
|
230
|
+
**What it does**:
|
|
231
|
+
|
|
232
|
+
1. Analyzes phase goals from roadmap
|
|
233
|
+
2. Explores codebase for relevant patterns
|
|
234
|
+
3. Assesses risks and dependencies
|
|
235
|
+
4. Creates 4-6 major tasks with sub-steps
|
|
236
|
+
5. Defines success criteria
|
|
237
|
+
|
|
238
|
+
**When to use**: Starting a new phase of development.
|
|
239
|
+
|
|
240
|
+
**Example**:
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
/plan-phase 2 "Authentication & Authorization"
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Output**:
|
|
247
|
+
|
|
248
|
+
- `docs/phases/phase2/README.md`
|
|
249
|
+
- `docs/phases/phase2/PHASE2_TASKS.md`
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
### `/log-decision`
|
|
254
|
+
|
|
255
|
+
**Purpose**: Create an Architectural Decision Record (ADR).
|
|
256
|
+
|
|
257
|
+
**What it does**:
|
|
258
|
+
|
|
259
|
+
1. Captures the decision context
|
|
260
|
+
2. Documents what was decided
|
|
261
|
+
3. Records consequences (positive, negative, risks)
|
|
262
|
+
4. Lists alternatives considered
|
|
263
|
+
5. Updates the ADR index
|
|
264
|
+
|
|
265
|
+
**When to use**: After making significant technical decisions.
|
|
266
|
+
|
|
267
|
+
**Example**:
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
/log-decision "Use Redis for session caching"
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Output**: New ADR entry in [[DECISIONS]]
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
### `/update-workstreams`
|
|
278
|
+
|
|
279
|
+
**Purpose**: Update `docs/WORKSTREAMS.md` with the live state of parallel work streams. The swarm-native replacement for a single "current focus", and the live counterpart to `[[QUEUE]]`.
|
|
280
|
+
|
|
281
|
+
**What it does**:
|
|
282
|
+
|
|
283
|
+
1. Adds, updates, or closes a stream row (one row per live stream)
|
|
284
|
+
2. Records owner/agent, branch · worktree, status, and blocker
|
|
285
|
+
3. Moves finished streams to `Recently Closed` with an outcome
|
|
286
|
+
4. Sets the "Last Updated" timestamp
|
|
287
|
+
|
|
288
|
+
**When to use**:
|
|
289
|
+
|
|
290
|
+
- End of coding session
|
|
291
|
+
- When a stream changes status (started / in review / blocked / done)
|
|
292
|
+
- When a coordinator opens or closes a stream from the backlog
|
|
293
|
+
|
|
294
|
+
**Example**:
|
|
295
|
+
|
|
296
|
+
```
|
|
297
|
+
/update-workstreams "Phase 2 auth stream: middleware done, RBAC next"
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
### `/check-task`
|
|
303
|
+
|
|
304
|
+
**Purpose**: Mark tasks as complete and update progress.
|
|
305
|
+
|
|
306
|
+
**What it does**:
|
|
307
|
+
|
|
308
|
+
1. Updates checkbox in task file (`- [ ]` → `- [x]`)
|
|
309
|
+
2. Updates progress statistics
|
|
310
|
+
3. Adds completion notes if significant
|
|
311
|
+
4. Optionally updates related files
|
|
312
|
+
|
|
313
|
+
**When to use**: After completing a task or sub-task.
|
|
314
|
+
|
|
315
|
+
**Example**:
|
|
316
|
+
|
|
317
|
+
```
|
|
318
|
+
/check-task 2.3
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
### Phase progress (no skill)
|
|
324
|
+
|
|
325
|
+
Phase progress is read-only — just ask ("what's the status of phase 2?") or run
|
|
326
|
+
`groundwork status` (or `node docs/.groundwork/scripts/phase-status.mjs [N]`) for a
|
|
327
|
+
deterministic, computed count. There's no dedicated skill.
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## File Locations
|
|
332
|
+
|
|
333
|
+
| IDE | Location | File Pattern |
|
|
334
|
+
| ----------- | ------------------------ | ------------------ |
|
|
335
|
+
| Claude Code | `.claude/skills/[name]/` | `SKILL.md` |
|
|
336
|
+
| Cursor | `.cursor/commands/` | `[name].md` |
|
|
337
|
+
| VS Code | `.vscode/prompts/` | `[name].prompt.md` |
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Tips for Effective Use
|
|
342
|
+
|
|
343
|
+
### Start Every Session Right
|
|
344
|
+
|
|
345
|
+
```
|
|
346
|
+
/start-session
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
This loads context and reminds you where you left off.
|
|
350
|
+
|
|
351
|
+
### Capture Decisions Immediately
|
|
352
|
+
|
|
353
|
+
When you make a technology choice, log it:
|
|
354
|
+
|
|
355
|
+
```
|
|
356
|
+
/log-decision "Chose Zustand over Redux for state management"
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
Future you will thank you.
|
|
360
|
+
|
|
361
|
+
### Keep Workstreams Updated
|
|
362
|
+
|
|
363
|
+
At the end of each session, or whenever a stream changes status:
|
|
364
|
+
|
|
365
|
+
```
|
|
366
|
+
/update-workstreams "Completed X, next up is Y"
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### Check Phase Progress for Planning
|
|
370
|
+
|
|
371
|
+
Before starting new work, run `groundwork status` to see what's left and what's blocked.
|
|
372
|
+
|
|
373
|
+
### Don't Skip the PRD
|
|
374
|
+
|
|
375
|
+
Even for small features:
|
|
376
|
+
|
|
377
|
+
```
|
|
378
|
+
/create-prd "Dark mode toggle"
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
It forces you to think through requirements before coding.
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
## Troubleshooting
|
|
386
|
+
|
|
387
|
+
### Commands not appearing in Cursor
|
|
388
|
+
|
|
389
|
+
- Ensure files are in `.cursor/commands/` (not `.cursor/prompts/`)
|
|
390
|
+
- Restart Cursor after adding new commands
|
|
391
|
+
- Check that files have `.md` extension
|
|
392
|
+
|
|
393
|
+
### Commands not appearing in VS Code
|
|
394
|
+
|
|
395
|
+
- Ensure files are in `.vscode/prompts/`
|
|
396
|
+
- Files must have `.prompt.md` extension
|
|
397
|
+
- Check the `mode` in frontmatter (`ask` or `edit`)
|
|
398
|
+
|
|
399
|
+
### Claude Code skills not working
|
|
400
|
+
|
|
401
|
+
- Skills must be in `.claude/skills/[name]/SKILL.md`
|
|
402
|
+
- Check the frontmatter format (`name`, `description` are required)
|
|
403
|
+
- **Do NOT set `disable-model-invocation`.** Groundwork skills are meant to be
|
|
404
|
+
**auto-executable** — the agent invokes them on its own when the `description`
|
|
405
|
+
matches the situation. Setting `disable-model-invocation: true` makes a skill
|
|
406
|
+
user-only (you'd have to type `/name`), which defeats the flow.
|
|
407
|
+
- A clear, action-oriented `description` is what lets the agent pick the right skill.
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
## Contributing
|
|
412
|
+
|
|
413
|
+
To add a new command:
|
|
414
|
+
|
|
415
|
+
1. Create the Claude Code skill in `.claude/skills/[name]/SKILL.md`
|
|
416
|
+
2. Create the Cursor command in `.cursor/commands/[name].md`
|
|
417
|
+
3. Create the VS Code prompt in `.vscode/prompts/[name].prompt.md`
|
|
418
|
+
4. Update this guide with the new command
|
|
419
|
+
5. Update the IDE-specific READMEs
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Architectural Decisions"
|
|
3
|
+
tags: [groundwork/reference]
|
|
4
|
+
aliases: ["DECISIONS", "ADR", "Decision Log"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Architectural Decision Records (ADRs)
|
|
8
|
+
|
|
9
|
+
> **Document the "why" behind significant technical decisions.**
|
|
10
|
+
|
|
11
|
+
ADRs capture context that's easy to forget: why we chose X over Y, what constraints existed, and what trade-offs we accepted. Future team members (and AI assistants) will thank you.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Decision Log
|
|
16
|
+
|
|
17
|
+
| ID | Decision | Status | Date |
|
|
18
|
+
| ------- | --------------------------------------------------------------- | -------- | ---------- |
|
|
19
|
+
| ADR-001 | [Monorepo with Turborepo](#adr-001-monorepo-with-turborepo) | Accepted | 2026-02-20 |
|
|
20
|
+
| ADR-002 | [React + Vite for Frontend](#adr-002-react--vite-for-frontend) | Accepted | 2026-02-20 |
|
|
21
|
+
| ADR-003 | [Node.js + Hono for Backend](#adr-003-nodejs--hono-for-backend) | Accepted | 2026-02-20 |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## ADR-001: Monorepo with Turborepo
|
|
26
|
+
|
|
27
|
+
**Status**: Accepted
|
|
28
|
+
**Date**: 2026-02-20
|
|
29
|
+
|
|
30
|
+
### Context
|
|
31
|
+
|
|
32
|
+
We need to manage frontend, backend, and shared packages in a cohesive way across the project.
|
|
33
|
+
|
|
34
|
+
### Decision
|
|
35
|
+
|
|
36
|
+
Use Turborepo with pnpm workspaces for monorepo management.
|
|
37
|
+
|
|
38
|
+
### Consequences
|
|
39
|
+
|
|
40
|
+
**Positive:**
|
|
41
|
+
|
|
42
|
+
- Shared TypeScript types between frontend and backend
|
|
43
|
+
- Parallel builds and caching speed up CI
|
|
44
|
+
- Single repository simplifies dependency management
|
|
45
|
+
- pnpm provides efficient disk usage with symlinks
|
|
46
|
+
|
|
47
|
+
**Negative:**
|
|
48
|
+
|
|
49
|
+
- Need to configure Turborepo pipeline
|
|
50
|
+
- All team members work in same repo
|
|
51
|
+
- Shared packages require careful versioning
|
|
52
|
+
|
|
53
|
+
### Alternatives Considered
|
|
54
|
+
|
|
55
|
+
| Alternative | Pros | Cons | Why Not |
|
|
56
|
+
| -------------- | ---------------------------------- | ------------------------------- | -------------------------- |
|
|
57
|
+
| Nx | More features, powerful generators | Steeper learning curve, heavier | Overkill for most projects |
|
|
58
|
+
| Lerna | Familiar, established | Legacy, less active development | Outdated patterns |
|
|
59
|
+
| Separate repos | Independent deployments | Friction for shared code | Coordination overhead |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## ADR-002: React + Vite for Frontend
|
|
64
|
+
|
|
65
|
+
**Status**: Accepted
|
|
66
|
+
**Date**: 2026-02-20
|
|
67
|
+
|
|
68
|
+
### Context
|
|
69
|
+
|
|
70
|
+
Need a frontend framework with fast iteration and a mature ecosystem.
|
|
71
|
+
|
|
72
|
+
### Decision
|
|
73
|
+
|
|
74
|
+
Use React 19 with Vite as the build tool and Tailwind CSS 4 for styling.
|
|
75
|
+
|
|
76
|
+
### Consequences
|
|
77
|
+
|
|
78
|
+
**Positive:**
|
|
79
|
+
|
|
80
|
+
- React's component model and ecosystem maturity
|
|
81
|
+
- Vite provides fast HMR essential for UI development
|
|
82
|
+
- Tailwind 4 with CSS-first config and design tokens
|
|
83
|
+
- Wide library support and team familiarity
|
|
84
|
+
|
|
85
|
+
**Negative:**
|
|
86
|
+
|
|
87
|
+
- Bundle size consideration for production
|
|
88
|
+
- Tailwind 4 is relatively new (CSS-based config)
|
|
89
|
+
|
|
90
|
+
### Alternatives Considered
|
|
91
|
+
|
|
92
|
+
| Alternative | Pros | Cons | Why Not |
|
|
93
|
+
| ----------- | ------------------------- | -------------------------------------- | ---------------------------------- |
|
|
94
|
+
| Next.js | Full-stack, SSR | SSR not always needed, adds complexity | Over-engineered for many use cases |
|
|
95
|
+
| Vue + Vite | Great DX, smaller bundle | Smaller ecosystem | Fewer libraries available |
|
|
96
|
+
| Svelte | Compiled, minimal runtime | Less mature ecosystem | Library ecosystem not ready |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## ADR-003: Node.js + Hono for Backend
|
|
101
|
+
|
|
102
|
+
**Status**: Accepted
|
|
103
|
+
**Date**: 2026-02-20
|
|
104
|
+
|
|
105
|
+
### Context
|
|
106
|
+
|
|
107
|
+
Need a fast, lightweight backend framework with excellent TypeScript support.
|
|
108
|
+
|
|
109
|
+
### Decision
|
|
110
|
+
|
|
111
|
+
Use Node.js runtime with Hono web framework.
|
|
112
|
+
|
|
113
|
+
### Consequences
|
|
114
|
+
|
|
115
|
+
**Positive:**
|
|
116
|
+
|
|
117
|
+
- Hono is lightweight, Web Standards-based (~14kb)
|
|
118
|
+
- TypeScript-first with excellent types
|
|
119
|
+
- Built-in middleware (CORS, logger, Zod validation)
|
|
120
|
+
- Portable across runtimes (Node, Bun, Deno, Cloudflare Workers)
|
|
121
|
+
|
|
122
|
+
**Negative:**
|
|
123
|
+
|
|
124
|
+
- Smaller ecosystem than Express
|
|
125
|
+
- Team needs to learn Hono patterns
|
|
126
|
+
|
|
127
|
+
### Alternatives Considered
|
|
128
|
+
|
|
129
|
+
| Alternative | Pros | Cons | Why Not |
|
|
130
|
+
| ----------- | ------------------------ | ------------------------------------- | ---------------------------------- |
|
|
131
|
+
| Express | Huge ecosystem, familiar | Legacy patterns, no native TypeScript | Dated patterns |
|
|
132
|
+
| Fastify | Fast, good TS support | More complex plugin system | Heavier than needed |
|
|
133
|
+
| Bun + Hono | Better performance | Bun still evolving, edge cases | Node.js more stable for production |
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## ADR Template
|
|
138
|
+
|
|
139
|
+
```markdown
|
|
140
|
+
## ADR-XXX: [Title]
|
|
141
|
+
|
|
142
|
+
**Status**: Proposed | Accepted | Rejected | Superseded by ADR-XXX
|
|
143
|
+
**Date**: YYYY-MM-DD
|
|
144
|
+
|
|
145
|
+
### Context
|
|
146
|
+
|
|
147
|
+
What is the issue that we're seeing that is motivating this decision?
|
|
148
|
+
|
|
149
|
+
### Decision
|
|
150
|
+
|
|
151
|
+
What is the change that we're proposing and/or doing?
|
|
152
|
+
|
|
153
|
+
### Consequences
|
|
154
|
+
|
|
155
|
+
**Positive:**
|
|
156
|
+
|
|
157
|
+
- Benefit 1
|
|
158
|
+
|
|
159
|
+
**Negative:**
|
|
160
|
+
|
|
161
|
+
- Trade-off 1
|
|
162
|
+
|
|
163
|
+
### Alternatives Considered
|
|
164
|
+
|
|
165
|
+
| Alternative | Pros | Cons | Why Not |
|
|
166
|
+
| ----------- | ---- | ---- | ------- |
|
|
167
|
+
| Option A | ... | ... | ... |
|
|
168
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Facts"
|
|
3
|
+
tags: [groundwork/core]
|
|
4
|
+
aliases: ["Facts", "Fact Store", "Verified Facts"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Facts
|
|
8
|
+
|
|
9
|
+
> **Verified project facts — the shared world-model.** One entry per settled question about
|
|
10
|
+
> this project's reality ("does X exist?", "is Y enabled?"). A claim belongs here only once
|
|
11
|
+
> it has been *verified*; everything else is a hypothesis that stays in conversation.
|
|
12
|
+
|
|
13
|
+
This is the seam file next to `[[QUEUE]]` (inbound), `[[WORKSTREAMS]]` (live), and
|
|
14
|
+
`[[DONE]]` (completion log): **FACTS.md** is the *settled* state — answers that were
|
|
15
|
+
verified once so they don't get re-derived, re-asserted, and drift. Useful solo,
|
|
16
|
+
essential with multiple agents.
|
|
17
|
+
|
|
18
|
+
**Write rules:**
|
|
19
|
+
|
|
20
|
+
- **One writer per fact:** whoever verified it writes it. A conflicting read replaces the
|
|
21
|
+
entry (don't append a duplicate id).
|
|
22
|
+
- Every entry carries **when**, **who**, and **how** it was verified. `groundwork doctor`
|
|
23
|
+
flags entries missing those, and entries older than 14 days.
|
|
24
|
+
- Other docs and messages **cite fact ids** instead of restating the claim.
|
|
25
|
+
- Re-verify on dispute or staleness — update the `verified:` line in place.
|
|
26
|
+
|
|
27
|
+
**Entry format (pinned — required, not just an example):**
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
- `fact-id` — the claim, stated so it stays true or false
|
|
31
|
+
verified: YYYY-MM-DDTHH:MMZ · by: who-verified · method: how it was verified
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
One fact per entry: stable kebab-case id in backticks · **em-dash `—` (U+2014)** · claim on
|
|
35
|
+
the first line; the indented second line uses **middot ` · ` (U+00B7)** separators — exact
|
|
36
|
+
glyphs, not ASCII. Parsers (doctor, `set-fact.mjs`, UIs) split on those glyphs.
|
|
37
|
+
|
|
38
|
+
## Facts
|
|
39
|
+
|
|
40
|
+
<!-- add entries in the pinned format above, e.g.:
|
|
41
|
+
- `auto-disavow-flag` — does NOT exist anywhere in the codebase
|
|
42
|
+
verified: 2026-07-02T14:30Z · by: disavow-worker-1 · method: git grep + gh api origin/main
|
|
43
|
+
-->
|