aw-spec-cli 0.1.8 → 0.1.9

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 (257) hide show
  1. package/assets/.appweaver/DESIGN-FORMAT.md +200 -0
  2. package/assets/.appweaver/ORCH-DIALECT.md +156 -0
  3. package/assets/.appweaver/RULE-PARTITION.md +175 -0
  4. package/assets/.appweaver/STACK-PROFILES.md +461 -0
  5. package/assets/.appweaver/ai-rules.md +180 -0
  6. package/assets/.appweaver/domain.json +1 -0
  7. package/assets/.appweaver/extensions/.registry +19 -0
  8. package/assets/.appweaver/extensions/agent-context/README.md +57 -0
  9. package/assets/.appweaver/extensions/agent-context/agent-context-config.yml +4 -0
  10. package/assets/.appweaver/extensions/agent-context/commands/aw-spec.agent-context.update.md +26 -0
  11. package/assets/.appweaver/extensions/agent-context/extension.yml +37 -0
  12. package/assets/.appweaver/extensions/agent-context/scripts/bash/update-agent-context.sh +201 -0
  13. package/assets/.appweaver/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +237 -0
  14. package/assets/.appweaver/extensions.yml +16 -0
  15. package/assets/.appweaver/feature.json +3 -0
  16. package/assets/.appweaver/init-options.json +9 -0
  17. package/assets/.appweaver/integration.json +15 -0
  18. package/assets/.appweaver/integrations/aw-spec.manifest.json +9 -0
  19. package/assets/.appweaver/interpreter/run-skill.py +1176 -0
  20. package/assets/.appweaver/memory/constitution.md +50 -0
  21. package/assets/.appweaver/orchestrator/.smoke-out/smoke.md +6 -0
  22. package/assets/.appweaver/orchestrator/AGENT-PROFILE.md +94 -0
  23. package/assets/.appweaver/orchestrator/README.md +300 -0
  24. package/assets/.appweaver/orchestrator/adapters/claude_agent_sdk.py +74 -0
  25. package/assets/.appweaver/orchestrator/adapters/google_antigravity.py +74 -0
  26. package/assets/.appweaver/orchestrator/modules/delta-design.orch.yaml +105 -0
  27. package/assets/.appweaver/orchestrator/modules/delta-spec.orch.yaml +101 -0
  28. package/assets/.appweaver/orchestrator/modules/domain-select.orch.yaml +90 -0
  29. package/assets/.appweaver/orchestrator/modules/lane-gate.orch.yaml +126 -0
  30. package/assets/.appweaver/orchestrator/modules/tech-select.orch.yaml +123 -0
  31. package/assets/.appweaver/orchestrator/orchestrator.py +1721 -0
  32. package/assets/.appweaver/orchestrator/rev-templates/ai-rules.reference.md +40 -0
  33. package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +101 -0
  34. package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +245 -0
  35. package/assets/.appweaver/orchestrator/rev-templates/domain-constitution.skeleton.md +63 -0
  36. package/assets/.appweaver/orchestrator/rev-templates/domain-requirements.skeleton.md +48 -0
  37. package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +59 -0
  38. package/assets/.appweaver/orchestrator/rev-templates/domain-rule-file.skeleton.md +39 -0
  39. package/assets/.appweaver/orchestrator/rev-templates/frontend-rule-file.skeleton.md +63 -0
  40. package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +116 -0
  41. package/assets/.appweaver/orchestrator/rev-templates/technical-constitution.skeleton.md +106 -0
  42. package/assets/.appweaver/orchestrator/rev-templates/technical-rule-file.skeleton.md +54 -0
  43. package/assets/.appweaver/orchestrator/rev-templates/ui-constitution.skeleton.md +125 -0
  44. package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +123 -0
  45. package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +294 -0
  46. package/assets/.appweaver/orchestrator/workflows/_smoke.orch.yaml +160 -0
  47. package/assets/.appweaver/orchestrator/workflows/aw-spec-add-component.orch.yaml +270 -0
  48. package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +934 -0
  49. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-delta-design.orch.yaml +251 -0
  50. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +265 -0
  51. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +437 -0
  52. package/assets/.appweaver/orchestrator/workflows/aw-spec-build.orch.yaml +197 -0
  53. package/assets/.appweaver/orchestrator/workflows/aw-spec-characterize.orch.yaml +475 -0
  54. package/assets/.appweaver/orchestrator/workflows/aw-spec-close-delta.orch.yaml +181 -0
  55. package/assets/.appweaver/orchestrator/workflows/aw-spec-constitution.orch.yaml +727 -0
  56. package/assets/.appweaver/orchestrator/workflows/aw-spec-demo.orch.yaml +100 -0
  57. package/assets/.appweaver/orchestrator/workflows/aw-spec-dependency-tree.orch.yaml +69 -0
  58. package/assets/.appweaver/orchestrator/workflows/aw-spec-deploy.orch.yaml +85 -0
  59. package/assets/.appweaver/orchestrator/workflows/aw-spec-design-ui.orch.yaml +386 -0
  60. package/assets/.appweaver/orchestrator/workflows/aw-spec-design.orch.yaml +382 -0
  61. package/assets/.appweaver/orchestrator/workflows/aw-spec-finalize-delta.orch.yaml +462 -0
  62. package/assets/.appweaver/orchestrator/workflows/aw-spec-foundation.orch.yaml +265 -0
  63. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-delta.orch.yaml +253 -0
  64. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-ui.orch.yaml +267 -0
  65. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +287 -0
  66. package/assets/.appweaver/orchestrator/workflows/aw-spec-inventory.orch.yaml +238 -0
  67. package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +1822 -0
  68. package/assets/.appweaver/orchestrator/workflows/aw-spec-parity.orch.yaml +293 -0
  69. package/assets/.appweaver/orchestrator/workflows/aw-spec-run.orch.yaml +194 -0
  70. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-domain.orch.yaml +83 -0
  71. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-feature.orch.yaml +128 -0
  72. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +296 -0
  73. package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +439 -0
  74. package/assets/.appweaver/scripts/bash/aw-inventory.sh +17 -0
  75. package/assets/.appweaver/scripts/bash/aw-parity.sh +13 -0
  76. package/assets/.appweaver/scripts/bash/aw-rev-constitution.sh +13 -0
  77. package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +2626 -0
  78. package/assets/.appweaver/scripts/bash/aw-xref.sh +15 -0
  79. package/assets/.appweaver/scripts/bash/common.sh +533 -0
  80. package/assets/.appweaver/scripts/powershell/aw-inventory.ps1 +17 -0
  81. package/assets/.appweaver/scripts/powershell/aw-parity.ps1 +13 -0
  82. package/assets/.appweaver/scripts/powershell/aw-rev-constitution.ps1 +13 -0
  83. package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +2232 -0
  84. package/assets/.appweaver/scripts/powershell/aw-xref.ps1 +15 -0
  85. package/assets/.appweaver/scripts/python/aw-component-catalog.py +121 -0
  86. package/assets/.appweaver/scripts/python/aw-inventory.py +1180 -0
  87. package/assets/.appweaver/scripts/python/aw-parity.py +380 -0
  88. package/assets/.appweaver/scripts/python/aw-rev-constitution.py +329 -0
  89. package/assets/.appweaver/scripts/python/aw-stack.py +1251 -0
  90. package/assets/.appweaver/scripts/python/aw-xref.py +1330 -0
  91. package/assets/.appweaver/scripts/python/validate_okf.py +352 -0
  92. package/assets/.appweaver/stack-profiles/angular.json +16 -0
  93. package/assets/.appweaver/stack-profiles/blazor-wasm.json +17 -0
  94. package/assets/.appweaver/stack-profiles/dotnet-webapi.json +15 -0
  95. package/assets/.appweaver/stack-profiles/go-chi.json +14 -0
  96. package/assets/.appweaver/stack-profiles/java-spring.json +16 -0
  97. package/assets/.appweaver/stack-profiles/nextjs.json +16 -0
  98. package/assets/.appweaver/stack-profiles/node-express.json +15 -0
  99. package/assets/.appweaver/stack-profiles/python-fastapi.json +16 -0
  100. package/assets/.appweaver/stack-profiles/react-vite.json +17 -0
  101. package/assets/.appweaver/stack-profiles/sveltekit.json +16 -0
  102. package/assets/.appweaver/stack-profiles/vue-vite.json +17 -0
  103. package/assets/.appweaver/stacks.json +3 -0
  104. package/assets/.appweaver/templates/constitution-domain-template.md +116 -0
  105. package/assets/.appweaver/templates/constitution-technical-template.md +108 -0
  106. package/assets/.appweaver/templates/constitution-ui-template.md +116 -0
  107. package/assets/.appweaver/templates/delta-design-template.md +69 -0
  108. package/assets/.appweaver/templates/delta-spec-template.md +63 -0
  109. package/assets/.appweaver/templates/design-template.md +383 -0
  110. package/assets/.appweaver/templates/okf-concept-template.md +114 -0
  111. package/assets/.appweaver/templates/parity-manifest-template.json +49 -0
  112. package/assets/.appweaver/templates/source-map-template.md +85 -0
  113. package/assets/.appweaver/templates/spec-template.md +309 -0
  114. package/assets/.appweaver/templates/ui-design-template.md +273 -0
  115. package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.Reference.pack.txt +25248 -0
  116. package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.pack.txt +5726 -0
  117. package/assets/foundations/dotnet/ModularMonolith/pack-foundation.ps1 +145 -0
  118. package/assets/foundations/dotnet/ModularMonolith/pack-foundation.sh +196 -0
  119. package/assets/foundations/dotnet/ModularMonolith/pack-reference-foundation.ps1 +157 -0
  120. package/assets/foundations/dotnet/ModularMonolith/pack-reference-foundation.sh +209 -0
  121. package/assets/foundations/dotnet/ModularMonolith/unpack-foundation.ps1 +126 -0
  122. package/assets/foundations/dotnet/ModularMonolith/unpack-foundation.sh +217 -0
  123. package/assets/foundations/dotnet/ModularMonolith/unpack-reference-foundation.ps1 +129 -0
  124. package/assets/foundations/dotnet/ModularMonolith/unpack-reference-foundation.sh +218 -0
  125. package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.Reference.pack.txt +19318 -0
  126. package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.pack.txt +2833 -0
  127. package/assets/foundations/dotnet/VerticalSlice/pack-foundation.ps1 +145 -0
  128. package/assets/foundations/dotnet/VerticalSlice/pack-foundation.sh +196 -0
  129. package/assets/foundations/dotnet/VerticalSlice/pack-reference-foundation.ps1 +157 -0
  130. package/assets/foundations/dotnet/VerticalSlice/pack-reference-foundation.sh +209 -0
  131. package/assets/foundations/dotnet/VerticalSlice/unpack-foundation.ps1 +126 -0
  132. package/assets/foundations/dotnet/VerticalSlice/unpack-foundation.sh +217 -0
  133. package/assets/foundations/dotnet/VerticalSlice/unpack-reference-foundation.ps1 +129 -0
  134. package/assets/foundations/dotnet/VerticalSlice/unpack-reference-foundation.sh +218 -0
  135. package/assets/foundations/dotnet/components/Email/README.md +119 -0
  136. package/assets/foundations/dotnet/components/Email/ReferenceEndpoints/SendEmailEndpoint.cs +84 -0
  137. package/assets/foundations/dotnet/components/Email/integration.md +300 -0
  138. package/assets/foundations/dotnet/components/Jobs/README.md +113 -0
  139. package/assets/foundations/dotnet/components/Jobs/integration.md +259 -0
  140. package/assets/foundations/dotnet/components/QrGenerator/README.md +85 -0
  141. package/assets/foundations/dotnet/components/QrGenerator/ReferenceEndpoints/GenerateQrEndpoint.cs +57 -0
  142. package/assets/foundations/dotnet/components/QrGenerator/integration.md +230 -0
  143. package/assets/foundations/dotnet/components/README.md +74 -0
  144. package/assets/guardrails/README.md +222 -0
  145. package/assets/guardrails/domain/healthcare/ai-rules.domain.md +34 -0
  146. package/assets/guardrails/domain/healthcare/api-versioning.domain.md +17 -0
  147. package/assets/guardrails/domain/healthcare/auditing.domain.md +97 -0
  148. package/assets/guardrails/domain/healthcare/authorization.domain.md +26 -0
  149. package/assets/guardrails/domain/healthcare/clinical-terms.md +20 -0
  150. package/assets/guardrails/domain/healthcare/coding-standards.domain.md +26 -0
  151. package/assets/guardrails/domain/healthcare/consent.md +19 -0
  152. package/assets/guardrails/domain/healthcare/cqrs.domain.md +12 -0
  153. package/assets/guardrails/domain/healthcare/data-classification.domain.md +28 -0
  154. package/assets/guardrails/domain/healthcare/dependency-policy.domain.md +11 -0
  155. package/assets/guardrails/domain/healthcare/dicom.md +15 -0
  156. package/assets/guardrails/domain/healthcare/domain-constitution.md +119 -0
  157. package/assets/guardrails/domain/healthcare/domain-driven-design.domain.md +28 -0
  158. package/assets/guardrails/domain/healthcare/eventing.domain.md +18 -0
  159. package/assets/guardrails/domain/healthcare/fhir.md +36 -0
  160. package/assets/guardrails/domain/healthcare/folder-structure.domain.md +25 -0
  161. package/assets/guardrails/domain/healthcare/hipaa.md +34 -0
  162. package/assets/guardrails/domain/healthcare/hl7.md +15 -0
  163. package/assets/guardrails/domain/healthcare/ihe-conformance.md +31 -0
  164. package/assets/guardrails/domain/healthcare/integration-terms.md +21 -0
  165. package/assets/guardrails/domain/healthcare/persistence.domain.md +20 -0
  166. package/assets/guardrails/domain/healthcare/terminology.md +30 -0
  167. package/assets/guardrails/domain/healthcare/testing.domain.md +15 -0
  168. package/assets/guardrails/domain/healthcare/ux/accessibility-standards.md +36 -0
  169. package/assets/guardrails/domain/healthcare/ux/content-design.md +32 -0
  170. package/assets/guardrails/domain/healthcare/ux/interaction-states.md +44 -0
  171. package/assets/guardrails/domain/healthcare/ux/journey-mapping.md +40 -0
  172. package/assets/guardrails/domain/healthcare/vertical-slices.domain.md +18 -0
  173. package/assets/guardrails/domain/healthcare/zero-trust.domain.md +12 -0
  174. package/assets/guardrails/domain/pharma/ai-rules.domain.md +32 -0
  175. package/assets/guardrails/domain/pharma/api-versioning.domain.md +20 -0
  176. package/assets/guardrails/domain/pharma/atc.md +22 -0
  177. package/assets/guardrails/domain/pharma/auditing.domain.md +90 -0
  178. package/assets/guardrails/domain/pharma/authorization.domain.md +25 -0
  179. package/assets/guardrails/domain/pharma/coding-standards.domain.md +28 -0
  180. package/assets/guardrails/domain/pharma/cqrs.domain.md +16 -0
  181. package/assets/guardrails/domain/pharma/data-classification.domain.md +24 -0
  182. package/assets/guardrails/domain/pharma/data-provenance.md +21 -0
  183. package/assets/guardrails/domain/pharma/dependency-policy.domain.md +11 -0
  184. package/assets/guardrails/domain/pharma/domain-constitution.md +113 -0
  185. package/assets/guardrails/domain/pharma/domain-driven-design.domain.md +36 -0
  186. package/assets/guardrails/domain/pharma/domain-requirements.sample.md +103 -0
  187. package/assets/guardrails/domain/pharma/eventing.domain.md +18 -0
  188. package/assets/guardrails/domain/pharma/fhir.md +31 -0
  189. package/assets/guardrails/domain/pharma/folder-structure.domain.md +26 -0
  190. package/assets/guardrails/domain/pharma/hl7.md +17 -0
  191. package/assets/guardrails/domain/pharma/idmp.md +26 -0
  192. package/assets/guardrails/domain/pharma/integration-terms.md +21 -0
  193. package/assets/guardrails/domain/pharma/ndc.md +28 -0
  194. package/assets/guardrails/domain/pharma/persistence.domain.md +23 -0
  195. package/assets/guardrails/domain/pharma/pharma-terms.md +27 -0
  196. package/assets/guardrails/domain/pharma/product-lifecycle.domain.md +30 -0
  197. package/assets/guardrails/domain/pharma/regulatory-compliance.md +19 -0
  198. package/assets/guardrails/domain/pharma/terminology.md +32 -0
  199. package/assets/guardrails/domain/pharma/testing.domain.md +19 -0
  200. package/assets/guardrails/domain/pharma/vertical-slices.domain.md +17 -0
  201. package/assets/guardrails/domain/pharma/zero-trust.domain.md +12 -0
  202. package/assets/guardrails/projects/dotnet-default-project/domain/domain-requirements.md +58 -0
  203. package/assets/guardrails/projects/dotnet-default-project/domain-rule-bindings.md +113 -0
  204. package/assets/guardrails/projects/dotnet-default-project/frontend/ui-requirements.md +43 -0
  205. package/assets/guardrails/projects/dotnet-default-project/service/technical-requirements.md +40 -0
  206. package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +263 -0
  207. package/assets/guardrails/requirement-spec.txt +27 -0
  208. package/assets/guardrails/technology/dotnet-webapi/PACKAGING.md +184 -0
  209. package/assets/guardrails/technology/dotnet-webapi/api-versioning.md +44 -0
  210. package/assets/guardrails/technology/dotnet-webapi/auditing.md +96 -0
  211. package/assets/guardrails/technology/dotnet-webapi/authorization-matrix.md +14 -0
  212. package/assets/guardrails/technology/dotnet-webapi/authorization.md +39 -0
  213. package/assets/guardrails/technology/dotnet-webapi/clean-architecture.md +54 -0
  214. package/assets/guardrails/technology/dotnet-webapi/coding-standards.md +87 -0
  215. package/assets/guardrails/technology/dotnet-webapi/cqrs.md +63 -0
  216. package/assets/guardrails/technology/dotnet-webapi/data-classification.md +38 -0
  217. package/assets/guardrails/technology/dotnet-webapi/dependency-policy.md +40 -0
  218. package/assets/guardrails/technology/dotnet-webapi/domain-driven-design.md +91 -0
  219. package/assets/guardrails/technology/dotnet-webapi/eventing.md +57 -0
  220. package/assets/guardrails/technology/dotnet-webapi/examples/api-versioning.md +75 -0
  221. package/assets/guardrails/technology/dotnet-webapi/examples/auditing.md +84 -0
  222. package/assets/guardrails/technology/dotnet-webapi/examples/authorization.md +68 -0
  223. package/assets/guardrails/technology/dotnet-webapi/examples/clean-architecture.md +37 -0
  224. package/assets/guardrails/technology/dotnet-webapi/examples/cqrs.md +97 -0
  225. package/assets/guardrails/technology/dotnet-webapi/examples/domain-driven-design.md +141 -0
  226. package/assets/guardrails/technology/dotnet-webapi/examples/eventing.md +46 -0
  227. package/assets/guardrails/technology/dotnet-webapi/examples/persistence.md +207 -0
  228. package/assets/guardrails/technology/dotnet-webapi/examples/vertical-slices.md +151 -0
  229. package/assets/guardrails/technology/dotnet-webapi/examples/zero-trust.md +48 -0
  230. package/assets/guardrails/technology/dotnet-webapi/folder-structure.md +61 -0
  231. package/assets/guardrails/technology/dotnet-webapi/modular-monolith.md +47 -0
  232. package/assets/guardrails/technology/dotnet-webapi/persistence.md +82 -0
  233. package/assets/guardrails/technology/dotnet-webapi/technology-constitution.md +162 -0
  234. package/assets/guardrails/technology/dotnet-webapi/testing.md +55 -0
  235. package/assets/guardrails/technology/dotnet-webapi/vertical-slices.md +70 -0
  236. package/assets/guardrails/technology/dotnet-webapi/zero-trust.md +48 -0
  237. package/assets/guardrails/technology/java-spring/README.md +62 -0
  238. package/assets/guardrails/technology/nextjs/accessibility-implementation.md +56 -0
  239. package/assets/guardrails/technology/nextjs/api-client.md +56 -0
  240. package/assets/guardrails/technology/nextjs/api-integration.dotnet-webapi.md +174 -0
  241. package/assets/guardrails/technology/nextjs/api-integration.java-spring.md +203 -0
  242. package/assets/guardrails/technology/nextjs/auth-session.md +68 -0
  243. package/assets/guardrails/technology/nextjs/client-security.md +69 -0
  244. package/assets/guardrails/technology/nextjs/component-architecture.md +60 -0
  245. package/assets/guardrails/technology/nextjs/component-conventions.md +58 -0
  246. package/assets/guardrails/technology/nextjs/design-system.md +60 -0
  247. package/assets/guardrails/technology/nextjs/error-handling.md +72 -0
  248. package/assets/guardrails/technology/nextjs/forms-and-validation.md +75 -0
  249. package/assets/guardrails/technology/nextjs/frontend-testing.md +94 -0
  250. package/assets/guardrails/technology/nextjs/i18n.md +57 -0
  251. package/assets/guardrails/technology/nextjs/observability.md +67 -0
  252. package/assets/guardrails/technology/nextjs/performance-budgets.md +66 -0
  253. package/assets/guardrails/technology/nextjs/routing-navigation.md +52 -0
  254. package/assets/guardrails/technology/nextjs/state-management.md +70 -0
  255. package/assets/guardrails/technology/nextjs/ui-constitution.md +166 -0
  256. package/package.json +1 -1
  257. package/assets/docs/pharma-constitution.my-ref.md +0 -86
