contract-driven-delivery 1.12.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +169 -0
- package/README.md +58 -38
- package/assets/CLAUDE.template.md +4 -12
- package/assets/agents/backend-engineer.md +5 -26
- package/assets/agents/change-classifier.md +87 -27
- package/assets/agents/ci-cd-gatekeeper.md +4 -25
- package/assets/agents/contract-reviewer.md +4 -25
- package/assets/agents/dependency-security-reviewer.md +4 -24
- package/assets/agents/e2e-resilience-engineer.md +4 -25
- package/assets/agents/frontend-engineer.md +4 -25
- package/assets/agents/monkey-test-engineer.md +4 -25
- package/assets/agents/qa-reviewer.md +4 -25
- package/assets/agents/repo-context-scanner.md +4 -24
- package/assets/agents/spec-architect.md +4 -25
- package/assets/agents/spec-drift-auditor.md +4 -24
- package/assets/agents/stress-soak-engineer.md +4 -25
- package/assets/agents/test-strategist.md +4 -25
- package/assets/agents/ui-ux-reviewer.md +4 -24
- package/assets/agents/visual-reviewer.md +4 -24
- package/assets/cdd/model-policy.json +20 -1
- package/assets/hooks/post-tool-use-files-read.sh +55 -0
- package/assets/skills/cdd-close/SKILL.md +9 -9
- package/assets/skills/cdd-new/SKILL.md +201 -198
- package/assets/skills/cdd-resume/SKILL.md +16 -16
- package/assets/skills/contract-driven-delivery/SKILL.md +6 -0
- package/assets/skills/contract-driven-delivery/references/agent-log-protocol.md +147 -0
- package/assets/skills/contract-driven-delivery/scripts/generate_change_scaffold.py +1 -1
- package/assets/skills/contract-driven-delivery/scripts/validate_spec_traceability.py +1 -1
- package/assets/skills/contract-driven-delivery/templates/agent-log.example.yml +14 -0
- package/assets/skills/contract-driven-delivery/templates/change-classification.md +1 -1
- package/assets/skills/contract-driven-delivery/templates/tasks.yml +39 -0
- package/assets/specs-templates/change-classification.md +1 -1
- package/assets/specs-templates/context-manifest.md +8 -13
- package/assets/specs-templates/tasks.yml +39 -0
- package/dist/cli/index.js +11057 -829
- package/package.json +7 -3
- package/assets/skills/contract-driven-delivery/templates/tasks.md +0 -50
- package/assets/specs-templates/tasks.md +0 -52
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cdd-resume
|
|
3
|
-
description: Resume an in-progress change across sessions. Reads tasks.
|
|
3
|
+
description: Resume an in-progress change across sessions. Reads tasks.yml and agent-log/ to determine where to continue. Args: <change-id>
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# cdd-resume — Resume a Change
|
|
@@ -17,9 +17,9 @@ Provide the `change-id`. If unsure, run `cdd-kit list` to see active changes.
|
|
|
17
17
|
|
|
18
18
|
## Step 0: Detect format version
|
|
19
19
|
|
|
20
|
-
Before reading state, check if `specs/changes/<change-id>/tasks.
|
|
20
|
+
Before reading state, check if `specs/changes/<change-id>/tasks.yml` exists.
|
|
21
21
|
|
|
22
|
-
If
|
|
22
|
+
If only `specs/changes/<change-id>/tasks.md` exists (no `tasks.yml`), this change was created with a pre-v2.0 version of cdd-kit. Run:
|
|
23
23
|
|
|
24
24
|
```
|
|
25
25
|
cdd-kit migrate <change-id>
|
|
@@ -27,8 +27,8 @@ cdd-kit migrate <change-id>
|
|
|
27
27
|
|
|
28
28
|
Then commit the migration:
|
|
29
29
|
```
|
|
30
|
-
git add specs/changes/<change-id>/tasks.
|
|
31
|
-
git commit -m "chore: migrate <change-id> to
|
|
30
|
+
git add specs/changes/<change-id>/tasks.yml specs/changes/<change-id>/agent-log
|
|
31
|
+
git commit -m "chore: migrate <change-id> to v2.0 YAML format"
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
If there are many mid-flight changes, suggest `cdd-kit migrate --all` instead.
|
|
@@ -38,17 +38,17 @@ If there are many mid-flight changes, suggest `cdd-kit migrate --all` instead.
|
|
|
38
38
|
## Step 1: Read current state
|
|
39
39
|
|
|
40
40
|
Read only these state files first:
|
|
41
|
-
- `specs/changes/<change-id>/tasks.
|
|
41
|
+
- `specs/changes/<change-id>/tasks.yml`
|
|
42
42
|
- `specs/changes/<change-id>/context-manifest.md` if present
|
|
43
|
-
- `specs/changes/<change-id>/agent-log/*.
|
|
43
|
+
- `specs/changes/<change-id>/agent-log/*.yml`
|
|
44
44
|
- `specs/changes/<change-id>/change-classification.md`
|
|
45
45
|
|
|
46
46
|
Do not run broad repository search during resume. Do not read `src/`, `tests/`, or `contracts/` unless the current `context-manifest.md` authorizes that path or an approved expansion lists it.
|
|
47
47
|
|
|
48
|
-
From `tasks.
|
|
49
|
-
- Identify all `
|
|
50
|
-
- Identify all `
|
|
51
|
-
- Identify all `
|
|
48
|
+
From `tasks.yml`:
|
|
49
|
+
- Identify all `status: done` items
|
|
50
|
+
- Identify all `status: skipped` (N/A) items
|
|
51
|
+
- Identify all `status: pending` items
|
|
52
52
|
|
|
53
53
|
Read `specs/changes/<change-id>/agent-log/` to list which agents have already run.
|
|
54
54
|
|
|
@@ -73,7 +73,7 @@ Tier: <tier>
|
|
|
73
73
|
Status: <in-progress | gate-blocked>
|
|
74
74
|
|
|
75
75
|
Completed agents: <list from agent-log/>
|
|
76
|
-
Pending tasks: <list of
|
|
76
|
+
Pending tasks: <list of status: pending items>
|
|
77
77
|
Pending context expansions: <none | list request ids and paths>
|
|
78
78
|
Allowed context: <short summary from context-manifest.md>
|
|
79
79
|
|
|
@@ -86,7 +86,7 @@ Ask the user: "Continue from <next-agent>? (yes/no)"
|
|
|
86
86
|
|
|
87
87
|
## Step 3: Continue the flow
|
|
88
88
|
|
|
89
|
-
If user confirms, resume from the next agent in the Tier sequence (refer to `/cdd-new` Step 3 for the agent order).
|
|
89
|
+
If user confirms, resume from the next agent in the Tier sequence (refer to `/cdd-new` Step 3 for the agent order, and `/cdd-new` "Agent stage badges" for the colored badges to use in your narration).
|
|
90
90
|
|
|
91
91
|
**Critical**: Inject this block at the start of every agent prompt:
|
|
92
92
|
|
|
@@ -108,7 +108,7 @@ Continue until all required agents are done, then run `cdd-kit gate <change-id>`
|
|
|
108
108
|
|
|
109
109
|
- Never re-run an agent that already has `status: complete` in its agent-log
|
|
110
110
|
- Never start from Step 1 of `/cdd-new` — only resume from the next pending agent
|
|
111
|
-
- Never use broad search to reconstruct state; resume from `tasks.
|
|
111
|
+
- Never use broad search to reconstruct state; resume from `tasks.yml`, `context-manifest.md`, and `agent-log/`
|
|
112
112
|
- Never continue past pending Context Expansion Requests
|
|
113
|
-
- If tasks.
|
|
114
|
-
- If tasks.
|
|
113
|
+
- If tasks.yml has `status: abandoned`, report to user and stop
|
|
114
|
+
- If tasks.yml has `status: gate-blocked`, go directly to gate retry (max 3)
|
|
@@ -116,3 +116,9 @@ When using this skill, produce concrete artifact content instead of vague recomm
|
|
|
116
116
|
- `scripts/validate_spec_traceability.py`: check coarse traceability between spec, tasks, tests, and CI gates.
|
|
117
117
|
|
|
118
118
|
Run scripts with Python 3 from the repository root.
|
|
119
|
+
|
|
120
|
+
## Output discipline (file formats)
|
|
121
|
+
|
|
122
|
+
- `tasks.yml`: structured YAML, validated by `src/schemas/tasks.schema.ts`.
|
|
123
|
+
- `agent-log/<agent>.yml`: structured YAML per `references/agent-log-protocol.md`.
|
|
124
|
+
- All other change artifacts remain markdown prose.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Agent Log Protocol (YAML)
|
|
2
|
+
|
|
3
|
+
All cdd-kit agents share the same machine-verifiable agent-log format. This
|
|
4
|
+
file is the single source of truth — agent prompts reference it instead of
|
|
5
|
+
inlining the format. `cdd-kit gate` validates these files against
|
|
6
|
+
`src/schemas/agent-log.schema.ts` (JSON Schema, draft-07). Drift here equals
|
|
7
|
+
silent gate skips, so do not re-document this in agent prompts.
|
|
8
|
+
|
|
9
|
+
## Output target
|
|
10
|
+
|
|
11
|
+
Each agent writes (or has main Claude write) one file per run:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
specs/changes/<change-id>/agent-log/<agent-name>.yml
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
If the same agent runs more than once for a change (e.g., after fix-back),
|
|
18
|
+
overwrite the file — only the latest run is gate-relevant.
|
|
19
|
+
|
|
20
|
+
## Required structure
|
|
21
|
+
|
|
22
|
+
The file is pure YAML (no markdown wrapping, no checklist).
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
change-id: <id>
|
|
26
|
+
agent: <agent-name>
|
|
27
|
+
timestamp: <ISO 8601 UTC, e.g. 2026-04-27T14:30:00Z>
|
|
28
|
+
status: complete # complete | needs-review | blocked
|
|
29
|
+
files-read:
|
|
30
|
+
- <repo-relative path>
|
|
31
|
+
- <repo-relative path>
|
|
32
|
+
artifacts:
|
|
33
|
+
- { type: <evidence-type>, pointer: <concrete pointer> }
|
|
34
|
+
- { type: <evidence-type>, pointer: <concrete pointer> }
|
|
35
|
+
next-action: <one line, or "none">
|
|
36
|
+
notes: <optional free-form>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Field rules
|
|
40
|
+
|
|
41
|
+
| field | required | rule |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| `change-id` | yes | must equal the parent change directory name |
|
|
44
|
+
| `agent` | yes | canonical agent name (matches the agent's filename) |
|
|
45
|
+
| `timestamp` | yes | ISO 8601 UTC; used by spec-drift-auditor for ordering |
|
|
46
|
+
| `status` | yes | exactly one of `complete` \| `needs-review` \| `blocked` |
|
|
47
|
+
| `files-read` | conditional | required for context-governed changes (see below) |
|
|
48
|
+
| `artifacts` | yes | array of `{type, pointer}` objects, ≥ 1 item |
|
|
49
|
+
| `next-action` | yes | when `status: blocked`, ≥ 10 chars and not `none` |
|
|
50
|
+
| `notes` | no | optional |
|
|
51
|
+
|
|
52
|
+
#### `files-read`
|
|
53
|
+
|
|
54
|
+
Required when `tasks.yml` has `context-governance: v1`. Each entry is a
|
|
55
|
+
repo-relative path. Absolute paths and `..` traversal are rejected. If you
|
|
56
|
+
legitimately read nothing beyond your own change directory, write:
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
files-read:
|
|
60
|
+
- specs/changes/<change-id>/
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
#### `artifacts`
|
|
64
|
+
|
|
65
|
+
Concrete pointers only. Allowed forms:
|
|
66
|
+
|
|
67
|
+
- `path/to/file.ts:10-45`
|
|
68
|
+
- `tests/foo.test.ts::should reject empty body`
|
|
69
|
+
- `cdd-kit gate <id>: 0 errors`
|
|
70
|
+
- `contracts/api/api-contract.md#endpoints`
|
|
71
|
+
|
|
72
|
+
Never `verified`, `OK`, `done`, or unscoped prose.
|
|
73
|
+
|
|
74
|
+
#### `next-action`
|
|
75
|
+
|
|
76
|
+
When `status: blocked`, this must be ≥ 10 chars, must not be `none`, `tbd`,
|
|
77
|
+
`investigate further`, or `n/a`, and must name the actual next step a human
|
|
78
|
+
can act on. When `status: complete`, `none` is acceptable.
|
|
79
|
+
|
|
80
|
+
## Per-agent additional artifact requirements
|
|
81
|
+
|
|
82
|
+
Each agent prompt lists its own `### Required artifacts for this agent`. The
|
|
83
|
+
gate does not enforce those today; they are a discipline contract enforced by
|
|
84
|
+
`qa-reviewer` and `contract-reviewer`. If you add a required artifact in an
|
|
85
|
+
agent prompt, also update the qa-reviewer checklist.
|
|
86
|
+
|
|
87
|
+
## Self-validation before submitting your response
|
|
88
|
+
|
|
89
|
+
**Every agent MUST self-validate its draft agent-log YAML before finishing.**
|
|
90
|
+
A malformed log forces `cdd-kit gate` to fail, which forces the skill to
|
|
91
|
+
re-invoke you, which costs the user another full agent round. Self-lint is
|
|
92
|
+
~5 seconds; a re-run is minutes and dollars.
|
|
93
|
+
|
|
94
|
+
Before sending your final response, re-read the YAML you intend to write and
|
|
95
|
+
verify each item:
|
|
96
|
+
|
|
97
|
+
- [ ] **All required keys exist**: `change-id`, `agent`, `timestamp`,
|
|
98
|
+
`status`, `artifacts`, `next-action` (plus `files-read` for
|
|
99
|
+
context-governed changes).
|
|
100
|
+
- [ ] **`status` is one of**: `complete`, `needs-review`, `blocked` — not
|
|
101
|
+
`done`, `OK`, `pending`, `wip`, or anything else.
|
|
102
|
+
- [ ] **Every `artifacts` item is a `{type, pointer}` mapping** with a
|
|
103
|
+
concrete pointer:
|
|
104
|
+
- GOOD: `{ type: tests-added, pointer: "tests/foo.test.ts::should reject empty body" }`
|
|
105
|
+
- GOOD: `{ type: files-changed, pointer: "src/api/users.ts:45-67" }`
|
|
106
|
+
- GOOD: `{ type: test-output, pointer: "5 passed (last 10 lines: …)" }`
|
|
107
|
+
- BAD: `{ type: tests-added, pointer: verified }`
|
|
108
|
+
- BAD: `{ type: files-changed, pointer: yes }`
|
|
109
|
+
- BAD: `{ type: contract, pointer: OK }`
|
|
110
|
+
Reject any line whose pointer would not let a reviewer click through.
|
|
111
|
+
- [ ] **If `status: blocked`**, `next-action` is ≥ 10 chars, is NOT `none`,
|
|
112
|
+
`investigate further`, `tbd`, or `n/a`, and names the actual next step
|
|
113
|
+
a human can act on.
|
|
114
|
+
- [ ] **Every `files-read` entry**: repo-relative path, no leading `/`, no
|
|
115
|
+
`..`, no `~`. If you read your own change directory only, write
|
|
116
|
+
`- specs/changes/<change-id>/`.
|
|
117
|
+
- [ ] **YAML is parseable**: indentation is consistent (2 spaces), strings
|
|
118
|
+
with special characters (`:`, `#`, leading numbers like `001`) are
|
|
119
|
+
quoted.
|
|
120
|
+
|
|
121
|
+
If any check fails, **fix the YAML before sending your response**. Do not
|
|
122
|
+
ship a known-bad log and rely on the gate to catch it.
|
|
123
|
+
|
|
124
|
+
## Gate enforcement summary
|
|
125
|
+
|
|
126
|
+
`cdd-kit gate` rejects an agent log when any of these are true:
|
|
127
|
+
|
|
128
|
+
1. The file is missing for a tier-required agent (see CONTRACTS for tier matrix).
|
|
129
|
+
2. YAML fails to parse, or top-level is not a mapping.
|
|
130
|
+
3. `status` is missing or has an unknown value.
|
|
131
|
+
4. `status: blocked` without a concrete `next-action`.
|
|
132
|
+
5. `files-read` is missing for a context-governed change, or contains an
|
|
133
|
+
absolute path / `..` segment / forbidden path.
|
|
134
|
+
6. Any `artifacts` item is missing `type` or `pointer`, or the array is empty.
|
|
135
|
+
7. With `--strict`: any `artifacts` pointer that looks like a path but does
|
|
136
|
+
not exist on disk; or any runtime-logged read not declared in `files-read`.
|
|
137
|
+
|
|
138
|
+
## Why this lives in references/
|
|
139
|
+
|
|
140
|
+
The historical mistake was duplicating the protocol inside every agent prompt.
|
|
141
|
+
Sixteen agents × ~30 lines = ~480 lines of identical text loaded on every
|
|
142
|
+
spawn. Moving it here:
|
|
143
|
+
|
|
144
|
+
- Cuts per-agent prompt size by 25–35%.
|
|
145
|
+
- Makes drift between agents impossible (one file to change).
|
|
146
|
+
- Lets gate.ts behavior, schemas, tests, and prompts stay in sync via this
|
|
147
|
+
single doc.
|
|
@@ -24,7 +24,7 @@ def main():
|
|
|
24
24
|
'contracts.md':'contracts.md',
|
|
25
25
|
'test-plan.md':'test-plan.md',
|
|
26
26
|
'ci-gates.md':'ci-gates.md',
|
|
27
|
-
'tasks.
|
|
27
|
+
'tasks.yml':'tasks.yml',
|
|
28
28
|
'qa-report.md':'qa-report.md',
|
|
29
29
|
'regression-report.md':'regression-report.md',
|
|
30
30
|
'archive.md':'archive.md',
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"""Coarse traceability check for a change folder."""
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
import argparse, sys
|
|
5
|
-
REQUIRED=['change-classification.md','test-plan.md','ci-gates.md','tasks.
|
|
5
|
+
REQUIRED=['change-classification.md','test-plan.md','ci-gates.md','tasks.yml']
|
|
6
6
|
def check_change_dir(d):
|
|
7
7
|
"""Check one change directory. Returns list of error strings (empty = pass)."""
|
|
8
8
|
errors=[]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
change-id: feat-001
|
|
2
|
+
agent: backend-engineer
|
|
3
|
+
timestamp: 2026-04-27T14:30:00Z
|
|
4
|
+
status: complete
|
|
5
|
+
files-read:
|
|
6
|
+
- contracts/api/api-contract.md
|
|
7
|
+
- src/api/users.ts
|
|
8
|
+
- specs/changes/feat-001/test-plan.md
|
|
9
|
+
artifacts:
|
|
10
|
+
- { type: files-changed, pointer: "src/api/users.ts:45-67" }
|
|
11
|
+
- { type: tests-added, pointer: "tests/api/users.test.ts::should reject empty body" }
|
|
12
|
+
- { type: contracts-touched, pointer: "contracts/api/api-contract.md#endpoints" }
|
|
13
|
+
- { type: test-output, pointer: "5 passed (vitest run --filter users)" }
|
|
14
|
+
next-action: none
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
- reason: (fill only if yes)
|
|
19
19
|
|
|
20
20
|
## Required Artifacts
|
|
21
|
-
Always required: change-request.md, change-classification.md, test-plan.md, ci-gates.md, tasks.
|
|
21
|
+
Always required: change-request.md, change-classification.md, test-plan.md, ci-gates.md, tasks.yml
|
|
22
22
|
|
|
23
23
|
## Optional Artifacts (default: no — set yes only with explicit reason)
|
|
24
24
|
| artifact | create? | reason |
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
change-id: <change-id>
|
|
2
|
+
status: in-progress
|
|
3
|
+
tier: null
|
|
4
|
+
context-governance: v1
|
|
5
|
+
archive-tasks:
|
|
6
|
+
- "7.1"
|
|
7
|
+
- "7.2"
|
|
8
|
+
depends-on: []
|
|
9
|
+
|
|
10
|
+
tasks:
|
|
11
|
+
# status: pending | done | skipped
|
|
12
|
+
- { id: "1.1", section: Preparation, title: "Confirm classification and required artifacts", status: pending }
|
|
13
|
+
- { id: "1.2", section: Preparation, title: "Confirm contracts to update", status: pending }
|
|
14
|
+
- { id: "1.3", section: Preparation, title: "Confirm CI/CD gate plan", status: pending }
|
|
15
|
+
- { id: "2.1", section: "Contract Updates", title: "API contract", status: pending }
|
|
16
|
+
- { id: "2.2", section: "Contract Updates", title: "CSS/UI contract", status: pending }
|
|
17
|
+
- { id: "2.3", section: "Contract Updates", title: "Env contract", status: pending }
|
|
18
|
+
- { id: "2.4", section: "Contract Updates", title: "Data shape contract", status: pending }
|
|
19
|
+
- { id: "2.5", section: "Contract Updates", title: "Business logic contract", status: pending }
|
|
20
|
+
- { id: "2.6", section: "Contract Updates", title: "CI/CD contract", status: pending }
|
|
21
|
+
- { id: "3.1", section: "Tests First", title: "Unit/contract tests", status: pending }
|
|
22
|
+
- { id: "3.2", section: "Tests First", title: "Integration tests", status: pending }
|
|
23
|
+
- { id: "3.3", section: "Tests First", title: "E2E/resilience tests", status: pending }
|
|
24
|
+
- { id: "3.4", section: "Tests First", title: "Data-boundary/monkey tests", status: pending }
|
|
25
|
+
- { id: "3.5", section: "Tests First", title: "Stress/soak tests if required", status: pending }
|
|
26
|
+
- { id: "4.1", section: Implementation, title: "Backend", status: pending }
|
|
27
|
+
- { id: "4.2", section: Implementation, title: "Frontend", status: pending }
|
|
28
|
+
- { id: "4.3", section: Implementation, title: "Env/deploy", status: pending }
|
|
29
|
+
- { id: "4.4", section: Implementation, title: "CI/CD workflows", status: pending }
|
|
30
|
+
- { id: "5.1", section: Review, title: "UI/UX review", status: pending }
|
|
31
|
+
- { id: "5.2", section: Review, title: "Visual review", status: pending }
|
|
32
|
+
- { id: "5.3", section: Review, title: "Contract review", status: pending }
|
|
33
|
+
- { id: "5.4", section: Review, title: "QA review", status: pending }
|
|
34
|
+
- { id: "6.1", section: Verification, title: "Local gates", status: pending }
|
|
35
|
+
- { id: "6.2", section: Verification, title: "PR required gates", status: pending }
|
|
36
|
+
- { id: "6.3", section: Verification, title: "Informational gates", status: pending }
|
|
37
|
+
- { id: "6.4", section: Verification, title: "Nightly/weekly/manual gates if required", status: pending }
|
|
38
|
+
- { id: "7.1", section: Archive, title: "Archive change", status: pending }
|
|
39
|
+
- { id: "7.2", section: Archive, title: "Promote durable learnings to contracts or CLAUDE.md", status: pending }
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
- reason: (fill only if yes)
|
|
19
19
|
|
|
20
20
|
## Required Artifacts
|
|
21
|
-
Always required: change-request.md, change-classification.md, test-plan.md, ci-gates.md, tasks.
|
|
21
|
+
Always required: change-request.md, change-classification.md, test-plan.md, ci-gates.md, tasks.yml
|
|
22
22
|
|
|
23
23
|
## Optional Artifacts (default: no — set yes only with explicit reason)
|
|
24
24
|
| artifact | create? | reason |
|
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
# Context Manifest
|
|
2
2
|
|
|
3
|
-
This manifest defines the approved context boundaries for agents working on
|
|
3
|
+
This manifest defines the approved context boundaries for agents working on
|
|
4
|
+
this change. The forbidden-paths baseline lives in `.cdd/context-policy.json`
|
|
5
|
+
and is automatically applied by `cdd-kit gate` — do not duplicate it here.
|
|
4
6
|
|
|
5
7
|
## Affected Surfaces
|
|
6
8
|
-
|
|
7
9
|
|
|
8
10
|
## Allowed Paths
|
|
9
11
|
- specs/changes/<change-id>/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
- .claude/worktrees/**
|
|
13
|
-
- .git/**
|
|
14
|
-
- node_modules/**
|
|
15
|
-
- dist/**
|
|
16
|
-
- build/**
|
|
17
|
-
- assets/**
|
|
18
|
-
- specs/archive/**
|
|
19
|
-
- specs/changes/* except specs/changes/<change-id>/
|
|
12
|
+
- specs/context/project-map.md
|
|
13
|
+
- specs/context/contracts-index.md
|
|
20
14
|
|
|
21
15
|
## Required Contracts
|
|
22
16
|
-
|
|
@@ -35,8 +29,8 @@ This manifest defines the approved context boundaries for agents working on this
|
|
|
35
29
|
## Context Expansion Requests
|
|
36
30
|
|
|
37
31
|
<!--
|
|
38
|
-
Agents must request context expansion instead of reading outside their work
|
|
39
|
-
|
|
32
|
+
Agents must request context expansion instead of reading outside their work
|
|
33
|
+
packet. Format example for real requests:
|
|
40
34
|
|
|
41
35
|
- request-id: CER-001
|
|
42
36
|
requested_paths:
|
|
@@ -44,6 +38,7 @@ Use this format only for real requests:
|
|
|
44
38
|
reason: why this file is required
|
|
45
39
|
status: pending
|
|
46
40
|
-->
|
|
41
|
+
-
|
|
47
42
|
|
|
48
43
|
## Approved Expansions
|
|
49
44
|
-
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
change-id: <change-id>
|
|
2
|
+
status: in-progress
|
|
3
|
+
tier: null
|
|
4
|
+
context-governance: v1
|
|
5
|
+
archive-tasks:
|
|
6
|
+
- "7.1"
|
|
7
|
+
- "7.2"
|
|
8
|
+
depends-on: []
|
|
9
|
+
|
|
10
|
+
tasks:
|
|
11
|
+
# status: pending | done | skipped
|
|
12
|
+
- { id: "1.1", section: Preparation, title: "Confirm classification and required artifacts", status: pending }
|
|
13
|
+
- { id: "1.2", section: Preparation, title: "Confirm contracts to update", status: pending }
|
|
14
|
+
- { id: "1.3", section: Preparation, title: "Confirm CI/CD gate plan", status: pending }
|
|
15
|
+
- { id: "2.1", section: "Contract Updates", title: "API contract", status: pending }
|
|
16
|
+
- { id: "2.2", section: "Contract Updates", title: "CSS/UI contract", status: pending }
|
|
17
|
+
- { id: "2.3", section: "Contract Updates", title: "Env contract", status: pending }
|
|
18
|
+
- { id: "2.4", section: "Contract Updates", title: "Data shape contract", status: pending }
|
|
19
|
+
- { id: "2.5", section: "Contract Updates", title: "Business logic contract", status: pending }
|
|
20
|
+
- { id: "2.6", section: "Contract Updates", title: "CI/CD contract", status: pending }
|
|
21
|
+
- { id: "3.1", section: "Tests First", title: "Unit/contract tests", status: pending }
|
|
22
|
+
- { id: "3.2", section: "Tests First", title: "Integration tests", status: pending }
|
|
23
|
+
- { id: "3.3", section: "Tests First", title: "E2E/resilience tests", status: pending }
|
|
24
|
+
- { id: "3.4", section: "Tests First", title: "Data-boundary/monkey tests", status: pending }
|
|
25
|
+
- { id: "3.5", section: "Tests First", title: "Stress/soak tests if required", status: pending }
|
|
26
|
+
- { id: "4.1", section: Implementation, title: "Backend", status: pending }
|
|
27
|
+
- { id: "4.2", section: Implementation, title: "Frontend", status: pending }
|
|
28
|
+
- { id: "4.3", section: Implementation, title: "Env/deploy", status: pending }
|
|
29
|
+
- { id: "4.4", section: Implementation, title: "CI/CD workflows", status: pending }
|
|
30
|
+
- { id: "5.1", section: Review, title: "UI/UX review", status: pending }
|
|
31
|
+
- { id: "5.2", section: Review, title: "Visual review", status: pending }
|
|
32
|
+
- { id: "5.3", section: Review, title: "Contract review", status: pending }
|
|
33
|
+
- { id: "5.4", section: Review, title: "QA review", status: pending }
|
|
34
|
+
- { id: "6.1", section: Verification, title: "Local gates", status: pending }
|
|
35
|
+
- { id: "6.2", section: Verification, title: "PR required gates", status: pending }
|
|
36
|
+
- { id: "6.3", section: Verification, title: "Informational gates", status: pending }
|
|
37
|
+
- { id: "6.4", section: Verification, title: "Nightly/weekly/manual gates if required", status: pending }
|
|
38
|
+
- { id: "7.1", section: Archive, title: "Archive change", status: pending }
|
|
39
|
+
- { id: "7.2", section: Archive, title: "Promote durable learnings to contracts or CLAUDE.md", status: pending }
|