yadflow 3.9.3 → 3.10.0
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/CHANGELOG.md +19 -0
- package/bin/yad.mjs +13 -1
- package/cli/epic-state.mjs +131 -1
- package/cli/errors.mjs +1 -0
- package/cli/skip.mjs +45 -0
- package/package.json +2 -1
- package/skills/sdlc/config.yaml +2 -1
- package/skills/yad-docs/templates/app/package-lock.json +662 -641
- package/skills/yad-docs/templates/app/package.json +4 -4
- package/skills/yad-epic/SKILL.md +6 -0
- package/skills/yad-epic/references/state-schema.md +26 -0
- package/skills/yad-status/SKILL.md +7 -0
- package/skills/yad-stories/SKILL.md +5 -0
- package/skills/yad-test-cases/SKILL.md +4 -0
- package/skills/yad-ui/SKILL.md +13 -0
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
"framer-motion": "^12.34.4",
|
|
14
14
|
"react": "^19.2.0",
|
|
15
15
|
"react-dom": "^19.2.0",
|
|
16
|
-
"react-router-dom": "^7.
|
|
16
|
+
"react-router-dom": "^7.18.1",
|
|
17
17
|
"zustand": "^5.0.11"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@eslint/js": "^9.39.1",
|
|
21
|
-
"@tailwindcss/vite": "^4.2
|
|
21
|
+
"@tailwindcss/vite": "^4.3.2",
|
|
22
22
|
"@types/node": "^24.10.1",
|
|
23
23
|
"@types/react": "^19.2.7",
|
|
24
24
|
"@types/react-dom": "^19.2.3",
|
|
25
|
-
"@vitejs/plugin-react": "^5.
|
|
25
|
+
"@vitejs/plugin-react": "^5.2.0",
|
|
26
26
|
"eslint": "^9.39.1",
|
|
27
27
|
"eslint-plugin-react-hooks": "^7.0.1",
|
|
28
28
|
"eslint-plugin-react-refresh": "^0.4.24",
|
|
@@ -30,6 +30,6 @@
|
|
|
30
30
|
"tailwindcss": "^4.2.1",
|
|
31
31
|
"typescript": "~5.9.3",
|
|
32
32
|
"typescript-eslint": "^8.48.0",
|
|
33
|
-
"vite": "^
|
|
33
|
+
"vite": "^8.1.3"
|
|
34
34
|
}
|
|
35
35
|
}
|
package/skills/yad-epic/SKILL.md
CHANGED
|
@@ -156,6 +156,12 @@ Notes:
|
|
|
156
156
|
and an empty comments ledger `{project-root}/epics/EP-<slug>/.sdlc/comments.json`, each containing
|
|
157
157
|
`[]`, and the `reviews/` directory. (`comments.json` is the machine-readable counterpart to the
|
|
158
158
|
`reviews/*--comments.md` markdown — `yad-review-gate` appends to it on every `comment`.)
|
|
159
|
+
- **No UI?** Seed the chain **as-is** (always include the two `ui-design` steps). If this epic has no
|
|
160
|
+
user-facing surface (a backend/API service, data pipeline, infra), the `ui-design` step is optional
|
|
161
|
+
and can be marked N/A now with `yad skip EP-<slug> ui-design --reason "<why>"` — it stays visible,
|
|
162
|
+
short-circuits its gate, and advances straight to `stories` when architecture is approved. It is
|
|
163
|
+
reversible with `--undo` until the stories review opens. Don't hand-edit the seed to drop the steps;
|
|
164
|
+
the skip is the single, auditable mechanism (see `references/state-schema.md` → "ui-design is optional").
|
|
159
165
|
|
|
160
166
|
### Step 5b — Advance the authoring step — analysis-ran only
|
|
161
167
|
*(Only when analysis ran — `state.json` already exists from `yad-analysis`.)*
|
|
@@ -37,6 +37,32 @@ existing `state.json` and does **not** re-seed.
|
|
|
37
37
|
`analysis-review`, `ui-design-review`, and `test-cases-review` carry no `risk_tags` (base rule:
|
|
38
38
|
owner + 1 reviewer).
|
|
39
39
|
|
|
40
|
+
### `ui-design` is optional (skippable)
|
|
41
|
+
|
|
42
|
+
The `ui-design` step (and its `ui-design-review` gate) is **optional** for an epic with no
|
|
43
|
+
user-facing surface — a backend/API service, a data pipeline, infra work. Unlike `analysis` (which is
|
|
44
|
+
optional by being **omitted** from the chain at seed time), `ui-design` is **always seeded** and then
|
|
45
|
+
**marked N/A in place** so the skip stays visible and auditable. The single mechanism is
|
|
46
|
+
`yad skip EP-<slug> ui-design --reason "<why>"` (reverse with `--undo`), usable at epic-authoring time
|
|
47
|
+
or any point **up to authoring the `ui-design` step** — the skip is refused once its review gate has
|
|
48
|
+
opened (the UI work is committed by then) or once `stories` has started. `--undo` is allowed until the
|
|
49
|
+
`stories` review opens.
|
|
50
|
+
|
|
51
|
+
A skipped step gets four extra fields and is pre-marked `done`:
|
|
52
|
+
|
|
53
|
+
| Field | Values | Meaning |
|
|
54
|
+
|-------|--------|---------|
|
|
55
|
+
| `skipped` | `true` | This step is N/A for this epic; pre-marked `done`, short-circuited by `gatePredicate` (`rule: "skipped"`) so no review is required. |
|
|
56
|
+
| `skipReason` | string | Why it was skipped (e.g. "backend-only service, no UI"). |
|
|
57
|
+
| `skippedBy` | login/name or `null` | Who marked it N/A (best-effort, from the roster/git identity). |
|
|
58
|
+
| `skippedAt` | `YYYY-MM-DD` or `null` | When it was marked N/A. |
|
|
59
|
+
|
|
60
|
+
Both the `ui-design` **and** `ui-design-review` entries carry these fields. `advanceState` steps over
|
|
61
|
+
any `skipped` step, so approving `architecture-review` on a UI-less epic lands directly on `stories`;
|
|
62
|
+
`preconditionsMet` treats the pre-`done` steps as satisfied. `unskipStep` (via `yad skip … --undo`)
|
|
63
|
+
strips the fields and restores the chain, refused once `stories-review` has opened. Only `ui-design` is
|
|
64
|
+
skippable today (engine `SKIPPABLE_STEPS`).
|
|
65
|
+
|
|
40
66
|
### `test-cases` is a parallel, non-blocking track
|
|
41
67
|
|
|
42
68
|
`test-cases` (and its `test-cases-review` gate) sit in `steps[]` after `stories-review`, but they are a
|
|
@@ -46,6 +46,13 @@ Print, in this order:
|
|
|
46
46
|
passes and runs alongside the build half, so when `currentStep` is `ready-for-build` the `test-cases`
|
|
47
47
|
step may still be `in_progress`/`in_review` — show its status, and note "parallel" so it is clear it
|
|
48
48
|
does not gate the build. Always render exactly the steps present in `steps[]`.
|
|
49
|
+
- **Skipped (N/A) steps:** the optional `ui-design` step may be marked N/A for an epic with no
|
|
50
|
+
user-facing surface. **Both** the `ui-design` author step **and** its `ui-design-review` gate stay
|
|
51
|
+
in `steps[]`, each carrying `skipped: true`, `status: "done"`, and a `skipReason`. Render **each**
|
|
52
|
+
as `<id> — SKIPPED (N/A: <skipReason>)` (with `skippedBy`/`skippedAt` if present) instead of the
|
|
53
|
+
plain status, so the deliberate skip and its reason are visible and the gate does not appear to
|
|
54
|
+
vanish. The chain then reads `… architecture-review → ui-design (N/A) → ui-design-review (N/A) →
|
|
55
|
+
stories → …`; the review gate never needs approvals.
|
|
49
56
|
3. **Active gate** — for the `currentStep` (if it is a `review+approve` step), compute and show:
|
|
50
57
|
- the reviewer rule in force — **base** (`owner + 1 reviewer`), **escalated** (list the required
|
|
51
58
|
domains), or **per-repo** for `stories-review` (list each repo needing sign-off),
|
|
@@ -45,6 +45,11 @@ Read `epic.md` (scope, acceptance signals, `repos`), `architecture.md` (componen
|
|
|
45
45
|
`contract.md` (the shared surface stories must honour), and `ui-design.md` (screens/flows). Stories
|
|
46
46
|
must collectively satisfy the epic's acceptance signals and stay within the contract surface.
|
|
47
47
|
|
|
48
|
+
- **UI-optional-safe:** `ui-design.md` may be absent — the `ui-design` step is optional and can be
|
|
49
|
+
marked N/A for an epic with no user-facing surface (state.json shows it `skipped`). When there is no
|
|
50
|
+
UI design, proceed without UI screens; the epic's acceptance signals + contract remain the source of
|
|
51
|
+
truth for the stories.
|
|
52
|
+
|
|
48
53
|
### Step 2b — Load existing-code context (make the brain code-aware)
|
|
49
54
|
Read the registry `{project-root}/.sdlc/repos.json` (`config.yaml` `code_context`). For **each repo in
|
|
50
55
|
`epic.repos`**, load the code-map `{project-root}/.sdlc/code-context/<repo>/code-map.md` so each story's
|
|
@@ -60,6 +60,10 @@ Read `epic.md` (user-level acceptance signals, scope), `architecture.md` (flows,
|
|
|
60
60
|
**all** approved `stories/EP-<slug>-S0N.md`. Each story's **acceptance criteria are the source of truth**
|
|
61
61
|
for the cases — the test cases must collectively verify every story's criteria.
|
|
62
62
|
|
|
63
|
+
- **UI-optional-safe:** `ui-design.md` may be absent — the `ui-design` step is optional and can be
|
|
64
|
+
marked N/A for a UI-less epic (state.json shows it `skipped`). When there is no UI design, there are
|
|
65
|
+
simply no screens to exercise; the stories' acceptance criteria remain the source of truth.
|
|
66
|
+
|
|
63
67
|
### Step 2b — Load existing-code context (make the brain code-aware)
|
|
64
68
|
Read the registry `{project-root}/.sdlc/repos.json` (`config.yaml` `code_context`). For **each repo in
|
|
65
69
|
`epic.repos`**, load the code-map `{project-root}/.sdlc/code-context/<repo>/code-map.md` so the
|
package/skills/yad-ui/SKILL.md
CHANGED
|
@@ -42,6 +42,19 @@ it passes.
|
|
|
42
42
|
This passes when `ui-design` is the next runnable step per the state sequence — every prior step
|
|
43
43
|
(through the architecture review) is `done` and `ui-design` is not already `done`.
|
|
44
44
|
|
|
45
|
+
**This step is OPTIONAL.** If the epic has no user-facing surface (a backend/API service, a data
|
|
46
|
+
pipeline, infra work), it does not need a UI design. Two signals to watch for:
|
|
47
|
+
|
|
48
|
+
- **Already skipped:** if `ui-design.status` is `done` with `skipped: true` in `state.json` (the
|
|
49
|
+
`--check` above will report `ui-design is already done`), the step was marked N/A — **STOP**, there
|
|
50
|
+
is nothing to author; point the user at `yad next EP-<slug>` (the next step is `stories`).
|
|
51
|
+
- **Should be skipped:** if you reach this step and the epic clearly produces no screens, do **not**
|
|
52
|
+
invent a hollow UI artifact. Offer to mark it N/A instead:
|
|
53
|
+
`yad skip EP-<slug> ui-design --reason "<why, e.g. backend-only service>"`. That pre-marks both the
|
|
54
|
+
`ui-design` and `ui-design-review` steps `done` (recorded reason + actor), short-circuits the review
|
|
55
|
+
gate, and advances to `stories`. It is reversible with `yad skip EP-<slug> ui-design --undo` until the
|
|
56
|
+
stories review opens. See `../yad-epic/references/state-schema.md` → "ui-design is optional".
|
|
57
|
+
|
|
45
58
|
### Step 1b — Open the authoring branch
|
|
46
59
|
Open the UI authoring branch `ui-design/EP-<slug>` per the shared procedure
|
|
47
60
|
(`../yad-epic/references/state-schema.md` → "Authoring branches"): git-safe (skip with a note
|