opencastle 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/README.md +8 -7
  2. package/dist/cli/adapters/claude-code.d.ts.map +1 -1
  3. package/dist/cli/adapters/claude-code.js +30 -3
  4. package/dist/cli/adapters/claude-code.js.map +1 -1
  5. package/dist/cli/adapters/cursor.d.ts.map +1 -1
  6. package/dist/cli/adapters/cursor.js +27 -3
  7. package/dist/cli/adapters/cursor.js.map +1 -1
  8. package/dist/cli/adapters/opencode.d.ts +20 -0
  9. package/dist/cli/adapters/opencode.d.ts.map +1 -0
  10. package/dist/cli/adapters/opencode.js +265 -0
  11. package/dist/cli/adapters/opencode.js.map +1 -0
  12. package/dist/cli/adapters/vscode.d.ts.map +1 -1
  13. package/dist/cli/adapters/vscode.js +37 -6
  14. package/dist/cli/adapters/vscode.js.map +1 -1
  15. package/dist/cli/copy.d.ts +12 -0
  16. package/dist/cli/copy.d.ts.map +1 -1
  17. package/dist/cli/copy.js +27 -0
  18. package/dist/cli/copy.js.map +1 -1
  19. package/dist/cli/detect.d.ts +1 -1
  20. package/dist/cli/detect.js +21 -15
  21. package/dist/cli/detect.js.map +1 -1
  22. package/dist/cli/init.d.ts.map +1 -1
  23. package/dist/cli/init.js +143 -94
  24. package/dist/cli/init.js.map +1 -1
  25. package/dist/cli/manifest.d.ts +1 -1
  26. package/dist/cli/manifest.d.ts.map +1 -1
  27. package/dist/cli/manifest.js +2 -1
  28. package/dist/cli/manifest.js.map +1 -1
  29. package/dist/cli/mcp.d.ts +6 -6
  30. package/dist/cli/mcp.d.ts.map +1 -1
  31. package/dist/cli/mcp.js +104 -33
  32. package/dist/cli/mcp.js.map +1 -1
  33. package/dist/cli/prompt.d.ts +19 -0
  34. package/dist/cli/prompt.d.ts.map +1 -1
  35. package/dist/cli/prompt.js +143 -0
  36. package/dist/cli/prompt.js.map +1 -1
  37. package/dist/cli/stack-config.d.ts +23 -0
  38. package/dist/cli/stack-config.d.ts.map +1 -1
  39. package/dist/cli/stack-config.js +128 -124
  40. package/dist/cli/stack-config.js.map +1 -1
  41. package/dist/cli/types.d.ts +26 -9
  42. package/dist/cli/types.d.ts.map +1 -1
  43. package/dist/cli/types.js +26 -1
  44. package/dist/cli/types.js.map +1 -1
  45. package/dist/cli/update.d.ts.map +1 -1
  46. package/dist/cli/update.js +60 -19
  47. package/dist/cli/update.js.map +1 -1
  48. package/dist/orchestrator/plugins/chrome-devtools/config.d.ts +3 -0
  49. package/dist/orchestrator/plugins/chrome-devtools/config.d.ts.map +1 -0
  50. package/dist/orchestrator/plugins/chrome-devtools/config.js +28 -0
  51. package/dist/orchestrator/plugins/chrome-devtools/config.js.map +1 -0
  52. package/dist/orchestrator/plugins/contentful/config.d.ts +3 -0
  53. package/dist/orchestrator/plugins/contentful/config.d.ts.map +1 -0
  54. package/dist/orchestrator/plugins/contentful/config.js +48 -0
  55. package/dist/orchestrator/plugins/contentful/config.js.map +1 -0
  56. package/dist/orchestrator/plugins/convex/config.d.ts +3 -0
  57. package/dist/orchestrator/plugins/convex/config.d.ts.map +1 -0
  58. package/dist/orchestrator/plugins/convex/config.js +32 -0
  59. package/dist/orchestrator/plugins/convex/config.js.map +1 -0
  60. package/dist/orchestrator/plugins/index.d.ts +28 -0
  61. package/dist/orchestrator/plugins/index.d.ts.map +1 -0
  62. package/dist/orchestrator/plugins/index.js +63 -0
  63. package/dist/orchestrator/plugins/index.js.map +1 -0
  64. package/dist/orchestrator/plugins/jira/config.d.ts +3 -0
  65. package/dist/orchestrator/plugins/jira/config.d.ts.map +1 -0
  66. package/dist/orchestrator/plugins/jira/config.js +29 -0
  67. package/dist/orchestrator/plugins/jira/config.js.map +1 -0
  68. package/dist/orchestrator/plugins/linear/config.d.ts +3 -0
  69. package/dist/orchestrator/plugins/linear/config.d.ts.map +1 -0
  70. package/dist/orchestrator/plugins/linear/config.js +33 -0
  71. package/dist/orchestrator/plugins/linear/config.js.map +1 -0
  72. package/dist/orchestrator/plugins/nx/config.d.ts +3 -0
  73. package/dist/orchestrator/plugins/nx/config.d.ts.map +1 -0
  74. package/dist/orchestrator/plugins/nx/config.js +28 -0
  75. package/dist/orchestrator/plugins/nx/config.js.map +1 -0
  76. package/dist/orchestrator/plugins/sanity/config.d.ts +3 -0
  77. package/dist/orchestrator/plugins/sanity/config.d.ts.map +1 -0
  78. package/dist/orchestrator/plugins/sanity/config.js +43 -0
  79. package/dist/orchestrator/plugins/sanity/config.js.map +1 -0
  80. package/dist/orchestrator/plugins/slack/config.d.ts +3 -0
  81. package/dist/orchestrator/plugins/slack/config.d.ts.map +1 -0
  82. package/dist/orchestrator/plugins/slack/config.js +34 -0
  83. package/dist/orchestrator/plugins/slack/config.js.map +1 -0
  84. package/dist/orchestrator/plugins/strapi/config.d.ts +3 -0
  85. package/dist/orchestrator/plugins/strapi/config.d.ts.map +1 -0
  86. package/dist/orchestrator/plugins/strapi/config.js +40 -0
  87. package/dist/orchestrator/plugins/strapi/config.js.map +1 -0
  88. package/dist/orchestrator/plugins/supabase/config.d.ts +3 -0
  89. package/dist/orchestrator/plugins/supabase/config.d.ts.map +1 -0
  90. package/dist/orchestrator/plugins/supabase/config.js +33 -0
  91. package/dist/orchestrator/plugins/supabase/config.js.map +1 -0
  92. package/dist/orchestrator/plugins/teams/config.d.ts +3 -0
  93. package/dist/orchestrator/plugins/teams/config.d.ts.map +1 -0
  94. package/dist/orchestrator/plugins/teams/config.js +43 -0
  95. package/dist/orchestrator/plugins/teams/config.js.map +1 -0
  96. package/dist/orchestrator/plugins/types.d.ts +61 -0
  97. package/dist/orchestrator/plugins/types.d.ts.map +1 -0
  98. package/dist/orchestrator/plugins/types.js +2 -0
  99. package/dist/orchestrator/plugins/types.js.map +1 -0
  100. package/dist/orchestrator/plugins/vercel/config.d.ts +3 -0
  101. package/dist/orchestrator/plugins/vercel/config.d.ts.map +1 -0
  102. package/dist/orchestrator/plugins/vercel/config.js +32 -0
  103. package/dist/orchestrator/plugins/vercel/config.js.map +1 -0
  104. package/package.json +1 -1
  105. package/src/cli/adapters/claude-code.ts +36 -4
  106. package/src/cli/adapters/cursor.ts +42 -4
  107. package/src/cli/adapters/opencode.ts +320 -0
  108. package/src/cli/adapters/vscode.ts +40 -8
  109. package/src/cli/copy.ts +32 -0
  110. package/src/cli/detect.ts +17 -17
  111. package/src/cli/init.ts +157 -99
  112. package/src/cli/manifest.ts +2 -1
  113. package/src/cli/mcp.ts +129 -50
  114. package/src/cli/prompt.ts +176 -0
  115. package/src/cli/stack-config.ts +174 -145
  116. package/src/cli/types.ts +39 -8
  117. package/src/cli/update.ts +71 -20
  118. package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
  119. package/src/orchestrator/agent-workflows/README.md +1 -1
  120. package/src/orchestrator/agent-workflows/bug-fix.md +12 -12
  121. package/src/orchestrator/agent-workflows/data-pipeline.md +21 -20
  122. package/src/orchestrator/agent-workflows/database-migration.md +11 -11
  123. package/src/orchestrator/agent-workflows/feature-implementation.md +19 -12
  124. package/src/orchestrator/agent-workflows/performance-optimization.md +6 -6
  125. package/src/orchestrator/agent-workflows/refactoring.md +10 -10
  126. package/src/orchestrator/agent-workflows/schema-changes.md +8 -8
  127. package/src/orchestrator/agent-workflows/security-audit.md +12 -12
  128. package/src/orchestrator/agent-workflows/shared-delivery-phase.md +5 -5
  129. package/src/orchestrator/agents/api-designer.agent.md +1 -1
  130. package/src/orchestrator/agents/architect.agent.md +2 -2
  131. package/src/orchestrator/agents/content-engineer.agent.md +3 -3
  132. package/src/orchestrator/agents/copywriter.agent.md +2 -2
  133. package/src/orchestrator/agents/data-expert.agent.md +6 -6
  134. package/src/orchestrator/agents/database-engineer.agent.md +3 -3
  135. package/src/orchestrator/agents/developer.agent.md +4 -4
  136. package/src/orchestrator/agents/devops-expert.agent.md +5 -5
  137. package/src/orchestrator/agents/documentation-writer.agent.md +1 -1
  138. package/src/orchestrator/agents/performance-expert.agent.md +2 -2
  139. package/src/orchestrator/agents/release-manager.agent.md +4 -4
  140. package/src/orchestrator/agents/researcher.agent.md +3 -3
  141. package/src/orchestrator/agents/reviewer.agent.md +1 -1
  142. package/src/orchestrator/agents/security-expert.agent.md +4 -4
  143. package/src/orchestrator/agents/seo-specialist.agent.md +2 -2
  144. package/src/orchestrator/agents/team-lead.agent.md +56 -38
  145. package/src/orchestrator/agents/testing-expert.agent.md +5 -5
  146. package/src/orchestrator/agents/ui-ux-expert.agent.md +6 -6
  147. package/src/orchestrator/copilot-instructions.md +1 -1
  148. package/src/orchestrator/customizations/AGENT-FAILURES.md +1 -1
  149. package/src/orchestrator/customizations/AGENT-PERFORMANCE.md +12 -12
  150. package/src/orchestrator/customizations/DISPUTES.md +5 -5
  151. package/src/orchestrator/customizations/KNOWN-ISSUES.md +30 -0
  152. package/src/orchestrator/customizations/LESSONS-LEARNED.md +7 -7
  153. package/src/orchestrator/customizations/README.md +5 -2
  154. package/src/orchestrator/customizations/agents/agent-registry.md +1 -1
  155. package/src/orchestrator/customizations/agents/skill-matrix.md +12 -7
  156. package/src/orchestrator/customizations/logs/README.md +1 -1
  157. package/src/orchestrator/customizations/project/decisions.md +31 -0
  158. package/src/orchestrator/customizations/project/docs-structure.md +16 -5
  159. package/src/orchestrator/customizations/project/roadmap.md +24 -0
  160. package/src/orchestrator/customizations/project/tracker-config.md +1 -1
  161. package/src/orchestrator/customizations/stack/cms-config.md +1 -1
  162. package/src/orchestrator/customizations/stack/notifications-config.md +1 -1
  163. package/src/orchestrator/instructions/ai-optimization.instructions.md +2 -2
  164. package/src/orchestrator/instructions/general.instructions.md +102 -40
  165. package/src/orchestrator/{skills/browser-testing → plugins/chrome-devtools}/SKILL.md +1 -1
  166. package/src/orchestrator/plugins/chrome-devtools/config.ts +29 -0
  167. package/src/orchestrator/{skills/contentful-cms → plugins/contentful}/SKILL.md +1 -1
  168. package/src/orchestrator/plugins/contentful/config.ts +49 -0
  169. package/src/orchestrator/{skills/convex-database → plugins/convex}/SKILL.md +1 -1
  170. package/src/orchestrator/plugins/convex/config.ts +33 -0
  171. package/src/orchestrator/plugins/index.ts +85 -0
  172. package/src/orchestrator/{skills/jira-management → plugins/jira}/SKILL.md +3 -3
  173. package/src/orchestrator/plugins/jira/config.ts +30 -0
  174. package/src/orchestrator/{skills/task-management → plugins/linear}/SKILL.md +3 -3
  175. package/src/orchestrator/plugins/linear/config.ts +34 -0
  176. package/src/orchestrator/{skills/nx-workspace → plugins/nx}/SKILL.md +1 -1
  177. package/src/orchestrator/plugins/nx/config.ts +29 -0
  178. package/src/orchestrator/{skills/sanity-cms → plugins/sanity}/SKILL.md +1 -1
  179. package/src/orchestrator/plugins/sanity/config.ts +44 -0
  180. package/src/orchestrator/{skills/slack-notifications → plugins/slack}/SKILL.md +2 -2
  181. package/src/orchestrator/plugins/slack/config.ts +35 -0
  182. package/src/orchestrator/{skills/strapi-cms → plugins/strapi}/SKILL.md +1 -1
  183. package/src/orchestrator/plugins/strapi/config.ts +41 -0
  184. package/src/orchestrator/{skills/supabase-database → plugins/supabase}/SKILL.md +1 -1
  185. package/src/orchestrator/plugins/supabase/config.ts +34 -0
  186. package/src/orchestrator/{skills/teams-notifications → plugins/teams}/SKILL.md +2 -2
  187. package/src/orchestrator/plugins/teams/config.ts +44 -0
  188. package/src/orchestrator/plugins/types.ts +79 -0
  189. package/src/orchestrator/plugins/vercel/config.ts +33 -0
  190. package/src/orchestrator/prompts/bootstrap-customizations.prompt.md +8 -8
  191. package/src/orchestrator/prompts/brainstorm.prompt.md +3 -3
  192. package/src/orchestrator/prompts/bug-fix.prompt.md +27 -22
  193. package/src/orchestrator/prompts/create-skill.prompt.md +50 -32
  194. package/src/orchestrator/prompts/generate-task-spec.prompt.md +3 -3
  195. package/src/orchestrator/prompts/implement-feature.prompt.md +34 -29
  196. package/src/orchestrator/prompts/metrics-report.prompt.md +11 -11
  197. package/src/orchestrator/prompts/quick-refinement.prompt.md +23 -19
  198. package/src/orchestrator/prompts/resolve-pr-comments.prompt.md +19 -5
  199. package/src/orchestrator/skills/accessibility-standards/SKILL.md +1 -1
  200. package/src/orchestrator/skills/agent-hooks/SKILL.md +27 -18
  201. package/src/orchestrator/skills/agent-memory/SKILL.md +7 -7
  202. package/src/orchestrator/skills/api-patterns/SKILL.md +6 -6
  203. package/src/orchestrator/skills/code-commenting/SKILL.md +1 -1
  204. package/src/orchestrator/skills/context-map/SKILL.md +4 -4
  205. package/src/orchestrator/skills/data-engineering/SKILL.md +7 -4
  206. package/src/orchestrator/skills/deployment-infrastructure/SKILL.md +2 -2
  207. package/src/orchestrator/skills/documentation-standards/SKILL.md +1 -1
  208. package/src/orchestrator/skills/fast-review/SKILL.md +18 -7
  209. package/src/orchestrator/skills/frontend-design/SKILL.md +1 -1
  210. package/src/orchestrator/skills/memory-merger/SKILL.md +8 -8
  211. package/src/orchestrator/skills/nextjs-patterns/SKILL.md +1 -1
  212. package/src/orchestrator/skills/panel-majority-vote/SKILL.md +2 -2
  213. package/src/orchestrator/skills/panel-majority-vote/panel-report.template.md +1 -1
  214. package/src/orchestrator/skills/performance-optimization/SKILL.md +1 -1
  215. package/src/orchestrator/skills/react-development/SKILL.md +3 -3
  216. package/src/orchestrator/skills/security-hardening/SKILL.md +27 -27
  217. package/src/orchestrator/skills/self-improvement/SKILL.md +14 -13
  218. package/src/orchestrator/skills/seo-patterns/SKILL.md +1 -1
  219. package/src/orchestrator/skills/session-checkpoints/SKILL.md +19 -19
  220. package/src/orchestrator/skills/team-lead-reference/SKILL.md +9 -9
  221. package/src/orchestrator/skills/testing-workflow/SKILL.md +13 -13
  222. package/src/orchestrator/skills/validation-gates/SKILL.md +157 -27
  223. package/src/orchestrator/mcp.json +0 -69
