aw-spec-cli 0.1.26 → 0.1.28
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/.agents/skills/appweaver/SKILL.md +7 -47
- package/assets/.appweaver/ORCH-DIALECT.md +13 -9
- package/assets/.appweaver/RULE-PARTITION.md +11 -12
- package/assets/.appweaver/STACK-PROFILES.md +260 -108
- package/assets/.appweaver/domain.json +1 -1
- package/assets/.appweaver/interpreter/run-skill.py +28 -7
- package/assets/.appweaver/orchestrator/AGENT-PROFILE.md +38 -10
- package/assets/.appweaver/orchestrator/LAUNCHER.md +88 -0
- package/assets/.appweaver/orchestrator/README.md +120 -53
- package/assets/.appweaver/orchestrator/adapters/claude_agent_sdk.py +1 -1
- package/assets/.appweaver/orchestrator/modules/delta-plan.orch.yaml +17 -7
- package/assets/.appweaver/orchestrator/modules/domain-select.orch.yaml +6 -4
- package/assets/.appweaver/orchestrator/modules/foundation-lane.orch.yaml +237 -0
- package/assets/.appweaver/orchestrator/modules/foundation-pack.orch.yaml +392 -0
- package/assets/.appweaver/orchestrator/modules/foundation-spec.orch.yaml +548 -0
- package/assets/.appweaver/orchestrator/modules/lane-gate.orch.yaml +4 -4
- package/assets/.appweaver/orchestrator/modules/tech-select.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/orchestrator.py +162 -63
- package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +5 -4
- package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +3 -1
- package/assets/.appweaver/orchestrator/rev-templates/domain-constitution.skeleton.md +2 -2
- package/assets/.appweaver/orchestrator/rev-templates/domain-requirements.skeleton.md +2 -2
- package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +21 -13
- package/assets/.appweaver/orchestrator/rev-templates/frontend-rule-file.skeleton.md +1 -1
- package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +28 -31
- package/assets/.appweaver/orchestrator/rev-templates/technical-constitution.skeleton.md +2 -2
- package/assets/.appweaver/orchestrator/rev-templates/technical-rule-file.skeleton.md +1 -1
- package/assets/.appweaver/orchestrator/rev-templates/ui-constitution.skeleton.md +3 -3
- package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +4 -1
- package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +6 -4
- package/assets/.appweaver/orchestrator/workflows/_smoke.orch.yaml +41 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-add-component.orch.yaml +1 -1
- package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +17 -16
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan-delta.orch.yaml +7 -1
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan.orch.yaml +7 -1
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice-delta.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-build.orch.yaml +4 -4
- package/assets/.appweaver/orchestrator/workflows/aw-spec-characterize.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-constitution.orch.yaml +61 -12
- package/assets/.appweaver/orchestrator/workflows/aw-spec-deploy.orch.yaml +1 -1
- package/assets/.appweaver/orchestrator/workflows/aw-spec-foundation.orch.yaml +172 -293
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +253 -44
- package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +72 -71
- package/assets/.appweaver/orchestrator/workflows/aw-spec-parity.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +38 -14
- package/assets/.appweaver/orchestrator/workflows/aw-spec-run.orch.yaml +4 -4
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-bounded-context.orch.yaml +26 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-domain.orch.yaml +21 -15
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +14 -14
- package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-ui-model.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-ui-prototype.orch.yaml +6 -6
- package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +371 -131
- package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +293 -76
- package/assets/.appweaver/scripts/python/aw-foundation.py +885 -20
- package/assets/.appweaver/scripts/python/aw-inventory.py +28 -21
- package/assets/.appweaver/scripts/python/aw-plan-coverage.py +2 -2
- package/assets/.appweaver/scripts/python/aw-rev-constitution.py +6 -6
- package/assets/.appweaver/scripts/python/aw-stack.py +676 -99
- package/assets/.appweaver/stack-profiles/angular.json +2 -1
- package/assets/.appweaver/stack-profiles/blazor-wasm.json +2 -1
- package/assets/.appweaver/stack-profiles/dotnet-webapi.json +18 -3
- package/assets/.appweaver/stack-profiles/go-chi.json +6 -1
- package/assets/.appweaver/stack-profiles/java-spring.json +14 -5
- package/assets/.appweaver/stack-profiles/nextjs.json +2 -1
- package/assets/.appweaver/stack-profiles/node-express.json +8 -2
- package/assets/.appweaver/stack-profiles/python-fastapi.json +9 -2
- package/assets/.appweaver/stack-profiles/react-vite.json +2 -1
- package/assets/.appweaver/stack-profiles/sveltekit.json +2 -1
- package/assets/.appweaver/stack-profiles/vue-vite.json +2 -1
- package/assets/.appweaver/stacks.json +40 -1
- package/assets/.appweaver/templates/constitution-ui-template.md +2 -2
- package/assets/.appweaver/templates/delta-design-template.md +7 -5
- package/assets/.appweaver/templates/design-template.md +3 -0
- package/assets/.appweaver/templates/ui-delta-design-template.md +1 -1
- package/assets/.appweaver/templates/ui-design-template.md +6 -4
- package/assets/.claude/skills/appweaver/SKILL.md +7 -46
- package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.Reference.rules.json +31 -0
- package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.lane.json +6 -0
- package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.Reference.rules.json +16 -0
- package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.lane.json +6 -0
- package/assets/foundations/foundation.spec.template.txt +98 -0
- package/assets/foundations/java/Hexagonal/Hexagonal.lane.json +6 -0
- package/assets/foundations/java/Hexagonal/Hexagonal.pack.txt +8 -1
- package/assets/foundations/java/Hexagonal/unpack-foundation.sh +4 -5
- package/assets/foundations/node/NextAppRouter/NextAppRouter.spec.txt +68 -0
- package/assets/guardrails/README.md +31 -17
- package/assets/guardrails/{projects/dotnet-default-project → project-specific}/domain-rule-bindings.md +25 -13
- package/assets/guardrails/project-specific/tech-rule-bindings.md +296 -0
- package/assets/guardrails/technology/dotnet-webapi/PACKAGING.md +58 -4
- package/assets/guardrails/technology/dotnet-webapi/api-versioning.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/auditing.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/authorization.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/clean-architecture.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/coding-standards.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/cqrs.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/data-classification.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/dependency-policy.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/eventing.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/folder-structure.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/framework-api-map.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/modular-monolith.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/persistence.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/testing.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/vertical-slices.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/zero-trust.md +1 -1
- package/assets/guardrails/technology/nextjs/accessibility-implementation.md +1 -1
- package/assets/guardrails/technology/nextjs/api-client.md +1 -1
- package/assets/guardrails/technology/nextjs/api-integration.dotnet-webapi.md +1 -1
- package/assets/guardrails/technology/nextjs/api-integration.java-spring.md +1 -1
- package/assets/guardrails/technology/nextjs/auth-session.md +1 -1
- package/assets/guardrails/technology/nextjs/client-security.md +1 -1
- package/assets/guardrails/technology/nextjs/component-architecture.md +1 -1
- package/assets/guardrails/technology/nextjs/component-conventions.md +2 -2
- package/assets/guardrails/technology/nextjs/design-system.md +1 -1
- package/assets/guardrails/technology/nextjs/error-handling.md +1 -1
- package/assets/guardrails/technology/nextjs/forms-and-validation.md +1 -1
- package/assets/guardrails/technology/nextjs/frontend-testing.md +1 -1
- package/assets/guardrails/technology/nextjs/i18n.md +1 -1
- package/assets/guardrails/technology/nextjs/observability.md +1 -1
- package/assets/guardrails/technology/nextjs/performance-budgets.md +1 -1
- package/assets/guardrails/technology/nextjs/routing-navigation.md +1 -1
- package/assets/guardrails/technology/nextjs/state-management.md +1 -1
- package/assets/guardrails/technology/nextjs/ui-constitution.md +3 -3
- package/package.json +1 -1
- package/assets/.agents/skills/appweaver-demo/SKILL.md +0 -59
- package/assets/.appweaver/orchestrator/.smoke-out/smoke.md +0 -6
- package/assets/.appweaver/orchestrator/workflows/aw-spec-demo.orch.yaml +0 -100
- package/assets/.claude/skills/appweaver-demo/SKILL.md +0 -59
- package/assets/.kilocode/agent.json +0 -28
- package/assets/.kilocode/workflows/appweaver-demo.md +0 -59
- package/assets/.kilocode/workflows/appweaver.md +0 -55
- package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +0 -271
- /package/assets/guardrails/{projects/dotnet-default-project → project-specific}/domain/domain-requirements.md +0 -0
- /package/assets/guardrails/{projects/dotnet-default-project → project-specific}/frontend/ui-requirements.md +0 -0
- /package/assets/guardrails/{projects/dotnet-default-project → project-specific}/service/technical-requirements.md +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# aw-spec-constitution (orchestrator) — create/update the SPLIT project constitution
|
|
3
3
|
#
|
|
4
4
|
# Authors up to THREE files. Each ratifies its own MAPPED rule set. The two maps live in
|
|
5
|
-
# the ACTIVE PROJECT (guardrails
|
|
5
|
+
# the ACTIVE PROJECT (guardrails/<project>/); the files they list live in the
|
|
6
6
|
# shared corpora (guardrails/technology/<stack>/, guardrails/domain/<industry>/), except
|
|
7
7
|
# the three the project's own team authors:
|
|
8
8
|
# .appweaver/memory/constitution.technical.md ← "## /aw-spec-constitution" in
|
|
@@ -72,6 +72,13 @@
|
|
|
72
72
|
# a bounded self-correction loop (max 3) — so the whole skill works under every
|
|
73
73
|
# strategy (sdk/sdk-apply/spawn/agent), --checkpoint, or headless.
|
|
74
74
|
#
|
|
75
|
+
# THE DEFAULT SCOPE. On a project with no specs yet the run ends by creating the bounded
|
|
76
|
+
# context MainContext and its feature CoreFeature (specs/MainContext/CoreFeature/) and
|
|
77
|
+
# making both active, so a simple project goes from constitution straight to specify.
|
|
78
|
+
# Any other state is left alone. A developer who wants other names runs
|
|
79
|
+
# select-bounded-context and select-feature, which re-point both pointer files; the empty
|
|
80
|
+
# default folders can then be deleted.
|
|
81
|
+
#
|
|
75
82
|
# NOT part of the per-feature pipeline. Project-level, run-once / amend-on-change.
|
|
76
83
|
#
|
|
77
84
|
# Launch: /appweaver constitution [strategy] [principles or values…]
|
|
@@ -79,8 +86,8 @@
|
|
|
79
86
|
# =============================================================================
|
|
80
87
|
|
|
81
88
|
name: aw-spec-constitution
|
|
82
|
-
description: Create or update the split project constitution — constitution.technical.md (technology base) + constitution.ui.md (the frontend lane's base, only where a lane exists) + constitution.domain.md (active domain addenda), each version-bumped with a Sync Impact Report, then composed into constitution.md. Project-level, run-once/amend — not a per-feature phase.
|
|
83
|
-
version: 2.
|
|
89
|
+
description: Create or update the split project constitution — constitution.technical.md (technology base) + constitution.ui.md (the frontend lane's base, only where a lane exists) + constitution.domain.md (active domain addenda), each version-bumped with a Sync Impact Report, then composed into constitution.md. On a project with no specs yet it also creates and activates the default bounded context MainContext and its feature CoreFeature. Project-level, run-once/amend — not a per-feature phase.
|
|
90
|
+
version: 2.6.0
|
|
84
91
|
agent_agnostic: true
|
|
85
92
|
dialect: aw-spec.orchestrator/v1
|
|
86
93
|
|
|
@@ -97,7 +104,7 @@ scripts:
|
|
|
97
104
|
|
|
98
105
|
# Sticky standards seed = the UNIVERSAL always-on rule only (ai-rules). The technology-
|
|
99
106
|
# constitution base the TECHNICAL half ratifies is no longer hardcoded here — it is now
|
|
100
|
-
# CONFIGURATION, loaded per-command from guardrails
|
|
107
|
+
# CONFIGURATION, loaded per-command from guardrails/<project>/tech-rule-bindings.md
|
|
101
108
|
# under "## /aw-spec-constitution" by the tech-select module (see the tech_select step
|
|
102
109
|
# below). tech_select runs BEFORE the technical half AND before domain-select, so the
|
|
103
110
|
# technical author still sees only the technology base + ai-rules — NO domain file: the
|
|
@@ -112,6 +119,11 @@ vars:
|
|
|
112
119
|
domain_ok: "false" # domain-half validation-loop guard, flipped by constitution-verify
|
|
113
120
|
ui_ok: "false" # UI-half validation-loop guard, flipped by constitution-verify
|
|
114
121
|
ui_lane: "false" # set by the three-signal probe below; gates the whole UI block
|
|
122
|
+
default_context: "MainContext" # the bounded context a project with no specs yet starts in
|
|
123
|
+
default_feature: "CoreFeature" # the feature created inside it and made active
|
|
124
|
+
scope_created: "false" # default-scope: whether this run created the pair
|
|
125
|
+
scope_skipped: "" # default-scope: why it did not, when it did not
|
|
126
|
+
active_feature_dir: "" # default-scope: the active feature after the step
|
|
115
127
|
|
|
116
128
|
workflow:
|
|
117
129
|
|
|
@@ -121,7 +133,7 @@ workflow:
|
|
|
121
133
|
# what makes `(none)` in select-stack a real declaration rather than a shrug.
|
|
122
134
|
#
|
|
123
135
|
# --allow-missing-root because nothing here reads the subtree: constitution
|
|
124
|
-
# ratifies rules, and a greenfield project's
|
|
136
|
+
# ratifies rules, and a greenfield project's lane root folder does not exist until
|
|
125
137
|
# implement creates it. The on-disk check belongs to the phases that read code.
|
|
126
138
|
- id: lane_model
|
|
127
139
|
action: execute_script
|
|
@@ -179,7 +191,7 @@ workflow:
|
|
|
179
191
|
vars: { svc_lane: "true", setup_tech_flag: "" }
|
|
180
192
|
|
|
181
193
|
# 0. TECHNICAL rule files → sticky standards (configuration, not hardcoded). tech-select
|
|
182
|
-
# reads guardrails
|
|
194
|
+
# reads guardrails/<project>/tech-rule-bindings.md under "## /aw-spec-constitution"
|
|
183
195
|
# and loads the technology-constitution base into the sticky standards the TECHNICAL
|
|
184
196
|
# half ratifies. Placed FIRST — before the technical half AND before domain-select — so
|
|
185
197
|
# the technical author sees only technical files: the seam that keeps it domain-free is
|
|
@@ -376,7 +388,7 @@ workflow:
|
|
|
376
388
|
vars:
|
|
377
389
|
ui_lane: "true"
|
|
378
390
|
ui_stack: "{{fe_lane_profile}}"
|
|
379
|
-
ui_evidence: "lane '{{fe_lane_id}}' ({{fe_lane_profile}}) is declared in .appweaver/stacks.json, owning the
|
|
391
|
+
ui_evidence: "lane '{{fe_lane_id}}' ({{fe_lane_profile}}) is declared in .appweaver/stacks.json, owning the lane root folder {{fe_lane_root}}"
|
|
380
392
|
|
|
381
393
|
# 9. A mapped UI rule set with no lane to govern. Not fatal and not a reason to
|
|
382
394
|
# author the half — the declaration decides that — but worth saying out loud,
|
|
@@ -405,8 +417,8 @@ workflow:
|
|
|
405
417
|
No frontend lane in .appweaver/stacks.json — skipping the UI constitution half
|
|
406
418
|
(constitution.ui.md is not created). This is the expected path for a backend-only
|
|
407
419
|
project. To author it, run `/appweaver select-stack`, pick a UI stack and give
|
|
408
|
-
it a
|
|
409
|
-
`## /aw-spec-ui-constitution` in guardrails
|
|
420
|
+
it a lane root folder, then re-run `/appweaver constitution`. Mapping
|
|
421
|
+
`## /aw-spec-ui-constitution` in guardrails/<project>/tech-rule-bindings.md
|
|
410
422
|
supplies the rules that half ratifies, but no longer creates the lane on its own —
|
|
411
423
|
a lane exists because the project declared it.
|
|
412
424
|
|
|
@@ -693,7 +705,41 @@ workflow:
|
|
|
693
705
|
removed automatically. Delete that file by hand if the lane is gone for good and
|
|
694
706
|
re-run; otherwise restore the lane's signal.
|
|
695
707
|
|
|
696
|
-
# 21.
|
|
708
|
+
# 21. THE DEFAULT SCOPE. A project with no specs yet gets the bounded context named by
|
|
709
|
+
# default_context and the feature named by default_feature inside it, both made
|
|
710
|
+
# active, so /appweaver specify can run next with no select command in between.
|
|
711
|
+
# default-scope acts only when specs/ holds no directory and no feature is active;
|
|
712
|
+
# every other state is reported as skipped and left untouched, so amending the
|
|
713
|
+
# constitution never moves the active feature and an onboarded brownfield tree is
|
|
714
|
+
# never added to.
|
|
715
|
+
- id: default_scope
|
|
716
|
+
action: execute_script
|
|
717
|
+
script: { ref: actions }
|
|
718
|
+
subcommand: default-scope
|
|
719
|
+
args: ["--context", "{{default_context}}", "--feature", "{{default_feature}}"]
|
|
720
|
+
outputs:
|
|
721
|
+
- { name: scope_created, from: "$.created" }
|
|
722
|
+
- { name: scope_skipped, from: "$.skipped_reason" }
|
|
723
|
+
- { name: active_feature_dir, from: "$.feature_dir" }
|
|
724
|
+
|
|
725
|
+
# 21b. Say what was created and how to choose other names. The never-satisfiable
|
|
726
|
+
# `equals` is the engine's announce-only idiom: the step is entered only when the
|
|
727
|
+
# pair was created, and the comparison always misses, so the message is emitted
|
|
728
|
+
# and the run continues.
|
|
729
|
+
- id: default_scope_notice
|
|
730
|
+
action: verify_context
|
|
731
|
+
condition: "{{scope_created}} == true"
|
|
732
|
+
require_value: scope_created
|
|
733
|
+
equals: "never"
|
|
734
|
+
on_mismatch: continue
|
|
735
|
+
on_mismatch_message: >
|
|
736
|
+
Created the default bounded context {{default_context}} and its feature
|
|
737
|
+
{{default_feature}} at {{active_feature_dir}}/ and made both active, so
|
|
738
|
+
/appweaver specify <what it does> can run next. To use your own names instead, run
|
|
739
|
+
/appweaver select-bounded-context <Name> and then /appweaver select-feature <Name>;
|
|
740
|
+
the empty default folders can then be deleted.
|
|
741
|
+
|
|
742
|
+
# 22. Post-execution hooks.
|
|
697
743
|
- id: resolve_post_hooks
|
|
698
744
|
action: execute_script
|
|
699
745
|
script: { ref: actions }
|
|
@@ -723,5 +769,8 @@ outputs:
|
|
|
723
769
|
ui_rule_files: "{{ui_rule_files}}"
|
|
724
770
|
ui_validation_ok: "{{ui_ok}}"
|
|
725
771
|
ui_validation_issues: "{{ui_issues}}"
|
|
726
|
-
|
|
727
|
-
|
|
772
|
+
default_scope_created: "{{scope_created}}"
|
|
773
|
+
default_scope_skipped: "{{scope_skipped}}"
|
|
774
|
+
active_feature: "{{active_feature_dir}}"
|
|
775
|
+
note: "Split constitution authored, one half per LANE the project declared in .appweaver/stacks.json. service_lane / ui_lane report which lanes were found there, and the declaration is the ONLY signal read: a half is a lane's standing governance, so a lane declared `(none)` in select-stack gets no half AND no file. constitution.technical.md is the service lane's base (standing input to the SERVICE lane of plan + implement); constitution.ui.md is the UI lane's UX-* base (standing input to their FRONTEND lane); constitution.domain.md is the domain addenda (standing input to specify + a gate checklist), and it is always authored because domain is not a lane — it addends whichever halves exist. All are composed into constitution.md, which now tolerates an absent technical half: a UI-only project's domain half opens the roman-numeral sequence at I instead of continuing one, and numbering_checked reports false because that check has no subject rather than because it silently passed. Mapping ## /aw-spec-ui-constitution supplies the rules the UI half ratifies but no longer creates the lane on its own — a mapped rule set with no declared lane produces a warning naming both fixes. ui_lane false with ui_included true means a lane was retired after its half was authored: the file is left alone and the log says so, because a ratified governance file is never deleted automatically. If a validation_ok is false, the matching validation_issues lists what still needs a manual touch. See each half's Sync Impact Report for its version bump. DEFAULT SCOPE: on a project with no specs yet this run created the bounded context {{default_context}} and its feature {{default_feature}} and made both active (default_scope_created true); any other state is left untouched and default_scope_skipped says why. active_feature is the feature specify will write to. Suggested commit: 'docs: amend split constitution'."
|
|
776
|
+
next: "/appweaver specify <what the feature does> when active_feature is set — on a project with no specs yet that is the default {{default_context}}/{{default_feature}} this run created. To use your own names, run /appweaver select-bounded-context <Name> and then /appweaver select-feature <Name> first; the empty default folders can then be deleted. When no feature is active, run /appweaver select-feature first — every stage from specify onward reads the active feature and stops without it; if the repo uses bounded contexts, pick one with /appweaver select-bounded-context before it, since once any context exists select-feature refuses to run without one. From specify the greenfield sequence runs plan → analyze-plan → implement → build → analyze-slice → run → deploy. THE HALVES ARE LOADED PER CONCERN, not all at once — /appweaver specify loads constitution.domain.md; the SERVICE lane of plan + implement loads constitution.technical.md; their FRONTEND lane loads constitution.ui.md. Re-run /appweaver constitution to amend, including to pick up a lane declared or dropped after this run — re-run /appweaver select-stack first to change which lanes exist."
|
|
@@ -81,5 +81,5 @@ workflow:
|
|
|
81
81
|
outputs:
|
|
82
82
|
feature_dir: "{{feature_dir}}"
|
|
83
83
|
deployed: "{{configured}}"
|
|
84
|
-
note:
|
|
84
|
+
note: 'Set .appweaver/deploy.json {"command": "..."} to enable an actual deploy; add smoke/rollback via before_deploy/after_deploy hooks.'
|
|
85
85
|
next: "done"
|