@donotdev/cli 0.0.14 → 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 (151) hide show
  1. package/dependencies-matrix.json +356 -88
  2. package/dist/bin/commands/agent-setup.js +7 -1
  3. package/dist/bin/commands/build.js +118 -38
  4. package/dist/bin/commands/bump.js +74 -28
  5. package/dist/bin/commands/cacheout.js +37 -9
  6. package/dist/bin/commands/create-app.js +222 -115
  7. package/dist/bin/commands/create-project.js +455 -140
  8. package/dist/bin/commands/deploy.js +1736 -697
  9. package/dist/bin/commands/dev.js +138 -23
  10. package/dist/bin/commands/emu.js +215 -58
  11. package/dist/bin/commands/format.js +37 -9
  12. package/dist/bin/commands/lint.js +37 -9
  13. package/dist/bin/commands/preview.js +142 -23
  14. package/dist/bin/commands/supabase-setup.d.ts +6 -0
  15. package/dist/bin/commands/supabase-setup.d.ts.map +1 -0
  16. package/dist/bin/commands/supabase-setup.js +7 -0
  17. package/dist/bin/commands/supabase-setup.js.map +1 -0
  18. package/dist/bin/commands/sync-secrets.js +211 -34
  19. package/dist/bin/commands/type-check.d.ts +14 -0
  20. package/dist/bin/commands/type-check.d.ts.map +1 -0
  21. package/dist/bin/commands/type-check.js +314 -0
  22. package/dist/bin/commands/type-check.js.map +1 -0
  23. package/dist/bin/commands/wai.js +3 -1
  24. package/dist/bin/dndev.js +27 -2
  25. package/dist/bin/donotdev.js +27 -2
  26. package/dist/index.js +3960 -3015
  27. package/package.json +2 -2
  28. package/templates/app-demo/src/App.tsx.example +1 -0
  29. package/templates/app-demo/src/pages/FullPage.tsx.example +2 -2
  30. package/templates/app-demo/src/pages/components/DemoLayout.tsx.example +2 -2
  31. package/templates/app-demo/src/themes.css.example +5 -12
  32. package/templates/app-expo/.env.example +64 -0
  33. package/templates/app-expo/.expo/README.md.example +5 -0
  34. package/templates/app-expo/.gitignore.example +36 -0
  35. package/templates/app-expo/README.md.example +58 -0
  36. package/templates/app-expo/app/.gitkeep +2 -0
  37. package/templates/app-expo/app/_layout.tsx.example +41 -0
  38. package/templates/app-expo/app/form.tsx.example +52 -0
  39. package/templates/app-expo/app/index.tsx.example +89 -0
  40. package/templates/app-expo/app/list.tsx.example +32 -0
  41. package/templates/app-expo/app/profile.tsx.example +76 -0
  42. package/templates/app-expo/app/signin.tsx.example +53 -0
  43. package/templates/app-expo/app.json.example +39 -0
  44. package/templates/app-expo/babel.config.js.example +10 -0
  45. package/templates/app-expo/eas.json.example +20 -0
  46. package/templates/app-expo/expo-env.d.ts.example +4 -0
  47. package/templates/app-expo/metro.config.js.example +20 -0
  48. package/templates/app-expo/service-account-key.json.example +12 -0
  49. package/templates/app-expo/tsconfig.json.example +19 -0
  50. package/templates/app-next/.env.example +4 -33
  51. package/templates/app-next/src/app/ClientLayout.tsx.example +2 -0
  52. package/templates/app-next/src/app/layout.tsx.example +7 -6
  53. package/templates/app-next/src/globals.css.example +2 -11
  54. package/templates/app-next/src/pages/HomePage.tsx.example +1 -1
  55. package/templates/app-next/src/themes.css.example +10 -13
  56. package/templates/app-vite/.env.example +3 -32
  57. package/templates/app-vite/index.html.example +2 -24
  58. package/templates/app-vite/src/App.tsx.example +2 -0
  59. package/templates/app-vite/src/globals.css.example +2 -12
  60. package/templates/app-vite/src/pages/FormPageExample.tsx.example +1 -2
  61. package/templates/app-vite/src/pages/HomePage.tsx.example +1 -1
  62. package/templates/app-vite/src/themes.css.example +109 -79
  63. package/templates/app-vite/vercel.json.example +11 -0
  64. package/templates/functions-firebase/build.mjs.example +2 -72
  65. package/templates/functions-firebase/functions-firebase/.env.example.example +23 -25
  66. package/templates/functions-firebase/functions-firebase/build.mjs.example +2 -72
  67. package/templates/functions-firebase/functions-firebase/tsconfig.json.example +1 -1
  68. package/templates/functions-supabase/supabase/functions/cancel-subscription/index.ts.example +7 -0
  69. package/templates/functions-supabase/supabase/functions/change-plan/index.ts.example +11 -0
  70. package/templates/functions-supabase/supabase/functions/create-checkout-session/index.ts.example +11 -0
  71. package/templates/functions-supabase/supabase/functions/create-customer-portal/index.ts.example +7 -0
  72. package/templates/functions-supabase/supabase/functions/crud/index.ts.example +16 -0
  73. package/templates/functions-supabase/supabase/functions/delete-account/index.ts.example +7 -0
  74. package/templates/functions-supabase/supabase/functions/get-custom-claims/index.ts.example +7 -0
  75. package/templates/functions-supabase/supabase/functions/get-user-auth-status/index.ts.example +7 -0
  76. package/templates/functions-supabase/supabase/functions/refresh-subscription-status/index.ts.example +7 -0
  77. package/templates/functions-supabase/supabase/functions/remove-custom-claims/index.ts.example +7 -0
  78. package/templates/functions-supabase/supabase/functions/set-custom-claims/index.ts.example +7 -0
  79. package/templates/functions-supabase/supabase/migrations/20250101000000_idempotency.sql +24 -0
  80. package/templates/functions-supabase/supabase/migrations/20250101000001_rate_limits.sql +22 -0
  81. package/templates/functions-supabase/supabase/migrations/20250101000002_cleanup_jobs.sql +28 -0
  82. package/templates/functions-supabase/supabase/migrations/20250101000003_operation_metrics.sql +28 -0
  83. package/templates/functions-vercel/functions-vercel/tsconfig.json.example +1 -1
  84. package/templates/functions-vercel/functions-vercel/vercel.json.example +1 -1
  85. package/templates/functions-vercel/vercel.json.example +1 -1
  86. package/templates/github/github/workflows/firebase-deploy.yml.example +1 -1
  87. package/templates/github/workflows/firebase-deploy.yml.example +1 -1
  88. package/templates/overlay-firebase/env.fragment.example +34 -0
  89. package/templates/overlay-firebase/env.fragment.expo.example +34 -0
  90. package/templates/overlay-firebase/env.fragment.nextjs.example +34 -0
  91. package/templates/overlay-firebase/src/config/providers.expo.ts.example +49 -0
  92. package/templates/overlay-firebase/src/config/providers.ts.example +23 -0
  93. package/templates/overlay-supabase/env.fragment.example +7 -0
  94. package/templates/overlay-supabase/env.fragment.expo.example +7 -0
  95. package/templates/overlay-supabase/env.fragment.nextjs.example +7 -0
  96. package/templates/overlay-supabase/src/config/providers.expo.ts.example +35 -0
  97. package/templates/overlay-supabase/src/config/providers.ts.example +33 -0
  98. package/templates/overlay-supabase/vercel.headers.example +23 -0
  99. package/templates/overlay-supabase/vercel.json.example +22 -0
  100. package/templates/overlay-vercel/env.fragment.example +34 -0
  101. package/templates/overlay-vercel/env.fragment.nextjs.example +34 -0
  102. package/templates/overlay-vercel/src/config/providers.ts.example +24 -0
  103. package/templates/root-consumer/.claude/agents/architect.md.example +2 -310
  104. package/templates/root-consumer/.claude/agents/builder.md.example +2 -326
  105. package/templates/root-consumer/.claude/agents/coder.md.example +2 -83
  106. package/templates/root-consumer/.claude/agents/extractor.md.example +2 -231
  107. package/templates/root-consumer/.claude/agents/polisher.md.example +2 -132
  108. package/templates/root-consumer/.claude/agents/prompt-engineer.md.example +2 -81
  109. package/templates/root-consumer/.claude/commands/grill.md.example +30 -0
  110. package/templates/root-consumer/.claude/commands/techdebt.md.example +28 -0
  111. package/templates/root-consumer/.clinerules.example +1 -0
  112. package/templates/root-consumer/.cursor/rules/no-docs.mdc.example +15 -0
  113. package/templates/root-consumer/.cursorrules.example +1 -0
  114. package/templates/root-consumer/.github/copilot-instructions.md.example +1 -0
  115. package/templates/root-consumer/.windsurfrules.example +1 -0
  116. package/templates/root-consumer/AI.md.example +29 -123
  117. package/templates/root-consumer/CLAUDE.md.example +1 -134
  118. package/templates/root-consumer/CONVENTIONS.md.example +1 -0
  119. package/templates/root-consumer/GEMINI.md.example +1 -0
  120. package/templates/root-consumer/firebase.json.example +1 -1
  121. package/templates/root-consumer/guides/dndev/AGENT_START_HERE.md.example +20 -0
  122. package/templates/root-consumer/guides/dndev/COMPONENTS_ADV.md.example +0 -18
  123. package/templates/root-consumer/guides/dndev/COMPONENTS_UI.md.example +1 -1
  124. package/templates/root-consumer/guides/dndev/ENV_SETUP.md.example +99 -30
  125. package/templates/root-consumer/guides/dndev/INDEX.md.example +3 -1
  126. package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +143 -12
  127. package/templates/root-consumer/guides/dndev/SETUP_FIREBASE.md.example +9 -3
  128. package/templates/root-consumer/guides/dndev/SETUP_SOC2.md.example +234 -0
  129. package/templates/root-consumer/guides/dndev/SETUP_SUPABASE.md.example +124 -0
  130. package/templates/root-consumer/guides/dndev/SETUP_THEMES.md.example +6 -2
  131. package/templates/root-consumer/guides/dndev/SETUP_VERCEL.md.example +176 -0
  132. package/templates/root-consumer/guides/dndev/USE_ROUTING.md.example +5 -9
  133. package/templates/root-consumer/guides/dndev/essences_reference.css.example +174 -0
  134. package/templates/root-consumer/guides/wai-way/agents/builder.md.example +10 -0
  135. package/templates/root-consumer/guides/wai-way/agents/extractor.md.example +25 -5
  136. package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +13 -2
  137. package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +2 -2
  138. package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +47 -11
  139. package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +15 -4
  140. package/templates/root-consumer/guides/wai-way/spec_template.md.example +7 -6
  141. package/templates/app-payload/.env.example +0 -28
  142. package/templates/app-payload/README.md.example +0 -233
  143. package/templates/app-payload/collections/Company.ts.example +0 -125
  144. package/templates/app-payload/collections/Hero.ts.example +0 -62
  145. package/templates/app-payload/collections/Media.ts.example +0 -41
  146. package/templates/app-payload/collections/Products.ts.example +0 -115
  147. package/templates/app-payload/collections/Services.ts.example +0 -104
  148. package/templates/app-payload/collections/Testimonials.ts.example +0 -92
  149. package/templates/app-payload/collections/Users.ts.example +0 -35
  150. package/templates/app-payload/src/server.ts.example +0 -79
  151. 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.
