yadflow 3.16.3 → 3.17.1

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.
@@ -23,9 +23,9 @@ declares; it does not redesign, does not widen the contract, and does not pick u
23
23
  - The work happens **inside the code repo** (a separate git repo) at
24
24
  `{project-root}/demo-repos/<repo>/` (`config.yaml` `build.code_repos_root`). Use absolute paths.
25
25
  - **Branch name:** `feat/<story-id>-<task-id>-<short-slug>` (e.g.
26
- `feat/EP-istifta-inquiries-S01-T01-create-inquiry`). Branched off the code repo's default branch.
26
+ `feat/EP-checkout-S01-T01-create-order`). Branched off the code repo's default branch.
27
27
  - **Commit message:** a conventional subject, body describing the change, and a **required `Task:`
28
- trailer** (e.g. `Task: EP-istifta-inquiries-S01-T01`) in the trailer block. Add `Contract-Change: yes`
28
+ trailer** (e.g. `Task: EP-checkout-S01-T01`) in the trailer block. Add `Contract-Change: yes`
29
29
  **only** if the diff touches the locked contract surface (see Step 5), and a per-commit
30
30
  `Co-Authored-By:` for any AI tool that helped author the diff (the human author owns the commit;
31
31
  trailer order `Task:` → `Contract-Change:` → `Co-Authored-By:`). The skill installs a `.gitmessage`
