aw-spec-cli 0.1.7 → 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 (261) 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/dist/commands/init.js +2 -2
  257. package/dist/commands/init.js.map +1 -1
  258. package/dist/utils/copy-assets.js +8 -8
  259. package/dist/utils/copy-assets.js.map +1 -1
  260. package/package.json +1 -1
  261. package/assets/docs/pharma-constitution.my-ref.md +0 -86
@@ -0,0 +1,294 @@
1
+ <!--
2
+ ═══════════════════════════════════════════════════════════════════════════
3
+ rev-templates/ui-design-template.skeleton.md — SHAPE-ONLY reference.
4
+
5
+ This file is the FORMAT reference for the reverse-engineered UI DESIGN
6
+ TEMPLATE that onboard installs at
7
+ .appweaver/templates/overrides/ui-design-template.md — the FRONTEND LANE's twin
8
+ of design-template.skeleton.md, and written only where the CODE has a lane.
9
+ It carries the section skeleton, the traceability spine, the two deferral
10
+ ledgers and the authoring contract, and NOTHING ELSE.
11
+
12
+ IT NAMES NO FRAMEWORK, ROUTER, STATE LIBRARY, COMPONENT LIBRARY, DESIGN
13
+ SYSTEM OR STYLING APPROACH. "Component", "screen", "route" and "state
14
+ container" are CONCEPTUAL here — the same way the service design says
15
+ "repository" without naming an ORM. The framework binds later, at
16
+ ⌛ `ui-implement`, from constitution.ui.md plus that command's rule set. A
17
+ named example in a skeleton becomes law in a lane it does not fit, and the
18
+ frontend is where that risk is highest. Every [BRACKET] is filled FROM THE
19
+ LANE'S OWN CODE.
20
+
21
+ THIS IS A TEMPLATE OF A TEMPLATE. What onboard generates from it is the
22
+ project's UI design TEMPLATE — [PLACEHOLDER] tokens and authoring comments
23
+ intact — which ⌛ `ui-design` then fills once per feature into
24
+ specs/<Feature>/design.ui.md. Onboard replaces the STRUCTURE, not the content.
25
+
26
+ THE SECTION LIST IS RATIFIED, NOT INVENTED. §1–§9 below are the sections
27
+ aw-spec specifies for design.ui.md (Navigation & screen structure · Client
28
+ state · Component structure · Interaction & flow · Contract binding ·
29
+ Cross-cutting · Traceability · DA-n · WA-n), keeping the neutral bones the
30
+ service design earned. What the CODE supplies is what goes IN them — the
31
+ lane's real screens, its own composition axes, its state and styling
32
+ conventions — never which sections exist.
33
+
34
+ TWO SECTIONS ARE MANDATORY EVEN WHEN THIN. §4 Interaction & Flow and §6
35
+ Cross-Cutting are the two a backend-shaped process silently drops, and they
36
+ are where most UI defects live: loading, empty, error and permission-denied
37
+ states, focus and keyboard behaviour, and what must never reach the client.
38
+ A lane whose code shows little of either records THAT, as-built — an app with
39
+ no error states gets a section saying so, not a section quietly omitted.
40
+
41
+ §5 IS THE LANE BOUNDARY. Contract binding is the only place the service lane
42
+ enters: the UI design reads the WHOLE spec but only a PROJECTION of the
43
+ service design (⌛ specs/<Feature>/design-contract.md). The requirement is
44
+ shared and must not fork; the implementation is not shared and must not leak.
45
+
46
+ DISCIPLINE THIS SKELETON ENFORCES (structurally — there is no project content
47
+ here to leak):
48
+ • AS-BUILT — every structural statement is confirmed by reading UI source.
49
+ State a partial or inconsistent convention at the level the code reaches,
50
+ and name the dominant form rather than picking a winner the code has not.
51
+ • ONE AXIS PER RECURRING STRUCTURE — §3's subsections are the lane's OWN
52
+ organisation (whatever it groups by), not a taxonomy imposed on it.
53
+ • NOT DEBT — a lane organised unlike a reference frontend is the as-built
54
+ shape (§0), not a §9 deviation.
55
+ • ONE LANE — this document governs the frontend lane only. It carries no
56
+ service-lane structure and no domain rule; the domain reaches it as spec
57
+ ids, exactly as it reaches the service design.
58
+ ═══════════════════════════════════════════════════════════════════════════
59
+ -->
60
+ # UI Design: [AGGREGATE]
61
+
62
+ **Aggregate (feature)**: `[Aggregate]`
63
+
64
+ **Design home**: `specs/[Aggregate]/design.ui.md`
65
+
66
+ **Source spec**: `specs/[Aggregate]/spec.md`
67
+
68
+ **Contract**: `specs/[Aggregate]/design-contract.md`
69
+
70
+ **Version**: v1.0
71
+
72
+ **Status**: Draft
73
+
74
+ <!--
75
+ WHAT THIS DOCUMENT IS
76
+ =====================
77
+ The single, living high-level UI design for ONE feature's experience — the
78
+ MEDIATOR between spec.md (WHAT/WHY) and the frontend code ⌛ `ui-implement`
79
+ generates. It carries screens, navigation, state, composition, interaction
80
+ and the service binding; it is not code and it is not a visual comp.
81
+
82
+ ANCHORING RULES
83
+ - Every element traces UP to a spec id (FR-/BR-/CN-/DC-/IC-/US-/SC-) and the
84
+ experience obligations of the spec are covered DOWN here (§7). No screen
85
+ without a spec reason; no user story without a screen home.
86
+ - THE SPEC IS THE ONLY DOMAIN INPUT — the same rule the service design keeps.
87
+ This document reads the spec + the lane's own standards, never the domain
88
+ rule files.
89
+ - THE CONTRACT IS THE ONLY SERVICE INPUT (§5). Read the design contract, never
90
+ the service design.
91
+
92
+ STRUCTURE FOLLOWS THIS LANE'S CODE
93
+ - [GENERATED_LANE_STRUCTURE_NOTE] — form: one or two sentences naming the
94
+ composition convention this lane actually follows and where its screens,
95
+ shared components, state and styles live, with the paths that evidence it.
96
+
97
+ TECHNOLOGY-AGNOSTIC (mandatory)
98
+ - Name no framework, router, state library or component library. Describe a
99
+ component by its RESPONSIBILITY, its INPUTS (props/params as field shapes),
100
+ the EVENTS it raises and the STATES it can be in. The same design must be
101
+ realisable on another frontend stack without edits.
102
+
103
+ HOW TO AUTHOR
104
+ - Fill every [PLACEHOLDER]; keep the section order. §4 and §6 are never
105
+ omitted. §8 and §9 are MANDATORY ledgers — empty reads "None (as of vX.Y)".
106
+ - GROUND each filled section in the ACTUAL UI CODE and the reverse-engineered
107
+ lane governance — cite real component/route/store/stylesheet paths and the
108
+ constitution.ui.md UX principle the decision rests on.
109
+ - Delete these authoring comments as you fill each section.
110
+ -->
111
+
112
+ ## 0. Design Overview
113
+
114
+ <!-- One paragraph: the shape of this feature's experience and the 3–5 decisions
115
+ that matter most (the entry point, the primary flow, the hardest trade-off).
116
+ The lane's standing conventions are recorded below, not restated per
117
+ screen. -->
118
+
119
+ [The essence of this feature's experience in 3–6 sentences.]
120
+
121
+ ### As-Built Lane Structure
122
+
123
+ [AS_BUILT_LANE_STRUCTURE_CONTENT]
124
+ <!-- Form: the convention THIS lane follows — its root, how screens/views are
125
+ organised and named, where shared components live, how state and
126
+ server data are held, how styling is applied, and the lane's build/test
127
+ tooling — each with a representative code path. A new feature's UI ALIGNS
128
+ to this rather than introducing a second convention. Where the UI is
129
+ rendered inside the service tree and owns no root, say so. -->
130
+
131
+ ### Ubiquitous Language (design delta)
132
+
133
+ <!-- Only the terms this design introduces or sharpens beyond the spec — a
134
+ screen name, a state name, a shared component concept. These become code
135
+ identifiers. -->
136
+
137
+ | Term | Meaning in this design |
138
+ |---|---|
139
+ | [Screen / component / state name] | [precise definition] |
140
+
141
+ ## 1. Navigation & Screen Structure
142
+
143
+ <!-- The screen inventory and how a user moves between them. One row per screen
144
+ this feature owns. A screen belongs to the feature that owns the DECISION
145
+ the user makes there; a screen that reads from another aggregate declares a
146
+ Depends-On edge rather than being duplicated. -->
147
+
148
+ | Screen | Purpose | Entered from | Leads to | Serves |
149
+ |---|---|---|---|---|
150
+ | `[Screen]` | [the decision made here] | [entry point] | [next screens] | US-[n] · FR-[nnn] |
151
+
152
+ **Route / navigation shape**: [how screens are addressed and nested in this
153
+ lane, stated conceptually — a path pattern, a stack, a tab set — read from the
154
+ code, not named after a router.]
155
+
156
+ **Access conditions**: [which screens require what — authentication state, a
157
+ role, a record state — each citing the spec id that imposes it, or `None`.]
158
+
159
+ ## 2. Client State
160
+
161
+ <!-- What the client holds, where it lives, and who may write it. Distinguish
162
+ server-derived data from local UI state. Include invalidation/refresh
163
+ triggers — a stale-data defect is a design defect, not an implementation
164
+ one. -->
165
+
166
+ | State | Kind | Owner / scope | Shape | Written by | Invalidated by |
167
+ |---|---|---|---|---|---|
168
+ | `[State]` | [server-derived / local UI / session] | [scope] | [field: type, …] | [screen/component] | [event] |
169
+
170
+ ## 3. Component Structure
171
+
172
+ <!-- ONE `### 3.n` SUBSECTION PER RECURRING COMPOSITION AXIS THIS LANE USES,
173
+ each TITLED with the lane's OWN name for it. The count and titles are the
174
+ code's answer — the slots below are illustrative positions, not a required
175
+ set. In each: the components that live there, what they are responsible
176
+ for, their inputs as field shapes, and the events they raise. -->
177
+
178
+ ### 3.1 [LANE_COMPOSITION_AXIS_NAME]
179
+
180
+ <!-- [What this axis holds in this lane + the representative path that evidences
181
+ it.] -->
182
+
183
+ | Component | Responsibility | Inputs (field shape) | Events raised | Serves |
184
+ |---|---|---|---|---|
185
+ | `[Component]` | [what it is responsible for] | [field: type, …] | `[event]` | FR-00X · US-Y |
186
+
187
+ ### 3.n [LANE_COMPOSITION_AXIS_NAME]
188
+
189
+ <!-- … one per axis the lane's code actually shows, then stop … -->
190
+
191
+ ## 4. Interaction & Flow
192
+
193
+ <!-- MANDATORY — never omitted, never thinned to a happy path. For each
194
+ significant interaction: the states it passes through and what the user
195
+ sees in each. Cover loading, empty, error, permission-denied and
196
+ in-flight/disabled states, plus validation timing and what happens on
197
+ cancel or navigate-away. Where the lane's code shows a state it does NOT
198
+ handle, record that as-built here — it is a real finding, not a gap to
199
+ paper over. -->
200
+
201
+ | Interaction | States | What the user sees | Serves |
202
+ |---|---|---|---|
203
+ | `[interaction]` | [idle → in-flight → success / error / empty] | [per-state behaviour] | US-[n] · FR-[nnn] |
204
+
205
+ **Validation & feedback**: [when validation runs and how failures are surfaced,
206
+ citing the BR-/FR- ids being enforced client-side. A client-side check NEVER
207
+ replaces the service-side rule — it restates it for feedback.]
208
+
209
+ **Keyboard, focus & announcement**: [what the lane's code actually does, at the
210
+ level it reaches, citing the UX principle that governs it — or plainly that it
211
+ does none.]
212
+
213
+ ## 5. Contract Binding
214
+
215
+ <!-- THE LANE BOUNDARY. One row per service operation this feature's UI depends
216
+ on, taken from ⌛ specs/[Aggregate]/design-contract.md — the projection the
217
+ service design emits. Read the contract, never the service design. Where no
218
+ contract document exists yet, bind against the spec's own IC-/FR- surface
219
+ and record that as a §8 assumption. -->
220
+
221
+ | Screen / component | Operation (from the contract) | Sends (field shape) | Receives (field shape) | Failure handling | Serves |
222
+ |---|---|---|---|---|---|
223
+ | `[Screen]` | `[operation]` | [field: type, …] | [field: type, …] | [§4 state] | FR-00X · IC-00X |
224
+
225
+ **Contract deltas needed**: [anything the experience requires that the contract
226
+ does not offer — raised back to the service lane, never worked around in the
227
+ client. Or `None`.]
228
+
229
+ ## 6. Cross-Cutting
230
+
231
+ <!-- MANDATORY — never omitted. One row per concern this feature's UI must
232
+ honour, each tracing to a spec id or to a constitution.ui.md UX principle
233
+ via a §8 DA-n. Keep only the rows this lane's governance actually carries;
234
+ state a concern the code does not address AS-BUILT rather than dropping the
235
+ row. -->
236
+
237
+ | Concern | Design decision | Serves |
238
+ |---|---|---|
239
+ | Data exposure on the client | [what MUST NOT reach the client or its logs/storage] | DC-00X |
240
+ | Authorization surface | [what is hidden vs disabled vs enforced server-side] | CN-00X |
241
+ | Accessibility | [what this lane enforces, at the level it reaches] | [UX-n via DA-n] |
242
+ | Internationalization | [as-built handling, or that there is none] | [spec id / DA-n] |
243
+ | Performance & responsiveness | [target + structural choice] | SC-00X |
244
+ | Error & offline behaviour | [as-built handling] | FR-00X |
245
+
246
+ ## 7. Traceability (the spine)
247
+
248
+ <!-- The two-way guarantee for the lane: every experience obligation in the spec
249
+ has a home here, and every UI element has a spec reason. The last column
250
+ names THIS document's own sections. A US- with no screen is a coverage
251
+ failure. -->
252
+
253
+ | Spec id | Type | UI element(s) | Section |
254
+ |---|---|---|---|
255
+ | US-1 | story | [screens + flow realising it] | [§ refs] |
256
+ | FR-001 | requirement | [screen / component / state] | [§] |
257
+ | CN-001 | constraint | [where honoured in the UI] | [§] |
258
+ | DC-001 | classification | [what is withheld from the client] | §6 |
259
+ | IC-001 | contract | [binding row] | §5 |
260
+ | SC-001 | success | [where met + how verified] | [§] |
261
+
262
+ ## 8. Assumptions (to clarify later)
263
+
264
+ <!-- MANDATORY LEDGER. Every default or open interpretation this design commits
265
+ to so it can proceed without blocking — including any element
266
+ constitution.ui.md mandates that has no per-feature spec id (state the
267
+ basis as "per constitution.ui.md UX-<n>"). Empty → "None (as of vX.Y)". -->
268
+
269
+ | id | Assumption | Why deferred | Impact if wrong | Owner / resolve-by |
270
+ |---|---|---|---|---|
271
+ | DA-1 | [what was assumed] | [why not clarified now] | [blast radius] | [role / phase] |
272
+
273
+ ## 9. Deviations & Deferred Decisions (to clear later)
274
+
275
+ <!-- MANDATORY LEDGER. Experience debt KNOWINGLY taken — a screen that does too
276
+ much, a duplicated component, a state held in the wrong place — with the
277
+ proper end-state and the trigger that forces the cleanup. AS-BUILT
278
+ DISCIPLINE: only debt the CODE evidences. A lane organised unlike a
279
+ reference frontend is the as-built shape (§0), not a deviation.
280
+ Empty → "None (as of vX.Y)". -->
281
+
282
+ | id | Deviation taken | Proper end-state | Trigger to revisit | Serves / caused by |
283
+ |---|---|---|---|---|
284
+ | WA-1 | [the shortcut/coupling] | [the clean design] | [what forces it] | [FR / constraint] |
285
+
286
+ ## Change History
287
+
288
+ <!-- In lockstep with spec.md and design.md — a change that touches both lanes
289
+ closes on ONE version bump. finalize-delta appends the row; close-delta
290
+ bumps the version and stamps it into the header. Newest last. -->
291
+
292
+ | Version | Date | Change | User stories | CR |
293
+ |---------|------|--------|--------------|-----|
294
+ | v1.0 | [DATE] | Initial UI design | US-1 | — |
@@ -0,0 +1,160 @@
1
+ # =============================================================================
2
+ # _smoke — CI smoke workflow for the orchestrator engine (no model, no writes
3
+ # outside .appweaver/orchestrator/.smoke-out)
4
+ #
5
+ # Exercises every extended construct in one run: inputs, set (raw object),
6
+ # execute_script (read-only subcommand), verify_context gates, ask
7
+ # (non-interactive default), foreach + while loops + break, agent_query
8
+ # (mock:), agent_author (mock content), build_context, include
9
+ # (domain-select module), dispatch_hooks (empty).
10
+ #
11
+ # Run:
12
+ # python3 .appweaver/orchestrator/orchestrator.py \
13
+ # .appweaver/orchestrator/workflows/_smoke.orch.yaml --non-interactive --json
14
+ # Expected: status ok, echo=hello, sum of foreach passes, smoke.md written.
15
+ # =============================================================================
16
+
17
+ name: orch-smoke
18
+ dialect: aw-spec.orchestrator/v1
19
+
20
+ inputs:
21
+ user_input:
22
+ description: Optional text echoed into the authored artifact.
23
+ required: false
24
+ bind: USER_INPUT
25
+
26
+ scripts:
27
+ actions:
28
+ sh: .appweaver/scripts/bash/aw-spec-actions.sh
29
+ ps1: .appweaver/scripts/powershell/aw-spec-actions.ps1
30
+
31
+ vars:
32
+ out_dir: .appweaver/orchestrator/.smoke-out
33
+ seen: ""
34
+
35
+ workflow:
36
+
37
+ # set with a raw list (resolve_value keeps it a real list)
38
+ - id: seed
39
+ action: set
40
+ vars:
41
+ fruits: ["apple", "banana"]
42
+ echo: "hello"
43
+
44
+ # F1: read-only script subcommand; outputs[] binding
45
+ - id: script_ro
46
+ action: execute_script
47
+ script: { ref: actions }
48
+ subcommand: list-domains
49
+ outputs:
50
+ - { name: domains, from: "$.domains" }
51
+
52
+ # F2: gates — value gate + non-empty gate (informational, no stop)
53
+ - id: gate_value
54
+ action: verify_context
55
+ require_value: echo
56
+ equals: "hello"
57
+ on_mismatch: stop
58
+ on_mismatch_message: "set/resolve is broken"
59
+ - id: gate_nonempty
60
+ action: verify_context
61
+ require_non_empty: domains
62
+ on_empty_message: "no domains found (allowed in smoke)"
63
+
64
+ # F7: ask — --non-interactive picks the first option
65
+ - id: pick_mode
66
+ action: ask
67
+ prompt: "Smoke mode?"
68
+ options: ["fast", "slow"]
69
+ answer_var: mode
70
+ - id: gate_mode
71
+ action: verify_context
72
+ require_value: mode
73
+ equals: "fast"
74
+ on_mismatch: stop
75
+ on_mismatch_message: "non-interactive ask default is broken"
76
+
77
+ # F3: foreach over a list var, binding item + item_index
78
+ - id: each_fruit
79
+ action: loop
80
+ over: "{{fruits}}"
81
+ as: fruit
82
+ steps:
83
+ - id: collect
84
+ action: set
85
+ vars:
86
+ seen: "{{seen}}{{fruit}}@{{fruit_index}};"
87
+
88
+ # while + break still work
89
+ - id: count
90
+ action: loop
91
+ while: "true"
92
+ max_iterations: 3
93
+ steps:
94
+ - id: stop_at_1
95
+ action: break
96
+ condition: "{{iteration}} == 1"
97
+
98
+ # F6: structured query — mock: supplies the result in mock transport
99
+ - id: q_shape
100
+ action: agent_query
101
+ schema: { ok: true, items: [] }
102
+ mock: { ok: true, items: ["one", "two"] }
103
+ task: Report ok plus a short list of items.
104
+ outputs:
105
+ - { name: q_ok, from: "$.ok" }
106
+ - { name: q_items, from: "$.items" }
107
+ - id: gate_q
108
+ action: verify_context
109
+ require_true: q_ok
110
+ on_false: stop
111
+ on_false_message: "agent_query mock/result binding is broken"
112
+
113
+ # F3 again: foreach over a query-produced list
114
+ - id: each_item
115
+ action: loop
116
+ over: "{{q_items}}"
117
+ as: it
118
+ steps:
119
+ - id: collect_items
120
+ action: set
121
+ vars:
122
+ seen: "{{seen}}{{it}};"
123
+
124
+ # context management stays with the orchestrator: envelope for the author step
125
+ - id: ctx_author
126
+ action: build_context
127
+ context:
128
+ - { path: "{{out_dir}}/smoke.md", optional: true }
129
+
130
+ # F5: authored artifact — engine writes the file (mock content here)
131
+ - id: author_doc
132
+ action: agent_author
133
+ output_target: { type: file, path: "{{out_dir}}/smoke.md" }
134
+ task: "Write a one-paragraph smoke report. Echo: {{echo}} {{USER_INPUT}}"
135
+
136
+ # F2: file gate against what the engine just wrote
137
+ - id: gate_file
138
+ action: verify_context
139
+ required_files: ["{{out_dir}}/smoke.md"]
140
+
141
+ # F9: include — the shared domain-select module (read-only script + asks;
142
+ # non-interactive: gate→continue, mode→all)
143
+ - id: domain
144
+ action: include
145
+ module: .appweaver/orchestrator/modules/domain-select.orch.yaml
146
+ with:
147
+ command: specify
148
+
149
+ # F8: hooks — empty var logs 'none'
150
+ - id: hooks
151
+ action: dispatch_hooks
152
+ hooks_from_variable: no_hooks_declared
153
+
154
+ outputs:
155
+ echo: "{{echo}}"
156
+ mode: "{{mode}}"
157
+ seen: "{{seen}}"
158
+ q_items: "{{q_items}}"
159
+ domain: "{{domain}}"
160
+ note: "all engine constructs exercised"