@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.
Files changed (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +323 -0
  3. package/docs/DECISIONS.md +170 -0
  4. package/package.json +38 -0
  5. package/payload/doc-templates/COMMANDS.md +419 -0
  6. package/payload/doc-templates/DECISIONS.md +168 -0
  7. package/payload/doc-templates/FACTS.md +43 -0
  8. package/payload/doc-templates/GROUNDWORK_METHODOLOGY.md +1300 -0
  9. package/payload/doc-templates/STACK_MAP.md +90 -0
  10. package/payload/doc-templates/WORKSTREAMS.md +79 -0
  11. package/payload/doc-templates/_INDEX.md +54 -0
  12. package/payload/doc-templates/phases/README.md +36 -0
  13. package/payload/doc-templates/phases/templates/README.md +63 -0
  14. package/payload/doc-templates/phases/templates/TASK_TEMPLATE.md +302 -0
  15. package/payload/doc-templates/phases/templates/task_template_prompt.md +229 -0
  16. package/payload/doc-templates/templates/ARCHITECTURE_GUIDE_TEMPLATE.md +250 -0
  17. package/payload/doc-templates/templates/DESIGN_SYSTEM_TEMPLATE.md +336 -0
  18. package/payload/doc-templates/templates/DONE_TEMPLATE.md +21 -0
  19. package/payload/doc-templates/templates/PHASES_README_TEMPLATE.md +144 -0
  20. package/payload/doc-templates/templates/PHASE_README_TEMPLATE.md +142 -0
  21. package/payload/doc-templates/templates/PRD_TEMPLATE.md +348 -0
  22. package/payload/doc-templates/templates/PRODUCTION_ROADMAP_TEMPLATE.md +168 -0
  23. package/payload/doc-templates/templates/QUEUE_TEMPLATE.md +17 -0
  24. package/payload/doc-templates/templates/TECH_STACK_TEMPLATE.md +199 -0
  25. package/payload/scripts/check-task.mjs +98 -0
  26. package/payload/scripts/check-versions.mjs +113 -0
  27. package/payload/scripts/phase-status.mjs +69 -0
  28. package/payload/scripts/set-fact.mjs +86 -0
  29. package/payload/skills/add-data-layer/SKILL.md +129 -0
  30. package/payload/skills/check-task/SKILL.md +35 -0
  31. package/payload/skills/check-versions/SKILL.md +47 -0
  32. package/payload/skills/create-prd/SKILL.md +90 -0
  33. package/payload/skills/domain-model/SKILL.md +90 -0
  34. package/payload/skills/kickstart/SKILL.md +157 -0
  35. package/payload/skills/log-decision/SKILL.md +65 -0
  36. package/payload/skills/next/SKILL.md +65 -0
  37. package/payload/skills/plan-phase/SKILL.md +108 -0
  38. package/payload/skills/remember/SKILL.md +77 -0
  39. package/payload/skills/start-session/SKILL.md +52 -0
  40. package/payload/skills/update-workstreams/SKILL.md +60 -0
  41. package/src/cli.mjs +115 -0
  42. package/src/commands/add.mjs +39 -0
  43. package/src/commands/artifacts.mjs +24 -0
  44. package/src/commands/doctor.mjs +292 -0
  45. package/src/commands/init.mjs +147 -0
  46. package/src/commands/knowledge.mjs +148 -0
  47. package/src/commands/list.mjs +61 -0
  48. package/src/commands/status.mjs +96 -0
  49. package/src/commands/update.mjs +128 -0
  50. package/src/lib/adr-tripwire.mjs +171 -0
  51. package/src/lib/artifacts.mjs +124 -0
  52. package/src/lib/config.mjs +43 -0
  53. package/src/lib/fs.mjs +46 -0
  54. package/src/lib/log.mjs +22 -0
  55. package/src/lib/paths.mjs +36 -0
  56. package/src/lib/progress.mjs +26 -0
  57. 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
+ -->