@@ -3,7 +3,7 @@ description: 'Resolve GitHub PR review comments by reading them, grouping by fil
3
3
  agent: Team Lead
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Resolve PR Comments
9
9
 
@@ -57,10 +57,21 @@ Acceptance criteria:
57
57
 
58
58
  ### Phase 4: Verify & Report
59
59
 
60
- 1. **Run verification** `yarn nx affected -t lint,test,build` on all affected projects
61
- 2. **Commit fixes** — Use descriptive commit messages referencing the PR: `TAS-XX: Address PR review — [summary]`
62
- 3. **Push to the same branch** The PR updates automatically
63
- 4. **Report back** — Provide a structured summary of what was resolved
60
+ > Load the **validation-gates** skill for detailed steps on each gate.
61
+
62
+ All fixes must pass applicable gates before pushing:
63
+
64
+ 1. **Gate 1: Secret Scanning** — scan diff for API keys, tokens, passwords, connection strings — block immediately if found
65
+ 2. **Gate 2: Deterministic Checks** — run lint, test, and build for all affected projects (see the **codebase-tool** skill for commands) — all zero errors
66
+ 3. **Gate 3: Blast Radius Check** — verify changes are scoped to commented files only; flag any files modified outside the comment scope
67
+ 4. **Gate 4: Fast Review** (MANDATORY) — single reviewer sub-agent validates the combined PR comment fixes
68
+ 5. **Gate 5: Regression Testing** — run tests for all projects consuming modified files
69
+
70
+ After all gates pass:
71
+
72
+ 6. **Commit fixes** — Use descriptive commit messages referencing the PR: `TAS-XX: Address PR review — [summary]`
73
+ 7. **Push to the same branch** — The PR updates automatically
74
+ 8. **Report back** — Provide a structured summary of what was resolved
64
75
 
