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,72 +1,63 @@
1
- # Agent Log Protocol (YAML)
1
+ # Agent Log Protocol (Optional YAML)
2
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.
3
+ Agent logs are optional trace artifacts for debugging, resume summaries, and
4
+ handoff notes. They are not required for `cdd-kit gate`, and agents should not
5
+ spend useful development time reconstructing every file they read.
8
6
 
9
- ## Output target
7
+ ## Output Target
10
8
 
11
- Each agent writes (or has main Claude write) one file per run:
9
+ If an agent emits a log, write one YAML file per run:
12
10
 
13
- ```
11
+ ```text
14
12
  specs/changes/<change-id>/agent-log/<agent-name>.yml
15
13
  ```
16
14
 
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
15
+ If the same agent runs more than once for a change, overwrite the file. The
16
+ latest run is the only useful trace.
21
17
 
22
- The file is pure YAML (no markdown wrapping, no checklist).
18
+ ## Minimal Structure
23
19
 
24
20
  ```yaml
25
21
  change-id: <id>
26
22
  agent: <agent-name>
27
23
  timestamp: "<ISO 8601 date-time, 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>
24
+ status: complete
32
25
  artifacts:
33
26
  - { type: <evidence-type>, pointer: <concrete pointer> }
34
- - { type: <evidence-type>, pointer: <concrete pointer> }
35
- next-action: <one line, or "none">
27
+ next-action: none
36
28
  notes: <optional free-form>
37
29
  ```
38
30
 
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 date-time string; quote it to avoid YAML timestamp coercion in non-cdd tools. UTC `Z` is preferred; numeric offsets such as `+08:00` are accepted. |
46
- | `status` | yes | canonical values are `complete` \| `needs-review` \| `blocked`; `done` and `approved` are accepted by gate as compatibility aliases for `complete` |
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:
31
+ Optional fields:
57
32
 
58
33
  ```yaml
59
34
  files-read:
60
- - specs/changes/<change-id>/
35
+ - <repo-relative path>
36
+ indexes-used:
37
+ - .cdd/code-map.yml
38
+ index-queries:
39
+ - cdd-kit index query "AuthService"
61
40
  ```
62
41
 
63
- If `cdd-kit gate` reports `read unauthorized path`, do not delete that
64
- `files-read` entry to silence the gate. If the read was legitimate work scope,
65
- add the repo-relative path to `context-manifest.md` under `## Allowed Paths` or
66
- approve a Context Expansion Request. `files-read` is the audit trail; the
67
- manifest is the authorization boundary.
42
+ Use optional fields only when they are cheap and accurate. Do not add noisy
43
+ paperwork just to satisfy a gate; the gate does not inspect these logs.
68
44
 
69
- #### `artifacts`
45
+ ## Field Rules
46
+
47
+ | field | required | rule |
48
+ |---|---|---|
49
+ | `change-id` | yes | should equal the parent change directory name |
50
+ | `agent` | yes | canonical agent name, matching the agent filename |
51
+ | `timestamp` | yes | ISO 8601 date-time string; quote it to avoid YAML timestamp coercion |
52
+ | `status` | yes | `complete` \| `needs-review` \| `blocked` |
53
+ | `artifacts` | yes | concise array of `{type, pointer}` objects |
54
+ | `next-action` | yes | when `status: blocked`, name the concrete next step |
55
+ | `files-read` | no | optional repo-relative read trace |
56
+ | `indexes-used` | no | optional repo-relative index artifact paths used to plan reads |
57
+ | `index-queries` | no | optional command/query strings used for project intelligence |
58
+ | `notes` | no | optional |
59
+
60
+ ## artifacts
70
61
 
71
62
  Concrete pointers only. Allowed forms:
72
63
 
@@ -75,123 +66,43 @@ Concrete pointers only. Allowed forms:
75
66
  - `cdd-kit gate <id>: 0 errors`
76
67
  - `contracts/api/api-contract.md#endpoints`
77
68
 
78
- Gate path-existence rule: unless gate is run with `--lax`, any pointer whose
79
- text before the first `:` contains `/` is treated as a repo-relative file path
80
- and that file must exist. This makes path-like pointers useful, but it also
81
- means:
69
+ Pointer style still matters because humans and future tools may parse these
70
+ values. When the text before the first `:` contains `/`, treat it as one
71
+ repo-relative file path:
82
72
 
