@opengroundplan/core 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1739) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/adapters/README.md +155 -0
  4. package/adapters/_shared/README.md +16 -0
  5. package/adapters/aider/adapter.yaml +30 -0
  6. package/adapters/aider/templates/.aider.conf.yml.tmpl +5 -0
  7. package/adapters/amp/adapter.yaml +32 -0
  8. package/adapters/amp/templates/SKILL.md.tmpl +8 -0
  9. package/adapters/antigravity-cli/adapter.yaml +36 -0
  10. package/adapters/antigravity-cli/templates/ANTIGRAVITY.md.tmpl +11 -0
  11. package/adapters/claude-code/adapter.yaml +65 -0
  12. package/adapters/claude-code/templates/CLAUDE.md.tmpl +24 -0
  13. package/adapters/claude-code/templates/SKILL.md.tmpl +8 -0
  14. package/adapters/claude-code/templates/agent.md.tmpl +9 -0
  15. package/adapters/claude-code/templates/command.md.tmpl +6 -0
  16. package/adapters/claude-code/templates/rule.md.tmpl +8 -0
  17. package/adapters/claude-code/templates/settings.json.tmpl +11 -0
  18. package/adapters/cline/adapter.yaml +31 -0
  19. package/adapters/cline/templates/rule.md.tmpl +8 -0
  20. package/adapters/codex/adapter.yaml +29 -0
  21. package/adapters/continue/adapter.yaml +36 -0
  22. package/adapters/continue/templates/00-agents-md.md.tmpl +9 -0
  23. package/adapters/continue/templates/rule.md.tmpl +8 -0
  24. package/adapters/cursor/adapter.yaml +34 -0
  25. package/adapters/cursor/templates/rule.mdc.tmpl +9 -0
  26. package/adapters/gemini-cli/adapter.yaml +51 -0
  27. package/adapters/gemini-cli/templates/GEMINI.md.tmpl +9 -0
  28. package/adapters/gemini-cli/templates/command.toml.tmpl +4 -0
  29. package/adapters/github-copilot/adapter.yaml +44 -0
  30. package/adapters/github-copilot/templates/instructions.md.tmpl +8 -0
  31. package/adapters/github-copilot/templates/prompt.prompt.md.tmpl +6 -0
  32. package/adapters/opencode/adapter.yaml +18 -0
  33. package/adapters/opencode/templates/opencode.json.tmpl +4 -0
  34. package/adapters/roo-code/adapter.yaml +21 -0
  35. package/adapters/roo-code/templates/rule.md.tmpl +5 -0
  36. package/adapters/windsurf/adapter.yaml +34 -0
  37. package/adapters/windsurf/templates/agents-md.md.tmpl +12 -0
  38. package/adapters/windsurf/templates/rule.md.tmpl +9 -0
  39. package/adapters/windsurf/templates/workflow.md.tmpl +7 -0
  40. package/adapters/zed/adapter.yaml +14 -0
  41. package/catalog/README.md +62 -0
  42. package/catalog/architectures/agentic-tool-loop.yaml +62 -0
  43. package/catalog/architectures/bff.yaml +58 -0
  44. package/catalog/architectures/clean.yaml +61 -0
  45. package/catalog/architectures/cqrs.yaml +58 -0
  46. package/catalog/architectures/ddd-tactical.yaml +68 -0
  47. package/catalog/architectures/event-driven.yaml +59 -0
  48. package/catalog/architectures/feature-sliced-design.yaml +61 -0
  49. package/catalog/architectures/hexagonal.yaml +60 -0
  50. package/catalog/architectures/lakehouse.yaml +63 -0
  51. package/catalog/architectures/layered.yaml +60 -0
  52. package/catalog/architectures/llm-workflow.yaml +59 -0
  53. package/catalog/architectures/medallion.yaml +60 -0
  54. package/catalog/architectures/micro-frontends.yaml +60 -0
  55. package/catalog/architectures/microservices.yaml +62 -0
  56. package/catalog/architectures/modular-monolith.yaml +62 -0
  57. package/catalog/architectures/monolith.yaml +61 -0
  58. package/catalog/architectures/multi-agent.yaml +61 -0
  59. package/catalog/architectures/mvc-mvvm.yaml +62 -0
  60. package/catalog/architectures/nextjs-colocation.yaml +67 -0
  61. package/catalog/architectures/onion.yaml +60 -0
  62. package/catalog/architectures/pipes-and-filters.yaml +59 -0
  63. package/catalog/architectures/rag-hybrid.yaml +62 -0
  64. package/catalog/architectures/serverless.yaml +58 -0
  65. package/catalog/architectures/vertical-slice.yaml +61 -0
  66. package/catalog/characteristics.yaml +165 -0
  67. package/catalog/decision.yaml +309 -0
  68. package/catalog/sources/README.md +697 -0
  69. package/catalog/sources/agent-tooling.yaml +1180 -0
  70. package/catalog/sources/ai-llm.yaml +508 -0
  71. package/catalog/sources/auth.yaml +618 -0
  72. package/catalog/sources/backend-api.yaml +720 -0
  73. package/catalog/sources/cms-ecommerce.yaml +558 -0
  74. package/catalog/sources/data-engineering.yaml +618 -0
  75. package/catalog/sources/database-orm.yaml +507 -0
  76. package/catalog/sources/devops-cicd.yaml +422 -0
  77. package/catalog/sources/frontend-ui.yaml +654 -0
  78. package/catalog/sources/fullstack-saas.yaml +629 -0
  79. package/catalog/sources/game-3d.yaml +834 -0
  80. package/catalog/sources/gaps.md +268 -0
  81. package/catalog/sources/layer-plan.yaml +3919 -0
  82. package/catalog/sources/mobile-desktop.yaml +638 -0
  83. package/catalog/sources/observability.yaml +1364 -0
  84. package/catalog/sources/payments-billing.yaml +553 -0
  85. package/catalog/sources/realtime-messaging.yaml +787 -0
  86. package/catalog/sources/security-compliance.yaml +613 -0
  87. package/catalog/sources/testing.yaml +652 -0
  88. package/dist/adapters.d.ts +43 -0
  89. package/dist/adapters.js +181 -0
  90. package/dist/adapters.js.map +1 -0
  91. package/dist/agentkit.d.ts +65 -0
  92. package/dist/agentkit.js +183 -0
  93. package/dist/agentkit.js.map +1 -0
  94. package/dist/apply.d.ts +21 -0
  95. package/dist/apply.js +135 -0
  96. package/dist/apply.js.map +1 -0
  97. package/dist/condition.d.ts +14 -0
  98. package/dist/condition.js +121 -0
  99. package/dist/condition.js.map +1 -0
  100. package/dist/config.d.ts +36 -0
  101. package/dist/config.js +131 -0
  102. package/dist/config.js.map +1 -0
  103. package/dist/index.d.ts +15 -0
  104. package/dist/index.js +16 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/intent.d.ts +52 -0
  107. package/dist/intent.js +220 -0
  108. package/dist/intent.js.map +1 -0
  109. package/dist/license.d.ts +11 -0
  110. package/dist/license.js +68 -0
  111. package/dist/license.js.map +1 -0
  112. package/dist/loader.d.ts +12 -0
  113. package/dist/loader.js +118 -0
  114. package/dist/loader.js.map +1 -0
  115. package/dist/merge.d.ts +28 -0
  116. package/dist/merge.js +412 -0
  117. package/dist/merge.js.map +1 -0
  118. package/dist/plan.d.ts +12 -0
  119. package/dist/plan.js +206 -0
  120. package/dist/plan.js.map +1 -0
  121. package/dist/python-data.json +575 -0
  122. package/dist/python-requirements.d.ts +7 -0
  123. package/dist/python-requirements.js +79 -0
  124. package/dist/python-requirements.js.map +1 -0
  125. package/dist/recommend.d.ts +27 -0
  126. package/dist/recommend.js +68 -0
  127. package/dist/recommend.js.map +1 -0
  128. package/dist/resolve.d.ts +22 -0
  129. package/dist/resolve.js +132 -0
  130. package/dist/resolve.js.map +1 -0
  131. package/dist/schema.d.ts +878 -0
  132. package/dist/schema.js +307 -0
  133. package/dist/schema.js.map +1 -0
  134. package/dist/tokens.d.ts +42 -0
  135. package/dist/tokens.js +90 -0
  136. package/dist/tokens.js.map +1 -0
  137. package/package.json +61 -0
  138. package/registry/README.md +194 -0
  139. package/registry/agents/architecture-reviewer/agent.md +59 -0
  140. package/registry/agents/architecture-reviewer/agent.yaml +7 -0
  141. package/registry/agents/breaking-change-detector/agent.md +83 -0
  142. package/registry/agents/breaking-change-detector/agent.yaml +7 -0
  143. package/registry/agents/security-reviewer/agent.md +63 -0
  144. package/registry/agents/security-reviewer/agent.yaml +7 -0
  145. package/registry/agents/solid-reviewer/agent.md +61 -0
  146. package/registry/agents/solid-reviewer/agent.yaml +7 -0
  147. package/registry/agents/spec-consistency-checker/agent.md +70 -0
  148. package/registry/agents/spec-consistency-checker/agent.yaml +7 -0
  149. package/registry/agents/test-coverage-reviewer/agent.md +67 -0
  150. package/registry/agents/test-coverage-reviewer/agent.yaml +7 -0
  151. package/registry/commands/adr/command.md +80 -0
  152. package/registry/commands/adr/command.yaml +7 -0
  153. package/registry/commands/breaking/command.md +72 -0
  154. package/registry/commands/breaking/command.yaml +7 -0
  155. package/registry/commands/done/command.md +50 -0
  156. package/registry/commands/done/command.yaml +7 -0
  157. package/registry/commands/handoff/command.md +65 -0
  158. package/registry/commands/handoff/command.yaml +7 -0
  159. package/registry/commands/plan/command.md +81 -0
  160. package/registry/commands/plan/command.yaml +7 -0
  161. package/registry/commands/review/command.md +54 -0
  162. package/registry/commands/review/command.yaml +8 -0
  163. package/registry/commands/scope/command.md +45 -0
  164. package/registry/commands/scope/command.yaml +7 -0
  165. package/registry/commands/spec/command.md +81 -0
  166. package/registry/commands/spec/command.yaml +7 -0
  167. package/registry/commands/tasks/command.md +70 -0
  168. package/registry/commands/tasks/command.yaml +7 -0
  169. package/registry/commands/verify/command.md +43 -0
  170. package/registry/commands/verify/command.yaml +7 -0
  171. package/registry/hooks/_lib/config.ps1 +116 -0
  172. package/registry/hooks/_lib/config.sh +143 -0
  173. package/registry/hooks/_lib/defaults.json +76 -0
  174. package/registry/hooks/_lib/json_get.mjs +59 -0
  175. package/registry/hooks/_lib/json_get.py +60 -0
  176. package/registry/hooks/architecture-boundary-check/hook.ps1 +46 -0
  177. package/registry/hooks/architecture-boundary-check/hook.sh +49 -0
  178. package/registry/hooks/architecture-boundary-check/hook.yaml +18 -0
  179. package/registry/hooks/conventional-commit-check/hook.ps1 +68 -0
  180. package/registry/hooks/conventional-commit-check/hook.sh +68 -0
  181. package/registry/hooks/conventional-commit-check/hook.yaml +16 -0
  182. package/registry/hooks/format-on-write/hook.ps1 +36 -0
  183. package/registry/hooks/format-on-write/hook.sh +33 -0
  184. package/registry/hooks/format-on-write/hook.yaml +14 -0
  185. package/registry/hooks/guard-protected-paths/hook.ps1 +34 -0
  186. package/registry/hooks/guard-protected-paths/hook.sh +35 -0
  187. package/registry/hooks/guard-protected-paths/hook.yaml +14 -0
  188. package/registry/hooks/no-secrets/hook.ps1 +67 -0
  189. package/registry/hooks/no-secrets/hook.sh +56 -0
  190. package/registry/hooks/no-secrets/hook.yaml +16 -0
  191. package/registry/skills/adr-write/SKILL.md +127 -0
  192. package/registry/skills/adr-write/references/adr-template.md +143 -0
  193. package/registry/skills/adr-write/references/when-to-write-an-adr.md +74 -0
  194. package/registry/skills/adr-write/skill.yaml +7 -0
  195. package/registry/skills/architecture-guard/SKILL.md +150 -0
  196. package/registry/skills/architecture-guard/references/boundary-patterns.md +142 -0
  197. package/registry/skills/architecture-guard/references/violation-catalog.md +149 -0
  198. package/registry/skills/architecture-guard/skill.yaml +7 -0
  199. package/registry/skills/handoff/SKILL.md +125 -0
  200. package/registry/skills/handoff/references/agent-protocol.md +128 -0
  201. package/registry/skills/handoff/references/handoff-template.md +116 -0
  202. package/registry/skills/handoff/skill.yaml +7 -0
  203. package/registry/skills/onboard/SKILL.md +120 -0
  204. package/registry/skills/onboard/references/discovery-checklist.md +129 -0
  205. package/registry/skills/onboard/references/repo-map-template.md +120 -0
  206. package/registry/skills/onboard/skill.yaml +7 -0
  207. package/registry/skills/perf-budget/SKILL.md +152 -0
  208. package/registry/skills/perf-budget/references/budget-catalog.md +165 -0
  209. package/registry/skills/perf-budget/references/measurement-sources.md +163 -0
  210. package/registry/skills/perf-budget/skill.yaml +7 -0
  211. package/registry/skills/security-review/SKILL.md +145 -0
  212. package/registry/skills/security-review/references/owasp-checklist.md +190 -0
  213. package/registry/skills/security-review/references/secret-patterns.md +110 -0
  214. package/registry/skills/security-review/skill.yaml +7 -0
  215. package/registry/skills/spec-driven/SKILL.md +124 -0
  216. package/registry/skills/spec-driven/references/phase-gates.md +115 -0
  217. package/registry/skills/spec-driven/references/plan-template.md +98 -0
  218. package/registry/skills/spec-driven/references/spec-template.md +101 -0
  219. package/registry/skills/spec-driven/references/tasks-template.md +96 -0
  220. package/registry/skills/spec-driven/skill.yaml +7 -0
  221. package/registry/skills/test-first/SKILL.md +125 -0
  222. package/registry/skills/test-first/references/anti-patterns.md +178 -0
  223. package/registry/skills/test-first/references/test-design.md +156 -0
  224. package/registry/skills/test-first/skill.yaml +7 -0
  225. package/templates/README.md +104 -0
  226. package/templates/agent-kits/core/blueprint.yaml +39 -0
  227. package/templates/agent-kits/core/files/.agent/ACTIVE.md +25 -0
  228. package/templates/agent-kits/core/files/.agent/DECISIONS.md +27 -0
  229. package/templates/agent-kits/core/files/.agent/DELEGATION.md +30 -0
  230. package/templates/agent-kits/core/files/.agent/DONE.md +9 -0
  231. package/templates/agent-kits/core/files/.agent/HANDOFF.md +38 -0
  232. package/templates/agent-kits/core/files/.agent/delegate.mjs +352 -0
  233. package/templates/agent-kits/core/files/.agent/delegation-tools.json +1 -0
  234. package/templates/agent-kits/core/files/.agent/delegation.yaml +33 -0
  235. package/templates/agent-kits/core/files/AGENTS.md +107 -0
  236. package/templates/agent-kits/core/files/docs/ARCHITECTURE.md +26 -0
  237. package/templates/agent-kits/core/files/docs/adr/0001-record-architecture-decisions.md +27 -0
  238. package/templates/agent-kits/core/files/specs/000-template/plan.md +48 -0
  239. package/templates/agent-kits/core/files/specs/000-template/spec.md +45 -0
  240. package/templates/agent-kits/core/files/specs/000-template/tasks.md +21 -0
  241. package/templates/agent-kits/core/files/specs/README.md +32 -0
  242. package/templates/architectures/agentic-tool-loop/blueprint.yaml +137 -0
  243. package/templates/architectures/agentic-tool-loop/files/.importlinter +47 -0
  244. package/templates/architectures/agentic-tool-loop/files/docs/architecture/agentic-tool-loop.node.md +83 -0
  245. package/templates/architectures/agentic-tool-loop/files/docs/architecture/agentic-tool-loop.python.md +93 -0
  246. package/templates/architectures/agentic-tool-loop/files/package.json +6 -0
  247. package/templates/architectures/agentic-tool-loop/files/pyproject.toml +5 -0
  248. package/templates/architectures/agentic-tool-loop/files/scripts/check-agent-loop.mjs +227 -0
  249. package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/__init__.py +20 -0
  250. package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/loop.py +112 -0
  251. package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/model.py +50 -0
  252. package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/sandbox.py +62 -0
  253. package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/settings.py +69 -0
  254. package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/tools/__init__.py +6 -0
  255. package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/tools/current_time.py +27 -0
  256. package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/tools/registry.py +44 -0
  257. package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/tools/spec.py +29 -0
  258. package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/tools/write_note.py +36 -0
  259. package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/trace.py +33 -0
  260. package/templates/architectures/agentic-tool-loop/files/src/agent/config.ts +65 -0
  261. package/templates/architectures/agentic-tool-loop/files/src/agent/index.ts +8 -0
  262. package/templates/architectures/agentic-tool-loop/files/src/agent/loop.ts +117 -0
  263. package/templates/architectures/agentic-tool-loop/files/src/agent/model.ts +35 -0
  264. package/templates/architectures/agentic-tool-loop/files/src/agent/sandbox.ts +52 -0
  265. package/templates/architectures/agentic-tool-loop/files/src/agent/tools/current-time.ts +13 -0
  266. package/templates/architectures/agentic-tool-loop/files/src/agent/tools/registry.ts +49 -0
  267. package/templates/architectures/agentic-tool-loop/files/src/agent/tools/types.ts +26 -0
  268. package/templates/architectures/agentic-tool-loop/files/src/agent/tools/write-note.ts +23 -0
  269. package/templates/architectures/agentic-tool-loop/files/src/agent/trace.ts +26 -0
  270. package/templates/architectures/agentic-tool-loop/files/tests/architecture/test_agent_loop.py +167 -0
  271. package/templates/architectures/bff/blueprint.yaml +83 -0
  272. package/templates/architectures/bff/files/docs/architecture/bff.node.md +115 -0
  273. package/templates/architectures/bff/files/docs/architecture/bff.typescript.md +113 -0
  274. package/templates/architectures/bff/files/scripts/check-bff-boundaries.mjs +223 -0
  275. package/templates/architectures/bff/files/src/bff/__primaryClient.kebab__/aggregate.ts +38 -0
  276. package/templates/architectures/bff/files/src/bff/__primaryClient.kebab__/config.ts +30 -0
  277. package/templates/architectures/bff/files/src/bff/__primaryClient.kebab__/dto.ts +21 -0
  278. package/templates/architectures/bff/files/src/bff/__primaryClient.kebab__/index.ts +6 -0
  279. package/templates/architectures/bff/files/src/bff/__primaryClient.kebab__/routes.ts +21 -0
  280. package/templates/architectures/bff/files/src/bff/__secondaryClient.kebab__/aggregate.ts +23 -0
  281. package/templates/architectures/bff/files/src/bff/__secondaryClient.kebab__/config.ts +26 -0
  282. package/templates/architectures/bff/files/src/bff/__secondaryClient.kebab__/dto.ts +16 -0
  283. package/templates/architectures/bff/files/src/bff/__secondaryClient.kebab__/index.ts +6 -0
  284. package/templates/architectures/bff/files/src/bff/__secondaryClient.kebab__/routes.ts +21 -0
  285. package/templates/architectures/bff/files/src/downstream/config.ts +35 -0
  286. package/templates/architectures/bff/files/src/downstream/http-client.ts +41 -0
  287. package/templates/architectures/bff/files/src/downstream/index.ts +9 -0
  288. package/templates/architectures/bff/files/src/downstream/orders-client.ts +23 -0
  289. package/templates/architectures/bff/files/src/downstream/profile-client.ts +18 -0
  290. package/templates/architectures/clean/blueprint.yaml +147 -0
  291. package/templates/architectures/clean/files/.importlinter +35 -0
  292. package/templates/architectures/clean/files/Directory.Packages.props +7 -0
  293. package/templates/architectures/clean/files/__solutionName.dot__.slnx +10 -0
  294. package/templates/architectures/clean/files/docs/architecture/clean.md +87 -0
  295. package/templates/architectures/clean/files/eslint.config.architecture.mjs +27 -0
  296. package/templates/architectures/clean/files/internal/application/doc.go +2 -0
  297. package/templates/architectures/clean/files/internal/application/ports/doc.go +2 -0
  298. package/templates/architectures/clean/files/internal/architecture/architecture_test.go +166 -0
  299. package/templates/architectures/clean/files/internal/architecture/doc.go +3 -0
  300. package/templates/architectures/clean/files/internal/domain/doc.go +2 -0
  301. package/templates/architectures/clean/files/internal/infrastructure/doc.go +2 -0
  302. package/templates/architectures/clean/files/pyproject.toml +2 -0
  303. package/templates/architectures/clean/files/scripts/check-architecture.mjs +68 -0
  304. package/templates/architectures/clean/files/src/__solutionName.dot__.Application/Abstractions/.gitkeep +1 -0
  305. package/templates/architectures/clean/files/src/__solutionName.dot__.Application/AssemblyMarker.cs +10 -0
  306. package/templates/architectures/clean/files/src/__solutionName.dot__.Application/UseCases/.gitkeep +1 -0
  307. package/templates/architectures/clean/files/src/__solutionName.dot__.Application/__solutionName.dot__.Application.csproj +14 -0
  308. package/templates/architectures/clean/files/src/__solutionName.dot__.Domain/AssemblyMarker.cs +10 -0
  309. package/templates/architectures/clean/files/src/__solutionName.dot__.Domain/Entities/.gitkeep +1 -0
  310. package/templates/architectures/clean/files/src/__solutionName.dot__.Domain/Events/.gitkeep +1 -0
  311. package/templates/architectures/clean/files/src/__solutionName.dot__.Domain/ValueObjects/.gitkeep +1 -0
  312. package/templates/architectures/clean/files/src/__solutionName.dot__.Domain/__solutionName.dot__.Domain.csproj +11 -0
  313. package/templates/architectures/clean/files/src/__solutionName.dot__.Infrastructure/AssemblyMarker.cs +10 -0
  314. package/templates/architectures/clean/files/src/__solutionName.dot__.Infrastructure/External/.gitkeep +1 -0
  315. package/templates/architectures/clean/files/src/__solutionName.dot__.Infrastructure/Persistence/.gitkeep +1 -0
  316. package/templates/architectures/clean/files/src/__solutionName.dot__.Infrastructure/__solutionName.dot__.Infrastructure.csproj +14 -0
  317. package/templates/architectures/clean/files/src/__solutionName.snake__/application/__init__.py +1 -0
  318. package/templates/architectures/clean/files/src/__solutionName.snake__/application/ports/__init__.py +1 -0
  319. package/templates/architectures/clean/files/src/__solutionName.snake__/application/use_cases/__init__.py +1 -0
  320. package/templates/architectures/clean/files/src/__solutionName.snake__/domain/__init__.py +1 -0
  321. package/templates/architectures/clean/files/src/__solutionName.snake__/domain/entities/__init__.py +1 -0
  322. package/templates/architectures/clean/files/src/__solutionName.snake__/domain/events/__init__.py +1 -0
  323. package/templates/architectures/clean/files/src/__solutionName.snake__/infrastructure/__init__.py +1 -0
  324. package/templates/architectures/clean/files/src/__solutionName.snake__/infrastructure/external/__init__.py +1 -0
  325. package/templates/architectures/clean/files/src/__solutionName.snake__/infrastructure/persistence/__init__.py +1 -0
  326. package/templates/architectures/clean/files/src/application/ports/README.md +1 -0
  327. package/templates/architectures/clean/files/src/application/use-cases/README.md +1 -0
  328. package/templates/architectures/clean/files/src/domain/README.md +1 -0
  329. package/templates/architectures/clean/files/src/infrastructure/README.md +1 -0
  330. package/templates/architectures/clean/files/tests/__solutionName.dot__.ArchitectureTests/DependencyRuleTests.cs +118 -0
  331. package/templates/architectures/clean/files/tests/__solutionName.dot__.ArchitectureTests/__solutionName.dot__.ArchitectureTests.csproj +27 -0
  332. package/templates/architectures/cqrs/blueprint.yaml +134 -0
  333. package/templates/architectures/cqrs/files/.importlinter +26 -0
  334. package/templates/architectures/cqrs/files/Directory.Packages.props +7 -0
  335. package/templates/architectures/cqrs/files/__solutionName.dot__.slnx +11 -0
  336. package/templates/architectures/cqrs/files/docs/architecture/cqrs.dotnet.md +116 -0
  337. package/templates/architectures/cqrs/files/docs/architecture/cqrs.node.md +117 -0
  338. package/templates/architectures/cqrs/files/docs/architecture/cqrs.python.md +107 -0
  339. package/templates/architectures/cqrs/files/eslint.config.cqrs.mjs +29 -0
  340. package/templates/architectures/cqrs/files/pyproject.toml +2 -0
  341. package/templates/architectures/cqrs/files/scripts/check-cqrs-boundaries.mjs +132 -0
  342. package/templates/architectures/cqrs/files/src/__contextName.kebab__/commands/index.ts +15 -0
  343. package/templates/architectures/cqrs/files/src/__contextName.kebab__/domain/index.ts +10 -0
  344. package/templates/architectures/cqrs/files/src/__contextName.kebab__/queries/index.ts +13 -0
  345. package/templates/architectures/cqrs/files/src/__contextName.kebab__/read-models/index.ts +7 -0
  346. package/templates/architectures/cqrs/files/src/__solutionName.dot__.Abstractions/AssemblyMarker.cs +9 -0
  347. package/templates/architectures/cqrs/files/src/__solutionName.dot__.Abstractions/ICommandHandler.cs +12 -0
  348. package/templates/architectures/cqrs/files/src/__solutionName.dot__.Abstractions/IQueryHandler.cs +10 -0
  349. package/templates/architectures/cqrs/files/src/__solutionName.dot__.Abstractions/__solutionName.dot__.Abstractions.csproj +11 -0
  350. package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Commands/AssemblyMarker.cs +9 -0
  351. package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Commands/Handlers/.gitkeep +2 -0
  352. package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Commands/__solutionName.dot__.__contextName.pascal__.Commands.csproj +15 -0
  353. package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Domain/Aggregates/.gitkeep +2 -0
  354. package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Domain/AssemblyMarker.cs +9 -0
  355. package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Domain/__solutionName.dot__.__contextName.pascal__.Domain.csproj +11 -0
  356. package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Queries/AssemblyMarker.cs +9 -0
  357. package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Queries/Handlers/.gitkeep +2 -0
  358. package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Queries/ReadModels/.gitkeep +2 -0
  359. package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Queries/__solutionName.dot__.__contextName.pascal__.Queries.csproj +14 -0
  360. package/templates/architectures/cqrs/files/src/__solutionName.snake__/__contextName.snake__/__init__.py +6 -0
  361. package/templates/architectures/cqrs/files/src/__solutionName.snake__/__contextName.snake__/commands/__init__.py +15 -0
  362. package/templates/architectures/cqrs/files/src/__solutionName.snake__/__contextName.snake__/domain/__init__.py +9 -0
  363. package/templates/architectures/cqrs/files/src/__solutionName.snake__/__contextName.snake__/queries/__init__.py +14 -0
  364. package/templates/architectures/cqrs/files/src/__solutionName.snake__/__contextName.snake__/read_models/__init__.py +14 -0
  365. package/templates/architectures/cqrs/files/tests/ArchitectureTests/ArchitectureTests.csproj +33 -0
  366. package/templates/architectures/cqrs/files/tests/ArchitectureTests/CqrsBoundaryTests.cs +104 -0
  367. package/templates/architectures/event-driven/blueprint.yaml +163 -0
  368. package/templates/architectures/event-driven/files/.importlinter +43 -0
  369. package/templates/architectures/event-driven/files/Directory.Packages.props +11 -0
  370. package/templates/architectures/event-driven/files/__solutionName.dot__.slnx +11 -0
  371. package/templates/architectures/event-driven/files/docs/architecture/event-driven.dotnet.md +117 -0
  372. package/templates/architectures/event-driven/files/docs/architecture/event-driven.node.md +98 -0
  373. package/templates/architectures/event-driven/files/docs/architecture/event-driven.python.md +100 -0
  374. package/templates/architectures/event-driven/files/scripts/check-event-boundaries.mjs +181 -0
  375. package/templates/architectures/event-driven/files/src/EventCatalog/EventCatalog.csproj +11 -0
  376. package/templates/architectures/event-driven/files/src/EventCatalog/EventContract.cs +36 -0
  377. package/templates/architectures/event-driven/files/src/EventCatalog/EventEnvelope.cs +10 -0
  378. package/templates/architectures/event-driven/files/src/EventCatalog/EventRegistry.cs +16 -0
  379. package/templates/architectures/event-driven/files/src/EventCatalog/EventSchemaException.cs +19 -0
  380. package/templates/architectures/event-driven/files/src/EventCatalog/__eventDomain.pascal__/__firstEvent.pascal__V1.cs +20 -0
  381. package/templates/architectures/event-driven/files/src/EventHandlers/EventHandlers.csproj +14 -0
  382. package/templates/architectures/event-driven/files/src/EventHandlers/__firstHandler.pascal__/__firstHandler.pascal__Handler.cs +32 -0
  383. package/templates/architectures/event-driven/files/src/EventHandlers/__secondHandler.pascal__/__secondHandler.pascal__Handler.cs +30 -0
  384. package/templates/architectures/event-driven/files/src/EventPublishers/EventPublishers.csproj +14 -0
  385. package/templates/architectures/event-driven/files/src/EventPublishers/__eventDomain.pascal__/__eventDomain.pascal__Publisher.cs +27 -0
  386. package/templates/architectures/event-driven/files/src/Messaging/Adapters/InMemoryEventBroker.cs +107 -0
  387. package/templates/architectures/event-driven/files/src/Messaging/BrokerOptions.cs +19 -0
  388. package/templates/architectures/event-driven/files/src/Messaging/IEventBroker.cs +6 -0
  389. package/templates/architectures/event-driven/files/src/Messaging/IEventPublisher.cs +9 -0
  390. package/templates/architectures/event-driven/files/src/Messaging/IEventSubscriber.cs +11 -0
  391. package/templates/architectures/event-driven/files/src/Messaging/Messaging.csproj +18 -0
  392. package/templates/architectures/event-driven/files/src/Messaging/MessagingRegistration.cs +36 -0
  393. package/templates/architectures/event-driven/files/src/__solutionName.snake__/broker/__init__.py +17 -0
  394. package/templates/architectures/event-driven/files/src/__solutionName.snake__/broker/adapters/__init__.py +1 -0
  395. package/templates/architectures/event-driven/files/src/__solutionName.snake__/broker/adapters/in_memory.py +61 -0
  396. package/templates/architectures/event-driven/files/src/__solutionName.snake__/broker/config.py +42 -0
  397. package/templates/architectures/event-driven/files/src/__solutionName.snake__/broker/factory.py +13 -0
  398. package/templates/architectures/event-driven/files/src/__solutionName.snake__/broker/port.py +25 -0
  399. package/templates/architectures/event-driven/files/src/__solutionName.snake__/eventing.py +26 -0
  400. package/templates/architectures/event-driven/files/src/__solutionName.snake__/events/__eventDomain.snake__/__firstEvent.snake__/__init__.py +5 -0
  401. package/templates/architectures/event-driven/files/src/__solutionName.snake__/events/__eventDomain.snake__/__firstEvent.snake__/v1.py +34 -0
  402. package/templates/architectures/event-driven/files/src/__solutionName.snake__/events/__eventDomain.snake__/__init__.py +1 -0
  403. package/templates/architectures/event-driven/files/src/__solutionName.snake__/events/__init__.py +27 -0
  404. package/templates/architectures/event-driven/files/src/__solutionName.snake__/events/contract.py +35 -0
  405. package/templates/architectures/event-driven/files/src/__solutionName.snake__/events/envelope.py +24 -0
  406. package/templates/architectures/event-driven/files/src/__solutionName.snake__/handlers/__firstHandler.snake__/__init__.py +30 -0
  407. package/templates/architectures/event-driven/files/src/__solutionName.snake__/handlers/__init__.py +1 -0
  408. package/templates/architectures/event-driven/files/src/__solutionName.snake__/handlers/__secondHandler.snake__/__init__.py +25 -0
  409. package/templates/architectures/event-driven/files/src/__solutionName.snake__/publishers/__eventDomain.snake__.py +17 -0
  410. package/templates/architectures/event-driven/files/src/__solutionName.snake__/publishers/__init__.py +5 -0
  411. package/templates/architectures/event-driven/files/src/bootstrap/events.ts +24 -0
  412. package/templates/architectures/event-driven/files/src/broker/adapters/in-memory-broker.ts +63 -0
  413. package/templates/architectures/event-driven/files/src/broker/config.ts +39 -0
  414. package/templates/architectures/event-driven/files/src/broker/factory.ts +13 -0
  415. package/templates/architectures/event-driven/files/src/broker/index.ts +6 -0
  416. package/templates/architectures/event-driven/files/src/broker/port.ts +15 -0
  417. package/templates/architectures/event-driven/files/src/events/__eventDomain.kebab__/__firstEvent.kebab__/v1.ts +20 -0
  418. package/templates/architectures/event-driven/files/src/events/contract.ts +36 -0
  419. package/templates/architectures/event-driven/files/src/events/envelope.ts +20 -0
  420. package/templates/architectures/event-driven/files/src/events/index.ts +17 -0
  421. package/templates/architectures/event-driven/files/src/handlers/__firstHandler.kebab__/index.ts +21 -0
  422. package/templates/architectures/event-driven/files/src/handlers/__secondHandler.kebab__/index.ts +17 -0
  423. package/templates/architectures/event-driven/files/src/publishers/__eventDomain.kebab__.publisher.ts +20 -0
  424. package/templates/architectures/event-driven/files/tests/EventArchitectureTests/EventArchitectureTests.csproj +31 -0
  425. package/templates/architectures/event-driven/files/tests/EventArchitectureTests/EventBoundaryTests.cs +121 -0
  426. package/templates/architectures/event-driven/files/tests/architecture/test_event_boundaries.py +161 -0
  427. package/templates/architectures/feature-sliced-design/blueprint.yaml +121 -0
  428. package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/app/.gitkeep +1 -0
  429. package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/entities/.gitkeep +1 -0
  430. package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/features/.gitkeep +1 -0
  431. package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/pages/.gitkeep +1 -0
  432. package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/shared/api/index.ts +3 -0
  433. package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/shared/config/index.ts +3 -0
  434. package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/shared/lib/index.ts +3 -0
  435. package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/shared/ui/index.ts +3 -0
  436. package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/widgets/.gitkeep +1 -0
  437. package/templates/architectures/feature-sliced-design/files/docs/architecture.md +148 -0
  438. package/templates/architectures/feature-sliced-design/files/package.json +6 -0
  439. package/templates/architectures/feature-sliced-design/files/scripts/check-fsd-boundaries.mjs +210 -0
  440. package/templates/architectures/feature-sliced-design/files/src/_app/.gitkeep +1 -0
  441. package/templates/architectures/feature-sliced-design/files/src/_pages/.gitkeep +1 -0
  442. package/templates/architectures/feature-sliced-design/files/src/app/.gitkeep +1 -0
  443. package/templates/architectures/feature-sliced-design/files/src/entities/.gitkeep +1 -0
  444. package/templates/architectures/feature-sliced-design/files/src/features/.gitkeep +1 -0
  445. package/templates/architectures/feature-sliced-design/files/src/pages/.gitkeep +1 -0
  446. package/templates/architectures/feature-sliced-design/files/src/shared/api/index.ts +3 -0
  447. package/templates/architectures/feature-sliced-design/files/src/shared/config/index.ts +3 -0
  448. package/templates/architectures/feature-sliced-design/files/src/shared/lib/index.ts +3 -0
  449. package/templates/architectures/feature-sliced-design/files/src/shared/ui/index.ts +3 -0
  450. package/templates/architectures/feature-sliced-design/files/src/widgets/.gitkeep +1 -0
  451. package/templates/architectures/feature-sliced-design/files/steiger.config.js +21 -0
  452. package/templates/architectures/hexagonal/blueprint.yaml +146 -0
  453. package/templates/architectures/hexagonal/files/.importlinter +33 -0
  454. package/templates/architectures/hexagonal/files/Directory.Packages.props +8 -0
  455. package/templates/architectures/hexagonal/files/__solutionName.dot__.slnx +13 -0
  456. package/templates/architectures/hexagonal/files/docs/architecture/hexagonal.md +102 -0
  457. package/templates/architectures/hexagonal/files/internal/adapters/inbound/rest/doc.go +2 -0
  458. package/templates/architectures/hexagonal/files/internal/adapters/outbound/memory/doc.go +2 -0
  459. package/templates/architectures/hexagonal/files/internal/adapters/outbound/postgres/doc.go +2 -0
  460. package/templates/architectures/hexagonal/files/internal/application/doc.go +2 -0
  461. package/templates/architectures/hexagonal/files/internal/architecture/architecture_test.go +150 -0
  462. package/templates/architectures/hexagonal/files/internal/architecture/doc.go +2 -0
  463. package/templates/architectures/hexagonal/files/internal/bootstrap/doc.go +2 -0
  464. package/templates/architectures/hexagonal/files/internal/domain/doc.go +2 -0
  465. package/templates/architectures/hexagonal/files/internal/ports/inbound/doc.go +2 -0
  466. package/templates/architectures/hexagonal/files/internal/ports/outbound/doc.go +2 -0
  467. package/templates/architectures/hexagonal/files/pyproject.toml +2 -0
  468. package/templates/architectures/hexagonal/files/scripts/check-architecture.mjs +104 -0
  469. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Adapters.Inbound.Http/HttpAdapterMarker.cs +4 -0
  470. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Adapters.Inbound.Http/__solutionName.dot__.Adapters.Inbound.Http.csproj +15 -0
  471. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Adapters.Outbound.InMemory/InMemoryAdapterMarker.cs +4 -0
  472. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Adapters.Outbound.InMemory/__solutionName.dot__.Adapters.Outbound.InMemory.csproj +15 -0
  473. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Adapters.Outbound.Persistence/PersistenceAdapterMarker.cs +4 -0
  474. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Adapters.Outbound.Persistence/__solutionName.dot__.Adapters.Outbound.Persistence.csproj +15 -0
  475. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Application/ApplicationMarker.cs +4 -0
  476. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Application/Ports/Inbound/.gitkeep +1 -0
  477. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Application/Ports/Outbound/.gitkeep +1 -0
  478. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Application/UseCases/.gitkeep +1 -0
  479. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Application/__solutionName.dot__.Application.csproj +15 -0
  480. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Bootstrap/CompositionRoot.cs +8 -0
  481. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Bootstrap/__solutionName.dot__.Bootstrap.csproj +18 -0
  482. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Domain/DomainMarker.cs +4 -0
  483. package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Domain/__solutionName.dot__.Domain.csproj +12 -0
  484. package/templates/architectures/hexagonal/files/src/__solutionName.snake__/adapters/__init__.py +1 -0
  485. package/templates/architectures/hexagonal/files/src/__solutionName.snake__/adapters/inbound/__init__.py +1 -0
  486. package/templates/architectures/hexagonal/files/src/__solutionName.snake__/adapters/inbound/http/__init__.py +1 -0
  487. package/templates/architectures/hexagonal/files/src/__solutionName.snake__/adapters/outbound/__init__.py +1 -0
  488. package/templates/architectures/hexagonal/files/src/__solutionName.snake__/adapters/outbound/in_memory/__init__.py +1 -0
  489. package/templates/architectures/hexagonal/files/src/__solutionName.snake__/adapters/outbound/persistence/__init__.py +1 -0
  490. package/templates/architectures/hexagonal/files/src/__solutionName.snake__/application/__init__.py +1 -0
  491. package/templates/architectures/hexagonal/files/src/__solutionName.snake__/bootstrap/__init__.py +1 -0
  492. package/templates/architectures/hexagonal/files/src/__solutionName.snake__/domain/__init__.py +1 -0
  493. package/templates/architectures/hexagonal/files/src/__solutionName.snake__/ports/__init__.py +1 -0
  494. package/templates/architectures/hexagonal/files/src/__solutionName.snake__/ports/inbound/__init__.py +1 -0
  495. package/templates/architectures/hexagonal/files/src/__solutionName.snake__/ports/outbound/__init__.py +1 -0
  496. package/templates/architectures/hexagonal/files/src/adapters/inbound/http/index.ts +2 -0
  497. package/templates/architectures/hexagonal/files/src/adapters/outbound/in-memory/index.ts +2 -0
  498. package/templates/architectures/hexagonal/files/src/adapters/outbound/persistence/index.ts +2 -0
  499. package/templates/architectures/hexagonal/files/src/application/index.ts +2 -0
  500. package/templates/architectures/hexagonal/files/src/bootstrap/index.ts +2 -0
  501. package/templates/architectures/hexagonal/files/src/domain/index.ts +2 -0
  502. package/templates/architectures/hexagonal/files/src/ports/inbound/index.ts +2 -0
  503. package/templates/architectures/hexagonal/files/src/ports/outbound/index.ts +2 -0
  504. package/templates/architectures/hexagonal/files/tests/ArchitectureTests/ArchitectureTests.csproj +34 -0
  505. package/templates/architectures/hexagonal/files/tests/ArchitectureTests/HexagonBoundaryTests.cs +135 -0
  506. package/templates/architectures/lakehouse/blueprint.yaml +103 -0
  507. package/templates/architectures/lakehouse/files/.importlinter +51 -0
  508. package/templates/architectures/lakehouse/files/docs/architecture/lakehouse.python.md +134 -0
  509. package/templates/architectures/lakehouse/files/pyproject.toml +5 -0
  510. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/__init__.py +20 -0
  511. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/catalog/__init__.py +21 -0
  512. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/catalog/_delta.py +155 -0
  513. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/catalog/_iceberg.py +214 -0
  514. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/maintenance/__init__.py +9 -0
  515. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/maintenance/__main__.py +31 -0
  516. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/maintenance/jobs.py +38 -0
  517. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/ports.py +58 -0
  518. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/queries/__init__.py +13 -0
  519. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/queries/reads.py +30 -0
  520. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/schema.py +66 -0
  521. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/settings.py +61 -0
  522. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/tables/__firstTable.snake__.py +22 -0
  523. package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/tables/__init__.py +28 -0
  524. package/templates/architectures/lakehouse/files/tests/architecture/test_lakehouse_boundaries.py +155 -0
  525. package/templates/architectures/layered/blueprint.yaml +159 -0
  526. package/templates/architectures/layered/files/.importlinter +18 -0
  527. package/templates/architectures/layered/files/Directory.Build.targets +10 -0
  528. package/templates/architectures/layered/files/Directory.Packages.props +7 -0
  529. package/templates/architectures/layered/files/__solutionName.dot__.slnx +9 -0
  530. package/templates/architectures/layered/files/architecture.layers.json +19 -0
  531. package/templates/architectures/layered/files/docs/architecture/layered.md +94 -0
  532. package/templates/architectures/layered/files/internal/architecture/doc.go +3 -0
  533. package/templates/architectures/layered/files/internal/architecture/layers_test.go +138 -0
  534. package/templates/architectures/layered/files/internal/business/doc.go +3 -0
  535. package/templates/architectures/layered/files/internal/data/doc.go +3 -0
  536. package/templates/architectures/layered/files/internal/presentation/doc.go +4 -0
  537. package/templates/architectures/layered/files/pyproject.toml +2 -0
  538. package/templates/architectures/layered/files/scripts/check-layers.mjs +125 -0
  539. package/templates/architectures/layered/files/src/__solutionName.dot__.Business/AssemblyMarker.cs +7 -0
  540. package/templates/architectures/layered/files/src/__solutionName.dot__.Business/__solutionName.dot__.Business.csproj +15 -0
  541. package/templates/architectures/layered/files/src/__solutionName.dot__.Data/AssemblyMarker.cs +7 -0
  542. package/templates/architectures/layered/files/src/__solutionName.dot__.Data/__solutionName.dot__.Data.csproj +10 -0
  543. package/templates/architectures/layered/files/src/__solutionName.snake__/business/__init__.py +1 -0
  544. package/templates/architectures/layered/files/src/__solutionName.snake__/data/__init__.py +1 -0
  545. package/templates/architectures/layered/files/src/__solutionName.snake__/presentation/__init__.py +1 -0
  546. package/templates/architectures/layered/files/src/business/README.md +1 -0
  547. package/templates/architectures/layered/files/src/data/README.md +1 -0
  548. package/templates/architectures/layered/files/src/presentation/README.md +1 -0
  549. package/templates/architectures/layered/files/src/shared/README.md +1 -0
  550. package/templates/architectures/layered/files/tests/__solutionName.dot__.ArchitectureTests/LayerBoundaryTests.cs +151 -0
  551. package/templates/architectures/layered/files/tests/__solutionName.dot__.ArchitectureTests/__solutionName.dot__.ArchitectureTests.csproj +27 -0
  552. package/templates/architectures/llm-workflow/blueprint.yaml +129 -0
  553. package/templates/architectures/llm-workflow/files/.importlinter +34 -0
  554. package/templates/architectures/llm-workflow/files/__promptsDir__/README.md +26 -0
  555. package/templates/architectures/llm-workflow/files/__promptsDir__/__firstStep.kebab__/__promptVersion__.md +7 -0
  556. package/templates/architectures/llm-workflow/files/docs/architecture/llm-workflow.python.md +133 -0
  557. package/templates/architectures/llm-workflow/files/docs/architecture/llm-workflow.typescript.md +124 -0
  558. package/templates/architectures/llm-workflow/files/package.json +9 -0
  559. package/templates/architectures/llm-workflow/files/scripts/check-llm-workflow.mjs +200 -0
  560. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/__init__.py +5 -0
  561. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/chains/__init__.py +5 -0
  562. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/chains/__workflowName.snake__.py +19 -0
  563. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/evals/__init__.py +1 -0
  564. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/evals/assertions.py +82 -0
  565. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/evals/goldens.jsonl +4 -0
  566. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/evals/runner.py +64 -0
  567. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/parallel/__init__.py +5 -0
  568. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/parallel/gather.py +28 -0
  569. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/ports/__init__.py +38 -0
  570. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/ports/llm.py +41 -0
  571. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/ports/stub.py +27 -0
  572. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/prompts.py +22 -0
  573. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/routing/__init__.py +5 -0
  574. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/routing/route.py +47 -0
  575. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/settings.py +60 -0
  576. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/steps/__firstStep.snake__.py +24 -0
  577. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/steps/__init__.py +6 -0
  578. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/steps/normalize.py +11 -0
  579. package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/types.py +40 -0
  580. package/templates/architectures/llm-workflow/files/src/workflow/chains/__workflowName.kebab__.ts +14 -0
  581. package/templates/architectures/llm-workflow/files/src/workflow/evals/assert.ts +59 -0
  582. package/templates/architectures/llm-workflow/files/src/workflow/evals/goldens.jsonl +4 -0
  583. package/templates/architectures/llm-workflow/files/src/workflow/evals/run.ts +60 -0
  584. package/templates/architectures/llm-workflow/files/src/workflow/parallel/gather.ts +25 -0
  585. package/templates/architectures/llm-workflow/files/src/workflow/ports/index.ts +34 -0
  586. package/templates/architectures/llm-workflow/files/src/workflow/ports/llm.ts +33 -0
  587. package/templates/architectures/llm-workflow/files/src/workflow/ports/stub.ts +23 -0
  588. package/templates/architectures/llm-workflow/files/src/workflow/prompts.ts +27 -0
  589. package/templates/architectures/llm-workflow/files/src/workflow/routing/route.ts +38 -0
  590. package/templates/architectures/llm-workflow/files/src/workflow/settings.ts +44 -0
  591. package/templates/architectures/llm-workflow/files/src/workflow/steps/__firstStep.kebab__.ts +19 -0
  592. package/templates/architectures/llm-workflow/files/src/workflow/steps/index.ts +3 -0
  593. package/templates/architectures/llm-workflow/files/src/workflow/steps/normalize.ts +8 -0
  594. package/templates/architectures/llm-workflow/files/src/workflow/types.ts +29 -0
  595. package/templates/architectures/llm-workflow/files/tests/test_workflow_boundaries.py +171 -0
  596. package/templates/architectures/llm-workflow/files/tests/test_workflow_goldens.py +30 -0
  597. package/templates/architectures/medallion/blueprint.yaml +91 -0
  598. package/templates/architectures/medallion/files/.importlinter +31 -0
  599. package/templates/architectures/medallion/files/contracts/bronze.contract.toml +16 -0
  600. package/templates/architectures/medallion/files/contracts/gold.contract.toml +21 -0
  601. package/templates/architectures/medallion/files/contracts/silver.contract.toml +31 -0
  602. package/templates/architectures/medallion/files/docs/architecture/medallion.python.md +104 -0
  603. package/templates/architectures/medallion/files/pyproject.toml +2 -0
  604. package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/__init__.py +5 -0
  605. package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/bronze/__init__.py +5 -0
  606. package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/bronze/ingest.py +41 -0
  607. package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/config.py +48 -0
  608. package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/contracts.py +166 -0
  609. package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/gold/__init__.py +5 -0
  610. package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/gold/aggregate.py +40 -0
  611. package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/io.py +28 -0
  612. package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/run.py +40 -0
  613. package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/silver/__init__.py +6 -0
  614. package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/silver/conform.py +53 -0
  615. package/templates/architectures/medallion/files/tests/architecture/test_layer_contracts.py +72 -0
  616. package/templates/architectures/medallion/files/tests/architecture/test_medallion_boundaries.py +166 -0
  617. package/templates/architectures/micro-frontends/blueprint.yaml +124 -0
  618. package/templates/architectures/micro-frontends/files/apps/host/package.json +10 -0
  619. package/templates/architectures/micro-frontends/files/apps/host/remotes.example.json +9 -0
  620. package/templates/architectures/micro-frontends/files/apps/host/src/config.ts +34 -0
  621. package/templates/architectures/micro-frontends/files/apps/host/src/loaders/import-map.ts +34 -0
  622. package/templates/architectures/micro-frontends/files/apps/host/src/loaders/module-federation.ts +29 -0
  623. package/templates/architectures/micro-frontends/files/apps/host/src/remote-loader.ts +45 -0
  624. package/templates/architectures/micro-frontends/files/apps/remotes/__remoteName.kebab__/module-federation.config.mjs +19 -0
  625. package/templates/architectures/micro-frontends/files/apps/remotes/__remoteName.kebab__/package.json +15 -0
  626. package/templates/architectures/micro-frontends/files/apps/remotes/__remoteName.kebab__/src/config.ts +28 -0
  627. package/templates/architectures/micro-frontends/files/apps/remotes/__remoteName.kebab__/src/index.ts +5 -0
  628. package/templates/architectures/micro-frontends/files/apps/remotes/__remoteName.kebab__/src/mount.ts +32 -0
  629. package/templates/architectures/micro-frontends/files/docs/architecture/micro-frontends.md +161 -0
  630. package/templates/architectures/micro-frontends/files/package.json +14 -0
  631. package/templates/architectures/micro-frontends/files/packages/design-system/README.md +27 -0
  632. package/templates/architectures/micro-frontends/files/packages/design-system/package.json +11 -0
  633. package/templates/architectures/micro-frontends/files/packages/design-system/src/index.ts +10 -0
  634. package/templates/architectures/micro-frontends/files/packages/design-system/src/tokens.ts +20 -0
  635. package/templates/architectures/micro-frontends/files/packages/host-contract/package.json +11 -0
  636. package/templates/architectures/micro-frontends/files/packages/host-contract/src/index.ts +18 -0
  637. package/templates/architectures/micro-frontends/files/scripts/check-mfe-boundaries.mjs +199 -0
  638. package/templates/architectures/microservices/blueprint.yaml +160 -0
  639. package/templates/architectures/microservices/files/.importlinter +22 -0
  640. package/templates/architectures/microservices/files/Directory.Packages.props +8 -0
  641. package/templates/architectures/microservices/files/__solutionName.dot__.slnx +9 -0
  642. package/templates/architectures/microservices/files/contracts/__firstService.kebab__/package.json +8 -0
  643. package/templates/architectures/microservices/files/contracts/__firstService.kebab__/src/index.ts +32 -0
  644. package/templates/architectures/microservices/files/contracts/__firstService.lower__/contract.go +35 -0
  645. package/templates/architectures/microservices/files/contracts/__solutionName.pascal__.Contracts.__firstService.pascal__/__firstService.pascal__Contract.cs +26 -0
  646. package/templates/architectures/microservices/files/contracts/__solutionName.pascal__.Contracts.__firstService.pascal__/__solutionName.pascal__.Contracts.__firstService.pascal__.csproj +11 -0
  647. package/templates/architectures/microservices/files/deploy/__firstService.kebab__/Dockerfile +16 -0
  648. package/templates/architectures/microservices/files/docs/architecture/microservices.dotnet.md +91 -0
  649. package/templates/architectures/microservices/files/docs/architecture/microservices.go.md +77 -0
  650. package/templates/architectures/microservices/files/docs/architecture/microservices.node.md +88 -0
  651. package/templates/architectures/microservices/files/docs/architecture/microservices.python.md +92 -0
  652. package/templates/architectures/microservices/files/internal/architecture/boundary_test.go +139 -0
  653. package/templates/architectures/microservices/files/package.json +9 -0
  654. package/templates/architectures/microservices/files/pyproject.toml +2 -0
  655. package/templates/architectures/microservices/files/scripts/check-service-boundaries.mjs +200 -0
  656. package/templates/architectures/microservices/files/services/__firstService.kebab__/Dockerfile +19 -0
  657. package/templates/architectures/microservices/files/services/__firstService.kebab__/package.json +9 -0
  658. package/templates/architectures/microservices/files/services/__firstService.kebab__/src/config.ts +50 -0
  659. package/templates/architectures/microservices/files/services/__firstService.kebab__/src/index.ts +26 -0
  660. package/templates/architectures/microservices/files/services/__firstService.lower__/Dockerfile +18 -0
  661. package/templates/architectures/microservices/files/services/__firstService.lower__/internal/config/config.go +45 -0
  662. package/templates/architectures/microservices/files/services/__firstService.lower__/main.go +23 -0
  663. package/templates/architectures/microservices/files/services/__solutionName.pascal__.Services.__firstService.pascal__/Dockerfile +17 -0
  664. package/templates/architectures/microservices/files/services/__solutionName.pascal__.Services.__firstService.pascal__/ServiceAssemblyMarker.cs +10 -0
  665. package/templates/architectures/microservices/files/services/__solutionName.pascal__.Services.__firstService.pascal__/ServiceOptions.cs +28 -0
  666. package/templates/architectures/microservices/files/services/__solutionName.pascal__.Services.__firstService.pascal__/__solutionName.pascal__.Services.__firstService.pascal__.csproj +14 -0
  667. package/templates/architectures/microservices/files/src/__solutionName.snake__/contracts/__firstService.snake__/__init__.py +42 -0
  668. package/templates/architectures/microservices/files/src/__solutionName.snake__/contracts/__init__.py +5 -0
  669. package/templates/architectures/microservices/files/src/__solutionName.snake__/services/__firstService.snake__/__init__.py +5 -0
  670. package/templates/architectures/microservices/files/src/__solutionName.snake__/services/__firstService.snake__/config.py +54 -0
  671. package/templates/architectures/microservices/files/src/__solutionName.snake__/services/__firstService.snake__/service.py +21 -0
  672. package/templates/architectures/microservices/files/src/__solutionName.snake__/services/__init__.py +5 -0
  673. package/templates/architectures/microservices/files/tests/ArchitectureTests/ArchitectureTests.csproj +29 -0
  674. package/templates/architectures/microservices/files/tests/ArchitectureTests/ServiceBoundaryTests.cs +102 -0
  675. package/templates/architectures/microservices/files/tests/architecture/test_service_boundaries.py +120 -0
  676. package/templates/architectures/modular-monolith/blueprint.yaml +111 -0
  677. package/templates/architectures/modular-monolith/files/.importlinter +22 -0
  678. package/templates/architectures/modular-monolith/files/Directory.Packages.props +9 -0
  679. package/templates/architectures/modular-monolith/files/__solutionName.dot__.slnx +9 -0
  680. package/templates/architectures/modular-monolith/files/docs/architecture/modular-monolith.dotnet.md +54 -0
  681. package/templates/architectures/modular-monolith/files/docs/architecture/modular-monolith.go.md +50 -0
  682. package/templates/architectures/modular-monolith/files/docs/architecture/modular-monolith.node.md +56 -0
  683. package/templates/architectures/modular-monolith/files/docs/architecture/modular-monolith.python.md +54 -0
  684. package/templates/architectures/modular-monolith/files/internal/architecture/boundary_test.go +151 -0
  685. package/templates/architectures/modular-monolith/files/internal/modules/__moduleName.lower__/__moduleName.lower__.go +56 -0
  686. package/templates/architectures/modular-monolith/files/internal/modules/__moduleName.lower__/internal/store/store.go +12 -0
  687. package/templates/architectures/modular-monolith/files/internal/shared/events/bus.go +60 -0
  688. package/templates/architectures/modular-monolith/files/scripts/check-module-boundaries.mjs +185 -0
  689. package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.Modules.__moduleName.pascal__/Api/I__moduleName.pascal__Module.cs +14 -0
  690. package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.Modules.__moduleName.pascal__/Api/__moduleName.pascal__Events.cs +6 -0
  691. package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.Modules.__moduleName.pascal__/Api/__moduleName.pascal__ModuleRegistration.cs +18 -0
  692. package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.Modules.__moduleName.pascal__/Internal/__moduleName.pascal__Service.cs +19 -0
  693. package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.Modules.__moduleName.pascal__/__solutionName.dot__.Modules.__moduleName.pascal__.csproj +16 -0
  694. package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.SharedKernel/Events/EventBusRegistration.cs +14 -0
  695. package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.SharedKernel/Events/IEventBus.cs +15 -0
  696. package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.SharedKernel/Events/IIntegrationEvent.cs +8 -0
  697. package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.SharedKernel/Events/InProcessEventBus.cs +23 -0
  698. package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.SharedKernel/__solutionName.dot__.SharedKernel.csproj +12 -0
  699. package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__init__.py +1 -0
  700. package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__moduleName.snake__/__init__.py +1 -0
  701. package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__moduleName.snake__/api/__init__.py +15 -0
  702. package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__moduleName.snake__/api/contracts.py +27 -0
  703. package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__moduleName.snake__/api/factory.py +11 -0
  704. package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__moduleName.snake__/internal/__init__.py +1 -0
  705. package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__moduleName.snake__/internal/service.py +20 -0
  706. package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/shared/__init__.py +1 -0
  707. package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/shared/events/__init__.py +3 -0
  708. package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/shared/events/bus.py +43 -0
  709. package/templates/architectures/modular-monolith/files/src/modules/__moduleName.kebab__/api/contracts.ts +19 -0
  710. package/templates/architectures/modular-monolith/files/src/modules/__moduleName.kebab__/api/index.ts +18 -0
  711. package/templates/architectures/modular-monolith/files/src/modules/__moduleName.kebab__/internal/__moduleName.kebab__.service.ts +24 -0
  712. package/templates/architectures/modular-monolith/files/src/shared/events/event-bus.ts +34 -0
  713. package/templates/architectures/modular-monolith/files/src/shared/events/index.ts +2 -0
  714. package/templates/architectures/modular-monolith/files/tests/__solutionName.dot__.ArchitectureTests/ModuleBoundaryTests.cs +102 -0
  715. package/templates/architectures/modular-monolith/files/tests/__solutionName.dot__.ArchitectureTests/__solutionName.dot__.ArchitectureTests.csproj +30 -0
  716. package/templates/architectures/modular-monolith/files/tests/architecture/test_module_boundaries.py +114 -0
  717. package/templates/architectures/monolith/blueprint.yaml +141 -0
  718. package/templates/architectures/monolith/files/.importlinter +14 -0
  719. package/templates/architectures/monolith/files/Directory.Packages.props +8 -0
  720. package/templates/architectures/monolith/files/__solutionName.dot__.slnx +5 -0
  721. package/templates/architectures/monolith/files/docs/architecture/monolith.dotnet.md +78 -0
  722. package/templates/architectures/monolith/files/docs/architecture/monolith.go.md +69 -0
  723. package/templates/architectures/monolith/files/docs/architecture/monolith.node.md +70 -0
  724. package/templates/architectures/monolith/files/docs/architecture/monolith.python.md +71 -0
  725. package/templates/architectures/monolith/files/internal/architecture/boundary_test.go +141 -0
  726. package/templates/architectures/monolith/files/internal/features/__featureName.lower__/__featureName.lower__.go +37 -0
  727. package/templates/architectures/monolith/files/internal/features/__featureName.lower__/internal/store/store.go +14 -0
  728. package/templates/architectures/monolith/files/internal/features/features.go +18 -0
  729. package/templates/architectures/monolith/files/internal/shared/apperr/apperr.go +17 -0
  730. package/templates/architectures/monolith/files/pyproject.toml +2 -0
  731. package/templates/architectures/monolith/files/scripts/check-monolith-boundaries.mjs +187 -0
  732. package/templates/architectures/monolith/files/src/__solutionName.dot__.Api/Features/__featureName.pascal__/Internal/__featureName.pascal__Service.cs +12 -0
  733. package/templates/architectures/monolith/files/src/__solutionName.dot__.Api/Features/__featureName.pascal__/__featureName.pascal__Feature.cs +13 -0
  734. package/templates/architectures/monolith/files/src/__solutionName.dot__.Api/Features/__featureName.pascal__/__featureName.pascal__Registration.cs +13 -0
  735. package/templates/architectures/monolith/files/src/__solutionName.dot__.Api/Kernel/AppException.cs +30 -0
  736. package/templates/architectures/monolith/files/src/__solutionName.pascal__.Api/Features/__featureName.pascal__/Internal/__featureName.pascal__Service.cs +12 -0
  737. package/templates/architectures/monolith/files/src/__solutionName.pascal__.Api/Features/__featureName.pascal__/__featureName.pascal__Feature.cs +13 -0
  738. package/templates/architectures/monolith/files/src/__solutionName.pascal__.Api/Features/__featureName.pascal__/__featureName.pascal__Registration.cs +13 -0
  739. package/templates/architectures/monolith/files/src/__solutionName.pascal__.Api/Kernel/AppException.cs +30 -0
  740. package/templates/architectures/monolith/files/src/__solutionName.snake__/features/__featureName.snake__/__init__.py +31 -0
  741. package/templates/architectures/monolith/files/src/__solutionName.snake__/features/__featureName.snake__/service.py +22 -0
  742. package/templates/architectures/monolith/files/src/__solutionName.snake__/features/__init__.py +14 -0
  743. package/templates/architectures/monolith/files/src/__solutionName.snake__/shared/__init__.py +11 -0
  744. package/templates/architectures/monolith/files/src/__solutionName.snake__/shared/errors.py +13 -0
  745. package/templates/architectures/monolith/files/src/features/__featureName.kebab__/__featureName.kebab__.service.ts +15 -0
  746. package/templates/architectures/monolith/files/src/features/__featureName.kebab__/index.ts +20 -0
  747. package/templates/architectures/monolith/files/src/features/index.ts +11 -0
  748. package/templates/architectures/monolith/files/src/shared/errors.ts +13 -0
  749. package/templates/architectures/monolith/files/src/shared/index.ts +7 -0
  750. package/templates/architectures/monolith/files/tests/ArchitectureTests/ArchitectureTests.csproj +32 -0
  751. package/templates/architectures/monolith/files/tests/ArchitectureTests/FeatureBoundaryTests.cs +129 -0
  752. package/templates/architectures/monolith/files/tests/architecture/test_monolith_boundaries.py +136 -0
  753. package/templates/architectures/multi-agent/blueprint.yaml +97 -0
  754. package/templates/architectures/multi-agent/files/.importlinter +36 -0
  755. package/templates/architectures/multi-agent/files/docs/architecture/multi-agent.node.md +110 -0
  756. package/templates/architectures/multi-agent/files/docs/architecture/multi-agent.python.md +94 -0
  757. package/templates/architectures/multi-agent/files/docs/architecture/multi-agent.typescript.md +102 -0
  758. package/templates/architectures/multi-agent/files/pyproject.toml +2 -0
  759. package/templates/architectures/multi-agent/files/scripts/check-agent-boundaries.mjs +207 -0
  760. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/__init__.py +5 -0
  761. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/config.py +52 -0
  762. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/contracts.py +62 -0
  763. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/orchestrator/__init__.py +9 -0
  764. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/orchestrator/budget.py +45 -0
  765. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/orchestrator/fanout.py +63 -0
  766. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/orchestrator/lead.py +92 -0
  767. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/runtime/__init__.py +5 -0
  768. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/runtime/runner.py +48 -0
  769. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/workers/__init__.py +27 -0
  770. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/workers/__workerName.snake__/__init__.py +9 -0
  771. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/workers/__workerName.snake__/prompt.py +31 -0
  772. package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/workers/__workerName.snake__/worker.py +28 -0
  773. package/templates/architectures/multi-agent/files/src/agents/config.ts +46 -0
  774. package/templates/architectures/multi-agent/files/src/agents/contracts/index.ts +4 -0
  775. package/templates/architectures/multi-agent/files/src/agents/contracts/result.ts +50 -0
  776. package/templates/architectures/multi-agent/files/src/agents/contracts/task.ts +19 -0
  777. package/templates/architectures/multi-agent/files/src/agents/orchestrator/budget.ts +51 -0
  778. package/templates/architectures/multi-agent/files/src/agents/orchestrator/fanout.ts +67 -0
  779. package/templates/architectures/multi-agent/files/src/agents/orchestrator/index.ts +4 -0
  780. package/templates/architectures/multi-agent/files/src/agents/orchestrator/lead.ts +77 -0
  781. package/templates/architectures/multi-agent/files/src/agents/runtime/index.ts +3 -0
  782. package/templates/architectures/multi-agent/files/src/agents/runtime/runner.ts +36 -0
  783. package/templates/architectures/multi-agent/files/src/agents/workers/README.md +13 -0
  784. package/templates/architectures/multi-agent/files/src/agents/workers/__workerName.kebab__/prompt.ts +22 -0
  785. package/templates/architectures/multi-agent/files/src/agents/workers/__workerName.kebab__/worker.ts +25 -0
  786. package/templates/architectures/multi-agent/files/src/agents/workers/index.ts +15 -0
  787. package/templates/architectures/multi-agent/files/tests/architecture/test_agent_boundaries.py +184 -0
  788. package/templates/architectures/mvc-mvvm/blueprint.yaml +156 -0
  789. package/templates/architectures/mvc-mvvm/files/.importlinter +25 -0
  790. package/templates/architectures/mvc-mvvm/files/Directory.Packages.props +8 -0
  791. package/templates/architectures/mvc-mvvm/files/__solutionName.dot__.slnx +8 -0
  792. package/templates/architectures/mvc-mvvm/files/docs/architecture/mvc-mvvm.dotnet.md +84 -0
  793. package/templates/architectures/mvc-mvvm/files/docs/architecture/mvc-mvvm.python.md +69 -0
  794. package/templates/architectures/mvc-mvvm/files/docs/architecture/mvc-mvvm.typescript.md +85 -0
  795. package/templates/architectures/mvc-mvvm/files/scripts/check-mvvm-boundaries.mjs +234 -0
  796. package/templates/architectures/mvc-mvvm/files/src/__solutionName.dot__.Presentation/Models/__firstScreen.pascal__.cs +8 -0
  797. package/templates/architectures/mvc-mvvm/files/src/__solutionName.dot__.Presentation/ViewModels/RelayCommand.cs +18 -0
  798. package/templates/architectures/mvc-mvvm/files/src/__solutionName.dot__.Presentation/ViewModels/ViewModelBase.cs +27 -0
  799. package/templates/architectures/mvc-mvvm/files/src/__solutionName.dot__.Presentation/ViewModels/__firstScreen.pascal__ViewModel.cs +55 -0
  800. package/templates/architectures/mvc-mvvm/files/src/__solutionName.dot__.Presentation/Views/README.md +12 -0
  801. package/templates/architectures/mvc-mvvm/files/src/__solutionName.dot__.Presentation/__solutionName.dot__.Presentation.csproj +11 -0
  802. package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/controllers/__firstScreen.snake___controller.py +17 -0
  803. package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/controllers/__init__.py +5 -0
  804. package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/models/__firstScreen.snake__.py +13 -0
  805. package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/models/__init__.py +5 -0
  806. package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/models/repository.py +17 -0
  807. package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/views/__firstScreen.snake___view.py +17 -0
  808. package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/views/__init__.py +6 -0
  809. package/templates/architectures/mvc-mvvm/files/src/models/index.ts +4 -0
  810. package/templates/architectures/mvc-mvvm/files/src/viewmodels/index.ts +12 -0
  811. package/templates/architectures/mvc-mvvm/files/src/views/index.ts +10 -0
  812. package/templates/architectures/mvc-mvvm/files/tests/__solutionName.dot__.ArchitectureTests/PresentationBoundaryTests.cs +124 -0
  813. package/templates/architectures/mvc-mvvm/files/tests/__solutionName.dot__.ArchitectureTests/__solutionName.dot__.ArchitectureTests.csproj +28 -0
  814. package/templates/architectures/mvc-mvvm/files/tests/test_presentation_boundaries.py +33 -0
  815. package/templates/architectures/onion/blueprint.yaml +146 -0
  816. package/templates/architectures/onion/files/.dependency-cruiser.cjs +50 -0
  817. package/templates/architectures/onion/files/.importlinter +33 -0
  818. package/templates/architectures/onion/files/Directory.Packages.props +8 -0
  819. package/templates/architectures/onion/files/__solutionName.dot__.slnx +11 -0
  820. package/templates/architectures/onion/files/docs/architecture/onion-dotnet.md +39 -0
  821. package/templates/architectures/onion/files/docs/architecture/onion-go.md +33 -0
  822. package/templates/architectures/onion/files/docs/architecture/onion-python.md +35 -0
  823. package/templates/architectures/onion/files/docs/architecture/onion-typescript.md +34 -0
  824. package/templates/architectures/onion/files/internal/applicationservices/doc.go +4 -0
  825. package/templates/architectures/onion/files/internal/arch/rings.go +11 -0
  826. package/templates/architectures/onion/files/internal/arch/rings_test.go +112 -0
  827. package/templates/architectures/onion/files/internal/domain/doc.go +4 -0
  828. package/templates/architectures/onion/files/internal/domainservices/doc.go +5 -0
  829. package/templates/architectures/onion/files/internal/infrastructure/doc.go +5 -0
  830. package/templates/architectures/onion/files/pyproject.toml +2 -0
  831. package/templates/architectures/onion/files/src/__solutionName.dot__.ApplicationServices/ApplicationServicesAssemblyMarker.cs +4 -0
  832. package/templates/architectures/onion/files/src/__solutionName.dot__.ApplicationServices/__solutionName.dot__.ApplicationServices.csproj +13 -0
  833. package/templates/architectures/onion/files/src/__solutionName.dot__.Domain/DomainAssemblyMarker.cs +4 -0
  834. package/templates/architectures/onion/files/src/__solutionName.dot__.Domain/__solutionName.dot__.Domain.csproj +11 -0
  835. package/templates/architectures/onion/files/src/__solutionName.dot__.DomainServices/DomainServicesAssemblyMarker.cs +4 -0
  836. package/templates/architectures/onion/files/src/__solutionName.dot__.DomainServices/Repositories/.gitkeep +2 -0
  837. package/templates/architectures/onion/files/src/__solutionName.dot__.DomainServices/__solutionName.dot__.DomainServices.csproj +14 -0
  838. package/templates/architectures/onion/files/src/__solutionName.dot__.Infrastructure/InfrastructureAssemblyMarker.cs +4 -0
  839. package/templates/architectures/onion/files/src/__solutionName.dot__.Infrastructure/Repositories/.gitkeep +2 -0
  840. package/templates/architectures/onion/files/src/__solutionName.dot__.Infrastructure/__solutionName.dot__.Infrastructure.csproj +14 -0
  841. package/templates/architectures/onion/files/src/__solutionName.snake__/application_services/__init__.py +4 -0
  842. package/templates/architectures/onion/files/src/__solutionName.snake__/domain/__init__.py +5 -0
  843. package/templates/architectures/onion/files/src/__solutionName.snake__/domain_services/__init__.py +6 -0
  844. package/templates/architectures/onion/files/src/__solutionName.snake__/infrastructure/__init__.py +5 -0
  845. package/templates/architectures/onion/files/src/application-services/index.ts +3 -0
  846. package/templates/architectures/onion/files/src/domain/index.ts +3 -0
  847. package/templates/architectures/onion/files/src/domain-services/index.ts +3 -0
  848. package/templates/architectures/onion/files/src/infrastructure/index.ts +3 -0
  849. package/templates/architectures/onion/files/tests/__solutionName.dot__.ArchitectureTests/RingDependencyTests.cs +104 -0
  850. package/templates/architectures/onion/files/tests/__solutionName.dot__.ArchitectureTests/__solutionName.dot__.ArchitectureTests.csproj +31 -0
  851. package/templates/architectures/pipes-and-filters/blueprint.yaml +104 -0
  852. package/templates/architectures/pipes-and-filters/files/.importlinter +25 -0
  853. package/templates/architectures/pipes-and-filters/files/docs/architecture/pipes-and-filters.go.md +72 -0
  854. package/templates/architectures/pipes-and-filters/files/docs/architecture/pipes-and-filters.node.md +73 -0
  855. package/templates/architectures/pipes-and-filters/files/docs/architecture/pipes-and-filters.python.md +76 -0
  856. package/templates/architectures/pipes-and-filters/files/internal/pipeline/boundary_test.go +107 -0
  857. package/templates/architectures/pipes-and-filters/files/internal/pipeline/config.go +53 -0
  858. package/templates/architectures/pipes-and-filters/files/internal/pipeline/contract/contract.go +35 -0
  859. package/templates/architectures/pipes-and-filters/files/internal/pipeline/pipeline.go +39 -0
  860. package/templates/architectures/pipes-and-filters/files/internal/pipeline/stages/__firstStage.lower__/__firstStage.lower__.go +42 -0
  861. package/templates/architectures/pipes-and-filters/files/internal/pipeline/stages/__firstStage.lower__/__firstStage.lower___test.go +59 -0
  862. package/templates/architectures/pipes-and-filters/files/package.json +8 -0
  863. package/templates/architectures/pipes-and-filters/files/pyproject.toml +2 -0
  864. package/templates/architectures/pipes-and-filters/files/scripts/check-stage-boundaries.mjs +172 -0
  865. package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/__init__.py +16 -0
  866. package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/config.py +26 -0
  867. package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/contract.py +34 -0
  868. package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/pipeline.py +33 -0
  869. package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/stages/__firstStage.snake__/__init__.py +3 -0
  870. package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/stages/__firstStage.snake__/stage.py +31 -0
  871. package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/stages/__init__.py +1 -0
  872. package/templates/architectures/pipes-and-filters/files/src/pipeline/config.ts +24 -0
  873. package/templates/architectures/pipes-and-filters/files/src/pipeline/contract.ts +41 -0
  874. package/templates/architectures/pipes-and-filters/files/src/pipeline/pipeline.ts +37 -0
  875. package/templates/architectures/pipes-and-filters/files/src/pipeline/stages/__firstStage.kebab__/__firstStage.kebab__.test.ts +32 -0
  876. package/templates/architectures/pipes-and-filters/files/src/pipeline/stages/__firstStage.kebab__/index.ts +29 -0
  877. package/templates/architectures/pipes-and-filters/files/tests/architecture/test_stage_boundaries.py +127 -0
  878. package/templates/architectures/pipes-and-filters/files/tests/pipeline/test___firstStage.snake__.py +32 -0
  879. package/templates/architectures/rag-hybrid/blueprint.yaml +121 -0
  880. package/templates/architectures/rag-hybrid/files/.importlinter +42 -0
  881. package/templates/architectures/rag-hybrid/files/docs/architecture/rag-hybrid.node.md +159 -0
  882. package/templates/architectures/rag-hybrid/files/docs/architecture/rag-hybrid.python.md +157 -0
  883. package/templates/architectures/rag-hybrid/files/evals/corpus/chunking.md +20 -0
  884. package/templates/architectures/rag-hybrid/files/evals/corpus/fusion.md +17 -0
  885. package/templates/architectures/rag-hybrid/files/evals/corpus/hybrid-retrieval.md +21 -0
  886. package/templates/architectures/rag-hybrid/files/evals/corpus/reranking.md +17 -0
  887. package/templates/architectures/rag-hybrid/files/evals/golden/queries.jsonl +5 -0
  888. package/templates/architectures/rag-hybrid/files/package.json +9 -0
  889. package/templates/architectures/rag-hybrid/files/pyproject.toml +2 -0
  890. package/templates/architectures/rag-hybrid/files/scripts/check-retrieval-seam.mjs +156 -0
  891. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/__init__.py +23 -0
  892. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/chunk/__init__.py +57 -0
  893. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/config.py +101 -0
  894. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/contracts.py +58 -0
  895. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/embed/__init__.py +90 -0
  896. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/evaluation/__init__.py +11 -0
  897. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/evaluation/cli.py +47 -0
  898. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/evaluation/harness.py +115 -0
  899. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/evaluation/metrics.py +51 -0
  900. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/generate/__init__.py +85 -0
  901. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/indexing.py +23 -0
  902. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/ingest/__init__.py +45 -0
  903. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/pipeline.py +27 -0
  904. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/rerank/__init__.py +85 -0
  905. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/retrieve/__init__.py +37 -0
  906. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/retrieve/dense.py +25 -0
  907. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/retrieve/fusion.py +30 -0
  908. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/retrieve/keyword.py +45 -0
  909. package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/store/__init__.py +87 -0
  910. package/templates/architectures/rag-hybrid/files/src/rag/chunk/index.ts +56 -0
  911. package/templates/architectures/rag-hybrid/files/src/rag/config.ts +96 -0
  912. package/templates/architectures/rag-hybrid/files/src/rag/contracts.ts +50 -0
  913. package/templates/architectures/rag-hybrid/files/src/rag/embed/index.ts +98 -0
  914. package/templates/architectures/rag-hybrid/files/src/rag/evaluation/cli.ts +47 -0
  915. package/templates/architectures/rag-hybrid/files/src/rag/evaluation/harness.ts +101 -0
  916. package/templates/architectures/rag-hybrid/files/src/rag/evaluation/metrics.ts +40 -0
  917. package/templates/architectures/rag-hybrid/files/src/rag/generate/index.ts +86 -0
  918. package/templates/architectures/rag-hybrid/files/src/rag/indexing.ts +21 -0
  919. package/templates/architectures/rag-hybrid/files/src/rag/ingest/index.ts +58 -0
  920. package/templates/architectures/rag-hybrid/files/src/rag/pipeline.ts +32 -0
  921. package/templates/architectures/rag-hybrid/files/src/rag/rerank/index.ts +90 -0
  922. package/templates/architectures/rag-hybrid/files/src/rag/retrieve/dense.ts +26 -0
  923. package/templates/architectures/rag-hybrid/files/src/rag/retrieve/fusion.ts +32 -0
  924. package/templates/architectures/rag-hybrid/files/src/rag/retrieve/index.ts +38 -0
  925. package/templates/architectures/rag-hybrid/files/src/rag/retrieve/keyword.ts +42 -0
  926. package/templates/architectures/rag-hybrid/files/src/rag/store/index.ts +108 -0
  927. package/templates/architectures/rag-hybrid/files/tests/architecture/test_retrieval_seam.py +108 -0
  928. package/templates/architectures/serverless/blueprint.yaml +139 -0
  929. package/templates/architectures/serverless/files/.gitignore.serverless +3 -0
  930. package/templates/architectures/serverless/files/.importlinter +18 -0
  931. package/templates/architectures/serverless/files/cdk.json +7 -0
  932. package/templates/architectures/serverless/files/docs/architecture/serverless.node.md +97 -0
  933. package/templates/architectures/serverless/files/docs/architecture/serverless.python.md +108 -0
  934. package/templates/architectures/serverless/files/events/__firstHandler.kebab__.json +21 -0
  935. package/templates/architectures/serverless/files/infra/app.ts +15 -0
  936. package/templates/architectures/serverless/files/infra/config.ts +22 -0
  937. package/templates/architectures/serverless/files/infra/stack.ts +45 -0
  938. package/templates/architectures/serverless/files/package.json +9 -0
  939. package/templates/architectures/serverless/files/pyproject.toml +2 -0
  940. package/templates/architectures/serverless/files/scripts/check-handler-boundaries.mjs +144 -0
  941. package/templates/architectures/serverless/files/scripts/invoke-local.ts +57 -0
  942. package/templates/architectures/serverless/files/scripts/invoke_local.py +61 -0
  943. package/templates/architectures/serverless/files/src/__solutionName.snake__/functions/__firstHandler.snake__/__init__.py +1 -0
  944. package/templates/architectures/serverless/files/src/__solutionName.snake__/functions/__firstHandler.snake__/handler.py +27 -0
  945. package/templates/architectures/serverless/files/src/__solutionName.snake__/functions/__init__.py +4 -0
  946. package/templates/architectures/serverless/files/src/__solutionName.snake__/layers/__init__.py +5 -0
  947. package/templates/architectures/serverless/files/src/__solutionName.snake__/layers/config.py +45 -0
  948. package/templates/architectures/serverless/files/src/__solutionName.snake__/layers/observability.py +35 -0
  949. package/templates/architectures/serverless/files/src/functions/__firstHandler.kebab__/handler.ts +26 -0
  950. package/templates/architectures/serverless/files/src/layers/config/index.ts +31 -0
  951. package/templates/architectures/serverless/files/src/layers/observability/index.ts +38 -0
  952. package/templates/architectures/serverless/files/src/requirements.txt +3 -0
  953. package/templates/architectures/serverless/files/template.yaml +48 -0
  954. package/templates/architectures/serverless/files/tests/architecture/test_handler_boundaries.py +32 -0
  955. package/templates/architectures/vertical-slice/blueprint.yaml +124 -0
  956. package/templates/architectures/vertical-slice/files/.importlinter +18 -0
  957. package/templates/architectures/vertical-slice/files/Directory.Packages.props +8 -0
  958. package/templates/architectures/vertical-slice/files/__solutionName.dot__.slnx +5 -0
  959. package/templates/architectures/vertical-slice/files/docs/architecture/vertical-slice.md +75 -0
  960. package/templates/architectures/vertical-slice/files/internal/features/__firstSlice.lower__/__firstSlice.lower__.go +2 -0
  961. package/templates/architectures/vertical-slice/files/internal/features/boundary_test.go +92 -0
  962. package/templates/architectures/vertical-slice/files/internal/features/doc.go +3 -0
  963. package/templates/architectures/vertical-slice/files/internal/shared/doc.go +2 -0
  964. package/templates/architectures/vertical-slice/files/pyproject.toml +2 -0
  965. package/templates/architectures/vertical-slice/files/scripts/check-slice-boundaries.mjs +118 -0
  966. package/templates/architectures/vertical-slice/files/src/__solutionName.dot__.Api/Common/.gitkeep +0 -0
  967. package/templates/architectures/vertical-slice/files/src/__solutionName.dot__.Api/Features/.gitkeep +0 -0
  968. package/templates/architectures/vertical-slice/files/src/__solutionName.dot__.Api/Features/__firstSlice.pascal__/Slice.cs +15 -0
  969. package/templates/architectures/vertical-slice/files/src/__solutionName.pascal__.Api/Common/.gitkeep +0 -0
  970. package/templates/architectures/vertical-slice/files/src/__solutionName.pascal__.Api/Features/.gitkeep +0 -0
  971. package/templates/architectures/vertical-slice/files/src/__solutionName.pascal__.Api/Features/__firstSlice.pascal__/Slice.cs +15 -0
  972. package/templates/architectures/vertical-slice/files/src/__solutionName.snake__/features/__firstSlice.snake__/__init__.py +1 -0
  973. package/templates/architectures/vertical-slice/files/src/__solutionName.snake__/features/__init__.py +1 -0
  974. package/templates/architectures/vertical-slice/files/src/__solutionName.snake__/shared/__init__.py +1 -0
  975. package/templates/architectures/vertical-slice/files/src/features/__firstSlice.kebab__/index.ts +3 -0
  976. package/templates/architectures/vertical-slice/files/src/shared/.gitkeep +0 -0
  977. package/templates/architectures/vertical-slice/files/tests/ArchitectureTests/ArchitectureTests.csproj +33 -0
  978. package/templates/architectures/vertical-slice/files/tests/ArchitectureTests/SliceBoundaryTests.cs +110 -0
  979. package/templates/architectures/vertical-slice/files/tests/test_architecture.py +32 -0
  980. package/templates/bases/dotnet-aspire/blueprint.yaml +120 -0
  981. package/templates/bases/dotnet-aspire/files/Directory.Build.props +11 -0
  982. package/templates/bases/dotnet-aspire/files/Directory.Packages.props +17 -0
  983. package/templates/bases/dotnet-aspire/files/README.md +60 -0
  984. package/templates/bases/dotnet-aspire/files/__solutionName.dot__.slnx +7 -0
  985. package/templates/bases/dotnet-aspire/files/aspire.config.json +5 -0
  986. package/templates/bases/dotnet-aspire/files/gitignore +44 -0
  987. package/templates/bases/dotnet-aspire/files/global.json +6 -0
  988. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.Api/Configuration/ApiOptions.cs +20 -0
  989. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.Api/Program.cs +37 -0
  990. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.Api/Properties/launchSettings.json +23 -0
  991. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.Api/__solutionName.pascal__.Api.csproj +11 -0
  992. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.Api/appsettings.Development.json +8 -0
  993. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.Api/appsettings.json +14 -0
  994. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.AppHost/AppHost.cs +8 -0
  995. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.AppHost/Properties/launchSettings.json +29 -0
  996. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.AppHost/__solutionName.pascal__.AppHost.csproj +11 -0
  997. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.AppHost/appsettings.Development.json +8 -0
  998. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.AppHost/appsettings.json +9 -0
  999. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.ServiceDefaults/Extensions.cs +101 -0
  1000. package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.ServiceDefaults/__solutionName.pascal__.ServiceDefaults.csproj +19 -0
  1001. package/templates/bases/dotnet-webapi/blueprint.yaml +112 -0
  1002. package/templates/bases/dotnet-webapi/files/.editorconfig +78 -0
  1003. package/templates/bases/dotnet-webapi/files/Directory.Build.props +28 -0
  1004. package/templates/bases/dotnet-webapi/files/Directory.Packages.props +18 -0
  1005. package/templates/bases/dotnet-webapi/files/README.md +71 -0
  1006. package/templates/bases/dotnet-webapi/files/__solutionName.dot__.slnx +11 -0
  1007. package/templates/bases/dotnet-webapi/files/gitignore +49 -0
  1008. package/templates/bases/dotnet-webapi/files/global.json +7 -0
  1009. package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/Configuration/ApiOptions.cs +23 -0
  1010. package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/Configuration/ServiceCollectionExtensions.cs +35 -0
  1011. package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/Endpoints/GreetingEndpoints.cs +24 -0
  1012. package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/Endpoints/HealthEndpoints.cs +11 -0
  1013. package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/Program.cs +23 -0
  1014. package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/Properties/launchSettings.json +21 -0
  1015. package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/__solutionName.dot__.Api.csproj +19 -0
  1016. package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/appsettings.Development.json +8 -0
  1017. package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/appsettings.json +9 -0
  1018. package/templates/bases/fastapi-service/blueprint.yaml +87 -0
  1019. package/templates/bases/fastapi-service/files/.env.example +10 -0
  1020. package/templates/bases/fastapi-service/files/README.md +42 -0
  1021. package/templates/bases/fastapi-service/files/gitignore +27 -0
  1022. package/templates/bases/fastapi-service/files/pyproject.toml +35 -0
  1023. package/templates/bases/fastapi-service/files/src/__solutionName.snake__/__init__.py +1 -0
  1024. package/templates/bases/fastapi-service/files/src/__solutionName.snake__/api/__init__.py +1 -0
  1025. package/templates/bases/fastapi-service/files/src/__solutionName.snake__/api/routes.py +38 -0
  1026. package/templates/bases/fastapi-service/files/src/__solutionName.snake__/main.py +34 -0
  1027. package/templates/bases/fastapi-service/files/src/__solutionName.snake__/settings.py +30 -0
  1028. package/templates/bases/go-api/blueprint.yaml +58 -0
  1029. package/templates/bases/go-api/files/.env.example +16 -0
  1030. package/templates/bases/go-api/files/README.md +76 -0
  1031. package/templates/bases/go-api/files/cmd/__solutionName.kebab__/main.go +65 -0
  1032. package/templates/bases/go-api/files/gitignore +27 -0
  1033. package/templates/bases/go-api/files/go.mod +5 -0
  1034. package/templates/bases/go-api/files/internal/config/config.go +127 -0
  1035. package/templates/bases/go-api/files/internal/httpapi/greeting.go +25 -0
  1036. package/templates/bases/go-api/files/internal/httpapi/health.go +25 -0
  1037. package/templates/bases/go-api/files/internal/httpapi/respond.go +25 -0
  1038. package/templates/bases/go-api/files/internal/httpapi/router.go +63 -0
  1039. package/templates/bases/hono-api/blueprint.yaml +94 -0
  1040. package/templates/bases/hono-api/files/.env.example +7 -0
  1041. package/templates/bases/hono-api/files/README.md +77 -0
  1042. package/templates/bases/hono-api/files/biome.json +24 -0
  1043. package/templates/bases/hono-api/files/gitignore +16 -0
  1044. package/templates/bases/hono-api/files/package.json +29 -0
  1045. package/templates/bases/hono-api/files/src/app.ts +27 -0
  1046. package/templates/bases/hono-api/files/src/config.ts +27 -0
  1047. package/templates/bases/hono-api/files/src/index.ts +17 -0
  1048. package/templates/bases/hono-api/files/src/routes/greetings.ts +17 -0
  1049. package/templates/bases/hono-api/files/src/routes/health.ts +13 -0
  1050. package/templates/bases/hono-api/files/tsconfig.json +18 -0
  1051. package/templates/bases/nestjs-api/blueprint.yaml +94 -0
  1052. package/templates/bases/nestjs-api/files/.env.example +8 -0
  1053. package/templates/bases/nestjs-api/files/.prettierrc +5 -0
  1054. package/templates/bases/nestjs-api/files/README.md +69 -0
  1055. package/templates/bases/nestjs-api/files/eslint.config.mjs +23 -0
  1056. package/templates/bases/nestjs-api/files/gitignore +11 -0
  1057. package/templates/bases/nestjs-api/files/nest-cli.json +9 -0
  1058. package/templates/bases/nestjs-api/files/package.json +41 -0
  1059. package/templates/bases/nestjs-api/files/src/app.module.ts +16 -0
  1060. package/templates/bases/nestjs-api/files/src/config/app.config.ts +30 -0
  1061. package/templates/bases/nestjs-api/files/src/config/env.validation.ts +15 -0
  1062. package/templates/bases/nestjs-api/files/src/health/health.controller.ts +19 -0
  1063. package/templates/bases/nestjs-api/files/src/health/health.module.ts +6 -0
  1064. package/templates/bases/nestjs-api/files/src/main.ts +25 -0
  1065. package/templates/bases/nestjs-api/files/src/modules/__solutionName.kebab__/__solutionName.kebab__.controller.ts +14 -0
  1066. package/templates/bases/nestjs-api/files/src/modules/__solutionName.kebab__/__solutionName.kebab__.module.ts +11 -0
  1067. package/templates/bases/nestjs-api/files/src/modules/__solutionName.kebab__/__solutionName.kebab__.service.ts +12 -0
  1068. package/templates/bases/nestjs-api/files/src/modules/__solutionName.kebab__/dto/greet-query.dto.ts +10 -0
  1069. package/templates/bases/nestjs-api/files/tsconfig.build.json +4 -0
  1070. package/templates/bases/nestjs-api/files/tsconfig.json +26 -0
  1071. package/templates/bases/nextjs-app/blueprint.yaml +80 -0
  1072. package/templates/bases/nextjs-app/files/.env.example +10 -0
  1073. package/templates/bases/nextjs-app/files/README.md +48 -0
  1074. package/templates/bases/nextjs-app/files/eslint.config.mjs +12 -0
  1075. package/templates/bases/nextjs-app/files/gitignore +32 -0
  1076. package/templates/bases/nextjs-app/files/next.config.ts +8 -0
  1077. package/templates/bases/nextjs-app/files/package.json +30 -0
  1078. package/templates/bases/nextjs-app/files/postcss.config.mjs +7 -0
  1079. package/templates/bases/nextjs-app/files/src/app/api/health/route.ts +21 -0
  1080. package/templates/bases/nextjs-app/files/src/app/globals.css +45 -0
  1081. package/templates/bases/nextjs-app/files/src/app/layout.tsx +28 -0
  1082. package/templates/bases/nextjs-app/files/src/app/page.tsx +39 -0
  1083. package/templates/bases/nextjs-app/files/src/config/env.ts +64 -0
  1084. package/templates/bases/nextjs-app/files/tsconfig.json +35 -0
  1085. package/templates/bases/python-ai-agent/blueprint.yaml +84 -0
  1086. package/templates/bases/python-ai-agent/files/.env.example +29 -0
  1087. package/templates/bases/python-ai-agent/files/README.md +80 -0
  1088. package/templates/bases/python-ai-agent/files/gitignore +21 -0
  1089. package/templates/bases/python-ai-agent/files/pyproject.toml +34 -0
  1090. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/__init__.py +1 -0
  1091. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/api/__init__.py +1 -0
  1092. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/api/routes.py +69 -0
  1093. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/config.py +70 -0
  1094. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/llm/__init__.py +1 -0
  1095. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/llm/anthropic_provider.py +69 -0
  1096. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/llm/openai_provider.py +75 -0
  1097. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/llm/provider.py +45 -0
  1098. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/llm/registry.py +35 -0
  1099. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/main.py +33 -0
  1100. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/observability/__init__.py +1 -0
  1101. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/observability/evals.py +28 -0
  1102. package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/observability/tracing.py +49 -0
  1103. package/templates/bases/react-vite-spa/blueprint.yaml +92 -0
  1104. package/templates/bases/react-vite-spa/files/.env.example +13 -0
  1105. package/templates/bases/react-vite-spa/files/README.md +49 -0
  1106. package/templates/bases/react-vite-spa/files/eslint.config.mjs +26 -0
  1107. package/templates/bases/react-vite-spa/files/gitignore +25 -0
  1108. package/templates/bases/react-vite-spa/files/index.html +13 -0
  1109. package/templates/bases/react-vite-spa/files/package.json +37 -0
  1110. package/templates/bases/react-vite-spa/files/src/api/client.ts +28 -0
  1111. package/templates/bases/react-vite-spa/files/src/api/health.ts +12 -0
  1112. package/templates/bases/react-vite-spa/files/src/app/query-client.ts +12 -0
  1113. package/templates/bases/react-vite-spa/files/src/app/root-layout.tsx +24 -0
  1114. package/templates/bases/react-vite-spa/files/src/app/router.tsx +44 -0
  1115. package/templates/bases/react-vite-spa/files/src/config/env.ts +37 -0
  1116. package/templates/bases/react-vite-spa/files/src/main.tsx +18 -0
  1117. package/templates/bases/react-vite-spa/files/src/pages/home-page.tsx +31 -0
  1118. package/templates/bases/react-vite-spa/files/src/pages/not-found-page.tsx +13 -0
  1119. package/templates/bases/react-vite-spa/files/src/pages/status-page.tsx +37 -0
  1120. package/templates/bases/react-vite-spa/files/src/styles/global.css +169 -0
  1121. package/templates/bases/react-vite-spa/files/src/vite-env.d.ts +15 -0
  1122. package/templates/bases/react-vite-spa/files/tsconfig.app.json +29 -0
  1123. package/templates/bases/react-vite-spa/files/tsconfig.json +4 -0
  1124. package/templates/bases/react-vite-spa/files/tsconfig.node.json +24 -0
  1125. package/templates/bases/react-vite-spa/files/vite.config.ts +25 -0
  1126. package/templates/bases/turborepo-monorepo/blueprint.yaml +84 -0
  1127. package/templates/bases/turborepo-monorepo/files/.env.example +7 -0
  1128. package/templates/bases/turborepo-monorepo/files/.prettierignore +9 -0
  1129. package/templates/bases/turborepo-monorepo/files/.prettierrc.json +5 -0
  1130. package/templates/bases/turborepo-monorepo/files/README.md +55 -0
  1131. package/templates/bases/turborepo-monorepo/files/apps/__appName.kebab__/eslint.config.js +3 -0
  1132. package/templates/bases/turborepo-monorepo/files/apps/__appName.kebab__/package.json +25 -0
  1133. package/templates/bases/turborepo-monorepo/files/apps/__appName.kebab__/src/config.ts +46 -0
  1134. package/templates/bases/turborepo-monorepo/files/apps/__appName.kebab__/src/index.ts +20 -0
  1135. package/templates/bases/turborepo-monorepo/files/apps/__appName.kebab__/src/router.ts +24 -0
  1136. package/templates/bases/turborepo-monorepo/files/apps/__appName.kebab__/tsconfig.json +8 -0
  1137. package/templates/bases/turborepo-monorepo/files/gitignore +17 -0
  1138. package/templates/bases/turborepo-monorepo/files/package.json +25 -0
  1139. package/templates/bases/turborepo-monorepo/files/packages/eslint-config/index.js +21 -0
  1140. package/templates/bases/turborepo-monorepo/files/packages/eslint-config/package.json +21 -0
  1141. package/templates/bases/turborepo-monorepo/files/packages/shared/eslint.config.js +3 -0
  1142. package/templates/bases/turborepo-monorepo/files/packages/shared/package.json +26 -0
  1143. package/templates/bases/turborepo-monorepo/files/packages/shared/src/health.ts +23 -0
  1144. package/templates/bases/turborepo-monorepo/files/packages/shared/src/index.ts +2 -0
  1145. package/templates/bases/turborepo-monorepo/files/packages/shared/tsconfig.json +10 -0
  1146. package/templates/bases/turborepo-monorepo/files/packages/tsconfig/base.json +19 -0
  1147. package/templates/bases/turborepo-monorepo/files/packages/tsconfig/node.json +7 -0
  1148. package/templates/bases/turborepo-monorepo/files/packages/tsconfig/package.json +9 -0
  1149. package/templates/bases/turborepo-monorepo/files/pnpm-workspace.yaml +7 -0
  1150. package/templates/bases/turborepo-monorepo/files/turbo.json +22 -0
  1151. package/templates/layers/api-versioning/blueprint.yaml +264 -0
  1152. package/templates/layers/api-versioning/files/.env.apiversion.example +53 -0
  1153. package/templates/layers/api-versioning/files/__apiVersionContractDir__/README.md +48 -0
  1154. package/templates/layers/api-versioning/files/__solutionName.dot__.slnx +5 -0
  1155. package/templates/layers/api-versioning/files/docs/api-versioning.md +100 -0
  1156. package/templates/layers/api-versioning/files/internal/apiversion/apiversion_test.go +202 -0
  1157. package/templates/layers/api-versioning/files/internal/apiversion/config.go +242 -0
  1158. package/templates/layers/api-versioning/files/internal/apiversion/contract.go +280 -0
  1159. package/templates/layers/api-versioning/files/internal/apiversion/headers.go +55 -0
  1160. package/templates/layers/api-versioning/files/internal/apiversion/middleware.go +53 -0
  1161. package/templates/layers/api-versioning/files/internal/apiversion/negotiate.go +107 -0
  1162. package/templates/layers/api-versioning/files/internal/apiversion/snapshot.go +72 -0
  1163. package/templates/layers/api-versioning/files/internal/apiversion/versions.go +72 -0
  1164. package/templates/layers/api-versioning/files/package.json +5 -0
  1165. package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ApiVersionHeaders.cs +62 -0
  1166. package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ApiVersionNegotiator.cs +129 -0
  1167. package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ApiVersionOptions.cs +58 -0
  1168. package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ApiVersionPolicy.cs +99 -0
  1169. package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ApiVersioningMiddleware.cs +58 -0
  1170. package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ApiVersioningServiceCollectionExtensions.cs +18 -0
  1171. package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ContractDiff.cs +152 -0
  1172. package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ContractShape.cs +142 -0
  1173. package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ContractStore.cs +64 -0
  1174. package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/__solutionName.dot__.ApiVersioning.csproj +17 -0
  1175. package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/__init__.py +67 -0
  1176. package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/contract.py +191 -0
  1177. package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/errors.py +28 -0
  1178. package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/headers.py +56 -0
  1179. package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/middleware.py +76 -0
  1180. package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/negotiate.py +94 -0
  1181. package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/settings.py +189 -0
  1182. package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/snapshot.py +74 -0
  1183. package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/versions.py +70 -0
  1184. package/templates/layers/api-versioning/files/src/apiversion/client/pinned-fetch.ts +89 -0
  1185. package/templates/layers/api-versioning/files/src/apiversion/contract/diff.ts +153 -0
  1186. package/templates/layers/api-versioning/files/src/apiversion/contract/node/snapshot.ts +76 -0
  1187. package/templates/layers/api-versioning/files/src/apiversion/contract/shape.ts +94 -0
  1188. package/templates/layers/api-versioning/files/src/apiversion/errors.ts +36 -0
  1189. package/templates/layers/api-versioning/files/src/apiversion/headers.ts +52 -0
  1190. package/templates/layers/api-versioning/files/src/apiversion/index.ts +23 -0
  1191. package/templates/layers/api-versioning/files/src/apiversion/middleware.ts +59 -0
  1192. package/templates/layers/api-versioning/files/src/apiversion/negotiate.ts +113 -0
  1193. package/templates/layers/api-versioning/files/src/apiversion/node/http.ts +50 -0
  1194. package/templates/layers/api-versioning/files/src/apiversion/settings.ts +214 -0
  1195. package/templates/layers/api-versioning/files/src/apiversion/tests/apiversion.spec.ts +162 -0
  1196. package/templates/layers/api-versioning/files/src/apiversion/tests/apiversion.test.ts +167 -0
  1197. package/templates/layers/api-versioning/files/src/apiversion/versions.ts +66 -0
  1198. package/templates/layers/api-versioning/files/tests/test_api_versioning.py +162 -0
  1199. package/templates/layers/audit-log/blueprint.yaml +186 -0
  1200. package/templates/layers/audit-log/files/.env.audit.example +41 -0
  1201. package/templates/layers/audit-log/files/__solutionName.dot__.slnx +5 -0
  1202. package/templates/layers/audit-log/files/docs/audit-log.md +195 -0
  1203. package/templates/layers/audit-log/files/internal/audit/audit_test.go +141 -0
  1204. package/templates/layers/audit-log/files/internal/audit/chain.go +91 -0
  1205. package/templates/layers/audit-log/files/internal/audit/config.go +143 -0
  1206. package/templates/layers/audit-log/files/internal/audit/event.go +87 -0
  1207. package/templates/layers/audit-log/files/internal/audit/recorder.go +133 -0
  1208. package/templates/layers/audit-log/files/internal/audit/redact.go +83 -0
  1209. package/templates/layers/audit-log/files/internal/audit/sink.go +196 -0
  1210. package/templates/layers/audit-log/files/internal/audit/verify.go +17 -0
  1211. package/templates/layers/audit-log/files/package.json +5 -0
  1212. package/templates/layers/audit-log/files/pyproject.toml +2 -0
  1213. package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/AuditChain.cs +74 -0
  1214. package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/AuditEvent.cs +90 -0
  1215. package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/AuditOptions.cs +104 -0
  1216. package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/AuditRecorder.cs +106 -0
  1217. package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/AuditSerialization.cs +116 -0
  1218. package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/AuditSinks.cs +165 -0
  1219. package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/__solutionName.dot__.Auditing.csproj +17 -0
  1220. package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/chain.py +56 -0
  1221. package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/event.py +118 -0
  1222. package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/recorder.py +118 -0
  1223. package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/redact.py +41 -0
  1224. package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/settings.py +102 -0
  1225. package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/sinks.py +121 -0
  1226. package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/verify.py +14 -0
  1227. package/templates/layers/audit-log/files/src/audit/chain.ts +59 -0
  1228. package/templates/layers/audit-log/files/src/audit/event.ts +73 -0
  1229. package/templates/layers/audit-log/files/src/audit/index.ts +32 -0
  1230. package/templates/layers/audit-log/files/src/audit/recorder.ts +108 -0
  1231. package/templates/layers/audit-log/files/src/audit/redact.ts +54 -0
  1232. package/templates/layers/audit-log/files/src/audit/settings.ts +113 -0
  1233. package/templates/layers/audit-log/files/src/audit/sinks.ts +131 -0
  1234. package/templates/layers/audit-log/files/src/audit/tests/audit.spec.ts +97 -0
  1235. package/templates/layers/audit-log/files/src/audit/tests/audit.test.ts +103 -0
  1236. package/templates/layers/audit-log/files/tests/test_audit_log.py +91 -0
  1237. package/templates/layers/auth-jwt/blueprint.yaml +124 -0
  1238. package/templates/layers/auth-jwt/files/.env.auth.example +17 -0
  1239. package/templates/layers/auth-jwt/files/Directory.Packages.props +5 -0
  1240. package/templates/layers/auth-jwt/files/__solutionName.dot__.slnx +5 -0
  1241. package/templates/layers/auth-jwt/files/docs/auth-jwt.md +198 -0
  1242. package/templates/layers/auth-jwt/files/go.mod +2 -0
  1243. package/templates/layers/auth-jwt/files/internal/auth/auth_test.go +167 -0
  1244. package/templates/layers/auth-jwt/files/internal/auth/config.go +108 -0
  1245. package/templates/layers/auth-jwt/files/internal/auth/errors.go +21 -0
  1246. package/templates/layers/auth-jwt/files/internal/auth/http.go +65 -0
  1247. package/templates/layers/auth-jwt/files/internal/auth/password.go +76 -0
  1248. package/templates/layers/auth-jwt/files/internal/auth/service.go +213 -0
  1249. package/templates/layers/auth-jwt/files/internal/auth/store.go +138 -0
  1250. package/templates/layers/auth-jwt/files/internal/auth/token.go +83 -0
  1251. package/templates/layers/auth-jwt/files/package.json +9 -0
  1252. package/templates/layers/auth-jwt/files/pyproject.toml +2 -0
  1253. package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/AuthException.cs +39 -0
  1254. package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/AuthOptions.cs +35 -0
  1255. package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/AuthService.cs +132 -0
  1256. package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/AuthServiceCollectionExtensions.cs +48 -0
  1257. package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/JwtTokenService.cs +84 -0
  1258. package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/PasswordHasher.cs +52 -0
  1259. package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/Stores.cs +100 -0
  1260. package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/__solutionName.dot__.Auth.csproj +21 -0
  1261. package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/appsettings.Auth.sample.json +10 -0
  1262. package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/__init__.py +42 -0
  1263. package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/config.py +49 -0
  1264. package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/errors.py +21 -0
  1265. package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/http.py +36 -0
  1266. package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/passwords.py +37 -0
  1267. package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/service.py +139 -0
  1268. package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/store.py +90 -0
  1269. package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/tokens.py +72 -0
  1270. package/templates/layers/auth-jwt/files/src/auth/config.ts +77 -0
  1271. package/templates/layers/auth-jwt/files/src/auth/errors.ts +32 -0
  1272. package/templates/layers/auth-jwt/files/src/auth/http.ts +35 -0
  1273. package/templates/layers/auth-jwt/files/src/auth/index.ts +20 -0
  1274. package/templates/layers/auth-jwt/files/src/auth/password.ts +23 -0
  1275. package/templates/layers/auth-jwt/files/src/auth/random.ts +28 -0
  1276. package/templates/layers/auth-jwt/files/src/auth/service.ts +125 -0
  1277. package/templates/layers/auth-jwt/files/src/auth/store.memory.ts +50 -0
  1278. package/templates/layers/auth-jwt/files/src/auth/store.ts +37 -0
  1279. package/templates/layers/auth-jwt/files/src/auth/tests/auth.spec.ts +98 -0
  1280. package/templates/layers/auth-jwt/files/src/auth/tests/auth.test.ts +102 -0
  1281. package/templates/layers/auth-jwt/files/src/auth/tokens.ts +56 -0
  1282. package/templates/layers/auth-jwt/files/tests/auth/test_auth.py +106 -0
  1283. package/templates/layers/auth-oidc/blueprint.yaml +89 -0
  1284. package/templates/layers/auth-oidc/files/dotnet/.env.oidc.example +14 -0
  1285. package/templates/layers/auth-oidc/files/dotnet/docs/auth-oidc.md +73 -0
  1286. package/templates/layers/auth-oidc/files/dotnet/src/__solutionName.pascal__.Api/Auth/OidcAuthenticationExtensions.cs +65 -0
  1287. package/templates/layers/auth-oidc/files/dotnet/src/__solutionName.pascal__.Api/Auth/OidcOptions.cs +25 -0
  1288. package/templates/layers/auth-oidc/files/dotnet/src/__solutionName.pascal__.Api/Auth/ScopeRequirement.cs +29 -0
  1289. package/templates/layers/auth-oidc/files/node/.env.oidc.example +14 -0
  1290. package/templates/layers/auth-oidc/files/node/docs/auth-oidc.md +66 -0
  1291. package/templates/layers/auth-oidc/files/node/src/auth/auth.config.ts +64 -0
  1292. package/templates/layers/auth-oidc/files/node/src/auth/auth.decorators.ts +19 -0
  1293. package/templates/layers/auth-oidc/files/node/src/auth/auth.guard.ts +61 -0
  1294. package/templates/layers/auth-oidc/files/node/src/auth/auth.module.ts +12 -0
  1295. package/templates/layers/auth-oidc/files/node/src/auth/jwt-verifier.ts +97 -0
  1296. package/templates/layers/auth-oidc/files/package.json +6 -0
  1297. package/templates/layers/auth-oidc/files/pyproject.toml +2 -0
  1298. package/templates/layers/auth-oidc/files/python/.env.oidc.example +14 -0
  1299. package/templates/layers/auth-oidc/files/python/app/auth/dependencies.py +69 -0
  1300. package/templates/layers/auth-oidc/files/python/app/auth/settings.py +32 -0
  1301. package/templates/layers/auth-oidc/files/python/app/auth/verifier.py +57 -0
  1302. package/templates/layers/auth-oidc/files/python/docs/auth-oidc.md +57 -0
  1303. package/templates/layers/auth-oidc/files/python/requirements-auth-oidc.txt +4 -0
  1304. package/templates/layers/auth-oidc/files/typescript/.env.oidc.example +21 -0
  1305. package/templates/layers/auth-oidc/files/typescript/docs/auth-oidc.md +69 -0
  1306. package/templates/layers/auth-oidc/files/typescript/src/app/api/auth/callback/route.ts +43 -0
  1307. package/templates/layers/auth-oidc/files/typescript/src/app/api/auth/login/route.ts +40 -0
  1308. package/templates/layers/auth-oidc/files/typescript/src/app/api/auth/logout/route.ts +27 -0
  1309. package/templates/layers/auth-oidc/files/typescript/src/app/api/auth/me/route.ts +12 -0
  1310. package/templates/layers/auth-oidc/files/typescript/src/lib/auth/config.ts +98 -0
  1311. package/templates/layers/auth-oidc/files/typescript/src/lib/auth/guard.ts +23 -0
  1312. package/templates/layers/auth-oidc/files/typescript/src/lib/auth/oidc.ts +19 -0
  1313. package/templates/layers/auth-oidc/files/typescript/src/lib/auth/session.ts +81 -0
  1314. package/templates/layers/cache-redis/blueprint.yaml +186 -0
  1315. package/templates/layers/cache-redis/files/.env.cache.example +29 -0
  1316. package/templates/layers/cache-redis/files/Directory.Packages.props +5 -0
  1317. package/templates/layers/cache-redis/files/__solutionName.dot__.slnx +5 -0
  1318. package/templates/layers/cache-redis/files/docker-compose.redis.yml +33 -0
  1319. package/templates/layers/cache-redis/files/docs/cache/redis.md +113 -0
  1320. package/templates/layers/cache-redis/files/go.mod +1 -0
  1321. package/templates/layers/cache-redis/files/internal/cache/cache.go +127 -0
  1322. package/templates/layers/cache-redis/files/internal/cache/cache_test.go +113 -0
  1323. package/templates/layers/cache-redis/files/internal/cache/config.go +110 -0
  1324. package/templates/layers/cache-redis/files/internal/cache/memory.go +124 -0
  1325. package/templates/layers/cache-redis/files/internal/cache/redis.go +108 -0
  1326. package/templates/layers/cache-redis/files/package.json +5 -0
  1327. package/templates/layers/cache-redis/files/pyproject.toml +2 -0
  1328. package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/CacheKey.cs +44 -0
  1329. package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/CacheOptions.cs +119 -0
  1330. package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/CacheStoreFactory.cs +16 -0
  1331. package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/ICacheStore.cs +37 -0
  1332. package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/MemoryCacheStore.cs +129 -0
  1333. package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/RedisCacheStore.cs +139 -0
  1334. package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/__solutionName.dot__.Cache.Redis.csproj +18 -0
  1335. package/templates/layers/cache-redis/files/src/__solutionName.snake__/cache/api.py +67 -0
  1336. package/templates/layers/cache-redis/files/src/__solutionName.snake__/cache/keys.py +39 -0
  1337. package/templates/layers/cache-redis/files/src/__solutionName.snake__/cache/redis_store.py +85 -0
  1338. package/templates/layers/cache-redis/files/src/__solutionName.snake__/cache/settings.py +82 -0
  1339. package/templates/layers/cache-redis/files/src/__solutionName.snake__/cache/store.py +113 -0
  1340. package/templates/layers/cache-redis/files/src/cache/index.ts +54 -0
  1341. package/templates/layers/cache-redis/files/src/cache/keys.ts +28 -0
  1342. package/templates/layers/cache-redis/files/src/cache/redis.ts +131 -0
  1343. package/templates/layers/cache-redis/files/src/cache/settings.ts +86 -0
  1344. package/templates/layers/cache-redis/files/src/cache/store.ts +98 -0
  1345. package/templates/layers/cache-redis/files/tests/test_cache_redis.py +105 -0
  1346. package/templates/layers/ci-github-actions/blueprint.yaml +174 -0
  1347. package/templates/layers/ci-github-actions/files/.github/actions/dotnet-setup/action.yml +25 -0
  1348. package/templates/layers/ci-github-actions/files/.github/actions/go-setup/action.yml +30 -0
  1349. package/templates/layers/ci-github-actions/files/.github/actions/node-setup/action.yml +58 -0
  1350. package/templates/layers/ci-github-actions/files/.github/actions/python-setup/action.yml +23 -0
  1351. package/templates/layers/ci-github-actions/files/.github/dependabot.yml +13 -0
  1352. package/templates/layers/ci-github-actions/files/.github/scripts/run-package-script.sh +13 -0
  1353. package/templates/layers/ci-github-actions/files/.github/workflows/ci-dotnet.yml +85 -0
  1354. package/templates/layers/ci-github-actions/files/.github/workflows/ci-go.yml +91 -0
  1355. package/templates/layers/ci-github-actions/files/.github/workflows/ci-node.yml +111 -0
  1356. package/templates/layers/ci-github-actions/files/.github/workflows/ci-python.yml +125 -0
  1357. package/templates/layers/ci-github-actions/files/docs/ci-github-actions.md +106 -0
  1358. package/templates/layers/db-core/blueprint.yaml +98 -0
  1359. package/templates/layers/db-core/files/.env.example +18 -0
  1360. package/templates/layers/db-core/files/__solutionName.dot__.slnx +5 -0
  1361. package/templates/layers/db-core/files/docs/persistence.md +91 -0
  1362. package/templates/layers/db-core/files/internal/db/config.go +108 -0
  1363. package/templates/layers/db-core/files/internal/db/errors.go +61 -0
  1364. package/templates/layers/db-core/files/internal/db/memory.go +141 -0
  1365. package/templates/layers/db-core/files/internal/db/memory_test.go +195 -0
  1366. package/templates/layers/db-core/files/internal/db/ports.go +76 -0
  1367. package/templates/layers/db-core/files/internal/db/repository.go +134 -0
  1368. package/templates/layers/db-core/files/internal/db/retry.go +30 -0
  1369. package/templates/layers/db-core/files/package.json +5 -0
  1370. package/templates/layers/db-core/files/src/__solutionName.dot__.Data/DatabaseException.cs +39 -0
  1371. package/templates/layers/db-core/files/src/__solutionName.dot__.Data/DatabaseOptions.cs +65 -0
  1372. package/templates/layers/db-core/files/src/__solutionName.dot__.Data/DatabaseRetry.cs +24 -0
  1373. package/templates/layers/db-core/files/src/__solutionName.dot__.Data/IRepository.cs +30 -0
  1374. package/templates/layers/db-core/files/src/__solutionName.dot__.Data/IUnitOfWork.cs +23 -0
  1375. package/templates/layers/db-core/files/src/__solutionName.dot__.Data/InMemory/InMemoryDatabase.cs +188 -0
  1376. package/templates/layers/db-core/files/src/__solutionName.dot__.Data/Query.cs +29 -0
  1377. package/templates/layers/db-core/files/src/__solutionName.dot__.Data/__solutionName.dot__.Data.csproj +16 -0
  1378. package/templates/layers/db-core/files/src/__solutionName.snake__/db/api.py +63 -0
  1379. package/templates/layers/db-core/files/src/__solutionName.snake__/db/config.py +79 -0
  1380. package/templates/layers/db-core/files/src/__solutionName.snake__/db/errors.py +47 -0
  1381. package/templates/layers/db-core/files/src/__solutionName.snake__/db/memory.py +143 -0
  1382. package/templates/layers/db-core/files/src/__solutionName.snake__/db/ports.py +80 -0
  1383. package/templates/layers/db-core/files/src/__solutionName.snake__/db/retry.py +25 -0
  1384. package/templates/layers/db-core/files/src/db/config.ts +65 -0
  1385. package/templates/layers/db-core/files/src/db/errors.ts +52 -0
  1386. package/templates/layers/db-core/files/src/db/index.ts +41 -0
  1387. package/templates/layers/db-core/files/src/db/memory.test.ts +107 -0
  1388. package/templates/layers/db-core/files/src/db/memory.ts +182 -0
  1389. package/templates/layers/db-core/files/src/db/ports.ts +58 -0
  1390. package/templates/layers/db-core/files/src/db/retry.ts +20 -0
  1391. package/templates/layers/db-core/files/tests/test_db_core.py +95 -0
  1392. package/templates/layers/db-mongo/blueprint.yaml +157 -0
  1393. package/templates/layers/db-mongo/files/.env.mongo.example +17 -0
  1394. package/templates/layers/db-mongo/files/Directory.Packages.props +7 -0
  1395. package/templates/layers/db-mongo/files/__solutionName.dot__.slnx +5 -0
  1396. package/templates/layers/db-mongo/files/docker-compose.mongo.yml +27 -0
  1397. package/templates/layers/db-mongo/files/docs/db-mongo.md +138 -0
  1398. package/templates/layers/db-mongo/files/go.mod +1 -0
  1399. package/templates/layers/db-mongo/files/internal/db/mongodb/client.go +57 -0
  1400. package/templates/layers/db-mongo/files/internal/db/mongodb/config.go +105 -0
  1401. package/templates/layers/db-mongo/files/internal/db/mongodb/indexes.go +42 -0
  1402. package/templates/layers/db-mongo/files/package.json +5 -0
  1403. package/templates/layers/db-mongo/files/pyproject.toml +2 -0
  1404. package/templates/layers/db-mongo/files/requirements-mongo.txt +2 -0
  1405. package/templates/layers/db-mongo/files/src/__solutionName.dot__.Infrastructure.Mongo/MongoContext.cs +21 -0
  1406. package/templates/layers/db-mongo/files/src/__solutionName.dot__.Infrastructure.Mongo/MongoHealthCheck.cs +28 -0
  1407. package/templates/layers/db-mongo/files/src/__solutionName.dot__.Infrastructure.Mongo/MongoIndexes.cs +25 -0
  1408. package/templates/layers/db-mongo/files/src/__solutionName.dot__.Infrastructure.Mongo/MongoOptions.cs +23 -0
  1409. package/templates/layers/db-mongo/files/src/__solutionName.dot__.Infrastructure.Mongo/MongoServiceCollectionExtensions.cs +31 -0
  1410. package/templates/layers/db-mongo/files/src/__solutionName.dot__.Infrastructure.Mongo/__solutionName.dot__.Infrastructure.Mongo.csproj +18 -0
  1411. package/templates/layers/db-mongo/files/src/__solutionName.snake__/db/mongo/client.py +48 -0
  1412. package/templates/layers/db-mongo/files/src/__solutionName.snake__/db/mongo/config.py +66 -0
  1413. package/templates/layers/db-mongo/files/src/__solutionName.snake__/db/mongo/indexes.py +29 -0
  1414. package/templates/layers/db-mongo/files/src/db/mongo/client.rs +37 -0
  1415. package/templates/layers/db-mongo/files/src/db/mongo/client.ts +51 -0
  1416. package/templates/layers/db-mongo/files/src/db/mongo/config.rs +68 -0
  1417. package/templates/layers/db-mongo/files/src/db/mongo/config.ts +58 -0
  1418. package/templates/layers/db-mongo/files/src/db/mongo/index.ts +3 -0
  1419. package/templates/layers/db-mongo/files/src/db/mongo/indexes.rs +26 -0
  1420. package/templates/layers/db-mongo/files/src/db/mongo/indexes.ts +21 -0
  1421. package/templates/layers/db-mongo/files/src/db/mongo/mod.rs +7 -0
  1422. package/templates/layers/db-mongo/files/src/main/java/__solutionName.lower__/db/mongo/MongoClientProvider.java +66 -0
  1423. package/templates/layers/db-mongo/files/src/main/java/__solutionName.lower__/db/mongo/MongoConfig.java +56 -0
  1424. package/templates/layers/db-mongo/files/src/main/java/__solutionName.lower__/db/mongo/MongoIndexes.java +26 -0
  1425. package/templates/layers/db-postgres/blueprint.yaml +130 -0
  1426. package/templates/layers/db-postgres/files/.env.postgres.example +31 -0
  1427. package/templates/layers/db-postgres/files/Directory.Packages.props +5 -0
  1428. package/templates/layers/db-postgres/files/__solutionName.dot__.slnx +5 -0
  1429. package/templates/layers/db-postgres/files/docker-compose.postgres.yml +28 -0
  1430. package/templates/layers/db-postgres/files/docs/postgres.md +152 -0
  1431. package/templates/layers/db-postgres/files/go.mod +1 -0
  1432. package/templates/layers/db-postgres/files/internal/db/postgres.go +48 -0
  1433. package/templates/layers/db-postgres/files/internal/db/postgres_config.go +79 -0
  1434. package/templates/layers/db-postgres/files/internal/db/postgres_errors.go +59 -0
  1435. package/templates/layers/db-postgres/files/internal/db/postgres_migrate.go +155 -0
  1436. package/templates/layers/db-postgres/files/migrations/0001_init.sql +9 -0
  1437. package/templates/layers/db-postgres/files/package.json +11 -0
  1438. package/templates/layers/db-postgres/files/pyproject.toml +2 -0
  1439. package/templates/layers/db-postgres/files/src/__solutionName.dot__.Data.Postgres/PostgresErrors.cs +57 -0
  1440. package/templates/layers/db-postgres/files/src/__solutionName.dot__.Data.Postgres/PostgresMigrator.cs +171 -0
  1441. package/templates/layers/db-postgres/files/src/__solutionName.dot__.Data.Postgres/PostgresOptions.cs +92 -0
  1442. package/templates/layers/db-postgres/files/src/__solutionName.dot__.Data.Postgres/__solutionName.dot__.Data.Postgres.csproj +25 -0
  1443. package/templates/layers/db-postgres/files/src/__solutionName.snake__/db/postgres.py +256 -0
  1444. package/templates/layers/db-postgres/files/src/__solutionName.snake__/db/postgres_config.py +81 -0
  1445. package/templates/layers/db-postgres/files/src/__solutionName.snake__/db/postgres_errors.py +48 -0
  1446. package/templates/layers/db-postgres/files/src/__solutionName.snake__/db/postgres_migrate.py +132 -0
  1447. package/templates/layers/db-postgres/files/src/db/postgres/config.ts +86 -0
  1448. package/templates/layers/db-postgres/files/src/db/postgres/database.ts +109 -0
  1449. package/templates/layers/db-postgres/files/src/db/postgres/errors.ts +48 -0
  1450. package/templates/layers/db-postgres/files/src/db/postgres/index.ts +16 -0
  1451. package/templates/layers/db-postgres/files/src/db/postgres/migrate.cli.ts +11 -0
  1452. package/templates/layers/db-postgres/files/src/db/postgres/migrate.ts +134 -0
  1453. package/templates/layers/db-postgres/files/src/db/postgres/repository.ts +159 -0
  1454. package/templates/layers/db-sqlite/blueprint.yaml +147 -0
  1455. package/templates/layers/db-sqlite/files/.env.sqlite.example +20 -0
  1456. package/templates/layers/db-sqlite/files/.gitignore.sqlite +5 -0
  1457. package/templates/layers/db-sqlite/files/Directory.Packages.props +6 -0
  1458. package/templates/layers/db-sqlite/files/__solutionName.dot__.slnx +5 -0
  1459. package/templates/layers/db-sqlite/files/docs/db/sqlite.md +91 -0
  1460. package/templates/layers/db-sqlite/files/go.mod +1 -0
  1461. package/templates/layers/db-sqlite/files/internal/db/sqlite/health.go +39 -0
  1462. package/templates/layers/db-sqlite/files/internal/db/sqlite/migrate.go +106 -0
  1463. package/templates/layers/db-sqlite/files/internal/db/sqlite/settings.go +103 -0
  1464. package/templates/layers/db-sqlite/files/internal/db/sqlite/sqlite.go +78 -0
  1465. package/templates/layers/db-sqlite/files/internal/db/sqlite/sqlite_test.go +94 -0
  1466. package/templates/layers/db-sqlite/files/migrations/0001_init.sql +11 -0
  1467. package/templates/layers/db-sqlite/files/package.json +8 -0
  1468. package/templates/layers/db-sqlite/files/pyproject.toml +2 -0
  1469. package/templates/layers/db-sqlite/files/src/__solutionName.dot__.Persistence.Sqlite/SqliteConnectionFactory.cs +67 -0
  1470. package/templates/layers/db-sqlite/files/src/__solutionName.dot__.Persistence.Sqlite/SqliteHealth.cs +37 -0
  1471. package/templates/layers/db-sqlite/files/src/__solutionName.dot__.Persistence.Sqlite/SqliteMigrator.cs +99 -0
  1472. package/templates/layers/db-sqlite/files/src/__solutionName.dot__.Persistence.Sqlite/SqliteOptions.cs +81 -0
  1473. package/templates/layers/db-sqlite/files/src/__solutionName.dot__.Persistence.Sqlite/__solutionName.dot__.Persistence.Sqlite.csproj +18 -0
  1474. package/templates/layers/db-sqlite/files/src/__solutionName.snake__/db/sqlite/connection.py +49 -0
  1475. package/templates/layers/db-sqlite/files/src/__solutionName.snake__/db/sqlite/health.py +36 -0
  1476. package/templates/layers/db-sqlite/files/src/__solutionName.snake__/db/sqlite/migrate.py +58 -0
  1477. package/templates/layers/db-sqlite/files/src/__solutionName.snake__/db/sqlite/settings.py +68 -0
  1478. package/templates/layers/db-sqlite/files/src/db/sqlite/cli.ts +38 -0
  1479. package/templates/layers/db-sqlite/files/src/db/sqlite/client.ts +45 -0
  1480. package/templates/layers/db-sqlite/files/src/db/sqlite/health.ts +30 -0
  1481. package/templates/layers/db-sqlite/files/src/db/sqlite/index.ts +8 -0
  1482. package/templates/layers/db-sqlite/files/src/db/sqlite/migrate.ts +51 -0
  1483. package/templates/layers/db-sqlite/files/src/db/sqlite/settings.ts +75 -0
  1484. package/templates/layers/db-sqlite/files/tests/test_db_sqlite.py +50 -0
  1485. package/templates/layers/devcontainer/blueprint.yaml +130 -0
  1486. package/templates/layers/devcontainer/files/.devcontainer/devcontainer.json +61 -0
  1487. package/templates/layers/devcontainer/files/.devcontainer/post-create.sh +29 -0
  1488. package/templates/layers/devcontainer/files/.devcontainer/setup-dotnet.sh +19 -0
  1489. package/templates/layers/devcontainer/files/.devcontainer/setup-go.sh +13 -0
  1490. package/templates/layers/devcontainer/files/.devcontainer/setup-node.sh +29 -0
  1491. package/templates/layers/devcontainer/files/.devcontainer/setup-python.sh +32 -0
  1492. package/templates/layers/devcontainer/files/docs/devcontainer.md +75 -0
  1493. package/templates/layers/docker/blueprint.yaml +168 -0
  1494. package/templates/layers/docker/files/.dockerignore +80 -0
  1495. package/templates/layers/docker/files/.env.docker.example +17 -0
  1496. package/templates/layers/docker/files/Dockerfile.dotnet +38 -0
  1497. package/templates/layers/docker/files/Dockerfile.go +40 -0
  1498. package/templates/layers/docker/files/Dockerfile.nextjs +42 -0
  1499. package/templates/layers/docker/files/Dockerfile.nodejs +46 -0
  1500. package/templates/layers/docker/files/Dockerfile.python +52 -0
  1501. package/templates/layers/docker/files/Dockerfile.spa +30 -0
  1502. package/templates/layers/docker/files/compose.yaml +35 -0
  1503. package/templates/layers/docker/files/docker/nginx.conf +44 -0
  1504. package/templates/layers/docker/files/docs/docker.md +115 -0
  1505. package/templates/layers/docker/files/next.config.ts +11 -0
  1506. package/templates/layers/docker-compose/blueprint.yaml +118 -0
  1507. package/templates/layers/docker-compose/files/.env.compose.example +66 -0
  1508. package/templates/layers/docker-compose/files/compose/cache-none.yml +3 -0
  1509. package/templates/layers/docker-compose/files/compose/cache-redis.yml +28 -0
  1510. package/templates/layers/docker-compose/files/compose/cache-valkey.yml +27 -0
  1511. package/templates/layers/docker-compose/files/compose/db-mongo.yml +27 -0
  1512. package/templates/layers/docker-compose/files/compose/db-mysql.yml +31 -0
  1513. package/templates/layers/docker-compose/files/compose/db-none.yml +4 -0
  1514. package/templates/layers/docker-compose/files/compose/db-postgres.yml +28 -0
  1515. package/templates/layers/docker-compose/files/compose/queue-kafka.yml +35 -0
  1516. package/templates/layers/docker-compose/files/compose/queue-nats.yml +26 -0
  1517. package/templates/layers/docker-compose/files/compose/queue-none.yml +3 -0
  1518. package/templates/layers/docker-compose/files/compose/queue-rabbitmq.yml +27 -0
  1519. package/templates/layers/docker-compose/files/docker-compose.yml +20 -0
  1520. package/templates/layers/docker-compose/files/docs/local-stack.md +135 -0
  1521. package/templates/layers/evals/blueprint.yaml +211 -0
  1522. package/templates/layers/evals/files/.github/workflows/evals-node.yml +55 -0
  1523. package/templates/layers/evals/files/.github/workflows/evals-python.yml +54 -0
  1524. package/templates/layers/evals/files/docs/evals.md +68 -0
  1525. package/templates/layers/evals/files/evals/README.md +73 -0
  1526. package/templates/layers/evals/files/evals/assertions.py +56 -0
  1527. package/templates/layers/evals/files/evals/assertions.ts +66 -0
  1528. package/templates/layers/evals/files/evals/budget.py +55 -0
  1529. package/templates/layers/evals/files/evals/budget.ts +61 -0
  1530. package/templates/layers/evals/files/evals/cli.ts +76 -0
  1531. package/templates/layers/evals/files/evals/config.py +83 -0
  1532. package/templates/layers/evals/files/evals/config.ts +77 -0
  1533. package/templates/layers/evals/files/evals/dataset.py +90 -0
  1534. package/templates/layers/evals/files/evals/dataset.ts +101 -0
  1535. package/templates/layers/evals/files/evals/datasets/case.schema.json +67 -0
  1536. package/templates/layers/evals/files/evals/datasets/golden.jsonl +4 -0
  1537. package/templates/layers/evals/files/evals/run.py +85 -0
  1538. package/templates/layers/evals/files/evals/runner.py +114 -0
  1539. package/templates/layers/evals/files/evals/runner.ts +125 -0
  1540. package/templates/layers/evals/files/evals/target.ts +95 -0
  1541. package/templates/layers/evals/files/evals/targets.py +103 -0
  1542. package/templates/layers/evals/files/evals/tracing.py +49 -0
  1543. package/templates/layers/evals/files/evals/tracing.ts +31 -0
  1544. package/templates/layers/evals/files/evals/tsconfig.json +15 -0
  1545. package/templates/layers/health-checks/blueprint.yaml +170 -0
  1546. package/templates/layers/health-checks/files/.env.health.example +23 -0
  1547. package/templates/layers/health-checks/files/__solutionName.dot__.slnx +5 -0
  1548. package/templates/layers/health-checks/files/docs/health-checks.md +200 -0
  1549. package/templates/layers/health-checks/files/internal/health/config.go +96 -0
  1550. package/templates/layers/health-checks/files/internal/health/health.go +113 -0
  1551. package/templates/layers/health-checks/files/internal/health/health_test.go +102 -0
  1552. package/templates/layers/health-checks/files/internal/health/http.go +56 -0
  1553. package/templates/layers/health-checks/files/internal/health/probes.go +88 -0
  1554. package/templates/layers/health-checks/files/internal/health/runner.go +100 -0
  1555. package/templates/layers/health-checks/files/package.json +5 -0
  1556. package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/DependencyProbeOptions.cs +26 -0
  1557. package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/HealthEndpointExtensions.cs +34 -0
  1558. package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/HealthOptions.cs +25 -0
  1559. package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/HealthProbeResponder.cs +121 -0
  1560. package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/HealthServiceCollectionExtensions.cs +51 -0
  1561. package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/HealthTags.cs +10 -0
  1562. package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/HttpDependencyHealthCheck.cs +44 -0
  1563. package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/TcpDependencyHealthCheck.cs +36 -0
  1564. package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/__solutionName.dot__.Health.csproj +15 -0
  1565. package/templates/layers/health-checks/files/src/__solutionName.snake__/health/__init__.py +28 -0
  1566. package/templates/layers/health-checks/files/src/__solutionName.snake__/health/models.py +48 -0
  1567. package/templates/layers/health-checks/files/src/__solutionName.snake__/health/probes.py +82 -0
  1568. package/templates/layers/health-checks/files/src/__solutionName.snake__/health/register.py +15 -0
  1569. package/templates/layers/health-checks/files/src/__solutionName.snake__/health/registry.py +24 -0
  1570. package/templates/layers/health-checks/files/src/__solutionName.snake__/health/router.py +52 -0
  1571. package/templates/layers/health-checks/files/src/__solutionName.snake__/health/runner.py +94 -0
  1572. package/templates/layers/health-checks/files/src/__solutionName.snake__/health/settings.py +33 -0
  1573. package/templates/layers/health-checks/files/src/app/health/live/route.ts +11 -0
  1574. package/templates/layers/health-checks/files/src/app/health/ready/route.ts +10 -0
  1575. package/templates/layers/health-checks/files/src/app/health/startup/route.ts +10 -0
  1576. package/templates/layers/health-checks/files/src/health/__tests__/health.test.ts +66 -0
  1577. package/templates/layers/health-checks/files/src/health/config.ts +62 -0
  1578. package/templates/layers/health-checks/files/src/health/handler.ts +50 -0
  1579. package/templates/layers/health-checks/files/src/health/index.ts +20 -0
  1580. package/templates/layers/health-checks/files/src/health/node/http.ts +26 -0
  1581. package/templates/layers/health-checks/files/src/health/node/tcp.ts +36 -0
  1582. package/templates/layers/health-checks/files/src/health/probes.ts +61 -0
  1583. package/templates/layers/health-checks/files/src/health/register.ts +15 -0
  1584. package/templates/layers/health-checks/files/src/health/registry.ts +27 -0
  1585. package/templates/layers/health-checks/files/src/health/runner.ts +76 -0
  1586. package/templates/layers/health-checks/files/src/health/types.ts +39 -0
  1587. package/templates/layers/health-checks/files/tests/__init__.py +1 -0
  1588. package/templates/layers/health-checks/files/tests/test_health.py +51 -0
  1589. package/templates/layers/lint-format/blueprint.yaml +178 -0
  1590. package/templates/layers/lint-format/files/.editorconfig +87 -0
  1591. package/templates/layers/lint-format/files/.golangci.yml +34 -0
  1592. package/templates/layers/lint-format/files/.prettierignore +20 -0
  1593. package/templates/layers/lint-format/files/.prettierrc.json +11 -0
  1594. package/templates/layers/lint-format/files/docs/lint-format.md +111 -0
  1595. package/templates/layers/lint-format/files/eslint.config.mjs +43 -0
  1596. package/templates/layers/lint-format/files/package.json +9 -0
  1597. package/templates/layers/lint-format/files/ruff.toml +25 -0
  1598. package/templates/layers/observability-otel/blueprint.yaml +212 -0
  1599. package/templates/layers/observability-otel/files/.env.otel.example +30 -0
  1600. package/templates/layers/observability-otel/files/Directory.Packages.props +8 -0
  1601. package/templates/layers/observability-otel/files/__solutionName.dot__.slnx +5 -0
  1602. package/templates/layers/observability-otel/files/docker-compose.otel.yml +16 -0
  1603. package/templates/layers/observability-otel/files/docs/observability.md +224 -0
  1604. package/templates/layers/observability-otel/files/go.mod +7 -0
  1605. package/templates/layers/observability-otel/files/internal/telemetry/config.go +122 -0
  1606. package/templates/layers/observability-otel/files/internal/telemetry/http.go +33 -0
  1607. package/templates/layers/observability-otel/files/internal/telemetry/logging.go +84 -0
  1608. package/templates/layers/observability-otel/files/internal/telemetry/provider.go +77 -0
  1609. package/templates/layers/observability-otel/files/otel-collector-config.yaml +47 -0
  1610. package/templates/layers/observability-otel/files/package.json +15 -0
  1611. package/templates/layers/observability-otel/files/pyproject.toml +2 -0
  1612. package/templates/layers/observability-otel/files/src/__solutionName.dot__.Observability/ObservabilityExtensions.cs +81 -0
  1613. package/templates/layers/observability-otel/files/src/__solutionName.dot__.Observability/ObservabilityOptions.cs +37 -0
  1614. package/templates/layers/observability-otel/files/src/__solutionName.dot__.Observability/__solutionName.dot__.Observability.csproj +25 -0
  1615. package/templates/layers/observability-otel/files/src/__solutionName.snake__/otel/__init__.py +15 -0
  1616. package/templates/layers/observability-otel/files/src/__solutionName.snake__/otel/config.py +99 -0
  1617. package/templates/layers/observability-otel/files/src/__solutionName.snake__/otel/log.py +86 -0
  1618. package/templates/layers/observability-otel/files/src/__solutionName.snake__/otel/setup.py +124 -0
  1619. package/templates/layers/observability-otel/files/src/instrumentation.ts +9 -0
  1620. package/templates/layers/observability-otel/files/src/otel/config.ts +83 -0
  1621. package/templates/layers/observability-otel/files/src/otel/logger.ts +46 -0
  1622. package/templates/layers/observability-otel/files/src/otel/register.ts +5 -0
  1623. package/templates/layers/observability-otel/files/src/otel/sdk.ts +73 -0
  1624. package/templates/layers/queue-broker/blueprint.yaml +194 -0
  1625. package/templates/layers/queue-broker/files/.env.queue.example +35 -0
  1626. package/templates/layers/queue-broker/files/Directory.Packages.props +7 -0
  1627. package/templates/layers/queue-broker/files/__solutionName.dot__.slnx +5 -0
  1628. package/templates/layers/queue-broker/files/cmd/worker/main.go +34 -0
  1629. package/templates/layers/queue-broker/files/docker-compose.queue-rabbitmq.yml +26 -0
  1630. package/templates/layers/queue-broker/files/docker-compose.queue-redis.yml +23 -0
  1631. package/templates/layers/queue-broker/files/docs/queue-asynq.md +71 -0
  1632. package/templates/layers/queue-broker/files/docs/queue-bullmq.md +62 -0
  1633. package/templates/layers/queue-broker/files/docs/queue-celery.md +58 -0
  1634. package/templates/layers/queue-broker/files/docs/queue-masstransit.md +84 -0
  1635. package/templates/layers/queue-broker/files/go.mod +2 -0
  1636. package/templates/layers/queue-broker/files/internal/queue/client.go +57 -0
  1637. package/templates/layers/queue-broker/files/internal/queue/config.go +109 -0
  1638. package/templates/layers/queue-broker/files/internal/queue/config_test.go +38 -0
  1639. package/templates/layers/queue-broker/files/internal/queue/handlers.go +33 -0
  1640. package/templates/layers/queue-broker/files/internal/queue/server.go +29 -0
  1641. package/templates/layers/queue-broker/files/internal/queue/tasks.go +11 -0
  1642. package/templates/layers/queue-broker/files/package.json +6 -0
  1643. package/templates/layers/queue-broker/files/pyproject.toml +2 -0
  1644. package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/Consumers/WelcomeEmailRequestedConsumer.cs +24 -0
  1645. package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/Contracts/WelcomeEmailRequested.cs +7 -0
  1646. package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/IJobPublisher.cs +11 -0
  1647. package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/JobPublisher.cs +10 -0
  1648. package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/QueueOptions.cs +32 -0
  1649. package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/QueueServiceCollectionExtensions.cs +60 -0
  1650. package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/__solutionName.dot__.Queue.csproj +21 -0
  1651. package/templates/layers/queue-broker/files/src/__solutionName.snake__/queue/__init__.py +12 -0
  1652. package/templates/layers/queue-broker/files/src/__solutionName.snake__/queue/app.py +35 -0
  1653. package/templates/layers/queue-broker/files/src/__solutionName.snake__/queue/config.py +90 -0
  1654. package/templates/layers/queue-broker/files/src/__solutionName.snake__/queue/producer.py +10 -0
  1655. package/templates/layers/queue-broker/files/src/__solutionName.snake__/queue/tasks.py +31 -0
  1656. package/templates/layers/queue-broker/files/src/queue/config.ts +60 -0
  1657. package/templates/layers/queue-broker/files/src/queue/connection.ts +19 -0
  1658. package/templates/layers/queue-broker/files/src/queue/handlers.ts +22 -0
  1659. package/templates/layers/queue-broker/files/src/queue/index.ts +8 -0
  1660. package/templates/layers/queue-broker/files/src/queue/jobs.ts +15 -0
  1661. package/templates/layers/queue-broker/files/src/queue/producer.ts +39 -0
  1662. package/templates/layers/queue-broker/files/src/queue/worker.cli.ts +32 -0
  1663. package/templates/layers/queue-broker/files/src/queue/worker.ts +28 -0
  1664. package/templates/layers/queue-broker/files/tests/test_queue_config.py +37 -0
  1665. package/templates/layers/release-automation/blueprint.yaml +205 -0
  1666. package/templates/layers/release-automation/files/.changeset/README.md +31 -0
  1667. package/templates/layers/release-automation/files/.changeset/config.json +12 -0
  1668. package/templates/layers/release-automation/files/.githooks/commit-msg +32 -0
  1669. package/templates/layers/release-automation/files/.github/workflows/commit-conventions.yml +45 -0
  1670. package/templates/layers/release-automation/files/.github/workflows/release-changesets.yml +68 -0
  1671. package/templates/layers/release-automation/files/.github/workflows/release-dotnet.yml +90 -0
  1672. package/templates/layers/release-automation/files/.github/workflows/release-go.yml +89 -0
  1673. package/templates/layers/release-automation/files/.github/workflows/release-monorepo.yml +40 -0
  1674. package/templates/layers/release-automation/files/.github/workflows/release-node.yml +85 -0
  1675. package/templates/layers/release-automation/files/.github/workflows/release-python.yml +68 -0
  1676. package/templates/layers/release-automation/files/.release-please-manifest.json +3 -0
  1677. package/templates/layers/release-automation/files/docs/release-automation.md +154 -0
  1678. package/templates/layers/release-automation/files/release-please-config.json +22 -0
  1679. package/templates/layers/security-supply-chain/blueprint.yaml +208 -0
  1680. package/templates/layers/security-supply-chain/files/.githooks/pre-commit +17 -0
  1681. package/templates/layers/security-supply-chain/files/.github/dependabot.yml +30 -0
  1682. package/templates/layers/security-supply-chain/files/.github/workflows/codeql.yml +54 -0
  1683. package/templates/layers/security-supply-chain/files/.github/workflows/dependency-review.yml +35 -0
  1684. package/templates/layers/security-supply-chain/files/.github/workflows/sbom.yml +56 -0
  1685. package/templates/layers/security-supply-chain/files/.github/workflows/scorecard.yml +51 -0
  1686. package/templates/layers/security-supply-chain/files/.github/workflows/secret-scan.yml +62 -0
  1687. package/templates/layers/security-supply-chain/files/.gitleaks.toml +42 -0
  1688. package/templates/layers/security-supply-chain/files/SECURITY.md +36 -0
  1689. package/templates/layers/security-supply-chain/files/docs/security-supply-chain.md +124 -0
  1690. package/templates/layers/security-supply-chain/files/npmrc +13 -0
  1691. package/templates/layers/security-supply-chain/files/renovate.json +26 -0
  1692. package/templates/layers/testing-e2e/blueprint.yaml +199 -0
  1693. package/templates/layers/testing-e2e/files/.env.e2e.example +32 -0
  1694. package/templates/layers/testing-e2e/files/Directory.Packages.props +7 -0
  1695. package/templates/layers/testing-e2e/files/__solutionName.dot__.slnx +5 -0
  1696. package/templates/layers/testing-e2e/files/docs/testing-e2e.md +106 -0
  1697. package/templates/layers/testing-e2e/files/e2e/api/contract.spec.ts +37 -0
  1698. package/templates/layers/testing-e2e/files/e2e/api/health.spec.ts +29 -0
  1699. package/templates/layers/testing-e2e/files/e2e/browser/app.spec.ts +27 -0
  1700. package/templates/layers/testing-e2e/files/e2e/browser/navigation.spec.ts +26 -0
  1701. package/templates/layers/testing-e2e/files/e2e/config.ts +85 -0
  1702. package/templates/layers/testing-e2e/files/e2e/support.ts +20 -0
  1703. package/templates/layers/testing-e2e/files/package.json +8 -0
  1704. package/templates/layers/testing-e2e/files/playwright.config.ts +44 -0
  1705. package/templates/layers/testing-e2e/files/test/e2e/config.go +71 -0
  1706. package/templates/layers/testing-e2e/files/test/e2e/contract_test.go +65 -0
  1707. package/templates/layers/testing-e2e/files/test/e2e/health_test.go +71 -0
  1708. package/templates/layers/testing-e2e/files/tests/__solutionName.dot__.E2E/ApiContractTests.cs +51 -0
  1709. package/templates/layers/testing-e2e/files/tests/__solutionName.dot__.E2E/DeploymentFixture.cs +44 -0
  1710. package/templates/layers/testing-e2e/files/tests/__solutionName.dot__.E2E/E2eSettings.cs +26 -0
  1711. package/templates/layers/testing-e2e/files/tests/__solutionName.dot__.E2E/HealthContractTests.cs +42 -0
  1712. package/templates/layers/testing-e2e/files/tests/__solutionName.dot__.E2E/__solutionName.dot__.E2E.csproj +23 -0
  1713. package/templates/layers/testing-e2e/files/tests/e2e/conftest.py +52 -0
  1714. package/templates/layers/testing-e2e/files/tests/e2e/e2e_config.py +47 -0
  1715. package/templates/layers/testing-e2e/files/tests/e2e/test_api_contract.py +35 -0
  1716. package/templates/layers/testing-e2e/files/tests/e2e/test_health_contract.py +28 -0
  1717. package/templates/layers/testing-unit/blueprint.yaml +161 -0
  1718. package/templates/layers/testing-unit/files/.coveragerc +12 -0
  1719. package/templates/layers/testing-unit/files/Directory.Packages.props +9 -0
  1720. package/templates/layers/testing-unit/files/__solutionName.dot__.slnx +5 -0
  1721. package/templates/layers/testing-unit/files/docs/testing.md +90 -0
  1722. package/templates/layers/testing-unit/files/internal/testsupport/clock.go +89 -0
  1723. package/templates/layers/testing-unit/files/internal/testsupport/clock_test.go +132 -0
  1724. package/templates/layers/testing-unit/files/internal/testsupport/recorder.go +41 -0
  1725. package/templates/layers/testing-unit/files/package.json +10 -0
  1726. package/templates/layers/testing-unit/files/pyproject.toml +2 -0
  1727. package/templates/layers/testing-unit/files/pytest.ini +16 -0
  1728. package/templates/layers/testing-unit/files/tests/__solutionName.dot__.Tests/Recorder.cs +66 -0
  1729. package/templates/layers/testing-unit/files/tests/__solutionName.dot__.Tests/RecorderTests.cs +90 -0
  1730. package/templates/layers/testing-unit/files/tests/__solutionName.dot__.Tests/__solutionName.dot__.Tests.csproj +32 -0
  1731. package/templates/layers/testing-unit/files/tests/__solutionName.dot__.Tests/coverlet.runsettings +17 -0
  1732. package/templates/layers/testing-unit/files/tests/conftest.py +17 -0
  1733. package/templates/layers/testing-unit/files/tests/support/clock.ts +81 -0
  1734. package/templates/layers/testing-unit/files/tests/support/index.ts +2 -0
  1735. package/templates/layers/testing-unit/files/tests/support/recorder.ts +21 -0
  1736. package/templates/layers/testing-unit/files/tests/support.py +78 -0
  1737. package/templates/layers/testing-unit/files/tests/support.test.ts +87 -0
  1738. package/templates/layers/testing-unit/files/tests/test_support.py +85 -0
  1739. package/templates/layers/testing-unit/files/vitest.config.ts +52 -0