@@ -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.
@@ -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 @@
1
+ Enforce AI.md
@@ -4,147 +4,53 @@
4
4
 
5
5
  ## What To Do Right Now
6
6
 
7
- 1. **Verify MCP is working.** Try calling `list_features()`. If it works, you're good. If not:
8
- - **Cursor:** Settings → Tools & MCP → toggle "donotdev" ON. MCP only works in Composer mode (`Cmd/Ctrl+I`).
9
- - **Claude Code / Windsurf:** Auto-connects from `.mcp.json`. If broken, check `bun` is in PATH.
10
- 2. **Check environment setup.** Ask the user: "Have you run `bun install`? Run `dndev dev` and open the app — the homepage has setup steps for Git, Firebase, and .env."
11
- 3. Call `start_phase(0)` — begin **Phase 0: BRAINSTORM**
12
- 4. Follow each phase in order. Do not skip phases.
13
-
14
- ## Environment Variables — Where They Go
15
-
16
- **Vite loads `.env` from the app directory only. NOT from the repo root.**
17
-
18
- | File | What Goes Here |
19
- |------|---------------|
20
- | `apps/<app>/.env` | Firebase config, license key, Stripe publishable key, all `VITE_*` vars |
21
- | `apps/<app>/.env.local` | Local overrides (gitignored) |
22
- | `apps/<app>/.env.staging` | Staging Firebase config (used by `dndev staging`) |
23
- | `functions/.env` | Server-side secrets: `STRIPE_SECRET_KEY`, OAuth client secrets |
24
- | Root `.env` | **Not read by Vite.** Reference only. |
25
-
26
- 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.
27
10
 
