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.
- package/assets/.appweaver/DESIGN-FORMAT.md +200 -0
- package/assets/.appweaver/ORCH-DIALECT.md +156 -0
- package/assets/.appweaver/RULE-PARTITION.md +175 -0
- package/assets/.appweaver/STACK-PROFILES.md +461 -0
- package/assets/.appweaver/ai-rules.md +180 -0
- package/assets/.appweaver/domain.json +1 -0
- package/assets/.appweaver/extensions/.registry +19 -0
- package/assets/.appweaver/extensions/agent-context/README.md +57 -0
- package/assets/.appweaver/extensions/agent-context/agent-context-config.yml +4 -0
- package/assets/.appweaver/extensions/agent-context/commands/aw-spec.agent-context.update.md +26 -0
- package/assets/.appweaver/extensions/agent-context/extension.yml +37 -0
- package/assets/.appweaver/extensions/agent-context/scripts/bash/update-agent-context.sh +201 -0
- package/assets/.appweaver/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +237 -0
- package/assets/.appweaver/extensions.yml +16 -0
- package/assets/.appweaver/feature.json +3 -0
- package/assets/.appweaver/init-options.json +9 -0
- package/assets/.appweaver/integration.json +15 -0
- package/assets/.appweaver/integrations/aw-spec.manifest.json +9 -0
- package/assets/.appweaver/interpreter/run-skill.py +1176 -0
- package/assets/.appweaver/memory/constitution.md +50 -0
- package/assets/.appweaver/orchestrator/.smoke-out/smoke.md +6 -0
- package/assets/.appweaver/orchestrator/AGENT-PROFILE.md +94 -0
- package/assets/.appweaver/orchestrator/README.md +300 -0
- package/assets/.appweaver/orchestrator/adapters/claude_agent_sdk.py +74 -0
- package/assets/.appweaver/orchestrator/adapters/google_antigravity.py +74 -0
- package/assets/.appweaver/orchestrator/modules/delta-design.orch.yaml +105 -0
- package/assets/.appweaver/orchestrator/modules/delta-spec.orch.yaml +101 -0
- package/assets/.appweaver/orchestrator/modules/domain-select.orch.yaml +90 -0
- package/assets/.appweaver/orchestrator/modules/lane-gate.orch.yaml +126 -0
- package/assets/.appweaver/orchestrator/modules/tech-select.orch.yaml +123 -0
- package/assets/.appweaver/orchestrator/orchestrator.py +1721 -0
- package/assets/.appweaver/orchestrator/rev-templates/ai-rules.reference.md +40 -0
- package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +101 -0
- package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +245 -0
- package/assets/.appweaver/orchestrator/rev-templates/domain-constitution.skeleton.md +63 -0
- package/assets/.appweaver/orchestrator/rev-templates/domain-requirements.skeleton.md +48 -0
- package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +59 -0
- package/assets/.appweaver/orchestrator/rev-templates/domain-rule-file.skeleton.md +39 -0
- package/assets/.appweaver/orchestrator/rev-templates/frontend-rule-file.skeleton.md +63 -0
- package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +116 -0
- package/assets/.appweaver/orchestrator/rev-templates/technical-constitution.skeleton.md +106 -0
- package/assets/.appweaver/orchestrator/rev-templates/technical-rule-file.skeleton.md +54 -0
- package/assets/.appweaver/orchestrator/rev-templates/ui-constitution.skeleton.md +125 -0
- package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +123 -0
- package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +294 -0
- package/assets/.appweaver/orchestrator/workflows/_smoke.orch.yaml +160 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-add-component.orch.yaml +270 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +934 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-delta-design.orch.yaml +251 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +265 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +437 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-build.orch.yaml +197 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-characterize.orch.yaml +475 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-close-delta.orch.yaml +181 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-constitution.orch.yaml +727 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-demo.orch.yaml +100 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-dependency-tree.orch.yaml +69 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-deploy.orch.yaml +85 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-design-ui.orch.yaml +386 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-design.orch.yaml +382 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-finalize-delta.orch.yaml +462 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-foundation.orch.yaml +265 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-delta.orch.yaml +253 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-ui.orch.yaml +267 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +287 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-inventory.orch.yaml +238 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +1822 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-parity.orch.yaml +293 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-run.orch.yaml +194 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-domain.orch.yaml +83 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-feature.orch.yaml +128 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +296 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +439 -0
- package/assets/.appweaver/scripts/bash/aw-inventory.sh +17 -0
- package/assets/.appweaver/scripts/bash/aw-parity.sh +13 -0
- package/assets/.appweaver/scripts/bash/aw-rev-constitution.sh +13 -0
- package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +2626 -0
- package/assets/.appweaver/scripts/bash/aw-xref.sh +15 -0
- package/assets/.appweaver/scripts/bash/common.sh +533 -0
- package/assets/.appweaver/scripts/powershell/aw-inventory.ps1 +17 -0
- package/assets/.appweaver/scripts/powershell/aw-parity.ps1 +13 -0
- package/assets/.appweaver/scripts/powershell/aw-rev-constitution.ps1 +13 -0
- package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +2232 -0
- package/assets/.appweaver/scripts/powershell/aw-xref.ps1 +15 -0
- package/assets/.appweaver/scripts/python/aw-component-catalog.py +121 -0
- package/assets/.appweaver/scripts/python/aw-inventory.py +1180 -0
- package/assets/.appweaver/scripts/python/aw-parity.py +380 -0
- package/assets/.appweaver/scripts/python/aw-rev-constitution.py +329 -0
- package/assets/.appweaver/scripts/python/aw-stack.py +1251 -0
- package/assets/.appweaver/scripts/python/aw-xref.py +1330 -0
- package/assets/.appweaver/scripts/python/validate_okf.py +352 -0
- package/assets/.appweaver/stack-profiles/angular.json +16 -0
- package/assets/.appweaver/stack-profiles/blazor-wasm.json +17 -0
- package/assets/.appweaver/stack-profiles/dotnet-webapi.json +15 -0
- package/assets/.appweaver/stack-profiles/go-chi.json +14 -0
- package/assets/.appweaver/stack-profiles/java-spring.json +16 -0
- package/assets/.appweaver/stack-profiles/nextjs.json +16 -0
- package/assets/.appweaver/stack-profiles/node-express.json +15 -0
- package/assets/.appweaver/stack-profiles/python-fastapi.json +16 -0
- package/assets/.appweaver/stack-profiles/react-vite.json +17 -0
- package/assets/.appweaver/stack-profiles/sveltekit.json +16 -0
- package/assets/.appweaver/stack-profiles/vue-vite.json +17 -0
- package/assets/.appweaver/stacks.json +3 -0
- package/assets/.appweaver/templates/constitution-domain-template.md +116 -0
- package/assets/.appweaver/templates/constitution-technical-template.md +108 -0
- package/assets/.appweaver/templates/constitution-ui-template.md +116 -0
- package/assets/.appweaver/templates/delta-design-template.md +69 -0
- package/assets/.appweaver/templates/delta-spec-template.md +63 -0
- package/assets/.appweaver/templates/design-template.md +383 -0
- package/assets/.appweaver/templates/okf-concept-template.md +114 -0
- package/assets/.appweaver/templates/parity-manifest-template.json +49 -0
- package/assets/.appweaver/templates/source-map-template.md +85 -0
- package/assets/.appweaver/templates/spec-template.md +309 -0
- package/assets/.appweaver/templates/ui-design-template.md +273 -0
- package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.Reference.pack.txt +25248 -0
- package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.pack.txt +5726 -0
- package/assets/foundations/dotnet/ModularMonolith/pack-foundation.ps1 +145 -0
- package/assets/foundations/dotnet/ModularMonolith/pack-foundation.sh +196 -0
- package/assets/foundations/dotnet/ModularMonolith/pack-reference-foundation.ps1 +157 -0
- package/assets/foundations/dotnet/ModularMonolith/pack-reference-foundation.sh +209 -0
- package/assets/foundations/dotnet/ModularMonolith/unpack-foundation.ps1 +126 -0
- package/assets/foundations/dotnet/ModularMonolith/unpack-foundation.sh +217 -0
- package/assets/foundations/dotnet/ModularMonolith/unpack-reference-foundation.ps1 +129 -0
- package/assets/foundations/dotnet/ModularMonolith/unpack-reference-foundation.sh +218 -0
- package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.Reference.pack.txt +19318 -0
- package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.pack.txt +2833 -0
- package/assets/foundations/dotnet/VerticalSlice/pack-foundation.ps1 +145 -0
- package/assets/foundations/dotnet/VerticalSlice/pack-foundation.sh +196 -0
- package/assets/foundations/dotnet/VerticalSlice/pack-reference-foundation.ps1 +157 -0
- package/assets/foundations/dotnet/VerticalSlice/pack-reference-foundation.sh +209 -0
- package/assets/foundations/dotnet/VerticalSlice/unpack-foundation.ps1 +126 -0
- package/assets/foundations/dotnet/VerticalSlice/unpack-foundation.sh +217 -0
- package/assets/foundations/dotnet/VerticalSlice/unpack-reference-foundation.ps1 +129 -0
- package/assets/foundations/dotnet/VerticalSlice/unpack-reference-foundation.sh +218 -0
- package/assets/foundations/dotnet/components/Email/README.md +119 -0
- package/assets/foundations/dotnet/components/Email/ReferenceEndpoints/SendEmailEndpoint.cs +84 -0
- package/assets/foundations/dotnet/components/Email/integration.md +300 -0
- package/assets/foundations/dotnet/components/Jobs/README.md +113 -0
- package/assets/foundations/dotnet/components/Jobs/integration.md +259 -0
- package/assets/foundations/dotnet/components/QrGenerator/README.md +85 -0
- package/assets/foundations/dotnet/components/QrGenerator/ReferenceEndpoints/GenerateQrEndpoint.cs +57 -0
- package/assets/foundations/dotnet/components/QrGenerator/integration.md +230 -0
- package/assets/foundations/dotnet/components/README.md +74 -0
- package/assets/guardrails/README.md +222 -0
- package/assets/guardrails/domain/healthcare/ai-rules.domain.md +34 -0
- package/assets/guardrails/domain/healthcare/api-versioning.domain.md +17 -0
- package/assets/guardrails/domain/healthcare/auditing.domain.md +97 -0
- package/assets/guardrails/domain/healthcare/authorization.domain.md +26 -0
- package/assets/guardrails/domain/healthcare/clinical-terms.md +20 -0
- package/assets/guardrails/domain/healthcare/coding-standards.domain.md +26 -0
- package/assets/guardrails/domain/healthcare/consent.md +19 -0
- package/assets/guardrails/domain/healthcare/cqrs.domain.md +12 -0
- package/assets/guardrails/domain/healthcare/data-classification.domain.md +28 -0
- package/assets/guardrails/domain/healthcare/dependency-policy.domain.md +11 -0
- package/assets/guardrails/domain/healthcare/dicom.md +15 -0
- package/assets/guardrails/domain/healthcare/domain-constitution.md +119 -0
- package/assets/guardrails/domain/healthcare/domain-driven-design.domain.md +28 -0
- package/assets/guardrails/domain/healthcare/eventing.domain.md +18 -0
- package/assets/guardrails/domain/healthcare/fhir.md +36 -0
- package/assets/guardrails/domain/healthcare/folder-structure.domain.md +25 -0
- package/assets/guardrails/domain/healthcare/hipaa.md +34 -0
- package/assets/guardrails/domain/healthcare/hl7.md +15 -0
- package/assets/guardrails/domain/healthcare/ihe-conformance.md +31 -0
- package/assets/guardrails/domain/healthcare/integration-terms.md +21 -0
- package/assets/guardrails/domain/healthcare/persistence.domain.md +20 -0
- package/assets/guardrails/domain/healthcare/terminology.md +30 -0
- package/assets/guardrails/domain/healthcare/testing.domain.md +15 -0
- package/assets/guardrails/domain/healthcare/ux/accessibility-standards.md +36 -0
- package/assets/guardrails/domain/healthcare/ux/content-design.md +32 -0
- package/assets/guardrails/domain/healthcare/ux/interaction-states.md +44 -0
- package/assets/guardrails/domain/healthcare/ux/journey-mapping.md +40 -0
- package/assets/guardrails/domain/healthcare/vertical-slices.domain.md +18 -0
- package/assets/guardrails/domain/healthcare/zero-trust.domain.md +12 -0
- package/assets/guardrails/domain/pharma/ai-rules.domain.md +32 -0
- package/assets/guardrails/domain/pharma/api-versioning.domain.md +20 -0
- package/assets/guardrails/domain/pharma/atc.md +22 -0
- package/assets/guardrails/domain/pharma/auditing.domain.md +90 -0
- package/assets/guardrails/domain/pharma/authorization.domain.md +25 -0
- package/assets/guardrails/domain/pharma/coding-standards.domain.md +28 -0
- package/assets/guardrails/domain/pharma/cqrs.domain.md +16 -0
- package/assets/guardrails/domain/pharma/data-classification.domain.md +24 -0
- package/assets/guardrails/domain/pharma/data-provenance.md +21 -0
- package/assets/guardrails/domain/pharma/dependency-policy.domain.md +11 -0
- package/assets/guardrails/domain/pharma/domain-constitution.md +113 -0
- package/assets/guardrails/domain/pharma/domain-driven-design.domain.md +36 -0
- package/assets/guardrails/domain/pharma/domain-requirements.sample.md +103 -0
- package/assets/guardrails/domain/pharma/eventing.domain.md +18 -0
- package/assets/guardrails/domain/pharma/fhir.md +31 -0
- package/assets/guardrails/domain/pharma/folder-structure.domain.md +26 -0
- package/assets/guardrails/domain/pharma/hl7.md +17 -0
- package/assets/guardrails/domain/pharma/idmp.md +26 -0
- package/assets/guardrails/domain/pharma/integration-terms.md +21 -0
- package/assets/guardrails/domain/pharma/ndc.md +28 -0
- package/assets/guardrails/domain/pharma/persistence.domain.md +23 -0
- package/assets/guardrails/domain/pharma/pharma-terms.md +27 -0
- package/assets/guardrails/domain/pharma/product-lifecycle.domain.md +30 -0
- package/assets/guardrails/domain/pharma/regulatory-compliance.md +19 -0
- package/assets/guardrails/domain/pharma/terminology.md +32 -0
- package/assets/guardrails/domain/pharma/testing.domain.md +19 -0
- package/assets/guardrails/domain/pharma/vertical-slices.domain.md +17 -0
- package/assets/guardrails/domain/pharma/zero-trust.domain.md +12 -0
- package/assets/guardrails/projects/dotnet-default-project/domain/domain-requirements.md +58 -0
- package/assets/guardrails/projects/dotnet-default-project/domain-rule-bindings.md +113 -0
- package/assets/guardrails/projects/dotnet-default-project/frontend/ui-requirements.md +43 -0
- package/assets/guardrails/projects/dotnet-default-project/service/technical-requirements.md +40 -0
- package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +263 -0
- package/assets/guardrails/requirement-spec.txt +27 -0
- package/assets/guardrails/technology/dotnet-webapi/PACKAGING.md +184 -0
- package/assets/guardrails/technology/dotnet-webapi/api-versioning.md +44 -0
- package/assets/guardrails/technology/dotnet-webapi/auditing.md +96 -0
- package/assets/guardrails/technology/dotnet-webapi/authorization-matrix.md +14 -0
- package/assets/guardrails/technology/dotnet-webapi/authorization.md +39 -0
- package/assets/guardrails/technology/dotnet-webapi/clean-architecture.md +54 -0
- package/assets/guardrails/technology/dotnet-webapi/coding-standards.md +87 -0
- package/assets/guardrails/technology/dotnet-webapi/cqrs.md +63 -0
- package/assets/guardrails/technology/dotnet-webapi/data-classification.md +38 -0
- package/assets/guardrails/technology/dotnet-webapi/dependency-policy.md +40 -0
- package/assets/guardrails/technology/dotnet-webapi/domain-driven-design.md +91 -0
- package/assets/guardrails/technology/dotnet-webapi/eventing.md +57 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/api-versioning.md +75 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/auditing.md +84 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/authorization.md +68 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/clean-architecture.md +37 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/cqrs.md +97 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/domain-driven-design.md +141 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/eventing.md +46 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/persistence.md +207 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/vertical-slices.md +151 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/zero-trust.md +48 -0
- package/assets/guardrails/technology/dotnet-webapi/folder-structure.md +61 -0
- package/assets/guardrails/technology/dotnet-webapi/modular-monolith.md +47 -0
- package/assets/guardrails/technology/dotnet-webapi/persistence.md +82 -0
- package/assets/guardrails/technology/dotnet-webapi/technology-constitution.md +162 -0
- package/assets/guardrails/technology/dotnet-webapi/testing.md +55 -0
- package/assets/guardrails/technology/dotnet-webapi/vertical-slices.md +70 -0
- package/assets/guardrails/technology/dotnet-webapi/zero-trust.md +48 -0
- package/assets/guardrails/technology/java-spring/README.md +62 -0
- package/assets/guardrails/technology/nextjs/accessibility-implementation.md +56 -0
- package/assets/guardrails/technology/nextjs/api-client.md +56 -0
- package/assets/guardrails/technology/nextjs/api-integration.dotnet-webapi.md +174 -0
- package/assets/guardrails/technology/nextjs/api-integration.java-spring.md +203 -0
- package/assets/guardrails/technology/nextjs/auth-session.md +68 -0
- package/assets/guardrails/technology/nextjs/client-security.md +69 -0
- package/assets/guardrails/technology/nextjs/component-architecture.md +60 -0
- package/assets/guardrails/technology/nextjs/component-conventions.md +58 -0
- package/assets/guardrails/technology/nextjs/design-system.md +60 -0
- package/assets/guardrails/technology/nextjs/error-handling.md +72 -0
- package/assets/guardrails/technology/nextjs/forms-and-validation.md +75 -0
- package/assets/guardrails/technology/nextjs/frontend-testing.md +94 -0
- package/assets/guardrails/technology/nextjs/i18n.md +57 -0
- package/assets/guardrails/technology/nextjs/observability.md +67 -0
- package/assets/guardrails/technology/nextjs/performance-budgets.md +66 -0
- package/assets/guardrails/technology/nextjs/routing-navigation.md +52 -0
- package/assets/guardrails/technology/nextjs/state-management.md +70 -0
- package/assets/guardrails/technology/nextjs/ui-constitution.md +166 -0
- package/dist/commands/init.js +2 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/utils/copy-assets.js +8 -8
- package/dist/utils/copy-assets.js.map +1 -1
- package/package.json +1 -1
- 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"
|