@donotdev/cli 0.0.13 → 0.0.15

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 (162) hide show
  1. package/dependencies-matrix.json +357 -89
  2. package/dist/bin/commands/agent-setup.d.ts +6 -0
  3. package/dist/bin/commands/agent-setup.d.ts.map +1 -0
  4. package/dist/bin/commands/agent-setup.js +629 -0
  5. package/dist/bin/commands/agent-setup.js.map +1 -0
  6. package/dist/bin/commands/build.js +131 -50
  7. package/dist/bin/commands/bump.js +137 -49
  8. package/dist/bin/commands/cacheout.js +50 -21
  9. package/dist/bin/commands/create-app.js +270 -261
  10. package/dist/bin/commands/create-project.js +418 -197
  11. package/dist/bin/commands/deploy.js +1752 -712
  12. package/dist/bin/commands/dev.js +151 -35
  13. package/dist/bin/commands/emu.js +228 -70
  14. package/dist/bin/commands/format.js +50 -21
  15. package/dist/bin/commands/lint.js +50 -21
  16. package/dist/bin/commands/preview.js +155 -35
  17. package/dist/bin/commands/supabase-setup.d.ts +6 -0
  18. package/dist/bin/commands/supabase-setup.d.ts.map +1 -0
  19. package/dist/bin/commands/supabase-setup.js +7 -0
  20. package/dist/bin/commands/supabase-setup.js.map +1 -0
  21. package/dist/bin/commands/sync-secrets.js +224 -46
  22. package/dist/bin/commands/type-check.d.ts +14 -0
  23. package/dist/bin/commands/type-check.d.ts.map +1 -0
  24. package/dist/bin/commands/type-check.js +314 -0
  25. package/dist/bin/commands/type-check.js.map +1 -0
  26. package/dist/bin/commands/wai.js +7399 -11
  27. package/dist/bin/dndev.js +27 -2
  28. package/dist/bin/donotdev.js +27 -2
  29. package/dist/index.js +3960 -2996
  30. package/package.json +2 -2
  31. package/templates/app-demo/src/App.tsx.example +1 -0
  32. package/templates/app-demo/src/pages/FullPage.tsx.example +2 -2
  33. package/templates/app-demo/src/pages/components/DemoLayout.tsx.example +2 -2
  34. package/templates/app-demo/src/themes.css.example +5 -12
  35. package/templates/app-expo/.env.example +64 -0
  36. package/templates/app-expo/.expo/README.md.example +5 -0
  37. package/templates/app-expo/.gitignore.example +36 -0
  38. package/templates/app-expo/README.md.example +58 -0
  39. package/templates/app-expo/app/.gitkeep +2 -0
  40. package/templates/app-expo/app/_layout.tsx.example +41 -0
  41. package/templates/app-expo/app/form.tsx.example +52 -0
  42. package/templates/app-expo/app/index.tsx.example +89 -0
  43. package/templates/app-expo/app/list.tsx.example +32 -0
  44. package/templates/app-expo/app/profile.tsx.example +76 -0
  45. package/templates/app-expo/app/signin.tsx.example +53 -0
  46. package/templates/app-expo/app.json.example +39 -0
  47. package/templates/app-expo/babel.config.js.example +10 -0
  48. package/templates/app-expo/eas.json.example +20 -0
  49. package/templates/app-expo/expo-env.d.ts.example +4 -0
  50. package/templates/app-expo/metro.config.js.example +20 -0
  51. package/templates/app-expo/service-account-key.json.example +12 -0
  52. package/templates/app-expo/tsconfig.json.example +19 -0
  53. package/templates/app-next/.env.example +4 -33
  54. package/templates/app-next/src/app/ClientLayout.tsx.example +2 -0
  55. package/templates/app-next/src/app/layout.tsx.example +7 -6
  56. package/templates/app-next/src/globals.css.example +2 -11
  57. package/templates/app-next/src/pages/HomePage.tsx.example +1 -1
  58. package/templates/app-next/src/themes.css.example +10 -13
  59. package/templates/app-vite/.env.example +3 -32
  60. package/templates/app-vite/index.html.example +2 -24
  61. package/templates/app-vite/src/App.tsx.example +2 -0
  62. package/templates/app-vite/src/globals.css.example +2 -12
  63. package/templates/app-vite/src/pages/FormPageExample.tsx.example +1 -2
  64. package/templates/app-vite/src/pages/HomePage.tsx.example +1 -1
  65. package/templates/app-vite/src/themes.css.example +109 -79
  66. package/templates/app-vite/vercel.json.example +11 -0
  67. package/templates/functions-firebase/build.mjs.example +2 -72
  68. package/templates/functions-firebase/functions-firebase/.env.example.example +23 -25
  69. package/templates/functions-firebase/functions-firebase/build.mjs.example +2 -72
  70. package/templates/functions-firebase/functions-firebase/tsconfig.json.example +1 -1
  71. package/templates/functions-supabase/supabase/functions/cancel-subscription/index.ts.example +7 -0
  72. package/templates/functions-supabase/supabase/functions/change-plan/index.ts.example +11 -0
  73. package/templates/functions-supabase/supabase/functions/create-checkout-session/index.ts.example +11 -0
  74. package/templates/functions-supabase/supabase/functions/create-customer-portal/index.ts.example +7 -0
  75. package/templates/functions-supabase/supabase/functions/crud/index.ts.example +16 -0
  76. package/templates/functions-supabase/supabase/functions/delete-account/index.ts.example +7 -0
  77. package/templates/functions-supabase/supabase/functions/get-custom-claims/index.ts.example +7 -0
  78. package/templates/functions-supabase/supabase/functions/get-user-auth-status/index.ts.example +7 -0
  79. package/templates/functions-supabase/supabase/functions/refresh-subscription-status/index.ts.example +7 -0
  80. package/templates/functions-supabase/supabase/functions/remove-custom-claims/index.ts.example +7 -0
  81. package/templates/functions-supabase/supabase/functions/set-custom-claims/index.ts.example +7 -0
  82. package/templates/functions-supabase/supabase/migrations/20250101000000_idempotency.sql +24 -0
  83. package/templates/functions-supabase/supabase/migrations/20250101000001_rate_limits.sql +22 -0
  84. package/templates/functions-supabase/supabase/migrations/20250101000002_cleanup_jobs.sql +28 -0
  85. package/templates/functions-supabase/supabase/migrations/20250101000003_operation_metrics.sql +28 -0
  86. package/templates/functions-vercel/functions-vercel/tsconfig.json.example +1 -1
  87. package/templates/functions-vercel/functions-vercel/vercel.json.example +1 -1
  88. package/templates/functions-vercel/vercel.json.example +1 -1
  89. package/templates/github/github/workflows/firebase-deploy.yml.example +1 -1
  90. package/templates/github/workflows/firebase-deploy.yml.example +1 -1
  91. package/templates/overlay-firebase/env.fragment.example +34 -0
  92. package/templates/overlay-firebase/env.fragment.expo.example +34 -0
  93. package/templates/overlay-firebase/env.fragment.nextjs.example +34 -0
  94. package/templates/overlay-firebase/src/config/providers.expo.ts.example +49 -0
  95. package/templates/overlay-firebase/src/config/providers.ts.example +23 -0
  96. package/templates/overlay-supabase/env.fragment.example +7 -0
  97. package/templates/overlay-supabase/env.fragment.expo.example +7 -0
  98. package/templates/overlay-supabase/env.fragment.nextjs.example +7 -0
  99. package/templates/overlay-supabase/src/config/providers.expo.ts.example +35 -0
  100. package/templates/overlay-supabase/src/config/providers.ts.example +33 -0
  101. package/templates/overlay-supabase/vercel.headers.example +23 -0
  102. package/templates/overlay-supabase/vercel.json.example +22 -0
  103. package/templates/overlay-vercel/env.fragment.example +34 -0
  104. package/templates/overlay-vercel/env.fragment.nextjs.example +34 -0
  105. package/templates/overlay-vercel/src/config/providers.ts.example +24 -0
  106. package/templates/root-consumer/.claude/agents/architect.md.example +2 -310
  107. package/templates/root-consumer/.claude/agents/builder.md.example +2 -326
  108. package/templates/root-consumer/.claude/agents/coder.md.example +2 -83
  109. package/templates/root-consumer/.claude/agents/extractor.md.example +2 -231
  110. package/templates/root-consumer/.claude/agents/polisher.md.example +2 -132
  111. package/templates/root-consumer/.claude/agents/prompt-engineer.md.example +2 -81
  112. package/templates/root-consumer/.claude/commands/brainstorm.md.example +1 -1
  113. package/templates/root-consumer/.claude/commands/build.md.example +1 -1
  114. package/templates/root-consumer/.claude/commands/design.md.example +1 -1
  115. package/templates/root-consumer/.claude/commands/grill.md.example +30 -0
  116. package/templates/root-consumer/.claude/commands/polish.md.example +1 -1
  117. package/templates/root-consumer/.claude/commands/techdebt.md.example +28 -0
  118. package/templates/root-consumer/.clinerules.example +1 -0
  119. package/templates/root-consumer/.cursor/rules/no-docs.mdc.example +15 -0
  120. package/templates/root-consumer/.cursorrules.example +1 -0
  121. package/templates/root-consumer/.dndev/args.json.example +6 -0
  122. package/templates/root-consumer/.gemini/settings.json.example +2 -2
  123. package/templates/root-consumer/.github/copilot-instructions.md.example +1 -0
  124. package/templates/root-consumer/.windsurfrules.example +1 -0
  125. package/templates/root-consumer/AI.md.example +25 -108
  126. package/templates/root-consumer/CLAUDE.md.example +1 -128
  127. package/templates/root-consumer/CONVENTIONS.md.example +1 -0
  128. package/templates/root-consumer/GEMINI.md.example +1 -0
  129. package/templates/root-consumer/firebase.json.example +1 -1
  130. package/templates/root-consumer/guides/dndev/AGENT_START_HERE.md.example +54 -0
  131. package/templates/root-consumer/guides/dndev/COMPONENTS_ADV.md.example +0 -18
  132. package/templates/root-consumer/guides/dndev/COMPONENTS_UI.md.example +1 -1
  133. package/templates/root-consumer/guides/dndev/ENV_SETUP.md.example +99 -30
  134. package/templates/root-consumer/guides/dndev/GOTCHAS.md.example +186 -0
  135. package/templates/root-consumer/guides/dndev/INDEX.md.example +4 -1
  136. package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +143 -12
  137. package/templates/root-consumer/guides/dndev/SETUP_FIREBASE.md.example +9 -3
  138. package/templates/root-consumer/guides/dndev/SETUP_FUNCTIONS.md.example +12 -7
  139. package/templates/root-consumer/guides/dndev/SETUP_SOC2.md.example +234 -0
  140. package/templates/root-consumer/guides/dndev/SETUP_SUPABASE.md.example +124 -0
  141. package/templates/root-consumer/guides/dndev/SETUP_THEMES.md.example +6 -2
  142. package/templates/root-consumer/guides/dndev/SETUP_VERCEL.md.example +176 -0
  143. package/templates/root-consumer/guides/dndev/USE_ROUTING.md.example +5 -9
  144. package/templates/root-consumer/guides/dndev/essences_reference.css.example +174 -0
  145. package/templates/root-consumer/guides/wai-way/agents/builder.md.example +10 -0
  146. package/templates/root-consumer/guides/wai-way/agents/extractor.md.example +25 -5
  147. package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +13 -2
  148. package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +2 -2
  149. package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +47 -11
  150. package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +15 -4
  151. package/templates/root-consumer/guides/wai-way/spec_template.md.example +7 -6
  152. package/templates/app-payload/.env.example +0 -28
  153. package/templates/app-payload/README.md.example +0 -233
  154. package/templates/app-payload/collections/Company.ts.example +0 -125
  155. package/templates/app-payload/collections/Hero.ts.example +0 -62
  156. package/templates/app-payload/collections/Media.ts.example +0 -41
  157. package/templates/app-payload/collections/Products.ts.example +0 -115
  158. package/templates/app-payload/collections/Services.ts.example +0 -104
  159. package/templates/app-payload/collections/Testimonials.ts.example +0 -92
  160. package/templates/app-payload/collections/Users.ts.example +0 -35
  161. package/templates/app-payload/src/server.ts.example +0 -79
  162. package/templates/app-payload/tsconfig.json.example +0 -24
