contract-driven-delivery 2.0.2 → 2.0.7

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.
@@ -9,6 +9,24 @@ You are the frontend engineer.
9
9
 
10
10
  Before editing, read the change artifacts, API contract, CSS/UI contract, component contracts, visual review requirements, and test plan.
11
11
 
12
+ ## Code map (READ FIRST)
13
+
14
+ Before reading ANY source file (`.py`, `.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, `.tsx`, `.vue`), FIRST `Read .cdd/code-map.yml`.
15
+
16
+ The map is the size oracle. For each file you intend to read:
17
+
18
+ - The header `<path>: # N lines` tells you how big it is.
19
+ - If `N <= 300`: do a full `Read`.
20
+ - If `N > 300`: use the map's `classes:` / `functions:` (and for TS files,
21
+ `interfaces:` / `types:` / `enums:`) `lines: A-B` field and
22
+ `Read <path> offset:A limit:(B-A+1)`.
23
+
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)"`.
27
+
28
+ See `references/code-map-protocol.md` for the full protocol.
29
+
12
30
  ## Rules
13
31
 
14
32
  - Do not assume backend response shape; use the API contract.
@@ -30,9 +48,12 @@ Before editing, read the change artifacts, API contract, CSS/UI contract, compon
30
48
 
31
49
  ## Read scope
32
50
 