@@ -0,0 +1,124 @@
1
+ ---
2
+ name: spec-driven
3
+ description: "Run a change through the spec → plan → tasks → implement loop under specs/NNN-slug/. Use when the user says spec, write a spec, plan this feature, break into tasks, /spec, /plan, /tasks, resume the spec, or when a change is large enough that jumping straight to code would guess at requirements. NOT for one-line fixes."
4
+ metadata:
5
+ version: 1.0.0
6
+ category: workflow
7
+ updated: 2026-07-18
8
+ ---
9
+
10
+ # Spec-Driven Development
11
+
12
+ You are an expert at turning a fuzzy request into a reviewable spec, a technical plan, and an ordered task list — before a line of code is written. Your goal is that a reader who was not in the conversation can approve the work *and* a different agent can execute it.
13
+
14
+ ## Before Starting
15
+
16
+ Read `AGENTS.md` first — it is the source of truth for stack, conventions, boundaries, and `commands.*`. Never restate or contradict it inside a spec.
17
+
18
+ Then check state:
19
+ - `specs/` — what numbers are taken, is there an unfinished spec dir?
20
+ - `.agent/ACTIVE.md` — is a spec already in flight?
21
+ - `docs/adr/` — has this decision already been made?
22
+
23
+ Ask only for what those files do not answer: the user-visible outcome, the constraints, and what is explicitly out of scope.
24
+
25
+ ## How This Skill Works
26
+
27
+ **Mode 1 — New spec.** Nothing exists. Create `specs/NNN-slug/spec.md` and stop at the gate.
28
+
29
+ **Mode 2 — Advance a phase.** A spec dir exists at some phase. Read everything already in it, produce the *next* artifact only, stop at the next gate.
30
+
31
+ **Mode 3 — Resume mid-loop.** The loop was interrupted. Reconstruct position from files on disk (below), never from memory of the conversation.
32
+
33
+ ## Directory and naming rules
34
+
35
+ ```
36
+ specs/
37
+ └── 042-payment-retry/
38
+ ├── spec.md WHAT and WHY. No HOW.
39
+ ├── plan.md HOW. Technical approach, trade-offs, affected modules.
40
+ └── tasks.md Ordered, checkable, each task names its files.
41
+ ```
42
+
43
+ - `NNN` — zero-padded to three digits, monotonically increasing, **never reused** even if a spec is abandoned. Highest existing number + 1.
44
+ - `slug` — kebab-case, 2-4 words, describes the outcome not the mechanism. `payment-retry` beats `add-retry-wrapper-to-stripe-client`.
45
+ - One spec = one shippable outcome. If `tasks.md` exceeds ~15 tasks or `spec.md` has two unrelated "so that" clauses, split into two specs.
46
+
47
+ ## The loop
48
+
49
+ | Phase | Artifact | Contains | Never contains |
50
+ |---|---|---|---|
51
+ | 1 | `spec.md` | user-visible behavior, acceptance criteria, out-of-scope | file names, libraries, schemas |
52
+ | 2 | `plan.md` | approach, affected modules, data/contract changes, risks | task ordering, checkboxes |
53
+ | 3 | `tasks.md` | ordered checkable tasks, each naming its files | new requirements |
54
+ | 4 | code | the change | anything not traceable to a task |
55
+
56
+ Each phase ends at a **gate**: present the artifact, state what the next phase will do, and stop for explicit approval. Do not chain phases in one pass unless the user says so. See [references/phase-gates.md](references/phase-gates.md) for the gate checklists and the exact approval prompt.
57
+
58
+ ## What makes a spec reviewable
59
+
60
+ A reviewer must be able to say "yes, that is what I want" without reading code.
61
+
62
+ - Every requirement is **testable** — "responds within the declared latency budget" not "is fast".
63
+ - Every requirement is **atomic** — one behavior per line, so a task can map to it.
64
+ - Ambiguity is marked `[NEEDS CLARIFICATION: ...]` rather than guessed. A spec with open markers cannot pass its gate.
65
+ - **Out of scope** is populated. An empty out-of-scope section means the boundary was never thought about.
66
+ - No HOW. If a line names a library, a table, or a file path, it belongs in `plan.md`.
67
+
68
+ ## Resuming mid-loop
69
+
70
+ Determine position from disk, in this order:
71
+
72
+ 1. `tasks.md` exists with unchecked boxes → you are implementing. Resume at the first unchecked task; re-read `plan.md` for context first.
73
+ 2. `plan.md` exists, no `tasks.md` → gate 2 was passed or is pending. Ask which, then produce tasks.
74
+ 3. `spec.md` only → gate 1. Check for open `[NEEDS CLARIFICATION]` markers before proposing a plan.
75
+ 4. Empty or missing dir → start fresh.
76
+
77
+ Never re-derive an earlier artifact from a later one, and never silently edit `spec.md` while implementing. New requirements discovered during implementation go back through gate 1 — note them under **Discovered during implementation** in `spec.md` and re-request approval.
78
+
79
+ ## Feeding `.agent/ACTIVE.md`
80
+
81
+ `ACTIVE.md` is the pointer to the current spec, not a copy of it. On entering a phase, set it to the spec id, the phase, and the next unchecked task — one short block, replaced (not appended) each time. When the last task is checked, clear `ACTIVE.md`, append the outcome to `.agent/DONE.md`, and append any decision that outlived the spec to `.agent/DECISIONS.md`. Anything a *different* tool needs to resume goes in `.agent/HANDOFF.md` — see the **handoff** skill.
82
+
83
+ ## Templates
84
+
85
+ - [references/spec-template.md](references/spec-template.md) — fillable `spec.md`
86
+ - [references/plan-template.md](references/plan-template.md) — fillable `plan.md`
87
+ - [references/tasks-template.md](references/tasks-template.md) — fillable `tasks.md`
88
+ - [references/phase-gates.md](references/phase-gates.md) — gate checklists, splitting rules, anti-patterns
89
+
90
+ ## Proactive Triggers
91
+
92
+ Surface these without being asked:
93
+
94
+ - **A request touches 3+ modules or changes a public contract** → propose a spec before writing code.
95
+ - **`specs/NNN-*/tasks.md` has unchecked boxes and the user asks for something unrelated** → flag the abandoned spec and ask whether to resume, split, or close it.
96
+ - **A spec line names a library, file, or schema** → move it to `plan.md`; the spec is leaking HOW.
97
+ - **Implementation reveals a requirement the spec never stated** → stop, record it under Discovered during implementation, re-gate. Do not absorb it silently.
98
+ - **Two specs modify the same file in the same period** → flag the collision before either merges.
99
+ - **A decision inside `plan.md` will constrain future work** (framework, protocol, storage) → propose an ADR via the **adr-write** skill; `plan.md` is not a durable home for it.
100
+
101
+ ## Output Artifacts
102
+
103
+ | When you ask for... | You get... |
104
+ |---|---|
105
+ | "Write a spec for X" | `specs/NNN-slug/spec.md` — testable requirements, acceptance criteria, out-of-scope, open clarifications listed |
106
+ | "Plan it" | `specs/NNN-slug/plan.md` — approach, affected modules, contract/data changes, rejected alternatives, risks |
107
+ | "Break it into tasks" | `specs/NNN-slug/tasks.md` — ordered checkable tasks, each naming its files and its verification step |
108
+ | "Where did we leave off?" | Position report: spec id, phase, next unchecked task, blocking clarifications |
109
+ | "Is this spec ready?" | Gate checklist result — PASS, or the specific lines that fail and why |
110
+
111
+ ## Communication
112
+
113
+ Bottom line first: state the phase you finished and the gate you are stopped at. Every finding gets What + Why + How. Tag confidence: 🟢 verified from a file, 🟡 inferred, 🔴 assumed. Never narrate the process — present the artifact.
114
+
115
+ ## Related Skills
116
+
117
+ - **test-first**: Use when executing a task from `tasks.md` — each task's verification step is a failing test. NOT for deciding *what* to build.
118
+ - **adr-write**: Use when a `plan.md` decision constrains future changes. NOT for choices scoped to one spec.
119
+ - **architecture-guard**: Use to check that `plan.md` respects declared boundaries before tasks are written. NOT for style review.
120
+ - **handoff**: Use when a different tool or session must continue the spec. NOT for in-session state.
121
+ - **onboard**: Use before the first spec in an unfamiliar repo. NOT once `AGENTS.md` is accurate.
122
+ - **perf-budget**: Use when a spec's acceptance criteria include latency, bundle size, or vitals. NOT for correctness criteria.
123
+ - **security-review**: Use on the diff after tasks are implemented. NOT during spec authoring.
124
+ - Commands: `/spec` creates gate 1, `/plan` gate 2, `/tasks` gate 3, `/verify` checks the implemented result, `/handoff` writes the resume file.
@@ -0,0 +1,115 @@
1
+ # Phase gates
2
+
3
+ A gate is a stop. You produce one artifact, present it, and wait. Chaining phases in a single pass is how a wrong assumption in the spec becomes a day of wrong code.
4
+
5
+ ## The gate ritual
6
+
7
+ At the end of every phase, output exactly this shape:
8
+
9
+ ```
10
+ GATE <n> — <phase name>
11
+
12
+ Artifact: specs/NNN-slug/<file>
13
+ Summary: <2-3 lines of what it says>
14
+ Open items: <clarifications / assumptions, or "none">
15
+ Next phase will: <one line>
16
+
17
+ Proceed? (yes / revise / cancel)
18
+ ```
19
+
20
+ Then stop. No "I'll go ahead and also...". Revise means loop on the same artifact; it does not advance the phase.
21
+
22
+ ---
23
+
24
+ ## Gate 1 — spec.md approved
25
+
26
+ Blocking checklist. Any NO stops the gate.
27
+
28
+ - [ ] Problem is stated without solution language
29
+ - [ ] Every requirement is atomic — one behavior per line
30
+ - [ ] Every requirement is testable from outside the system
31
+ - [ ] Every requirement has a matching acceptance criterion in Given/When/Then form
32
+ - [ ] Out of scope is non-empty
33
+ - [ ] Zero open `[NEEDS CLARIFICATION]` markers
34
+ - [ ] No file paths, library names, schemas, or signatures anywhere in the file
35
+ - [ ] Non-functional criteria each name a measurement source (or are absent)
36
+ - [ ] The spec would still make sense to someone who joins in six months
37
+
38
+ **Common failure:** the spec names the solution in the title. `Add Redis cache for user lookups` is a plan. `User profile loads without a round-trip to the primary store` is a spec.
39
+
40
+ ---
41
+
42
+ ## Gate 2 — plan.md approved
43
+
44
+ - [ ] Every plan item traces to a requirement id
45
+ - [ ] Affected modules table is complete — nothing gets touched that is not listed
46
+ - [ ] Declared boundaries from `AGENTS.md` (`boundaries[]`) were read and the plan states which it crosses
47
+ - [ ] `protectedPaths[]` are not in the affected list, or explicit approval is recorded
48
+ - [ ] Contract / schema / config changes are stated, or explicitly "none"
49
+ - [ ] At least one rejected alternative, with a reason
50
+ - [ ] Risk table has at least one non-low entry, with a mitigation
51
+ - [ ] Rollback step is concrete
52
+ - [ ] New config values have a typed default in one place — no literals at call sites
53
+ - [ ] ADR candidates are identified
54
+
55
+ **Common failure:** the plan is a restatement of the spec in engineering nouns. If a reviewer cannot disagree with it, it is not a plan.
56
+
57
+ ---
58
+
59
+ ## Gate 3 — tasks.md approved
60
+
61
+ - [ ] Tasks are ordered, and dependencies are stated
62
+ - [ ] Every task names its files
63
+ - [ ] Every task names its verification
64
+ - [ ] Every task traces to a requirement
65
+ - [ ] No task introduces behavior the spec does not require
66
+ - [ ] Contract/schema/config tasks come before their dependents
67
+ - [ ] `AGENTS.md` update task exists (even if the answer is "no change")
68
+ - [ ] Close-out tasks exist for `.agent/` files
69
+ - [ ] Task count is under ~15, or the spec is split
70
+
71
+ **Common failure:** tasks that read `Implement the plan`. If a task's Do line is longer than three lines, it is two tasks.
72
+
73
+ ---
74
+
75
+ ## Gate 4 — implementation complete
76
+
77
+ - [ ] Every box in `tasks.md` is checked, and each was checked because its Verify passed
78
+ - [ ] Full verification green using the declared `commands.*`
79
+ - [ ] No boundary violations introduced
80
+ - [ ] No declared budget regressed
81
+ - [ ] Diff reviewed for security findings if it touches input handling, auth, or dependencies
82
+ - [ ] Discovered-during-implementation entries were each re-gated, not absorbed
83
+ - [ ] `.agent/` files reconciled; stale `HANDOFF.md` deleted
84
+
85
+ ---
86
+
87
+ ## Passing a gate without a human
88
+
89
+ Only when the user has explicitly said "run the whole loop" or equivalent. Even then:
90
+
91
+ - Still emit each gate block, so the trail exists.
92
+ - Still hard-stop on any open `[NEEDS CLARIFICATION]`.
93
+ - Still hard-stop on a `protectedPaths[]` collision.
94
+ - Still hard-stop on a boundary violation.
95
+
96
+ Autonomy speeds up phases; it never removes those four stops.
97
+
98
+ ## Backward movement
99
+
100
+ Going back a phase is normal and cheap. Going forward with a known gap is expensive.
101
+
102
+ | Discovery | Go back to |
103
+ |---|---|
104
+ | A requirement is wrong or missing | Gate 1 — amend spec, re-approve |
105
+ | The approach cannot satisfy a requirement | Gate 2 — new alternative, note the rejected one |
106
+ | A task is impossible as written | Gate 3 — strike and replace the task with a reason |
107
+ | A boundary must move to make this work | Stop. That is an ADR (adr-write), not a task. |
108
+
109
+ ## Anti-patterns
110
+
111
+ - **Gate theater** — printing the block and immediately continuing. The stop is the feature.
112
+ - **Spec drift** — editing `spec.md` mid-implementation so the code matches. Use Discovered during implementation instead.
113
+ - **Plan-as-tasks** — a `plan.md` full of checkboxes. Then gate 3 has nothing to review.
114
+ - **Number reuse** — recycling `NNN` from an abandoned spec. Links and logs then point at the wrong work.
115
+ - **The 40-task spec** — a spec that never ships. Split at the first shippable outcome.
@@ -0,0 +1,98 @@
1
+ # plan.md template
2
+
3
+ Copy into `specs/NNN-slug/plan.md`. This is the HOW. It exists so a reviewer can reject the approach before anyone spends a day on it.
4
+
5
+ **Rule:** every section here must trace back to a requirement in `spec.md`. If an item traces to nothing, it is scope creep — remove it or amend the spec through its gate.
6
+
7
+ ---
8
+
9
+ ```markdown
10
+ # NNN — Plan
11
+
12
+ - **Spec:** `./spec.md`
13
+ - **Status:** draft | approved
14
+ - **Approach chosen:** <one sentence>
15
+
16
+ ## Constraints read from AGENTS.md
17
+
18
+ Restate nothing; cite what applies and why it shapes the approach.
19
+
20
+ | Source | Value that constrains this plan |
21
+ |---|---|
22
+ | `conventions[]` | <the entries that matter here> |
23
+ | `boundaries[]` | <the declared boundaries this change crosses or must not cross> |
24
+ | `protectedPaths[]` | <paths this change must not touch> |
25
+ | `commands.*` | <the build/test/lint commands tasks will run — by name, not literal> |
26
+
27
+ ## Approach
28
+
29
+ <3-8 sentences. The shape of the solution: what gets added, what gets changed,
30
+ what gets deleted. A reader should be able to picture the resulting code.>
31
+
32
+ ## Affected modules
33
+
34
+ | Module / area | Change | Requirement | Risk |
35
+ |---|---|---|---|
36
+ | <module> | add / modify / delete | R1 | low / med / high |
37
+
38
+ Anything not listed here should not appear in a task.
39
+
40
+ ## Contract and data changes
41
+
42
+ Fill in or write "none".
43
+
44
+ - **Public API / interface changes:** <signature-level description, and whether it is breaking>
45
+ - **Schema / storage changes:** <shape change, and whether a migration is needed>
46
+ - **Config surface:** <new settings, their typed defaults, and where the single default lives>
47
+ - **Events / messages:** <new or changed payloads, and consumers affected>
48
+
49
+ Backward compatibility: <how existing callers/rows/messages keep working, or why a break is acceptable and who signs off>
50
+
51
+ ## Alternatives rejected
52
+
53
+ The most useful section in this file. One line each on what and why not.
54
+
55
+ | Alternative | Why rejected |
56
+ |---|---|
57
+ | <the obvious option> | <the specific reason — cost, boundary violation, ops burden> |
58
+ | <do nothing> | <what happens if we ship nothing> |
59
+
60
+ ## Risks and mitigations
61
+
62
+ | Risk | Likelihood | Blast radius | Mitigation |
63
+ |---|---|---|---|
64
+ | <what could go wrong> | low/med/high | <what breaks if it does> | <the guard: flag, migration order, rollback> |
65
+
66
+ ## Verification strategy
67
+
68
+ How we will know it works, beyond "tests pass".
69
+
70
+ - **Behavior under test:** <the behaviors that get tests, per test-first>
71
+ - **Manual / exploratory check:** <what a human must eyeball, if anything>
72
+ - **Budgets touched:** <declared budget names this change must not regress>
73
+ - **Rollback:** <the concrete step to undo this in production>
74
+
75
+ ## Decisions that outlive this spec
76
+
77
+ Anything here is an ADR candidate — a choice that constrains future changes.
78
+
79
+ - <decision> → <ADR needed? yes/no, and why>
80
+
81
+ ## Sequencing notes for tasks.md
82
+
83
+ Ordering constraints only — not the task list itself.
84
+
85
+ - <X must land before Y because ...>
86
+ - <Z is independently shippable and can be parallelized>
87
+ ```
88
+
89
+ ---
90
+
91
+ ## Plan review heuristics
92
+
93
+ - **No alternatives rejected** → the approach was not chosen, it was defaulted into.
94
+ - **No contract changes and no schema changes and the spec has three requirements** → the plan is probably underspecified.
95
+ - **A module appears in the plan that no requirement needs** → scope creep.
96
+ - **"We'll figure it out during implementation"** → that is an open question; send it back to the spec gate.
97
+ - **Risk table with all "low"** → nobody looked. There is always one medium.
98
+ - **Migration mentioned with no ordering note** → sequencing bug waiting to happen.
@@ -0,0 +1,101 @@
1
+ # spec.md template
2
+
3
+ Copy into `specs/NNN-slug/spec.md`. Replace every `<...>`. Delete a section only if you can say why it does not apply — do not leave it empty.
4
+
5
+ **Rule: WHAT and WHY only.** No file paths, library names, table names, or function signatures. If you catch yourself writing one, it belongs in `plan.md`.
6
+
7
+ ---
8
+
9
+ ```markdown
10
+ # NNN — <Outcome in 2-6 words>
11
+
12
+ - **Status:** draft | approved | implementing | shipped
13
+ - **Created:** <YYYY-MM-DD>
14
+ - **Owner:** <who approves this>
15
+
16
+ ## Problem
17
+
18
+ <2-4 sentences. What is broken or missing today, and for whom. Written so someone
19
+ outside the team understands it. No solution language.>
20
+
21
+ ## Why now
22
+
23
+ <What forces the change: a user complaint, a compliance date, a cost, a blocked
24
+ roadmap item. If the honest answer is "it would be nice", say so — that is a valid
25
+ answer that changes the priority.>
26
+
27
+ ## Users and scenarios
28
+
29
+ | Actor | Scenario | Today | After this change |
30
+ |---|---|---|---|
31
+ | <role> | <what they are trying to do> | <what happens now> | <what happens then> |
32
+
33
+ ## Requirements
34
+
35
+ Each line is atomic, testable, and observable from outside the system.
36
+
37
+ - **R1** — <The system MUST ...>
38
+ - **R2** — <The system MUST ...>
39
+ - **R3** — <When <condition>, the system MUST <observable behavior>>
40
+
41
+ ## Acceptance criteria
42
+
43
+ One per requirement, phrased so a test can be written from it without further questions.
44
+
45
+ - **AC1 (R1)** — Given <state>, when <action>, then <observable result>.
46
+ - **AC2 (R2)** — Given <state>, when <action>, then <observable result>.
47
+ - **AC3 (R3)** — Given <error condition>, when <action>, then <observable failure mode>.
48
+
49
+ ## Non-functional criteria
50
+
51
+ Only ones this change is accountable for. Each must name its measurement source, or drop it.
52
+
53
+ | Criterion | Target | Measured by |
54
+ |---|---|---|
55
+ | <latency / bundle size / vitals> | <declared budget name, not a literal number> | <where the number comes from> |
56
+
57
+ ## Out of scope
58
+
59
+ Explicitly NOT part of this spec. An empty list means the boundary was never considered.
60
+
61
+ - <thing a reader would reasonably assume is included, but is not>
62
+ - <adjacent improvement deliberately deferred>
63
+
64
+ ## Open questions
65
+
66
+ Blocking. This spec cannot pass its gate while any remain.
67
+
68
+ - **[NEEDS CLARIFICATION: <question>]** — blocks <R#>. Default if unanswered: <fallback>.
69
+
70
+ ## Discovered during implementation
71
+
72
+ Append-only. Anything found after approval that changes scope. Each entry re-opens the gate.
73
+
74
+ - <YYYY-MM-DD> — <what was discovered> → <re-approved | deferred to spec NNN | dropped>
75
+
76
+ ## Links
77
+
78
+ - Plan: `./plan.md`
79
+ - Tasks: `./tasks.md`
80
+ - ADRs: <docs/adr/NNNN-... if a decision here earned one>
81
+ ```
82
+
83
+ ---
84
+
85
+ ## Requirement phrasing
86
+
87
+ | Bad | Why | Better |
88
+ |---|---|---|
89
+ | The API should be fast | untestable | Responds within the declared p95 latency budget for read endpoints |
90
+ | Handle errors gracefully | unobservable | On upstream timeout, returns a typed error and the request is not retried more than the declared retry limit |
91
+ | Refactor the payment module | HOW, not WHAT | Payment failures are retried without double-charging the customer |
92
+ | Users can manage their settings | not atomic | Split: users can view settings; users can change notification preference; changes take effect without re-login |
93
+
94
+ ## Sizing check
95
+
96
+ Split the spec if any of these are true:
97
+
98
+ - Two requirements have unrelated "so that" clauses.
99
+ - Removing one requirement would still leave a shippable outcome.
100
+ - The task list would exceed ~15 items.
101
+ - Two different reviewers own different requirements.
@@ -0,0 +1,96 @@
1
+ # tasks.md template
2
+
3
+ Copy into `specs/NNN-slug/tasks.md`. This is the execution list. A different agent, with no memory of the conversation, must be able to pick up the first unchecked box and make progress.
4
+
5
+ **Rules**
6
+ - Every task names the **files** it touches.
7
+ - Every task names its **verification** — how you know it is done.
8
+ - Every task traces to a requirement (`R#`) from `spec.md`.
9
+ - Tasks are ordered. If two are independent, mark them `[parallel]`.
10
+ - No task introduces a requirement. New requirements go back through the spec gate.
11
+ - A task should be completable without re-reading the whole plan. If it can't, split it.
12
+
13
+ ---
14
+
15
+ ```markdown
16
+ # NNN — Tasks
17
+
18
+ - **Spec:** `./spec.md` · **Plan:** `./plan.md`
19
+ - **Progress:** 0 / <N>
20
+
21
+ ## Preconditions
22
+
23
+ - [ ] `plan.md` approved at gate 2
24
+ - [ ] Working tree clean, or uncommitted work recorded in `.agent/HANDOFF.md`
25
+ - [ ] Baseline verification green using the `commands.*` entries declared in AGENTS.md
26
+
27
+ ## Tasks
28
+
29
+ - [ ] **T1 — <imperative, one outcome>** (R1)
30
+ - Files: `<path/to/file>`, `<path/to/other>`
31
+ - Do: <the change, one or two lines>
32
+ - Verify: <failing test name that must go green, or the command class to run>
33
+
34
+ - [ ] **T2 — <...>** (R1)
35
+ - Files: `<path>`
36
+ - Do: <...>
37
+ - Verify: <...>
38
+ - Depends on: T1
39
+
40
+ - [ ] **T3 — <...>** (R2) `[parallel with T2]`
41
+ - Files: `<path>`
42
+ - Do: <...>
43
+ - Verify: <...>
44
+
45
+ - [ ] **T4 — Wire config** (R3)
46
+ - Files: `<config module>`, `<call site>`
47
+ - Do: add the setting with its typed default in the single config location; call site reads it
48
+ - Verify: no literal value remains at the call site; default resolves when the env var is absent
49
+
50
+ - [ ] **T5 — Update AGENTS.md**
51
+ - Files: `AGENTS.md`
52
+ - Do: record the new convention / boundary / command if this change introduced one; otherwise check and note "no change"
53
+ - Verify: AGENTS.md describes the repo as it now is
54
+
55
+ ## Verification gate
56
+
57
+ - [ ] All boxes above checked
58
+ - [ ] Full verification suite green via the declared `commands.*`
59
+ - [ ] No declared boundary crossed (architecture-guard)
60
+ - [ ] No budget regressed (perf-budget), if the spec declared one
61
+ - [ ] Diff reviewed for security findings (security-review), if the change touches input, auth, or dependencies
62
+
63
+ ## Close-out
64
+
65
+ - [ ] `spec.md` status → shipped
66
+ - [ ] `.agent/DONE.md` appended with the outcome
67
+ - [ ] `.agent/DECISIONS.md` appended, if a decision here outlives the spec
68
+ - [ ] `.agent/ACTIVE.md` cleared
69
+ - [ ] `.agent/HANDOFF.md` deleted if the work is complete — a stale handoff is worse than none
70
+ ```
71
+
72
+ ---
73
+
74
+ ## Task granularity
75
+
76
+ | Too big | Right size | Too small |
77
+ |---|---|---|
78
+ | Implement retry logic | Add retry wrapper around the upstream call, capped at the declared retry limit | Import the retry module |
79
+ | Fix the auth flow | Reject expired tokens at the middleware boundary and return the typed 401 | Rename a variable |
80
+
81
+ Rule of thumb: one task = one coherent commit = one failing test going green.
82
+
83
+ ## Ordering rules
84
+
85
+ 1. Contract and schema changes before the code that depends on them.
86
+ 2. Config plumbing before the first call site that reads it.
87
+ 3. Anything with a migration before anything that reads the migrated shape.
88
+ 4. Tests before implementation *within* a task, not as separate tasks — see the **test-first** skill.
89
+ 5. Docs (`AGENTS.md`, ADR) last, so they describe what actually landed.
90
+
91
+ ## Progress discipline
92
+
93
+ - Check a box only when its **Verify** line passes — not when the code is written.
94
+ - If a task turns out to be wrong, do not silently rewrite it. Strike it, add the replacement, and note why:
95
+ `- [x] ~~T3 — old approach~~ → replaced by T3a; upstream API does not expose the field.`
96
+ - Update the `Progress:` counter and `.agent/ACTIVE.md` as you go, so an interrupted session resumes from disk.
@@ -0,0 +1,7 @@
1
+ id: spec-driven
2
+ kind: skill
3
+ name: Spec-Driven Development
4
+ description: Drive a change through spec → plan → tasks → implement over specs/NNN-slug/, with a review gate between each phase.
5
+ tags: [workflow, specs, planning, tasks]
6
+ targets: [claude-code, cursor, github-copilot, windsurf, cline, codex, gemini-cli, agents-md]
7
+ requiresCapability: [instructions]
@@ -0,0 +1,125 @@
1
+ ---
2
+ name: test-first
3
+ description: "Drive a change through the TDD red → green → refactor loop. Use when the user says TDD, test first, write a failing test, write tests for this, improve coverage, is this tested — or when implementing a task from tasks.md. Targets behavior coverage and mutation resistance, not a coverage number. NOT for reviewing an existing diff."
4
+ metadata:
5
+ version: 1.0.0
6
+ category: testing
7
+ updated: 2026-07-18
8
+ ---
9
+
10
+ # Test-First Development
11
+
12
+ You are an expert at using tests as a design tool, not a compliance exercise. Your goal is code whose behavior is pinned by tests that would actually fail if the behavior broke.
13
+
14
+ ## Before Starting
15
+
16
+ Read `AGENTS.md` for the declared test command (`commands.test`) and any testing conventions. Then look at 2-3 existing tests in the area you are changing — the repo's real conventions live there, not in its docs. Match the existing naming, structure, and fixture style unless it is actively bad, and say so if it is.
17
+
18
+ If a spec is in flight, the acceptance criteria in `specs/NNN-slug/spec.md` are your test list. Each `AC` should become at least one test.
19
+
20
+ ## How This Skill Works
21
+
22
+ **Mode 1 — Drive new behavior.** The loop below, one behavior at a time.
23
+
24
+ **Mode 2 — Characterize existing code.** No tests, and the code must change. Write tests that pin *current* behavior first — including behavior that looks wrong. Then change with a safety net. Do not "fix" anything while characterizing.
25
+
26
+ **Mode 3 — Strengthen a weak suite.** Tests exist and pass, but you do not trust them. Probe with mutations (below) and rewrite the tests that survive.
27
+
28
+ ## The loop
29
+
30
+ **RED — write the failing test.**
31
+
32
+ - One behavior. Name it after the behavior, not the method: `rejects_expired_token`, not `test_validate`.
33
+ - **Run it and watch it fail.** A test never observed failing is not known to test anything.
34
+ - Check the failure message. If it does not tell you what went wrong, fix the assertion now — you will read it under pressure later.
35
+ - Assert on observable outcomes: return values, raised errors, persisted state, emitted messages. Not on internal call sequences.
36
+
37
+ **GREEN — the minimum that passes.**
38
+
39
+ - Write the least code that makes it pass. Yes, that sometimes means a hardcoded return — the next test removes it.
40
+ - Do not add error handling, logging, or generality the current tests do not demand. Untested speculative code is where bugs hide.
41
+ - Run the full declared test command, not just the new test. Green means everything green.
42
+
43
+ **REFACTOR — under green.**
44
+
45
+ - Now improve names, structure, and duplication. Tests must stay green the whole time.
46
+ - Refactor the tests too — duplicated setup, unclear names, oversized fixtures.
47
+ - **Never change behavior here.** If you need to, that is a new RED.
48
+
49
+ Then repeat. Small loops. If a loop is taking long, the step was too big — revert to green and take a smaller bite.
50
+
51
+ ## Coverage is a trap
52
+
53
+ **Do not target a coverage percentage.** A hard threshold is a Goodhart's-Law failure: the moment the number becomes the goal, it stops measuring quality. 100% line coverage is trivially achievable with tests that contain no assertions at all — they execute every line and verify nothing. Teams under a threshold reliably produce exactly those tests, and the number reports a well-tested system that would not notice if the logic were deleted.
54
+
55
+ Target these instead:
56
+
57
+ | Target | Question it answers |
58
+ |---|---|
59
+ | **Behavior coverage** | Does every acceptance criterion have a test that fails when it breaks? |
60
+ | **Mutation resistance** | If I change a `>` to `>=`, delete a line, or invert a condition — does a test fail? |
61
+ | **Failure-mode coverage** | Are the error paths tested, not just the happy path? |
62
+ | **Boundary coverage** | Empty, one, many, max, null, malformed, concurrent? |
63
+
64
+ Use coverage as a **detector, not a target**: uncovered lines are worth a look, high coverage proves nothing. If the repo declares a coverage gate, treat it as a floor to satisfy and never as evidence of quality. Full argument and the mutation-probe technique in [references/test-design.md](references/test-design.md).
65
+
66
+ ## When the test is hard to write
67
+
68
+ This is the most valuable signal TDD gives you. **It is a design problem, not a testing problem.** Do not reach for heavier mocking — fix the design.
69
+
70
+ | Symptom | Design smell | Fix |
71
+ |---|---|---|
72
+ | Setup needs 10 lines before you can assert | too many collaborators | split responsibilities |
73
+ | You must mock a static, a clock, or a global | hidden dependency | inject it |
74
+ | The test needs real network, disk, or time | no seam at the boundary | put the side effect behind a port |
75
+ | Asserting requires reaching into internals | wrong public surface, or the logic is in the wrong place | move the behavior or widen the surface deliberately |
76
+ | The test needs the whole app booted | logic tangled with the framework | extract the decision from the plumbing |
77
+ | You cannot name the test without "and" | the unit does two things | split it |
78
+
79
+ If the fix crosses an architectural boundary, stop and route to **architecture-guard** — a hard-to-test seam is frequently a misplaced boundary.
80
+
81
+ ## What to test, and at which level
82
+
83
+ - **Test behavior, not implementation.** A test that breaks on every refactor is a liability. If the observable outcome is unchanged, the test should stay green.
84
+ - **One reason to fail per test.** Multiple unrelated assertions make failures ambiguous.
85
+ - **Prefer the lowest level that can express the behavior**, but do not push an integration concern into a unit test with five mocks — that tests the mocks.
86
+ - **Do not test the framework, the language, or third-party libraries.** Test *your* use of them at the boundary.
87
+ - **Test the error paths.** Most production incidents live on paths nobody wrote a test for.
88
+ - **Don't-test list:** generated code, pure configuration, trivial accessors, and anything whose test would be a restatement of the implementation.
89
+
90
+ Anti-patterns catalog — assertion-free tests, mock theater, snapshot rot, flaky-test tolerance and the rest — in [references/anti-patterns.md](references/anti-patterns.md).
91
+
92
+ ## Proactive Triggers
93
+
94
+ - **A test was never observed failing** → flag it; it may pass for the wrong reason.
95
+ - **A test has no assertion, or asserts only "did not throw"** → flag it; it inflates coverage and verifies nothing.
96
+ - **Setup is longer than the assertion by 3× or more** → flag the design smell before writing more tests around it.
97
+ - **A bug is being fixed with no reproducing test** → stop; write the failing test first, or the bug returns with nothing to catch it.
98
+ - **A test asserts on mock call order rather than an outcome** → flag it; it will break on the next refactor and catch nothing.
99
+ - **The team is chasing a coverage number** → say plainly what the number does and does not measure, and propose mutation probing instead.
100
+ - **A test is skipped, quarantined, or retried on failure** → flag it; a tolerated flaky test trains everyone to ignore red.
101
+
102
+ ## Output Artifacts
103
+
104
+ | When you ask for... | You get... |
105
+ |---|---|
106
+ | "Implement X test-first" | Failing test → minimal implementation → refactor, with the red observed at each step |
107
+ | "Write tests for this code" | Behavior-pinned tests grouped by outcome, including error paths and boundaries |
108
+ | "Is this well tested?" | Mutation-probe report — which mutations survive, which behaviors are unpinned |
109
+ | "This is hard to test" | The design smell named, plus the specific refactor that removes it |
110
+ | "Fix this bug" | Reproducing failing test first, then the fix, then the refactor |
111
+
112
+ ## Communication
113
+
114
+ Bottom line first: what behavior is now pinned, and what is still unpinned. Tag confidence: 🟢 test observed failing then passing, 🟡 test passes but was never seen red, 🔴 behavior asserted without a test. Never report coverage as a quality claim — report which behaviors are pinned.
115
+
116
+ ## Related Skills
117
+
118
+ - **spec-driven**: Use for the behaviors worth testing — each acceptance criterion becomes a test. NOT for how to write them.
119
+ - **architecture-guard**: Use when a hard-to-test seam turns out to be a boundary problem. NOT for test quality itself.
120
+ - **security-review**: Use for threat-driven cases — malformed input, authz bypass, injection payloads — which belong in the suite as tests.
121
+ - **perf-budget**: Use for performance assertions; those are budget checks against a measurement source, not unit tests.
122
+ - **onboard**: Use to discover where tests live and how they run in an unfamiliar repo. NOT once conventions are known.
123
+ - **handoff**: Use when pausing mid-loop — a named failing test is the clearest possible "next action".
124
+ - **adr-write**: Use when a testing strategy decision constrains future work (e.g. no mocks at the boundary, contract tests between modules).
125
+ - Commands: `/verify` runs the declared suite, `/tasks` produces the task whose verification step is the failing test, `/review` checks the resulting diff, `/handoff` records the current red test.