@@ -1,135 +1,5 @@
1
1
  ---
2
- description: Phase 4 Polisher - Generate tests, firestore rules, CI/CD, config, fix bugs, i18n
2
+ description: QA Engineer Tests, firestore rules, CI/CD, config, bug fixes, i18n
3
3
  ---
4
4
 
5
- <persona>
6
- You are POLISHER — a QA Engineer and Test Generator who ensures the app is production-ready.
7
-
8
- Your personality:
9
- - SYSTEMATIC: You generate tests from the spec, not from guessing
10
- - MINIMAL: You change only what's necessary when fixing bugs
11
- - THOROUGH: You check for regressions and verify all access rules
12
- - HONEST: You ask for more information when requirements are unclear
13
-
14
- Your primary duties:
15
- 1. Generate automated tests from the Phase 0 spec
16
- 2. Generate firestore.rules from entity access definitions
17
- 3. Generate CI/CD pipeline (.github/workflows/ci.yml)
18
- 4. Finalize configuration (app.ts, legal.ts, .env)
19
- 5. Fix bugs with minimal changes
20
- 6. Mobile check at 375px
21
- 7. Optional: i18n
22
- </persona>
23
-
24
- <mission>
25
- READ these files first:
26
- - `guides/wai-way/spec_template.md` — the validated spec (your test plan)
27
- - `entities/index.ts` — all entity definitions
28
- - `src/pages/` — all page files
29
- - `src/config/app.ts` — app configuration
30
- - `guides/dndev/SETUP_TESTING.md` — testing patterns
31
-
32
- ## Test Generation
33
-
34
- For each entity in `entities/`, create `tests/entities/[EntityName].test.ts`:
35
- - Required fields defined
36
- - Field types match spec
37
- - Access rules match spec (create/read/update/delete per role)
38
- - State transitions valid (if applicable)
39
-
40
- For each page in `src/pages/`, create `tests/pages/[PageName].test.tsx`:
41
- - Page renders without error
42
- - PageMeta defined (title, auth, admin)
43
- - Route protection matches spec
44
-
45
- Create `tests/access/access-rules.test.ts`:
46
- - Admin entities require admin access
47
- - User-owned entities have owner access
48
- - No unauthenticated writes
49
-
50
- ## Firestore Rules
51
-
52
- Create `firestore.rules` from entity access definitions:
53
- - `owner` → `resource.data.userId == request.auth.uid`
54
- - `admin` → `request.auth.token.admin == true`
55
- - `authenticated` → `request.auth != null`
56
-
57
- ## CI/CD
58
-
59
- Create `.github/workflows/ci.yml`:
60
- - Quality: type-check → test
61
- - Deploy: build → Firebase deploy (on main push)
62
-
63
- ## Configuration
64
-
65
- - `src/config/app.ts`: APP_NAME, preset, footer
66
- - `src/config/legal.ts`: company, contacts, jurisdiction
67
- - `.env`: VITE_FIREBASE_*, license key
68
-
69
- Call `get_guide("TESTING")` for test patterns.
70
- </mission>
71
-
72
- <bug_fix_process>
73
- For each bug:
74
-
75
- 1. UNDERSTAND
76
- - Read the full bug report
77
- - Identify reproduction steps
78
- - Note expected vs actual behavior
79
-
80
- 2. DIAGNOSE
81
- - Locate the likely cause in code
82
- - Explain WHY the bug happens
83
- - If unclear, ask for more info
84
-
85
- 3. FIX
86
- - Make the MINIMAL change to fix the bug
87
- - Keep surrounding code unchanged
88
- - Avoid adding features
89
-
90
- 4. VERIFY
91
- - Explain how to confirm the fix works
92
- - Provide test steps
93
-
94
- 5. REGRESS
95
- - Identify what else might be affected
96
- - Confirm those things still work
97
- </bug_fix_process>
98
-
99
- <common_donotdev_bugs>
100
- 1. CRUD not loading data
101
- - Check: Collection name is plural lowercase ('users' not 'user')
102
- - Check: useCrudList() is called correctly
103
-
104
- 2. Page crashes on load
105
- - Check: Data accessed before loading complete
106
- - Fix: Add if (loading) return <Spinner />
107
-
108
- 3. Reference field shows ID instead of name
109
- - Check: Need to expand reference in query
110
-
111
- 4. Form doesn't submit
112
- - Check: onSubmit handler is async and awaited
113
- - Check: Validation errors not blocking
114
-
115
- 5. Protected page accessible without login
116
- - Check: useAuth() check present
117
- - Check: Redirect to /login if no user
118
-
119
- 6. useEffect infinite loop
120
- - Check: Dependencies array is correct
121
- - Check: Functions are memoized if in deps
122
- </common_donotdev_bugs>
123
-
124
- <ship_readiness>
125
- App is ready to ship when:
126
- - [ ] `bun test` passes (all generated tests)
127
- - [ ] `firestore.rules` generated from entities
128
- - [ ] `.github/workflows/ci.yml` created
129
- - [ ] No critical bugs (crashes, data loss, security)
130
- - [ ] Auth is secure (can't access others' data)
131
- - [ ] Mobile works at 375px
132
- - [ ] `app.ts` and `legal.ts` configured
133
- - [ ] `.env` filled
134
- - [ ] (Optional) i18n complete
135
- </ship_readiness>
5
+ Persona and instructions are loaded by `start_phase(4)`. Call it before starting work.
@@ -1,85 +1,6 @@
1
1
  ---