@@ -0,0 +1,270 @@
1
+ # =============================================================================
2
+ # aw-spec-add-component (orchestrator) — add an opt-in AppWeaver framework component
3
+ #
4
+ # Picks a component from
5
+ # foundations/<ecosystem>/components/ for the ecosystem the backend lane declares, parses its
6
+ # implementation catalog, asks which implementation(s)
7
+ # to wire, resolves the host/startup project (via Program.cs), authors the edits
8
+ # STRICTLY from the component's integration.md runbook, then VERIFIES the wiring
9
+ # (dotnet build + the R0.2a dual-registration guard, self-correcting up to 2×).
10
+ #
11
+ # This is the ONLY place framework components are installed. `implement` codes an
12
+ # aggregate against a component's PORT (e.g. IEmailService) but never wires the
13
+ # component itself — run this after implement (or whenever a port needs a provider).
14
+ # The per-component foundations/<ecosystem>/components/<C>/integration.md runbook is the AUTHORITY on
15
+ # what to add; the model reads it (in context) and authors the edits from it. It is
16
+ # pure technology (domain-agnostic) — no domain rule files are involved.
17
+ #
18
+ # Prereq: a scaffolded host project (/appweaver foundation) — components wire INTO it.
19
+ #
20
+ # Launch: /appweaver add-component [strategy] [ComponentName]
21
+ # e.g. /appweaver add-component Email
22
+ # Action semantics: .appweaver/ORCH-DIALECT.md
23
+ # =============================================================================
24
+
25
+ name: aw-spec-add-component
26
+ description: Add an opt-in AppWeaver framework component — pick one from the declared ecosystem's foundations/<ecosystem>/components/, choose implementation(s) from its catalog, wire the code in per its integration.md runbook, and verify the build + dual-registration. Pure technology; not a per-feature phase.
27
+ version: 1.0.0
28
+ agent_agnostic: true
29
+ dialect: aw-spec.orchestrator/v1
30
+
31
+ inputs:
32
+ user_input:
33
+ description: Optional component folder name to select directly (e.g. Email).
34
+ required: false
35
+ bind: USER_INPUT
36
+
37
+ scripts:
38
+ actions:
39
+ sh: .appweaver/scripts/bash/aw-spec-actions.sh
40
+ ps1: .appweaver/scripts/powershell/aw-spec-actions.ps1
41
+
42
+ standards:
43
+ - { path: .appweaver/ai-rules.md } # kit-resident: the universal operating rules, every flow
44
+
45
+ vars:
46
+ verify_ok: "false" # verify-loop guard, flipped by component-verify
47
+
48
+ workflow:
49
+
50
+ # 1. Discover components — foundations/<ecosystem>/components/* that have an integration.md,
51
+ # for the ecosystem the BACKEND lane declares. The dir it resolved is echoed back as
52
+ # components_dir and every later path is built from it, so the runbook the model reads
53
+ # is always the one for the stack the code is actually in.
54
+ - id: list_components
55
+ action: execute_script
56
+ script: { ref: actions }
57
+ subcommand: list-components
58
+ outputs:
59
+ - { name: components, from: "$.components" }
60
+ - { name: components_dir, from: "$.dir" }
61
+ - { name: components_eco, from: "$.ecosystem" }
62
+
63
+ - id: guard_components
64
+ action: verify_context
65
+ require_non_empty: components
66
+ on_empty: stop
67
+ on_empty_message: >
68
+ No components are available for the `{{components_eco}}` ecosystem this repository
69
+ declares in .appweaver/stacks.json — {{components_dir}}/ holds no runbook. A component
70
+ is installed by editing the host project's build files and its startup registration,
71
+ so it only exists for the ecosystem whose build files it knows how to edit; a
72
+ component from another ecosystem is not a substitute. Add one under
73
+ {{components_dir}}/<Name>/integration.md (see the README in that tree for the
74
+ expected layout), or wire the capability with the stack's own libraries — implement
75
+ already codes against the design's PORT, and add-component only supplies a provider.
76
+
77
+ # 2. Select the component (direct arg fast-path, else interactive; lone option confirms).
78
+ - id: select_component
79
+ action: user_select
80
+ prompt: "Select a component to add:"
81
+ options_from_variable: components
82
+ preselect_from: USER_INPUT
83
+ single_option_confirm: true
84
+ outputs:
85
+ - { name: chosen, from: selection }
86
+
87
+ - id: guard_chosen
88
+ action: verify_context
89
+ require_non_empty: chosen
90
+ on_empty: stop
91
+ on_empty_message: "No component selected — nothing to do."
92
+
93
+ # 3. Extract the implementation catalog from the runbook — DETERMINISTIC markdown
94
+ # table parse (script, NO model). integrable=false when no catalog table exists.
95
+ - id: extract_catalog
96
+ action: execute_script
97
+ script: { ref: actions }
98
+ subcommand: component-catalog
99
+ args: ["--file", "{{components_dir}}/{{chosen}}/integration.md"]
100
+ outputs:
101
+ - { name: integrable, from: "$.integrable" }
102
+ - { name: impl_keys, from: "$.impl_keys" }
103
+ - { name: implementations, from: "$.implementations" }
104
+
105
+ - id: catalog_gate
106
+ action: verify_context
107
+ require_true: integrable
108
+ on_false: stop
109
+ on_false_message: "Component '{{chosen}}' is not integrable via this command (no implementation catalog in integration.md)."
110
+
111
+ # 4. Select implementation(s) (multi-select). Empty selection => leave untouched.
112
+ - id: select_impls
113
+ action: ask
114
+ prompt: "Select one or more '{{chosen}}' implementations to wire in (honor the runbook's grouping rules):"
115
+ options_from: "{{impl_keys}}"
116
+ multi: true
117
+ answer_var: chosen_impls
118
+
119
+ - id: guard_selection
120
+ action: verify_context
121
+ require_non_empty: chosen_impls
122
+ on_empty: stop
123
+ on_empty_message: "No implementation selected — project left untouched. Re-run /appweaver add-component any time."
124
+
125
+ # 5. Resolve the host/startup project (by locating Program.cs).
126
+ - id: find_host
127
+ action: execute_script
128
+ script: { ref: actions }
129
+ subcommand: find-host-project
130
+ outputs:
131
+ - { name: host_found, from: "$.found" }
132
+ - { name: host_dir, from: "$.project_dir" }
133
+ - { name: program_cs, from: "$.program_cs" }
134
+ - { name: host_csproj, from: "$.csproj" }
135
+ - { name: host_eco, from: "$.ecosystem" }
136
+ - { name: host_search, from: "$.searched" }
137
+
138
+ - id: host_gate
139
+ action: verify_context
140
+ require_true: host_found
141
+ on_false: stop
142
+ on_false_message: >
143
+ No .NET host/startup project found — nothing named Program.cs under `{{host_search}}`,
144
+ the source path the backend lane declares, nor elsewhere in this repository. Wiring a
145
+ component means editing a host project's startup registration, so there has to be one
146
+ to edit. If this is a .NET repository, scaffold it first with /appweaver foundation.
147
+ If it is not — this lane's ecosystem is `{{host_eco}}` — then this catalogue's runbooks
148
+ do not apply to it: components are per-ecosystem, and the capability should be wired
149
+ with the stack's own libraries against the port the design declares.
150
+
151
+ # 6. Pre-execution hooks.
152
+ - id: resolve_pre_hooks
153
+ action: execute_script
154
+ script: { ref: actions }
155
+ subcommand: resolve-hooks
156
+ args: ["--phase", "before_addcomponent"]
157
+ outputs:
158
+ - { name: before_hooks, from: "$.hooks" }
159
+ - id: dispatch_pre_hooks
160
+ action: dispatch_hooks
161
+ hooks_from_variable: before_hooks
162
+
163
+ # 7. Plan the concrete file edits from the runbook + selected implementations.
164
+ - id: plan_edits
165
+ action: agent_query
166
+ context: ["{{components_dir}}/{{chosen}}/integration.md"]
167
+ include_standards: false
168
+ task: |
169
+ Using the runbook (in context) apply the "Common steps" plus each selected
170
+ implementation's block for: {{chosen_impls}}. The host/startup project is
171
+ {{host_dir}} (Program.cs at {{program_cs}}; csproj {{host_csproj}}). Honor the
172
+ cross-cutting rules (versions only in Directory.Packages.props; register in the
173
+ host project's AddInfrastructure AND AddAspireInfrastructure when both exist; set
174
+ options.Provider; never commit secrets). Return ONLY JSON listing each file to
175
+ create or edit, the active provider, and the exact registration marker token a
176
+ deterministic guard can look for in each infrastructure-registration method.
177
+ schema: { edits: [ { path: "<repo-relative path>", purpose: "<one line>" } ], active_provider: "<provider key>", registration_marker: "<exact code token that MUST appear in each infra-registration method>" }
178
+ mock: { edits: [], active_provider: "", registration_marker: "" }
179
+ outputs:
180
+ - { name: edits, from: "$.edits" }
181
+ - { name: active_provider, from: "$.active_provider" }
182
+ - { name: registration_marker, from: "$.registration_marker" }
183
+
184
+ # 8. Apply each edit — full updated file content, guided by the runbook in context.
185
+ # build_context loads the runbook envelope; the agent Reads each target file.
186
+ - id: ctx_apply
187
+ action: build_context
188
+ context:
189
+ - { path: "{{components_dir}}/{{chosen}}/integration.md" }
190
+ - { path: "{{components_dir}}/{{chosen}}/README.md", optional: true }
191
+ - id: apply_loop
192
+ action: loop
193
+ over: "{{edits}}"
194
+ as: e
195
+ steps:
196
+ - id: apply_edit
197
+ action: agent_generate
198
+ tools: "Read,Write,Edit"
199
+ permission_mode: acceptEdits
200
+ task: |
201
+ Apply the '{{chosen}}' component runbook edit (integration.md in context) to the
202
+ single file {{e.path}} — {{e.purpose}}. Selected implementations: {{chosen_impls}};
203
+ active provider: {{active_provider}}; host project: {{host_dir}}.
204
+ Read {{e.path}} first if it exists and PRESERVE all existing content, applying
205
+ ONLY the runbook's additions (package version, PackageReference, registration
206
+ line, config); create it if absent. Change NO other file.
207
+ outputs:
208
+ - { name: applied_files, from: "$.files" }
209
+
210
+ # 9. Post-wiring verification — `dotnet build` the host project + the R0.2a
211
+ # dual-registration guard (a script, NO model judgment), self-correcting up to 2×.
212
+ # Build degrades gracefully (skipped => ok) when the .NET SDK is absent.
213
+ - id: ctx_verify
214
+ action: build_context
215
+ context:
216
+ - { path: "{{components_dir}}/{{chosen}}/integration.md" }
217
+ - id: verify_loop
218
+ action: loop
219
+ while: "{{verify_ok}} != true"
220
+ max_iterations: 2
221
+ steps:
222
+ - id: verify
223
+ action: execute_script
224
+ script: { ref: actions }
225
+ subcommand: component-verify
226
+ args: ["--host-dir", "{{host_dir}}", "--host-csproj", "{{host_csproj}}", "--marker", "{{registration_marker}}"]
227
+ outputs:
228
+ - { name: verify_ok, from: "$.ok" }
229
+ - { name: verify_can_fix, from: "$.can_fix" }
230
+ - { name: fix_target, from: "$.fix_target" }
231
+ - { name: fix_reason, from: "$.fix_reason" }
232
+ - id: verify_break
233
+ action: break
234
+ condition: "{{verify_ok}} == true"
235
+ - id: verify_fix
236
+ action: agent_generate
237
+ condition: "{{verify_can_fix}} == true"
238
+ tools: "Read,Write,Edit"
239
+ permission_mode: acceptEdits
240
+ task: |
241
+ The '{{chosen}}' component wiring failed verification. Fix ONLY the file
242
+ {{fix_target}} to resolve it, following the integration.md runbook (in context)
243
+ and preserving all unrelated existing content. If the issue is R0.2a dual
244
+ registration, add the component's registration to that method exactly as the
245
+ other registration method already has it (adjusting only provider-specific calls).
246
+ Reason: {{fix_reason}}
247
+ Read {{fix_target}} first; change NO other file.
248
+
249
+ # 10. Post-execution hooks.
250
+ - id: resolve_post_hooks
251
+ action: execute_script
252
+ script: { ref: actions }
253
+ subcommand: resolve-hooks
254
+ args: ["--phase", "after_addcomponent"]
255
+ outputs:
256
+ - { name: after_hooks, from: "$.hooks" }
257
+ - id: dispatch_post_hooks
258
+ action: dispatch_hooks
259
+ hooks_from_variable: after_hooks
260
+
261
+ outputs:
262
+ component: "{{chosen}}"
263
+ implementations: "{{chosen_impls}}"
264
+ active_provider: "{{active_provider}}"
265
+ edits: "{{edits}}"
266
+ host_project: "{{host_dir}}"
267
+ build_verified: "{{verify_ok}}"
268
+ verify_detail: "{{fix_reason}}"
269
+ note: "Component wired in and verified (dotnet build + R0.2a dual-registration guard). If build_verified is false, verify_detail says what still needs a manual touch. Complete any out-of-band follow-ups (secrets, migrations, DDL) the runbook calls for."
270
+ next: "Run /appweaver build to compile, or continue implementing features that depend on this component's port."