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.
Files changed (137) hide show
  1. package/assets/.agents/skills/appweaver/SKILL.md +7 -47
  2. package/assets/.appweaver/ORCH-DIALECT.md +13 -9
  3. package/assets/.appweaver/RULE-PARTITION.md +11 -12
  4. package/assets/.appweaver/STACK-PROFILES.md +260 -108
  5. package/assets/.appweaver/domain.json +1 -1
  6. package/assets/.appweaver/interpreter/run-skill.py +28 -7
  7. package/assets/.appweaver/orchestrator/AGENT-PROFILE.md +38 -10
  8. package/assets/.appweaver/orchestrator/LAUNCHER.md +88 -0
  9. package/assets/.appweaver/orchestrator/README.md +120 -53
  10. package/assets/.appweaver/orchestrator/adapters/claude_agent_sdk.py +1 -1
  11. package/assets/.appweaver/orchestrator/modules/delta-plan.orch.yaml +17 -7
  12. package/assets/.appweaver/orchestrator/modules/domain-select.orch.yaml +6 -4
  13. package/assets/.appweaver/orchestrator/modules/foundation-lane.orch.yaml +237 -0
  14. package/assets/.appweaver/orchestrator/modules/foundation-pack.orch.yaml +392 -0
  15. package/assets/.appweaver/orchestrator/modules/foundation-spec.orch.yaml +548 -0
  16. package/assets/.appweaver/orchestrator/modules/lane-gate.orch.yaml +4 -4
  17. package/assets/.appweaver/orchestrator/modules/tech-select.orch.yaml +3 -3
  18. package/assets/.appweaver/orchestrator/orchestrator.py +162 -63
  19. package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +5 -4
  20. package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +3 -1
  21. package/assets/.appweaver/orchestrator/rev-templates/domain-constitution.skeleton.md +2 -2
  22. package/assets/.appweaver/orchestrator/rev-templates/domain-requirements.skeleton.md +2 -2
  23. package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +21 -13
  24. package/assets/.appweaver/orchestrator/rev-templates/frontend-rule-file.skeleton.md +1 -1
  25. package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +28 -31
  26. package/assets/.appweaver/orchestrator/rev-templates/technical-constitution.skeleton.md +2 -2
  27. package/assets/.appweaver/orchestrator/rev-templates/technical-rule-file.skeleton.md +1 -1
  28. package/assets/.appweaver/orchestrator/rev-templates/ui-constitution.skeleton.md +3 -3
  29. package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +4 -1
  30. package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +6 -4
  31. package/assets/.appweaver/orchestrator/workflows/_smoke.orch.yaml +41 -3
  32. package/assets/.appweaver/orchestrator/workflows/aw-spec-add-component.orch.yaml +1 -1
  33. package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +17 -16
  34. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan-delta.orch.yaml +7 -1
  35. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan.orch.yaml +7 -1
  36. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice-delta.orch.yaml +3 -3
  37. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +3 -3
  38. package/assets/.appweaver/orchestrator/workflows/aw-spec-build.orch.yaml +4 -4
  39. package/assets/.appweaver/orchestrator/workflows/aw-spec-characterize.orch.yaml +2 -2
  40. package/assets/.appweaver/orchestrator/workflows/aw-spec-constitution.orch.yaml +61 -12
  41. package/assets/.appweaver/orchestrator/workflows/aw-spec-deploy.orch.yaml +1 -1
  42. package/assets/.appweaver/orchestrator/workflows/aw-spec-foundation.orch.yaml +172 -293
  43. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +253 -44
  44. package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +72 -71
  45. package/assets/.appweaver/orchestrator/workflows/aw-spec-parity.orch.yaml +2 -2
  46. package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +38 -14
  47. package/assets/.appweaver/orchestrator/workflows/aw-spec-run.orch.yaml +4 -4
  48. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-bounded-context.orch.yaml +26 -2
  49. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-domain.orch.yaml +21 -15
  50. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +14 -14
  51. package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +3 -3
  52. package/assets/.appweaver/orchestrator/workflows/aw-spec-ui-model.orch.yaml +3 -3
  53. package/assets/.appweaver/orchestrator/workflows/aw-spec-ui-prototype.orch.yaml +6 -6
  54. package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +371 -131
  55. package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +293 -76
  56. package/assets/.appweaver/scripts/python/aw-foundation.py +885 -20
  57. package/assets/.appweaver/scripts/python/aw-inventory.py +28 -21
  58. package/assets/.appweaver/scripts/python/aw-plan-coverage.py +2 -2
  59. package/assets/.appweaver/scripts/python/aw-rev-constitution.py +6 -6
  60. package/assets/.appweaver/scripts/python/aw-stack.py +676 -99
  61. package/assets/.appweaver/stack-profiles/angular.json +2 -1
  62. package/assets/.appweaver/stack-profiles/blazor-wasm.json +2 -1
  63. package/assets/.appweaver/stack-profiles/dotnet-webapi.json +18 -3
  64. package/assets/.appweaver/stack-profiles/go-chi.json +6 -1
  65. package/assets/.appweaver/stack-profiles/java-spring.json +14 -5
  66. package/assets/.appweaver/stack-profiles/nextjs.json +2 -1
  67. package/assets/.appweaver/stack-profiles/node-express.json +8 -2
  68. package/assets/.appweaver/stack-profiles/python-fastapi.json +9 -2
  69. package/assets/.appweaver/stack-profiles/react-vite.json +2 -1
  70. package/assets/.appweaver/stack-profiles/sveltekit.json +2 -1
  71. package/assets/.appweaver/stack-profiles/vue-vite.json +2 -1
  72. package/assets/.appweaver/stacks.json +40 -1
  73. package/assets/.appweaver/templates/constitution-ui-template.md +2 -2
  74. package/assets/.appweaver/templates/delta-design-template.md +7 -5
  75. package/assets/.appweaver/templates/design-template.md +3 -0
  76. package/assets/.appweaver/templates/ui-delta-design-template.md +1 -1
  77. package/assets/.appweaver/templates/ui-design-template.md +6 -4
  78. package/assets/.claude/skills/appweaver/SKILL.md +7 -46
  79. package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.Reference.rules.json +31 -0
  80. package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.lane.json +6 -0
  81. package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.Reference.rules.json +16 -0
  82. package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.lane.json +6 -0
  83. package/assets/foundations/foundation.spec.template.txt +98 -0
  84. package/assets/foundations/java/Hexagonal/Hexagonal.lane.json +6 -0
  85. package/assets/foundations/java/Hexagonal/Hexagonal.pack.txt +8 -1
  86. package/assets/foundations/java/Hexagonal/unpack-foundation.sh +4 -5
  87. package/assets/foundations/node/NextAppRouter/NextAppRouter.spec.txt +68 -0
  88. package/assets/guardrails/README.md +31 -17
  89. package/assets/guardrails/{projects/dotnet-default-project → project-specific}/domain-rule-bindings.md +25 -13
  90. package/assets/guardrails/project-specific/tech-rule-bindings.md +296 -0
  91. package/assets/guardrails/technology/dotnet-webapi/PACKAGING.md +58 -4
  92. package/assets/guardrails/technology/dotnet-webapi/api-versioning.md +1 -1
  93. package/assets/guardrails/technology/dotnet-webapi/auditing.md +1 -1
  94. package/assets/guardrails/technology/dotnet-webapi/authorization.md +1 -1
  95. package/assets/guardrails/technology/dotnet-webapi/clean-architecture.md +1 -1
  96. package/assets/guardrails/technology/dotnet-webapi/coding-standards.md +1 -1
  97. package/assets/guardrails/technology/dotnet-webapi/cqrs.md +1 -1
  98. package/assets/guardrails/technology/dotnet-webapi/data-classification.md +1 -1
  99. package/assets/guardrails/technology/dotnet-webapi/dependency-policy.md +1 -1
  100. package/assets/guardrails/technology/dotnet-webapi/eventing.md +1 -1
  101. package/assets/guardrails/technology/dotnet-webapi/folder-structure.md +1 -1
  102. package/assets/guardrails/technology/dotnet-webapi/framework-api-map.md +1 -1
  103. package/assets/guardrails/technology/dotnet-webapi/modular-monolith.md +1 -1
  104. package/assets/guardrails/technology/dotnet-webapi/persistence.md +1 -1
  105. package/assets/guardrails/technology/dotnet-webapi/testing.md +1 -1
  106. package/assets/guardrails/technology/dotnet-webapi/vertical-slices.md +1 -1
  107. package/assets/guardrails/technology/dotnet-webapi/zero-trust.md +1 -1
  108. package/assets/guardrails/technology/nextjs/accessibility-implementation.md +1 -1
  109. package/assets/guardrails/technology/nextjs/api-client.md +1 -1
  110. package/assets/guardrails/technology/nextjs/api-integration.dotnet-webapi.md +1 -1
  111. package/assets/guardrails/technology/nextjs/api-integration.java-spring.md +1 -1
  112. package/assets/guardrails/technology/nextjs/auth-session.md +1 -1
  113. package/assets/guardrails/technology/nextjs/client-security.md +1 -1
  114. package/assets/guardrails/technology/nextjs/component-architecture.md +1 -1
  115. package/assets/guardrails/technology/nextjs/component-conventions.md +2 -2
  116. package/assets/guardrails/technology/nextjs/design-system.md +1 -1
  117. package/assets/guardrails/technology/nextjs/error-handling.md +1 -1
  118. package/assets/guardrails/technology/nextjs/forms-and-validation.md +1 -1
  119. package/assets/guardrails/technology/nextjs/frontend-testing.md +1 -1
  120. package/assets/guardrails/technology/nextjs/i18n.md +1 -1
  121. package/assets/guardrails/technology/nextjs/observability.md +1 -1
  122. package/assets/guardrails/technology/nextjs/performance-budgets.md +1 -1
  123. package/assets/guardrails/technology/nextjs/routing-navigation.md +1 -1
  124. package/assets/guardrails/technology/nextjs/state-management.md +1 -1
  125. package/assets/guardrails/technology/nextjs/ui-constitution.md +3 -3
  126. package/package.json +1 -1
  127. package/assets/.agents/skills/appweaver-demo/SKILL.md +0 -59
  128. package/assets/.appweaver/orchestrator/.smoke-out/smoke.md +0 -6
  129. package/assets/.appweaver/orchestrator/workflows/aw-spec-demo.orch.yaml +0 -100
  130. package/assets/.claude/skills/appweaver-demo/SKILL.md +0 -59
  131. package/assets/.kilocode/agent.json +0 -28
  132. package/assets/.kilocode/workflows/appweaver-demo.md +0 -59
  133. package/assets/.kilocode/workflows/appweaver.md +0 -55
  134. package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +0 -271
  135. /package/assets/guardrails/{projects/dotnet-default-project → project-specific}/domain/domain-requirements.md +0 -0
  136. /package/assets/guardrails/{projects/dotnet-default-project → project-specific}/frontend/ui-requirements.md +0 -0
  137. /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/projects/<project>/); the files they list live in the
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.5.0
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/projects/<project>/tech-rule-bindings.md
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 source path does not exist until
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/projects/<project>/tech-rule-bindings.md under "## /aw-spec-constitution"
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 source path {{fe_lane_root}}"
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 source path, then re-run `/appweaver constitution`. Mapping
409
- `## /aw-spec-ui-constitution` in guardrails/projects/<project>/tech-rule-bindings.md
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. Post-execution hooks.
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
- 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. Suggested commit: 'docs: amend split constitution'."
727
- next: "/appweaver select-feature → specify. select-feature picks the feature to build and every stage from specify onward reads that active feature and stops without it; on a brownfield workspace pick the bounded context first with /appweaver select-bounded-context. 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."
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: "Set .appweaver/deploy.json {\"command\": \"...\"} to enable an actual deploy; add smoke/rollback via before_deploy/after_deploy hooks."
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"