83
73
  - One pointer names one file only. Use separate `artifacts` items for multiple
84
74
  files.
85
75
  - Do not attach parenthetical notes to a file path, e.g. use
86
76
  `src/api/users.ts:45-67`, not `src/api/users.ts (updated):45-67`.
87
77
  - Do not start a pointer with slash-containing prose labels such as `I/O:` or
88
- `WARNING/OVERDUE:`; gate will try to validate `I/O` or `WARNING/OVERDUE` as a
89
- path. Write those labels in `notes` or after a non-path command/result
90
- pointer.
91
- - `n/a (<reason>)` is exempt from path validation and is allowed for genuinely
92
- inapplicable required artifact types.
93
-
94
- Never `verified`, `OK`, `done`, or unscoped prose.
95
-
96
- #### `next-action`
97
-
98
- When `status: blocked`, this must be ≥ 10 chars, must not be `none`, `tbd`,
99
- `investigate further`, or `n/a`, and must name the actual next step a human
100
- can act on. When `status: complete`, `none` is acceptable.
101
-
102
- #### `status`
103
-
104
- Use `status: complete` for a finished agent-log. `tasks.yml` task entries use
105
- `status: done`, and review language may say "approved", but agent-log
106
- completion is canonically `complete`. `cdd-kit gate` accepts `done` and
107
- `approved` as compatibility aliases so these common mix-ups do not block
108
- delivery.
109
-
110
- ## Per-agent additional artifact requirements
111
-
112
- Each agent prompt lists its own `### Required artifacts for this agent`. The
113
- gate enforces the declared artifact `type` values when the corresponding agent
114
- prompt file is installed in `.claude/agents/` or `~/.claude/agents/`. This keeps
115
- agent prompts, evidence logs, and gate behavior aligned without duplicating the
116
- full protocol in every prompt.
117
-
118
- If you add a required artifact type in an agent prompt, also update tests that
119
- exercise `cdd-kit gate` for that agent. Agents may emit
120
- `pointer: "n/a (<reason>)"` when a declared type is genuinely inapplicable; the
121
- type must still be present so reviewers can tell that the omission was
122
- intentional.
123
-
124
- ## Self-validation before submitting your response
125
-
126
- **Every agent MUST self-validate its draft agent-log YAML before finishing.**
127
- A malformed log forces `cdd-kit gate` to fail, which forces the skill to
128
- re-invoke you, which costs the user another full agent round. Self-lint is
129
- ~5 seconds; a re-run is minutes and dollars.
130
-
131
- Before sending your final response, re-read the YAML you intend to write and
132
- verify each item:
133
-
134
- - [ ] **All required keys exist**: `change-id`, `agent`, `timestamp`,
135
- `status`, `artifacts`, `next-action` (plus `files-read` for
136
- context-governed changes).
137
- - [ ] **`timestamp` is quoted** and uses ISO 8601 date-time form. Prefer
138
- UTC `Z`, e.g. `timestamp: "2026-04-27T14:30:00Z"`. Numeric offsets
139
- such as `timestamp: "2026-05-05T00:00:00+08:00"` are valid.
140
- - [ ] **`status` is one of**: `complete`, `needs-review`, `blocked`.
141
- Prefer `complete` for finished logs; `done` and `approved` are accepted
142
- only as compatibility aliases. Do not use `OK`, `pending`, `wip`, or
143
- anything else.
144
- - [ ] **Every `artifacts` item is a `{type, pointer}` mapping** with a
145
- concrete pointer:
146
- - GOOD: `{ type: tests-added, pointer: "tests/foo.test.ts::should reject empty body" }`
147
- - GOOD: `{ type: files-changed, pointer: "src/api/users.ts:45-67" }`
148
- - GOOD: `{ type: test-output, pointer: "5 passed (last 10 lines: …)" }`
149
- - BAD: `{ type: tests-added, pointer: verified }`
150
- - BAD: `{ type: files-changed, pointer: yes }`
151
- - BAD: `{ type: contract, pointer: OK }`
152
- - BAD: `{ type: files-changed, pointer: "src/api/users.ts (updated):45-67" }`
153
- - BAD: `{ type: test-output, pointer: "I/O: warning reproduced" }`
154
- - BAD: `{ type: test-output, pointer: "WARNING/OVERDUE: manual follow-up" }`
155
- Reject any line whose pointer would not let a reviewer click through.
156
- If the text before the first `:` contains `/`, confirm it is exactly one
157
- existing repo-relative file path with no parenthetical note.
158
- - [ ] **If `status: blocked`**, `next-action` is ≥ 10 chars, is NOT `none`,
159
- `investigate further`, `tbd`, or `n/a`, and names the actual next step
160
- a human can act on.
161
- - [ ] **Every `files-read` entry**: repo-relative path, no leading `/`, no
162
- `..`, no `~`. If you read your own change directory only, write
163
- `- specs/changes/<change-id>/`.
164
- - [ ] **YAML is parseable**: indentation is consistent (2 spaces), strings
165
- with special characters (`:`, `#`, leading numbers like `001`) are
166
- quoted.
167
-
168
- If any check fails, **fix the YAML before sending your response**. Do not
169
- ship a known-bad log and rely on the gate to catch it.
170
-
171
- ## Gate enforcement summary
172
-
173
- `cdd-kit gate` rejects an agent log when any of these are true:
174
-
175
- 1. The file is missing for a tier-required agent (see CONTRACTS for tier matrix).
176
- 2. YAML fails to parse, or top-level is not a mapping.
177
- 3. `status` is missing or has an unknown value.
178
- 4. `status: blocked` without a concrete `next-action`.
179
- 5. `files-read` is missing for a context-governed change, or contains an
180
- absolute path / `..` segment / forbidden path / path outside manifest
181
- `Allowed Paths` and `Approved Expansions`.
182
- 6. Any `artifacts` item is missing `type` or `pointer`, or the array is empty.
183
- 7. A required per-agent artifact `type` declared in the agent prompt is missing.
184
- 8. Unless gate is run with `--lax`: any `artifacts` pointer whose text before
185
- the first `:` contains `/` but does not exist on disk; or any
186
- runtime-logged read not declared in `files-read`.
187
-
188
- ## Why this lives in references/
78
+ `WARNING/OVERDUE:`. Write those labels in `notes` or after a non-path
79
+ command/result pointer.
80
+ - `n/a (<reason>)` is allowed for genuinely inapplicable artifact types.
189
81
 
