aw-spec-cli 0.1.16 → 0.1.18
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 +18 -18
- package/assets/.appweaver/ORCH-DIALECT.md +1 -3
- package/assets/.appweaver/RULE-PARTITION.md +29 -13
- package/assets/.appweaver/STACK-PROFILES.md +10 -9
- package/assets/.appweaver/orchestrator/.state/smoke.state.json +32 -0
- package/assets/.appweaver/orchestrator/AGENT-PROFILE.md +4 -1
- package/assets/.appweaver/orchestrator/modules/delta-plan.orch.yaml +251 -0
- package/assets/.appweaver/orchestrator/modules/delta-spec.orch.yaml +104 -35
- package/assets/.appweaver/orchestrator/orchestrator.py +5 -4
- package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +94 -36
- package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +1 -1
- package/assets/.appweaver/orchestrator/rev-templates/domain-model-template.skeleton.md +115 -0
- package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +2 -9
- package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +16 -40
- package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +38 -17
- package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +8 -8
- package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +10 -11
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan-delta.orch.yaml +673 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan.orch.yaml +535 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice-delta.orch.yaml +643 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +84 -701
- package/assets/.appweaver/orchestrator/workflows/aw-spec-build.orch.yaml +4 -4
- package/assets/.appweaver/orchestrator/workflows/aw-spec-characterize.orch.yaml +7 -7
- package/assets/.appweaver/orchestrator/workflows/aw-spec-close-delta.orch.yaml +16 -14
- package/assets/.appweaver/orchestrator/workflows/aw-spec-constitution.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-finalize-delta.orch.yaml +243 -144
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +877 -578
- package/assets/.appweaver/orchestrator/workflows/aw-spec-inventory.orch.yaml +4 -4
- package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +32 -91
- package/assets/.appweaver/orchestrator/workflows/aw-spec-parity.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +836 -514
- package/assets/.appweaver/orchestrator/workflows/aw-spec-run.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-bounded-context.orch.yaml +132 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-feature.orch.yaml +38 -5
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +271 -979
- package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +1085 -3385
- package/assets/.appweaver/scripts/bash/aw-xref.sh +1 -2
- package/assets/.appweaver/scripts/bash/common.sh +47 -0
- package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +914 -3220
- package/assets/.appweaver/scripts/powershell/aw-xref.ps1 +1 -2
- package/assets/.appweaver/scripts/python/aw-payload-parity.py +19 -3
- package/assets/.appweaver/scripts/python/aw-stack.py +6 -2
- package/assets/.appweaver/scripts/python/aw-xref.py +86 -350
- package/assets/.appweaver/templates/constitution-ui-template.md +1 -1
- package/assets/.appweaver/templates/delta-design-template.md +120 -30
- package/assets/.appweaver/templates/delta-domain-model-template.md +81 -0
- package/assets/.appweaver/templates/delta-spec-template.md +43 -17
- package/assets/.appweaver/templates/design-template.md +68 -98
- package/assets/.appweaver/templates/domain-model-template.md +130 -0
- package/assets/.appweaver/templates/okf-concept-template.md +2 -2
- package/assets/.appweaver/templates/source-map-template.md +3 -3
- package/assets/.appweaver/templates/spec-template.md +100 -122
- package/assets/.appweaver/templates/ui-delta-design-template.md +159 -0
- package/assets/.appweaver/templates/ui-design-template.md +46 -75
- package/assets/guardrails/projects/dotnet-default-project/domain-rule-bindings.md +7 -18
- package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +34 -39
- package/assets/guardrails/requirement-spec.txt +2 -2
- package/assets/guardrails/technology/dotnet-webapi/testing.md +1 -1
- package/package.json +1 -1
- package/assets/.appweaver/orchestrator/modules/delta-design.orch.yaml +0 -105
- package/assets/.appweaver/orchestrator/modules/spec-state-gate.orch.yaml +0 -87
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-delta-design.orch.yaml +0 -251
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +0 -813
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-delta.orch.yaml +0 -253
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-ui.orch.yaml +0 -663
- package/assets/.appweaver/orchestrator/workflows/aw-spec-plan-ui.orch.yaml +0 -600
- package/assets/.appweaver/orchestrator/workflows/aw-spec-story-plan.orch.yaml +0 -1147
- package/assets/.appweaver/orchestrator/workflows/aw-spec-sync-stories.orch.yaml +0 -1121
- 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. -->
|