aw-spec-cli 0.1.16 → 0.1.17

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 (70) hide show
  1. package/assets/.appweaver/DESIGN-FORMAT.md +18 -18
  2. package/assets/.appweaver/ORCH-DIALECT.md +1 -3
  3. package/assets/.appweaver/RULE-PARTITION.md +29 -13
  4. package/assets/.appweaver/STACK-PROFILES.md +10 -9
  5. package/assets/.appweaver/orchestrator/.state/smoke.state.json +32 -0
  6. package/assets/.appweaver/orchestrator/AGENT-PROFILE.md +4 -1
  7. package/assets/.appweaver/orchestrator/modules/delta-plan.orch.yaml +251 -0
  8. package/assets/.appweaver/orchestrator/modules/delta-spec.orch.yaml +104 -35
  9. package/assets/.appweaver/orchestrator/orchestrator.py +5 -4
  10. package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +94 -36
  11. package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +1 -1
  12. package/assets/.appweaver/orchestrator/rev-templates/domain-model-template.skeleton.md +115 -0
  13. package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +2 -9
  14. package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +16 -40
  15. package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +38 -17
  16. package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +8 -8
  17. package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +10 -11
  18. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan-delta.orch.yaml +673 -0
  19. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan.orch.yaml +535 -0
  20. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice-delta.orch.yaml +643 -0
  21. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +84 -701
  22. package/assets/.appweaver/orchestrator/workflows/aw-spec-build.orch.yaml +4 -4
  23. package/assets/.appweaver/orchestrator/workflows/aw-spec-characterize.orch.yaml +7 -7
  24. package/assets/.appweaver/orchestrator/workflows/aw-spec-close-delta.orch.yaml +16 -14
  25. package/assets/.appweaver/orchestrator/workflows/aw-spec-constitution.orch.yaml +2 -2
  26. package/assets/.appweaver/orchestrator/workflows/aw-spec-finalize-delta.orch.yaml +243 -144
  27. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +877 -578
  28. package/assets/.appweaver/orchestrator/workflows/aw-spec-inventory.orch.yaml +4 -4
  29. package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +32 -91
  30. package/assets/.appweaver/orchestrator/workflows/aw-spec-parity.orch.yaml +2 -2
  31. package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +836 -514
  32. package/assets/.appweaver/orchestrator/workflows/aw-spec-run.orch.yaml +2 -2
  33. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-bounded-context.orch.yaml +132 -0
  34. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-feature.orch.yaml +38 -5
  35. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +3 -3
  36. package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +271 -979
  37. package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +1085 -3385
  38. package/assets/.appweaver/scripts/bash/aw-xref.sh +1 -2
  39. package/assets/.appweaver/scripts/bash/common.sh +47 -0
  40. package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +914 -3220
  41. package/assets/.appweaver/scripts/powershell/aw-xref.ps1 +1 -2
  42. package/assets/.appweaver/scripts/python/aw-payload-parity.py +19 -3
  43. package/assets/.appweaver/scripts/python/aw-stack.py +6 -2
  44. package/assets/.appweaver/scripts/python/aw-xref.py +86 -350
  45. package/assets/.appweaver/templates/constitution-ui-template.md +1 -1
  46. package/assets/.appweaver/templates/delta-design-template.md +120 -30
  47. package/assets/.appweaver/templates/delta-domain-model-template.md +81 -0
  48. package/assets/.appweaver/templates/delta-spec-template.md +43 -17
  49. package/assets/.appweaver/templates/design-template.md +68 -98
  50. package/assets/.appweaver/templates/domain-model-template.md +130 -0
  51. package/assets/.appweaver/templates/okf-concept-template.md +2 -2
  52. package/assets/.appweaver/templates/source-map-template.md +3 -3
  53. package/assets/.appweaver/templates/spec-template.md +100 -122
  54. package/assets/.appweaver/templates/ui-delta-design-template.md +159 -0
  55. package/assets/.appweaver/templates/ui-design-template.md +46 -75
  56. package/assets/guardrails/projects/dotnet-default-project/domain-rule-bindings.md +7 -18
  57. package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +34 -39
  58. package/assets/guardrails/requirement-spec.txt +2 -2
  59. package/assets/guardrails/technology/dotnet-webapi/testing.md +1 -1
  60. package/package.json +1 -1
  61. package/assets/.appweaver/orchestrator/modules/delta-design.orch.yaml +0 -105
  62. package/assets/.appweaver/orchestrator/modules/spec-state-gate.orch.yaml +0 -87
  63. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-delta-design.orch.yaml +0 -251
  64. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +0 -813
  65. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-delta.orch.yaml +0 -253
  66. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-ui.orch.yaml +0 -663
  67. package/assets/.appweaver/orchestrator/workflows/aw-spec-plan-ui.orch.yaml +0 -600
  68. package/assets/.appweaver/orchestrator/workflows/aw-spec-story-plan.orch.yaml +0 -1147
  69. package/assets/.appweaver/orchestrator/workflows/aw-spec-sync-stories.orch.yaml +0 -1121
  70. package/assets/.appweaver/templates/story-template.md +0 -178