190
- The historical mistake was duplicating the protocol inside every agent prompt.
191
- Sixteen agents × ~30 lines = ~480 lines of identical text loaded on every
192
- spawn. Moving it here:
82
+ Never use `verified`, `OK`, `done`, or unscoped prose as evidence pointers.
83
+
84
+ ## next-action
193
85
 
194
- - Cuts per-agent prompt size by 25–35%.
195
- - Makes drift between agents impossible (one file to change).
196
- - Lets gate.ts behavior, schemas, tests, and prompts stay in sync via this
197
- single doc.
86
+ When `status: blocked`, this must be concrete and must not be `none`, `tbd`,
87
+ `investigate further`, `unknown`, `todo`, or `n/a`. When `status: complete`,
88
+ `none` is acceptable.
89
+
90
+ ## Self-Validation
91
+
92
+ If you choose to emit an agent log, self-validate it before finishing:
93
+
94
+ - Required keys exist: `change-id`, `agent`, `timestamp`, `status`,
95
+ `artifacts`, `next-action`.
96
+ - `timestamp` is quoted and uses ISO 8601 date-time form.
97
+ - `status` is one of `complete`, `needs-review`, `blocked`.
98
+ - Every `artifacts` item is a `{type, pointer}` mapping with a concrete pointer.
99
+ - If `status: blocked`, `next-action` names the actual next step.
100
+ - Optional `files-read` entries are repo-relative, with no leading `/`, no
101
+ `..`, and no `~`.
102
+ - YAML is parseable with consistent two-space indentation.
103
+
104
+ ## Why This Lives In References
105
+
106
+ The historical mistake was duplicating the protocol inside every agent prompt.
107
+ Moving it here cuts prompt size and keeps optional traces consistent without
108
+ turning them into required process paperwork.
@@ -1,53 +1,75 @@
1
1
  # Code Map Protocol
2
2
 
3
- `.cdd/code-map.yml` is a deterministic structural index of every source
4
- file in the repo (`.py`, `.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, `.tsx`,
5
- `.vue`). Generated by `cdd-kit code-map`, committed to git, refreshed
6
- automatically when `cdd-kit init --hooks` is installed. `cdd-kit gate`
7
- hard-fails when any source file is newer than the map.
3
+ `.cdd/code-map.yml` is a deterministic structural index of every source file
4
+ in the repo (`.py`, `.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, `.tsx`, `.vue`).
5
+ Generated by `cdd-kit code-map`, committed to git, refreshed automatically
6
+ when `cdd-kit init --hooks` is installed. `cdd-kit gate` does not enforce
7
+ index hygiene; use `cdd-kit code-map --check`, `cdd-kit doctor --fix`, or the
8
+ auto-refreshing `cdd-kit index ...` commands for that job.
8
9
 