@@ -84,7 +84,7 @@ boundary breach). The same applies to the Step 5 contract-surface stop (`contrac
84
84
  ### Step 5 — Contract-surface check (local pre-flight for Step C)
85
85
  Determine whether the diff touches the **locked contract surface** (the API/event/data-model shapes in
86
86
  `epics/<epic>/contract.md`'s `CONTRACT-SURFACE` block). Normal implementation **consumes** the
87
- contract (e.g. implementing `POST /inquiries` to the agreed shape) — that is **not** a contract change.
87
+ contract (e.g. implementing `POST /orders` to the agreed shape) — that is **not** a contract change.
88
88
  A contract change means the diff alters the agreed cross-repo shape itself.
89
89
 
90
90
  - If the diff does **not** change the surface: proceed; no `Contract-Change` trailer.
@@ -10,11 +10,11 @@ diff back to its task, story, and contract.
10
10
  feat/<story-id>-<task-id>-<short-slug>
11
11
  ```
12
12
 
13
- - `<story-id>` — the permanent story ID, e.g. `EP-istifta-inquiries-S01`.
13
+ - `<story-id>` — the permanent story ID, e.g. `EP-checkout-S01`.
14
14
  - `<task-id>` — the atomic task ID from `tasks.md`, e.g. `T01`.
15
- - `<short-slug>` — 2–4 hyphenated words naming the change, e.g. `create-inquiry`.
15
+ - `<short-slug>` — 2–4 hyphenated words naming the change, e.g. `create-order`.
16
16
 
17
- Example: `feat/EP-istifta-inquiries-S01-T01-create-inquiry`. Branched off the code repo's default
17
+ Example: `feat/EP-checkout-S01-T01-create-order`. Branched off the code repo's default
18
18
  branch. One task = one branch; never reuse a branch for a different task, never fork a second branch
19
19
  for the same task.
20
20
 
@@ -33,9 +33,9 @@ Task: <story-id>-<task-id>
33
33
  - The **`<type>` is lowercase** (`feat`, `fix`, `docs`, `refactor`, `test`, `perf`, `build`, `ci`,
34
34
  `chore`, `revert`) and the **`<subject>` starts lowercase**, is **imperative**, and has **no trailing
35
35
  period** — Conventional Commits (see `CONTRIBUTING.md` and `config.yaml` `build.commit_subject_style`).
36
- Proper nouns/acronyms keep their case (`fix: refresh OAuth token`). e.g. `feat: add POST /inquiries
37
- create path`, not `feat: Add POST /inquiries create path.`
38
- - The **`Task:` trailer is required** (`Task: EP-istifta-inquiries-S01-T01`) — the anchor the spec-link
36
+ Proper nouns/acronyms keep their case (`fix: refresh OAuth token`). e.g. `feat: add POST /orders
37
+ create path`, not `feat: Add POST /orders create path.`
38
+ - The **`Task:` trailer is required** (`Task: EP-checkout-S01-T01`) — the anchor the spec-link
39
39
  check (§C) and the PR (§D) read to connect the diff to its spec and story. It need not be the *last*
40
40
  line: the spec-link gate finds it with git's native trailer parser
41
41
  (`%(trailers:key=Task)`), which is order-independent. All trailers must sit in **one contiguous block**
@@ -85,7 +85,7 @@ The **locked contract surface** is the cross-repo agreement in `epics/<epic>/con
85
85
  `CONTRACT-SURFACE` block, hash-locked at `.sdlc/contract-lock.json`). Distinguish:
86
86
 
87
87
  - **Consuming the contract** (normal) — implementing an endpoint/event/entity to the shape the contract
88
- already agreed (e.g. building `POST /inquiries` to its agreed request/response). **Not** a contract
88
+ already agreed (e.g. building `POST /orders` to its agreed request/response). **Not** a contract
89
89
  change; no trailer.
90
90
  - **Changing the contract** (exceptional) — altering the agreed shape itself (new field crossing repos,
91
91
  changed status enum, new shared endpoint). This is **not** an implementation decision. Stop, go back
@@ -188,7 +188,9 @@ PR only — against the `review/<epic>/<artifact>` branch, which must already ex
188
188
  records this skill describes. The skill's
189
189
  job is the human half: presenting the artifact, helping the owner address comments, and narrating the
190
190
  gate. Local `yad gate sync` is advisory in bridge mode (reads the platform, prints status, writes
191
- nothing); a human must never commit gate-state files (the `ledger-guard` check rejects it). The single
191
+ nothing); a human must never commit gate-state files (the `ledger-guard` check rejects it, and the
192
+ `hooks/ledger-guard.sh` harness hook refuses an agent the edit up front, naming `yad gate open`
193
+ instead — see `yad-checks`). The single
192
194
  exception is an epic's **seed** — no CI path can create a ledger, so a brand-new epic's `.sdlc/` rides
193
195
  its **first** review PR/MR, cut from the authoring branch (creation, not mutation, #162).
194
196
 
@@ -25,7 +25,7 @@ is the same graceful-degradation pattern `yad-ui` uses for Impeccable.
25
25
  - **Code repos are separate git repos**, one `.git` each, under `{project-root}/demo-repos/<repo>/`
26
26
  (`config.yaml` `build.code_repos_root`). All Spec Kit outputs land **inside the code repo**, never
27
27
  in the product repo.
28
- - `{feature-id}` is the **story ID** (e.g. `EP-istifta-inquiries-S01`) — **pinned**, never Spec Kit's
28
+ - `{feature-id}` is the **story ID** (e.g. `EP-checkout-S01`) — **pinned**, never Spec Kit's
29
29
  numbered auto-slug (which is unstable and severs the permanent story link). The spec folder is
30
30
  `specs/<story-id>/`.
31
31
  - Spec Kit output layout (RESEARCH-NOTES §2): `specs/<feature-id>/spec.md` (+ `research.md`,
@@ -48,11 +48,11 @@ comes from the story's acceptance criteria and the **locked contract surface**
48
48
  contract endpoints/entities the story touches.
49
49
  - **`research.md`** — list the decisions and any unknowns; if the story is unambiguous, say so. Note
50
50
  where the contract already settles a question (e.g. status is server-owned).
51
- - **`data-model.md`** — the entities/fields **this repo** implements. Shared entities (e.g. `Inquiry`,
52
- `InquiryStatus`) are **quoted from the contract** and marked as contract-owned; repo-private fields
51
+ - **`data-model.md`** — the entities/fields **this repo** implements. Shared entities (e.g. `Order`,
52
+ `OrderStatus`) are **quoted from the contract** and marked as contract-owned; repo-private fields
53
53
  are marked as local.
54
54
  - **`contracts/`** — the slice of the API/event surface this repo implements, **quoted from the locked
55
- `contract.md`** (e.g. `POST /inquiries` request/response). Add a one-line note that this is a quote of
55
+ `contract.md`** (e.g. `POST /orders` request/response). Add a one-line note that this is a quote of
56
56
  the locked surface, not a new definition.
57
57
  - **`plan.md`** — the technical approach for this repo at story altitude (components, sequence,
58
58
  test approach). No new cross-repo surface.
@@ -38,7 +38,7 @@ Print, in this order:
38
38
  1. **Header:** render the kind noun from `epic.md` frontmatter `kind` — **Change request** (`change`),
39
39
  **Defect** (`defect`), **Hotfix** (`hotfix`), or **Epic** (`feature`, and the default when `kind` is
40
40
  absent) — followed by `epicId`, then `status` from `epic.md` frontmatter, `currentStep`, and `repos`
41
- (the touched domains). Example: `Defect EP-istifta-queue-filter — draft @ stories`. A bug is a defect
41
+ (the touched domains). Example: `Defect EP-checkout-queue-filter — draft @ stories`. A bug is a defect
42
42
  (`kind: defect`) — there is no separate noun. This is presentation only; the artifact is still an epic.
43
43
  2. **Steps table** — for every front step in `steps[]` order (10, or 12 when the optional analysis step
44
44
  was run): `id`, `type`, `status`, `assistance`, `automation`, `locked`, and `risk_tags`. Mark the
@@ -18,7 +18,7 @@ There is **no `sm` agent** (Phase 0 Deviation 1): the `pm` lens breaks down the
18
18
 
19
19
  - `{project-root}` resolves from the project working directory.
20
20
  - Stories live under `{project-root}/epics/EP-<slug>/stories/` (build plan §6).
21
- - Story files are named `EP-<slug>-S0N.md` (zero-padded, e.g. `EP-istifta-inquiries-S01.md`).
21
+ - Story files are named `EP-<slug>-S0N.md` (zero-padded, e.g. `EP-checkout-S01.md`).
22
22
  - Speak in the configured `communication_language`; write documents in `document_output_language`.
23
23
 
24
24
  ## On Activation
@@ -152,7 +152,7 @@ When Step 3b generated or linked automation, write the machine-readable case→t
152
152
  "direction": "generated | linked",
153
153
  "tests": [
154
154
  { "case": "TC-01", "story": "EP-<slug>-S01", "repo": "backend", "level": "e2e",
155
- "path": "tests/inquiry.spec.ts", "url": "<repo url to the test>" }
155
+ "path": "tests/order.spec.ts", "url": "<repo url to the test>" }
156
156
  ],
157
157
  "source": "playwright-mcp"
158
158
  }
@@ -45,7 +45,7 @@ Written by `yad-test-cases` Step 4b. Absent when the step ran artifacts-only (`t
45
45
  "direction": "generated | linked",
46
46
  "tests": [
47
47
  { "case": "TC-01", "story": "EP-<slug>-S01", "repo": "backend", "level": "e2e",
48
- "path": "tests/inquiry.spec.ts", "url": "<repo url to the test>" }
48
+ "path": "tests/order.spec.ts", "url": "<repo url to the test>" }
49
49
  ],
50
50
  "source": "playwright-mcp"
51
51
  }
@@ -160,7 +160,7 @@ When Step 3b generated or linked a design, write the machine-readable screen→f
160
160
  "generatedAt": "<YYYY-MM-DD>",
161
161
  "direction": "generated | linked",
162
162
  "screens": [
163
- { "name": "Submit Inquiry", "platform": "mobile",
163
+ { "name": "Checkout", "platform": "mobile",
164
164
  "nodeId": "123:45", "url": "https://www.figma.com/file/<key>/?node-id=123-45" }
165
165
  ],
166
166
  "source": "figma-mcp"