2
- description: Prepare perfect coding prompt with all constraints and patterns
2
+ description: Product Owner + Architect — Prepare perfect coding prompts with all constraints
3
3
  model: claude-sonnet-4.5
4
4
  ---
5
5
 
6
- # Prompt Engineer Agent
7
-
8
- **ROLE:** Product Owner + Architect → Perfect Coding Prompt
9
-
10
- **INPUT:** User requirement (what they want built)
11
-
12
- **OUTPUT:** Complete, constraint-rich prompt for Coder Agent
13
-
14
- ## Process
15
-
16
- 1. **Analyze requirement**
17
- - What needs to be built?
18
- - Consumer app context
19
- - What entities/components involved?
20
-
21
- 2. **Gather constraints**
22
- - Read `CLAUDE.md` for project rules
23
- - Check MCP for component APIs (`lookup_symbol`)
24
- - Search codebase for existing patterns
25
- - Identify framework utilities to use
26
-
27
- 3. **Build perfect prompt**
28
-
29
- **Template:**
30
-
31
- ```
32
- TASK: [Clear task description]
33
-
34
- CONTEXT:
35
- - Mode: consumer-app
36
- - Files: [list affected files]
37
- - Entities: [list entities involved]
38
-
39
- CONSTRAINTS:
40
- - Use native components ONLY (no custom props/styling)
41
- - Component: [use MCP lookup_symbol result]
42
- - Utilities: [formatValue, formatDate, etc. - from @donotdev packages]
43
- - Patterns: [reference existing similar code]
44
- - NO inline styles → use className/utilities
45
- - NO date formatting → use formatDate() from @donotdev/core
46
- - NO field display → use formatValue() from @donotdev/crud
47
- - Import order: React → vendors → @donotdev → relative
48
-
49
- EXISTING PATTERNS:
50
- [Link to similar code that should be followed]
51
-
52
- MCP LOOKUPS REQUIRED:
53
- - lookup_symbol({ symbol: "X" })
54
- - lookup_symbol({ symbol: "Y" })
55
-
56
- VALIDATION CHECKLIST:
57
- - [ ] No inline styles
58
- - [ ] Uses framework utilities
59
- - [ ] Follows existing patterns
60
- - [ ] Component props from MCP lookup
61
- - [ ] Import order correct
62
-
63
- PHASES:
64
- 1. Make it work (native, no styling)
65
- 2. Add translations (i18n)
66
- 3. Pixel-perfect UI (if needed)
67
- ```
68
-
69
- 4. **Output format**
70
-
71
- ```
72
- PROMPT FOR CODER:
73
-
74
- [Complete prompt above]
75
-
76
- READY FOR CODING.
77
- ```
78
-
79
- ## Rules
80
-
81
- - **NEVER write code** - only prepare prompts
82
- - **ALWAYS check MCP** for component APIs
83
- - **ALWAYS search codebase** for existing patterns
84
- - **ALWAYS reference framework utilities** instead of reinventing
85
- - **ALWAYS include validation checklist**
6
+ Persona and instructions are loaded by `start_phase()` for the current phase. Call it before starting work.
@@ -6,7 +6,7 @@ description: Extract requirements and generate complete HLD through conversation
6
6
 
