aw-spec-cli 0.1.3 → 0.1.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 (230) hide show
  1. package/README.md +291 -0
  2. package/assets/.agents/agent.json +28 -0
  3. package/assets/.agents/skills/aw-spec-orch/SKILL.md +56 -0
  4. package/assets/.agents/skills/aw-spec-orch-demo/SKILL.md +59 -0
  5. package/assets/.aw-spec/DESIGN-FORMAT.md +151 -0
  6. package/assets/.aw-spec/ORCH-DIALECT.md +156 -0
  7. package/assets/.aw-spec/RULE-PARTITION.md +126 -0
  8. package/assets/.aw-spec/extensions/agent-context/extension.yml +12 -9
  9. package/assets/.aw-spec/extensions.yml +12 -19
  10. package/assets/.aw-spec/integrations/aw-spec.manifest.json +1 -9
  11. package/assets/.aw-spec/interpreter/run-skill.py +1158 -0
  12. package/assets/.aw-spec/orchestrator/AGENT-PROFILE.md +94 -0
  13. package/assets/.aw-spec/orchestrator/README.md +300 -0
  14. package/assets/.aw-spec/orchestrator/adapters/claude_agent_sdk.py +74 -0
  15. package/assets/.aw-spec/orchestrator/adapters/google_antigravity.py +74 -0
  16. package/assets/.aw-spec/orchestrator/modules/delta-design.orch.yaml +105 -0
  17. package/assets/.aw-spec/orchestrator/modules/delta-spec.orch.yaml +79 -0
  18. package/assets/.aw-spec/orchestrator/modules/domain-select.orch.yaml +81 -0
  19. package/assets/.aw-spec/orchestrator/modules/tech-select.orch.yaml +75 -0
  20. package/assets/.aw-spec/orchestrator/orchestrator.py +1721 -0
  21. package/assets/.aw-spec/orchestrator/rev-templates/ai-rules.reference.md +40 -0
  22. package/assets/.aw-spec/orchestrator/rev-templates/comandrulemap.skeleton.md +59 -0
  23. package/assets/.aw-spec/orchestrator/rev-templates/commandtechrulemap.skeleton.md +97 -0
  24. package/assets/.aw-spec/orchestrator/rev-templates/domain-constitution.skeleton.md +61 -0
  25. package/assets/.aw-spec/orchestrator/rev-templates/domain-requirements.skeleton.md +48 -0
  26. package/assets/.aw-spec/orchestrator/rev-templates/domain-rule-file.skeleton.md +39 -0
  27. package/assets/.aw-spec/orchestrator/rev-templates/technical-constitution.skeleton.md +106 -0
  28. package/assets/.aw-spec/orchestrator/rev-templates/technical-rule-file.skeleton.md +54 -0
  29. package/assets/.aw-spec/orchestrator/workflows/_smoke.orch.yaml +160 -0
  30. package/assets/.aw-spec/orchestrator/workflows/aw-spec-add-component.orch.yaml +244 -0
  31. package/assets/.aw-spec/orchestrator/workflows/aw-spec-adopt.orch.yaml +775 -0
  32. package/assets/.aw-spec/orchestrator/workflows/aw-spec-analyze-delta-design.orch.yaml +248 -0
  33. package/assets/.aw-spec/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +261 -0
  34. package/assets/.aw-spec/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +425 -0
  35. package/assets/.aw-spec/orchestrator/workflows/aw-spec-build.orch.yaml +188 -0
  36. package/assets/.aw-spec/orchestrator/workflows/aw-spec-characterize.orch.yaml +474 -0
  37. package/assets/.aw-spec/orchestrator/workflows/aw-spec-close-delta.orch.yaml +181 -0
  38. package/assets/.aw-spec/orchestrator/workflows/aw-spec-constitution.orch.yaml +284 -0
  39. package/assets/.aw-spec/orchestrator/workflows/aw-spec-demo.orch.yaml +103 -0
  40. package/assets/.aw-spec/orchestrator/workflows/aw-spec-dependency-tree.orch.yaml +69 -0
  41. package/assets/.aw-spec/orchestrator/workflows/aw-spec-deploy.orch.yaml +85 -0
  42. package/assets/.aw-spec/orchestrator/workflows/aw-spec-design.orch.yaml +382 -0
  43. package/assets/.aw-spec/orchestrator/workflows/aw-spec-finalize-delta.orch.yaml +382 -0
  44. package/assets/.aw-spec/orchestrator/workflows/aw-spec-foundation.orch.yaml +246 -0
  45. package/assets/.aw-spec/orchestrator/workflows/aw-spec-implement-delta.orch.yaml +231 -0
  46. package/assets/.aw-spec/orchestrator/workflows/aw-spec-implement.orch.yaml +258 -0
  47. package/assets/.aw-spec/orchestrator/workflows/aw-spec-inventory.orch.yaml +236 -0
  48. package/assets/.aw-spec/orchestrator/workflows/aw-spec-onboard.orch.yaml +949 -0
  49. package/assets/.aw-spec/orchestrator/workflows/aw-spec-parity.orch.yaml +293 -0
  50. package/assets/.aw-spec/orchestrator/workflows/aw-spec-run.orch.yaml +177 -0
  51. package/assets/.aw-spec/orchestrator/workflows/aw-spec-select-domain.orch.yaml +79 -0
  52. package/assets/.aw-spec/orchestrator/workflows/aw-spec-select-feature.orch.yaml +128 -0
  53. package/assets/.aw-spec/orchestrator/workflows/aw-spec-specify.orch.yaml +412 -0
  54. package/assets/.aw-spec/scripts/bash/aw-inventory.sh +14 -0
  55. package/assets/.aw-spec/scripts/bash/aw-parity.sh +13 -0
  56. package/assets/.aw-spec/scripts/bash/aw-rev-constitution.sh +13 -0
  57. package/assets/.aw-spec/scripts/bash/aw-spec-actions.sh +1899 -0
  58. package/assets/.aw-spec/scripts/bash/aw-xref.sh +15 -0
  59. package/assets/.aw-spec/scripts/bash/common.sh +11 -60
  60. package/assets/.aw-spec/scripts/powershell/aw-inventory.ps1 +14 -0
  61. package/assets/.aw-spec/scripts/powershell/aw-parity.ps1 +13 -0
  62. package/assets/.aw-spec/scripts/powershell/aw-rev-constitution.ps1 +13 -0
  63. package/assets/.aw-spec/scripts/powershell/aw-spec-actions.ps1 +1563 -0
  64. package/assets/.aw-spec/scripts/powershell/aw-xref.ps1 +15 -0
  65. package/assets/.aw-spec/scripts/python/aw-inventory.py +683 -0
  66. package/assets/.aw-spec/scripts/python/aw-parity.py +380 -0
  67. package/assets/.aw-spec/scripts/python/aw-rev-constitution.py +312 -0
  68. package/assets/.aw-spec/scripts/python/aw-xref.py +1330 -0
  69. package/assets/.aw-spec/scripts/python/validate_okf.py +349 -0
  70. package/assets/.aw-spec/templates/constitution-domain-template.md +75 -0
  71. package/assets/.aw-spec/templates/constitution-technical-template.md +70 -0
  72. package/assets/.aw-spec/templates/delta-design-template.md +69 -0
  73. package/assets/.aw-spec/templates/delta-spec-template.md +60 -0
  74. package/assets/.aw-spec/templates/design-template.md +383 -0
  75. package/assets/.aw-spec/templates/okf-concept-template.md +103 -0
  76. package/assets/.aw-spec/templates/parity-manifest-template.json +49 -0
  77. package/assets/.aw-spec/templates/source-map-template.md +85 -0
  78. package/assets/.aw-spec/templates/spec-template.md +192 -71
  79. package/assets/.claude/agent.json +27 -0
  80. package/assets/.claude/skills/aw-spec-orch/SKILL.md +55 -0
  81. package/assets/.claude/skills/aw-spec-orch-demo/SKILL.md +59 -0
  82. package/assets/.kilocode/agent.json +28 -0
  83. package/assets/.kilocode/workflows/aw-spec-orch-demo.md +59 -0
  84. package/assets/.kilocode/workflows/aw-spec-orch.md +55 -0
  85. package/assets/docs/architecture/clean-architecture.md +1 -1
  86. package/assets/docs/architecture/cqrs.md +1 -1
  87. package/assets/docs/architecture/eventing.md +1 -1
  88. package/assets/docs/architecture/folder-structure.md +1 -1
  89. package/assets/docs/architecture/modular-monolith.md +1 -1
  90. package/assets/docs/architecture/persistence.md +1 -1
  91. package/assets/docs/architecture/testing.md +1 -1
  92. package/assets/docs/architecture/vertical-slices.md +1 -1
  93. package/assets/docs/components/Email/README.md +1 -1
  94. package/assets/docs/components/Jobs/README.md +1 -1
  95. package/assets/docs/components/QrGenerator/README.md +1 -1
  96. package/assets/docs/components/README.md +1 -1
  97. package/assets/docs/domain/domain-driven-design.md +1 -1
  98. package/assets/docs/domainspecs/healthcare/api-versioning.domain.md +1 -1
  99. package/assets/docs/domainspecs/healthcare/auditing.domain.md +86 -18
  100. package/assets/docs/domainspecs/healthcare/authorization.domain.md +1 -1
  101. package/assets/docs/domainspecs/healthcare/clinical-terms.md +1 -1
  102. package/assets/docs/domainspecs/healthcare/coding-standards.domain.md +1 -1
  103. package/assets/docs/domainspecs/healthcare/comandrulemap.md +58 -124
  104. package/assets/docs/domainspecs/healthcare/commandtechrulemap.md +119 -0
  105. package/assets/docs/domainspecs/healthcare/consent.md +1 -1
  106. package/assets/docs/domainspecs/healthcare/cqrs.domain.md +1 -1
  107. package/assets/docs/domainspecs/healthcare/data-classification.domain.md +1 -1
  108. package/assets/docs/domainspecs/healthcare/dependency-policy.domain.md +1 -1
  109. package/assets/docs/domainspecs/healthcare/dicom.md +1 -1
  110. package/assets/docs/domainspecs/healthcare/domain-driven-design.domain.md +1 -1
  111. package/assets/docs/domainspecs/healthcare/eventing.domain.md +1 -1
  112. package/assets/docs/domainspecs/healthcare/fhir.md +1 -1
  113. package/assets/docs/domainspecs/healthcare/folder-structure.domain.md +1 -1
  114. package/assets/docs/domainspecs/healthcare/hipaa.md +1 -1
  115. package/assets/docs/domainspecs/healthcare/hl7.md +1 -1
  116. package/assets/docs/domainspecs/healthcare/integration-terms.md +1 -1
  117. package/assets/docs/domainspecs/healthcare/persistence.domain.md +1 -1
  118. package/assets/docs/domainspecs/healthcare/terminology.md +1 -1
  119. package/assets/docs/domainspecs/healthcare/testing.domain.md +1 -1
  120. package/assets/docs/domainspecs/healthcare/vertical-slices.domain.md +1 -1
  121. package/assets/docs/domainspecs/healthcare/zero-trust.domain.md +1 -1
  122. package/assets/docs/domainspecs/pharma/api-versioning.domain.md +1 -1
  123. package/assets/docs/domainspecs/pharma/atc.md +1 -1
  124. package/assets/docs/domainspecs/pharma/auditing.domain.md +80 -16
  125. package/assets/docs/domainspecs/pharma/authorization.domain.md +1 -1
  126. package/assets/docs/domainspecs/pharma/coding-standards.domain.md +1 -1
  127. package/assets/docs/domainspecs/pharma/comandrulemap.md +64 -142
  128. package/assets/docs/domainspecs/pharma/commandtechrulemap.md +119 -0
  129. package/assets/docs/domainspecs/pharma/cqrs.domain.md +1 -1
  130. package/assets/docs/domainspecs/pharma/data-classification.domain.md +1 -1
  131. package/assets/docs/domainspecs/pharma/data-provenance.md +1 -1
  132. package/assets/docs/domainspecs/pharma/dependency-policy.domain.md +1 -1
  133. package/assets/docs/domainspecs/pharma/domain-driven-design.domain.md +1 -1
  134. package/assets/docs/domainspecs/pharma/eventing.domain.md +1 -1
  135. package/assets/docs/domainspecs/pharma/fhir.md +1 -1
  136. package/assets/docs/domainspecs/pharma/folder-structure.domain.md +1 -1
  137. package/assets/docs/domainspecs/pharma/hl7.md +1 -1
  138. package/assets/docs/domainspecs/pharma/idmp.md +1 -1
  139. package/assets/docs/domainspecs/pharma/integration-terms.md +1 -1
  140. package/assets/docs/domainspecs/pharma/ndc.md +1 -1
  141. package/assets/docs/domainspecs/pharma/persistence.domain.md +1 -1
  142. package/assets/docs/domainspecs/pharma/pharma-terms.md +1 -1
  143. package/assets/docs/domainspecs/pharma/product-lifecycle.domain.md +1 -1
  144. package/assets/docs/domainspecs/pharma/regulatory-compliance.md +1 -1
  145. package/assets/docs/domainspecs/pharma/terminology.md +1 -1
  146. package/assets/docs/domainspecs/pharma/testing.domain.md +1 -1
  147. package/assets/docs/domainspecs/pharma/vertical-slices.domain.md +1 -1
  148. package/assets/docs/domainspecs/pharma/zero-trust.domain.md +1 -1
  149. package/assets/docs/governance/api-versioning.md +1 -1
  150. package/assets/docs/governance/coding-standards.md +1 -1
  151. package/assets/docs/governance/dependency-policy.md +1 -1
  152. package/assets/docs/requirement-spec.txt +13 -1
  153. package/assets/docs/security/auditing.md +54 -11
  154. package/assets/docs/security/authorization.md +1 -1
  155. package/assets/docs/security/data-classification.md +1 -1
  156. package/assets/docs/security/zero-trust.md +1 -1
  157. package/dist/commands/update.d.ts +3 -0
  158. package/dist/commands/update.d.ts.map +1 -0
  159. package/dist/commands/update.js +142 -0
  160. package/dist/commands/update.js.map +1 -0
  161. package/dist/utils/manifest.d.ts +31 -0
  162. package/dist/utils/manifest.d.ts.map +1 -0
  163. package/dist/utils/manifest.js +91 -0
  164. package/dist/utils/manifest.js.map +1 -0
  165. package/dist/utils/paths.js +2 -2
  166. package/dist/utils/paths.js.map +1 -1
  167. package/dist/utils/update-engine.d.ts +52 -0
  168. package/dist/utils/update-engine.d.ts.map +1 -0
  169. package/dist/utils/update-engine.js +203 -0
  170. package/dist/utils/update-engine.js.map +1 -0
  171. package/package.json +1 -1
  172. package/assets/.agents/skills/aw-spec-addcomponent/SKILL.md +0 -129
  173. package/assets/.agents/skills/aw-spec-agent-context-update/SKILL.md +0 -31
  174. package/assets/.agents/skills/aw-spec-analyze/SKILL.md +0 -296
  175. package/assets/.agents/skills/aw-spec-checklist/SKILL.md +0 -374
  176. package/assets/.agents/skills/aw-spec-clarify/SKILL.md +0 -320
  177. package/assets/.agents/skills/aw-spec-constitution/SKILL.md +0 -194
  178. package/assets/.agents/skills/aw-spec-fast-implement/SKILL.md +0 -268
  179. package/assets/.agents/skills/aw-spec-foundation/SKILL.md +0 -358
  180. package/assets/.agents/skills/aw-spec-implement/SKILL.md +0 -279
  181. package/assets/.agents/skills/aw-spec-minimal-implementation/SKILL.md +0 -209
  182. package/assets/.agents/skills/aw-spec-plan/SKILL.md +0 -221
  183. package/assets/.agents/skills/aw-spec-select-domain/SKILL.md +0 -73
  184. package/assets/.agents/skills/aw-spec-specify/SKILL.md +0 -382
  185. package/assets/.agents/skills/aw-spec-tasks/SKILL.md +0 -259
  186. package/assets/.agents/skills/aw-spec-taskstoissues/SKILL.md +0 -107
  187. package/assets/.aw-spec/integrations/claude.manifest.json +0 -17
  188. package/assets/.aw-spec/scripts/bash/check-prerequisites.sh +0 -189
  189. package/assets/.aw-spec/scripts/bash/create-new-feature.sh +0 -299
  190. package/assets/.aw-spec/scripts/bash/setup-plan.sh +0 -84
  191. package/assets/.aw-spec/scripts/bash/setup-tasks.sh +0 -91
  192. package/assets/.aw-spec/templates/checklist-template.md +0 -40
  193. package/assets/.aw-spec/templates/constitution-template.md +0 -57
  194. package/assets/.aw-spec/templates/plan-template.md +0 -113
  195. package/assets/.aw-spec/templates/tasks-template.md +0 -252
  196. package/assets/.aw-spec/workflows/aw-spec/workflow.yml +0 -77
  197. package/assets/.aw-spec/workflows/workflow-registry.json +0 -13
  198. package/assets/.claude/skills/aw-spec-addcomponent/SKILL.md +0 -129
  199. package/assets/.claude/skills/aw-spec-agent-context-update/SKILL.md +0 -31
  200. package/assets/.claude/skills/aw-spec-analyze/SKILL.md +0 -296
  201. package/assets/.claude/skills/aw-spec-checklist/SKILL.md +0 -374
  202. package/assets/.claude/skills/aw-spec-clarify/SKILL.md +0 -320
  203. package/assets/.claude/skills/aw-spec-constitution/SKILL.md +0 -194
  204. package/assets/.claude/skills/aw-spec-fast-implement/SKILL.md +0 -268
  205. package/assets/.claude/skills/aw-spec-foundation/SKILL.md +0 -358
  206. package/assets/.claude/skills/aw-spec-implement/SKILL.md +0 -279
  207. package/assets/.claude/skills/aw-spec-minimal-implementation/SKILL.md +0 -209
  208. package/assets/.claude/skills/aw-spec-plan/SKILL.md +0 -221
  209. package/assets/.claude/skills/aw-spec-select-domain/SKILL.md +0 -73
  210. package/assets/.claude/skills/aw-spec-specify/SKILL.md +0 -382
  211. package/assets/.claude/skills/aw-spec-tasks/SKILL.md +0 -259
  212. package/assets/.claude/skills/aw-spec-taskstoissues/SKILL.md +0 -107
  213. package/assets/.kilocode/rules/specify-rules.md +0 -4
  214. package/assets/.kilocode/workflows/aw-spec-addcomponent.md +0 -129
  215. package/assets/.kilocode/workflows/aw-spec-agent-context.update.md +0 -31
  216. package/assets/.kilocode/workflows/aw-spec-analyze.md +0 -296
  217. package/assets/.kilocode/workflows/aw-spec-checklist.md +0 -374
  218. package/assets/.kilocode/workflows/aw-spec-clarify.md +0 -320
  219. package/assets/.kilocode/workflows/aw-spec-constitution.md +0 -194
  220. package/assets/.kilocode/workflows/aw-spec-fast-implement.md +0 -263
  221. package/assets/.kilocode/workflows/aw-spec-foundation.md +0 -358
  222. package/assets/.kilocode/workflows/aw-spec-implement.md +0 -279
  223. package/assets/.kilocode/workflows/aw-spec-minimal-implementation.md +0 -204
  224. package/assets/.kilocode/workflows/aw-spec-plan.md +0 -221
  225. package/assets/.kilocode/workflows/aw-spec-select-domain.md +0 -73
  226. package/assets/.kilocode/workflows/aw-spec-specify.md +0 -382
  227. package/assets/.kilocode/workflows/aw-spec-tasks.md +0 -259
  228. package/assets/.kilocode/workflows/aw-spec-taskstoissues.md +0 -107
  229. package/assets/docs/command.txt +0 -295
  230. package/assets/docs/pharma-constitution.my-ref.md +0 -86