65
76
  ## Output Format
66
77
 
@@ -85,9 +96,12 @@ After resolving comments, report:
85
96
  | path/to/file.ts | [question/debate] | [your take + options] |
86
97
 
87
98
  ### Verification
99
+ - Secret Scanning: PASS/FAIL
88
100
  - Lint: PASS/FAIL
89
101
  - Tests: PASS/FAIL
90
102
  - Build: PASS/FAIL
103
+ - Blast Radius: PASS/ESCALATED
104
+ - Fast Review: PASS/FAIL
91
105
 
92
106
  ### Commits
93
107
  - `abc1234` TAS-XX: Address PR review — [summary]
@@ -3,7 +3,7 @@ name: accessibility-standards
3
3
  description: "WCAG 2.2 Level AA accessibility patterns for React/HTML/CSS. Use when creating or modifying UI components, forms, navigation, tables, images, or any user-facing elements. Covers keyboard navigation, screen reader semantics, low vision contrast, voice access, and inclusive language."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Accessibility Standards
9
9
 
@@ -3,7 +3,7 @@ name: agent-hooks
3
3
  description: "Lifecycle hooks for AI agent sessions — reusable actions that run at specific points (session start, session end, pre-delegation, post-delegation). Defines what to do at each lifecycle event so agents behave consistently."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Agent Lifecycle Hooks
