create-flowdular 0.2.4 → 0.2.5

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 (269) hide show
  1. package/README.md +11 -0
  2. package/agent-template/.agents/skills/agent-tool-design/SKILL.md +203 -0
  3. package/agent-template/.agents/skills/auth-security-review/SKILL.md +90 -0
  4. package/agent-template/.agents/skills/auto-review/SKILL.md +103 -0
  5. package/agent-template/.agents/skills/bug-hunt/SKILL.md +104 -0
  6. package/agent-template/.agents/skills/business-agent-design/SKILL.md +182 -0
  7. package/agent-template/.agents/skills/cli-extension/SKILL.md +108 -0
  8. package/agent-template/.agents/skills/core-extend/SKILL.md +99 -0
  9. package/agent-template/.agents/skills/database-adapter/SKILL.md +198 -0
  10. package/agent-template/.agents/skills/database-adapter/references/first-run-and-matrix.md +105 -0
  11. package/agent-template/.agents/skills/migration-authoring/SKILL.md +161 -0
  12. package/agent-template/.agents/skills/module-new/SKILL.md +171 -0
  13. package/agent-template/.agents/skills/module-update/SKILL.md +91 -0
  14. package/agent-template/.agents/skills/perf-audit/SKILL.md +98 -0
  15. package/agent-template/.agents/skills/release-eject-pr/SKILL.md +107 -0
  16. package/agent-template/.agents/skills/spec-approval/SKILL.md +106 -0
  17. package/agent-template/.agents/skills/test-hardening/SKILL.md +79 -0
  18. package/agent-template/.agents/skills/translations-i18n/SKILL.md +78 -0
  19. package/agent-template/.agents/skills/ux-design/SKILL.md +92 -0
  20. package/agent-template/.agents/skills/variables/SKILL.md +156 -0
  21. package/agent-template/.agents/skills/workflow-development/SKILL.md +192 -0
  22. package/agent-template/.ai/README.md +62 -0
  23. package/agent-template/.ai/agents/README.md +27 -0
  24. package/agent-template/.ai/agents/module-executor.md +36 -0
  25. package/agent-template/.ai/agents/reviewer.md +23 -0
  26. package/agent-template/.ai/agents/sandbox/agentic-engineer.md +31 -0
  27. package/agent-template/.ai/agents/sandbox/backend-engineer.md +36 -0
  28. package/agent-template/.ai/agents/sandbox/business-manager.md +23 -0
  29. package/agent-template/.ai/agents/sandbox/frontend-engineer.md +27 -0
  30. package/agent-template/.ai/agents/sandbox/ux-designer.md +23 -0
  31. package/agent-template/.ai/agents/spec-author.md +29 -0
  32. package/agent-template/.ai/blueprints/add-migration/README.md +5 -0
  33. package/agent-template/.ai/blueprints/add-migration/allowed-paths.yaml +23 -0
  34. package/agent-template/.ai/blueprints/add-migration/blueprint.json +14 -0
  35. package/agent-template/.ai/blueprints/add-migration/examples/invalid/input-destructive.json +6 -0
  36. package/agent-template/.ai/blueprints/add-migration/examples/invalid/plan-unnumbered-file.json +9 -0
  37. package/agent-template/.ai/blueprints/add-migration/examples/valid/input.json +6 -0
  38. package/agent-template/.ai/blueprints/add-migration/examples/valid/plan.json +9 -0
  39. package/agent-template/.ai/blueprints/add-migration/gates.yaml +30 -0
  40. package/agent-template/.ai/blueprints/add-migration/input.schema.json +23 -0
  41. package/agent-template/.ai/blueprints/add-migration/plan.schema.json +54 -0
  42. package/agent-template/.ai/blueprints/add-migration/required-files.yaml +18 -0
  43. package/agent-template/.ai/blueprints/add-migration/spec-requirements.yaml +13 -0
  44. package/agent-template/.ai/blueprints/add-migration/steps.yaml +62 -0
  45. package/agent-template/.ai/blueprints/author-spec/README.md +5 -0
  46. package/agent-template/.ai/blueprints/author-spec/allowed-paths.yaml +7 -0
  47. package/agent-template/.ai/blueprints/author-spec/blueprint.json +14 -0
  48. package/agent-template/.ai/blueprints/author-spec/examples/invalid/input-missing-outcome.json +5 -0
  49. package/agent-template/.ai/blueprints/author-spec/examples/valid/input.json +6 -0
  50. package/agent-template/.ai/blueprints/author-spec/gates.yaml +13 -0
  51. package/agent-template/.ai/blueprints/author-spec/input.schema.json +20 -0
  52. package/agent-template/.ai/blueprints/author-spec/plan.schema.json +14 -0
  53. package/agent-template/.ai/blueprints/author-spec/required-files.yaml +6 -0
  54. package/agent-template/.ai/blueprints/author-spec/spec-requirements.yaml +35 -0
  55. package/agent-template/.ai/blueprints/author-spec/steps.yaml +28 -0
  56. package/agent-template/.ai/blueprints/author-spec/templates/module.yaml +45 -0
  57. package/agent-template/.ai/blueprints/bug-fix/README.md +5 -0
  58. package/agent-template/.ai/blueprints/bug-fix/allowed-paths.yaml +29 -0
  59. package/agent-template/.ai/blueprints/bug-fix/blueprint.json +14 -0
  60. package/agent-template/.ai/blueprints/bug-fix/examples/invalid/input-no-symptom.json +4 -0
  61. package/agent-template/.ai/blueprints/bug-fix/examples/invalid/plan-no-test.json +8 -0
  62. package/agent-template/.ai/blueprints/bug-fix/examples/valid/input.json +6 -0
  63. package/agent-template/.ai/blueprints/bug-fix/examples/valid/plan.json +8 -0
  64. package/agent-template/.ai/blueprints/bug-fix/gates.yaml +30 -0
  65. package/agent-template/.ai/blueprints/bug-fix/input.schema.json +25 -0
  66. package/agent-template/.ai/blueprints/bug-fix/plan.schema.json +53 -0
  67. package/agent-template/.ai/blueprints/bug-fix/required-files.yaml +7 -0
  68. package/agent-template/.ai/blueprints/bug-fix/spec-requirements.yaml +7 -0
  69. package/agent-template/.ai/blueprints/bug-fix/steps.yaml +51 -0
  70. package/agent-template/.ai/blueprints/core-extend/README.md +5 -0
  71. package/agent-template/.ai/blueprints/core-extend/allowed-paths.yaml +49 -0
  72. package/agent-template/.ai/blueprints/core-extend/blueprint.json +14 -0
  73. package/agent-template/.ai/blueprints/core-extend/examples/invalid/input-unknown-package.json +5 -0
  74. package/agent-template/.ai/blueprints/core-extend/examples/invalid/plan-missing-gates.json +7 -0
  75. package/agent-template/.ai/blueprints/core-extend/examples/valid/input.json +6 -0
  76. package/agent-template/.ai/blueprints/core-extend/examples/valid/plan.json +10 -0
  77. package/agent-template/.ai/blueprints/core-extend/gates.yaml +16 -0
  78. package/agent-template/.ai/blueprints/core-extend/input.schema.json +54 -0
  79. package/agent-template/.ai/blueprints/core-extend/plan.schema.json +39 -0
  80. package/agent-template/.ai/blueprints/core-extend/required-files.yaml +36 -0
  81. package/agent-template/.ai/blueprints/core-extend/spec-requirements.yaml +17 -0
  82. package/agent-template/.ai/blueprints/core-extend/steps.yaml +54 -0
  83. package/agent-template/.ai/blueprints/edit-module/README.md +9 -0
  84. package/agent-template/.ai/blueprints/edit-module/allowed-paths.yaml +27 -0
  85. package/agent-template/.ai/blueprints/edit-module/blueprint.json +20 -0
  86. package/agent-template/.ai/blueprints/edit-module/examples/invalid/input-unknown-change.json +5 -0
  87. package/agent-template/.ai/blueprints/edit-module/examples/invalid/plan-touches-platform.json +15 -0
  88. package/agent-template/.ai/blueprints/edit-module/examples/valid/input.json +5 -0
  89. package/agent-template/.ai/blueprints/edit-module/examples/valid/plan.json +25 -0
  90. package/agent-template/.ai/blueprints/edit-module/gates.yaml +30 -0
  91. package/agent-template/.ai/blueprints/edit-module/input.schema.json +31 -0
  92. package/agent-template/.ai/blueprints/edit-module/plan.schema.json +65 -0
  93. package/agent-template/.ai/blueprints/edit-module/required-files.yaml +80 -0
  94. package/agent-template/.ai/blueprints/edit-module/spec-requirements.yaml +15 -0
  95. package/agent-template/.ai/blueprints/edit-module/steps.yaml +115 -0
  96. package/agent-template/.ai/blueprints/new-module/README.md +7 -0
  97. package/agent-template/.ai/blueprints/new-module/allowed-paths.yaml +27 -0
  98. package/agent-template/.ai/blueprints/new-module/blueprint.json +20 -0
  99. package/agent-template/.ai/blueprints/new-module/examples/invalid/input-spec-outside-modules.json +4 -0
  100. package/agent-template/.ai/blueprints/new-module/examples/invalid/plan-unknown-gate.json +8 -0
  101. package/agent-template/.ai/blueprints/new-module/examples/valid/input.json +5 -0
  102. package/agent-template/.ai/blueprints/new-module/examples/valid/plan.json +22 -0
  103. package/agent-template/.ai/blueprints/new-module/gates.yaml +30 -0
  104. package/agent-template/.ai/blueprints/new-module/input.schema.json +21 -0
  105. package/agent-template/.ai/blueprints/new-module/plan.schema.json +58 -0
  106. package/agent-template/.ai/blueprints/new-module/required-files.yaml +73 -0
  107. package/agent-template/.ai/blueprints/new-module/spec-requirements.yaml +30 -0
  108. package/agent-template/.ai/blueprints/new-module/steps.yaml +138 -0
  109. package/agent-template/.ai/blueprints/release/README.md +5 -0
  110. package/agent-template/.ai/blueprints/release/allowed-paths.yaml +19 -0
  111. package/agent-template/.ai/blueprints/release/blueprint.json +14 -0
  112. package/agent-template/.ai/blueprints/release/examples/invalid/input-bad-version.json +4 -0
  113. package/agent-template/.ai/blueprints/release/examples/invalid/plan-bad-branch.json +7 -0
  114. package/agent-template/.ai/blueprints/release/examples/valid/input.json +5 -0
  115. package/agent-template/.ai/blueprints/release/examples/valid/plan.json +20 -0
  116. package/agent-template/.ai/blueprints/release/gates.yaml +20 -0
  117. package/agent-template/.ai/blueprints/release/input.schema.json +24 -0
  118. package/agent-template/.ai/blueprints/release/plan.schema.json +46 -0
  119. package/agent-template/.ai/blueprints/release/required-files.yaml +19 -0
  120. package/agent-template/.ai/blueprints/release/spec-requirements.yaml +8 -0
  121. package/agent-template/.ai/blueprints/release/steps.yaml +47 -0
  122. package/agent-template/.ai/blueprints/security-review/README.md +5 -0
  123. package/agent-template/.ai/blueprints/security-review/allowed-paths.yaml +6 -0
  124. package/agent-template/.ai/blueprints/security-review/blueprint.json +14 -0
  125. package/agent-template/.ai/blueprints/security-review/examples/invalid/input-unknown-kind.json +4 -0
  126. package/agent-template/.ai/blueprints/security-review/examples/invalid/plan-finding-without-scenario.json +14 -0
  127. package/agent-template/.ai/blueprints/security-review/examples/valid/input.json +4 -0
  128. package/agent-template/.ai/blueprints/security-review/examples/valid/plan.json +19 -0
  129. package/agent-template/.ai/blueprints/security-review/gates.yaml +22 -0
  130. package/agent-template/.ai/blueprints/security-review/input.schema.json +20 -0
  131. package/agent-template/.ai/blueprints/security-review/plan.schema.json +65 -0
  132. package/agent-template/.ai/blueprints/security-review/required-files.yaml +6 -0
  133. package/agent-template/.ai/blueprints/security-review/spec-requirements.yaml +9 -0
  134. package/agent-template/.ai/blueprints/security-review/steps.yaml +38 -0
  135. package/agent-template/.ai/examples/README.md +8 -0
  136. package/agent-template/.ai/examples/bad/client-imports-server/README.md +20 -0
  137. package/agent-template/.ai/examples/bad/client-imports-server/api.ts +12 -0
  138. package/agent-template/.ai/examples/bad/missing-acl/README.md +23 -0
  139. package/agent-template/.ai/examples/bad/missing-acl/endpoints.ts +12 -0
  140. package/agent-template/.ai/examples/bad/tenant-from-body/README.md +19 -0
  141. package/agent-template/.ai/examples/bad/tenant-from-body/endpoints.ts +33 -0
  142. package/agent-template/.ai/examples/client-contribution/CustomerListView.tsrx +34 -0
  143. package/agent-template/.ai/examples/client-contribution/README.md +11 -0
  144. package/agent-template/.ai/examples/client-contribution/contribution.tsrx +48 -0
  145. package/agent-template/.ai/examples/client-contribution/index.ts +20 -0
  146. package/agent-template/.ai/examples/client-contribution/permissions.ts +8 -0
  147. package/agent-template/.ai/examples/customer-cli-extension/README.md +14 -0
  148. package/agent-template/.ai/examples/customer-cli-extension/commands.json +17 -0
  149. package/agent-template/.ai/examples/customer-cli-extension/index.ts +36 -0
  150. package/agent-template/.ai/examples/module-create/task-packet.json +11 -0
  151. package/agent-template/.ai/guides/application-development.md +97 -0
  152. package/agent-template/.ai/policies/capabilities.yaml +164 -0
  153. package/agent-template/.ai/policies/model-routing.yaml +72 -0
  154. package/agent-template/.ai/policies/path-ownership.yaml +65 -0
  155. package/agent-template/.ai/policies/task-budgets.yaml +37 -0
  156. package/agent-template/.ai/references/catalog/LICENSE +21 -0
  157. package/agent-template/.ai/references/catalog/migrations/0001_catalog_core.down.sql +2 -0
  158. package/agent-template/.ai/references/catalog/migrations/0001_catalog_core.up.sql +21 -0
  159. package/agent-template/.ai/references/catalog/migrations/0002_catalog_history.down.sql +3 -0
  160. package/agent-template/.ai/references/catalog/migrations/0002_catalog_history.up.sql +20 -0
  161. package/agent-template/.ai/references/catalog/migrations/0003_catalog_history_service_actors.down.sql +3 -0
  162. package/agent-template/.ai/references/catalog/migrations/0003_catalog_history_service_actors.up.sql +36 -0
  163. package/agent-template/.ai/references/catalog/migrations/0004_catalog_idempotency_ledger.down.sql +3 -0
  164. package/agent-template/.ai/references/catalog/migrations/0004_catalog_idempotency_ledger.up.sql +19 -0
  165. package/agent-template/.ai/references/catalog/migrations/README.md +3 -0
  166. package/agent-template/.ai/references/catalog/module.json +27 -0
  167. package/agent-template/.ai/references/catalog/package.json +49 -0
  168. package/agent-template/.ai/references/catalog/spec/module.yaml +86 -0
  169. package/agent-template/.ai/references/catalog/src/acl/permissions.ts +6 -0
  170. package/agent-template/.ai/references/catalog/src/agent/tools.ts +164 -0
  171. package/agent-template/.ai/references/catalog/src/api/endpoints.ts +243 -0
  172. package/agent-template/.ai/references/catalog/src/client/CatalogHistoryDrawer.tsrx +123 -0
  173. package/agent-template/.ai/references/catalog/src/client/CatalogItemForm.tsrx +190 -0
  174. package/agent-template/.ai/references/catalog/src/client/CatalogView.tsrx +473 -0
  175. package/agent-template/.ai/references/catalog/src/client/api.ts +111 -0
  176. package/agent-template/.ai/references/catalog/src/client/contribution.tsrx +61 -0
  177. package/agent-template/.ai/references/catalog/src/client/index.ts +18 -0
  178. package/agent-template/.ai/references/catalog/src/client/navigation-copy.ts +9 -0
  179. package/agent-template/.ai/references/catalog/src/client/state.ts +24 -0
  180. package/agent-template/.ai/references/catalog/src/domain/types.ts +32 -0
  181. package/agent-template/.ai/references/catalog/src/domain/variables.ts +111 -0
  182. package/agent-template/.ai/references/catalog/src/index.ts +31 -0
  183. package/agent-template/.ai/references/catalog/src/platform.ts +35 -0
  184. package/agent-template/.ai/references/catalog/src/server/index.ts +4 -0
  185. package/agent-template/.ai/references/catalog/src/server/runtime.ts +86 -0
  186. package/agent-template/.ai/references/catalog/src/services/catalog-service.ts +306 -0
  187. package/agent-template/.ai/references/catalog/src/services/database-repository.ts +440 -0
  188. package/agent-template/.ai/references/catalog/src/services/index.ts +4 -0
  189. package/agent-template/.ai/references/catalog/src/services/migration.ts +171 -0
  190. package/agent-template/.ai/references/catalog/src/services/repository.ts +36 -0
  191. package/agent-template/.ai/references/catalog/src/services/target-idempotency.ts +59 -0
  192. package/agent-template/.ai/references/catalog/tests/agent-tools.test.ts +277 -0
  193. package/agent-template/.ai/references/catalog/tests/endpoints.test.ts +320 -0
  194. package/agent-template/.ai/references/catalog/tests/idempotency.test.ts +297 -0
  195. package/agent-template/.ai/references/catalog/tests/migrations.test.ts +149 -0
  196. package/agent-template/.ai/references/catalog/tests/module.test.ts +271 -0
  197. package/agent-template/.ai/references/catalog/tests/support/database.ts +76 -0
  198. package/agent-template/.ai/references/catalog/translations/en.json +101 -0
  199. package/agent-template/.ai/references/catalog/translations/pl.json +101 -0
  200. package/agent-template/.ai/references/catalog/tsconfig.json +15 -0
  201. package/agent-template/.ai/references/catalog/vitest.config.ts +16 -0
  202. package/agent-template/.ai/references/catalog.provenance.json +55 -0
  203. package/agent-template/.ai/rules/flowdular.md +86 -0
  204. package/agent-template/.ai/skills/README.md +36 -0
  205. package/agent-template/.ai/skills/agent-tool-design/SKILL.md +209 -0
  206. package/agent-template/.ai/skills/auth-security-review/SKILL.md +96 -0
  207. package/agent-template/.ai/skills/auto-review/SKILL.md +112 -0
  208. package/agent-template/.ai/skills/bug-hunt/SKILL.md +110 -0
  209. package/agent-template/.ai/skills/business-agent-design/SKILL.md +188 -0
  210. package/agent-template/.ai/skills/cli-extension/SKILL.md +114 -0
  211. package/agent-template/.ai/skills/core-extend/SKILL.md +104 -0
  212. package/agent-template/.ai/skills/database-adapter/SKILL.md +204 -0
  213. package/agent-template/.ai/skills/database-adapter/references/first-run-and-matrix.md +105 -0
  214. package/agent-template/.ai/skills/migration-authoring/SKILL.md +167 -0
  215. package/agent-template/.ai/skills/module-new/SKILL.md +180 -0
  216. package/agent-template/.ai/skills/module-update/SKILL.md +100 -0
  217. package/agent-template/.ai/skills/perf-audit/SKILL.md +105 -0
  218. package/agent-template/.ai/skills/release-eject-pr/SKILL.md +113 -0
  219. package/agent-template/.ai/skills/spec-approval/SKILL.md +112 -0
  220. package/agent-template/.ai/skills/test-hardening/SKILL.md +86 -0
  221. package/agent-template/.ai/skills/translations-i18n/SKILL.md +85 -0
  222. package/agent-template/.ai/skills/ux-design/SKILL.md +97 -0
  223. package/agent-template/.ai/skills/variables/SKILL.md +164 -0
  224. package/agent-template/.ai/skills/workflow-development/SKILL.md +199 -0
  225. package/agent-template/.claude/skills/agent-tool-design/SKILL.md +203 -0
  226. package/agent-template/.claude/skills/auth-security-review/SKILL.md +90 -0
  227. package/agent-template/.claude/skills/auto-review/SKILL.md +103 -0
  228. package/agent-template/.claude/skills/bug-hunt/SKILL.md +104 -0
  229. package/agent-template/.claude/skills/business-agent-design/SKILL.md +182 -0
  230. package/agent-template/.claude/skills/cli-extension/SKILL.md +108 -0
  231. package/agent-template/.claude/skills/core-extend/SKILL.md +99 -0
  232. package/agent-template/.claude/skills/database-adapter/SKILL.md +198 -0
  233. package/agent-template/.claude/skills/database-adapter/references/first-run-and-matrix.md +105 -0
  234. package/agent-template/.claude/skills/migration-authoring/SKILL.md +161 -0
  235. package/agent-template/.claude/skills/module-new/SKILL.md +171 -0
  236. package/agent-template/.claude/skills/module-update/SKILL.md +91 -0
  237. package/agent-template/.claude/skills/perf-audit/SKILL.md +98 -0
  238. package/agent-template/.claude/skills/release-eject-pr/SKILL.md +107 -0
  239. package/agent-template/.claude/skills/spec-approval/SKILL.md +106 -0
  240. package/agent-template/.claude/skills/test-hardening/SKILL.md +79 -0
  241. package/agent-template/.claude/skills/translations-i18n/SKILL.md +78 -0
  242. package/agent-template/.claude/skills/ux-design/SKILL.md +92 -0
  243. package/agent-template/.claude/skills/variables/SKILL.md +156 -0
  244. package/agent-template/.claude/skills/workflow-development/SKILL.md +192 -0
  245. package/agent-template/AGENTS.md +77 -0
  246. package/agent-template/CLAUDE.md +77 -0
  247. package/agent-template/docs/adr/0001-development-reload.md +16 -0
  248. package/agent-template/docs/adr/0002-durable-agent-execution.md +21 -0
  249. package/agent-template/docs/adr/0003-module-settings.md +22 -0
  250. package/agent-template/docs/adr/0004-enterprise-access-and-audit.md +36 -0
  251. package/agent-template/docs/adr/0005-sandbox-runtime-and-coding-agents.md +81 -0
  252. package/agent-template/docs/adr/0006-agentic-workflows.md +1702 -0
  253. package/agent-template/docs/adr/0007-module-owned-agents.md +429 -0
  254. package/agent-template/docs/adr/0008-database-adapter-contract.md +90 -0
  255. package/agent-template/docs/agent-contract.md +45 -0
  256. package/agent-template/docs/configuration.md +122 -0
  257. package/agent-template/docs/database-adapters.md +346 -0
  258. package/agent-template/docs/design-system.md +217 -0
  259. package/agent-template/docs/modules.md +146 -0
  260. package/agent-template/platform/scripts/build.mjs +38 -0
  261. package/agent-template/rulesync.jsonc +11 -0
  262. package/dist/bin.js +3 -1
  263. package/package.json +3 -2
  264. package/template/default/.prettierignore +9 -0
  265. package/template/default/README.md +12 -0
  266. package/template/default/flowdular.json +3 -3
  267. package/template/default/package.json +6 -2
  268. package/template/default/platform/octane.config.ts +17 -6
  269. package/template/default/platform/package.json +2 -1