9
- ## Why agents must read it FIRST
10
+ ## Preferred workflow: query before reading
11
+
12
+ Before reading source, run a targeted query:
13
+
14
+ ```bash
15
+ cdd-kit index query "AuthService"
16
+ cdd-kit index query "users.ts" --limit 5
17
+ cdd-kit index impact "src/services/auth.ts"
18
+ ```
19
+
20
+ `cdd-kit index query` searches file paths, imports, constants, classes,
21
+ methods, functions, interfaces, types, enums, and enum members. It also
22
+ auto-regenerates `.cdd/code-map.yml` when the map is missing or stale, then
23
+ prints only the candidate files and line ranges an agent should inspect first.
24
+
25
+ Before editing a source file, run `cdd-kit index impact "<path-or-symbol>"`.
26
+ It reports indexed local imports and direct dependents, so the agent can inspect
27
+ the target plus likely affected callers/callees before changing behavior.
10
28
 
11
29
  Agents have no built-in way to know a file's line count before reading it.
12
- Reading a 1300-line file when you only need lines 200250 wastes 80%+
13
- of the token budget. The code map is the size oracle: it tells you how
14
- big a file is and exactly which lines hold the symbol you need.
30
+ Reading a 1300-line file when you only need lines 200-250 wastes most of the
31
+ token budget. The code map is the size oracle: it tells you how big a file is
32
+ and exactly which lines hold the symbol you need.
15
33
 
16
34
  ## The 300-line rule
17
35
 
18
36
  Before reading any source file:
19
37
 
20
- 1. `Read .cdd/code-map.yml` once at the start of your task (cache it for
21
- the rest of your session).
22
- 2. Find the file's entry. The first line is `<path>: # N lines`.
23
- 3. If `N <= 300`: do a normal full `Read <path>`.
24
- 4. If `N > 300`: locate the class / method / function in the entry's
25
- `classes:` / `functions:` block (or, for `.ts`/`.tsx`, the
26
- `interfaces:` / `types:` / `enums:` blocks); its `lines: A-B`
27
- field is the exact range. Use `Read <path> offset:A limit:(B-A+1)`.
28
- 5. To understand a file's surface area without reading code, the
29
- `imports:` / `constants:` / `interfaces:` / `types:` sections are
30
- usually sufficient.
38
+ 1. Prefer `cdd-kit index query "<symbol-or-file>"` to get candidate paths and
39
+ line ranges.
40
+ 2. Before editing a chosen source file, run
41
+ `cdd-kit index impact "<path-or-symbol>"` to identify local imports and
42
+ dependents worth inspecting.
43
+ 3. If you cannot run commands, `Read .cdd/code-map.yml` once at the start of
44
+ your task and cache it for the rest of your session.
45
+ 4. Find the file's entry. The first line is `<path>: # N lines`.
46
+ 5. If `N <= 300`: do a normal full `Read <path>`.
47
+ 6. If `N > 300`: locate the class / method / function in the entry's
48
+ `classes:` / `functions:` block (or, for `.ts`/`.tsx`, the `interfaces:` /
49
+ `types:` / `enums:` blocks); its `lines: A-B` field is the exact range. Use
50
+ `Read <path> offset:A limit:(B-A+1)`.
51
+ 7. To understand a file's surface area without reading code, the `imports:` /
52
+ `constants:` / `interfaces:` / `types:` sections are usually sufficient.
31
53
 
32
54
  ## Fallback when the map is missing
33
55
 
34
- If `.cdd/code-map.yml` does not exist, do NOT proceed by reading whole
35
- files. Instead, write an agent-log entry with `status: needs-review`
36
- and `next-action: "regenerate code-map (run \`cdd-kit code-map\`)"`.
37
- The user must regenerate the map before you continue. This forces
38
- attention to missing infrastructure rather than burning tokens
39
- silently.
56
+ If you can run shell commands, use `cdd-kit index query "<term>"` or
57
+ `cdd-kit index impact "<path-or-symbol>"`; both refresh the map automatically
58
+ before querying. If you cannot run commands and `.cdd/code-map.yml` does not
59
+ exist, avoid broad source reads and ask the harness/user to regenerate the map.
40
60
 
