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,439 @@
1
+ # =============================================================================
2
+ # aw-spec-specify (orchestrator) — author the SPEC for the ACTIVE feature
3
+ #
4
+ # Spec-anchored pipeline, spec phase. feature = AGGREGATE (picked/created by
5
+ # /appweaver select-feature, which sets .appweaver/feature.json). specify does
6
+ # NOT guess or create the feature — it CONSUMES the active one, and is phase-pure
7
+ # (spec side only; the single design.md is the `design` phase).
8
+ #
9
+ # Auto-detects first-vs-subsequent from spec.md:
10
+ # • BOOTSTRAP (no spec.md) → author the MASTER spec (US-1) + init active_version.json.
11
+ # • DELTA (spec.md exists) → delegate to the delta-spec module: open a change (cr-setup)
12
+ # and author the delta-spec ONLY. The master spec.md is left UNTOUCHED — the change
13
+ # stays OPEN; finalize-delta merges the delta into spec.md + design.md, and the
14
+ # change is not closed until close-delta at the end of the chain.
15
+ # (The former standalone `cr` capture's spec half now lives here.)
16
+ #
17
+ # Both paths then run ONE converge block — checklist + clarify + validate — over the
18
+ # document THIS invocation authored, never the other one:
19
+ # • BOOTSTRAP → the master spec, graded by the spec checklist.
20
+ # • DELTA → the delta-spec, graded by a DELTA-SHAPED checklist written inside
21
+ # changes/<cr-id>/. The master is not read, not graded, NOT written.
22
+ # The pairing is bound from create-checklist's own output (checklist_file + target →
23
+ # quality_target), so the checklist and the document it grades can never diverge.
24
+ # Why it matters: the delta is authored relative to the master, so a "quality" rewrite
25
+ # of the master mid-change would leave the delta computed against a stale baseline —
26
+ # and in brownfield it would silently edit an adopted, code-derived spec that nothing
27
+ # downstream re-checks for fidelity. Narrow rewrites run include_standards:false.
28
+ # Accuracy of the delta AGAINST the master (id continuity, conflicts) stays where it
29
+ # belongs: /appweaver analyze-delta-design.
30
+ #
31
+ # Forward paths:
32
+ # NEW : specify → design → analyze-design → implement
33
+ # CHANGE : specify (delta-spec) → design (delta-design) → analyze-delta-design →
34
+ # implement-delta → build → finalize-delta → analyze-slice → close-delta
35
+ #
36
+ # Launch: /appweaver specify [strategy] <what the feature/change does>
37
+ # e.g. /appweaver specify Customers place an order for one or more items
38
+ # Prereq: /appweaver select-feature (sets the active aggregate)
39
+ # =============================================================================
40
+
41
+ name: aw-spec-specify
42
+ description: Author the specification of the ACTIVE feature (aggregate). First call writes the master spec (US-1); a later call (spec.md exists) delegates to the delta-spec module to author a delta-spec ONLY (master spec.md untouched — finalize-delta merges it) and leaves the change OPEN. The checklist/clarify/validate loops grade whichever document the call authored, using a delta-shaped checklist on the change path. Spec phase only — design is separate.
43
+ version: 2.3.0
44
+ agent_agnostic: true
45
+ dialect: aw-spec.orchestrator/v1
46
+
47
+ inputs:
48
+ user_input:
49
+ description: What the feature (first call) or the change (later calls) should do, in natural language.
50
+ required: true
51
+ bind: USER_INPUT
52
+
53
+ scripts:
54
+ actions:
55
+ sh: .appweaver/scripts/bash/aw-spec-actions.sh
56
+ ps1: .appweaver/scripts/powershell/aw-spec-actions.ps1
57
+
58
+ # Sticky standards seed = the UNIVERSAL always-on rule only (ai-rules). Specify's ONE
59
+ # technical input — the MODELLING METHODOLOGY (DDD tactical patterns) — is no longer
60
+ # hardcoded here: it is now CONFIGURATION, loaded per-command from
61
+ # guardrails/projects/<project>/tech-rule-bindings.md by the tech-select module (see the
62
+ # tech_select step below), exactly as the DOMAIN rule files are loaded by domain-select.
63
+ # Per the rule-partition that heading may carry a modelling methodology ONLY — never an
64
+ # architecture / persistence / codegen file; those belong to design + implement, and
65
+ # putting one here would break specify's domain purity. The domain classification /
66
+ # constraint rules still arrive via domain-select (D3). The BASE security/
67
+ # data-classification.md is a design doc — specify gets the domain data-classification
68
+ # overlay via domain-select, and lifts its taxonomy into the spec's Data Classification
69
+ # (DC-) section. (missing files are skipped at assembly time)
70
+ standards:
71
+ - { path: .appweaver/ai-rules.md } # kit-resident: the universal operating rules, every flow
72
+
73
+ vars:
74
+ spec_all_pass: "false" # validation-loop guard, flipped by the validate query
75
+ checklist_total: "0" # bound by checklist-read
76
+ checklist_passed: "0" # stays 0 when the checklist has no items to score
77
+ cr_id: "" # set on the DELTA path only
78
+ cr_dir: "" # set on the DELTA path only — changes/<cr-id>/
79
+ quality_target: "" # the document the converge loops grade AND rewrite:
80
+ # spec.md (bootstrap) | delta-spec.md (delta). Bound from
81
+ # create-checklist's own output so it always agrees with
82
+ # the checklist. NEVER hand-set to spec_file on the delta
83
+ # path — that is what silently drifts an adopted spec.
84
+ version: "" # current active_version.json version (for the report)
85
+
86
+ workflow:
87
+
88
+ # 1. CONSUME the active feature (set by select-feature). No derive-names.
89
+ - id: feature_paths
90
+ action: execute_script
91
+ on_error: continue
92
+ script: { ref: actions }
93
+ subcommand: feature-paths
94
+ outputs:
95
+ - { name: feature_dir, from: "$.feature_dir" }
96
+ - { name: spec_file, from: "$.spec_file" }
97
+ - { name: spec_exists, from: "$.spec_exists" }
98
+
99
+ - id: require_feature
100
+ action: verify_context
101
+ require_non_empty: feature_dir
102
+ on_empty: stop
103
+ on_empty_message: "No active feature. Run /appweaver select-feature first (pick or create the aggregate, e.g. Order), then re-run specify."
104
+
105
+ # 2. TECHNICAL rule files → sticky standards (configuration, not hardcoded).
106
+ # tech-select reads guardrails/projects/<project>/tech-rule-bindings.md under
107
+ # "## /aw-spec-specify" and loads that set. Per the rule-partition that heading is
108
+ # the MODELLING-METHODOLOGY slot only (DDD tactical patterns) — it must never list an
109
+ # architecture / persistence / codegen file, which would break specify's domain purity.
110
+ # No blocking gate: an unconfigured project (no domain, no map, or no specify heading)
111
+ # soft-continues and simply loads nothing extra. Placed AFTER require_feature so the
112
+ # no-feature stop fires before any selection box.
113
+ - id: tech_select
114
+ action: include
115
+ module: .appweaver/orchestrator/modules/tech-select.orch.yaml
116
+ with: { command: aw-spec-specify }
117
+
118
+ # 3. Resolve the active domain + its rule files → sticky standards (D3).
119
+ - id: domain_select
120
+ action: include
121
+ module: .appweaver/orchestrator/modules/domain-select.orch.yaml
122
+ with: { command: aw-spec-specify }
123
+
124
+ # 4. Pre-execution hooks: resolve (script) then dispatch (invoking agent).
125
+ - id: resolve_pre_hooks
126
+ action: execute_script
127
+ script: { ref: actions }
128
+ subcommand: resolve-hooks
129
+ args: ["--phase", "before_specify"]
130
+ outputs:
131
+ - { name: before_hooks, from: "$.hooks" }
132
+ - id: dispatch_pre_hooks
133
+ action: dispatch_hooks
134
+ hooks_from_variable: before_hooks
135
+
136
+ # ═══════════════════════ BOOTSTRAP — no spec.md yet ═══════════════════════
137
+ # Copy the spec template into the (already-existing) feature dir + init version.
138
+ - id: boot_scaffold
139
+ condition: "{{spec_exists}} == false"
140
+ action: execute_script
141
+ script: { ref: actions }
142
+ subcommand: scaffold
143
+ args: ["--feature-dir", "{{feature_dir}}", "--allow-existing"]
144
+
145
+ - id: boot_version_init
146
+ condition: "{{spec_exists}} == false"
147
+ action: execute_script
148
+ script: { ref: actions }
149
+ subcommand: version-init
150
+ args: ["--feature-dir", "{{feature_dir}}"]
151
+
152
+ - id: boot_ctx
153
+ condition: "{{spec_exists}} == false"
154
+ action: build_context
155
+ context:
156
+ - "{{spec_file}}" # the copied template = section structure
157
+ - .appweaver/memory/constitution.domain.md # the DOMAIN authority — specify's frame. Declared
158
+ # REQUIRED (bare string, not `optional: true`) ON PURPOSE:
159
+ # specify is the ONLY phase that reads the domain rules and
160
+ # its task text tells the agent this file is in context, so
161
+ # a missing one must ANNOUNCE (`[context] MISSING (required)`)
162
+ # rather than silently thin the payload. It announces, it does
163
+ # not stop — constitution/onboard write this file before
164
+ # specify ever runs on either flow.
165
+ # NOT constitution.technical: architecture is a HOW
166
+ # concern for design/implement, not domain modelling.
167
+ - { path: .appweaver/memory/constitution.ui.md, optional: true }
168
+ # The frontend lane's UX-* base, and the source the
169
+ # Experience Standards section lifts from. OPTIONAL, unlike
170
+ # the domain half: a project that declared no frontend lane
171
+ # has no such file, and its absence is the ordinary
172
+ # backend-only path rather than something to announce. With
173
+ # no file and no ux/ rules mapped, the section resolves to
174
+ # "None" and the spec is unchanged from a backend-only one.
175
+ - id: boot_generate
176
+ condition: "{{spec_exists}} == false"
177
+ action: agent_author
178
+ output_target: { type: file, path: "{{spec_file}}" }
179
+ task: |
180
+ Author the MASTER specification for this aggregate by filling out the
181
+ template in context. This is the first user story, US-1. Base everything on:
182
+
183
+ {{USER_INPUT}}
184
+
185
+ Rules for the content you generate:
186
+ - The feature IS the aggregate; set the Aggregate field and keep US-1's id.
187
+ - Preserve the template's section order and headings.
188
+ - SPECIFY IS THE ONLY PHASE THAT READS THE DOMAIN RULES. Design and implement
189
+ work from the spec/design, never the domain docs — so this spec is the SOLE
190
+ carrier of the domain into the pipeline. Model the domain COMPLETELY here, or
191
+ it is lost downstream.
192
+ - DDD IS THE RATIFIED MODELLING STANDARD (NON-NEGOTIABLE → the modelling-methodology
193
+ standard in the sticky standards, wired per-project via tech-rule-bindings
194
+ "## /aw-spec-specify", plus the domain's own DDD overlay). The domain
195
+ model in this spec MUST be expressed strictly in DDD terms: a consistent
196
+ ubiquitous language; the aggregate + its root; entities vs value objects;
197
+ invariants owned by the aggregate; the bounded-context boundary. Capture these
198
+ as domain MODEL, not code — no C# types, no persistence, no framework. This is
199
+ the one technical standard specify applies, because the domain model is part of
200
+ the spec; design/implement inherit it through the spec, never re-derive it.
201
+ - Focus on WHAT users need and WHY. Include NO implementation mechanics
202
+ (languages, frameworks, code structure, endpoint/adapter design). Note: an
203
+ external interoperability OBLIGATION — which standard/resources must be met —
204
+ is a requirement, not implementation; record it as an Integration Contract,
205
+ but never how the adapter is built.
206
+ - Write for non-technical business stakeholders.
207
+ - Write System Requirements in EARS as the template shows (THE SYSTEM SHALL
208
+ / WHEN…/ IF…THEN / WHILE…/ WHERE…) — each atomic and testable.
209
+ - Capture always-true BUSINESS invariants as Business Rules (BR-n), and state
210
+ the aggregate boundary (what it owns vs references by id, and out of scope).
211
+ Record reasonable defaults in Assumptions.
212
+ - DOMAIN LIFT — when the active domain's rules impose them, lift into the three
213
+ dedicated sections (stable ids; cite the source rule where lifted):
214
+ • Constraints & NFRs (CN-n) — regulatory / retention / immutability /
215
+ audit-mandate and performance-as-a-limit rules. These are NOT business
216
+ invariants (those are BR) and NOT behaviour (those are FR).
217
+ • Data Classification (DC-n) — sensitivity categories + where each may /
218
+ MUST NOT appear (public surface, logs, metrics, traces, projections).
219
+ • Integration Contracts (IC-n) — external interop obligations (outbound
220
+ projections, terminology / reference services, inbound feeds) at contract
221
+ level, mapped to the Key Entities they concern.
222
+ If the domain imposes none, write "None (as of v1.0)" — never delete a section.
223
+ - EXPERIENCE LIFT — the same discipline, a different source and a different lane.
224
+ From constitution.ui.md (the UX-* principle series) and the mapped ux/ rules, lift:
225
+ • Experience Scope — actors, channels, and the device / browser / assistive-
226
+ technology floors this aggregate's UI is specified against.
227
+ • Experience Standards (UX-n) — the PROJECT-WIDE standards its UI must satisfy:
228
+ accessibility conformance, interaction-state coverage, content and language,
229
+ journey integrity, responsiveness-as-a-limit.
230
+ Its own id class ON PURPOSE: prototype, ui-design and ui-implement review and verify
231
+ UX- separately from the service lane, and the service-side gates trace CN- and never
232
+ read this section — so a bound the SERVICE must meet stays a CN-, cross-referenced.
233
+ HIGH-LEVEL ONLY, and this is the rule that matters most: every entry is a standard
234
+ the whole product holds to, checkable on ANY surface. NEVER a screen, page, layout,
235
+ navigation model, component or visual-design choice — the prototype and design.ui.md
236
+ settle those, and an entry satisfiable only one way is a design decision smuggled
237
+ into the spec. A per-feature interaction BEHAVIOUR stays an EARS FR-n; only the
238
+ standard that governs every such behaviour is a UX-n.
239
+ Where neither a UI constitution nor ux/ rules are in context there is nothing to
240
+ lift: write "None (as of v1.0)" in both — never delete either section.
241
+ - This is v1.0: fill the initial Change History row's date and keep US-1's
242
+ "Added: v1.0" marker.
243
+ - ALWAYS include a "## Success Criteria" section with 2-4 measurable,
244
+ technology-agnostic, verifiable SC-nnn outcomes derived from the acceptance
245
+ criteria. It is MANDATORY — never drop it; when a metric must be inferred,
246
+ state a reasonable, testable target rather than omitting the section.
247
+ - Add at most 3 "[NEEDS CLARIFICATION: <question>]" markers, and only for
248
+ choices that materially affect scope/UX and have no reasonable default.
249
+ - Every section the template marks *(mandatory)* — at minimum System
250
+ Requirements and Success Criteria — plus Business Need, User Stories, and
251
+ the Change History row MUST be present and populated. The four lift sections
252
+ (Constraints & NFRs, Data Classification, Integration Contracts, Experience
253
+ Standards) and Experience Scope MUST also be present — populated when their rules
254
+ apply, else "None (as of v1.0)". You may
255
+ omit only a genuinely inapplicable OPTIONAL item (e.g. the WHERE optional-feature
256
+ requirement, or an empty Assumptions list) — never a mandatory section, and
257
+ never write "N/A".
258
+ - Do NOT embed any checklist and NO design/implementation.
259
+
260
+ # ═════════════════════════ DELTA — spec.md exists ═════════════════════════
261
+ # A later requirement = a new user story on the SAME aggregate. Delegate to the
262
+ # delta-spec module: it opens the change (cr-setup, single-active-change guarded) and
263
+ # authors the delta-spec ONLY — the master spec.md is left UNTOUCHED. The change
264
+ # stays OPEN; finalize-delta merges the delta into spec.md later in the chain. Runs in
265
+ # this context (shares vars + the DDD + domain sticky standards). The former standalone
266
+ # `cr` capture's spec half now lives here. Downstream: design (delta-design) →
267
+ # analyze-delta-design → implement-delta → build → finalize-delta → analyze-slice →
268
+ # close-delta (close-delta is what finally archives the change and bumps the version).
269
+ - id: delta_spec_module
270
+ condition: "{{spec_exists}} == true"
271
+ action: include
272
+ module: .appweaver/orchestrator/modules/delta-spec.orch.yaml
273
+
274
+ # ══════ CONVERGE — checklist + clarify + validate, ON THE DOCUMENT JUST WRITTEN ══════
275
+ # These loops run on WHICHEVER document this invocation authored — the master spec on
276
+ # the bootstrap path, the delta-spec on the change path. They must NEVER write the
277
+ # master while a change is open: the delta is authored relative to the master, so
278
+ # mutating the master here would leave the delta computed against a stale baseline
279
+ # AND (brownfield) silently edit an adopted, code-derived spec that no downstream
280
+ # stage re-checks for fidelity. Hence quality_target — bound from the SAME script call
281
+ # that creates the checklist, so the checklist and the graded document cannot diverge.
282
+ #
283
+ # 5. Quality checklist (shared script — static content, NO model). Idempotent in
284
+ # content; note it rewrites the file, so it is deliberately scoped to the path that
285
+ # authored the document (a delta run no longer resets the master's scored boxes).
286
+ - id: create_checklist
287
+ condition: "{{spec_exists}} == false"
288
+ action: execute_script
289
+ script: { ref: actions }
290
+ subcommand: create-checklist
291
+ args: ["--feature-dir", "{{feature_dir}}"]
292
+ outputs:
293
+ - { name: checklist_file, from: "$.checklist_file" }
294
+ - { name: quality_target, from: "$.target" } # → spec.md
295
+
296
+ # Delta twin: a DELTA-SHAPED checklist (ADDED/MODIFIED/REMOVED completeness, merge
297
+ # readiness) written INSIDE changes/<cr-id>/, grading the delta-spec. The master
298
+ # checklist's items assume a full spec and would mis-fire here, which is exactly why
299
+ # this is a separate checklist rather than the same one re-pointed.
300
+ - id: create_delta_checklist
301
+ condition: "{{spec_exists}} == true"
302
+ action: execute_script
303
+ script: { ref: actions }
304
+ subcommand: create-checklist
305
+ args: ["--feature-dir", "{{feature_dir}}", "--kind", "delta", "--change-dir", "{{cr_dir}}"]
306
+ outputs:
307
+ - { name: checklist_file, from: "$.checklist_file" }
308
+ - { name: quality_target, from: "$.target" } # → changes/<cr-id>/delta-spec.md
309
+
310
+ # 6. Resolve [NEEDS CLARIFICATION] markers interactively (≤3). Non-interactive
311
+ # runs answer with the first/recommended option (a documented default).
312
+ - id: extract_clarifications
313
+ action: agent_query
314
+ context: ["{{quality_target}}"]
315
+ include_standards: false
316
+ task: |
317
+ Extract up to 3 unresolved "[NEEDS CLARIFICATION: <question>]" markers from
318
+ the document in context (a feature spec, or one change's delta-spec), most
319
+ scope/security/UX-impacting first. Return {"clarifications":[]} if there are none.
320
+ schema: { clarifications: [ { id: c1, question: "<the question>", options: ["<answer A>", "<answer B>", "<answer C>"] } ] }
321
+ mock: { clarifications: [] }
322
+ outputs:
323
+ - { name: clarifications, from: "$.clarifications" }
324
+
325
+ - id: clarify_loop
326
+ action: loop
327
+ over: "{{clarifications}}"
328
+ as: c
329
+ max_iterations: 3
330
+ steps:
331
+ - id: ask_clar
332
+ action: ask
333
+ prompt: "{{c.question}}"
334
+ options_from: "{{c.options}}"
335
+ answer_key: "{{c.id}}"
336
+ answer_var: c_answer
337
+ - id: resolve_clar
338
+ action: agent_author
339
+ context: ["{{quality_target}}"]
340
+ include_standards: false # rewrite-in-place: the graded document only
341
+ task: |
342
+ Replace the matching "[NEEDS CLARIFICATION]" marker in the document in
343
+ context with this answer and update the affected requirement/section
344
+ accordingly. Preserve structure and headings. If it is a delta-spec, stay
345
+ within the delta — keep every item's ADDED / MODIFIED / REMOVED placement.
346
+ Question: {{c.question}}
347
+ Answer: {{c_answer}}
348
+ output_target: { type: file, path: "{{quality_target}}" }
349
+
350
+ # 7. Spec-quality validation loop — evaluate the spec against the checklist,
351
+ # fix failing items, re-check (max 3), then score the checklist file.
352
+ - id: checklist_read
353
+ action: execute_script
354
+ script: { ref: actions }
355
+ subcommand: checklist-read
356
+ args: ["--file", "{{checklist_file}}"]
357
+ outputs:
358
+ - { name: checklist_total, from: "$.total" }
359
+
360
+ - id: validation_loop
361
+ action: loop
362
+ while: "{{spec_all_pass}} != true"
363
+ max_iterations: 3
364
+ steps:
365
+ - id: validate
366
+ action: agent_query
367
+ context: ["{{checklist_file}}", "{{quality_target}}"]
368
+ include_standards: false
369
+ task: |
370
+ Evaluate the document under review (in context) against each checklist item
371
+ (in context, 1-based in order). The checklist's own title states which kind
372
+ of document it grades — a feature spec, or one change's delta-spec; judge it
373
+ as that kind and nothing more. An item passes when the document satisfies it.
374
+ (An item about remaining [NEEDS CLARIFICATION] markers passes once none
375
+ remain.) In "failing", quote the offending/absent part per failed item.
376
+ schema: { all_pass: false, results: { "1": true, "2": false }, failing: [ { n: 2, issue: "<quote>" } ] }
377
+ mock: { all_pass: true, results: {}, failing: [] }
378
+ outputs:
379
+ - { name: spec_all_pass, from: "$.all_pass" }
380
+ - { name: spec_results, from: "$.results" }
381
+ - { name: spec_failing, from: "$.failing" }
382
+ - id: pass_break
383
+ action: break
384
+ condition: "{{spec_all_pass}} == true"
385
+ - id: patch_spec
386
+ action: agent_author
387
+ context: ["{{quality_target}}"]
388
+ include_standards: false
389
+ task: |
390
+ Fix these quality failures in the document in context, preserving its
391
+ section order and headings. Do NOT add implementation detail; keep it
392
+ business-facing and testable.
393
+ If the document is a DELTA-SPEC: it describes one change, not the whole
394
+ feature. Fix it AS a delta — keep the ADDED / MODIFIED / REMOVED structure,
395
+ never expand it into a full specification, never copy in unchanged master
396
+ content to satisfy an item, and never edit the master spec.
397
+ Failures: {{spec_failing}}
398
+ output_target: { type: file, path: "{{quality_target}}" }
399
+
400
+ - id: score_checklist
401
+ action: execute_script
402
+ condition: "{{checklist_total}} != 0"
403
+ script: { ref: actions }
404
+ subcommand: checklist-apply
405
+ args: ["--file", "{{checklist_file}}", "--results", "{{spec_results}}"]
406
+ outputs:
407
+ - { name: checklist_passed, from: "$.after_checked" }
408
+
409
+ # 8. Read the current version for the report (both paths).
410
+ - id: version_read
411
+ action: execute_script
412
+ script: { ref: actions }
413
+ subcommand: version-read
414
+ args: ["--feature-dir", "{{feature_dir}}"]
415
+ outputs:
416
+ - { name: version, from: "$.version" }
417
+ - { name: active_change, from: "$.active_change" }
418
+
419
+ # 9. Post-execution hooks: resolve (script) then dispatch (invoking agent).
420
+ - id: resolve_post_hooks
421
+ action: execute_script
422
+ script: { ref: actions }
423
+ subcommand: resolve-hooks
424
+ args: ["--phase", "after_specify"]
425
+ outputs:
426
+ - { name: after_hooks, from: "$.hooks" }
427
+ - id: dispatch_post_hooks
428
+ action: dispatch_hooks
429
+ hooks_from_variable: after_hooks
430
+
431
+ outputs:
432
+ feature_directory: "{{feature_dir}}"
433
+ spec_file: "{{spec_file}}"
434
+ version: "{{version}}"
435
+ change_id: "{{cr_id}}"
436
+ authored_document: "{{quality_target}}" # spec.md (bootstrap) | delta-spec.md (delta)
437
+ checklist_file: "{{checklist_file}}"
438
+ checklist_quality: "{{checklist_passed}}/{{checklist_total}} items passing"
439
+ next: "/appweaver design — BOOTSTRAP authors design.md from the spec; a DELTA (this run opened change {{cr_id}}) authors the delta-design for it. A change then flows: analyze-delta-design → implement-delta → build → finalize-delta → analyze-slice → close-delta (finalize-delta merges the delta into spec.md + design.md but leaves the change open; analyze-slice verifies the slice against the merged master; close-delta archives the change and bumps the version)."
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env bash
2
+ # aw-inventory.sh — thin wrapper: delegate to the single python core.
3
+ #
4
+ # The brownfield inventory logic lives ONCE in ../python/aw-inventory.py (a
5
+ # faithful cross-platform port of Reference/okf-inventory.sh + aggregate-root
6
+ # signals). This wrapper exists only so the orchestrator's execute_script,
7
+ # which dispatches sh:/ps1: variants, can invoke it. All args (subcommand +
8
+ # options) pass straight through.
9
+ #
10
+ # aw-inventory.sh scan [--root <dir>] [--out <path>] [--bundle <dir>] [--config <yml>]
11
+ # [--service-root <p>] [--ui-root <p>] (the declared lane paths:
12
+ # backend signals come from outside the UI subtree, frontend
13
+ # signals from inside it, so neither carries the other's files)
14
+ # aw-inventory.sh validate --bundle <dir> [--repo-root <dir>]
15
+ set -euo pipefail
16
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
17
+ exec python3 "$DIR/../python/aw-inventory.py" "$@"
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env bash
2
+ # aw-parity.sh — thin wrapper: delegate to the single python core.
3
+ #
4
+ # Brownfield PARITY runner (the cutover gate). Logic lives ONCE in
5
+ # ../python/aw-parity.py; this wrapper exists only so the orchestrator's
6
+ # execute_script (sh:/ps1: dispatch) can invoke it. All args pass through.
7
+ #
8
+ # aw-parity.sh scaffold --feature-dir <dir>
9
+ # aw-parity.sh check --manifest <path>
10
+ # aw-parity.sh run --manifest <path> [--out <report.md>]
11
+ set -euo pipefail
12
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+ exec python3 "$DIR/../python/aw-parity.py" "$@"
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env bash
2
+ # aw-rev-constitution.sh — thin wrapper: delegate to the single python core.
3
+ #
4
+ # Brownfield GOVERN-BACKWARD substrate, driven by `/appweaver onboard` (the
5
+ # standalone rev-constitution workflow is RETIRED). Logic lives
6
+ # ONCE in ../python/aw-rev-constitution.py; this wrapper exists only so the
7
+ # orchestrator's execute_script (sh:/ps1: dispatch) can invoke it. Args pass through.
8
+ #
9
+ # aw-rev-constitution.sh list-adopted [--root <dir>] [--specs <dir>] [--bundle <dir>]
10
+ # aw-rev-constitution.sh project-setup --name <domain> [--fallback <name>] [--root <dir>]
11
+ set -euo pipefail
12
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+ exec python3 "$DIR/../python/aw-rev-constitution.py" "$@"