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.
@@ -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.13.1",
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.1",
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.1.1",
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": "^7.3.1"
33
+ "vite": "^8.1.3"
34
34
  }
35
35
  }
@@ -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
@@ -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