28
11
  ## The 5 Phases
29
12
 
30
13
  | Phase | Name | What Happens |
31
14
  |-------|------|-------------|
32
- | 0 | **BRAINSTORM** | Ask questions, understand requirements deeply, produce validated spec |
15
+ | 0 | **BRAINSTORM** | Ask questions, understand requirements, produce validated spec |
33
16
  | 1 | **SCAFFOLD** | Create all routes and page stubs from spec |
34
17
  | 2 | **ENTITIES** | Define all data models (fields, access, visibility) |
35
18
  | 3 | **COMPOSE** | Build pages with framework components (hardcode strings) |
36
- | 4 | **CONFIGURE** | Config, test, polish, optional i18n |
19
+ | 4 | **CONFIGURE** | Config, test, polish, i18n. Run `/grill` and `/techdebt` before shipping |
37
20
 
38
- Each phase has a blueprint in `guides/wai-way/blueprints/` — read it before starting the phase.
39
-
40
- For large projects, you can scope phases to a module (e.g., "user-management", "billing").
41
-
42
- ## The Workflow Per Phase
21
+ ## Workflow Per Phase
43
22
 
44
23
  ```
45
- start_phase(N) → get blueprint + context + lessons from previous sessions
24
+ start_phase(N) → get blueprint + persona + context + lessons
46
25
 
47
- work → follow blueprint, use lookup_symbol for every component
26
+ work → follow blueprint, lookup_symbol for every component
48
27
 
49
- complete_phase(files) → validate conventions + symbol usage + submit for review
28
+ complete_phase(files) → validate conventions + symbol usage submit for review
50
29
 
51
- [user reviews] user confirms or requests changes
52
-
53
- approve_phase() → phase is done, move to next
30
+ approve_phase() phase done, move to next
54
31
  ```