9
9
 
@@ -29,8 +29,8 @@ Session Lifecycle:
29
29
  ### Actions
30
30
 
31
31
  1. **Read lessons learned** — Scan `.github/customizations/LESSONS-LEARNED.md` for entries relevant to the current task domain. Apply proactively.
32
- 2. **Check for checkpoint** — If `docs/SESSION-CHECKPOINT.md` exists, read it. Resume from last known state instead of re-analyzing.
33
- 3. **Check pending approvals** — If the checkpoint has a `## Pending Approvals` section, check for replies using the configured messaging provider's MCP tools (e.g., `conversations_replies` for Slack). Read `.opencastle.json` → `stack.notifications` to determine the provider. If no messaging is configured, skip this step.
32
+ 2. **Check for checkpoint** — If `.github/customizations/SESSION-CHECKPOINT.md` exists, read it. Resume from last known state instead of re-analyzing.
33
+ 3. **Check pending approvals** — If the checkpoint has a `## Pending Approvals` section, check for replies using the configured messaging provider's MCP tools (e.g., `conversations_replies` for Slack). Read `.opencastle.json` → `stack.teamTools` to determine the provider. If no messaging is configured, skip this step.
34
34
  4. **Check dead letter queue** — Scan `.github/customizations/AGENT-FAILURES.md` for pending failures related to the current scope.
35
35
  5. **Load domain skills** — Based on the task description, load the appropriate skills before writing code. Don't start coding without the relevant skill loaded.
36
36
 
@@ -40,7 +40,7 @@ Include this reminder in every delegation:
40
40
 
41
41
  ```
42
42
  **Session Start:** Read `.github/customizations/LESSONS-LEARNED.md` before starting.
43
- Check `docs/SESSION-CHECKPOINT.md` for prior state and pending approvals.
43
+ Check `.github/customizations/SESSION-CHECKPOINT.md` for prior state and pending approvals.
44
44
  If pending approvals exist, check for replies via the messaging provider.
45
45
  Load relevant skills before writing code.
46
46
  ```
@@ -51,22 +51,31 @@ Load relevant skills before writing code.
51
51
 
52
52
  **When:** Before the agent yields control back to the user — every time, unconditionally.
53
53
 
54
- > **You MUST log every session.** No threshold, no exceptions, no "too small to log."
54
+ > **⛔ HARD GATE Run the Pre-Response Quality Gate checklist from `general.instructions.md` before responding.**
55
+ > A session without log records is a failed session. A session without lessons captured after retries is a failed session.
55
56
 
56
57
  ### Actions
57
58
 
