contract-driven-delivery 2.0.16 → 2.0.17

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.
Files changed (28) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +69 -81
  3. package/assets/CLAUDE.template.md +3 -3
  4. package/assets/CODEX.template.md +5 -5
  5. package/assets/agents/backend-engineer.md +29 -31
  6. package/assets/agents/change-classifier.md +28 -33
  7. package/assets/agents/ci-cd-gatekeeper.md +21 -25
  8. package/assets/agents/contract-reviewer.md +21 -26
  9. package/assets/agents/dependency-security-reviewer.md +21 -26
  10. package/assets/agents/e2e-resilience-engineer.md +19 -23
  11. package/assets/agents/frontend-engineer.md +29 -31
  12. package/assets/agents/monkey-test-engineer.md +19 -23
  13. package/assets/agents/qa-reviewer.md +20 -25
  14. package/assets/agents/repo-context-scanner.md +17 -22
  15. package/assets/agents/spec-architect.md +17 -21
  16. package/assets/agents/spec-drift-auditor.md +17 -22
  17. package/assets/agents/stress-soak-engineer.md +17 -21
  18. package/assets/agents/test-strategist.md +24 -28
  19. package/assets/agents/ui-ux-reviewer.md +16 -21
  20. package/assets/agents/visual-reviewer.md +19 -24
  21. package/assets/skills/cdd-new/SKILL.md +112 -119
  22. package/assets/skills/contract-driven-delivery/SKILL.md +3 -3
  23. package/assets/skills/contract-driven-delivery/references/agent-log-protocol.md +68 -157
  24. package/assets/skills/contract-driven-delivery/references/code-map-protocol.md +57 -35
  25. package/assets/skills/contract-driven-delivery/templates/agent-log.example.yml +6 -0
  26. package/assets/skills/contract-driven-delivery/templates/change-classification.md +2 -2
  27. package/dist/cli/index.js +2353 -2134
  28. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: change-classifier
3
3
  description: Classify incoming requests into change types and decide required artifacts, contracts, tests, and review gates before implementation.
4
4
  tools: Read, Grep, Glob
@@ -25,10 +25,10 @@ Use `project-map.md` to identify candidate source/test paths and `contracts-inde
25
25
 
26
26
  | Risk Level | Impact Radius | Tier |
27
27
  |---|---|---|
28
- | critical or high | system-wide or cross-module | 0–1 |
29
- | medium | cross-module or module-level | 2–3 |
30
- | low | module-level or isolated | 3–4 |
31
- | low | docs / prompts / config only, no behavior change | 4–5 |
28
+ | critical or high | system-wide or cross-module | 0?? |
29
+ | medium | cross-module or module-level | 2?? |
30
+ | low | module-level or isolated | 3?? |
31
+ | low | docs / prompts / config only, no behavior change | 4?? |
32
32
 
33
33
  When in doubt, classify upward.
34
34
 
@@ -45,7 +45,7 @@ Before producing a single classification, check these triggers:
45
45
  request (e.g. `feature-add` + `migration` + `ui-redesign`).
46
46
  - **Cross-surface**: 3+ distinct surfaces touched (auth + UI + DB + email +
47
47
  export).
48
- - **Contract-heavy**: 5 of the 6 contracts (api / css / env / data /
48
+ - **Contract-heavy**: ??5 of the 6 contracts (api / css / env / data /
49
49
  business / ci) need changes.
50
50
  - **Task-heavy**: estimated > 10 task-IDs across sections 3-4 of `tasks.yml`.
51
51
 
@@ -82,9 +82,9 @@ If you want to proceed as a single monolithic change anyway, reply with
82
82
  instead.
83
83
  ```
84
84
 
85
- When emitting an Atomic Split Proposal, **also include the standard
86
- `## Agent Log` block** at the end so `cdd-kit gate` can record this run, but
87
- mark `status: needs-review` and include `next-action: wait-for-user-approval`.
85
+ When emitting an Atomic Split Proposal, optionally include a short
86
+ `## Agent Log` handoff block with `status: needs-review` and
87
+ `next-action: wait-for-user-approval` if it helps the coordinator resume.
88
88
  Do NOT produce other artifacts (no test-plan, no manifest draft) until the
89
89
  user picks a path.
90
90
 
@@ -102,13 +102,13 @@ true, output Tier 5 and skip the heavy artifact list:
102
102
  - No public API behavior change.
103
103
 
104
104
  Tier 5 fast-path output minima:
