@lifeaitools/rdc-skills 0.25.2 → 0.25.4

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 (61) hide show
  1. package/.claude-plugin/plugin.json +1560 -1560
  2. package/.github/workflows/self-test.yml +34 -34
  3. package/CHANGELOG.md +322 -322
  4. package/MANIFEST.md +224 -224
  5. package/README.md +379 -379
  6. package/RELEASE.md +49 -0
  7. package/commands/build.md +181 -181
  8. package/commands/collab.md +180 -180
  9. package/commands/deploy.md +148 -148
  10. package/commands/fixit.md +150 -150
  11. package/commands/handoff.md +173 -173
  12. package/commands/overnight.md +220 -220
  13. package/commands/plan.md +158 -158
  14. package/commands/preplan.md +131 -131
  15. package/commands/prototype.md +145 -145
  16. package/commands/report.md +99 -99
  17. package/commands/review.md +120 -120
  18. package/commands/status.md +86 -86
  19. package/commands/workitems.md +127 -127
  20. package/git-sha.json +1 -1
  21. package/guides/agent-bootstrap.md +195 -195
  22. package/guides/agents/backend.md +102 -102
  23. package/guides/agents/content.md +94 -94
  24. package/guides/agents/cs2.md +56 -56
  25. package/guides/agents/data.md +86 -86
  26. package/guides/agents/design.md +77 -77
  27. package/guides/agents/frontend.md +91 -91
  28. package/guides/agents/infrastructure.md +81 -81
  29. package/guides/agents/setup.md +272 -272
  30. package/guides/agents/verify.md +119 -119
  31. package/guides/agents/viz.md +106 -106
  32. package/package.json +57 -57
  33. package/scripts/install-rdc-skills.js +1401 -1401
  34. package/scripts/self-test.mjs +1460 -1460
  35. package/scripts/validate-publish-manifests.js +502 -502
  36. package/skills/build/SKILL.md +559 -559
  37. package/skills/channel-formatter/SKILL.md +538 -538
  38. package/skills/collab/SKILL.md +239 -239
  39. package/skills/convert/SKILL.md +167 -167
  40. package/skills/deploy/SKILL.md +541 -541
  41. package/skills/design/SKILL.md +205 -205
  42. package/skills/env/SKILL.md +139 -141
  43. package/skills/fixit/SKILL.md +203 -203
  44. package/skills/handoff/SKILL.md +236 -236
  45. package/skills/housekeeping/SKILL.md +1 -1
  46. package/skills/onramp/SKILL.md +1459 -1459
  47. package/skills/overnight/SKILL.md +251 -251
  48. package/skills/plan/SKILL.md +345 -345
  49. package/skills/preplan/SKILL.md +90 -90
  50. package/skills/prototype/SKILL.md +150 -150
  51. package/skills/regen-media/SKILL.md +94 -94
  52. package/skills/release/SKILL.md +140 -140
  53. package/skills/report/SKILL.md +100 -100
  54. package/skills/review/SKILL.md +151 -151
  55. package/skills/self-test/SKILL.md +108 -108
  56. package/skills/status/SKILL.md +99 -99
  57. package/skills/tests/MATRIX.md +55 -55
  58. package/skills/tests/onramp.test.json +87 -87
  59. package/skills/tests/rdc-regen-media.test.json +29 -29
  60. package/skills/watch/SKILL.md +84 -84
  61. package/skills/workitems/SKILL.md +151 -151