@@ -0,0 +1,244 @@
1
+ # =============================================================================
2
+ # aw-spec-add-component (orchestrator) — add an opt-in AppWeaver framework component
3
+ #
4
+ # Picks a component from
5
+ # docs/components/*, parses its implementation catalog, asks which implementation(s)
6
+ # to wire, resolves the host/startup project (via Program.cs), authors the edits
7
+ # STRICTLY from the component's integration.md runbook, then VERIFIES the wiring
8
+ # (dotnet build + the R0.2a dual-registration guard, self-correcting up to 2×).
9
+ #
10
+ # This is the ONLY place framework components are installed. `implement` codes an
11
+ # aggregate against a component's PORT (e.g. IEmailService) but never wires the
12
+ # component itself — run this after implement (or whenever a port needs a provider).
13
+ # The per-component docs/components/<C>/integration.md runbook is the AUTHORITY on
14
+ # what to add; the model reads it (in context) and authors the edits from it. It is
15
+ # pure technology (domain-agnostic) — no domain rule files are involved.
16
+ #
17
+ # Prereq: a scaffolded host project (/aw-spec-orch foundation) — components wire INTO it.
18
+ #
19
+ # Launch: /aw-spec-orch add-component [strategy] [ComponentName]
20
+ # e.g. /aw-spec-orch add-component Email
21
+ # Action semantics: .aw-spec/ORCH-DIALECT.md
22
+ # =============================================================================
23
+
24
+ name: aw-spec-add-component
25
+ description: Add an opt-in AppWeaver framework component — pick one from docs/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.
26
+ version: 1.0.0
27
+ agent_agnostic: true
28
+ dialect: aw-spec.orchestrator/v1
29
+
30
+ inputs:
31
+ user_input:
32
+ description: Optional component folder name to select directly (e.g. Email).
33
+ required: false
34
+ bind: USER_INPUT
35
+
36
+ scripts:
37
+ actions:
38
+ sh: .aw-spec/scripts/bash/aw-spec-actions.sh
39
+ ps1: .aw-spec/scripts/powershell/aw-spec-actions.ps1
40
+
41
+ vars:
42
+ verify_ok: "false" # verify-loop guard, flipped by component-verify
43
+
44
+ workflow:
45
+
46
+ # 1. Discover components (docs/components/* that have an integration.md).
47
+ - id: list_components
48
+ action: execute_script
49
+ script: { ref: actions }
50
+ subcommand: list-components
51
+ outputs:
52
+ - { name: components, from: "$.components" }
53
+
54
+ - id: guard_components
55
+ action: verify_context
56
+ require_non_empty: components
57
+ on_empty: stop
58
+ on_empty_message: "No components available. See docs/components/README.md for the expected layout."
59
+
60
+ # 2. Select the component (direct arg fast-path, else interactive; lone option confirms).
61
+ - id: select_component
62
+ action: user_select
63
+ prompt: "Select a component to add:"
64
+ options_from_variable: components
65
+ preselect_from: USER_INPUT
66
+ single_option_confirm: true
67
+ outputs:
68
+ - { name: chosen, from: selection }
69
+
70
+ - id: guard_chosen
71
+ action: verify_context
72
+ require_non_empty: chosen
73
+ on_empty: stop
74
+ on_empty_message: "No component selected — nothing to do."
75
+
76
+ # 3. Extract the implementation catalog from the runbook — DETERMINISTIC markdown
77
+ # table parse (script, NO model). integrable=false when no catalog table exists.
78
+ - id: extract_catalog
79
+ action: execute_script
80
+ script: { ref: actions }
81
+ subcommand: component-catalog
82
+ args: ["--file", "docs/components/{{chosen}}/integration.md"]
83
+ outputs:
84
+ - { name: integrable, from: "$.integrable" }
85
+ - { name: impl_keys, from: "$.impl_keys" }
86
+ - { name: implementations, from: "$.implementations" }
87
+
88
+ - id: catalog_gate
89
+ action: verify_context
90
+ require_true: integrable
91
+ on_false: stop
92
+ on_false_message: "Component '{{chosen}}' is not integrable via this command (no implementation catalog in integration.md)."
93
+
94
+ # 4. Select implementation(s) (multi-select). Empty selection => leave untouched.
95
+ - id: select_impls
96
+ action: ask
97
+ prompt: "Select one or more '{{chosen}}' implementations to wire in (honor the runbook's grouping rules):"
98
+ options_from: "{{impl_keys}}"
99
+ multi: true
100
+ answer_var: chosen_impls
101
+
102
+ - id: guard_selection
103
+ action: verify_context
104
+ require_non_empty: chosen_impls
105
+ on_empty: stop
106
+ on_empty_message: "No implementation selected — project left untouched. Re-run /aw-spec-orch add-component any time."
107
+
108
+ # 5. Resolve the host/startup project (by locating Program.cs).
109
+ - id: find_host
110
+ action: execute_script
111
+ script: { ref: actions }
112
+ subcommand: find-host-project
113
+ outputs:
114
+ - { name: host_found, from: "$.found" }
115
+ - { name: host_dir, from: "$.project_dir" }
116
+ - { name: program_cs, from: "$.program_cs" }
117
+ - { name: host_csproj, from: "$.csproj" }
118
+
119
+ - id: host_gate
120
+ action: verify_context
121
+ require_true: host_found
122
+ on_false: stop
123
+ on_false_message: "No host/startup project found (no Program.cs) — run /aw-spec-orch foundation first."
124
+
125
+ # 6. Pre-execution hooks.
126
+ - id: resolve_pre_hooks
127
+ action: execute_script
128
+ script: { ref: actions }
129
+ subcommand: resolve-hooks
130
+ args: ["--phase", "before_addcomponent"]
131
+ outputs:
132
+ - { name: before_hooks, from: "$.hooks" }
133
+ - id: dispatch_pre_hooks
134
+ action: dispatch_hooks
135
+ hooks_from_variable: before_hooks
136
+
137
+ # 7. Plan the concrete file edits from the runbook + selected implementations.
138
+ - id: plan_edits
139
+ action: agent_query
140
+ context: ["docs/components/{{chosen}}/integration.md"]
141
+ include_standards: false
142
+ task: |
143
+ Using the runbook (in context) apply the "Common steps" plus each selected
144
+ implementation's block for: {{chosen_impls}}. The host/startup project is
145
+ {{host_dir}} (Program.cs at {{program_cs}}; csproj {{host_csproj}}). Honor the
146
+ cross-cutting rules (versions only in Directory.Packages.props; register in the
147
+ host project's AddInfrastructure AND AddAspireInfrastructure when both exist; set
148
+ options.Provider; never commit secrets). Return ONLY JSON listing each file to
149
+ create or edit, the active provider, and the exact registration marker token a
150
+ deterministic guard can look for in each infrastructure-registration method.
151
+ 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>" }
152
+ mock: { edits: [], active_provider: "", registration_marker: "" }
153
+ outputs:
154
+ - { name: edits, from: "$.edits" }
155
+ - { name: active_provider, from: "$.active_provider" }
156
+ - { name: registration_marker, from: "$.registration_marker" }
157
+
158
+ # 8. Apply each edit — full updated file content, guided by the runbook in context.
159
+ # build_context loads the runbook envelope; the agent Reads each target file.
160
+ - id: ctx_apply
161
+ action: build_context
162
+ context:
163
+ - { path: "docs/components/{{chosen}}/integration.md" }
164
+ - { path: "docs/components/{{chosen}}/README.md", optional: true }
165
+ - id: apply_loop
166
+ action: loop
167
+ over: "{{edits}}"
168
+ as: e
169
+ steps:
170
+ - id: apply_edit
171
+ action: agent_generate
172
+ tools: "Read,Write,Edit"
173
+ permission_mode: acceptEdits
174
+ task: |
175
+ Apply the '{{chosen}}' component runbook edit (integration.md in context) to the
176
+ single file {{e.path}} — {{e.purpose}}. Selected implementations: {{chosen_impls}};
177
+ active provider: {{active_provider}}; host project: {{host_dir}}.
178
+ Read {{e.path}} first if it exists and PRESERVE all existing content, applying
179
+ ONLY the runbook's additions (package version, PackageReference, registration
180
+ line, config); create it if absent. Change NO other file.
181
+ outputs:
182
+ - { name: applied_files, from: "$.files" }
183
+
184
+ # 9. Post-wiring verification — `dotnet build` the host project + the R0.2a
185
+ # dual-registration guard (a script, NO model judgment), self-correcting up to 2×.
186
+ # Build degrades gracefully (skipped => ok) when the .NET SDK is absent.
187
+ - id: ctx_verify
188
+ action: build_context
189
+ context:
190
+ - { path: "docs/components/{{chosen}}/integration.md" }
191
+ - id: verify_loop
192
+ action: loop
193
+ while: "{{verify_ok}} != true"
194
+ max_iterations: 2
195
+ steps:
196
+ - id: verify
197
+ action: execute_script
198
+ script: { ref: actions }
199
+ subcommand: component-verify
200
+ args: ["--host-dir", "{{host_dir}}", "--host-csproj", "{{host_csproj}}", "--marker", "{{registration_marker}}"]
201
+ outputs:
202
+ - { name: verify_ok, from: "$.ok" }
203
+ - { name: verify_can_fix, from: "$.can_fix" }
204
+ - { name: fix_target, from: "$.fix_target" }
205
+ - { name: fix_reason, from: "$.fix_reason" }
206
+ - id: verify_break
207
+ action: break
208
+ condition: "{{verify_ok}} == true"
209
+ - id: verify_fix
210
+ action: agent_generate
211
+ condition: "{{verify_can_fix}} == true"
212
+ tools: "Read,Write,Edit"
213
+ permission_mode: acceptEdits
214
+ task: |
215
+ The '{{chosen}}' component wiring failed verification. Fix ONLY the file
216
+ {{fix_target}} to resolve it, following the integration.md runbook (in context)
217
+ and preserving all unrelated existing content. If the issue is R0.2a dual
218
+ registration, add the component's registration to that method exactly as the
219
+ other registration method already has it (adjusting only provider-specific calls).
220
+ Reason: {{fix_reason}}
221
+ Read {{fix_target}} first; change NO other file.
222
+
223
+ # 10. Post-execution hooks.
224
+ - id: resolve_post_hooks
225
+ action: execute_script
226
+ script: { ref: actions }
227
+ subcommand: resolve-hooks
228
+ args: ["--phase", "after_addcomponent"]
229
+ outputs:
230
+ - { name: after_hooks, from: "$.hooks" }
231
+ - id: dispatch_post_hooks
232
+ action: dispatch_hooks
233
+ hooks_from_variable: after_hooks
234
+
235
+ outputs:
236
+ component: "{{chosen}}"
237
+ implementations: "{{chosen_impls}}"
238
+ active_provider: "{{active_provider}}"
239
+ edits: "{{edits}}"
240
+ host_project: "{{host_dir}}"
241
+ build_verified: "{{verify_ok}}"
242
+ verify_detail: "{{fix_reason}}"
243
+ 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."
244
+ next: "Run /aw-spec-orch build to compile, or continue implementing features that depend on this component's port."