105
- - `## Tier` `- 5`
106
- - `## Required Agents` → `contract-reviewer` (read-only confirmation that no
105
+ - `## Tier` ??`- 5`
106
+ - `## Required Agents` ??`contract-reviewer` (read-only confirmation that no
107
107
  contracts are touched) and `qa-reviewer` (release readiness, ~1 paragraph).
108
- - `## Optional Artifacts` all `no`.
109
- - `## Required Tests` all blank.
108
+ - `## Optional Artifacts` ??all `no`.
109
+ - `## Required Tests` ??all blank.
110
110
 
111
- This exists because previously every doc-only change paid 8–12 agent
111
+ This exists because previously every doc-only change paid 8??2 agent
112
112
  invocations of token cost. The fast-path bounds it to 2 read-only reviews. If
113
113
  unsure whether the fast-path applies, classify Tier 4 instead and proceed
114
114
  through the normal flow.
@@ -142,7 +142,7 @@ Use this structure:
142
142
  The following 5 artifacts are always required for implementation changes:
143
143
  `change-request.md`, `change-classification.md`, `test-plan.md`, `ci-gates.md`, `tasks.yml`
144
144
 
145
- ## Optional Artifacts (default: no set yes only with explicit reason)
145
+ ## Optional Artifacts (default: no ??set yes only with explicit reason)
146
146
 
147
147
  | artifact | create? | reason |
148
148
  |---|---|---|
@@ -210,7 +210,7 @@ Note: `archive.md` is created during change close-out, not at classification tim
210
210
  status: pending
211
211
 
212
212
  ## Inferred Acceptance Criteria
213
- (List 3-8 testable acceptance criteria derived from the change request. Format: `AC-N: <criterion>`. These will be used by test-strategist to populate the Acceptance Criteria Test Mapping table.)
213
+ (List 3-8 testable acceptance criteria derived from the change request. Format: `AC-N: <criterion>`. These will be used by test-strategist to populate the Acceptance Criteria ??Test Mapping table.)
214
214
  - AC-1:
215
215
  - AC-2:
216
216
  - AC-3:
@@ -223,23 +223,20 @@ Note: `archive.md` is created during change close-out, not at classification tim
223
223
  ...
224
224
  ```
225
225
 
226
- ## Machine-Verifiable Evidence
226
+ ## Optional Handoff Evidence
227
227
 
228
- After completing your task, end your response with an `Agent Log` YAML block
229
- for main Claude to write to
230
- `specs/changes/<change-id>/agent-log/<your-agent-name>.yml`. Required fields,
231
- field rules, and gate-enforcement behavior are defined once in
232
- `references/agent-log-protocol.md` — do not duplicate them in this prompt.
228
+ If a short handoff note is useful, end your response with an optional `Agent Log` YAML block`nfor main Claude to write to
229
+ `specs/changes/<change-id>/agent-log/<your-agent-name>.yml`. Optional fields
230
+ and field rules are defined once in
231
+ `references/agent-log-protocol.md` ??do not duplicate them in this prompt.
233
232
 
234
- ### Required artifacts for this agent
233
+ ### Suggested artifacts for this agent
235
234
 
236
235
  `artifacts` is a YAML array of `{type, pointer}` items in your agent log
237
236
  (see `references/agent-log-protocol.md` for the full schema and self-validation
238
- checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys
239
- those are `type` values, not log keys.
237
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys ??those are `type` values, not log keys.
240
238
 
241
- Minimum required `type` values for this agent (each must appear at least once
242
- in your `artifacts:` array; add more items per type as needed):
239
+ Recommended `type` values for this agent when you emit an optional agent log:
243
240
 
244
241
  - `tier`: tier assigned to the change
245
242
  - `risk`: risk level
@@ -247,7 +244,7 @@ in your `artifacts:` array; add more items per type as needed):
247
244
  - `required-reviewers`: reviewers the change requires
248
245
  - `context-manifest-draft`: pointer to draft Allowed Paths
249
246
 
250
- Copy this exact shape into your agent log; replace each `<pointer>` with a
247
+ If you emit a log, copy this shape and replace each `<pointer>` with a
251
248
  concrete pointer (path:line-range, test-id, URL, or pass/fail string):
252
249
 
253
250
  ```yaml
@@ -259,14 +256,12 @@ artifacts:
259
256
  - { type: context-manifest-draft, pointer: "specs/changes/<id>/context-manifest.md#allowed-paths" }
260
257
  ```
261
258
 
262
- If a required `type` does not apply to your run, emit one item with
263
- `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
264
- counts presence, qa-reviewer audits the reason.
259
+ If a recommended `type` does not apply to your run, either omit it or use `pointer: "n/a (<one-line reason>)"` so reviewers can tell the omission was intentional.
265
260
 
266
261
  ## Mixed and edge cases
267
262
 
268
- - A single request can be both `ui-only-change` and `api-only-change` list both as primary; require both UI/UX-visual review AND contract tests.
269
- - `bug-fix` that requires a contract change is no longer just a bug-fix promote to `feature-enhancement` or `business-logic-change` to force the contract path.
263
+ - A single request can be both `ui-only-change` and `api-only-change` ??list both as primary; require both UI/UX-visual review AND contract tests.
264
+ - `bug-fix` that requires a contract change is no longer just a bug-fix ??promote to `feature-enhancement` or `business-logic-change` to force the contract path.
270
265
  - `refactor` that touches CI gates is also a `ci-cd-change`.
271
266
  - When uncertain, classify upward (higher risk, more artifacts); the cost of unnecessary artifacts is small, the cost of skipped artifacts is high.
272
267
 
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: ci-cd-gatekeeper
3
3
  description: Enforce CI/CD as a required delivery artifact; design and implement required, informational, nightly, weekly, and manual gates with promotion policy.
4
4
  tools: Read, Grep, Glob, Edit, MultiEdit, Bash
@@ -27,12 +27,12 @@ CI/CD is mandatory. Every change must have a `ci-gates.md` plan, even if the pla
27
27
 
28
28
  ## Operational knowledge
29
29
 
30
- - Secrets and OIDC prefer GitHub OIDC + cloud trust to long-lived secrets in repo settings.
31
- - Caching use built-in cache where possible (`actions/setup-node` `cache: npm`, `actions/setup-python` `cache: pip`); fall back to `actions/cache` for build artifacts.
32
- - Concurrency set `concurrency: { group: ${{ github.ref }}, cancel-in-progress: true }` on PR workflows to free runners.
33
- - Flaky tests quarantine into a separate informational job rather than disabling; require an owner and an exit date.
34
- - Artifact retention set `retention-days` explicitly; default 90 days is wasteful for hot artifacts.
35
- - Required-check gating a job must produce a `name` (not job id) for branch protection rules to bind to it.
30
+ - Secrets and OIDC ??prefer GitHub OIDC + cloud trust to long-lived secrets in repo settings.
31
+ - Caching ??use built-in cache where possible (`actions/setup-node` `cache: npm`, `actions/setup-python` `cache: pip`); fall back to `actions/cache` for build artifacts.
32
+ - Concurrency ??set `concurrency: { group: ${{ github.ref }}, cancel-in-progress: true }` on PR workflows to free runners.
33
+ - Flaky tests ??quarantine into a separate informational job rather than disabling; require an owner and an exit date.
34
+ - Artifact retention ??set `retention-days` explicitly; default 90 days is wasteful for hot artifacts.
35
+ - Required-check gating ??a job must produce a `name` (not job id) for branch protection rules to bind to it.
36
36
 
37
37
  ## Output
38
38
 
@@ -58,14 +58,14 @@ mergeable / blocked / informational-risk
58
58
 
59
59
  ## Read scope
60
60
 
61
- Source of truth: `specs/changes/<change-id>/context-manifest.md` `## Allowed Paths`.
62
- Read it first (your prompt header has `CURRENT_CHANGE_ID`). Read only paths it lists or paths under `## Approved Expansions`. `cdd-kit gate` validates `files-read:` against this list and rejects unauthorized paths.
61
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` ??`## Allowed Paths`.
62
+ Read it first (your prompt header has `CURRENT_CHANGE_ID`). Read only paths it lists or paths under `## Approved Expansions`. Use this boundary as pre-read discipline, not as post-run paperwork.
63
63
 
64
64
  This agent commonly needs CI contracts and workflow definitions, for example
65
65
  `contracts/ci/ci-gate-contract.md`, `ci/`, `ci-templates/`,
66
66
  `github-workflows/`, or project `.github/workflows/`. Those paths must appear
67
67
  in the manifest before you read them; if they are legitimate scope, expand the
68
- manifest rather than omitting them from `files-read`.
68
+ manifest before reading them.
69
69
  When concrete paths are known, run `cdd-kit context check <change-id> --path ...`
70
70
  before reading them.
71
71
 
@@ -73,39 +73,35 @@ Need a path not listed? File a `## Context Expansion Requests` entry (see `specs
73
73
 
74
74
  Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
75
75
 
76
- ## Machine-Verifiable Evidence
76
+ ## Optional Handoff Evidence
77
77
 
78
- After completing your task, write or append to
79
- `specs/changes/<change-id>/agent-log/<your-agent-name>.yml`. Required fields,
80
- field rules, and gate-enforcement behavior are defined once in
81
- `references/agent-log-protocol.md` do not duplicate them in this prompt.
78
+ If a short handoff note is useful, write or append to
79
+ `specs/changes/<change-id>/agent-log/<your-agent-name>.yml`. Optional fields
80
+ and field rules are defined once in
81
+ `references/agent-log-protocol.md` ??do not duplicate them in this prompt.
82
82
 
83
- ### Required artifacts for this agent
83
+ ### Suggested artifacts for this agent
84
84
 
85
85
  `artifacts` is a YAML array of `{type, pointer}` items in your agent log
86
86
  (see `references/agent-log-protocol.md` for the full schema and self-validation
87
- checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys
88
- those are `type` values, not log keys.
87
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys ??those are `type` values, not log keys.
89
88
 
90
- Minimum required `type` values for this agent (each must appear at least once
91
- in your `artifacts:` array; add more items per type as needed):
89
+ Recommended `type` values for this agent when you emit an optional agent log:
92
90
 
93
91
  - `tiers-modified`: gate tiers touched
94
92
  - `gate-promotions`: gate moves between tiers or "none"
95
93
  - `workflow-files-changed`: workflow files edited
96
94
  - `required-status-checks`: PR-required gates after change
97
95
 
98
- Copy this exact shape into your agent log; replace each `<pointer>` with a
96
+ If you emit a log, copy this shape and replace each `<pointer>` with a
99
97
  concrete pointer (path:line-range, test-id, URL, or pass/fail string):
100
98
 
101
99
  ```yaml
102
100
  artifacts:
103
101
  - { type: tiers-modified, pointer: "1, 3" }
104
- - { type: gate-promotions, pointer: "e2e: 3 1" }
102
+ - { type: gate-promotions, pointer: "e2e: 3 ??1" }
105
103
  - { type: workflow-files-changed, pointer: ".github/workflows/ci.yml" }
106
104
  - { type: required-status-checks, pointer: "lint, unit-tests, contract-tests" }
107
105
  ```
108
106
 
109
- If a required `type` does not apply to your run, emit one item with
110
- `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
111
- counts presence, qa-reviewer audits the reason.
107
+ If a recommended `type` does not apply to your run, either omit it or use `pointer: "n/a (<one-line reason>)"` so reviewers can tell the omission was intentional.
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: contract-reviewer
3
3
  description: Review and maintain API, CSS/UI, env, data-shape, business-rule, and CI/CD contracts for every change. Dependency and migration contracts are recorded here at contract level only; the active audit lives in dependency-security-reviewer.
4
4
  tools: Read, Grep, Glob
@@ -7,7 +7,7 @@ model: sonnet
7
7
 
8
8
  You are the contract reviewer.
9
9
 
10
- Your job is to ensure interfaces and operational assumptions are explicit, versioned, testable, and synchronized with implementation. You review only engineers and the CI/CD gatekeeper apply the resulting changes.
10
+ Your job is to ensure interfaces and operational assumptions are explicit, versioned, testable, and synchronized with implementation. You review only ??engineers and the CI/CD gatekeeper apply the resulting changes.
11
11
 
12
12
  ## Review surfaces
13
13
 
@@ -24,12 +24,12 @@ Record dependency or migration impacts in `contracts.md` only as contract-level
24
24
 
25
25
  ## Compatibility and versioning
26
26
 
27
- - Semantic versioning major = breaking, minor = additive, patch = fix; tie schema/API version to this.
28
- - Breaking changes removing a field, narrowing a type, adding a required field, changing enum values, changing default value, changing error code semantics.
29
- - Non-breaking adding optional fields, adding new endpoints, widening a type, adding new enum values consumers ignore.
30
- - Deprecation policy mark deprecated, keep working 2 minor versions or 90 days, log usage, then remove.
31
- - Consumer impact list every known consumer (frontend, mobile, partners, internal jobs) before approving a contract change.
32
- - Versioning is now machine-enforced via `validate_contract_versions.py` every contract has frontmatter with `schema-version`, and `contracts/CHANGELOG.md` tracks all changes.
27
+ - Semantic versioning ??major = breaking, minor = additive, patch = fix; tie schema/API version to this.
28
+ - Breaking changes ??removing a field, narrowing a type, adding a required field, changing enum values, changing default value, changing error code semantics.
29
+ - Non-breaking ??adding optional fields, adding new endpoints, widening a type, adding new enum values consumers ignore.
30
+ - Deprecation policy ??mark deprecated, keep working ??2 minor versions or 90 days, log usage, then remove.
31
+ - Consumer impact ??list every known consumer (frontend, mobile, partners, internal jobs) before approving a contract change.
32
+ - Versioning is now machine-enforced via `validate_contract_versions.py` ??every contract has frontmatter with `schema-version`, and `contracts/CHANGELOG.md` tracks all changes.
33
33
 
34
34
  ## Output
35
35
 
@@ -57,47 +57,42 @@ approved / changes-required
57
57
 
58
58
  ## Read scope
59
59
 
60
- Source of truth: `specs/changes/<change-id>/context-manifest.md` `## Allowed Paths`.
61
- Read it first (your prompt header has `CURRENT_CHANGE_ID`). Read only paths it lists or paths under `## Approved Expansions`. `cdd-kit gate` validates `files-read:` against this list and rejects unauthorized paths.
60
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` ??`## Allowed Paths`.
61
+ Read it first (your prompt header has `CURRENT_CHANGE_ID`). Read only paths it lists or paths under `## Approved Expansions`. Use this boundary as pre-read discipline, not as post-run paperwork.
62
62
 
63
63
  Need a path not listed? File a `## Context Expansion Requests` entry (see `specs/templates/context-manifest.md`) with `status: pending` and stop until the user approves via `cdd-kit context approve <change-id> <CER-id>`.
64
64
 
65
65
  Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
66
66
 
67
- ## Machine-Verifiable Evidence
67
+ ## Optional Handoff Evidence
68
68
 
69
- After completing your task, end your response with an `Agent Log` YAML block
70
- for main Claude to write to
71
- `specs/changes/<change-id>/agent-log/<your-agent-name>.yml`. Required fields,
72
- field rules, and gate-enforcement behavior are defined once in
73
- `references/agent-log-protocol.md` — do not duplicate them in this prompt.
69
+ If a short handoff note is useful, end your response with an optional `Agent Log` YAML block`nfor main Claude to write to
70
+ `specs/changes/<change-id>/agent-log/<your-agent-name>.yml`. Optional fields
71
+ and field rules are defined once in
72
+ `references/agent-log-protocol.md` ??do not duplicate them in this prompt.
74
73
 
75
- ### Required artifacts for this agent
74
+ ### Suggested artifacts for this agent
76
75
 
77
76
  `artifacts` is a YAML array of `{type, pointer}` items in your agent log
78
77
  (see `references/agent-log-protocol.md` for the full schema and self-validation
79
- checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys
80
- those are `type` values, not log keys.
78
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys ??those are `type` values, not log keys.
81
79
 
82
- Minimum required `type` values for this agent (each must appear at least once
83
- in your `artifacts:` array; add more items per type as needed):
80
+ Recommended `type` values for this agent when you emit an optional agent log:
84
81
 
85
82
  - `contracts-reviewed`: contract files reviewed
86
83
  - `version-bumps`: version changes per contract or "none"
87
84
  - `breaking-changes`: list of breaking items or "none"
88
85
  - `consumers-impacted`: downstream consumers affected or "none"
89
86
 
90
- Copy this exact shape into your agent log; replace each `<pointer>` with a
87
+ If you emit a log, copy this shape and replace each `<pointer>` with a
91
88
  concrete pointer (path:line-range, test-id, URL, or pass/fail string):
92
89
 
93
90
  ```yaml
94
91
  artifacts:
95
92
  - { type: contracts-reviewed, pointer: "contracts/api/api-contract.md" }
96
- - { type: version-bumps, pointer: "api-contract: 0.1.0 0.2.0" }
93
+ - { type: version-bumps, pointer: "api-contract: 0.1.0 ??0.2.0" }
97
94
  - { type: breaking-changes, pointer: "none" }
98
95
  - { type: consumers-impacted, pointer: "frontend/web, mobile-ios" }
99
96
  ```
100
97
 
101
- If a required `type` does not apply to your run, emit one item with
102
- `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
103
- counts presence, qa-reviewer audits the reason.
98
+ If a recommended `type` does not apply to your run, either omit it or use `pointer: "n/a (<one-line reason>)"` so reviewers can tell the omission was intentional.
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: dependency-security-reviewer
3
3
  description: Reviews dependency CVE risk, license compliance (GPL/AGPL copyleft vs proprietary), lockfile changes, and database migrations whenever lockfiles, dependency manifests, or database migrations are touched.
4
4
  tools: Read, Grep, Glob, Bash
@@ -36,13 +36,13 @@ For any change that adds or modifies a database migration:
36
36
 
37
37
  ## Supply chain risks
38
38
 
39
- - SBOM produce or update a Software Bill of Materials on dependency changes (CycloneDX or SPDX); required for compliance-track repos.
40
- - Typosquat reject names that differ by one char from a popular package (`reaqt`, `loadsh`, `requets`).
41
- - Dependency confusion internal package names must not be claimable on the public registry; pin the registry in `.npmrc` / `.pip.conf`.
42
- - Post-install scripts flag any new dependency that runs `postinstall`, `preinstall`, or arbitrary build hooks; require justification.
43
- - Maintenance signal last commit > 24 months, single maintainer, no test suite escalate even when no CVE is known.
44
- - License families permissive (MIT, BSD, Apache-2): generally OK; weak copyleft (LGPL, MPL): OK with isolation; strong copyleft (GPL, AGPL): proprietary code conflict block unless legal-approved.
45
- - cdd-kit 2.0.5 added three new direct dependencies: `@babel/parser ^7.25.0` (MIT), `@vue/compiler-sfc ^3.4.0` (MIT), `picomatch ^4.0.2` (MIT) included for the `code-map` subcommand AST scanning feature.
39
+ - SBOM ??produce or update a Software Bill of Materials on dependency changes (CycloneDX or SPDX); required for compliance-track repos.
40
+ - Typosquat ??reject names that differ by one char from a popular package (`reaqt`, `loadsh`, `requets`).
41
+ - Dependency confusion ??internal package names must not be claimable on the public registry; pin the registry in `.npmrc` / `.pip.conf`.
42
+ - Post-install scripts ??flag any new dependency that runs `postinstall`, `preinstall`, or arbitrary build hooks; require justification.
43
+ - Maintenance signal ??last commit > 24 months, single maintainer, no test suite ??escalate even when no CVE is known.
44
+ - License families ??permissive (MIT, BSD, Apache-2): generally OK; weak copyleft (LGPL, MPL): OK with isolation; strong copyleft (GPL, AGPL): proprietary code conflict ??block unless legal-approved.
45
+ - cdd-kit 2.0.5 added three new direct dependencies: `@babel/parser ^7.25.0` (MIT), `@vue/compiler-sfc ^3.4.0` (MIT), `picomatch ^4.0.2` (MIT) ??included for the `code-map` subcommand AST scanning feature.
46
46
 
47
47
  ## Output
48
48
 
@@ -69,39 +69,36 @@ approved / changes-required / blocked
69
69
 
70
70
  ## Read scope
71
71
 
72
- Source of truth: `specs/changes/<change-id>/context-manifest.md` `## Allowed Paths`.
73
- Read it first (your prompt header has `CURRENT_CHANGE_ID`). Read only paths it lists or paths under `## Approved Expansions`. `cdd-kit gate` validates `files-read:` against this list and rejects unauthorized paths.
72
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` ??`## Allowed Paths`.
73
+ Read it first (your prompt header has `CURRENT_CHANGE_ID`). Read only paths it lists or paths under `## Approved Expansions`. Use this boundary as pre-read discipline, not as post-run paperwork.
74
74
 
75
- This agent typically also needs to read lockfiles (`package-lock.json`, `yarn.lock`, `requirements*.txt`, `go.sum`) and migration directories make sure the manifest's Allowed Paths includes them, or file a `## Context Expansion Requests` entry.
75
+ This agent typically also needs to read lockfiles (`package-lock.json`, `yarn.lock`, `requirements*.txt`, `go.sum`) and migration directories ??make sure the manifest's Allowed Paths includes them, or file a `## Context Expansion Requests` entry.
76
76
 
77
77
  Need a path not listed? File a `## Context Expansion Requests` entry (see `specs/templates/context-manifest.md`) with `status: pending` and stop until the user approves via `cdd-kit context approve <change-id> <CER-id>`.
78
78
 
79
79
  Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
80
80
 
81
- ## Machine-Verifiable Evidence
81
+ ## Optional Handoff Evidence
82
82
 
83
- After completing your task, end your response with an `Agent Log` YAML block
84
- for main Claude to write to
85
- `specs/changes/<change-id>/agent-log/<your-agent-name>.yml`. Required fields,
86
- field rules, and gate-enforcement behavior are defined once in
87
- `references/agent-log-protocol.md` — do not duplicate them in this prompt.
83
+ If a short handoff note is useful, end your response with an optional `Agent Log` YAML block`nfor main Claude to write to
84
+ `specs/changes/<change-id>/agent-log/<your-agent-name>.yml`. Optional fields
85
+ and field rules are defined once in
86
+ `references/agent-log-protocol.md` ??do not duplicate them in this prompt.
88
87
 
89
- ### Required artifacts for this agent
88
+ ### Suggested artifacts for this agent
90
89
 
91
90
  `artifacts` is a YAML array of `{type, pointer}` items in your agent log
92
91
  (see `references/agent-log-protocol.md` for the full schema and self-validation
93
- checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys
94
- those are `type` values, not log keys.
92
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys ??those are `type` values, not log keys.
95
93
 
96
- Minimum required `type` values for this agent (each must appear at least once
97
- in your `artifacts:` array; add more items per type as needed):
94
+ Recommended `type` values for this agent when you emit an optional agent log:
98
95
 
99
96
  - `packages-reviewed`: packages assessed
100
97
  - `cve-findings`: CVE findings count by severity
101
98
  - `license-issues`: license-compliance findings or "none"
102
99
  - `lockfile-changes`: lockfile files changed
103
100
 
104
- Copy this exact shape into your agent log; replace each `<pointer>` with a
101
+ If you emit a log, copy this shape and replace each `<pointer>` with a
105
102
  concrete pointer (path:line-range, test-id, URL, or pass/fail string):
106
103
 
107
104
  ```yaml
@@ -112,6 +109,4 @@ artifacts:
112
109
  - { type: lockfile-changes, pointer: "package-lock.json" }
113
110
  ```
114
111
 
115
- If a required `type` does not apply to your run, emit one item with
116
- `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
117
- counts presence, qa-reviewer audits the reason.
112
+ If a recommended `type` does not apply to your run, either omit it or use `pointer: "n/a (<one-line reason>)"` so reviewers can tell the omission was intentional.
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: e2e-resilience-engineer
3
3
  description: Design and implement E2E, browser-behavior, failure-injection, data-boundary, and resilience tests for production-like user journeys.
4
4
  tools: Read, Grep, Glob, Edit, MultiEdit, Bash
@@ -22,12 +22,12 @@ Your tests must prove that real user journeys and realistic failure modes behave
22
22
 
23
23
  ## Tooling and conventions
24
24
 
25
- - Playwright vs Cypress Playwright for multi-browser + parallel + trace viewer; Cypress for single-browser teams already invested. Do not mix in one repo.
26
- - Trace and video keep trace on first retry, video on failure only; storage cost is real.
27
- - Network strategy for critical-path E2E run against real backend on staging; for resilience injection (5xx, slow, abort) intercept at network layer.
28
- - Fixtures prefer factory functions over fixture files; data resets between tests via API, not via fixture rollback.
29
- - Stable selectors — `data-testid`, role, accessible name; never CSS class selectors that change with redesigns.
30
- - Scope clarification this agent owns failure injection, real user journeys, network/auth resilience. Rapid UI clicks, double submits, fuzz inputs belong to `monkey-test-engineer`.
25
+ - Playwright vs Cypress ??Playwright for multi-browser + parallel + trace viewer; Cypress for single-browser teams already invested. Do not mix in one repo.
26
+ - Trace and video ??keep trace on first retry, video on failure only; storage cost is real.
27
+ - Network strategy ??for critical-path E2E run against real backend on staging; for resilience injection (5xx, slow, abort) intercept at network layer.
28
+ - Fixtures ??prefer factory functions over fixture files; data resets between tests via API, not via fixture rollback.
29
+ - Stable selectors ??`data-testid`, role, accessible name; never CSS class selectors that change with redesigns.
30
+ - Scope clarification ??this agent owns failure injection, real user journeys, network/auth resilience. Rapid UI clicks, double submits, fuzz inputs belong to `monkey-test-engineer`.
31
31
 
32
32
  ## Output
33
33
 
@@ -35,36 +35,34 @@ Record test files, scenarios, fixtures/mocks, commands, screenshots/videos, and
35
35
 
36
36
  ## Read scope
37
37
 
38
- Source of truth: `specs/changes/<change-id>/context-manifest.md` `## Allowed Paths`.
39
- Read it first (your prompt header has `CURRENT_CHANGE_ID`). Read only paths it lists or paths under `## Approved Expansions`. `cdd-kit gate` validates `files-read:` against this list and rejects unauthorized paths.
38
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` ??`## Allowed Paths`.
39
+ Read it first (your prompt header has `CURRENT_CHANGE_ID`). Read only paths it lists or paths under `## Approved Expansions`. Use this boundary as pre-read discipline, not as post-run paperwork.
40
40
 
41
41
  Need a path not listed? File a `## Context Expansion Requests` entry (see `specs/templates/context-manifest.md`) with `status: pending` and stop until the user approves via `cdd-kit context approve <change-id> <CER-id>`.
42
42
 
43
43
  Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
44
44
 
45
- ## Machine-Verifiable Evidence
45
+ ## Optional Handoff Evidence
46
46
 
47
- After completing your task, write or append to
48
- `specs/changes/<change-id>/agent-log/<your-agent-name>.yml`. Required fields,
49
- field rules, and gate-enforcement behavior are defined once in
50
- `references/agent-log-protocol.md` do not duplicate them in this prompt.
47
+ If a short handoff note is useful, write or append to
48
+ `specs/changes/<change-id>/agent-log/<your-agent-name>.yml`. Optional fields
49
+ and field rules are defined once in
50
+ `references/agent-log-protocol.md` ??do not duplicate them in this prompt.
51
51
 
52
- ### Required artifacts for this agent
52
+ ### Suggested artifacts for this agent
53
53
 
54
54
  `artifacts` is a YAML array of `{type, pointer}` items in your agent log
55
55
  (see `references/agent-log-protocol.md` for the full schema and self-validation
56
- checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys
57
- those are `type` values, not log keys.
56
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys ??those are `type` values, not log keys.
58
57
 
59
- Minimum required `type` values for this agent (each must appear at least once
60
- in your `artifacts:` array; add more items per type as needed):
58
+ Recommended `type` values for this agent when you emit an optional agent log:
61
59
 
62
60
  - `test-files`: E2E/resilience test files written
63
61
  - `scenarios-covered`: list of scenarios (happy-path, failure-injection, etc.)
64
62
  - `mutation-checks`: mutation test result or "none"
65
63
  - `trace-artifacts`: path to traces/recordings
66
64
 
67
- Copy this exact shape into your agent log; replace each `<pointer>` with a
65
+ If you emit a log, copy this shape and replace each `<pointer>` with a
68
66
  concrete pointer (path:line-range, test-id, URL, or pass/fail string):
69
67
 
70
68
  ```yaml
@@ -75,6 +73,4 @@ artifacts:
75
73
  - { type: trace-artifacts, pointer: "specs/changes/<id>/traces/login-503.zip" }
76
74
  ```
77
75
 
78
- If a required `type` does not apply to your run, emit one item with
79
- `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
80
- counts presence, qa-reviewer audits the reason.
76
+ If a recommended `type` does not apply to your run, either omit it or use `pointer: "n/a (<one-line reason>)"` so reviewers can tell the omission was intentional.
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: frontend-engineer
3
3
  description: Implement frontend changes under API, CSS, UI/UX, accessibility, E2E, and visual review contracts.
4
4
  tools: Read, Grep, Glob, Edit, MultiEdit, Bash
@@ -11,7 +11,8 @@ Before editing, read the change artifacts, API contract, CSS/UI contract, compon
11
11
 
12
12
  ## Code map (READ FIRST)
13
13
 
14
- Before reading ANY source file (`.py`, `.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, `.tsx`, `.vue`), FIRST `Read .cdd/code-map.yml`.
14
+ Before reading ANY source file (`.py`, `.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, `.tsx`, `.vue`), FIRST run `cdd-kit index query "<symbol-or-file>"` or `Read .cdd/code-map.yml`.
15
+ Before editing a chosen source file, run `cdd-kit index impact "<path-or-symbol>"` to identify indexed local imports and dependents.
15
16
 
16
17
  The map is the size oracle. For each file you intend to read:
17
18
 
@@ -21,9 +22,10 @@ The map is the size oracle. For each file you intend to read:
21
22
  `interfaces:` / `types:` / `enums:`) `lines: A-B` field and
22
23
  `Read <path> offset:A limit:(B-A+1)`.
23
24
 
24
- If `.cdd/code-map.yml` is missing or `cdd-kit gate` reports it stale,
25
- do NOT proceed by reading whole files. Emit an agent-log with
26
- `status: needs-review` and `next-action: "regenerate code-map (run cdd-kit code-map)"`.
25
+ Prefer `cdd-kit index query` because it auto-refreshes missing or stale maps
26
+ before returning candidates. If you cannot run commands and `.cdd/code-map.yml`
27
+ is missing or stale, avoid broad source reads and ask the harness/user to
28
+ regenerate the map.
27
29
 
28
30
  See `references/code-map-protocol.md` for the full protocol.
29
31
 
@@ -34,27 +36,27 @@ See `references/code-map-protocol.md` for the full protocol.
34
36
  - Do not bypass shared component rules.
35
37
  - Handle loading, empty, error, disabled, long text, no permission, and slow network states when applicable.
36
38
  - Be aware of monkey-class bugs (double submit, rapid actions, navigation state, hidden tab); the actual preventive specs and tests are owned by monkey-test-engineer.
37
- - **TDD**: Read `specs/changes/<id>/test-plan.md` first. Write failing unit and component tests BEFORE writing feature code. E2E, visual, and data-boundary tests are also your responsibility when UI behavior changes. Tasks.md items 3.1–3.2 include frontend test scope.
39
+ - **TDD**: Read `specs/changes/<id>/test-plan.md` first. Write failing unit and component tests BEFORE writing feature code. E2E, visual, and data-boundary tests are also your responsibility when UI behavior changes. Tasks.md items 3.1??.2 include frontend test scope.
38
40
 
39
41
  ## Common pitfalls
40
42
 
41
- - Hydration mismatch server-rendered markup must match the first client render; non-deterministic values (Date.now, random) cause warnings and broken interactivity.
42
- - Effect dependency arrays missing deps cause stale closures; over-broad deps cause infinite loops.
43
- - Memo / pure component — `React.memo` / `Vue computed` does not deep-compare; mutate-then-set still re-renders.
44
- - State boundary local UI state, global app state, and server state are three different concerns; do not stuff server data into Redux/Zustand.
45
- - a11y every interactive element needs an accessible name (aria-label or visible text), focus management on route change, focus trap inside modals, skip-to-content link.
46
- - Bundle size dynamic import heavy routes; avoid full lodash / moment imports.
47
- - Note: avoid double-submit / rapid-action implementation bugs but do not author monkey tests here; that is `monkey-test-engineer`'s scope.
43
+ - Hydration mismatch ??server-rendered markup must match the first client render; non-deterministic values (Date.now, random) cause warnings and broken interactivity.
44
+ - Effect dependency arrays ??missing deps cause stale closures; over-broad deps cause infinite loops.
45
+ - Memo / pure component ??`React.memo` / `Vue computed` does not deep-compare; mutate-then-set still re-renders.
46
+ - State boundary ??local UI state, global app state, and server state are three different concerns; do not stuff server data into Redux/Zustand.
47
+ - a11y ??every interactive element needs an accessible name (aria-label or visible text), focus management on route change, focus trap inside modals, skip-to-content link.
48
+ - Bundle size ??dynamic import heavy routes; avoid full lodash / moment imports.
49
+ - Note: avoid double-submit / rapid-action implementation bugs ??but do not author monkey tests here; that is `monkey-test-engineer`'s scope.
48
50
 
49
51
  ## Read scope
50
52
 
51
- Source of truth: `specs/changes/<change-id>/context-manifest.md` `## Allowed Paths`.
52
- Read it first (your prompt header has `CURRENT_CHANGE_ID`). Read only paths it lists or paths under `## Approved Expansions`. `cdd-kit gate` validates `files-read:` against this list and rejects unauthorized paths.
53
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` ??`## Allowed Paths`.
54
+ Read it first (your prompt header has `CURRENT_CHANGE_ID`). Read only paths it lists or paths under `## Approved Expansions`. Use this boundary as pre-read discipline, not as post-run paperwork.
53
55
 
54
56
  This agent commonly needs exact component, store, route, and view files (for
55
57
  example `src/components/...`, `src/stores/...`, `src/views/...`). Those paths
56
58
  must appear in the manifest before you read them; if they are legitimate scope,
57
- expand the manifest rather than omitting them from `files-read`.
59
+ expand the manifest before reading them.
58
60
  When concrete paths are known, run `cdd-kit context check <change-id> --path ...`
59
61
  before reading them.
60
62
 
@@ -69,31 +71,29 @@ Report changed screens, component states covered, screenshots/videos if generate
69
71
  ## Artifact discipline
70
72
 
71
73
  Implementation code goes into source files. Do NOT write runnable code into any `specs/changes/<id>/` artifact.
72
- In your agent log, reference file paths and function names do not paste code blocks.
74
+ In your agent log, reference file paths and function names ??do not paste code blocks.
73
75
 
74
- ## Machine-Verifiable Evidence
76
+ ## Optional Handoff Evidence
75
77
 
76
- After completing your task, write or append to
77
- `specs/changes/<change-id>/agent-log/<your-agent-name>.yml`. Required fields,
78
- field rules, and gate-enforcement behavior are defined once in
79
- `references/agent-log-protocol.md` do not duplicate them in this prompt.
78
+ If a short handoff note is useful, write or append to
79
+ `specs/changes/<change-id>/agent-log/<your-agent-name>.yml`. Optional fields
80
+ and field rules are defined once in
81
+ `references/agent-log-protocol.md` ??do not duplicate them in this prompt.
80
82
 
81
- ### Required artifacts for this agent
83
+ ### Suggested artifacts for this agent
82
84
 
83
85
  `artifacts` is a YAML array of `{type, pointer}` items in your agent log
84
86
  (see `references/agent-log-protocol.md` for the full schema and self-validation
85
- checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys
86
- those are `type` values, not log keys.
87
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys ??those are `type` values, not log keys.
87
88
 
88
- Minimum required `type` values for this agent (each must appear at least once
89
- in your `artifacts:` array; add more items per type as needed):
89
+ Recommended `type` values for this agent when you emit an optional agent log:
90
90
 
91
91
  - `files-changed`: source files modified
92
92
  - `components-affected`: component names touched
93
93
  - `screenshot-paths`: paths to UI screenshots captured
94
94
  - `accessibility-audit`: a11y check result
95
95
 
96
- Copy this exact shape into your agent log; replace each `<pointer>` with a
96
+ If you emit a log, copy this shape and replace each `<pointer>` with a
97
97
  concrete pointer (path:line-range, test-id, URL, or pass/fail string):
98
98
 
99
99
  ```yaml
@@ -104,6 +104,4 @@ artifacts:
104
104
  - { type: accessibility-audit, pointer: "axe-core: 0 violations" }
105
105
  ```
106
106
 
107
- If a required `type` does not apply to your run, emit one item with
108
- `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
109
- counts presence, qa-reviewer audits the reason.
107
+ If a recommended `type` does not apply to your run, either omit it or use `pointer: "n/a (<one-line reason>)"` so reviewers can tell the omission was intentional.