55
32
 
56
- ## How To Use Components Without Hallucinating
33
+ ## Component Usage Non-Negotiable
57
34
 
58
- **CRITICAL:** Never guess component props. Always look up the actual TypeScript types first.
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.
59
36
 
60
- **With MCP (auto-configured):**
61
- ```
62
- lookup_symbol({ symbol: "DataTable" }) → returns real TypeScript interface
63
- lookup_symbol({ symbol: "Card" }) → returns real TypeScript interface
64
- ```
37
+ Without MCP: read `.d.ts` files directly from `node_modules/@donotdev/*/dist/`.
65
38
 
66
- 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.
39
+ ## Rules
67
40
 
68
- **Without MCP:**
69
- Read the `.d.ts` file directly:
70
- ```
71
- node_modules/@donotdev/crud/dist/index.d.ts → CRUD components
72
- node_modules/@donotdev/ui/dist/index.d.ts → UI components
73
- node_modules/@donotdev/core/dist/index.d.ts → Core utilities
74
- ```
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
47
+
48
+ ## MCP Tools
49
+
50
+ Call `get_guide("AGENT_START_HERE")` for the full tool reference, IDE setup, env var guide, and fallback instructions.
51
+
52
+ Key tools: `start_phase` · `complete_phase` · `approve_phase` · `lookup_symbol` · `get_guide` · `get_guideline` · `search_framework` · `list_features` · `record_lesson`
53
+
54
+ ## Security Gate
75
55
 
