aw-spec-cli 0.1.13 → 0.1.15

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 (30) hide show
  1. package/assets/.appweaver/STACK-PROFILES.md +1 -1
  2. package/assets/.appweaver/orchestrator/orchestrator.py +5 -0
  3. package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +10 -3
  4. package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +38 -11
  5. package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +2 -1
  6. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +607 -123
  7. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +625 -66
  8. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-ui.orch.yaml +407 -134
  9. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +452 -143
  10. package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +78 -14
  11. package/assets/.appweaver/orchestrator/workflows/aw-spec-plan-ui.orch.yaml +597 -0
  12. package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +688 -0
  13. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-feature.orch.yaml +3 -3
  14. package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +23 -23
  15. package/assets/.appweaver/orchestrator/workflows/aw-spec-story-plan.orch.yaml +945 -0
  16. package/assets/.appweaver/orchestrator/workflows/aw-spec-sync-stories.orch.yaml +1040 -0
  17. package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +2069 -28
  18. package/assets/.appweaver/scripts/bash/aw-xref.sh +2 -1
  19. package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +1973 -13
  20. package/assets/.appweaver/scripts/powershell/aw-xref.ps1 +2 -1
  21. package/assets/.appweaver/scripts/python/aw-xref.py +246 -20
  22. package/assets/.appweaver/templates/design-template.md +88 -54
  23. package/assets/.appweaver/templates/spec-template.md +12 -10
  24. package/assets/.appweaver/templates/story-template.md +48 -8
  25. package/assets/.appweaver/templates/ui-design-template.md +71 -39
  26. package/assets/guardrails/projects/dotnet-default-project/domain-rule-bindings.md +19 -7
  27. package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +35 -26
  28. package/package.json +1 -1
  29. package/assets/.appweaver/orchestrator/workflows/aw-spec-design-ui.orch.yaml +0 -386
  30. package/assets/.appweaver/orchestrator/workflows/aw-spec-design.orch.yaml +0 -382
@@ -443,7 +443,7 @@ they are content the kit cannot invent:
443
443
  | `{{backend_ecosystem}}` / `{{frontend_ecosystem}}` | that lane's `ecosystem` |
444
444
 
445
445
  ```md
446
- ## /aw-spec-design
446
+ ## /aw-spec-plan
447
447
  - guardrails/technology/{{stack}}/persistence.md
448
448
  - guardrails/technology/{{frontend_stack}}/ui-constitution.md
449
449
  ```
@@ -1345,6 +1345,11 @@ class Orchestrator:
1345
1345
  raise Stop(f"loop '{loop_id}': 'over' is not a list: {step.get('over')}")
1346
1346
  for idx, item in enumerate(items):
1347
1347
  if max_it is not None and idx >= max_it:
1348
+ # Says so, the way the while branch does. A foreach that stops early
1349
+ # drops the tail of its list, and a run that drops work in silence
1350
+ # reports the same success as one that did all of it.
1351
+ self.emit(f"[loop] {loop_id} hit max_iterations={max_it} — "
1352
+ f"{len(items) - max_it} item(s) not run")
1348
1353
  break
1349
1354
  self.vars[as_name] = item
1350
1355
  self.vars[as_name + "_index"] = idx
@@ -35,8 +35,15 @@ partition; preserve it exactly.
35
35
  into the spec's CN-/DC-/IC- (design/implement never see these files). -->
36
36
  - guardrails/projects/[project]/domain/[each generated domain rule file].md
37
37
 
38
- ## /aw-spec-design
39
- _None — design loads no domain file. Domain reaches design only through the spec (BR-/CN-/DC-/IC-)._
38
+ ## /aw-spec-plan
39
+ _None — the service lane's design loads no domain file. Domain reaches it only through the spec
40
+ (BR-/CN-/DC-/IC-)._
41
+
42
+ ## /aw-spec-plan-ui
43
+ _None — the frontend lane's design loads no domain file either: domain reaches frontend-plan.md
44
+ as spec ids (UX-/CN-/DC-/IC-). Written out rather than left absent, because an absent heading and
45
+ an empty one behave identically and only one of them is a decision. Keep this heading even in a
46
+ backend-only repo — it costs nothing and records the partition._
40
47
 