@@ -1,178 +0,0 @@
1
- ---
2
- id: [Feature-NNN]
3
- type: functional
4
- status: open
5
- title: [one line — the outcome this story delivers]
6
- exercises: []
7
- constraints: []
8
- spec_version: [vN.N]
9
- depends_on: []
10
- wave: 1
11
- follows:
12
- designed_lanes: []
13
- dropped_lanes: []
14
- work_item:
15
- created: [DATE]
16
- ---
17
-
18
- <!--
19
- USER STORY — one execution slice over a feature's spec.
20
-
21
- Canonical home: specs/<Feature>/stories/<Feature-NNN>.md
22
- Execution artefacts, once story-plan has run: specs/<Feature>/stories/<Feature-NNN>/
23
- (story-backend-plan.md and story-frontend-plan.md — the ephemeral designs, one per
24
- declared lane; every run appends a pass to each lane in scope, the latest pass wins,
25
- and a hand edit to that pass is what implement builds)
26
-
27
- A story is a slice of work over a spec that is already written. It is NEVER a proposal
28
- to change the spec — nothing here merges back into spec.md. When a story genuinely
29
- needs the contract to change, sync-spec (⌛ not built yet — the hand route is
30
- .appweaver/SPEC-EDIT-PROTOCOL.md) folds it back through specify's
31
- checklist -> clarify -> validate loop, and the spec's Change History gains a row.
32
-
33
- ONE STORY, ONE FEATURE. A story whose design touches a second feature is failed by
34
- analysis. Cross-feature ordering goes in depends_on, not in a second story.
35
-
36
- FRONTMATTER — every field the gates read lives here, so checking the backlog is a
37
- directory scan rather than a markdown parse.
38
-
39
- id Minted by the kit: the feature name plus the next free number in
40
- stories/. The writer refuses to overwrite an existing file, so a
41
- collision is an add/add git conflict, never a silent overwrite.
42
- change-story-id corrects it while it is still legal — see below.
43
-
44
- type functional | technical
45
- functional delivers requirement ids; exercises must be non-empty.
46
- technical a refactor, dependency upgrade or performance fix. Changes
47
- no requirement, so exercises stays empty and the EXISTING
48
- TEST SUITE is the oracle: analyze-slice fails the story if
49
- any test was MODIFIED, not only if a test is red. A test
50
- that had to change means behaviour changed, and the work
51
- was a functional story citing an FR-. Technical stories
52
- deliver no requirement and do not count toward the
53
- "no open stories" completeness rule.
54
-
55
- status open | closed | cancelled
56
- cancelled is what keeps "open" meaningful — abandoned work that stays
57
- open blocks its requirement from ever reading as delivered.
58
-
59
- exercises The FR-/BR- ids this story delivers, e.g. [FR-003, BR-002]. This is the
60
- behavioural anchor: design and code trace to these ids, never to a story
61
- id. A requirement is DELIVERED when it has NO OPEN STORIES — not when a
62
- particular story closed, because a follow-on may carry the remainder.
63
-
64
- constraints The spec-level bounds this slice must satisfy: the CN-/DC-/IC-/UX- ids,
65
- lifted from spec.md by the kit and never typed by hand. Spec constraints
66
- are declared aggregate-wide, so the feature's WHOLE set binds every slice
67
- of it and there is nothing to choose. This field is the gate surface —
68
- implement, implement-ui and analyze-slice read it — and the "## Constraints"
69
- section below is where each id gets the line saying what THIS slice does
70
- about it. Stamped by sync-stories; a story written before this field
71
- existed has no key at all, and its readers fall back to the section.
72
-
73
- spec_version The spec version this story last synced at. A row above this version
74
- naming an id in exercises OR constraints means the story is stale;
75
- check-stories reports it and sync-stories acts on it. Restamped on
76
- every sync.
77
-
78
- depends_on Story ids that must land first, e.g. [Payment-004]. About CODE ordering,
79
- not spec: implement warns on an open dependency, which is where calling
80
- into code that does not exist starts to cost something. close-story
81
- warns but does not block — a dependency still being open does not make
82
- this story's own work wrong. A cycle is rejected at authoring time.
83
- sync-stories writes this as a UNION with what is already here, so an
84
- edge added by hand — including one naming another feature's story — is
85
- never lost to a re-sync.
86
-
87
- wave The dependency LEVEL this story sits at, computed by sync-stories from
88
- depends_on:. Wave 1 means nothing has to land before it; wave N means
89
- every story in depends_on: sits in a wave below N. STORIES SHARING A WAVE
90
- HAVE NO ORDERING BETWEEN THEM and can be picked up in parallel — which is
91
- why it is a wave and not an order or a priority. A rank would have to
92
- invent a difference between two stories that genuinely have none, and the
93
- fact that they are equal is the useful half.
94
-
95
- It says when a story becomes ELIGIBLE, not when anyone should start it.
96
- Nothing waits for a whole wave to finish: a story is startable the moment
97
- its own dependencies are done, whatever else shares its wave. A story
98
- raised by hand floors at 1 — nothing is KNOWN to come first.
99
-
100
- designed_lanes Which lanes story-plan actually designed, e.g. [backend, frontend].
101
- dropped_lanes Which lanes it DROPPED, and why the pair exists: a story with no UI
102
- design either has no user-facing surface or had its UI lane dropped when
103
- it was designed — an undeclared frontend lane, or a frontend-plan.md
104
- missing or behind the spec — and one field cannot say which. Written by
105
- story-plan (never by sync-stories: stories are not designed there);
106
- designed accumulates across passes, dropped holds what has been dropped
107
- and not since designed. Both absent on a story that predates them, which
108
- implement-ui reports as exactly that rather than guessing.
109
-
110
- follows On a follow-on only: the story id this one carries the remainder of.
111
- When the spec moves under a story that already has a story plan,
112
- sync-stories leaves that story untouched and mints a follow-on
113
- instead. There is no superseded status; the link is the whole record.
114
-
115
- work_item Optional tracker id (JIRA-1234). The kit's id and the tracker's id stay
116
- separate so the kit depends on no particular tracker.
117
-
118
- CHANGE-STORY-ID IS LEGAL only while the story is open and stories/<ID>/ does not exist.
119
- After story-plan runs, the id is in that directory's name, in the OKF log, in commit
120
- messages and branch names — most of which the kit cannot rewrite. (The story plan's
121
- TEXT never carries the id; its directory is its identity.)
122
-
123
- stories.md beside this file is a GENERATED index. Never hand-edit it; it is rebuilt
124
- from this directory, which is what keeps close-story conflict-free.
125
- -->
126
-
127
- # [Feature-NNN] — [Title]
128
-
129
- ## Story
130
-
131
- As a [role], I want [capability], so that [outcome].
132
-
133
- ## Requirements delivered
134
-
135
- <!-- One line per id in exercises:, saying what THIS story delivers of it. A story
136
- rarely delivers a whole requirement; say which part. Empty for a technical story. -->
137
-
138
- - **[FR-00n]** — [the part of this requirement this story delivers]
139
-
140
- ## Constraints
141
-
142
- <!-- The spec-level bounds this slice must satisfy, carried BY ID from spec.md and never
143
- restated — the spec is the wording, this is the subset that binds this story:
144
-
145
- CN- constraints & NFRs DC- data classification
146
- IC- integration contracts UX- experience standards
147
-
148
- Plus the Experience Scope floors (device / browser / assistive technology) wherever
149
- this slice has a UI surface. UX- and the floors are what stop a story being built to
150
- a standard the product does not hold, and they are the half most often lost: they
151
- reach no UI phase except through the story.
152
-
153
- THE IDS ARE STAMPED FOR YOU into `constraints:` above — the kit lifts every one the
154
- spec declares, because spec constraints bind the aggregate rather than a single
155
- operation. This section is where each gets its LINE. Write one per id saying what
156
- this slice has to do about it, and where one genuinely does not apply, say so in its
157
- line rather than dropping it: an omission used to be indistinguishable from a bound
158
- nobody noticed, which is how a slice gets built without one.
159
-
160
- These are NOT in `exercises:`. That field is FR-/BR- only, because it is the
161
- delivery relation — what this story DELIVERS — and a constraint is not delivered,
162
- it is met. story-plan carries these ids into its design pass; analyze-slice
163
- traces it. -->
164
-
165
- - **[UX-00n]** — [what this slice must satisfy of it]
166
-
167
- ## Acceptance
168
-
169
- <!-- Checkable statements, in the spec's vocabulary. These are what analyze-slice pairs
170
- tests against. For a technical story, state the no-behaviour-change invariant here
171
- and name the suite that proves it. -->
172
-
173
- - [ ] [observable outcome]
174
-
175
- ## Notes
176
-
177
- <!-- Optional: sequencing, risks, what is deliberately out of this slice. Anything that
178
- belongs to the CONTRACT belongs in spec.md via sync-spec, not here. -->