@@ -1,203 +1,203 @@
1
- ---
2
- name: rdc:fixit
3
- description: "Usage `rdc:fixit <description>` — Quick fix under 5 files / 30 min that does not warrant a full plan→build cycle. Creates a minimal work item, makes the change, commits, runs a mandatory code-review pass (pr-review-toolkit:code-reviewer), DELIVERS the change to where it is consumed (publish/deploy/land) and verifies it, then closes. The only sanctioned bypass of rdc:build."
4
- ---
5
-
6
- > **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
7
- > Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
8
- > One checklist upfront, updated in place, shown again at end with a 1-line verdict.
9
-
10
- > If dispatching subagents or running as a subagent: read `{PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md` first (fallback: `{PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md`), then `{PROJECT_ROOT}/.rdc/guides/engineering-behavior.md` (fallback: `{PROJECT_ROOT}/.rdc/guides/engineering-behavior.md`).
11
-
12
- > **Sandbox contract:** This skill honors `RDC_TEST=1` per `guides/agent-bootstrap.md` § RDC_TEST Sandbox Contract. Destructive external calls short-circuit under the flag.
13
-
14
-
15
- # rdc:fixit — Sanctioned Quick Fix
16
-
17
- ## When to Use
18
- - Typo or single-line text correction
19
- - Config value change (env vars, constants, feature flags)
20
- - Emergency hotfix that cannot wait for a full build cycle
21
- - Dependency version bump
22
- - CSS/styling tweak on a single component
23
- - Broken import or export fix
24
- - Single-file logic correction
25
-
26
- ## When NOT to Use — escalate to rdc:build instead
27
- - New feature of any size
28
- - Refactor touching >5 files
29
- - Anything requiring architecture decisions
30
- - Work that will take longer than 30 minutes
31
- - Schema changes or migrations
32
-
33
- ## Arguments
34
- - `rdc:fixit <description>` — fix the described issue
35
-
36
- ## Procedure
37
-
38
- ### 1. Scope check (mandatory — do this before touching any file)
39
-
40
- Will this fix touch more than **5 files** or take more than **30 minutes**?
41
-
42
- - **YES** → Stop. Use `/rdc:build` instead. Explain to the user why.
43
- - **NO** → Continue.
44
-
45
- ### 2. Create a minimal work item (before touching any code)
46
-
47
- ```sql
48
- SELECT insert_work_item(
49
- p_title := 'fixit: <description>',
50
- p_item_type := 'bug',
51
- p_priority := 'urgent',
52
- p_status := 'in_progress',
53
- p_source := 'fixit'
54
- );
55
- ```
56
-
57
- Note the returned `id`.
58
-
59
- ### 3. Write the fixit session marker
60
-
61
- Write to `{USER_HOME}/.claude/fixit.marker`:
62
- ```
63
- <work_item_id>
64
- <ISO timestamp>
65
- <description>
66
- ```
67
-
68
- This signals the Stop hook that fixit is handling its own documentation.
69
-
70
- ### 4. Make the fix
71
-
72
- Do the minimal work. Scope creep rule: if you discover the fix requires more than originally scoped, **stop immediately**:
73
- 1. Close the work item: `update_work_item_status('<id>', 'blocked', '["Escalated — scope exceeded fixit threshold"]')`
74
- 2. Delete the marker file
75
- 3. Tell the user to use `/rdc:build` instead
76
-
77
- Apply `guides/engineering-behavior.md`: state material assumptions in the
78
- implementation report, avoid speculative abstractions, touch only required
79
- files, and verify behavior before moving the work item to `review`.
80
-
81
- ### 5. Commit
82
-
83
- ```bash
84
- git add <specific files only — never git add -A for a fixit>
85
- git commit -m "fix(<scope>): <description>"
86
- if [ "$RDC_TEST" != "1" ]; then
87
- git push origin {development-branch}
88
- else
89
- echo "[RDC_TEST] skipping git push origin {development-branch}"
90
- fi
91
- ```
92
-
93
- ### 5.5 Mandatory code-review gate (before submitting implementation report)
94
-
95
- ⛔ **No fixit closes without a code-review pass.** Even single-file changes go through review.
96
-
97
- Dispatch ONE `pr-review-toolkit:code-reviewer` agent on the fixit commit:
98
-
99
- ```
100
- Agent({
101
- subagent_type: "pr-review-toolkit:code-reviewer",
102
- description: "fixit code review",
103
- prompt: "Review `git show HEAD` on the development branch. Focus on:
104
- bugs, logic errors, security, project-convention adherence (.claude/rules/*).
105
- Confidence-based filtering — high-confidence findings only.
106
- Return CODE_REVIEW_COMPLETE with: { critical_count, high_count, medium_count,
107
- low_count, findings: [{severity, file:line, issue, suggested_fix}] }."
108
- })
109
- ```
110
-
111
- **Severity gate:**
112
- - `critical` or `high` findings → fix in this same fixit session (do not escalate to rdc:build for the fix itself; the original fixit owns the cleanup), re-commit, re-run review until clean
113
- - `medium` or `low` findings → record in `implementation_report.flags`; proceed to close
114
- - Zero findings → proceed to close
115
-
116
- Under `RDC_TEST=1`: echo `[RDC_TEST] skipping code-review dispatch` and proceed.
117
-
118
- ### 5.7 Deliver to done (MANDATORY — a fixit is not done until the change is LIVE)
119
-
120
- ⛔ **"Committed and pushed" is NOT done.** Editing code and walking away is the exact
121
- failure this step exists to prevent. A fixit closes only when the change has reached the
122
- place it is actually consumed, verified with a structural probe.
123
-
124
- Identify the target's delivery mechanism from its registry/manifest/`package.json` and
125
- complete it:
126
-
127
- | Target shape | "Done" = delivered means | How + structural proof |
128
- |---|---|---|
129
- | Published package (npm / PyPI) | new version live on the registry | run the repo's release/publish path (e.g. `npm publish --access public`); verify `npm view <pkg> version` == new version |
130
- | Deployed app (`apps/*`, sites) | change live on the running host | `/rdc:deploy <slug>` (dev) / `promote` (prod); verify HTTP 200 + content probe |
131
- | Shared lib consumed in-repo | landed on the integration branch | `node scripts/land.mjs` (or repo equivalent); verify branch contains the SHA |
132
- | Standalone repo | its own release ritual completed | follow the repo's release script/tag; verify the artifact/tag exists |
133
- | Pure doc / internal-only change, NO downstream consumer | committed + landed | no deploy; this is the ONLY case where commit == done |
134
-
135
- Hard rules for this gate:
136
- - **A version bump obligates a release.** If you bumped `package.json` / `__version__` /
137
- a lockfile version, you MUST publish/deploy it — a bumped-but-unshipped version is an
138
- unfinished fixit, not a done one.
139
- - **Verify with a structural probe**, never an assumption: registry version string, HTTP
140
- status, tag/commit presence.
141
- - **If delivery cannot complete in-session** (needs an OTP/secret you lack, a human
142
- approval, a denied command, or a manual prod promotion): DO NOT close `done`. Set the
143
- work item `blocked` with the exact remaining command + reason, and tell the user the one
144
- step to run (offer it as `! <command>` so it runs in-session). "Blocked on a named
145
- delivery step" is honest; "done" without delivery is the bug we are fixing.
146
-
147
- Under `RDC_TEST=1`: echo `[RDC_TEST] skipping delivery (publish/deploy)` and proceed; the
148
- gate is validated structurally, not executed.
149
-
150
- ### 6. Close and clean up
151
-
152
- Submit implementation report first, move to review, then close as validator.
153
- **Precondition: Step 5.7 delivery is verified.** If delivery is blocked, set status
154
- `blocked` (not `done`) with the remaining step — never mark `done` on an undelivered change:
155
-
156
- ```sql
157
- SELECT submit_implementation_report('<id>'::uuid,
158
- '{"tldr":"<one sentence>","assumptions":[],"deviations":[],"uncertainty":[],"detail":"<what was fixed>","flags":[],"transactional":false,"memory_records":[],"codeflow_post":{"agent_session_id":"<agent-session-id>","summary":"<what changed and why>","files_changed":["<path>"],"verification":["<command/evidence>"],"commit":"<hash optional>"}}'::jsonb
159
- );
160
-
161
- SELECT update_work_item_status('<id>'::uuid, 'review',
162
- '["Fixed via rdc:fixit; ready for validation"]'::jsonb,
163
- '<agent-session-id>',
164
- 'agent'
165
- );
166
-
167
- SELECT update_work_item_status('<id>'::uuid, 'done',
168
- '["Validator verified rdc:fixit report, CodeFlow post, and checklist evidence"]'::jsonb,
169
- '<validator-session-id>',
170
- 'validator'
171
- );
172
- ```
173
-
174
- If the fix touched a transactional flow, API boundary, or package contract, set `"transactional": true` and populate `memory_records` (see `agent-bootstrap.md`), then run:
175
- ```bash
176
- node scripts/work-item-memory.mjs <work-item-id>
177
- # Note: verify script exists first: ls {PROJECT_ROOT}/scripts/work-item-memory.mjs
178
- # If the script is absent, skip this step and note it in the implementation report.
179
- ```
180
-
181
- ```bash
182
- rm {USER_HOME}/.claude/fixit.marker
183
- ```
184
-
185
- ### 7. Confirm to user
186
-
187
- Report: what was fixed, file(s) changed, commit hash. One sentence.
188
-
189
- ## Rules
190
- - Work item created BEFORE any code change — never after
191
- - `git add` specific files only — never `-A` or `.` for a fixit
192
- - Branch: development branch always
193
- - Never run `pnpm build` — not needed for a fixit
194
- - If scope expands mid-fix: stop, escalate to rdc:build, don't finish under fixit
195
- - Marker file must be cleaned up whether fix succeeds or escalates
196
- - **Done = delivered, not committed.** A fixit is `done` only when the change is live where
197
- it is consumed (published / deployed / landed) AND verified structurally. A version bump
198
- obligates a publish. If delivery can't complete in-session, close `blocked` with the named
199
- step — never `done`.
200
-
201
- ## Capture lessons (exit step)
202
-
203
- Before the final verdict line, follow `.rdc/guides/lessons-learned-spec.md` § Capture procedure. If this run taught something non-obvious — a first root-cause theory that turned out wrong, the documented/standard path not working, a missing gate or check that cost a round, or a surprising tool/infra behavior — write one `.rdc/lessons/<YYYY-MM-DD>-fixit-<short-slug>.md` per lesson using the schema in that spec. Set `scope` (`simple` | `architectural`) and `status` (`open`, or `applied` if you shipped the fix in this same run, with the commit linked). Commit the lesson file(s) on `develop` alongside the run's other commits, and note "N lessons captured" in your verdict/summary. A run that taught nothing writes nothing — absence is the default.
1
+ ---
2
+ name: rdc:fixit
3
+ description: "Usage `rdc:fixit <description>` — Quick fix under 5 files / 30 min that does not warrant a full plan→build cycle. Creates a minimal work item, makes the change, commits, runs a mandatory code-review pass (pr-review-toolkit:code-reviewer), DELIVERS the change to where it is consumed (publish/deploy/land) and verifies it, then closes. The only sanctioned bypass of rdc:build."
4
+ ---
5
+
6
+ > **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
7
+ > Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
8
+ > One checklist upfront, updated in place, shown again at end with a 1-line verdict.
9
+
10
+ > If dispatching subagents or running as a subagent: read `{PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md` first (fallback: `{PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md`), then `{PROJECT_ROOT}/.rdc/guides/engineering-behavior.md` (fallback: `{PROJECT_ROOT}/.rdc/guides/engineering-behavior.md`).
11
+
12
+ > **Sandbox contract:** This skill honors `RDC_TEST=1` per `guides/agent-bootstrap.md` § RDC_TEST Sandbox Contract. Destructive external calls short-circuit under the flag.
13
+
14
+
15
+ # rdc:fixit — Sanctioned Quick Fix
16
+
17
+ ## When to Use
18
+ - Typo or single-line text correction
19
+ - Config value change (env vars, constants, feature flags)
20
+ - Emergency hotfix that cannot wait for a full build cycle
21
+ - Dependency version bump
22
+ - CSS/styling tweak on a single component
23
+ - Broken import or export fix
24
+ - Single-file logic correction
25
+
26
+ ## When NOT to Use — escalate to rdc:build instead
27
+ - New feature of any size
28
+ - Refactor touching >5 files
29
+ - Anything requiring architecture decisions
30
+ - Work that will take longer than 30 minutes
31
+ - Schema changes or migrations
32
+
33
+ ## Arguments
34
+ - `rdc:fixit <description>` — fix the described issue
35
+
36
+ ## Procedure
37
+
38
+ ### 1. Scope check (mandatory — do this before touching any file)
39
+
40
+ Will this fix touch more than **5 files** or take more than **30 minutes**?
41
+
42
+ - **YES** → Stop. Use `/rdc:build` instead. Explain to the user why.
43
+ - **NO** → Continue.
44
+
45
+ ### 2. Create a minimal work item (before touching any code)
46
+
47
+ ```sql
48
+ SELECT insert_work_item(
49
+ p_title := 'fixit: <description>',
50
+ p_item_type := 'bug',
51
+ p_priority := 'urgent',
52
+ p_status := 'in_progress',
53
+ p_source := 'fixit'
54
+ );
55
+ ```
56
+
57
+ Note the returned `id`.
58
+
59
+ ### 3. Write the fixit session marker
60
+
61
+ Write to `{USER_HOME}/.claude/fixit.marker`:
62
+ ```
63
+ <work_item_id>
64
+ <ISO timestamp>
65
+ <description>
66
+ ```
67
+
68
+ This signals the Stop hook that fixit is handling its own documentation.
69
+
70
+ ### 4. Make the fix
71
+
72
+ Do the minimal work. Scope creep rule: if you discover the fix requires more than originally scoped, **stop immediately**:
73
+ 1. Close the work item: `update_work_item_status('<id>', 'blocked', '["Escalated — scope exceeded fixit threshold"]')`
74
+ 2. Delete the marker file
75
+ 3. Tell the user to use `/rdc:build` instead
76
+
77
+ Apply `guides/engineering-behavior.md`: state material assumptions in the
78
+ implementation report, avoid speculative abstractions, touch only required
79
+ files, and verify behavior before moving the work item to `review`.
80
+
81
+ ### 5. Commit
82
+
83
+ ```bash
84
+ git add <specific files only — never git add -A for a fixit>
85
+ git commit -m "fix(<scope>): <description>"
86
+ if [ "$RDC_TEST" != "1" ]; then
87
+ git push origin {development-branch}
88
+ else
89
+ echo "[RDC_TEST] skipping git push origin {development-branch}"
90
+ fi
91
+ ```
92
+
93
+ ### 5.5 Mandatory code-review gate (before submitting implementation report)
94
+
95
+ ⛔ **No fixit closes without a code-review pass.** Even single-file changes go through review.
96
+
97
+ Dispatch ONE `pr-review-toolkit:code-reviewer` agent on the fixit commit:
98
+
99
+ ```
100
+ Agent({
101
+ subagent_type: "pr-review-toolkit:code-reviewer",
102
+ description: "fixit code review",
103
+ prompt: "Review `git show HEAD` on the development branch. Focus on:
104
+ bugs, logic errors, security, project-convention adherence (.claude/rules/*).
105
+ Confidence-based filtering — high-confidence findings only.
106
+ Return CODE_REVIEW_COMPLETE with: { critical_count, high_count, medium_count,
107
+ low_count, findings: [{severity, file:line, issue, suggested_fix}] }."
108
+ })
109
+ ```
110
+
111
+ **Severity gate:**
112
+ - `critical` or `high` findings → fix in this same fixit session (do not escalate to rdc:build for the fix itself; the original fixit owns the cleanup), re-commit, re-run review until clean
113
+ - `medium` or `low` findings → record in `implementation_report.flags`; proceed to close
114
+ - Zero findings → proceed to close
115
+
116
+ Under `RDC_TEST=1`: echo `[RDC_TEST] skipping code-review dispatch` and proceed.
117
+
118
+ ### 5.7 Deliver to done (MANDATORY — a fixit is not done until the change is LIVE)
119
+
120
+ ⛔ **"Committed and pushed" is NOT done.** Editing code and walking away is the exact
121
+ failure this step exists to prevent. A fixit closes only when the change has reached the
122
+ place it is actually consumed, verified with a structural probe.
123
+
124
+ Identify the target's delivery mechanism from its registry/manifest/`package.json` and
125
+ complete it:
126
+
127
+ | Target shape | "Done" = delivered means | How + structural proof |
128
+ |---|---|---|
129
+ | Published package (npm / PyPI) | new version live on the registry | run the repo's release/publish path (e.g. `npm publish --access public`); verify `npm view <pkg> version` == new version |
130
+ | Deployed app (`apps/*`, sites) | change live on the running host | `/rdc:deploy <slug>` (dev) / `promote` (prod); verify HTTP 200 + content probe |
131
+ | Shared lib consumed in-repo | landed on the integration branch | `node scripts/land.mjs` (or repo equivalent); verify branch contains the SHA |
132
+ | Standalone repo | its own release ritual completed | follow the repo's release script/tag; verify the artifact/tag exists |
133
+ | Pure doc / internal-only change, NO downstream consumer | committed + landed | no deploy; this is the ONLY case where commit == done |
134
+
135
+ Hard rules for this gate:
136
+ - **A version bump obligates a release.** If you bumped `package.json` / `__version__` /
137
+ a lockfile version, you MUST publish/deploy it — a bumped-but-unshipped version is an
138
+ unfinished fixit, not a done one.
139
+ - **Verify with a structural probe**, never an assumption: registry version string, HTTP
140
+ status, tag/commit presence.
141
+ - **If delivery cannot complete in-session** (needs an OTP/secret you lack, a human
142
+ approval, a denied command, or a manual prod promotion): DO NOT close `done`. Set the
143
+ work item `blocked` with the exact remaining command + reason, and tell the user the one
144
+ step to run (offer it as `! <command>` so it runs in-session). "Blocked on a named
145
+ delivery step" is honest; "done" without delivery is the bug we are fixing.
146
+
147
+ Under `RDC_TEST=1`: echo `[RDC_TEST] skipping delivery (publish/deploy)` and proceed; the
148
+ gate is validated structurally, not executed.
149
+
150
+ ### 6. Close and clean up
151
+
152
+ Submit implementation report first, move to review, then close as validator.
153
+ **Precondition: Step 5.7 delivery is verified.** If delivery is blocked, set status
154
+ `blocked` (not `done`) with the remaining step — never mark `done` on an undelivered change:
155
+
156
+ ```sql
157
+ SELECT submit_implementation_report('<id>'::uuid,
158
+ '{"tldr":"<one sentence>","assumptions":[],"deviations":[],"uncertainty":[],"detail":"<what was fixed>","flags":[],"transactional":false,"memory_records":[],"codeflow_post":{"agent_session_id":"<agent-session-id>","summary":"<what changed and why>","files_changed":["<path>"],"verification":["<command/evidence>"],"commit":"<hash optional>"}}'::jsonb
159
+ );
160
+
161
+ SELECT update_work_item_status('<id>'::uuid, 'review',
162
+ '["Fixed via rdc:fixit; ready for validation"]'::jsonb,
163
+ '<agent-session-id>',
164
+ 'agent'
165
+ );
166
+
167
+ SELECT update_work_item_status('<id>'::uuid, 'done',
168
+ '["Validator verified rdc:fixit report, CodeFlow post, and checklist evidence"]'::jsonb,
169
+ '<validator-session-id>',
170
+ 'validator'
171
+ );
172
+ ```
173
+
174
+ If the fix touched a transactional flow, API boundary, or package contract, set `"transactional": true` and populate `memory_records` (see `agent-bootstrap.md`), then run:
175
+ ```bash
176
+ node scripts/work-item-memory.mjs <work-item-id>
177
+ # Note: verify script exists first: ls {PROJECT_ROOT}/scripts/work-item-memory.mjs
178
+ # If the script is absent, skip this step and note it in the implementation report.
179
+ ```
180
+
181
+ ```bash
182
+ rm {USER_HOME}/.claude/fixit.marker
183
+ ```
184
+
185
+ ### 7. Confirm to user
186
+
187
+ Report: what was fixed, file(s) changed, commit hash. One sentence.
188
+
189
+ ## Rules
190
+ - Work item created BEFORE any code change — never after
191
+ - `git add` specific files only — never `-A` or `.` for a fixit
192
+ - Branch: development branch always
193
+ - Never run `pnpm build` — not needed for a fixit
194
+ - If scope expands mid-fix: stop, escalate to rdc:build, don't finish under fixit
195
+ - Marker file must be cleaned up whether fix succeeds or escalates
196
+ - **Done = delivered, not committed.** A fixit is `done` only when the change is live where
197
+ it is consumed (published / deployed / landed) AND verified structurally. A version bump
198
+ obligates a publish. If delivery can't complete in-session, close `blocked` with the named
199
+ step — never `done`.
200
+
201
+ ## Capture lessons (exit step)
202
+
203
+ Before the final verdict line, follow `.rdc/guides/lessons-learned-spec.md` § Capture procedure. If this run taught something non-obvious — a first root-cause theory that turned out wrong, the documented/standard path not working, a missing gate or check that cost a round, or a surprising tool/infra behavior — write one `.rdc/lessons/<YYYY-MM-DD>-fixit-<short-slug>.md` per lesson using the schema in that spec. Set `scope` (`simple` | `architectural`) and `status` (`open`, or `applied` if you shipped the fix in this same run, with the commit linked). Commit the lesson file(s) on `develop` alongside the run's other commits, and note "N lessons captured" in your verdict/summary. A run that taught nothing writes nothing — absence is the default.