41
48
  ## /aw-spec-implement
42
49
  _None — implement loads no domain file. Domain reaches implement only through design.md._
@@ -54,6 +61,6 @@ _None — implement loads no domain file. Domain reaches implement only through
54
61
  |---|---|---|
55
62
  | /aw-spec-constitution | [n] | domain principles |
56
63
  | /aw-spec-specify | [n] | author into spec (lift → CN-/DC-/IC-) |
57
- | /aw-spec-design | 0 | none — spec is the only domain input |
64
+ | /aw-spec-plan | 0 | none — spec is the only domain input |
58
65
  | /aw-spec-implement | 0 | none — design is the only domain input |
59
66
  | /aw-spec-gate | [n] | conformance checklist (validate, don't author) |
@@ -43,7 +43,7 @@ refers to it directly, as-is.
43
43
  wired via domain-rule-bindings). No technology rule may appear under this heading. -->
44
44
  - guardrails/projects/[project]/service/domain-modelling.md
45
45
 
46
- ## /aw-spec-design
46
+ ## /aw-spec-plan
47
47
  <!-- The as-built architecture / cross-cutting technical rules the design author mediates the spec
48
48
  against. NO domain file here — domain reaches design only as spec ids. -->
49
49
  - guardrails/projects/[project]/service/[as-built-architecture].md
@@ -62,7 +62,7 @@ refers to it directly, as-is.
62
62
  - guardrails/projects/[project]/service/[as-built-architecture].md
63
63
 
64
64
  ## /aw-spec-analyze-slice
65
- <!-- The design↔code conformance gate's TECHNICAL checklist (validate, don't author). -->
65
+ <!-- The spec↔code conformance gate's TECHNICAL checklist (validate, don't author). -->
66
66
  - guardrails/projects/[project]/service/[testing/convention rule to validate against].md
67
67
 
68
68
  ## /aw-spec-adopt
@@ -86,13 +86,34 @@ refers to it directly, as-is.
86
86
  a runtime/hosting concern file. NOT data-migration (migration is the deferred later phase). -->
87
87
  - guardrails/projects/[project]/service/[runtime/hosting rule].md
88
88
 
89
- <!-- ## /aw-spec-ui-constitution — the FRONTEND LANE's heading. It is NOT written by the step
90
- that authors this map; onboard's frontend rule-set step APPENDS it here, after the technical
91
- headings and before the quick-reference table, but only where the scan found a UI in the
92
- code. It maps the generated frontend/ lane rules (frontend/ui-constitution.md first), and
93
- it is also the authoritative signal that this project HAS a frontend lane — a later
94
- /appweaver constitution reads it to decide whether to author constitution.ui.md at all.
95
- A backend-only repo simply never gets the heading.
89
+ <!-- THE FRONTEND LANE'S THREE HEADINGS. None of them is written by the step that authors
90
+ this map; onboard's frontend rule-set step APPENDS all three here, after the technical
91
+ headings and before the quick-reference table, and ONLY where the scan found a UI in the
92
+ code. A backend-only repo never gets any of them, which is correct and not an omission.
93
+
94
+ ## /aw-spec-ui-constitution — the ratifiable lane standards, frontend/ui-constitution.md
95
+ first. It is also the authoritative signal that this project HAS a frontend lane: a
96
+ later /appweaver constitution reads it to decide whether to author constitution.ui.md
97
+ at all.
98
+ ## /aw-spec-plan-ui — the DESIGN set /appweaver plan-ui works from when it authors
99
+ or conforms frontend-plan.md: composition, routing, client state, interaction states,
100
+ forms, accessibility, i18n, performance — whichever of those the generated set holds.
101
+ ## /aw-spec-implement-ui — the CODE-GENERATION set /appweaver implement-ui builds
102
+ against: conventions, the client/service pairing, styling, forms, accessibility, i18n,
103
+ performance, testing — again, whichever exist.
104
+
105
+ THE TWO PHASE SETS OVERLAP ON PURPOSE. A concern like forms, accessibility, i18n or
106
+ performance carries a DESIGN half and an IMPLEMENT half of one rule — the design decides
107
+ the states, affordances and targets; implement realises them. A rule mapped under only
108
+ one heading loses the pairing, and the half that goes unread is the half that goes
109
+ unbuilt. Map such a file under BOTH.
110
+
111
+ WHY ALL THREE AND NOT JUST THE FIRST. `## /aw-spec-ui-constitution` alone wires the lane
112
+ for re-ratification and NOTHING else: with no `## /aw-spec-plan-ui`, plan-ui loads zero
113
+ mapped frontend rules and designs the experience from constitution.ui.md alone, while the
114
+ files it needed sit on disk unreferenced — and because an absent heading soft-continues,
115
+ nobody is told. Both phases ship (/appweaver plan-ui, /appweaver implement-ui), so both
116
+ headings are claims the kit CAN honour.
96
117
 