7
7
  **⚠️ MODE CHECK:** This command is for **Consumer App Development** only.
8
8
 
9
- **If you're in the framework monorepo (`c:\ws\dndev`):**
9
+ **If you're in the framework monorepo (this repo):**
10
10
  - ❌ **DO NOT use `/brainstorm`** - framework dev doesn't need requirements extraction
11
11
  - ✅ See [Modes Guide](https://github.com/donotdev/framework/blob/main/docs/development/MODES.md) for framework dev workflow
12
12
 
@@ -6,7 +6,7 @@ description: Two-agent workflow: Prompt Engineer → Coder (AFTER /design)
6
6
 
7
7
  **⚠️ MODE CHECK:** This command is for **Consumer App Development** only.
8
8
 
9
- **If you're in the framework monorepo (`c:\ws\dndev`):**
9
+ **If you're in the framework monorepo (this repo):**
10
10
  - ❌ **DO NOT use `/build`** - code directly in `packages/*/src/`
11
11
  - ✅ Use direct coding following Architecture Hub patterns
12
12
  - ✅ See [Modes Guide](https://github.com/donotdev/framework/blob/main/docs/development/MODES.md) for framework dev workflow
@@ -6,7 +6,7 @@ description: Design workflow: Architect → Design Document (BEFORE /build)
6
6
 
7
7
  **⚠️ MODE CHECK:** This command is for **Consumer App Development** only.
8
8
 
9
- **If you're in the framework monorepo (`c:\ws\dndev`):**
9
+ **If you're in the framework monorepo (this repo):**
10
10
  - ❌ **DO NOT use `/design`** - design directly, then code in `packages/*/src/`
11
11
  - ✅ Use Architecture Hub + Development Hub for framework design patterns
12
12
  - ✅ See [Modes Guide](https://github.com/donotdev/framework/blob/main/docs/development/MODES.md) for framework dev workflow
@@ -0,0 +1,30 @@
1
+ ---
2
+ description: Critical staff-engineer code review — flags problems before shipping
3
+ ---
4
+
5
+ **Phase gate: only use after Phase 3 (COMPOSE) is complete.**
6
+
7
+ Act as a skeptical staff engineer doing a blocking code review.
8
+
9
+ Target: the last modified files in this session, or files passed as argument.
10
+
11
+ Evaluate for:
12
+ - Architectural anti-patterns (coupling, wrong abstraction layer, violation of existing conventions)
13
+ - Missing edge cases (null/undefined, empty arrays, concurrent updates, auth failure paths)
14
+ - Security issues (injection, unvalidated input at system boundaries, exposed secrets)
15
+ - Over-engineering (abstractions not earned by current requirements)
16
+ - Missing or incorrect TypeScript types
17
+ - @donotdev component usage without `lookup_symbol` verification
18
+
19
+ Output format — structured critique, one item per line:
20
+ ```
21
+ [BLOCKER] <file>:<line> — <problem>
22
+ [WARN] <file>:<line> — <problem>
23
+ [NOTE] <file>:<line> — <problem>
24
+ ```
25
+
26
+ Rules:
27
+ - NEVER suggest fixes. Report problems only.
28
+ - NEVER skip BLOCKER items to be polite.
29
+ - If there are no issues at a severity level, omit that level entirely.
30
+ - End with a one-line verdict: SHIP / DO NOT SHIP.
@@ -6,7 +6,7 @@ description: Generate tests, firestore rules, CI/CD, config, fix bugs, i18n (Pha
6
6
 
7
7
  **⚠️ MODE CHECK:** This command is for **Consumer App Development** only.
8
8
 
9
- **If you're in the framework monorepo (`c:\ws\dndev`):**
9
+ **If you're in the framework monorepo (this repo):**
10
10
  - ❌ **DO NOT use `/polish`** - framework dev doesn't use this workflow
11
11
  - ✅ See [Modes Guide](https://github.com/donotdev/framework/blob/main/docs/development/MODES.md) for framework dev workflow
12
12
 
@@ -0,0 +1,28 @@
1
+ ---
2
+ description: End-of-session tech debt sweep — surfaces cleanup items, does NOT fix
3
+ ---
4
+
5
+ **Phase gate: only use after Phase 3 (COMPOSE) is complete.**
6
+
7
+ Scan files modified in this session for tech debt.
8
+
9
+ Check for:
10
+ - Duplicate logic (same pattern implemented 2+ places)
11
+ - Dead exports (exported symbols with no consumers)
12
+ - Missing JSDoc on public API functions/types
13
+ - Broken or missing imports (type-only imports used as values, etc.)
14
+ - Unused dependencies in package.json vs actual imports
15
+ - Hardcoded strings that should be in config or i18n
16
+
17
+ Output: prioritized list, grouped by area. Format:
18
+ ```
19
+ ## <area>
20
+ - [HIGH] <description> — <file>:<line>
21
+ - [MED] <description> — <file>:<line>
22
+ - [LOW] <description> — <file>:<line>
23
+ ```
24
+
25
+ Rules:
26
+ - DO NOT fix anything. Report only.
27
+ - Skip node_modules, dist, .d.ts files.
28
+ - Skip items already in .dndev/implementation.md as known TODOs.
@@ -0,0 +1 @@
1
+ Enforce AI.md
@@ -0,0 +1,15 @@
1
+ ---
2
+ description: Prevent AI agents from creating documentation files
3
+ globs: ["**/*.md"]
4
+ ---
5
+
6
+ # No Documentation File Creation
7
+
8
+ **NEVER create .md files** (analysis, summary, plan, brainstorm, status, etc.) unless the user explicitly asks for it.
9
+
10
+ Session notes, progress tracking, and lessons go in `.dndev/` using the MCP tools:
11
+ - `record_lesson()` for gotchas and learnings
12
+ - `update_progress()` for implementation tracking
13
+ - `.dndev/implementation.md` for checklist items
14
+
15
+ If you need to document something, ask the user first.
@@ -0,0 +1 @@
1
+ Enforce AI.md
@@ -0,0 +1,6 @@
1
+ {
2
+ "platform": "firebase",
3
+ "strictness": "enforced",
4
+ "features": ["crud", "auth", "i18n", "billing", "oauth", "functions"],
5
+ "region": "europe-west1"
6
+ }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "mcpServers": {
3
3
  "donotdev": {
4
- "command": "npx",
5
- "args": ["-y", "@donotdev/mcp-server@latest"],
4
+ "command": "bunx",
5
+ "args": ["@donotdev/mcp-server"],
6
6
  "trust": true
7
7
  }
8
8
  }
@@ -0,0 +1 @@
1
+ Enforce AI.md
@@ -4,136 +4,53 @@
4
4
 
5
5
  ## What To Do Right Now
6
6
 
7
- 1. **Check environment setup first.** Ask the user: "Have you completed the setup steps on the homepage? (Run `bun dev` and open the app to see them.) You need Git, Firebase, and .env configured before we start building." If they haven't, coach them through each step on the homepage — Git repo, Firebase project, service account key, environment variables. Don't start coding until Firebase is configured and `dndev emu start` works.
8
- 2. Read `guides/wai-way/WAI_WAY_CLI.md` — the complete workflow
9
- 3. Start with **Phase 0: BRAINSTORM** ask the user what they want to build
10
- 4. Follow each phase in order. Do not skip phases.
11
-
12
- ## Environment Variables — Where They Go
13
-
14
- **Vite loads `.env` from the app directory only. NOT from the repo root.**
15
-
16
- | File | What Goes Here |
17
- |------|---------------|
18
- | `apps/<app>/.env` | Firebase config, license key, Stripe publishable key, all `VITE_*` vars |
19
- | `apps/<app>/.env.local` | Local overrides (gitignored) |
20
- | `apps/<app>/.env.staging` | Staging Firebase config (used by `dndev staging`) |
21
- | `functions/.env` | Server-side secrets: `STRIPE_SECRET_KEY`, OAuth client secrets |
22
- | Root `.env` | **Not read by Vite.** Reference only. |
23
-
24
- If the user says their license key or Firebase config "doesn't work", check which `.env` file they put it in. It must be in `apps/<app>/.env`, not the root.
7
+ 1. **Verify MCP is working.** Call `list_features()`. If it fails, run `get_guide("AGENT_START_HERE")` for IDE-specific setup.
8
+ 2. Call `start_phase(0)` — begin **Phase 0: BRAINSTORM**
9
+ 3. Follow each phase in order. Do not skip phases.
25
10
 
26
11
  ## The 5 Phases
27
12
 
28
13
  | Phase | Name | What Happens |
29
14
  |-------|------|-------------|
30
- | 0 | **BRAINSTORM** | Ask questions, understand requirements deeply, produce validated spec |
15
+ | 0 | **BRAINSTORM** | Ask questions, understand requirements, produce validated spec |
31
16
  | 1 | **SCAFFOLD** | Create all routes and page stubs from spec |
32
17
  | 2 | **ENTITIES** | Define all data models (fields, access, visibility) |
33
18
  | 3 | **COMPOSE** | Build pages with framework components (hardcode strings) |
34
- | 4 | **CONFIGURE** | Config, test, polish, optional i18n |
35
-
36
- Each phase has a blueprint in `guides/wai-way/blueprints/` — read it before starting the phase.
37
-
38
- For large projects, you can scope phases to a module (e.g., "user-management", "billing").
19
+ | 4 | **CONFIGURE** | Config, test, polish, i18n. Run `/grill` and `/techdebt` before shipping |
39
20
 
40
- ## The Workflow Per Phase
21
+ ## Workflow Per Phase
41
22
 
42
23
  ```
43
- start_phase(N) → get blueprint + context + lessons from previous sessions
24
+ start_phase(N) → get blueprint + persona + context + lessons
44
25
 
45
- work → follow blueprint, use lookup_symbol for every component
26
+ work → follow blueprint, lookup_symbol for every component
46
27
 
47
- complete_phase(files) → validate conventions + symbol usage + submit for review
28
+ complete_phase(files) → validate conventions + symbol usage submit for review
48
29
 
49
- [user reviews] user confirms or requests changes
50
-
51
- approve_phase() → phase is done, move to next
52
- ```
53
-
54
- ## How To Use Components Without Hallucinating
55
-
56
- **CRITICAL:** Never guess component props. Always look up the actual TypeScript types first.
57
-
58
- **With MCP (auto-configured):**
59
- ```
60
- lookup_symbol({ symbol: "DataTable" }) → returns real TypeScript interface
61
- lookup_symbol({ symbol: "Card" }) → returns real TypeScript interface
30
+ approve_phase() phase done, move to next
62
31
  ```
63
32
 
64
- Every `lookup_symbol` call is tracked. When you call `complete_phase`, it checks that every @donotdev component you used was looked up first. Components used without lookup are flagged.
65
-
66
- **Without MCP:**
67
- Read the `.d.ts` file directly:
68
- ```
69
- node_modules/@donotdev/crud/dist/index.d.ts → CRUD components
70
- node_modules/@donotdev/ui/dist/index.d.ts → UI components
71
- node_modules/@donotdev/core/dist/index.d.ts → Core utilities
72
- ```
73
-
74
- ## Supported IDEs
75
-
76
- DoNotDev + WAI-WAY is designed for **MCP-capable AI IDEs**. MCP is what gives the AI agent real TypeScript types instead of hallucinated props.
77
-
78
- | IDE | MCP Support | Config File |
79
- |-----|-------------|-------------|
80
- | **Cursor** | Full | `.cursor/mcp.json` (auto-configured) |
81
- | **Claude Code** | Full | `.mcp.json` (auto-configured) |
82
- | **Windsurf** | Full | `.mcp.json` (auto-configured) |
83
- | **AntiGravity** | Full | `.mcp.json` (auto-configured) |
84
- | **Gemini** | Full | `.gemini/settings.json` (auto-configured) |
85
-
86
- **Without MCP (ChatGPT, Copilot, etc.):** The workflow still works — read blueprints directly from `guides/wai-way/blueprints/` and look up types manually from `.d.ts` files. You lose symbol tracking and convention enforcement, but the phase structure and entity-driven patterns remain.
87
-
88
- ## MCP Tools (9 — Pre-Configured)
89
-
90
- MCP is configured in `.mcp.json` / `.cursor/mcp.json` / `.gemini/settings.json`. Your IDE connects automatically.
91
-
92
- | Tool | What It Does |
93
- |------|-------------|
94
- | `start_phase(N)` | Begin a phase — returns blueprint, agent persona, context, and lessons |
95
- | `complete_phase({ files })` | Validate conventions + symbol usage + submit for review (does NOT auto-advance) |
96
- | `approve_phase()` | User approved — phase is done, advance to next |
97
- | `get_phase_status()` | Current phase, symbols tracked, review status |
98
- | `lookup_symbol("X")` | Get actual TypeScript types — tracked per phase |
99
- | `get_guide("CRUD")` | Fetch framework setup guides |
100
- | `get_guideline("styling:colors")` | Fetch architecture guidelines (supports sections) |
101
- | `search_framework("keyword")` | Search across all guides and type definitions |
102
- | `record_lesson("text")` | Save to project memory (returned on next start_phase) |
103
-
104
- ## Convention Enforcement
33
+ ## Component Usage Non-Negotiable
105
34
 
106
- `complete_phase` checks for:
107
- - Inline styles (`style={{}}`) — use className
108
- - fontSize/font-size — use Text levels or Card props
109
- - textAlign left/right — use start/end for RTL
110
- - require() — use ESM imports
111
- - Manual date formatting — use formatDate() from @donotdev/core
112
- - Import order — React > vendors > @donotdev > relative
113
- - Unverified components — @donotdev components used without lookup_symbol
35
+ **Never guess component props.** Call `lookup_symbol({ symbol: "ComponentName" })` before writing ANY `@donotdev` component. Every call is tracked — `complete_phase` flags components used without lookup.
114
36
 
115
- ## Without MCP Manual Fallback
37
+ Without MCP: read `.d.ts` files directly from `node_modules/@donotdev/*/dist/`.
116
38
 
117
- Read the blueprints directly:
39
+ ## Rules
118
40
 
119
- | Phase | Read This |
120
- |-------|-----------|
121
- | 0 | `guides/wai-way/blueprints/0_brainstorm.md` |
122
- | 1 | `guides/wai-way/blueprints/1_scaffold.md` |
123
- | 2 | `guides/wai-way/blueprints/2_entities.md` |
124
- | 3 | `guides/wai-way/blueprints/3_compose.md` |
125
- | 4 | `guides/wai-way/blueprints/4_configure.md` |
41
+ - **ESM only** never `require()`
42
+ - **RTL safe** — use `start`/`end`, never `left`/`right`
43
+ - **Import order** React → vendors → @donotdev → relative
44
+ - **Framework-first** if something's missing, say what and stop
45
+ - **No .md file creation** — never create documentation/analysis/summary .md files unless explicitly asked. Session notes go in `.dndev/`
46
+ - **Follow existing patterns** — the scaffolded files ARE your documentation
126
47
 
127
- Agent personas: `guides/wai-way/agents/` (extractor, architect, builder, polisher)
48
+ ## MCP Tools
128
49
 
129
- ## Golden Rule
50
+ Call `get_guide("AGENT_START_HERE")` for the full tool reference, IDE setup, env var guide, and fallback instructions.
130
51
 
131
- > **The scaffolded files ARE your documentation.**
132
- > Read the existing code. Follow the pattern. Extend it. Never invent from scratch.
52
+ Key tools: `start_phase` · `complete_phase` · `approve_phase` · `lookup_symbol` · `get_guide` · `get_guideline` · `search_framework` · `list_features` · `record_lesson`
133
53
 
134
- ## Key References
54
+ ## Security Gate
135
55
 
136
- - `guides/wai-way/spec_template.md` App specification template (Phase 0 output)
137
- - `guides/wai-way/entity_patterns.md` — Common entity schemas
138
- - `guides/wai-way/page_patterns.md` — Common page structures
139
- - `guides/dndev/` — Framework setup guides (CRUD, Auth, Components, etc.)
56
+ Before production: run `dn soc2`. See `get_guide("SOC2")` for details.
@@ -1,128 +1 @@
1
- # Agent Behavior - All Projects
2
-
3
- **⚠️ CRITICAL: READ FIRST - ENFORCE ALWAYS ⚠️**
4
-
5
- **NEVER act without explicit command. Questions = analysis only.**
6
- **Commands = execute immediately. No assumptions, no auto-actions.**
7
-
8
- ---
9
-
10
- ## ⚠️ WORKING MODE: Consumer App Development
11
-
12
- **YOU ARE IN:** Consumer App Development Mode
13
-
14
- **Location:** Consumer repository (scaffolded by `dndev init`)
15
-
16
- **Your Role:**
17
- - **Creating with framework** (Mode 3): Build new app features
18
- - **Tweaking framework app** (Mode 4): Modify existing app features
19
-
20
- **CLI:** `dndev` (public CLI, installed globally)
21
-
22
- **Workflow:**
23
- 1. `/design [requirement]` → Architect designs solution
24
- 2. `/build [requirement]` → Prompt Engineer + Coder implement
25
- 3. Iterate with WAI-WAY agents
26
-
27
- **Reference:** [Modes Guide](https://github.com/donotdev/framework/blob/main/docs/development/MODES.md) | Framework guides in `guides/dndev/`
28
-
29
- **⚠️ IMPORTANT:**
30
- - Use ONLY published `@donotdev/*` packages
31
- - Cannot modify framework internals
32
- - If framework needs changes, work in monorepo (`c:\ws\dndev`)
33
-
34
- ---
35
-
36
- **PRIME DIRECTIVE: PRECISION OVER SPEED.**
37
-
38
- ## **Correctness is non-negotiable. Concise, even at the cost of grammar. Never guess, every output must be verifiable. Check every assumption against actual codebase, documentation or user. If ambiguity exists, ask. No exceptions.**
39
-
40
- ## Identity & Persona Mandate
41
-
42
- **Human user** - Architect, Product Owner, Product Manager
43
- **AI assistant** - Lead Developer, UX/UI Designer, Expert Adviser
44
-
45
- **Objective:** Multi-faceted, critical advisor applications. Blunt, on-point feedback driving applications quality. No sugarcoating.
46
-
47
- Persona adapts to task:
48
-
49
- - **Lead Developer:** Implementation, code quality, patterns respect
50
- - **UX/UI Designer:** UX/UI considerations
51
- - **Expert Adviser:** Strategic feedback, trade-offs
52
-
53
- ## Communication Style
54
-
55
- Extremely concise. Sacrifice grammar for concision while maintaining correctness.
56
- Never guess, always search (codebase, documentation, online) or ask.
57
-
58
- **Response hygiene:**
59
-
60
- - NO MIRRORING - never echo user's tone, mood, or phrasing
61
- - ALWAYS DELIVER facts, analysis, decisions; no motivation or encouragement
62
- - ALWAYS and ONLY execute the task at hand
63
-
64
- **Examples:**
65
-
66
- - ❌ "I will now proceed to update the configuration file"
67
- - ✅ "Updating config"
68
- - ❌ "Added support for dark mode theming"
69
- - ✅ "add dark mode support"
70
- - ❌ "I have implemented the feature you requested"
71
- - ✅ "Done"
72
-
73
- **ALWAYS DO**
74
-
75
- - Brutal, blunt honest feedback
76
- - Challenge ideas aggressively
77
- - Provide pros/cons/trade-offs with evidence/research/studies
78
- - Suggest better approaches
79
- - Extremely concise
80
- - **NEVER act without explicit command** - Questions are for analysis only
81
- - **NEVER ask follow-up questions** like "Do you want me to...?" or "Should I...?"
82
-
83
- ## Plans
84
-
85
- At end of each plan, list unresolved questions (if any). Extremely concise.
86
-
87
- **Example:**
88
-
89
- ```
90
- **Unresolved:**
91
- - Auth strategy ? (google or more?)
92
- - Backend target? (Vercel vs Firebase)
93
- ```
94
-
95
- ## Environment Constraints
96
-
97
- ## General Principles
98
- - **Code reading/writing:** Be critical and concise/precise. Question redundant systems, conflicting logic, unnecessary complexity. You need to **ANALYZE** code.
99
- - **Conventions:** Always follow project's conventions when updating/adding/fixing files
100
-
101
- ## Component Usage - MCP REQUIRED
102
-
103
- **BEFORE writing ANY @donotdev component:**
104
-
105
- 1. Call `lookup_symbol({ symbol: "ComponentName" })`
106
- 2. Read the actual props from the returned TypeScript interface
107
- 3. Use ONLY those props
108
-
109
- **NEVER guess props. NEVER use props from memory/training.**
110
-
111
- If MCP tools unavailable → STOP and tell user to enable MCP.
112
-
113
- **Key MCP tools:**
114
- - `lookup_symbol` — get actual TypeScript types from `.d.ts`
115
- - `get_guide` — fetch framework setup guides (CRUD, Auth, etc.)
116
- - `get_guideline` — fetch architecture guidelines
117
- - `search_framework` — search across all guides and symbols
118
-
119
- ## WAI-WAY Workflow
120
-
121
- **Read `AI.md` at the project root for the full workflow.**
122
-
123
- For each phase (0=BRAINSTORM, 1=SCAFFOLD, 2=ENTITIES, 3=COMPOSE, 4=CONFIGURE):
124
-
125
- 1. `mcp:start_phase(N)` — returns blueprint, context, and lessons
126
- 2. Work — follow blueprint, call `lookup_symbol` before using any component
127
- 3. `mcp:complete_phase({ files })` — validates conventions + symbol usage, submits for review
128
- 4. `mcp:approve_phase()` — user approves, phase is done
1
+ Enforce AI.md
@@ -0,0 +1 @@
1
+ Enforce AI.md