76
- ## Supported IDEs
77
-
78
- MCP gives the AI agent real TypeScript types instead of hallucinated props. Config files are auto-created by `dndev init`.
79
-
80
- | IDE | Config | Setup |
81
- |-----|--------|-------|
82
- | **Claude Code** | `.mcp.json` | Auto-connects. Nothing to do. |
83
- | **Windsurf** | `.mcp.json` | Auto-connects. Nothing to do. |
84
- | **Cursor** | `.cursor/mcp.json` | Settings → Tools & MCP → toggle "donotdev" ON. **MCP only works in Composer mode** (`Cmd/Ctrl+I`). |
85
- | **Gemini CLI** | `.gemini/settings.json` | Auto-connects. Nothing to do. |
86
-
87
- **If MCP tools aren't available**, guide the user:
88
- 1. Check `bun` is in PATH (`which bun`)
89
- 2. **Cursor:** Must be in Composer mode (`Cmd/Ctrl+I`) and server toggled ON
90
- 3. Check MCP logs: `Cmd/Ctrl+Shift+U` → Output → "MCP Logs"
91
-
92
- **Without MCP (ChatGPT, Copilot, etc.):** Read blueprints from `guides/wai-way/blueprints/` and types from `node_modules/@donotdev/*/dist/*.d.ts`. You lose symbol tracking and convention enforcement.
93
-
94
- ## MCP Tools (13 — Pre-Configured)
95
-
96
- MCP config files are auto-created in `.mcp.json` / `.cursor/mcp.json` / `.gemini/settings.json`. **You must enable the server in your IDE settings** (see "Supported IDEs" above). Once enabled, your IDE connects automatically.
97
-
98
- | Tool | What It Does |
99
- |------|-------------|
100
- | `start_phase(N)` | Begin a phase — returns blueprint, agent persona, context, and lessons |
101
- | `complete_phase({ files })` | Validate conventions + symbol usage + submit for review (does NOT auto-advance) |
102
- | `approve_phase()` | User approved — phase is done, advance to next |
103
- | `get_phase_status()` | Current phase, symbols tracked, review status |
104
- | `lookup_symbol("X")` | Get actual TypeScript types — tracked per phase |
105
- | `get_guide("CRUD")` | Fetch framework setup guides |
106
- | `get_guideline("styling:colors")` | Fetch architecture guidelines (supports sections) |
107
- | `search_framework("keyword")` | Search across all guides and type definitions |
108
- | `list_features()` | List all framework packages with summaries |
109
- | `record_lesson("text")` | Save to project memory (returned on next start_phase) |
110
- | `init_implementation({ from_spec: true })` | Create `.dndev/implementation.md` to track progress |
111
- | `update_progress({ item: "...", done: true })` | Tick/untick items in implementation checklist |
112
- | `get_progress()` | Read implementation progress stats |
113
- | `get_project_history()` | Get captain's log with full session history |
114
-
115
- ## Convention Enforcement
116
-
117
- `complete_phase` checks for:
118
- - Inline styles (`style={{}}`) — use className
119
- - fontSize/font-size — use Text levels or Card props
120
- - textAlign left/right — use start/end for RTL
121
- - require() — use ESM imports
122
- - Manual date formatting — use formatDate() from @donotdev/core
123
- - Import order — React > vendors > @donotdev > relative
124
- - Unverified components — @donotdev components used without lookup_symbol
125
-
126
- ## Without MCP — Manual Fallback
127
-
128
- Read the blueprints directly:
129
-
130
- | Phase | Read This |
131
- |-------|-----------|
132
- | 0 | `guides/wai-way/blueprints/0_brainstorm.md` |
133
- | 1 | `guides/wai-way/blueprints/1_scaffold.md` |
134
- | 2 | `guides/wai-way/blueprints/2_entities.md` |
135
- | 3 | `guides/wai-way/blueprints/3_compose.md` |
136
- | 4 | `guides/wai-way/blueprints/4_configure.md` |
137
-
138
- Agent personas: `guides/wai-way/agents/` (extractor, architect, builder, polisher)
139
-
140
- ## Golden Rule
141
-
142
- > **The scaffolded files ARE your documentation.**
143
- > Read the existing code. Follow the pattern. Extend it. Never invent from scratch.
144
-
145
- ## Key References
146
-
147
- - `guides/wai-way/spec_template.md` — App specification template (Phase 0 output)
148
- - `guides/wai-way/entity_patterns.md` — Common entity schemas
149
- - `guides/wai-way/page_patterns.md` — Common page structures
150
- - `guides/dndev/` — Framework setup guides (CRUD, Auth, Components, etc.)
56
+ Before production: run `dn soc2`. See `get_guide("SOC2")` for details.
@@ -1,134 +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 via `npm install -g @donotdev/cli`)
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 the framework monorepo (this repo)
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
- ## Project Args & Gotchas
120
-
121
- - **`.dndev/args.json`** — Per-project config (platform, strictness, features, region). All features ON by default. Phase 0 narrows down. Edit `strictness` to control validation: `enforced` (default) | `warnings` | `permissive`.
122
- - **`guides/dndev/GOTCHAS.md`** — Common mistakes, phase-tagged. Read directly or loaded by MCP `start_phase()`.
123
- - **Without MCP:** Both files are plain JSON/markdown — any agent reads them directly. MCP automates filtering + enforcement but is not required.
124
-
125
- ## WAI-WAY Workflow
126
-
127
- **Read `AI.md` at the project root for the full workflow.**
128
-
129
- For each phase (0=BRAINSTORM, 1=SCAFFOLD, 2=ENTITIES, 3=COMPOSE, 4=CONFIGURE):
130
-
131
- 1. `mcp:start_phase(N)` — returns blueprint, context, lessons, project args, and phase-relevant gotchas
132
- 2. Work — follow blueprint, call `lookup_symbol` before using any component
133
- 3. `mcp:complete_phase({ files })` — validates conventions + symbol usage (respects `strictness`), submits for review
134
- 4. `mcp:approve_phase()` — user approves, phase is done
1
+ Enforce AI.md
@@ -0,0 +1 @@
1
+ Enforce AI.md
@@ -0,0 +1 @@
1
+ Enforce AI.md
@@ -314,7 +314,7 @@
314
314
  "**/*.test.ts",