41
61
  ## Fallback when the map is stale
42
62
 
43
- If `cdd-kit gate` reports `code-map stale`, the map is out of date.
44
- Same protocol as missing: emit `needs-review`, ask for a regen.
63
+ If you can run shell commands, use `cdd-kit index query "<term>"` or
64
+ `cdd-kit index impact "<path-or-symbol>"`; both refresh stale maps
65
+ automatically. If you cannot run commands and the map is stale, use the same
66
+ protocol as missing: avoid broad source reads and ask for a regen.
45
67
 
46
68
  ## What the map does NOT contain
47
69
 
48
- - Function bodies, parameter types, JSDoc, TS generic constraints read
49
- the source for these using offset/limit.
50
- - Vue `<script lang="ts">` blocks fall back to a full `Read` for now.
70
+ - Function bodies, parameter types, JSDoc, TS generic constraints; read the
71
+ source for these using offset/limit.
72
+ - Vue `<script lang="ts">` blocks; fall back to a full `Read` for now.
51
73
  - Anything inside `node_modules/`, `dist/`, `build/`, `.venv/`, `__pycache__/`.
52
74
 
53
75
  ## Customising what gets indexed
@@ -56,7 +78,7 @@ Optional file: `.cdd/code-map-config.yml`
56
78
 
57
79
  ```yaml
58
80
  # Both keys optional. When present, each REPLACES (not merges) the built-in
59
- # default copy the built-in list and edit it for partial overrides.
81
+ # default; copy the built-in list and edit it for partial overrides.
60
82
  include:
61
83
  - "**/*.py"
62
84
  - "**/*.ts"
@@ -102,6 +124,6 @@ src/types/index.ts: # 625 lines
102
124
  members: [Pending, Active, Done]
103
125
  ```
104
126
 
105
- `async ` prefix on a function/method name indicates `async def` (Python)
106
- or `async function` (JS/TS). `# local` annotation on an interface/type/enum
107
- means it is NOT exported.
127
+ `async ` prefix on a function/method name indicates `async def` (Python) or
128
+ `async function` (JS/TS). `# local` annotation on an interface/type/enum means
129
+ it is NOT exported.
@@ -3,9 +3,15 @@ agent: backend-engineer
3
3
  timestamp: "2026-04-27T14:30:00Z"
4
4
  status: complete
5
5
  files-read:
6
+ - .cdd/code-map.yml
6
7
  - contracts/api/api-contract.md
7
8
  - src/api/users.ts
8
9
  - specs/changes/feat-001/test-plan.md
10
+ indexes-used:
11
+ - .cdd/code-map.yml
12
+ index-queries:
13
+ - cdd-kit index query "users.ts"
14
+ - cdd-kit index impact "src/api/users.ts"
9
15
  artifacts:
10
16
  - { type: files-changed, pointer: "src/api/users.ts:45-67" }
11
17
  - { type: tests-added, pointer: "tests/api/users.test.ts::should reject empty body" }
@@ -69,7 +69,7 @@ Always required: change-request.md, change-classification.md, test-plan.md, ci-g
69
69
  ## Context Manifest Draft
70
70
  <!-- Classifier fills this section. In /cdd-new Step 2.3, Claude copies it verbatim into
71
71
  specs/changes/<change-id>/context-manifest.md, replacing the scaffold.
72
- All paths must be repo-relative. Gate enforces Allowed Paths against agent files-read logs. -->
72
+ All paths must be repo-relative. Use cdd-kit context check before invoking agents. -->
73
73
 
74
74
  ### Affected Surfaces
75
75
  -
@@ -77,7 +77,7 @@ Always required: change-request.md, change-classification.md, test-plan.md, ci-g
77
77
  ### Allowed Paths
78
78
  <!-- Union of ALL paths any agent will read. Add change-specific paths below the defaults.
79
79
  Include component/store/view files for frontend work and CI contracts/workflows for CI work
80
- when those files are legitimate work scope. Gate compares agent-log files-read against this list. -->
80
+ when those files are legitimate work scope. -->
81
81
  - specs/changes/<change-id>/
82
82
  - specs/context/project-map.md
83
83
  - specs/context/contracts-index.md