58
- 1. **Log the session (MANDATORY)** — Append a JSON line to `.github/customizations/logs/sessions.ndjson` with: agent name, task summary, files changed, duration estimate, outcome (success/partial/failed), and lessons count. See `general.instructions.md` § Observability Logging for full rules.
59
- 2. **Save checkpoint** (Team Lead only) — If work is incomplete, write `docs/SESSION-CHECKPOINT.md` with current state so the next session can resume. Load **session-checkpoints** skill for format.
60
- 3. **Verify lessons captured** If any retries occurred during the session, confirm that each retry resulted in a lesson entry in `LESSONS-LEARNED.md`.
61
- 4. **Memory merge check** If `LESSONS-LEARNED.md` has grown significantly (5+ new entries this session), flag for memory merge consideration.
62
- 5. **Clean up** Remove any temporary files created during the session (e.g., test fixtures, debug outputs).
59
+ 1. **Run the Pre-Response Quality Gate** — This is the single exit gate. Verify ALL items from the checklist in `general.instructions.md` § Pre-Response Quality Gate:
60
+ - [ ] Lessons read at session start
61
+ - [ ] Lessons captured for any retries
62
+ - [ ] Discovered issues tracked (not ignored)
63
+ - [ ] Lint/type/test pass (no new errors)
64
+ - [ ] Session logged to `sessions.ndjson` (ALWAYS)
65
+ - [ ] Delegations logged (Team Lead only)
66
+ - [ ] Reviews/panels/disputes logged (if applicable)
67
+ 2. **Save checkpoint** (Team Lead only) — If work is incomplete, write `.github/customizations/SESSION-CHECKPOINT.md` with current state so the next session can resume. Load **session-checkpoints** skill for format.
68
+ 3. **Memory merge check** — If `LESSONS-LEARNED.md` has grown significantly (5+ new entries this session), flag for memory merge consideration.
69
+ 4. **Clean up** — Remove any temporary files created during the session (e.g., test fixtures, debug outputs).
63
70
 
64
71
  ### Template for Delegation Prompts
65
72
 
66
73
  ```
67
- **Session End:** Log your session to `.github/customizations/logs/sessions.ndjson`.
68
- If you retried anything with a different approach that worked, add a lesson
69
- to `.github/customizations/LESSONS-LEARNED.md`. Clean up temp files.
74
+ **Session End:** Run the Pre-Response Quality Gate from general.instructions.md:
75
+ - Log your session to `.github/customizations/logs/sessions.ndjson` (Constitution rule #6)
76
+ - If you retried anything with a different approach that worked, add a lesson to `.github/customizations/LESSONS-LEARNED.md`
77
+ - Track any discovered issues in KNOWN-ISSUES.md or a tracker ticket
78
+ - Clean up temp files
70
79
  ```
71
80
 
72
81
  ---
@@ -77,7 +86,7 @@ to `.github/customizations/LESSONS-LEARNED.md`. Clean up temp files.
77
86
 
78
87
  ### Actions
79
88
 
80
- 1. **Linear issue exists** — Verify the task has a Linear issue. If not, create one first.
89
+ 1. **Tracker issue exists** — Verify the task has a tracker issue. If not, create one first.
81
90
  2. **File partition clean** — Confirm no overlap with other active agents' file ownership.
82
91
  3. **Dependencies verified** — All prerequisite tasks are marked Done with independent verification.
83
92
  4. **Prompt is specific** — Includes: objective, file paths, acceptance criteria, patterns to follow, self-improvement reminder.
@@ -88,7 +97,7 @@ to `.github/customizations/LESSONS-LEARNED.md`. Clean up temp files.
88
97
 
89
98
  ```
90
99
  Pre-Delegate:
91
- Linear issue ID included
100
+ Tracker issue ID included
92
101
  ☐ File partition specified
93
102
  ☐ Dependencies are Done
94
103
  ☐ Prompt has file paths + acceptance criteria
@@ -107,10 +116,10 @@ Pre-Delegate:
107
116
  0. **Fast review (mandatory)** — Run the `fast-review` skill against the agent's output. This is a **non-skippable gate**. See the fast-review skill for the full procedure (single reviewer sub-agent, automatic retry, escalation). Only after the fast review passes do you proceed to the remaining post-delegate actions below.
108
117
  1. **Verify output** — Read changed files. Check that changes stay within the agent's file partition.
109
118
  2. **Run verification** — Execute appropriate checks: lint, type-check, tests, or visual inspection.
110
- 3. **Check acceptance criteria** — Compare output against the Linear issue's acceptance criteria. Each criterion must be independently verified.
111
- 4. **Discovered issues tracked** — Verify the agent followed the Discovered Issues Policy. If they found issues, check that they're in KNOWN-ISSUES.md or a new Linear ticket.
119
+ 3. **Check acceptance criteria** — Compare output against the tracker issue's acceptance criteria. Each criterion must be independently verified.
120
+ 4. **Discovered issues tracked** — Verify the agent followed the Discovered Issues Policy. If they found issues, check that they're in KNOWN-ISSUES.md or a new tracker ticket.
112
121
  5. **Lessons captured** — If the agent retried anything, verify a lesson was added to LESSONS-LEARNED.md.
113
- 6. **Update Linear** — Move the issue to Done (if passing) or add failure notes and re-delegate (if failing).
122
+ 6. **Update tracker** — Move the issue to Done (if passing) or add failure notes and re-delegate (if failing).
114
123
 
115
124
  ### Quick Checklist
116
125
 
@@ -3,7 +3,7 @@ name: agent-memory
3
3
  description: "Agent expertise tracking and cross-session knowledge graph. Use when delegating tasks to track agent strengths/weaknesses, or when building context about file relationships and patterns."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Agent Memory Protocol
9
9
 
@@ -30,7 +30,7 @@ Template structure:
30
30
  ### Weak Areas
31
31
  | Area | Evidence | Last Updated |
32
32
  |------|----------|-------------|
33
- | CSS Modules | Required 2 retries on styling task (TAS-AA) | YYYY-MM-DD |
33
+ | Styling approach | Required 2 retries on styling task (TAS-AA) | YYYY-MM-DD |
34
34
 
35
35
  ### File Familiarity
36
36
  - `apps/tastebeer.eu/app/places/` — 3 tasks completed
@@ -67,8 +67,8 @@ Add relevant expertise context to delegation prompts. Example addition:
67
67
 
68
68
  ```