315
315
  "**/__tests__/**"
316
316
  ],
317
- "runtime": "nodejs20"
317
+ "runtime": "nodejs22"
318
318
  }
319
319
  ],
320
320
  "firestore": {
@@ -9,6 +9,26 @@
9
9
 
10
10
  ---
11
11
 
12
+ ## Getting Started (for humans)
13
+
14
+ **Canonical flow:** The showcase app’s **Get Started** page is the single source of truth: `apps/showcase/src/pages/GetStartedPage.tsx` and `apps/showcase/src/pages/locales/getstarted_*.json`. Below is the same flow in short form.
15
+
16
+ 1. **P0 — Prerequisites**
17
+ - **Runtime:** **Node.js 24** (nodejs.org) and **Bun 1.3+** (bun.sh). Both required.
18
+ - **IDE:** Any IDE (Cursor, VS Code, Windsurf, etc.). Need help? Use the collapsible “Need help setting up?” on the Get Started page.
19
+ 2. **Install our CLI and create your project’s monorepo**
20
+ - `npm install -g @donotdev/cli`
21
+ - `dndev init my-app`
22
+ 3. **Open the repo in your IDE, terminal, bun install**
23
+ - Start your IDE in that repo, open the terminal: `cd my-app` → `bun install`
24
+ 4. **Enable MCP, then read AI.md and follow the flow**
25
+ - Talk with your agent; ask it to load the MCP (Cursor: Ctrl+Shift+P → “MCP Server” → enable “donotdev”; other IDEs: see “How to enable MCP” collapsible on the Get Started page).
26
+ - Then have the agent read the root **`AI.md`** and this file (**`guides/dndev/AGENT_START_HERE.md`**). Follow the phases.
27
+ 5. **AI helps with provider; cd there, bun install, run**
28
+ - AI helps you choose and set up your provider (Firebase, Supabase, or custom). Then `cd` into the app directory if needed, `bun install`, and `dndev dev` / `dndev build` / `dndev deploy`.
29
+
30
+ ---
31
+
12
32
  ## First Thing to Call: list_features()
13
33
 
14
34
  Call **`list_features()`** before designing or coding. It lists all framework packages with a one-line summary from each README (templates, core, ui, auth, billing, etc.). Use it so you don't reinvent what the framework already provides (blog, CRUD, billing, legal pages, etc.).