97
118
  Do NOT add /aw-spec-characterize or /aw-spec-parity in the DEV flow — characterize is
98
119
  opt-on-touch and parity is deferred to the migration phase. Add any other heading later
@@ -106,11 +127,17 @@ refers to it directly, as-is.
106
127
  | Command | Technical rule files | Role |
107
128
  |---|---|---|
108
129
  | /aw-spec-specify | 1 | the as-built modelling methodology the domain model is expressed in — no technology |
109
- | /aw-spec-design | [n] | as-built architecture the design author mediates the spec against |
130
+ | /aw-spec-plan | [n] | as-built architecture the design author mediates the spec against |
110
131
  | /aw-spec-implement | [n] | code-generation set the generator builds against (from design.md) |
111
132
  | /aw-spec-implement-delta | [n] | same code-generation set, scoped to the open change's delta-design |
112
133
  | /aw-spec-build | [n] | layering + convention rules the compile-fixer respects |
113
- | /aw-spec-analyze-slice | [n] | conformance rules the design↔code gate validates against |
134
+ | /aw-spec-analyze-slice | [n] | conformance rules the spec↔code gate validates against |
114
135
  | /aw-spec-adopt | [n] | technical reference set for the reversed design (brownfield) |
115
136
  | /aw-spec-constitution | [n] | the standards the technical constitution half is re-ratified from |
116
137
  | /aw-spec-run | [n] | runtime/execution conventions the app-run step honors (only if evidenced) |
138
+
139
+ <!-- The frontend lane's rows are appended by the same step that appends its headings, and
140
+ only where the lane exists:
141
+ | /aw-spec-ui-constitution | [n] | the ratifiable lane standards the UI constitution half is re-ratified from |
142
+ | /aw-spec-plan-ui | [n] | the as-built experience rules plan-ui authors frontend-plan.md against |
143
+ | /aw-spec-implement-ui | [n] | the as-built code-generation set implement-ui builds the UI against | -->
@@ -637,7 +637,8 @@ workflow:
637
637
  spec.md (a resolved [NEEDS CLARIFICATION] / Assumption) or log a deviation.
638
638
  Review items: {{review_items}}
639
639
  - "## How to proceed": resolve blocking gaps first; then the slice is a normal
640
- feature — run /appweaver analyze-design (spec↔design gate) if desired, then
640
+ feature — run /appweaver plan (which renames this design.md to backend-plan.md and
641
+ conforms it) and then /appweaver analyze-design (the spec↔plan gate), then
641
642
  drive every change through the CR delta loop. If a change edits untested legacy
642
643
  behaviour with blast radius, characterize just that surface first (optional
643
644
  on-touch fence) — it is not a required phase.