@@ -0,0 +1,80 @@
1
+ schemaVersion: 1
2
+ # The module already exists; these must still be present after the change.
3
+ required:
4
+ - module.json
5
+ - package.json
6
+ - spec/module.yaml
7
+ - src/index.ts
8
+ - src/acl/permissions.ts
9
+ - src/api/endpoints.ts
10
+ - src/platform.ts
11
+ - src/server/index.ts
12
+ - src/client/index.ts
13
+ - tests/module.test.ts
14
+ stable:
15
+ - src/platform.ts exports createServerComposition
16
+ - src/client/index.ts exports createClientContribution
17
+ - every name exported from src/index.ts, src/server/index.ts, src/client/index.ts
18
+ byChange:
19
+ endpoint:
20
+ - 'src/services/*.ts'
21
+ - 'src/api/endpoints.ts'
22
+ - 'src/client/api.ts'
23
+ - 'tests/module.test.ts'
24
+ - 'spec/module.yaml'
25
+ table:
26
+ - 'src/services/migration.ts'
27
+ - 'src/services/database-repository.ts'
28
+ - 'migrations/000N_{module}_{name}.up.sql'
29
+ - 'migrations/000N_{module}_{name}.down.sql'
30
+ - 'src/domain/types.ts'
31
+ - 'tests/module.test.ts'
32
+ - 'spec/module.yaml'
33
+ column:
34
+ - 'src/services/migration.ts'
35
+ - 'src/services/database-repository.ts'
36
+ - 'migrations/000N_{module}_{name}.up.sql'
37
+ - 'migrations/000N_{module}_{name}.down.sql'
38
+ - 'src/domain/types.ts'
39
+ - 'src/api/endpoints.ts'
40
+ - 'src/client/*.tsrx'
41
+ - 'tests/module.test.ts'
42
+ - 'spec/module.yaml'
43
+ screen:
44
+ - 'src/client/XView.tsrx'
45
+ - 'src/client/contribution.tsrx'
46
+ - 'src/client/index.ts'
47
+ widget:
48
+ - 'src/client/*.tsrx'
49
+ - 'src/client/contribution.tsrx'
50
+ permission:
51
+ - 'spec/module.yaml'
52
+ - 'src/acl/permissions.ts'
53
+ - 'src/api/endpoints.ts'
54
+ - 'src/client/contribution.tsrx'
55
+ setting:
56
+ - 'src/settings.ts'
57
+ - 'src/platform.ts'
58
+ - 'src/server/runtime.ts'
59
+ - 'spec/module.yaml'
60
+ cross-module-read:
61
+ - 'module.json'
62
+ - 'spec/module.yaml'
63
+ - 'package.json'
64
+ - 'src/services/*.ts'
65
+ agent-tool:
66
+ - 'src/agent/tools.ts'
67
+ - 'src/platform.ts'
68
+ - 'tests/agent-tools.test.ts'
69
+ - 'spec/module.yaml'
70
+ - 'package.json'
71
+ business-agent:
72
+ - 'src/agent/agents.ts'
73
+ - 'src/platform.ts'
74
+ - 'tests/business-agents.test.ts'
75
+ - 'spec/module.yaml'
76
+ - 'module.json'
77
+ - 'package.json'
78
+ fix:
79
+ - 'tests/module.test.ts'
80
+ - 'the owning file'
@@ -0,0 +1,15 @@
1
+ schemaVersion: 1
2
+ status:
3
+ allowed:
4
+ - draft
5
+ - approved
6
+ - in-review
7
+ requiredKeys:
8
+ - acceptanceScenarios
9
+ onChange:
10
+ specVersion: bump patch for fix, minor for endpoint, table, column, screen, widget, permission, cross-module-read
11
+ acceptanceScenarios: one new scenario per new behaviour, id pattern ^[A-Z][A-Z0-9-]+$
12
+ invariants: one new sentence per new rule (uniqueness, range, tenancy)
13
+ permissions: new ids must also appear in src/acl/permissions.ts and be granted with auth sync-scopes
14
+ dependencies: a cross-module read adds the owning module id and range
15
+ settings: a new setting gets an invariant or scenario naming its key, type, default and bounds
@@ -0,0 +1,115 @@
1
+ schemaVersion: 1
2
+ steps:
3
+ - id: spec
4
+ role: business-manager
5
+ action: Update the specification or write its minimal delta first; add the acceptance scenario and invariant, bump specVersion, and leave status draft or in-review for the operator.
6
+ inputs:
7
+ - 'brief'
8
+ - 'base/spec/module.yaml'
9
+ outputs:
10
+ - 'spec/module.yaml'
11
+ - id: approve
12
+ role: orchestrator
13
+ action: Show the spec delta and record the operator approval of its exact content hash. Any later spec edit or request for changes invalidates that module's approval and blocks its implementation again; a module added to the session needs its own approved hash.
14
+ inputs:
15
+ - 'spec/module.yaml'
16
+ outputs:
17
+ - 'approved spec hash'
18
+ gates:
19
+ - 'spec-schema'
20
+ - id: read
21
+ role: backend-engineer
22
+ action: After approval, read the whole module (spec, acl, endpoints, services, client, tests) and the base copy before changing implementation.
23
+ inputs:
24
+ - 'approved spec hash'
25
+ - 'modules/{module}/**'
26
+ outputs: []
27
+ - id: classify
28
+ role: backend-engineer
29
+ action: Name the change class (endpoint, table, column, screen, widget, permission, setting, cross-module-read, fix) and take its touch list from required-files.yaml byChange.
30
+ inputs:
31
+ - 'brief'
32
+ outputs:
33
+ - 'touch list'
34
+ - id: server
35
+ role: backend-engineer
36
+ action: Service method, repository SQL with WHERE tenant_id = ?, numbered ledger migration for a schema change, endpoint with access, resolveIdentity, sessionMutationDenial, readJsonObject; tests for denial and isolation.
37
+ inputs:
38
+ - 'touch list'
39
+ outputs:
40
+ - 'src/services/*.ts'
41
+ - 'src/api/endpoints.ts'
42
+ - 'migrations/*.sql'
43
+ - 'tests/module.test.ts'
44
+ gates:
45
+ - 'module-schema'
46
+ - 'dependencies'
47
+ - 'typecheck'
48
+ - 'tests'
49
+ - 'format'
50
+ - id: client
51
+ role: frontend-engineer
52
+ action: api.ts call, form field or column, contribution entry for a new screen or widget, client logic test.
53
+ inputs:
54
+ - 'src/api/endpoints.ts'
55
+ outputs:
56
+ - 'src/client/**'
57
+ - 'tests/*.test.ts'
58
+ gates:
59
+ - 'dependencies'
60
+ - 'typecheck'
61
+ - 'tests'
62
+ - 'format'
63
+ - id: agent-surface
64
+ role: agentic-engineer
65
+ action: When the approved delta asks for a tool or module-owned business agent, follow agent-tool-design or business-agent-design, register it during composition, and test exact tool ceilings, tenant isolation, live permission refusal, and revision behavior.
66
+ inputs:
67
+ - 'approved spec hash'
68
+ - 'src/api/endpoints.ts'
69
+ - 'src/services/*.ts'
70
+ outputs:
71
+ - 'src/agent/tools.ts when tools are required'
72
+ - 'src/agent/agents.ts when a business agent is required'
73
+ - 'src/platform.ts'
74
+ - 'tests/agent-tools.test.ts'
75
+ - 'tests/business-agents.test.ts'
76
+ - 'module.json'
77
+ - 'package.json'
78
+ gates:
79
+ - 'module-schema'
80
+ - 'dependencies'
81
+ - 'typecheck'
82
+ - 'tests'
83
+ - 'format'
84
+ - id: versions
85
+ role: backend-engineer
86
+ action: Keep module.json and package.json versions equal to the operator-approved specVersion without changing the approved spec content.
87
+ inputs:
88
+ - 'approved spec hash'
89
+ outputs:
90
+ - 'module.json'
91
+ - 'package.json'
92
+ gates:
93
+ - 'module-schema'
94
+ - id: land
95
+ role: orchestrator
96
+ action: 'Sandbox: verify the current spec hash still equals the operator-approved hash, then eject (gates per module, copy and removals, pnpm install, auth sync-scopes, platform typecheck; stops at the first failed step). Direct path: pnpm verify, pull request; auth sync-scopes --apply when a permission was added.'
97
+ inputs:
98
+ - 'modules/{module}/**'
99
+ outputs:
100
+ - 'modules/{module}/**'
101
+ gates:
102
+ - 'spec-schema'
103
+ - 'module-schema'
104
+ - 'dependencies'
105
+ - 'typecheck'
106
+ - 'tests'
107
+ - 'format'
108
+ - id: review
109
+ role: reviewer
110
+ action: Diff against base, exact approved spec hash unchanged, exported names unchanged, versions bumped together, and migration runner evidence covers fresh apply plus adoption of an existing database.
111
+ inputs:
112
+ - 'diff'
113
+ - 'gate evidence'
114
+ outputs:
115
+ - 'review report'
@@ -0,0 +1,7 @@
1
+ # new-module
2
+
3
+ Create a module from an approved `spec/module.yaml`. The sandbox labels these sessions `new-module@1.0.0` (`packages/sandbox/src/server/routes.ts`); the same blueprint applies when a person or a coding tool follows `.ai/skills/module-new/SKILL.md` at the repository root.
4
+
5
+ Roles, in order: `business-manager` writes the spec and stops for approval; `backend-engineer` builds the server from `pnpm flowdular module new` output; `ux-designer` and `frontend-engineer` build the screen; `agentic-engineer` joins when the brief asks for agent tools or a module-owned business agent. Gates are the six sandbox gates. The change reaches the platform through eject (sandbox) or `pnpm flowdular module enable <id> --apply` (direct path; the command grants the module's scopes as its last step), then a pull request.
6
+
7
+ Files in this directory describe the contract; `blueprint.json` is the only one validated by `pnpm flowdular blueprint validate --all`, and `packages/cli/src/validation.ts` checks that the others exist. Nothing executes `steps.yaml` or `gates.yaml`.
@@ -0,0 +1,27 @@
1
+ schemaVersion: 1
2
+ write:
3
+ - modules/{module}/**
4
+ deny:
5
+ - platform/**
6
+ - packages/**
7
+ - infra/**
8
+ - .github/**
9
+ - docs/**
10
+ - specs/**
11
+ - .ai/**
12
+ - flowdular.json
13
+ - pnpm-workspace.yaml
14
+ - modules/!({module})/**
15
+ # Written only by CLI commands, never by hand. The eject and the direct path
16
+ # both run the commands; the files still travel in the same commit.
17
+ cliOwned:
18
+ - path: flowdular.json
19
+ command: pnpm flowdular module enable <id> --apply
20
+ - path: platform/package.json
21
+ command: pnpm flowdular module enable <id> --apply
22
+ - path: platform/src/generated/modules.server.ts
23
+ command: pnpm flowdular module sync --apply
24
+ - path: platform/src/generated/modules.client.ts
25
+ command: pnpm flowdular module sync --apply
26
+ - path: pnpm-lock.yaml
27
+ command: pnpm install
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "../../../packages/contracts/schemas/blueprint.schema.json",
3
+ "schemaVersion": 1,
4
+ "architecture": "0.2.0",
5
+ "owner": "platform-architecture",
6
+ "status": "approved",
7
+ "id": "new-module",
8
+ "version": "1.0.0",
9
+ "risk": "workspace-write",
10
+ "agentRoles": [
11
+ "business-manager",
12
+ "backend-engineer",
13
+ "ux-designer",
14
+ "frontend-engineer",
15
+ "agentic-engineer"
16
+ ],
17
+ "executorProfiles": ["sandbox-specialist", "repo-agent"],
18
+ "requiredReviewers": ["reviewer"],
19
+ "requiresApprovedSpec": true
20
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "moduleId": "inventory.core",
3
+ "specPath": "platform/spec/module.yaml"
4
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "blueprint": "new-module@1.0.0",
3
+ "moduleId": "inventory.core",
4
+ "specDigest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
5
+ "allowedPaths": ["modules/inventory/**"],
6
+ "steps": ["scaffold"],
7
+ "gates": ["lint"]
8
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "moduleId": "inventory.core",
3
+ "specPath": "modules/inventory/spec/module.yaml",
4
+ "brief": "Track stock locations per tenant with a read and a manage scope."
5
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "blueprint": "new-module@1.0.0",
3
+ "moduleId": "inventory.core",
4
+ "specDigest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
5
+ "allowedPaths": ["modules/inventory/**"],
6
+ "steps": [
7
+ "spec",
8
+ "scaffold",
9
+ "server",
10
+ "client",
11
+ "tests",
12
+ "enable-and-grant"
13
+ ],
14
+ "gates": [
15
+ "spec-schema",
16
+ "module-schema",
17
+ "dependencies",
18
+ "typecheck",
19
+ "tests",
20
+ "format"
21
+ ]
22
+ }
@@ -0,0 +1,30 @@
1
+ schemaVersion: 1
2
+ # Ids equal GateId in packages/sandbox/src/server/gates.ts. The sandbox runs the
3
+ # gates a role lists in its front matter after every turn that changed files;
4
+ # from the repository root run the command column yourself. Nothing executes
5
+ # this file; it documents the contract.
6
+ gates:
7
+ - id: spec-schema
8
+ command: pnpm flowdular spec validate --all --json
9
+ sandbox: pnpm flowdular spec validate --all --json --root <session workspace>
10
+ required: true
11
+ - id: module-schema
12
+ command: pnpm flowdular module validate --json
13
+ sandbox: pnpm flowdular module validate --json --root <session workspace>
14
+ required: true
15
+ - id: dependencies
16
+ command: 'grep the imports under src/** and compare with package.json dependencies (no CLI command yet)'
17
+ sandbox: checkDeclaredDependencies(modulePath) in packages/sandbox/src/server/dependencies.ts, run after every turn that changed files, plus a pnpm install when a package.json changed
18
+ required: true
19
+ - id: typecheck
20
+ command: pnpm --filter @flowdular/module-{module} typecheck
21
+ sandbox: node_modules/.bin/tsrx-tsc --noEmit -p tsconfig.json (cwd module)
22
+ required: true
23
+ - id: tests
24
+ command: pnpm --filter @flowdular/module-{module} test
25
+ sandbox: node_modules/.bin/vitest run --passWithNoTests (cwd module; zero tests still pass)
26
+ required: true
27
+ - id: format
28
+ command: pnpm format:check
29
+ sandbox: prettier --check . (cwd module)
30
+ required: true
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "required": ["moduleId", "specPath"],
6
+ "properties": {
7
+ "moduleId": {
8
+ "type": "string",
9
+ "pattern": "^[a-z][a-z0-9-]*(\\.[a-z][a-z0-9-]*)+$"
10
+ },
11
+ "specPath": {
12
+ "type": "string",
13
+ "pattern": "^modules/[a-z0-9-]+/spec/module\\.yaml$"
14
+ },
15
+ "brief": {
16
+ "type": "string",
17
+ "minLength": 8,
18
+ "maxLength": 20000
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "required": [
6
+ "blueprint",
7
+ "moduleId",
8
+ "specDigest",
9
+ "allowedPaths",
10
+ "steps",
11
+ "gates"
12
+ ],
13
+ "properties": {
14
+ "blueprint": {
15
+ "const": "new-module@1.0.0"
16
+ },
17
+ "moduleId": {
18
+ "type": "string",
19
+ "pattern": "^[a-z][a-z0-9-]*(\\.[a-z][a-z0-9-]*)+$"
20
+ },
21
+ "specDigest": {
22
+ "type": "string",
23
+ "pattern": "^sha256:[a-f0-9]{64}$"
24
+ },
25
+ "allowedPaths": {
26
+ "type": "array",
27
+ "minItems": 1,
28
+ "items": {
29
+ "type": "string",
30
+ "pattern": "^modules/[a-z0-9-]+/"
31
+ },
32
+ "uniqueItems": true
33
+ },
34
+ "steps": {
35
+ "type": "array",
36
+ "minItems": 1,
37
+ "items": {
38
+ "type": "string"
39
+ }
40
+ },
41
+ "gates": {
42
+ "type": "array",
43
+ "minItems": 1,
44
+ "items": {
45
+ "type": "string",
46
+ "enum": [
47
+ "spec-schema",
48
+ "module-schema",
49
+ "dependencies",
50
+ "typecheck",
51
+ "tests",
52
+ "format"
53
+ ]
54
+ },
55
+ "uniqueItems": true
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,73 @@
1
+ schemaVersion: 1
2
+ # What .ai/references/catalog has and packages/cli/src/module-sync.ts needs. The
3
+ # scaffold (pnpm flowdular module new) writes most of these; check the dry run.
4
+ required:
5
+ - module.json
6
+ - package.json
7
+ - tsconfig.json
8
+ - spec/module.yaml
9
+ - src/index.ts
10
+ - src/acl/permissions.ts
11
+ - src/api/endpoints.ts
12
+ - src/client/index.ts
13
+ - src/services/index.ts
14
+ - migrations/README.md
15
+ - translations/en.json
16
+ - tests/module.test.ts
17
+ manifest:
18
+ module.json:
19
+ - platform.server: true when capabilities include api
20
+ - platform.client: true when capabilities include client
21
+ - version equals spec specVersion and package.json version
22
+ package.json:
23
+ exports:
24
+ - '.'
25
+ - ./client
26
+ - ./server
27
+ - ./platform
28
+ src/platform.ts:
29
+ - createServerComposition(context) returns routes, optional settings (defineModuleSettings), optional start() and optional dispose()
30
+ - context carries auth, settings (ModuleSettingsRuntime), agentTools (PlatformToolRegistry), agentDefinitions (PlatformAgentRegistry) and capabilities (PlatformCapabilityRegistry)
31
+ conditional:
32
+ api:
33
+ whenCapability: api
34
+ required:
35
+ - src/platform.ts
36
+ - src/server/index.ts
37
+ - src/server/runtime.ts
38
+ - src/domain/types.ts
39
+ database:
40
+ whenCapability: database
41
+ required:
42
+ - src/services/migration.ts
43
+ - src/services/repository.ts
44
+ - src/services/database-repository.ts
45
+ - migrations/0001_{module}_core.up.sql
46
+ - migrations/0001_{module}_core.down.sql
47
+ no-database:
48
+ whenCapabilityAbsent: database
49
+ required:
50
+ - src/services/memory-repository.ts
51
+ client:
52
+ whenCapability: client
53
+ required:
54
+ - src/client/contribution.tsrx
55
+ - src/client/api.ts
56
+ - src/client/state.ts
57
+ cli:
58
+ whenCapability: cli
59
+ required:
60
+ - src/cli/commands.json
61
+ - src/cli/index.ts
62
+ translations:
63
+ whenCapability: translations
64
+ required:
65
+ - translations/{locale}.json for every declared locale
66
+ business-agent:
67
+ whenBriefRequests: module-owned business agent
68
+ required:
69
+ - src/agent/agents.ts
70
+ - tests/business-agents.test.ts
71
+ - agents.core in spec/module.yaml and module.json dependencies
72
+ - '@flowdular/module-agents in package.json dependencies'
73
+ - context.agentDefinitions.register(...) in src/platform.ts
@@ -0,0 +1,30 @@
1
+ schemaVersion: 1
2
+ # Every key below exists in packages/contracts/schemas/module-spec.schema.json.
3
+ status:
4
+ allowed:
5
+ - approved
6
+ requiredKeys:
7
+ - invariants
8
+ - permissions
9
+ - dataOwnership
10
+ - acceptanceScenarios
11
+ byCapability:
12
+ api:
13
+ permissions: one read and one manage id per entity, pattern <module>.<entity>.read|manage
14
+ database:
15
+ invariants: tenancy and uniqueness rules stated in sentences
16
+ dataOwnership: what this module owns and what it reads through another module
17
+ client:
18
+ acceptanceScenarios: a list scenario and a create scenario name the screen states
19
+ dependencies:
20
+ required:
21
+ - id: system.core
22
+ range: ^0.1.0
23
+ - id: auth.core
24
+ range: ^0.1.0
25
+ acceptanceScenarios:
26
+ minimum: 4
27
+ mustInclude:
28
+ - denial (401 or 403 before repository access)
29
+ - tenant isolation
30
+ - create with a stable conflict code when uniqueness exists
@@ -0,0 +1,138 @@
1
+ schemaVersion: 1
2
+ steps:
3
+ - id: spec
4
+ role: business-manager
5
+ action: Write spec/module.yaml with status draft, schema-valid, with permissions and acceptance scenarios; stop for approval.
6
+ inputs:
7
+ - 'brief'
8
+ outputs:
9
+ - 'spec/module.yaml'
10
+ gates:
11
+ - 'spec-schema'
12
+ - id: approve
13
+ role: operator
14
+ action: Set status to approved (sandbox approve button or a human edit). No agent does this.
15
+ inputs:
16
+ - 'spec/module.yaml'
17
+ outputs:
18
+ - 'spec/module.yaml'
19
+ - id: scaffold
20
+ role: orchestrator
21
+ action: pnpm flowdular module new <id> --spec modules/<dir>/spec/module.yaml --apply (the sandbox runs it; at the root run the dry run first). Writes the composition entries, a list and a create endpoint, table or memory repository, view, api, state and tests for the first entity; other permissions get constants only.
22
+ inputs:
23
+ - 'spec/module.yaml'
24
+ - 'translations/*.json'
25
+ outputs:
26
+ - 'module.json'
27
+ - 'package.json'
28
+ - 'tsconfig.json'
29
+ - 'src/platform.ts'
30
+ - 'src/server/*.ts'
31
+ - 'src/acl/permissions.ts'
32
+ - 'src/api/endpoints.ts'
33
+ - 'src/domain/types.ts'
34
+ - 'src/services/*.ts'
35
+ - 'src/client/*.ts'
36
+ - 'src/client/*.tsrx'
37
+ - 'migrations/0001_*.sql'
38
+ - 'tests/module.test.ts'
39
+ - 'translations/*.json'
40
+ - id: server
41
+ role: backend-engineer
42
+ action: 'Extend the scaffold with the real domain: fields, validation and stable error codes, uniqueness rules and indexes, further endpoints and entities, settings and server tests per the module-new skill.'
43
+ inputs:
44
+ - 'spec/module.yaml'
45
+ - 'reference/example-module'
46
+ outputs:
47
+ - 'src/acl/permissions.ts'
48
+ - 'src/domain/types.ts'
49
+ - 'src/services/*.ts'
50
+ - 'src/server/*.ts'
51
+ - 'src/api/endpoints.ts'
52
+ - 'src/platform.ts'
53
+ - 'src/index.ts'
54
+ - 'migrations/0001_*.sql'
55
+ - 'tests/module.test.ts'
56
+ - 'module.json'
57
+ - 'package.json'
58
+ gates:
59
+ - 'module-schema'
60
+ - 'dependencies'
61
+ - 'typecheck'
62
+ - 'tests'
63
+ - 'format'
64
+ - id: screen
65
+ role: ux-designer
66
+ action: Skeleton of the record screen and drawer form with the five states, on @flowdular/ui only.
67
+ inputs:
68
+ - 'spec/module.yaml'
69
+ - 'reference/design-system.md'
70
+ outputs:
71
+ - 'src/client/XView.tsrx'
72
+ - 'src/client/XForm.tsrx'
73
+ gates:
74
+ - 'typecheck'
75
+ - 'format'
76
+ - id: client
77
+ role: frontend-engineer
78
+ action: createClientContribution(context) in src/client/index.ts, contribution.tsrx, api.ts with csrf and content-type, state.ts, data wiring, widget, client logic tests.
79
+ inputs:
80
+ - 'src/api/endpoints.ts'
81
+ - 'src/client/XView.tsrx'
82
+ outputs:
83
+ - 'src/client/index.ts'
84
+ - 'src/client/contribution.tsrx'
85
+ - 'src/client/api.ts'
86
+ - 'src/client/state.ts'
87
+ - 'tests/*.test.ts'
88
+ - 'package.json'
89
+ gates:
90
+ - 'dependencies'
91
+ - 'typecheck'
92
+ - 'tests'
93
+ - 'format'
94
+ - id: agent-surface
95
+ role: agentic-engineer
96
+ action: Only when the approved spec asks for agent tools or a module-owned business agent; follow agent-tool-design for tools and business-agent-design for defineAgent behavior, register both during composition, and prove the exact capability ceiling and refusals.
97
+ inputs:
98
+ - 'spec/module.yaml'
99
+ - 'src/api/endpoints.ts'
100
+ outputs:
101
+ - 'src/agent/tools.ts when tools are required'
102
+ - 'src/agent/agents.ts when a business agent is required'
103
+ - 'src/platform.ts'
104
+ - 'tests/agent-tools.test.ts'
105
+ - 'tests/business-agents.test.ts'
106
+ - 'package.json'
107
+ - 'module.json'
108
+ gates:
109
+ - 'spec-schema'
110
+ - 'module-schema'
111
+ - 'dependencies'
112
+ - 'typecheck'
113
+ - 'tests'
114
+ - id: land
115
+ role: orchestrator
116
+ action: 'Sandbox: eject (gates per module, copy and removals, pnpm install, module enable with scope grant, auth sync-scopes, platform typecheck, restart note). Direct path: module enable --apply (grants scopes), pnpm verify, pull request.'
117
+ inputs:
118
+ - 'modules/{module}/**'
119
+ outputs:
120
+ - 'flowdular.json'
121
+ - 'platform/package.json'
122
+ - 'platform/src/generated/modules.server.ts'
123
+ - 'platform/src/generated/modules.client.ts'
124
+ gates:
125
+ - 'spec-schema'
126
+ - 'module-schema'
127
+ - 'dependencies'
128
+ - 'typecheck'
129
+ - 'tests'
130
+ - 'format'
131
+ - id: review
132
+ role: reviewer
133
+ action: Review against the spec, AGENTS.md and the reviewer checklist; findings by severity; no fixes in the same run.
134
+ inputs:
135
+ - 'diff'
136
+ - 'gate evidence'
137
+ outputs:
138
+ - 'review report'
@@ -0,0 +1,5 @@
1
+ # release
2
+
3
+ Move a finished change into the platform: a sandbox eject, a pull request from a working tree, or a version tag that builds the container (`.github/workflows/container.yml` on `v*.*.*`). Procedure and conventions: `.ai/skills/release-eject-pr/SKILL.md`.
4
+
5
+ The release writes nothing by hand. `pnpm flowdular module enable` (which also grants the module's scopes), `pnpm flowdular module sync`, `pnpm install` and `pnpm flowdular auth sync-scopes` produce every non-module file in the commit, and the pull request body names the command for each. An eject stops at the first failed step and removes the files a session deleted. Gates are the repository gates CI runs: `pnpm verify`, `pnpm build`, `pnpm audit --prod --audit-level high`.