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,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" "$@"
|