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.
- package/README.md +11 -0
- package/agent-template/.agents/skills/agent-tool-design/SKILL.md +203 -0
- package/agent-template/.agents/skills/auth-security-review/SKILL.md +90 -0
- package/agent-template/.agents/skills/auto-review/SKILL.md +103 -0
- package/agent-template/.agents/skills/bug-hunt/SKILL.md +104 -0
- package/agent-template/.agents/skills/business-agent-design/SKILL.md +182 -0
- package/agent-template/.agents/skills/cli-extension/SKILL.md +108 -0
- package/agent-template/.agents/skills/core-extend/SKILL.md +99 -0
- package/agent-template/.agents/skills/database-adapter/SKILL.md +198 -0
- package/agent-template/.agents/skills/database-adapter/references/first-run-and-matrix.md +105 -0
- package/agent-template/.agents/skills/migration-authoring/SKILL.md +161 -0
- package/agent-template/.agents/skills/module-new/SKILL.md +171 -0
- package/agent-template/.agents/skills/module-update/SKILL.md +91 -0
- package/agent-template/.agents/skills/perf-audit/SKILL.md +98 -0
- package/agent-template/.agents/skills/release-eject-pr/SKILL.md +107 -0
- package/agent-template/.agents/skills/spec-approval/SKILL.md +106 -0
- package/agent-template/.agents/skills/test-hardening/SKILL.md +79 -0
- package/agent-template/.agents/skills/translations-i18n/SKILL.md +78 -0
- package/agent-template/.agents/skills/ux-design/SKILL.md +92 -0
- package/agent-template/.agents/skills/variables/SKILL.md +156 -0
- package/agent-template/.agents/skills/workflow-development/SKILL.md +192 -0
- package/agent-template/.ai/README.md +62 -0
- package/agent-template/.ai/agents/README.md +27 -0
- package/agent-template/.ai/agents/module-executor.md +36 -0
- package/agent-template/.ai/agents/reviewer.md +23 -0
- package/agent-template/.ai/agents/sandbox/agentic-engineer.md +31 -0
- package/agent-template/.ai/agents/sandbox/backend-engineer.md +36 -0
- package/agent-template/.ai/agents/sandbox/business-manager.md +23 -0
- package/agent-template/.ai/agents/sandbox/frontend-engineer.md +27 -0
- package/agent-template/.ai/agents/sandbox/ux-designer.md +23 -0
- package/agent-template/.ai/agents/spec-author.md +29 -0
- package/agent-template/.ai/blueprints/add-migration/README.md +5 -0
- package/agent-template/.ai/blueprints/add-migration/allowed-paths.yaml +23 -0
- package/agent-template/.ai/blueprints/add-migration/blueprint.json +14 -0
- package/agent-template/.ai/blueprints/add-migration/examples/invalid/input-destructive.json +6 -0
- package/agent-template/.ai/blueprints/add-migration/examples/invalid/plan-unnumbered-file.json +9 -0
- package/agent-template/.ai/blueprints/add-migration/examples/valid/input.json +6 -0
- package/agent-template/.ai/blueprints/add-migration/examples/valid/plan.json +9 -0
- package/agent-template/.ai/blueprints/add-migration/gates.yaml +30 -0
- package/agent-template/.ai/blueprints/add-migration/input.schema.json +23 -0
- package/agent-template/.ai/blueprints/add-migration/plan.schema.json +54 -0
- package/agent-template/.ai/blueprints/add-migration/required-files.yaml +18 -0
- package/agent-template/.ai/blueprints/add-migration/spec-requirements.yaml +13 -0
- package/agent-template/.ai/blueprints/add-migration/steps.yaml +62 -0
- package/agent-template/.ai/blueprints/author-spec/README.md +5 -0
- package/agent-template/.ai/blueprints/author-spec/allowed-paths.yaml +7 -0
- package/agent-template/.ai/blueprints/author-spec/blueprint.json +14 -0
- package/agent-template/.ai/blueprints/author-spec/examples/invalid/input-missing-outcome.json +5 -0
- package/agent-template/.ai/blueprints/author-spec/examples/valid/input.json +6 -0
- package/agent-template/.ai/blueprints/author-spec/gates.yaml +13 -0
- package/agent-template/.ai/blueprints/author-spec/input.schema.json +20 -0
- package/agent-template/.ai/blueprints/author-spec/plan.schema.json +14 -0
- package/agent-template/.ai/blueprints/author-spec/required-files.yaml +6 -0
- package/agent-template/.ai/blueprints/author-spec/spec-requirements.yaml +35 -0
- package/agent-template/.ai/blueprints/author-spec/steps.yaml +28 -0
- package/agent-template/.ai/blueprints/author-spec/templates/module.yaml +45 -0
- package/agent-template/.ai/blueprints/bug-fix/README.md +5 -0
- package/agent-template/.ai/blueprints/bug-fix/allowed-paths.yaml +29 -0
- package/agent-template/.ai/blueprints/bug-fix/blueprint.json +14 -0
- package/agent-template/.ai/blueprints/bug-fix/examples/invalid/input-no-symptom.json +4 -0
- package/agent-template/.ai/blueprints/bug-fix/examples/invalid/plan-no-test.json +8 -0
- package/agent-template/.ai/blueprints/bug-fix/examples/valid/input.json +6 -0
- package/agent-template/.ai/blueprints/bug-fix/examples/valid/plan.json +8 -0
- package/agent-template/.ai/blueprints/bug-fix/gates.yaml +30 -0
- package/agent-template/.ai/blueprints/bug-fix/input.schema.json +25 -0
- package/agent-template/.ai/blueprints/bug-fix/plan.schema.json +53 -0
- package/agent-template/.ai/blueprints/bug-fix/required-files.yaml +7 -0
- package/agent-template/.ai/blueprints/bug-fix/spec-requirements.yaml +7 -0
- package/agent-template/.ai/blueprints/bug-fix/steps.yaml +51 -0
- package/agent-template/.ai/blueprints/core-extend/README.md +5 -0
- package/agent-template/.ai/blueprints/core-extend/allowed-paths.yaml +49 -0
- package/agent-template/.ai/blueprints/core-extend/blueprint.json +14 -0
- package/agent-template/.ai/blueprints/core-extend/examples/invalid/input-unknown-package.json +5 -0
- package/agent-template/.ai/blueprints/core-extend/examples/invalid/plan-missing-gates.json +7 -0
- package/agent-template/.ai/blueprints/core-extend/examples/valid/input.json +6 -0
- package/agent-template/.ai/blueprints/core-extend/examples/valid/plan.json +10 -0
- package/agent-template/.ai/blueprints/core-extend/gates.yaml +16 -0
- package/agent-template/.ai/blueprints/core-extend/input.schema.json +54 -0
- package/agent-template/.ai/blueprints/core-extend/plan.schema.json +39 -0
- package/agent-template/.ai/blueprints/core-extend/required-files.yaml +36 -0
- package/agent-template/.ai/blueprints/core-extend/spec-requirements.yaml +17 -0
- package/agent-template/.ai/blueprints/core-extend/steps.yaml +54 -0
- package/agent-template/.ai/blueprints/edit-module/README.md +9 -0
- package/agent-template/.ai/blueprints/edit-module/allowed-paths.yaml +27 -0
- package/agent-template/.ai/blueprints/edit-module/blueprint.json +20 -0
- package/agent-template/.ai/blueprints/edit-module/examples/invalid/input-unknown-change.json +5 -0
- package/agent-template/.ai/blueprints/edit-module/examples/invalid/plan-touches-platform.json +15 -0
- package/agent-template/.ai/blueprints/edit-module/examples/valid/input.json +5 -0
- package/agent-template/.ai/blueprints/edit-module/examples/valid/plan.json +25 -0
- package/agent-template/.ai/blueprints/edit-module/gates.yaml +30 -0
- package/agent-template/.ai/blueprints/edit-module/input.schema.json +31 -0
- package/agent-template/.ai/blueprints/edit-module/plan.schema.json +65 -0
- package/agent-template/.ai/blueprints/edit-module/required-files.yaml +80 -0
- package/agent-template/.ai/blueprints/edit-module/spec-requirements.yaml +15 -0
- package/agent-template/.ai/blueprints/edit-module/steps.yaml +115 -0
- package/agent-template/.ai/blueprints/new-module/README.md +7 -0
- package/agent-template/.ai/blueprints/new-module/allowed-paths.yaml +27 -0
- package/agent-template/.ai/blueprints/new-module/blueprint.json +20 -0
- package/agent-template/.ai/blueprints/new-module/examples/invalid/input-spec-outside-modules.json +4 -0
- package/agent-template/.ai/blueprints/new-module/examples/invalid/plan-unknown-gate.json +8 -0
- package/agent-template/.ai/blueprints/new-module/examples/valid/input.json +5 -0
- package/agent-template/.ai/blueprints/new-module/examples/valid/plan.json +22 -0
- package/agent-template/.ai/blueprints/new-module/gates.yaml +30 -0
- package/agent-template/.ai/blueprints/new-module/input.schema.json +21 -0
- package/agent-template/.ai/blueprints/new-module/plan.schema.json +58 -0
- package/agent-template/.ai/blueprints/new-module/required-files.yaml +73 -0
- package/agent-template/.ai/blueprints/new-module/spec-requirements.yaml +30 -0
- package/agent-template/.ai/blueprints/new-module/steps.yaml +138 -0
- package/agent-template/.ai/blueprints/release/README.md +5 -0
- package/agent-template/.ai/blueprints/release/allowed-paths.yaml +19 -0
- package/agent-template/.ai/blueprints/release/blueprint.json +14 -0
- package/agent-template/.ai/blueprints/release/examples/invalid/input-bad-version.json +4 -0
- package/agent-template/.ai/blueprints/release/examples/invalid/plan-bad-branch.json +7 -0
- package/agent-template/.ai/blueprints/release/examples/valid/input.json +5 -0
- package/agent-template/.ai/blueprints/release/examples/valid/plan.json +20 -0
- package/agent-template/.ai/blueprints/release/gates.yaml +20 -0
- package/agent-template/.ai/blueprints/release/input.schema.json +24 -0
- package/agent-template/.ai/blueprints/release/plan.schema.json +46 -0
- package/agent-template/.ai/blueprints/release/required-files.yaml +19 -0
- package/agent-template/.ai/blueprints/release/spec-requirements.yaml +8 -0
- package/agent-template/.ai/blueprints/release/steps.yaml +47 -0
- package/agent-template/.ai/blueprints/security-review/README.md +5 -0
- package/agent-template/.ai/blueprints/security-review/allowed-paths.yaml +6 -0
- package/agent-template/.ai/blueprints/security-review/blueprint.json +14 -0
- package/agent-template/.ai/blueprints/security-review/examples/invalid/input-unknown-kind.json +4 -0
- package/agent-template/.ai/blueprints/security-review/examples/invalid/plan-finding-without-scenario.json +14 -0
- package/agent-template/.ai/blueprints/security-review/examples/valid/input.json +4 -0
- package/agent-template/.ai/blueprints/security-review/examples/valid/plan.json +19 -0
- package/agent-template/.ai/blueprints/security-review/gates.yaml +22 -0
- package/agent-template/.ai/blueprints/security-review/input.schema.json +20 -0
- package/agent-template/.ai/blueprints/security-review/plan.schema.json +65 -0
- package/agent-template/.ai/blueprints/security-review/required-files.yaml +6 -0
- package/agent-template/.ai/blueprints/security-review/spec-requirements.yaml +9 -0
- package/agent-template/.ai/blueprints/security-review/steps.yaml +38 -0
- package/agent-template/.ai/examples/README.md +8 -0
- package/agent-template/.ai/examples/bad/client-imports-server/README.md +20 -0
- package/agent-template/.ai/examples/bad/client-imports-server/api.ts +12 -0
- package/agent-template/.ai/examples/bad/missing-acl/README.md +23 -0
- package/agent-template/.ai/examples/bad/missing-acl/endpoints.ts +12 -0
- package/agent-template/.ai/examples/bad/tenant-from-body/README.md +19 -0
- package/agent-template/.ai/examples/bad/tenant-from-body/endpoints.ts +33 -0
- package/agent-template/.ai/examples/client-contribution/CustomerListView.tsrx +34 -0
- package/agent-template/.ai/examples/client-contribution/README.md +11 -0
- package/agent-template/.ai/examples/client-contribution/contribution.tsrx +48 -0
- package/agent-template/.ai/examples/client-contribution/index.ts +20 -0
- package/agent-template/.ai/examples/client-contribution/permissions.ts +8 -0
- package/agent-template/.ai/examples/customer-cli-extension/README.md +14 -0
- package/agent-template/.ai/examples/customer-cli-extension/commands.json +17 -0
- package/agent-template/.ai/examples/customer-cli-extension/index.ts +36 -0
- package/agent-template/.ai/examples/module-create/task-packet.json +11 -0
- package/agent-template/.ai/guides/application-development.md +97 -0
- package/agent-template/.ai/policies/capabilities.yaml +164 -0
- package/agent-template/.ai/policies/model-routing.yaml +72 -0
- package/agent-template/.ai/policies/path-ownership.yaml +65 -0
- package/agent-template/.ai/policies/task-budgets.yaml +37 -0
- package/agent-template/.ai/references/catalog/LICENSE +21 -0
- package/agent-template/.ai/references/catalog/migrations/0001_catalog_core.down.sql +2 -0
- package/agent-template/.ai/references/catalog/migrations/0001_catalog_core.up.sql +21 -0
- package/agent-template/.ai/references/catalog/migrations/0002_catalog_history.down.sql +3 -0
- package/agent-template/.ai/references/catalog/migrations/0002_catalog_history.up.sql +20 -0
- package/agent-template/.ai/references/catalog/migrations/0003_catalog_history_service_actors.down.sql +3 -0
- package/agent-template/.ai/references/catalog/migrations/0003_catalog_history_service_actors.up.sql +36 -0
- package/agent-template/.ai/references/catalog/migrations/0004_catalog_idempotency_ledger.down.sql +3 -0
- package/agent-template/.ai/references/catalog/migrations/0004_catalog_idempotency_ledger.up.sql +19 -0
- package/agent-template/.ai/references/catalog/migrations/README.md +3 -0
- package/agent-template/.ai/references/catalog/module.json +27 -0
- package/agent-template/.ai/references/catalog/package.json +49 -0
- package/agent-template/.ai/references/catalog/spec/module.yaml +86 -0
- package/agent-template/.ai/references/catalog/src/acl/permissions.ts +6 -0
- package/agent-template/.ai/references/catalog/src/agent/tools.ts +164 -0
- package/agent-template/.ai/references/catalog/src/api/endpoints.ts +243 -0
- package/agent-template/.ai/references/catalog/src/client/CatalogHistoryDrawer.tsrx +123 -0
- package/agent-template/.ai/references/catalog/src/client/CatalogItemForm.tsrx +190 -0
- package/agent-template/.ai/references/catalog/src/client/CatalogView.tsrx +473 -0
- package/agent-template/.ai/references/catalog/src/client/api.ts +111 -0
- package/agent-template/.ai/references/catalog/src/client/contribution.tsrx +61 -0
- package/agent-template/.ai/references/catalog/src/client/index.ts +18 -0
- package/agent-template/.ai/references/catalog/src/client/navigation-copy.ts +9 -0
- package/agent-template/.ai/references/catalog/src/client/state.ts +24 -0
- package/agent-template/.ai/references/catalog/src/domain/types.ts +32 -0
- package/agent-template/.ai/references/catalog/src/domain/variables.ts +111 -0
- package/agent-template/.ai/references/catalog/src/index.ts +31 -0
- package/agent-template/.ai/references/catalog/src/platform.ts +35 -0
- package/agent-template/.ai/references/catalog/src/server/index.ts +4 -0
- package/agent-template/.ai/references/catalog/src/server/runtime.ts +86 -0
- package/agent-template/.ai/references/catalog/src/services/catalog-service.ts +306 -0
- package/agent-template/.ai/references/catalog/src/services/database-repository.ts +440 -0
- package/agent-template/.ai/references/catalog/src/services/index.ts +4 -0
- package/agent-template/.ai/references/catalog/src/services/migration.ts +171 -0
- package/agent-template/.ai/references/catalog/src/services/repository.ts +36 -0
- package/agent-template/.ai/references/catalog/src/services/target-idempotency.ts +59 -0
- package/agent-template/.ai/references/catalog/tests/agent-tools.test.ts +277 -0
- package/agent-template/.ai/references/catalog/tests/endpoints.test.ts +320 -0
- package/agent-template/.ai/references/catalog/tests/idempotency.test.ts +297 -0
- package/agent-template/.ai/references/catalog/tests/migrations.test.ts +149 -0
- package/agent-template/.ai/references/catalog/tests/module.test.ts +271 -0
- package/agent-template/.ai/references/catalog/tests/support/database.ts +76 -0
- package/agent-template/.ai/references/catalog/translations/en.json +101 -0
- package/agent-template/.ai/references/catalog/translations/pl.json +101 -0
- package/agent-template/.ai/references/catalog/tsconfig.json +15 -0
- package/agent-template/.ai/references/catalog/vitest.config.ts +16 -0
- package/agent-template/.ai/references/catalog.provenance.json +55 -0
- package/agent-template/.ai/rules/flowdular.md +86 -0
- package/agent-template/.ai/skills/README.md +36 -0
- package/agent-template/.ai/skills/agent-tool-design/SKILL.md +209 -0
- package/agent-template/.ai/skills/auth-security-review/SKILL.md +96 -0
- package/agent-template/.ai/skills/auto-review/SKILL.md +112 -0
- package/agent-template/.ai/skills/bug-hunt/SKILL.md +110 -0
- package/agent-template/.ai/skills/business-agent-design/SKILL.md +188 -0
- package/agent-template/.ai/skills/cli-extension/SKILL.md +114 -0
- package/agent-template/.ai/skills/core-extend/SKILL.md +104 -0
- package/agent-template/.ai/skills/database-adapter/SKILL.md +204 -0
- package/agent-template/.ai/skills/database-adapter/references/first-run-and-matrix.md +105 -0
- package/agent-template/.ai/skills/migration-authoring/SKILL.md +167 -0
- package/agent-template/.ai/skills/module-new/SKILL.md +180 -0
- package/agent-template/.ai/skills/module-update/SKILL.md +100 -0
- package/agent-template/.ai/skills/perf-audit/SKILL.md +105 -0
- package/agent-template/.ai/skills/release-eject-pr/SKILL.md +113 -0
- package/agent-template/.ai/skills/spec-approval/SKILL.md +112 -0
- package/agent-template/.ai/skills/test-hardening/SKILL.md +86 -0
- package/agent-template/.ai/skills/translations-i18n/SKILL.md +85 -0
- package/agent-template/.ai/skills/ux-design/SKILL.md +97 -0
- package/agent-template/.ai/skills/variables/SKILL.md +164 -0
- package/agent-template/.ai/skills/workflow-development/SKILL.md +199 -0
- package/agent-template/.claude/skills/agent-tool-design/SKILL.md +203 -0
- package/agent-template/.claude/skills/auth-security-review/SKILL.md +90 -0
- package/agent-template/.claude/skills/auto-review/SKILL.md +103 -0
- package/agent-template/.claude/skills/bug-hunt/SKILL.md +104 -0
- package/agent-template/.claude/skills/business-agent-design/SKILL.md +182 -0
- package/agent-template/.claude/skills/cli-extension/SKILL.md +108 -0
- package/agent-template/.claude/skills/core-extend/SKILL.md +99 -0
- package/agent-template/.claude/skills/database-adapter/SKILL.md +198 -0
- package/agent-template/.claude/skills/database-adapter/references/first-run-and-matrix.md +105 -0
- package/agent-template/.claude/skills/migration-authoring/SKILL.md +161 -0
- package/agent-template/.claude/skills/module-new/SKILL.md +171 -0
- package/agent-template/.claude/skills/module-update/SKILL.md +91 -0
- package/agent-template/.claude/skills/perf-audit/SKILL.md +98 -0
- package/agent-template/.claude/skills/release-eject-pr/SKILL.md +107 -0
- package/agent-template/.claude/skills/spec-approval/SKILL.md +106 -0
- package/agent-template/.claude/skills/test-hardening/SKILL.md +79 -0
- package/agent-template/.claude/skills/translations-i18n/SKILL.md +78 -0
- package/agent-template/.claude/skills/ux-design/SKILL.md +92 -0
- package/agent-template/.claude/skills/variables/SKILL.md +156 -0
- package/agent-template/.claude/skills/workflow-development/SKILL.md +192 -0
- package/agent-template/AGENTS.md +77 -0
- package/agent-template/CLAUDE.md +77 -0
- package/agent-template/docs/adr/0001-development-reload.md +16 -0
- package/agent-template/docs/adr/0002-durable-agent-execution.md +21 -0
- package/agent-template/docs/adr/0003-module-settings.md +22 -0
- package/agent-template/docs/adr/0004-enterprise-access-and-audit.md +36 -0
- package/agent-template/docs/adr/0005-sandbox-runtime-and-coding-agents.md +81 -0
- package/agent-template/docs/adr/0006-agentic-workflows.md +1702 -0
- package/agent-template/docs/adr/0007-module-owned-agents.md +429 -0
- package/agent-template/docs/adr/0008-database-adapter-contract.md +90 -0
- package/agent-template/docs/agent-contract.md +45 -0
- package/agent-template/docs/configuration.md +122 -0
- package/agent-template/docs/database-adapters.md +346 -0
- package/agent-template/docs/design-system.md +217 -0
- package/agent-template/docs/modules.md +146 -0
- package/agent-template/platform/scripts/build.mjs +38 -0
- package/agent-template/rulesync.jsonc +11 -0
- package/dist/bin.js +3 -1
- package/package.json +3 -2
- package/template/default/.prettierignore +9 -0
- package/template/default/README.md +12 -0
- package/template/default/flowdular.json +3 -3
- package/template/default/package.json +6 -2
- package/template/default/platform/octane.config.ts +17 -6
- 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,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`.
|