69
69
  ### Agent Context (from expertise registry)
70
- - Strong: Server Components, GROQ queries (3 successful tasks)
71
- - Weak: CSS Modules (1 retry on TAS-AA)
70
+ - Strong: Server Components, CMS queries (3 successful tasks)
71
+ - Weak: Component styling (1 retry on TAS-AA)
72
72
  - Familiar files: libs/queries/src/lib/search/ (2 tasks)
73
73
  ```
74
74
 
@@ -95,7 +95,7 @@ Capture structured relationships between concepts, files, agents, and decisions.
95
95
  |-------------|---------|---------|
96
96
  | `depends-on` | X requires Y to function | `F:places/page.tsx depends-on F:searchModule.ts` |
97
97
  | `caused-by` | X was caused by Y | `B:KI-042 caused-by D:use-server-components` |
98
- | `expert-in` | Agent X has expertise in Y | `A:Content Engineer expert-in P:GROQ-queries` |
98
+ | `expert-in` | Agent X has expertise in Y | `A:Content Engineer expert-in P:CMS-queries` |
99
99
  | `related-to` | Loose conceptual connection | `L:LES-15 related-to P:RLS-policies` |
100
100
  | `obsoletes` | X replaces/supersedes Y | `D:use-app-router obsoletes D:use-pages-router` |
101
101
  | `blocks` | X prevents Y from working | `B:KI-099 blocks F:auth/middleware.ts` |
@@ -113,8 +113,8 @@ Template structure:
113
113
 
114
114
  | Source | Relationship | Target | Added | Context |
115
115
  |--------|-------------|--------|-------|---------|
116
- | A:Security Expert | expert-in | P:RLS-policies | 2026-02-23 | Completed 3 RLS audits |
117
- | F:searchModule.ts | depends-on | F:sanity-client.ts | 2026-02-23 | Search uses Sanity client |
116
+ | A:Content Engineer | expert-in | P:CMS-queries | 2026-02-23 | Completed 3 CMS query tasks |
117
+ | F:searchModule.ts | depends-on | F:cms-client.ts | 2026-02-23 | Search uses CMS client |
118
118
  | L:LES-15 | related-to | P:cookie-sessions | 2026-02-23 | Lesson about auth token format |
119
119
  ```
120
120
 
@@ -3,15 +3,15 @@ name: api-patterns
3
3
  description: "API design patterns for route handlers, Server Actions, Zod validation, and external API integration. Use when creating API routes, Server Actions, or integrating external services."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # API Patterns
9
9
 
10
- Generic API design patterns for Next.js App Router projects. For project-specific endpoints, actions, and external API inventory, see [api-config.md](../../customizations/stack/api-config.md).
10
+ Generic API design patterns for server-rendered framework projects. For project-specific endpoints, actions, and external API inventory, see [api-config.md](../../customizations/stack/api-config.md).
11
11
 
12
12
  ## Architecture
13
13
 
14
- This project uses **Next.js App Router** API patterns:
14
+ This project uses **App Router** API patterns (resolve the specific framework via the **framework** capability slot in the skill matrix):
15
15
 
16
16
  - **Server Actions** (preferred for mutations) — form submissions, data writes, auth operations
17
17
  - **Route Handlers** (`route.ts`) — analytics endpoints, autocomplete, external integrations
