yadflow 3.18.0 → 3.19.0-next.2
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 +46 -0
- package/README.md +11 -11
- package/bin/yad.mjs +8 -8
- package/cli/artifact-status.mjs +4 -4
- package/cli/checkpoint.mjs +25 -25
- package/cli/commit.mjs +1 -1
- package/cli/companion.mjs +2 -2
- package/cli/doctor.mjs +10 -10
- package/cli/epic-state.mjs +29 -29
- package/cli/errors.mjs +1 -1
- package/cli/gate.mjs +32 -33
- package/cli/hook.mjs +4 -4
- package/cli/hubcommit.mjs +1 -1
- package/cli/ledger.mjs +3 -3
- package/cli/lib.mjs +23 -9
- package/cli/manifest.mjs +42 -21
- package/cli/migrate.mjs +54 -12
- package/cli/next.mjs +5 -5
- package/cli/openpr.mjs +8 -8
- package/cli/plan.mjs +28 -9
- package/cli/platform.mjs +1 -1
- package/cli/report.mjs +1 -1
- package/cli/review.mjs +5 -5
- package/cli/setup.mjs +22 -10
- package/cli/ship.mjs +1 -1
- package/cli/skip.mjs +1 -1
- package/cli/thread.mjs +1 -1
- package/cli/tidy.mjs +2 -2
- package/cli/update-commit.mjs +1 -1
- package/package.json +1 -1
- package/skills/sdlc/config.yaml +30 -30
- package/skills/sdlc/module-help.csv +21 -21
- package/skills/yad-analysis/SKILL.md +10 -10
- package/skills/yad-architecture/SKILL.md +10 -10
- package/skills/yad-architecture/references/contract-format.md +2 -3
- package/skills/yad-backfill/SKILL.md +5 -5
- package/skills/yad-change/SKILL.md +13 -13
- package/skills/yad-change/references/triage.md +2 -3
- package/skills/yad-checks/SKILL.md +34 -16
- package/skills/yad-checks/references/check-gates.md +63 -19
- package/skills/yad-checks/templates/checks/build-test-lint.sh +25 -7
- package/skills/yad-checks/templates/checks/epic-open.sh +1 -1
- package/skills/yad-checks/templates/checks/install-deps.sh +46 -0
- package/skills/yad-checks/templates/checks/ledger-guard.sh +41 -12
- package/skills/yad-checks/templates/checks/package-manager.sh +140 -0
- package/skills/yad-checks/templates/checks/reconcile-debt-check.sh +3 -3
- package/skills/yad-checks/templates/github/yad-checks.yml +24 -3
- package/skills/yad-checks/templates/github/yad-hub-checks.yml +2 -2
- package/skills/yad-checks/templates/github/yad-verified-commits.yml +1 -1
- package/skills/yad-checks/templates/gitlab/.gitlab-ci.yml +7 -1
- package/skills/yad-checks/templates/gitlab/yad-checks.gitlab-ci.yml +12 -3
- package/skills/yad-checks/templates/gitlab/yad-hub-checks.gitlab-ci.yml +2 -2
- package/skills/yad-checks/templates/gitlab/yad-verified-commits.gitlab-ci.yml +1 -1
- package/skills/yad-checks/templates/hooks/ledger-guard.sh +1 -1
- package/skills/yad-commit/SKILL.md +2 -2
- package/skills/yad-connect-design/SKILL.md +1 -1
- package/skills/yad-connect-docs/SKILL.md +1 -1
- package/skills/yad-connect-repos/SKILL.md +32 -15
- package/skills/yad-connect-repos/references/code-context.md +2 -2
- package/skills/yad-connect-repos/references/hub-config.md +25 -11
- package/skills/yad-connect-repos/references/repos-registry.md +3 -3
- package/skills/yad-connect-testing/SKILL.md +1 -1
- package/skills/yad-defects/SKILL.md +1 -1
- package/skills/yad-discovery/SKILL.md +6 -6
- package/skills/yad-discovery/references/discovery-schema.md +1 -1
- package/skills/yad-docs/SKILL.md +3 -3
- package/skills/yad-docs/templates/app/package-lock.json +65 -51
- package/skills/yad-docs/templates/app/package.json +1 -1
- package/skills/yad-docs-overview/SKILL.md +3 -3
- package/skills/yad-docs-overview/references/pipeline-model.md +17 -11
- package/skills/yad-engineer-review/SKILL.md +9 -9
- package/skills/yad-engineer-review/references/ship-and-record.md +8 -8
- package/skills/yad-epic/SKILL.md +15 -15
- package/skills/yad-epic/references/state-schema.md +30 -30
- package/skills/yad-hub-bridge/SKILL.md +14 -14
- package/skills/yad-hub-bridge/references/bridge.md +17 -17
- package/skills/yad-hub-bridge/references/login-roster.md +3 -3
- package/skills/yad-hub-bridge/templates/checks/hub-route.sh +1 -1
- package/skills/yad-hub-bridge/templates/gitlab/yad-gate-sync.gitlab-ci.yml +1 -1
- package/skills/yad-implement/SKILL.md +3 -3
- package/skills/yad-open-pr/SKILL.md +4 -4
- package/skills/yad-pair-review/SKILL.md +12 -12
- package/skills/yad-pair-review/references/session-state.md +3 -3
- package/skills/yad-pr-template/SKILL.md +4 -4
- package/skills/yad-pr-template/references/risk-routing.md +1 -1
- package/skills/yad-pr-template/templates/checks/pr-template.sh +18 -10
- package/skills/yad-pr-template/templates/checks/pr-title.sh +7 -7
- package/skills/yad-pr-template/templates/hub/github/pull_request_template.md +1 -1
- package/skills/yad-pr-template/templates/hub/gitlab/merge_request_templates/Default.md +1 -1
- package/skills/yad-reconcile/SKILL.md +1 -1
- package/skills/yad-report/SKILL.md +1 -1
- package/skills/yad-review-companion/SKILL.md +7 -7
- package/skills/yad-review-gate/SKILL.md +18 -18
- package/skills/yad-review-gate/references/gating.md +3 -3
- package/skills/yad-run/SKILL.md +10 -10
- package/skills/yad-run/references/run-loop.md +8 -8
- package/skills/yad-ship/SKILL.md +4 -4
- package/skills/yad-spec/SKILL.md +10 -11
- package/skills/yad-status/SKILL.md +13 -13
- package/skills/yad-stories/SKILL.md +12 -12
- package/skills/yad-stories/references/story-schema.md +3 -3
- package/skills/yad-stub/SKILL.md +3 -3
- package/skills/yad-sync-repos/SKILL.md +1 -1
- package/skills/yad-test-cases/SKILL.md +12 -13
- package/skills/yad-test-cases/references/test-cases-schema.md +1 -1
- package/skills/yad-ui/SKILL.md +10 -10
package/skills/yad-ship/SKILL.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yad-ship
|
|
3
|
-
description: 'Build
|
|
3
|
+
description: 'Build helper of the gated SDLC — commit AND open the task PR/MR in one step. A thin orchestration over yad-commit then yad-open-pr: commit the staged atomic change by the conventions (Conventional-Commits subject, Task → Contract-Change trailers, an OPTIONAL Co-Authored-By footer that is OFF by default and added only when --ai <id> is explicitly passed, ≤3-file atomic guard), then push the branch and open the PR/MR from the committed template with the roster auto-assigned. The PR step runs ONLY if the commit lands (a failed commit, tripped guard, or --dry-run stops before pushing). Drives the `yad ship` CLI; never merges. Use when the user says "ship this task", "commit and open the PR", or "commit and raise the MR". (For the engineer review + merge, use yad-engineer-review.)'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# SDLC — Commit + Open PR/MR (
|
|
6
|
+
# SDLC — Commit + Open PR/MR (Build helper)
|
|
7
7
|
|
|
8
|
-
**Goal:** Do the two routine
|
|
8
|
+
**Goal:** Do the two routine Build hand-actions for ONE atomic task in a single step — **commit by
|
|
9
9
|
convention, then open the task PR/MR** — so an implemented diff becomes a reviewable PR/MR without two
|
|
10
10
|
separate invocations. It is a thin wrapper over `yad-commit` and `yad-open-pr`; it holds no logic of
|
|
11
11
|
its own and **never merges**. The engineer review + merge are Step E (`yad-engineer-review`).
|
|
@@ -23,7 +23,7 @@ its own and **never merges**. The engineer review + merge are Step E (`yad-engin
|
|
|
23
23
|
- **Order matters:** the PR/MR is opened **only if the commit lands**. A failed commit, a tripped
|
|
24
24
|
atomic guard, or `--dry-run` stops the step before anything is pushed.
|
|
25
25
|
- **Stage-aware on the product hub** (via `yad-open-pr`): on a `review/EP-*` branch `ship` opens the
|
|
26
|
-
|
|
26
|
+
Shape **artifact-review** PR (delegating to `yad gate open` — `--title` is ignored); on any
|
|
27
27
|
other hub branch it opens the **code-task** PR from the bundled code-task template. In a code repo
|
|
28
28
|
it is unchanged.
|
|
29
29
|
|
package/skills/yad-spec/SKILL.md
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yad-spec
|
|
3
|
-
description: 'Build
|
|
3
|
+
description: 'Build Step A of the gated SDLC. For one ready-for-build story and one of its repos, run the heavy Spec Kit ceremony ONCE (specify → clarify → plan → analyze → checklist → tasks) inside that code repo, writing specs/<story-id>/ in Spec Kit''s own layout. Drives /speckit.* as harness slash-commands when installed; authors the same files by hand and records speckit: not-installed when absent. References the locked contract — never re-invents the surface. Writes link.md back to the story. Never auto-advances. Use when the user says "spec story <id> in <repo>" or after a story is ready-for-build.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# SDLC — Author Spec (
|
|
6
|
+
# SDLC — Author Spec (Build Step A)
|
|
7
7
|
|
|
8
8
|
**Goal:** Turn ONE `ready-for-build` story into a per-repo Spec Kit spec/plan/tasks inside that
|
|
9
9
|
story's code repo. The heavy spec ceremony runs **once per story per repo**; the light
|
|
10
10
|
tasks → implement loop is **Step B** (`yad-implement`). This step **never re-locks the contract** —
|
|
11
11
|
the cross-repo surface is owned upstream by the architecture gate (build plan §A, Cross-cutting
|
|
12
|
-
"Heavy spec once per story, light loop per task"). It does not advance the
|
|
12
|
+
"Heavy spec once per story, light loop per task"). It does not advance the Shape state machine;
|
|
13
13
|
when driven by the orchestrator (`yad-run`, Phase 4) it records a `spec`/`tasks` trust signal
|
|
14
|
-
(Step 8) — but it never auto-advances a contract change or a
|
|
14
|
+
(Step 8) — but it never auto-advances a contract change or a Shape step.
|
|
15
15
|
|
|
16
16
|
Spec Kit is driven as **harness slash-commands** (`/speckit.*`), not a subprocess CLI (Phase 0
|
|
17
17
|
Deviation 3). When Spec Kit is not installed, the same files are hand-authored in Spec Kit's exact
|
|
@@ -43,11 +43,10 @@ is the same graceful-degradation pattern `yad-ui` uses for Impeccable.
|
|
|
43
43
|
|
|
44
44
|
### Step 1 — Resolve the story and check readiness
|
|
45
45
|
Read `{project-root}/epics/<epic>/.sdlc/state.json`. Proceed only when
|
|
46
|
-
`currentStep == "ready-for-build"` (the gating
|
|
47
|
-
The **`test-cases` track may still be `in_progress`**: it is parallel and non-blocking, so the
|
|
48
|
-
half runs alongside it — its status does not affect readiness here. Read the story file
|
|
46
|
+
`currentStep == "ready-for-build"` (the gating Shape — through the **stories** gate — is `done`).
|
|
47
|
+
The **`test-cases` track may still be `in_progress`**: it is parallel and non-blocking, so Build runs alongside it — its status does not affect readiness here. Read the story file
|
|
49
48
|
`epics/<epic>/stories/<story>.md`; confirm `repo` is in its `repos`. If the epic is not ready, STOP
|
|
50
|
-
and point the user at `yad-status`. **Do not mutate
|
|
49
|
+
and point the user at `yad-status`. **Do not mutate Shape state** — `ready-for-build` semantics
|
|
51
50
|
stay intact.
|
|
52
51
|
|
|
53
52
|
### Step 2 — Resolve the target code repo
|
|
@@ -87,13 +86,13 @@ frontmatter linking the spec back to the product repo: `story`, `epic`, `repo`,
|
|
|
87
86
|
in the code repo), `speckit` (`installed | not-installed`), `generated` (date). This `link.md` plus the
|
|
88
87
|
spec folder is the authoritative record that this story's spec exists.
|
|
89
88
|
|
|
90
|
-
### Step 7 — Stop (
|
|
89
|
+
### Step 7 — Stop (Shape state untouched)
|
|
91
90
|
Report: the spec folder path, the files written, whether Spec Kit was used, the task count from
|
|
92
91
|
`tasks.md`, and that the next action is **Step B — `yad-implement`**. Do **not** edit the epic's
|
|
93
|
-
`state.json`, `approvals.json`, or `contract-lock.json`. Step A is a generation step, not a
|
|
92
|
+
`state.json`, `approvals.json`, or `contract-lock.json`. Step A is a generation step, not a Shape gate.
|
|
94
93
|
|
|
95
94
|
### Step 8 — Record the `spec` trust signal (Phase 4b)
|
|
96
|
-
When this step runs under the orchestrator (`yad-run`), the generated spec is a
|
|
95
|
+
When this step runs under the orchestrator (`yad-run`), the generated spec is a Build run that the
|
|
97
96
|
trust log measures (it is the evidence that could later earn the `spec` step a `machine_advance`). The
|
|
98
97
|
verdict is **anchored to the human who accepts the spec**, never self-graded:
|
|
99
98
|
- the human approves the generated `specs/<story>/` untouched → `approved-unchanged`;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yad-status
|
|
3
|
-
description: 'Read-only view of an SDLC epic: prints the current step, each step''s dials (assistance/automation) and status, and which approvals are still required at the active gate. For stories in
|
|
3
|
+
description: 'Read-only view of an SDLC epic: prints the current step, each step''s dials (assistance/automation) and status, and which approvals are still required at the active gate. For stories in Build it also prints each Build step''s automation dial, status, and trust record (runs / % approved-unchanged / whether it clears the threshold to be earned), plus the system-wide kill-switch state — so the team can see WHY a step is automated and reverse it with evidence. Also prints the cross-cutting personal skills-log roll-up from the LOCAL-ONLY learning ledger (gitignored, never committed/pushed — the local learner''s own learning, by stage). Surfaces the Phase 5 instrumentation signals: per-step "earned but manual" (nudge cost) and, across multiple epics, a fleet roll-up (scale of read). Use when the user says "yad status", "where is epic EP-...", "what is blocking the gate", "show the trust record", "team skills", or "fleet status".'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SDLC — Status (read-only)
|
|
@@ -20,7 +20,7 @@ report all if the user asked for an overview).
|
|
|
20
20
|
|
|
21
21
|
### Step 2 — Read state
|
|
22
22
|
Read `.sdlc/state.json`, `.sdlc/approvals.json`, `epic.md` frontmatter (for `repos`), and — if present
|
|
23
|
-
— `.sdlc/contract-lock.json`. For
|
|
23
|
+
— `.sdlc/contract-lock.json`. For Build (Phase 4), also read — if present — every
|
|
24
24
|
`.sdlc/build-state/<story-id>.json`, and the trust ledger read as the **union** of the folded
|
|
25
25
|
`.sdlc/trust-log.json` `runs` PLUS every loose `.sdlc/trust-log/` shard (concatenate — every shard is a
|
|
26
26
|
distinct run; never dedup by story/repo/step — but DO skip a shard whose full identity
|
|
@@ -40,13 +40,13 @@ Print, in this order:
|
|
|
40
40
|
absent) — followed by `epicId`, then `status` from `epic.md` frontmatter, `currentStep`, and `repos`
|
|
41
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
|
-
2. **Steps table** — for every
|
|
43
|
+
2. **Steps table** — for every Shape 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
|
|
45
45
|
`currentStep` with `→`. The gating chain is `[analysis → analysis-review →] epic → epic-review →
|
|
46
46
|
architecture → architecture-review → ui-design → ui-design-review → stories → stories-review` →
|
|
47
47
|
**`ready-for-build`** (the bracketed `analysis` prefix is present only when `yad-analysis` seeded it).
|
|
48
48
|
`test-cases → test-cases-review` is a **parallel, non-blocking track**: it opens when `stories-review`
|
|
49
|
-
passes and runs alongside
|
|
49
|
+
passes and runs alongside Build, so when `currentStep` is `ready-for-build` the `test-cases`
|
|
50
50
|
step may still be `in_progress`/`in_review` — show its status, and note "parallel" so it is clear it
|
|
51
51
|
does not gate the build. Always render exactly the steps present in `steps[]`.
|
|
52
52
|
- **Skipped (N/A) steps:** the optional `ui-design` step may be marked N/A for an epic with no
|
|
@@ -78,25 +78,25 @@ Print, in this order:
|
|
|
78
78
|
(and, when at/after `architecture-review`, whether the current surface still matches it).
|
|
79
79
|
5. **Stories** — if `stories/` has files, list each story `id` and its `repos` tags.
|
|
80
80
|
6. **Files** — list the review records present under `reviews/` for the current artifact.
|
|
81
|
-
7. **Build
|
|
82
|
-
each such story and each of its repos print the
|
|
81
|
+
7. **Build (per story, per repo)** — if any `.sdlc/build-state/<story-id>.json` exists, then for
|
|
82
|
+
each such story and each of its repos print the Build chain
|
|
83
83
|
`spec → tasks → implement → checks → engineer-review`, marking each step's `status`, its
|
|
84
84
|
`automation` dial, and `locked`. Mark that repo's `currentStep` with `→`. This shows, at a glance,
|
|
85
|
-
which
|
|
85
|
+
which Build steps are automated and where a run is waiting. (For the single *next* build sub-step to
|
|
86
86
|
take per story/repo — rather than this full status view — point the user at `yad next <epic>`, which
|
|
87
87
|
reads the same `build-state` files.)
|
|
88
88
|
8. **Automation & trust** — print the system-wide **kill switch** state from `config.yaml`
|
|
89
89
|
`automation.kill_switch` (when `on`, note that every step is forced to `human_approve`). Then, for
|
|
90
|
-
each
|
|
90
|
+
each Build step that has entries in the trust ledger — the **union** of the folded
|
|
91
91
|
`.sdlc/trust-log.json` `runs` plus every loose `.sdlc/trust-log/` shard — print its **trust record**:
|
|
92
92
|
number of runs, the fraction with `verdict == "approved-unchanged"`, and whether that clears
|
|
93
93
|
`automation.trust_threshold` (`min_runs`, `min_approved_unchanged`) — i.e. whether the step is
|
|
94
94
|
**earned** (eligible to be flipped to `machine_advance`) or still **gathering evidence**. Restate
|
|
95
95
|
the predicate (self-contained): `earned = runs >= min_runs AND unchanged/runs >= min_approved_unchanged`.
|
|
96
|
-
Never recommend flipping a locked step or a
|
|
96
|
+
Never recommend flipping a locked step or a Shape step — those can never be `machine_advance`.
|
|
97
97
|
|
|
98
|
-
**Nudge-cost signal (Phase 5 instrumentation).** For each
|
|
99
|
-
is still `human_approve`** (and it is not locked / not a
|
|
98
|
+
**Nudge-cost signal (Phase 5 instrumentation).** For each Build step that is **earned but its dial
|
|
99
|
+
is still `human_approve`** (and it is not locked / not a Shape step), flag it:
|
|
100
100
|
`⚠ earned but manual — could be machine_advance`. This is the *nudge cost* the Phase 5 trigger
|
|
101
101
|
watches: automation that is proven safe but still hand-started. It is a read-only observation, not a
|
|
102
102
|
recommendation to flip — earning the evidence and flipping the dial stay deliberate human acts
|
|
@@ -117,10 +117,10 @@ Print, in this order:
|
|
|
117
117
|
|
|
118
118
|
10. **Fleet roll-up (overview only).** When the user asked for an overview, or more than one epic exists
|
|
119
119
|
under `{project-root}/epics/`, print a one-line-per-epic roll-up across the fleet: each epic's
|
|
120
|
-
`currentStep` (
|
|
120
|
+
`currentStep` (Shape gate) and, for stories in Build, a count of Build steps **waiting
|
|
121
121
|
at a human gate** and of steps flagged **earned-but-manual**, plus a **local skills-log** count (records
|
|
122
122
|
in the local-only `learning-records.json`: learned / in-progress). Close with fleet totals (epics at
|
|
123
|
-
each
|
|
123
|
+
each Shape gate; total earned-but-manual Build steps; total concepts learned locally across the fleet).
|
|
124
124
|
This is the
|
|
125
125
|
*scale-of-read* signal the Phase 5 trigger watches — when this roll-up stops fitting in one glance,
|
|
126
126
|
that is the measured bottleneck. Still strictly read-only; it only scans the per-epic files.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yad-stories
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Shape step 7 of the gated SDLC. With the pm, break the approved epic into user stories, each tagged with the repos that must implement it. Assigns zero-padded EP-<slug>-S0N IDs and writes one file per story under stories/. Reads epic + architecture + contract + UI as input. Never auto-advances — hands off to the team review gate (per-repo reviewer routing). Use when the user says "author the stories" or after the UI gate passes.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# SDLC — Author Stories (
|
|
6
|
+
# SDLC — Author Stories (Shape step 7)
|
|
7
7
|
|
|
8
8
|
**Goal:** Break an approved epic into human-authored, AI-assisted user stories, each with a stable
|
|
9
|
-
`EP-<slug>-S0N` ID and a `repos` tag listing which repos must implement it. This is a **
|
|
9
|
+
`EP-<slug>-S0N` ID and a `repos` tag listing which repos must implement it. This is a **Shape step**:
|
|
10
10
|
human-authored with AI assist, **never auto-advances**. When the stories are drafted, control passes
|
|
11
11
|
to `yad-review-gate`, which routes **per-repo reviewers** (each repo's engineer reviews the stories
|
|
12
12
|
touching their repo).
|
|
@@ -38,7 +38,7 @@ Open the stories authoring branch `stories/EP-<slug>` per the shared procedure
|
|
|
38
38
|
(`../yad-epic/references/state-schema.md` → "Authoring branches"): git-safe (skip with a note
|
|
39
39
|
if `{project-root}` is not a git work tree), check out the branch if it exists, else create it from the
|
|
40
40
|
hub's default branch. Author and commit the story files under `stories/` on it. This is **distinct**
|
|
41
|
-
from the
|
|
41
|
+
from the verified ledger's `review/…` branch.
|
|
42
42
|
|
|
43
43
|
### Step 2 — Read inputs
|
|
44
44
|
Read `epic.md` (scope, acceptance signals, `repos`), `architecture.md` (components by repo, flows),
|
|
@@ -102,9 +102,9 @@ As a <role>, I want <capability>, so that <outcome>.
|
|
|
102
102
|
|
|
103
103
|
### Step 6 — Advance the authoring step (NOT the gate)
|
|
104
104
|
**Check the mode first — the two modes have opposite instructions here.** Read `.sdlc/hub.json`:
|
|
105
|
-
**
|
|
105
|
+
**verified mode** is `platform` set AND `ledger: "verified"` — or, on a project that has not run `yad migrate` yet, `bridge_enabled` (or legacy `bridge`) `true`. `ledger` wins whenever it is present.
|
|
106
106
|
|
|
107
|
-
**
|
|
107
|
+
**verified mode — do NOT write `state.json`.** The ledger is CI-owned: the `ledger-guard` check rejects
|
|
108
108
|
any non-bot commit touching `epics/*/.sdlc/{state,approvals,comments,hub-prs}.json` or
|
|
109
109
|
`epics/*/reviews/*.md`, `yad gate open` deliberately skips this write for the same reason, and
|
|
110
110
|
`yad gate ci --merged` performs the whole transition when the review PR merges. Making the edit here
|
|
@@ -112,26 +112,26 @@ fails the gate if it rides the review PR, and desynchronises the ledger CI is ab
|
|
|
112
112
|
is pushed around the gate. Commit **the story files under `stories/` only** — nothing else
|
|
113
113
|
under `.sdlc/` — then hand off to `yad-review-gate`.
|
|
114
114
|
|
|
115
|
-
**Otherwise —
|
|
115
|
+
**Otherwise — local, or a platform with no gate-sync CI — write it.** In `state.json`: set
|
|
116
116
|
`stories.status: "done"`, set `stories-review.status: "in_review"`, and set
|
|
117
117
|
`currentStep: "stories-review"`. Write `state.json`. Do **not** touch `approvals.json`.
|
|
118
118
|
|
|
119
|
-
> **
|
|
119
|
+
> **local branch only.** Since 3.11 the CLI also closes the authoring step when its review gate
|
|
120
120
|
> opens or advances, so this edit is a no-op once `yad gate open` has run. A `stories` step left
|
|
121
121
|
> `in_progress` behind a passed `stories-review` used to block the parallel `test-cases` track
|
|
122
|
-
> (`YAD-STATE-005`). In
|
|
122
|
+
> (`YAD-STATE-005`). In verified mode `gate open` writes nothing and local `gate sync` is advisory —
|
|
123
123
|
> `gate ci` closes the step at merge.
|
|
124
124
|
|
|
125
125
|
### Step 7 — Stop at the gate (do NOT advance)
|
|
126
126
|
Report: the story IDs created, the repos each touches, and that the next action is **review** via
|
|
127
127
|
`yad-review-gate`. Note that this review routes **per-repo reviewers**: owner + 1 reviewer **plus**, for
|
|
128
128
|
each repo appearing in any story's `repos`, a `domain-owner` approval for that repo. When this gate
|
|
129
|
-
passes the epic becomes **`ready-for-build`** —
|
|
129
|
+
passes the epic becomes **`ready-for-build`** — Build can start **and** the parallel
|
|
130
130
|
**`test-cases`** track opens for the tester (`yad-test-cases`); the two run at the same time. **Never record
|
|
131
|
-
approval here.**
|
|
131
|
+
approval here.** Shape steps do not auto-advance. When the hub has a platform, the gate opens a review
|
|
132
132
|
PR on the hub (via `yad-hub-bridge`, with a `domain:<repo>` label per touched repo) and
|
|
133
133
|
`yad-review-gate action: sync` pulls platform approvals/comments into the ledger; otherwise the review
|
|
134
|
-
is recorded
|
|
134
|
+
is recorded local.
|
|
135
135
|
|
|
136
136
|
## Reference
|
|
137
137
|
- Story frontmatter and body template: `references/story-schema.md`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Story schema
|
|
2
2
|
|
|
3
|
-
Each story authored at
|
|
3
|
+
Each story authored at Shape step 7 is one Markdown file under `epics/EP-<slug>/stories/`, named
|
|
4
4
|
`EP-<slug>-S0N.md` (zero-padded, never renamed).
|
|
5
5
|
|
|
6
6
|
## Frontmatter
|
|
@@ -9,10 +9,10 @@ Each story authored at front state 7 is one Markdown file under `epics/EP-<slug>
|
|
|
9
9
|
|-------|--------|---------|
|
|
10
10
|
| `id` | `EP-<slug>-S0N` | Stable story ID. Engine-assigned, zero-padded, never renamed. |
|
|
11
11
|
| `epic` | `EP-<slug>` | Parent epic ID — the unbroken link back to the epic. |
|
|
12
|
-
| `owner` | name | Inherited from `epic.md` `owner` (the single source — not retyped per story). Carries the responsible owner through to
|
|
12
|
+
| `owner` | name | Inherited from `epic.md` `owner` (the single source — not retyped per story). Carries the responsible owner through to Build. |
|
|
13
13
|
| `status` | `draft` \| `in_review` \| `approved` | Story lifecycle within the stories gate. |
|
|
14
14
|
| `repos` | subset of the epic's `repos` | Which repos must implement this story. **Drives per-repo review routing now and (Phase 3) where specs are scaffolded.** |
|
|
15
|
-
| `code-context` | `{ repos: [<name@sha>], loaded: <date> }` | Optional. Which connected-repo code-maps anchored "Notes for build" (
|
|
15
|
+
| `code-context` | `{ repos: [<name@sha>], loaded: <date> }` | Optional. Which connected-repo code-maps anchored "Notes for build" (Shape step 7 Step 2b). The `@sha` (a repo's `syncedHead`) is recommended so freshness is recorded but may be omitted; the SKILL templates show the empty placeholder `{ repos: [], loaded: <date or none> }`. `none` / `[]` when no repos are connected. |
|
|
16
16
|
|
|
17
17
|
## Body
|
|
18
18
|
|
package/skills/yad-stub/SKILL.md
CHANGED
|
@@ -86,7 +86,7 @@ Leave `owner` for the human to set. Set `repos` to the code repo(s) the feature
|
|
|
86
86
|
|
|
87
87
|
### Step 5 — Seed the stub `state.json` (a `backfill-pending` sentinel)
|
|
88
88
|
Create `{project-root}/epics/EP-<slug>/.sdlc/state.json`. It carries the top-level marker
|
|
89
|
-
`kind: "stub"` and the sentinel `currentStep: "backfill-pending"`, and the **same 10-step
|
|
89
|
+
`kind: "stub"` and the sentinel `currentStep: "backfill-pending"`, and the **same 10-step Shape chain**
|
|
90
90
|
as a normal epic (`yad-epic` Step 5) but with **every step `status: "blocked"`** — so the state is valid
|
|
91
91
|
(`validateState` needs a non-empty `steps` + a string `currentStep`) and `promote` can later "wake" it
|
|
92
92
|
into normal authoring with zero re-seeding.
|
|
@@ -117,7 +117,7 @@ Also create the empty ledgers `{.sdlc/approvals.json}` and `{.sdlc/comments.json
|
|
|
117
117
|
`reviews/` directory. **Do NOT** write a `contract-lock.json` — a stub has no locked surface yet.
|
|
118
118
|
|
|
119
119
|
Commit the seed on this step's authoring branch; it reaches the hub's default branch through the
|
|
120
|
-
epic's **first** review PR/MR (or, for a stub, the PR that carries the stub itself). In
|
|
120
|
+
epic's **first** review PR/MR (or, for a stub, the PR that carries the stub itself). In verified mode
|
|
121
121
|
`ledger-guard` exempts a new epic's ledger — creation, not mutation (#162) — while every later change
|
|
122
122
|
to it stays CI's. See `../yad-epic/references/state-schema.md`, "Authoring branches".
|
|
123
123
|
|
|
@@ -130,7 +130,7 @@ Report the new `EP-<slug>`, that it is a **stub (backfill pending)**, and the tw
|
|
|
130
130
|
- **Make it real later:** `yad-backfill` for the code repo, then `yad-backfill promote EP-<slug>` to flip
|
|
131
131
|
the stub to `verified: true`.
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
Shape steps do not auto-advance. Suggest `yad next EP-<slug>` (prints the backfill-pending guidance) and
|
|
134
134
|
`yad thread EP-<slug>` to see the anchor and everything threaded off it.
|
|
135
135
|
|
|
136
136
|
## Hard rules
|
|
@@ -5,7 +5,7 @@ description: 'Brings every connected code repo up to date in one shot: switches
|
|
|
5
5
|
|
|
6
6
|
# SDLC — Sync Connected Repos (one command, every repo on its default branch)
|
|
7
7
|
|
|
8
|
-
**Goal:** Before
|
|
8
|
+
**Goal:** Before Shape/Build work starts, get every connected code repo onto its default branch at the
|
|
9
9
|
latest commit, so nobody implements on a stale or wrong branch. This is the deterministic counterpart to
|
|
10
10
|
the `sync-before-implementation` discipline: one command instead of N manual `git checkout && git pull`.
|
|
11
11
|
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yad-test-cases
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Shape step 9 of the gated SDLC — a PARALLEL, non-blocking track. Opens when the stories gate passes (the epic is already ready-for-build, so Build can start at the same time) and runs alongside implementation. With the test architect (Murat), author test-cases.md for the approved stories, and — when a testing tool is connected — generate/link the actual automation tests in it; otherwise produce the test-case artifact only. Reads epic + architecture + contract + UI + stories as input. Never auto-advances — hands off to the team review gate. Use when the user says "author the test cases" or after the stories gate passes.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# SDLC — Author Test Cases (
|
|
6
|
+
# SDLC — Author Test Cases (Shape step 9 — parallel, non-blocking)
|
|
7
7
|
|
|
8
8
|
**Goal:** Produce a human-authored, AI-assisted `test-cases.md` for an approved epic — the risk-based
|
|
9
9
|
test cases that cover the stories' acceptance criteria — **and**, when a testing tool is connected, the
|
|
10
10
|
**actual automation tests** inside the connected code repo(s), linked back from the artifact. This is a
|
|
11
|
-
**
|
|
11
|
+
**Shape step**: human-authored with AI assist, **never auto-advances**. When the test cases are
|
|
12
12
|
drafted, control passes to `yad-review-gate` (base rule: owner + 1 reviewer).
|
|
13
13
|
|
|
14
|
-
**This step does NOT block
|
|
14
|
+
**This step does NOT block Build.** It opens when the **stories** gate passes — at which point
|
|
15
15
|
the epic is already `ready-for-build`, so implementation (`yad-spec` → `yad-implement` → …) can start
|
|
16
16
|
**at the same time** the tester works here. The test-cases track is driven by its own step `status`
|
|
17
17
|
(it opens to `in_progress` when `stories-review` passes) and its review **never moves `currentStep`
|
|
@@ -51,7 +51,7 @@ the stories review has not passed.
|
|
|
51
51
|
Open the test-cases authoring branch `test-cases/EP-<slug>` per the shared procedure
|
|
52
52
|
(`../yad-epic/references/state-schema.md` → "Authoring branches"): git-safe (skip with a note if
|
|
53
53
|
`{project-root}` is not a git work tree), check out the branch if it exists, else create it from the
|
|
54
|
-
hub's default branch. Author and commit `test-cases.md` on it. This is **distinct** from the
|
|
54
|
+
hub's default branch. Author and commit `test-cases.md` on it. This is **distinct** from the verified ledger's
|
|
55
55
|
`review/…` branch.
|
|
56
56
|
|
|
57
57
|
### Step 2 — Read inputs
|
|
@@ -163,9 +163,9 @@ degraded (`testing: none`), do **not** write `test-links.json`.
|
|
|
163
163
|
|
|
164
164
|
### Step 5 — Advance the authoring step (NOT the gate)
|
|
165
165
|
**Check the mode first — the two modes have opposite instructions here.** Read `.sdlc/hub.json`:
|
|
166
|
-
**
|
|
166
|
+
**verified mode** is `platform` set AND `ledger: "verified"` — or, on a project that has not run `yad migrate` yet, `bridge_enabled` (or legacy `bridge`) `true`. `ledger` wins whenever it is present.
|
|
167
167
|
|
|
168
|
-
**
|
|
168
|
+
**verified mode — do NOT write `state.json`.** The ledger is CI-owned: the `ledger-guard` check rejects
|
|
169
169
|
any non-bot commit touching `epics/*/.sdlc/{state,approvals,comments,hub-prs}.json` or
|
|
170
170
|
`epics/*/reviews/*.md`, `yad gate open` deliberately skips this write for the same reason, and
|
|
171
171
|
`yad gate ci --merged` performs the whole transition when the review PR merges. Making the edit here
|
|
@@ -174,21 +174,20 @@ is pushed around the gate. Commit the artifact set — **`test-cases.md` and, wh
|
|
|
174
174
|
tool was used, `.sdlc/test-links.json`** (artifact-side, not ledger; generated tests live in their
|
|
175
175
|
own code repo, not here) — then hand off to `yad-review-gate`.
|
|
176
176
|
|
|
177
|
-
**Otherwise —
|
|
177
|
+
**Otherwise — local, or a platform with no gate-sync CI — write it.** In `state.json`: set
|
|
178
178
|
`test-cases.status: "done"` and set `test-cases-review.status: "in_review"`. **Leave `currentStep` at
|
|
179
|
-
`ready-for-build`** — this is the parallel track; moving `currentStep` would pull it back from
|
|
180
|
-
build half. Write `state.json`. Do **not** touch `approvals.json`. On this branch `yad gate open`
|
|
179
|
+
`ready-for-build`** — this is the parallel track; moving `currentStep` would pull it back from Build. Write `state.json`. Do **not** touch `approvals.json`. On this branch `yad gate open`
|
|
181
180
|
makes the same edit — `markInReview` leaves `currentStep` alone once it is `ready-for-build`
|
|
182
181
|
(`cli/epic-state.mjs`) — so it is a no-op once the gate has run.
|
|
183
182
|
|
|
184
183
|
### Step 6 — Stop at the gate (do NOT advance)
|
|
185
184
|
Report: the path to `test-cases.md`, the connected testing tool and what it produced (e.g. "Playwright —
|
|
186
185
|
6 tests generated", the suite path + `test-links.json` path, or "no testing tool — artifacts-only"), that
|
|
187
|
-
|
|
188
|
-
`yad-review-gate` (base rule: owner + 1 reviewer). **Never record approval here.**
|
|
186
|
+
Build may already be underway in parallel, and that the next action is **review** via
|
|
187
|
+
`yad-review-gate` (base rule: owner + 1 reviewer). **Never record approval here.** Shape steps do not
|
|
189
188
|
auto-advance. When the hub has a platform, the gate opens a review
|
|
190
189
|
PR on the hub (via `yad-hub-bridge`) and `yad-review-gate action: sync` pulls platform approvals/comments
|
|
191
|
-
into the ledger; otherwise the review is recorded
|
|
190
|
+
into the ledger; otherwise the review is recorded local.
|
|
192
191
|
|
|
193
192
|
## Reference
|
|
194
193
|
- Test-cases frontmatter, body template, and the `test-links.json` schema: `references/test-cases-schema.md`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Test-cases schema
|
|
2
2
|
|
|
3
|
-
The test cases authored at
|
|
3
|
+
The test cases authored at Shape step 9 are one Markdown file under `epics/EP-<slug>/`, named
|
|
4
4
|
`test-cases.md` (one per epic — mirrors `ui-design.md`, not a per-story folder). The optional automation
|
|
5
5
|
linkage is a sibling `test-links.json`.
|
|
6
6
|
|
package/skills/yad-ui/SKILL.md
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yad-ui
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Shape step 5 of the gated SDLC. With the ux-designer, author ui-design.md and DESIGN.md for an approved architecture, driving Impeccable as harness slash-commands (document/extract/craft) when installed, or authoring directly when not. Reads epic + architecture as input. Never auto-advances — hands off to the team review gate. Use when the user says "author the UI design" or after the architecture gate passes.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# SDLC — Author UI Design (
|
|
6
|
+
# SDLC — Author UI Design (Shape step 5)
|
|
7
7
|
|
|
8
8
|
**Goal:** Produce a human-authored, AI-assisted `ui-design.md` and `DESIGN.md` for an approved
|
|
9
9
|
architecture **and**, when a design tool is connected, the **actual feature design** — the mobile
|
|
10
10
|
screens and/or web pages — inside that tool (e.g. Figma), linked back from the artifacts. This is a
|
|
11
|
-
**
|
|
11
|
+
**Shape step**: human-authored with AI assist, **never auto-advances**. When the UI is drafted, control
|
|
12
12
|
passes to `yad-review-gate` (base rule: owner + 1 reviewer).
|
|
13
13
|
|
|
14
14
|
UI work is shaped by **Impeccable**, invoked as **harness slash-commands** (not a subprocess CLI) per
|
|
@@ -60,7 +60,7 @@ Open the UI authoring branch `ui-design/EP-<slug>` per the shared procedure
|
|
|
60
60
|
(`../yad-epic/references/state-schema.md` → "Authoring branches"): git-safe (skip with a note
|
|
61
61
|
if `{project-root}` is not a git work tree), check out the branch if it exists, else create it from the
|
|
62
62
|
hub's default branch. Author and commit `ui-design.md` / `DESIGN.md` on it. This is **distinct** from
|
|
63
|
-
the
|
|
63
|
+
the verified ledger's `review/…` branch.
|
|
64
64
|
|
|
65
65
|
### Step 2 — Read inputs
|
|
66
66
|
Read `epic.md` (user-level acceptance signals, scope) and `architecture.md` (flows, components by
|
|
@@ -92,7 +92,7 @@ components/tokens into the design system; `/impeccable craft` is shape-then-buil
|
|
|
92
92
|
**Graceful degradation:** if Impeccable is not installed (no `/impeccable …` commands available), the
|
|
93
93
|
`ux-designer` lens authors `ui-design.md` and `DESIGN.md` directly, and you **note in `ui-design.md`
|
|
94
94
|
that Impeccable was not used**. Do not run `npx impeccable skills install` as part of this step — tool
|
|
95
|
-
installation is out of scope for
|
|
95
|
+
installation is out of scope for Shape.
|
|
96
96
|
|
|
97
97
|
### Step 3b — Materialize the design in the connected tool (generate or link)
|
|
98
98
|
Read `{project-root}/.sdlc/design.json` (`config.yaml` `design.registry`). Decide the path:
|
|
@@ -172,9 +172,9 @@ Keep the `## Design (<tool>)` section of `ui-design.md` in step with this file.
|
|
|
172
172
|
|
|
173
173
|
### Step 5 — Advance the authoring step (NOT the gate)
|
|
174
174
|
**Check the mode first — the two modes have opposite instructions here.** Read `.sdlc/hub.json`:
|
|
175
|
-
**
|
|
175
|
+
**verified mode** is `platform` set AND `ledger: "verified"` — or, on a project that has not run `yad migrate` yet, `bridge_enabled` (or legacy `bridge`) `true`. `ledger` wins whenever it is present.
|
|
176
176
|
|
|
177
|
-
**
|
|
177
|
+
**verified mode — do NOT write `state.json`.** The ledger is CI-owned: the `ledger-guard` check rejects
|
|
178
178
|
any non-bot commit touching `epics/*/.sdlc/{state,approvals,comments,hub-prs}.json` or
|
|
179
179
|
`epics/*/reviews/*.md`, `yad gate open` deliberately skips this write for the same reason, and
|
|
180
180
|
`yad gate ci --merged` performs the whole transition when the review PR merges. Making the edit here
|
|
@@ -183,7 +183,7 @@ is pushed around the gate. Commit the artifact set — **`ui-design.md`, `DESIGN
|
|
|
183
183
|
design tool was used, `.sdlc/design-links.json`** (artifact-side, not ledger) — then hand off to
|
|
184
184
|
`yad-review-gate`.
|
|
185
185
|
|
|
186
|
-
**Otherwise —
|
|
186
|
+
**Otherwise — local, or a platform with no gate-sync CI — write it.** In `state.json`: set
|
|
187
187
|
`ui-design.status: "done"`, set `ui-design-review.status: "in_review"`, and set
|
|
188
188
|
`currentStep: "ui-design-review"`. Write `state.json`. Do **not** touch `approvals.json`. On this
|
|
189
189
|
branch `yad gate open` makes the same edit, so it is a no-op once the gate has run.
|
|
@@ -192,9 +192,9 @@ branch `yad gate open` makes the same edit, so it is a no-op once the gate has r
|
|
|
192
192
|
Report: the paths to `ui-design.md` and `DESIGN.md`, whether Impeccable was used, the connected design
|
|
193
193
|
tool and what it produced (e.g. "Figma — 4 screens generated", the file URL + `design-links.json` path,
|
|
194
194
|
or "no design tool — markdown-only"), and that the next action is **review** via `yad-review-gate` (base
|
|
195
|
-
rule: owner + 1 reviewer). **Never record approval here.**
|
|
195
|
+
rule: owner + 1 reviewer). **Never record approval here.** Shape steps do not auto-advance. When the hub has a platform, the gate opens a review PR on the
|
|
196
196
|
hub (via `yad-hub-bridge`) and `yad-review-gate action: sync` pulls platform approvals/comments into
|
|
197
|
-
the ledger; otherwise the review is recorded
|
|
197
|
+
the ledger; otherwise the review is recorded local.
|
|
198
198
|
|
|
199
199
|
## Reference
|
|
200
200
|
- Impeccable commands and the slash-command-vs-CLI deviation: `RESEARCH-NOTES.md` §4 + Deviation 3.
|