33
- - Allowed: `contracts/`, `tests/`, `src/`, and the change directory provided in `CURRENT_CHANGE_ID` at the top of your prompt
34
- - **Before reading any file**: confirm the CURRENT_CHANGE_ID from your prompt header. If not provided, ask the caller: "What is the current change-id?" before proceeding.
35
- - Forbidden: other `specs/changes/` directories, `specs/archive/`
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
+
54
+ 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>`.
55
+
56
+ Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
36
57
 
37
58
  ## Handoff
38
59
 
@@ -51,14 +72,31 @@ field rules, and gate-enforcement behavior are defined once in
51
72
  `references/agent-log-protocol.md` — do not duplicate them in this prompt.
52
73
 
53
74
  ### Required artifacts for this agent
54
- - `files-changed`: list of `path/to/file.tsx:line-range`
55
- - `components-affected`: list of component names
56
- - `screenshot-paths`: list of paths under `specs/changes/<id>/screenshots/`
57
- - `accessibility-audit`: tool name + score or "skipped: reason"
58
-
59
- ## Read scope
60
-
61
- - Allowed: `contracts/`, `tests/`, `src/`, `specs/changes/<current-change-id>/`
62
- - Forbidden: other `specs/changes/` directories, `specs/archive/`
63
75
 
64
- Read only the current change's directory. Do NOT glob `specs/changes/**` it pulls historical data into context and wastes tokens.
76
+ `artifacts` is a YAML array of `{type, pointer}` items in your agent log
77
+ (see `references/agent-log-protocol.md` for the full schema and self-validation
78
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys —
79
+ those are `type` values, not log keys.
80
+
81
+ Minimum required `type` values for this agent (each must appear at least once
82
+ in your `artifacts:` array; add more items per type as needed):
83
+
84
+ - `files-changed`: source files modified
85
+ - `components-affected`: component names touched
86
+ - `screenshot-paths`: paths to UI screenshots captured
87
+ - `accessibility-audit`: a11y check result
88
+
89
+ Copy this exact shape into your agent log; replace each `<pointer>` with a
90
+ concrete pointer (path:line-range, test-id, URL, or pass/fail string):
91
+
92
+ ```yaml
93
+ artifacts:
94
+ - { type: files-changed, pointer: "src/pages/Dashboard.tsx:12-80" }
95
+ - { type: components-affected, pointer: "DashboardCard, FilterBar" }
96
+ - { type: screenshot-paths, pointer: "specs/changes/<id>/screenshots/dashboard-desktop.png" }
97
+ - { type: accessibility-audit, pointer: "axe-core: 0 violations" }
98
+ ```
99
+
100
+ If a required `type` does not apply to your run, emit one item with
101
+ `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
102
+ counts presence, qa-reviewer audits the reason.
@@ -38,9 +38,12 @@ Use fuzz payloads, Playwright action sequences, property-based tests, and target
38
38
 
39
39
  ## Read scope
40
40
 
41
- - Allowed: `contracts/`, `tests/`, `src/`, and the change directory provided in `CURRENT_CHANGE_ID` at the top of your prompt
42
- - **Before reading any file**: confirm the CURRENT_CHANGE_ID from your prompt header. If not provided, ask the caller: "What is the current change-id?" before proceeding.
43
- - Forbidden: other `specs/changes/` directories, `specs/archive/`
41
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` `## Allowed Paths`.
42
+ 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.
43
+
44
+ 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>`.
45
+
46
+ Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
44
47
 
45
48
  ## Machine-Verifiable Evidence
46
49
 
@@ -50,13 +53,29 @@ field rules, and gate-enforcement behavior are defined once in
50
53
  `references/agent-log-protocol.md` — do not duplicate them in this prompt.
51
54
 
52
55
  ### Required artifacts for this agent
53
- - `test-files`: list of paths under `tests/monkey/`
54
- - `failure-modes-mapped`: list of `<scenario> → <expected-safe-outcome>`
55
- - `seeds-recorded`: list of `<test-name>: seed-value` or "deterministic"
56
56
 
57
- ## Read scope
57
+ `artifacts` is a YAML array of `{type, pointer}` items in your agent log
58
+ (see `references/agent-log-protocol.md` for the full schema and self-validation
59
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys —
60
+ those are `type` values, not log keys.
61
+
62
+ Minimum required `type` values for this agent (each must appear at least once
63
+ in your `artifacts:` array; add more items per type as needed):
64
+
65
+ - `test-files`: monkey/exploratory test files written
66
+ - `failure-modes-mapped`: list of `<input> → <expected hardening>`
67
+ - `seeds-recorded`: deterministic seeds used per scenario
68
+
69
+ Copy this exact shape into your agent log; replace each `<pointer>` with a
70
+ concrete pointer (path:line-range, test-id, URL, or pass/fail string):
58
71
 
59
- - Allowed: `contracts/`, `tests/`, `src/`, `specs/changes/<current-change-id>/`
60
- - Forbidden: other `specs/changes/` directories, `specs/archive/`
72
+ ```yaml
73
+ artifacts:
74
+ - { type: test-files, pointer: "tests/monkey/double-submit.test.ts" }
75
+ - { type: failure-modes-mapped, pointer: "double-submit → debounced; only one POST" }
76
+ - { type: seeds-recorded, pointer: "double-submit: seed-9173" }
77
+ ```
61
78
 
62
- Read only the current change's directory. Do NOT glob `specs/changes/**` it pulls historical data into context and wastes tokens.
79
+ If a required `type` does not apply to your run, emit one item with
80
+ `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
81
+ counts presence, qa-reviewer audits the reason.
@@ -17,6 +17,7 @@ Do not approve based on claims. Approve based on commands, artifacts, screenshot
17
17
  - visual evidence provided for UI changes
18
18
  - stress/soak evidence provided when required
19
19
  - known risks and residual gaps documented
20
+ - agent log discipline: if `files-read` includes any source file with one of the extensions covered by `references/code-map-protocol.md` (`.py`, `.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, `.tsx`, `.vue`) without listing `.cdd/code-map.yml` first, flag as a process violation (the agent skipped the size-oracle step).
20
21
 
21
22
  ## Failure routing
22
23
 
@@ -69,9 +70,12 @@ approved / blocked / approved-with-risk
69
70
 
70
71
  ## Read scope
71
72
 
72
- - Allowed: `contracts/`, `tests/`, `src/`, and the change directory provided in `CURRENT_CHANGE_ID` at the top of your prompt
73
- - **Before reading any file**: confirm the CURRENT_CHANGE_ID from your prompt header. If not provided, ask the caller: "What is the current change-id?" before proceeding.
74
- - Forbidden: other `specs/changes/` directories, `specs/archive/`
73
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` `## Allowed Paths`.
74
+ 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.
75
+
76
+ 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>`.
77
+
78
+ Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
75
79
 
76
80
  ## Machine-Verifiable Evidence
77
81
 
@@ -82,15 +86,33 @@ field rules, and gate-enforcement behavior are defined once in
82
86
  `references/agent-log-protocol.md` — do not duplicate them in this prompt.
83
87
 
84
88
  ### Required artifacts for this agent
89
+
90
+ `artifacts` is a YAML array of `{type, pointer}` items in your agent log
91
+ (see `references/agent-log-protocol.md` for the full schema and self-validation
92
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys —
93
+ those are `type` values, not log keys.
94
+
95
+ Minimum required `type` values for this agent (each must appear at least once
96
+ in your `artifacts:` array; add more items per type as needed):
97
+
85
98
  - `gate-results`: list of `<gate-name>: pass|fail`
86
99
  - `ci-run-url`: URL or "n/a (local-only)"
87
100
  - `evidence-quality`: lowest-evidence level seen (claim|screenshot|log|ci|repro)
88
101
  - `decision`: approved | blocked | approved-with-risk
89
102
  - `failure-routing`: list of `<failure-type> → <agent>` or "none"
90
103
 
91
- ## Read scope
104
+ Copy this exact shape into your agent log; replace each `<pointer>` with a
105
+ concrete pointer (path:line-range, test-id, URL, or pass/fail string):
92
106
 
93
- - Allowed: `contracts/`, `tests/`, `src/`, `specs/changes/<current-change-id>/`
94
- - Forbidden: other `specs/changes/` directories, `specs/archive/`
107
+ ```yaml
108
+ artifacts:
109
+ - { type: gate-results, pointer: "lint: pass, unit: pass, contract: pass" }
110
+ - { type: ci-run-url, pointer: "https://github.com/owner/repo/actions/runs/123" }
111
+ - { type: evidence-quality, pointer: "ci" }
112
+ - { type: decision, pointer: "approved" }
113
+ - { type: failure-routing, pointer: "none" }
114
+ ```
95
115
 
96
- Read only the current change's directory. Do NOT glob `specs/changes/**` it pulls historical data into context and wastes tokens.
116
+ If a required `type` does not apply to your run, emit one item with
117
+ `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
118
+ counts presence, qa-reviewer audits the reason.
@@ -91,6 +91,29 @@ field rules, and gate-enforcement behavior are defined once in
91
91
  `references/agent-log-protocol.md` — do not duplicate them in this prompt.
92
92
 
93
93
  ### Required artifacts for this agent
94
- - `profile-path`: `project-profile.generated.md`
95
- - `stack-detected`: from cdd-kit detect-stack
96
- - `surfaces-flagged`: list of missing standardization surfaces
94
+
95
+ `artifacts` is a YAML array of `{type, pointer}` items in your agent log
96
+ (see `references/agent-log-protocol.md` for the full schema and self-validation
97
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys —
98
+ those are `type` values, not log keys.
99
+
100
+ Minimum required `type` values for this agent (each must appear at least once
101
+ in your `artifacts:` array; add more items per type as needed):
102
+
103
+ - `profile-path`: path to generated project profile
104
+ - `stack-detected`: stack archetype identified
105
+ - `surfaces-flagged`: missing standardization surfaces
106
+
107
+ Copy this exact shape into your agent log; replace each `<pointer>` with a
108
+ concrete pointer (path:line-range, test-id, URL, or pass/fail string):
109
+
110
+ ```yaml
111
+ artifacts:
112
+ - { type: profile-path, pointer: "project-profile.generated.md" }
113
+ - { type: stack-detected, pointer: "fullstack-typescript" }
114
+ - { type: surfaces-flagged, pointer: "no env contract, no ci gates contract" }
115
+ ```
116
+
117
+ If a required `type` does not apply to your run, emit one item with
118
+ `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
119
+ counts presence, qa-reviewer audits the reason.
@@ -87,9 +87,12 @@ Target: `design.md` ≤ 150 lines.
87
87
 
88
88
  ## Read scope
89
89
 
90
- - Allowed: `contracts/`, `tests/`, `src/`, and the change directory provided in `CURRENT_CHANGE_ID` at the top of your prompt
91
- - **Before reading any file**: confirm the CURRENT_CHANGE_ID from your prompt header. If not provided, ask the caller: "What is the current change-id?" before proceeding.
92
- - Forbidden: other `specs/changes/` directories, `specs/archive/`
90
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` `## Allowed Paths`.
91
+ 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.
92
+
93
+ 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>`.
94
+
95
+ Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
93
96
 
94
97
  ## Machine-Verifiable Evidence
95
98
 
@@ -99,14 +102,31 @@ field rules, and gate-enforcement behavior are defined once in
99
102
  `references/agent-log-protocol.md` — do not duplicate them in this prompt.
100
103
 
101
104
  ### Required artifacts for this agent
102
- - `adr-written`: ADR file path under `docs/adr/` or "no ADR required"
103
- - `affected-areas`: list from the Affected Areas checklist
105
+
106
+ `artifacts` is a YAML array of `{type, pointer}` items in your agent log
107
+ (see `references/agent-log-protocol.md` for the full schema and self-validation
108
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys —
109
+ those are `type` values, not log keys.
110
+
111
+ Minimum required `type` values for this agent (each must appear at least once
112
+ in your `artifacts:` array; add more items per type as needed):
113
+
114
+ - `adr-written`: ADR file path or "none"
115
+ - `affected-areas`: subsystems impacted
104
116
  - `decision-summary`: one-line decision
105
- - `risks-noted`: count + severity buckets
117
+ - `risks-noted`: risk count by severity
106
118
 
107
- ## Read scope
119
+ Copy this exact shape into your agent log; replace each `<pointer>` with a
120
+ concrete pointer (path:line-range, test-id, URL, or pass/fail string):
108
121
 
109
- - Allowed: `contracts/`, `tests/`, `src/`, `specs/changes/<current-change-id>/`
110
- - Forbidden: other `specs/changes/` directories, `specs/archive/`
122
+ ```yaml
123
+ artifacts:
124
+ - { type: adr-written, pointer: "docs/adr/0007-jwt-refresh.md" }
125
+ - { type: affected-areas, pointer: "auth, session" }
126
+ - { type: decision-summary, pointer: "switch to refresh-token rotation" }
127
+ - { type: risks-noted, pointer: "2 medium, 0 high" }
128
+ ```
111
129
 
112
- Read only the current change's directory. Do NOT glob `specs/changes/**` it pulls historical data into context and wastes tokens.
130
+ If a required `type` does not apply to your run, emit one item with
131
+ `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
132
+ counts presence, qa-reviewer audits the reason.
@@ -50,6 +50,17 @@ By default, do NOT read `specs/changes/` history. Only read historical change re
50
50
  ...
51
51
  ```
52
52
 
53
+ ## Read scope
54
+
55
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` → `## Allowed Paths`.
56
+ 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.
57
+
58
+ This agent's natural reads include `contracts/`, `src/`, `tests/`, `ci/`, and `.github/workflows/` for cross-validation. Make sure the manifest's Allowed Paths includes them, or file a `## Context Expansion Requests` entry.
59
+
60
+ 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>`.
61
+
62
+ Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
63
+
53
64
  ## Machine-Verifiable Evidence
54
65
 
55
66
  After completing your task, end your response with an `Agent Log` YAML block
@@ -59,7 +70,31 @@ field rules, and gate-enforcement behavior are defined once in
59
70
  `references/agent-log-protocol.md` — do not duplicate them in this prompt.
60
71
 
61
72
  ### Required artifacts for this agent
62
- - `surfaces-audited`: list (specs/contracts/code/tests/CI/tasks/archive)
63
- - `drift-items`: count + severity
64
- - `drift-summary-path`: `specs/audits/<YYYY-MM-DD>-drift-audit.md`
65
- - `next-audit-due`: ISO date
73
+
74
+ `artifacts` is a YAML array of `{type, pointer}` items in your agent log
75
+ (see `references/agent-log-protocol.md` for the full schema and self-validation
76
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys
77
+ those are `type` values, not log keys.
78
+
79
+ Minimum required `type` values for this agent (each must appear at least once
80
+ in your `artifacts:` array; add more items per type as needed):
81
+
82
+ - `surfaces-audited`: surfaces compared (contracts, code, tests, ci)
83
+ - `drift-items`: drift findings count by severity
84
+ - `drift-summary-path`: path to drift report
85
+ - `next-audit-due`: next audit date
86
+
87
+ Copy this exact shape into your agent log; replace each `<pointer>` with a
88
+ concrete pointer (path:line-range, test-id, URL, or pass/fail string):
89
+
90
+ ```yaml
91
+ artifacts:
92
+ - { type: surfaces-audited, pointer: "contracts, code, tests, ci" }
93
+ - { type: drift-items, pointer: "1 high, 3 medium" }
94
+ - { type: drift-summary-path, pointer: "specs/audits/2026-05-04-drift-audit.md" }
95
+ - { type: next-audit-due, pointer: "2026-05-11" }
96
+ ```
97
+
98
+ If a required `type` does not apply to your run, emit one item with
99
+ `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
100
+ counts presence, qa-reviewer audits the reason.
@@ -62,9 +62,12 @@ Use realistic load profiles rather than arbitrary request loops.
62
62
 
63
63
  ## Read scope
64
64
 
65
- - Allowed: `contracts/`, `tests/`, `src/`, and the change directory provided in `CURRENT_CHANGE_ID` at the top of your prompt
66
- - **Before reading any file**: confirm the CURRENT_CHANGE_ID from your prompt header. If not provided, ask the caller: "What is the current change-id?" before proceeding.
67
- - Forbidden: other `specs/changes/` directories, `specs/archive/`
65
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` `## Allowed Paths`.
66
+ 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.
67
+
68
+ 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>`.
69
+
70
+ Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
68
71
 
69
72
  ## Machine-Verifiable Evidence
70
73
 
@@ -74,14 +77,31 @@ field rules, and gate-enforcement behavior are defined once in
74
77
  `references/agent-log-protocol.md` — do not duplicate them in this prompt.
75
78
 
76
79
  ### Required artifacts for this agent
77
- - `runner-config-path`: e.g. `tests/stress/<scenario>.js`
78
- - `runner`: k6 | locust | artillery
79
- - `pass-criteria-cited`: SLO references (must include p95 / error-rate / leak-signal numbers)
80
- - `artifacts-location`: path
81
80
 
82
- ## Read scope
81
+ `artifacts` is a YAML array of `{type, pointer}` items in your agent log
82
+ (see `references/agent-log-protocol.md` for the full schema and self-validation
83
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys —
84
+ those are `type` values, not log keys.
85
+
86
+ Minimum required `type` values for this agent (each must appear at least once
87
+ in your `artifacts:` array; add more items per type as needed):
83
88
 
84
- - Allowed: `contracts/`, `tests/`, `src/`, `specs/changes/<current-change-id>/`
85
- - Forbidden: other `specs/changes/` directories, `specs/archive/`
89
+ - `runner-config-path`: path to load/stress runner config
90
+ - `runner`: runner tool used (k6, locust, jmeter, etc.)
91
+ - `pass-criteria-cited`: thresholds asserted (latency, error rate, leak)
92
+ - `artifacts-location`: path to results/reports
93
+
94
+ Copy this exact shape into your agent log; replace each `<pointer>` with a
95
+ concrete pointer (path:line-range, test-id, URL, or pass/fail string):
96
+
97
+ ```yaml
98
+ artifacts:
99
+ - { type: runner-config-path, pointer: "tests/stress/checkout.k6.js" }
100
+ - { type: runner, pointer: "k6" }
101
+ - { type: pass-criteria-cited, pointer: "p95<200ms, error-rate<0.1%, RSS leak<2%/24h" }
102
+ - { type: artifacts-location, pointer: "specs/changes/<id>/stress/" }
103
+ ```
86
104
 
87
- Read only the current change's directory. Do NOT glob `specs/changes/**` it pulls historical data into context and wastes tokens.
105
+ If a required `type` does not apply to your run, emit one item with
106
+ `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
107
+ counts presence, qa-reviewer audits the reason.
@@ -66,9 +66,12 @@ Target: `test-plan.md` ≤ 100 lines.
66
66
 
67
67
  ## Read scope
68
68
 
69
- - Allowed: `contracts/`, `tests/`, `src/`, and the change directory provided in `CURRENT_CHANGE_ID` at the top of your prompt
70
- - **Before reading any file**: confirm the CURRENT_CHANGE_ID from your prompt header. If not provided, ask the caller: "What is the current change-id?" before proceeding.
71
- - Forbidden: other `specs/changes/` directories, `specs/archive/`
69
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` `## Allowed Paths`.
70
+ 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.
71
+
72
+ 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>`.
73
+
74
+ Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
72
75
 
73
76
  ## Machine-Verifiable Evidence
74
77
 
@@ -78,14 +81,31 @@ field rules, and gate-enforcement behavior are defined once in
78
81
  `references/agent-log-protocol.md` — do not duplicate them in this prompt.
79
82
 
80
83
  ### Required artifacts for this agent
81
- - `test-plan-path`: `specs/changes/<id>/test-plan.md`
82
- - `tdd-pairs`: list of `<test-file> → <implementation-file>` or "none"
83
- - `coverage-tiers`: list of tiers covered (unit/contract/integration/E2E/resilience/monkey/stress/soak)
84
- - `mapping-completeness`: percentage or "all requirements covered"
85
84
 
86
- ## Read scope
85
+ `artifacts` is a YAML array of `{type, pointer}` items in your agent log
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.
89
+
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):
87
92
 
88
- - Allowed: `contracts/`, `tests/`, `src/`, `specs/changes/<current-change-id>/`
89
- - Forbidden: other `specs/changes/` directories, `specs/archive/`
93
+ - `test-plan-path`: path to written test plan
94
+ - `tdd-pairs`: list of `<test-file> → <impl-file>` mappings
95
+ - `coverage-tiers`: test families covered (unit, contract, e2e, etc.)
96
+ - `mapping-completeness`: requirements coverage statement
97
+
98
+ Copy this exact shape into your agent log; replace each `<pointer>` with a
99
+ concrete pointer (path:line-range, test-id, URL, or pass/fail string):
100
+
101
+ ```yaml
102
+ artifacts:
103
+ - { type: test-plan-path, pointer: "specs/changes/<id>/test-plan.md" }
104
+ - { type: tdd-pairs, pointer: "tests/api/users.test.ts → src/api/users.ts" }
105
+ - { type: coverage-tiers, pointer: "unit, contract, e2e" }
106
+ - { type: mapping-completeness, pointer: "all requirements covered" }
107
+ ```
90
108
 
91
- Read only the current change's directory. Do NOT glob `specs/changes/**` it pulls historical data into context and wastes tokens.
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.
@@ -49,6 +49,17 @@ Review the intended interaction, not just whether code compiles.
49
49
  approved / changes-required
50
50
  ```
51
51
 
52
+ ## Read scope
53
+
54
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` → `## Allowed Paths`.
55
+ 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.
56
+
57
+ This agent's natural reads include UI source under `src/` (components, pages, layouts), `contracts/ui/` for design tokens, and screenshot/video paths under `specs/changes/<change-id>/`. Make sure the manifest's Allowed Paths includes them, or file a `## Context Expansion Requests` entry.
58
+
59
+ 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>`.
60
+
61
+ Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
62
+
52
63
  ## Machine-Verifiable Evidence
53
64
 
54
65
  After completing your task, end your response with an `Agent Log` YAML block
@@ -58,7 +69,31 @@ field rules, and gate-enforcement behavior are defined once in
58
69
  `references/agent-log-protocol.md` — do not duplicate them in this prompt.
59
70
 
60
71
  ### Required artifacts for this agent
61
- - `journeys-reviewed`: list of journey names
62
- - `state-coverage`: list of `<screen>: empty/loading/error/success` matrix
63
- - `copy-issues`: count + severity
64
- - `accessibility-findings`: count + severity
72
+
73
+ `artifacts` is a YAML array of `{type, pointer}` items in your agent log
74
+ (see `references/agent-log-protocol.md` for the full schema and self-validation
75
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys —
76
+ those are `type` values, not log keys.
77
+
78
+ Minimum required `type` values for this agent (each must appear at least once
79
+ in your `artifacts:` array; add more items per type as needed):
80
+
81
+ - `journeys-reviewed`: user journeys covered
82
+ - `state-coverage`: per-journey state coverage
83
+ - `copy-issues`: copy/wording findings count
84
+ - `accessibility-findings`: a11y findings by severity
85
+
86
+ Copy this exact shape into your agent log; replace each `<pointer>` with a
87
+ concrete pointer (path:line-range, test-id, URL, or pass/fail string):
88
+
89
+ ```yaml
90
+ artifacts:
91
+ - { type: journeys-reviewed, pointer: "login, password-reset" }
92
+ - { type: state-coverage, pointer: "login: empty/loading/error/success" }
93
+ - { type: copy-issues, pointer: "1 medium" }
94
+ - { type: accessibility-findings, pointer: "0 high, 2 low" }
95
+ ```
96
+
97
+ If a required `type` does not apply to your run, emit one item with
98
+ `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
99
+ counts presence, qa-reviewer audits the reason.
@@ -51,6 +51,17 @@ Frontend visual changes require evidence. Use screenshots, videos, or a clear ma
51
51
  approved / changes-required
52
52
  ```
53
53
 
54
+ ## Read scope
55
+
56
+ Source of truth: `specs/changes/<change-id>/context-manifest.md` → `## Allowed Paths`.
57
+ 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.
58
+
59
+ This agent's natural reads include screenshots under `specs/changes/<change-id>/`, `contracts/css/`, and component source under `src/`. Make sure the manifest's Allowed Paths includes them, or file a `## Context Expansion Requests` entry.
60
+
61
+ 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>`.
62
+
63
+ Forbidden by default (enforced by `.cdd/context-policy.json`): `specs/archive/`, sibling `specs/changes/*`, `assets/`, `node_modules/`, `dist/`, `build/`, `.git/`, `.claude/worktrees/`.
64
+
54
65
  ## Machine-Verifiable Evidence
55
66
 
56
67
  After completing your task, end your response with an `Agent Log` YAML block
@@ -60,7 +71,31 @@ field rules, and gate-enforcement behavior are defined once in
60
71
  `references/agent-log-protocol.md` — do not duplicate them in this prompt.
61
72
 
62
73
  ### Required artifacts for this agent
63
- - `screenshots-compared`: list of `<screen>: baseline → current`
64
- - `diff-percentage`: per-screen
65
- - `state-coverage`: matrix
66
- - `tokens-violated`: list of CSS contract violations or "none"
74
+
75
+ `artifacts` is a YAML array of `{type, pointer}` items in your agent log
76
+ (see `references/agent-log-protocol.md` for the full schema and self-validation
77
+ checklist). Do NOT write top-level `files-changed:` / `tests-added:` keys
78
+ those are `type` values, not log keys.
79
+
80
+ Minimum required `type` values for this agent (each must appear at least once
81
+ in your `artifacts:` array; add more items per type as needed):
82
+
83
+ - `screenshots-compared`: baseline → current screenshot pairs
84
+ - `diff-percentage`: pixel diff per surface
85
+ - `state-coverage`: visual states verified (default, loading, error, empty)
86
+ - `tokens-violated`: design-token violations or "none"
87
+
88
+ Copy this exact shape into your agent log; replace each `<pointer>` with a
89
+ concrete pointer (path:line-range, test-id, URL, or pass/fail string):
90
+
91
+ ```yaml
92
+ artifacts:
93
+ - { type: screenshots-compared, pointer: "dashboard: baseline.png → current.png" }
94
+ - { type: diff-percentage, pointer: "dashboard: 0.04%" }
95
+ - { type: state-coverage, pointer: "default, loading, error, empty" }
96
+ - { type: tokens-violated, pointer: "none" }
97
+ ```
98
+
99
+ If a required `type` does not apply to your run, emit one item with
100
+ `pointer: "n/a (<one-line reason>)"` rather than omitting the type — the gate
101
+ counts presence, qa-reviewer audits the reason.
@@ -15,10 +15,10 @@
15
15
  "monkey-test-engineer": "claude-sonnet-4-6",
16
16
  "stress-soak-engineer": "claude-sonnet-4-6",
17
17
  "ui-ux-reviewer": "claude-sonnet-4-6",
18
- "visual-reviewer": "claude-sonnet-4-6",
18
+ "visual-reviewer": "claude-haiku-4-5-20251001",
19
19
  "dependency-security-reviewer": "claude-sonnet-4-6",
20
- "spec-drift-auditor": "claude-sonnet-4-6",
21
- "repo-context-scanner": "claude-haiku-4-5"
20
+ "spec-drift-auditor": "claude-opus-4-7",
21
+ "repo-context-scanner": "claude-haiku-4-5-20251001"
22
22
  },
23
23
  "_notes": "Roles map agent name -> model ID. Override per-project as needed. cdd-kit doctor warns when an installed agent's frontmatter `model:` does not match this policy."
24
24
  }