@@ -43,12 +43,12 @@ export async function GET(request: NextRequest) {
43
43
 
44
44
  ```typescript
45
45
  'use server';
46
- import { createServerClient } from '@libs/supabase-auth';
46
+ import { createServerClient } from '@libs/auth';
47
47
  import { revalidatePath } from 'next/cache';
48
48
 
49
49
  export async function submitAction(formData: FormData) {
50
- const supabase = await createServerClient();
51
- const { data: { user } } = await supabase.auth.getUser();
50
+ const client = await createServerClient();
51
+ const { data: { user } } = await client.auth.getUser();
52
52
  if (!user) return { error: 'Unauthorized' };
53
53
  // ... validate and process
54
54
  revalidatePath('/places');
@@ -3,7 +3,7 @@ name: code-commenting
3
3
  description: "Guidelines for writing self-explanatory code with minimal comments. Covers when to comment (WHY not WHAT), anti-patterns to avoid, annotation tags, and public API documentation. Use when writing or reviewing code comments."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Self-explanatory Code Commenting
9
9
 
@@ -3,7 +3,7 @@ name: context-map
3
3
  description: "Generate a structured file impact map before making changes. Identifies all files that will be affected, their relationships, and cascade effects — improving file partitioning for parallel work and reducing unexpected side effects."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Skill: Context Map
9
9
 
@@ -43,7 +43,7 @@ For each entry point, trace what depends on it:
43
43
 
44
44
  For each entry point, trace what it depends on:
45
45
 
46
- 1. **Data sources** — which Sanity schemas, GROQ queries, or Supabase tables feed this code?
46
+ 1. **Data sources** — which CMS schemas, content queries, or database tables feed this code?
47
47
  2. **Shared utilities** — which `libs/` modules does it use?
48
48
  3. **Configuration** — which config files affect its behavior?
49
49
 
@@ -75,8 +75,8 @@ Produce a structured map in this format:
75
75
  ### Unaffected (explicitly safe)
76
76
  | Area | Why |
77
77
  |------|-----|
78
- | `supabase/migrations/` | No DB changes |
79
- | `libs/supabase-auth/` | No auth changes |
78
+ | `db/migrations/` | No DB changes |
79
+ | `libs/auth/` | No auth changes |
80
80
  | `apps/cms-studio/` | No schema changes |
81
81
  ```
82
82
 
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  name: data-engineering
3
- description: "Data pipeline ETL workflows, web scraping with Puppeteer, NDJSON processing, and CMS data import. Use when building scrapers, processing data, running CLI tools, or importing to a CMS."
3
+ description: "Data pipeline ETL workflows, web scraping, NDJSON processing, and CMS data import. Use when building scrapers, processing data, running CLI tools, or importing to a CMS."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Data Engineering
9
9
 
@@ -31,9 +31,12 @@ abstract class BaseScraper {
31
31
  }
32
32
  ```
33
33
 
34
- ### Puppeteer Cluster Setup
34
+ ### Browser-Based Scraper Setup
35
+
36
+ Use a headless browser cluster for concurrent scraping (e.g., Puppeteer Cluster, Playwright):
35
37
 
36
38
  ```typescript
39
+ // Example using Puppeteer Cluster — adapt to your project's scraping library
37
40
  const cluster = await Cluster.launch({
38
41
  concurrency: Cluster.CONCURRENCY_CONTEXT,
39
42
  maxConcurrency: config.concurrency,
@@ -53,7 +56,7 @@ const cluster = await Cluster.launch({
53
56
  - Random delays between requests (2-5 seconds default)
54
57
  - Randomize viewport sizes
55
58
  - Block unnecessary resources (images, fonts, CSS) for speed
56
- - Use stealth plugin for Puppeteer
59
+ - Use stealth plugin for the scraping library
57
60
  - Request interception for resource optimization
58
61
 
59
62
  ### Error Recovery
@@ -3,7 +3,7 @@ name: deployment-infrastructure
3
3
  description: "Deployment architecture, environment variables, cron jobs, security headers, and caching patterns. Use when configuring deployments, managing environment variables, setting up cron jobs, or troubleshooting build/deployment issues."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Deployment Infrastructure
9
9
 
@@ -22,7 +22,7 @@ All deployment configuration is project-specific. See [deployment-config.md](../
22
22
  ## Release Process
23
23
 
24
24
  ### 1. Pre-Release Audit
25
- - Run `yarn nx affected -t lint,test,build` to verify all affected projects
25
+ - Run lint, test, and build for all affected projects (see the **codebase-tool** skill for commands)
26
26
  - Review all changed files since last release (`git diff` against last tag/release)
27
27
  - Check for uncommitted work or unmerged branches
28
28
  - Verify no draft PRs are accidentally included
@@ -3,7 +3,7 @@ name: documentation-standards
3
3
  description: "Documentation templates, structure, and standards for project docs, roadmaps, ADRs, and known issues. Use when writing or updating documentation files."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Documentation Standards
9
9
 
@@ -1,4 +1,4 @@
1
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
1
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
2
2
 
3
3
  ````skill
4
4
  ---
@@ -123,7 +123,9 @@ CONFIDENCE: low | medium | high
123
123
  **Auto-PASS conditions (skip reviewer):**
124
124
  - The delegation was pure research/exploration with no code changes
125
125
  - The delegation only modified documentation files (`.md`)
126
- - All deterministic gates already passed AND the change is ≤10 lines across ≤2 files
126
+ - All deterministic gates already passed AND the change is ≤10 lines across ≤2 files AND **no sensitive files were touched** (see validation-gates Gate 3 sensitive file list)
127
+
128
+ > **Sensitive file override:** Changes to auth/middleware files, database migrations, RLS policies, security headers, CSP configuration, environment variable schemas, or CI/CD configuration **always** require a reviewer — even for 1-line changes. Auto-PASS never applies to these files.
127
129
 
128
130
  ### Step 4: Handle Verdict
129
131
 
@@ -218,12 +220,12 @@ CONFIDENCE: low | medium | high
218
220
 
219
221
  ## Logging
220
222
 
221
- Append a JSON line to `customizations/logs/reviews.ndjson` after each fast review:
223
+ Append a JSON line to `.github/customizations/logs/reviews.ndjson` after each fast review:
222
224
 
223
225
  ```json
224
226
  {
225
227
  "timestamp": "2026-02-28T14:30:00Z",
226
- "linear_issue": "PRJ-42",
228
+ "tracker_issue": "PRJ-42",
227
229
  "agent": "Developer",
228
230
  "reviewer_model": "gpt-5-mini",
229
231
  "verdict": "pass",
@@ -247,14 +249,23 @@ Fast review sits between the agent's output and the Team Lead's acceptance:
247
249
  Agent completes work
248
250
 
249
251
 
250
- Deterministic checks (lint, test, build) ← validation-gates Gate 1
252
+ Secret Scanning ← validation-gates Gate 1
253
+
254
+
255
+ Deterministic checks (lint, test, build) ← validation-gates Gate 2
256
+
257
+
258
+ Blast Radius Check ← validation-gates Gate 3
259
+
260
+
261
+ Dependency Audit (if packages changed) ← validation-gates Gate 4
251
262
 
252
263
 
253
- Fast Review (this skill) ← validation-gates Gate 1.5
264
+ Fast Review (this skill) ← validation-gates Gate 5
254
265
 
255
266
  ├── PASS → Accept, move to next task
256
267
  ├── FAIL → Retry loop (up to 2x)
257
- └── 3x FAIL → Escalate to Panel (Gate 5)
268
+ └── 3x FAIL → Escalate to Panel (Gate 9)
258
269
  ```
259
270
 
260
271
  ### Relationship to on-post-delegate Hook
@@ -4,7 +4,7 @@ description: "Create distinctive, production-grade frontend interfaces with high
4
4
  license: Complete terms in LICENSE.txt
5
5
  ---
6
6
 
7
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
7
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
8
8
 
9
9
  This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
10
10
 
@@ -3,7 +3,7 @@ name: memory-merger
3
3
  description: "Protocol for graduating mature lessons from LESSONS-LEARNED.md into permanent instruction and skill files. Closes the self-improvement loop by codifying validated knowledge at the source level."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Skill: Memory Merger
9
9
 
@@ -35,7 +35,7 @@ Read `.github/customizations/LESSONS-LEARNED.md` and identify lessons that meet
35
35
  | **High severity** | Marked `high` severity |
36
36
  | **Age** | Added more than 60 days ago and still relevant |
37
37
  | **Category concentration** | 5+ lessons in the same category → extract a pattern |
38
- | **Tool-specific** | Lesson about a specific MCP tool, NX command, or framework pattern |
38
+ | **Tool-specific** | Lesson about a specific MCP tool, codebase-tool command, or framework pattern |
39
39
 
40
40
  ### Step 2: Map Lessons to Target Files
41
41
 
@@ -43,17 +43,17 @@ Each lesson has a natural home in the instruction/skill hierarchy:
43
43
 
44
44
  | Lesson Category | Target File |
45
45
  |----------------|-------------|
46
- | `linear` | `.github/skills/task-management/SKILL.md` |
46
+ | `task-management` | The skill mapped by the `task-management` slot in the skill matrix |
47
47
  | `mcp-tools` | The corresponding agent file or skill that uses the tool |
48
- | `nx-commands` | `.github/skills/nx-workspace/SKILL.md` |
49
- | `sanity` | `.github/skills/sanity-cms/SKILL.md` |
50
- | `supabase` | `.github/skills/supabase-database/SKILL.md` |
51
- | `browser-testing` | `.github/skills/browser-testing/SKILL.md` |
48
+ | `codebase-tool` | The skill mapped by the `codebase-tool` slot in the skill matrix |
49
+ | `cms` | The skill mapped by the `cms` slot in the skill matrix |
50
+ | `database` | The skill mapped by the `database` slot in the skill matrix |
51
+ | `browser-testing` | The skill mapped by the `e2e-testing` slot in the skill matrix |
52
52
  | `git-workflow` | `.github/instructions/general.instructions.md` |
53
53
  | `deployment` | `.github/skills/deployment-infrastructure/SKILL.md` |
54
54
  | `delegation` | `.github/agents/team-lead.agent.md` or `.github/skills/team-lead-reference/SKILL.md` |
55
55
  | `testing` | `.github/skills/testing-workflow/SKILL.md` |
56
- | `react` / `nextjs` | Corresponding global skill file |
56
+ | `ui-library` / `framework` | The skill mapped by the corresponding slot in the skill matrix |
57
57
  | Cross-cutting pattern | `.github/instructions/general.instructions.md` |
58
58
 
59
59
  ### Step 3: Draft the Merge
@@ -3,7 +3,7 @@ name: nextjs-patterns
3
3
  description: "Next.js App Router best practices for server/client components, routing, API routes, and project structure. Use when creating or modifying Next.js pages, layouts, route handlers, or Server Actions."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Next.js Patterns (2025)
9
9
 
@@ -3,7 +3,7 @@ name: panel-majority-vote
3
3
  description: "Run 3 isolated reviewer sub-agents against the same question and decide PASS/BLOCK by majority vote (2/3 wins). Use when deterministic verification is insufficient."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Skill: Panel majority vote (3 reviewers)
9
9
 
@@ -136,7 +136,7 @@ Each reviewer gets a weight based on 3 factors:
136
136
 
137
137
  ```text
138
138
  Reviewer 1 (Security Expert, reviewing auth): base 1 + domain 2 + confidence 1 = weight 4
139
- Reviewer 2 (Next.js Dev, reviewing auth): base 1 + domain 0 + confidence 1 = weight 2
139
+ Reviewer 2 (Frontend Dev, reviewing auth): base 1 + domain 0 + confidence 1 = weight 2
140
140
  Reviewer 3 (Architect, reviewing auth): base 1 + domain 1 + confidence 0 = weight 2
141
141
  ```
142
142
 
@@ -1,4 +1,4 @@
1
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
1
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
2
2
 
3
3
  # Panel Report
4
4
 
@@ -3,7 +3,7 @@ name: performance-optimization
3
3
  description: "Frontend and backend performance optimization patterns including rendering, asset optimization, JavaScript performance, caching, profiling, and code review checklist. Use when optimizing components, reviewing code for performance, or analyzing bundle size and Core Web Vitals."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # Performance Optimization
9
9
 
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  name: react-development
3
- description: "React development standards for functional components, hooks, TypeScript integration, state management, styling with CSS Modules/Sass, and testing patterns. Use when creating or modifying React components, custom hooks, or component tests."
3
+ description: "React development standards for functional components, hooks, TypeScript integration, state management, styling, and testing patterns. Use when creating or modifying React components, custom hooks, or component tests."
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
6
+ <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
7
7
 
8
8
  # React Development Standards
9
9
 
@@ -108,7 +108,7 @@ Modern React patterns following the official React documentation at https://reac
108
108
  - Co-locate tests in `__tests__` subdirectory.
109
109
  - **CRITICAL**: Never mix static imports and `require()` for lazy-loaded libraries in tests.
110
110
  - Use `jest.requireMock()` instead of `require()` in test functions.
111
- - Use `jest.requireActual()` in mock setup.
111
+ - Use `jest.requireActual()` or equivalent in mock setup.
112
112
 
113
113
  ## Security
114
114