@lifeaitools/rdc-skills 0.24.38 → 0.24.41

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 (196) hide show
  1. package/.claude/settings.json +15 -15
  2. package/.claude-plugin/marketplace.json +21 -21
  3. package/.claude-plugin/plugin.json +1371 -1371
  4. package/.github/workflows/publish.yml +34 -34
  5. package/.github/workflows/self-test.yml +58 -58
  6. package/CHANGELOG.md +310 -310
  7. package/LICENSE +21 -21
  8. package/MANIFEST.md +221 -221
  9. package/README.md +376 -375
  10. package/README.sandbox.md +3 -3
  11. package/RELEASE.md +42 -0
  12. package/assets/watcher/viewer.html +164 -164
  13. package/bin/rdc-skills-mcp.mjs +316 -316
  14. package/commands/build.md +183 -183
  15. package/commands/collab.md +180 -180
  16. package/commands/deploy.md +152 -152
  17. package/commands/design.md +31 -31
  18. package/commands/edit.md +28 -28
  19. package/commands/fixit.md +124 -124
  20. package/commands/handoff.md +173 -173
  21. package/commands/help.md +95 -95
  22. package/commands/overnight.md +220 -220
  23. package/commands/plan.md +158 -158
  24. package/commands/preplan.md +131 -131
  25. package/commands/prototype.md +145 -145
  26. package/commands/release.md +49 -49
  27. package/commands/report.md +99 -99
  28. package/commands/review.md +120 -120
  29. package/commands/self-test.md +113 -113
  30. package/commands/status.md +86 -86
  31. package/commands/watch.md +98 -98
  32. package/commands/workitems.md +137 -137
  33. package/git-sha.json +1 -1
  34. package/guides/agent-bootstrap.md +295 -295
  35. package/guides/agents/backend.md +104 -104
  36. package/guides/agents/content.md +94 -94
  37. package/guides/agents/cs2.md +56 -56
  38. package/guides/agents/data.md +87 -87
  39. package/guides/agents/design.md +77 -77
  40. package/guides/agents/frontend.md +92 -92
  41. package/guides/agents/infrastructure.md +81 -81
  42. package/guides/agents/setup.md +281 -281
  43. package/guides/agents/verify.md +151 -151
  44. package/guides/agents/viz.md +106 -106
  45. package/guides/backend.md +146 -146
  46. package/guides/content.md +147 -147
  47. package/guides/cs2.md +190 -190
  48. package/guides/data.md +123 -123
  49. package/guides/design.md +116 -116
  50. package/guides/engineering-behavior.md +43 -43
  51. package/guides/escalation-protocol.md +125 -125
  52. package/guides/frontend.md +151 -151
  53. package/guides/history-md-spec.md +297 -297
  54. package/guides/infrastructure.md +179 -179
  55. package/guides/lessons-learned-spec.md +151 -145
  56. package/guides/output-contract.md +108 -108
  57. package/guides/publish-md-spec.md +289 -289
  58. package/guides/rdc-skills-startup.md +30 -30
  59. package/guides/verify.md +11 -11
  60. package/hooks/check-cwd.js +31 -31
  61. package/hooks/check-rdc-environment.js +164 -164
  62. package/hooks/check-services.js +6 -6
  63. package/hooks/check-stale-work-items.js +19 -19
  64. package/hooks/foreground-process-gate.js +128 -128
  65. package/hooks/gate-watchdog-selfcheck.js +257 -257
  66. package/hooks/hook-logger.js +25 -25
  67. package/hooks/lib/run-evidence-gate.mjs +241 -241
  68. package/hooks/no-stop-open-epics.js +127 -127
  69. package/hooks/post-tool-batch-gate.js +203 -203
  70. package/hooks/post-work-check.js +21 -21
  71. package/hooks/postcompact-log.js +13 -13
  72. package/hooks/precompact-log.js +13 -13
  73. package/hooks/rate-limit-retry.js +46 -46
  74. package/hooks/rdc-invocation-marker.js +157 -157
  75. package/hooks/rdc-output-contract-gate.js +94 -94
  76. package/hooks/require-work-item-on-commit.js +294 -294
  77. package/hooks/restart-brief.js +19 -19
  78. package/hooks/run-hidden-hook.ps1 +47 -47
  79. package/hooks/task-completed-gate.js +274 -274
  80. package/hooks/work-item-exit-gate.js +944 -944
  81. package/lib/catalog.mjs +236 -236
  82. package/lib/cloud-rewrite.mjs +155 -155
  83. package/package.json +57 -56
  84. package/rules/work-items-rpc.md +520 -520
  85. package/scaffold/templates/HISTORY.md.template +39 -39
  86. package/scaffold/templates/PUBLISH.md.template +21 -21
  87. package/scaffold/templates/brochure-studio-default.html +70 -70
  88. package/scripts/acceptance.mjs +502 -502
  89. package/scripts/fixtures/guides/bad-guide.md +15 -15
  90. package/scripts/fixtures/guides-clean/good-guide.md +16 -16
  91. package/scripts/install-rdc-skills.js +1289 -1289
  92. package/scripts/install.ps1 +202 -202
  93. package/scripts/install.sh +132 -132
  94. package/scripts/lib/assertions.mjs +287 -287
  95. package/scripts/lib/manifest-schema.mjs +754 -754
  96. package/scripts/lib/runner.mjs +465 -465
  97. package/scripts/lib/sandbox.mjs +435 -435
  98. package/scripts/prepack.mjs +32 -32
  99. package/scripts/rdc-brochure.mjs +482 -464
  100. package/scripts/rdc-design-cli.mjs +134 -134
  101. package/scripts/rebuild-mcp.mjs +107 -107
  102. package/scripts/self-test.mjs +1460 -1460
  103. package/scripts/stamp-git-sha.mjs +29 -29
  104. package/scripts/test-guide-validator.mjs +196 -196
  105. package/scripts/test-rdc-hooks.mjs +145 -145
  106. package/scripts/uninstall.ps1 +77 -77
  107. package/scripts/uninstall.sh +69 -69
  108. package/scripts/update.ps1 +43 -43
  109. package/scripts/update.sh +43 -43
  110. package/scripts/validate-place-histories.js +461 -461
  111. package/scripts/validate-publish-manifests.js +424 -424
  112. package/scripts/watch-init.mjs +100 -100
  113. package/skills/brochure/SKILL.md +107 -107
  114. package/skills/build/SKILL.md +563 -563
  115. package/skills/channel-formatter/SKILL.md +533 -533
  116. package/skills/co-develop/SKILL.md +196 -196
  117. package/skills/collab/SKILL.md +239 -239
  118. package/skills/convert/SKILL.md +140 -140
  119. package/skills/deploy/SKILL.md +541 -541
  120. package/skills/design/SKILL.md +211 -211
  121. package/skills/design/reference/ownership.md +16 -16
  122. package/skills/design/reference/rampa.md +92 -92
  123. package/skills/design/reference/studio-model.md +153 -153
  124. package/skills/edit/SKILL.md +98 -98
  125. package/skills/fixit/SKILL.md +165 -165
  126. package/skills/fs-mcp/SKILL.md +148 -148
  127. package/skills/handoff/SKILL.md +236 -200
  128. package/skills/help/SKILL.md +143 -143
  129. package/skills/housekeeping/SKILL.md +219 -160
  130. package/skills/lifeai-brochure-author/SKILL.md +340 -340
  131. package/skills/overnight/SKILL.md +251 -251
  132. package/skills/plan/SKILL.md +345 -345
  133. package/skills/preplan/SKILL.md +90 -90
  134. package/skills/prototype/SKILL.md +150 -150
  135. package/skills/rdc-brochurify/SKILL.md +245 -245
  136. package/skills/rdc-extract-verifier-rules/SKILL.md +191 -191
  137. package/skills/release/SKILL.md +140 -140
  138. package/skills/report/SKILL.md +100 -100
  139. package/skills/review/SKILL.md +152 -152
  140. package/skills/rpms-filemap/SKILL.cloud.md +111 -111
  141. package/skills/rpms-filemap/SKILL.md +111 -111
  142. package/skills/self-test/SKILL.md +132 -132
  143. package/skills/status/SKILL.md +99 -99
  144. package/skills/terminal-config/SKILL.md +62 -62
  145. package/skills/tests/MATRIX.md +54 -54
  146. package/skills/tests/README.md +47 -47
  147. package/skills/tests/rdc-brochure.test.json +34 -34
  148. package/skills/tests/rdc-build.test.json +36 -36
  149. package/skills/tests/rdc-channel-formatter.test.json +45 -45
  150. package/skills/tests/rdc-co-develop.test.json +29 -29
  151. package/skills/tests/rdc-collab.test.json +29 -29
  152. package/skills/tests/rdc-convert.test.json +35 -35
  153. package/skills/tests/rdc-deploy.test.json +30 -30
  154. package/skills/tests/rdc-design.test.json +27 -27
  155. package/skills/tests/rdc-edit.test.json +29 -29
  156. package/skills/tests/rdc-fixit.test.json +36 -36
  157. package/skills/tests/rdc-fs-mcp.test.json +36 -36
  158. package/skills/tests/rdc-handoff.test.json +28 -28
  159. package/skills/tests/rdc-help.test.json +29 -29
  160. package/skills/tests/rdc-housekeeping.test.json +32 -28
  161. package/skills/tests/rdc-lifeai-brochure-author.test.json +35 -35
  162. package/skills/tests/rdc-overnight.test.json +37 -37
  163. package/skills/tests/rdc-plan.test.json +27 -27
  164. package/skills/tests/rdc-preplan.test.json +31 -31
  165. package/skills/tests/rdc-prototype.test.json +28 -28
  166. package/skills/tests/rdc-rdc-brochurify.test.json +23 -23
  167. package/skills/tests/rdc-rdc-extract-verifier-rules.test.json +34 -34
  168. package/skills/tests/rdc-release.test.json +29 -29
  169. package/skills/tests/rdc-report.test.json +28 -28
  170. package/skills/tests/rdc-review.test.json +29 -29
  171. package/skills/tests/rdc-rpms-filemap.test.json +28 -28
  172. package/skills/tests/rdc-self-test.test.json +24 -24
  173. package/skills/tests/rdc-status.test.json +29 -29
  174. package/skills/tests/rdc-terminal-config.test.json +29 -29
  175. package/skills/tests/rdc-watch.test.json +24 -24
  176. package/skills/tests/rdc-workitems.test.json +27 -27
  177. package/skills/watch/SKILL.md +97 -97
  178. package/skills/workitems/SKILL.md +151 -151
  179. package/tests/acceptance.test.mjs +59 -59
  180. package/tests/channel-formatter.contract.test.mjs +251 -251
  181. package/tests/curl-surface.test.mjs +289 -289
  182. package/tests/harness-gates.test.mjs +325 -325
  183. package/tests/help-surface.test.mjs +61 -61
  184. package/tests/housekeeping-lessons-triage.test.mjs +49 -0
  185. package/tests/install-rdc-skills.test.mjs +49 -49
  186. package/tests/lessons-pipeline-contract.test.mjs +26 -0
  187. package/tests/manifest-contract-fields.test.mjs +78 -78
  188. package/tests/mcp.test.mjs +271 -271
  189. package/tests/rdc-brochure.test.mjs +125 -0
  190. package/tests/release-contract.test.mjs +16 -0
  191. package/tests/require-work-item-on-commit.test.mjs +162 -162
  192. package/tests/run-evidence-gate.test.mjs +82 -82
  193. package/tests/skill-test-matrix.test.mjs +66 -66
  194. package/tests/validate-skills.js +27 -27
  195. package/tests/work-item-exit-gate-l2.test.mjs +368 -368
  196. package/tests/work-item-exit-gate-l3.test.mjs +197 -197
@@ -1,153 +1,159 @@
1
- ---
2
- mdk_schema_version: "1.0"
3
- doc_type: guide
4
- system: claude-workflow
5
- status: active
6
- owner: infrastructure
7
- created: 2026-06-08
8
- last_reviewed: 2026-06-08
9
- source_of_truth: true
10
- supersedes: []
11
- depends_on:
12
- - ".claude/rules/architectural-change-approval.md"
13
- - ".rdc/guides/output-contract.md"
14
- tags: [rdc, lessons-learned, skills, housekeeping, adaptive]
15
- ---
16
-
17
- # Lessons-Learned Capture & Triage — Spec
18
-
19
- > Auto-referenced by long-running `rdc:*` skills at exit, and by `rdc:housekeeping` for triage.
20
- > Goal: make the fleet an **interactive adaptive modeler** — every run that teaches us
21
- > something writes it down, and the weekly housekeeping pass turns those lessons into
22
- > actual fixes (rules, skill docs, work_items).
23
-
24
- ---
25
-
26
- ## Why this exists
27
-
28
- Lessons learned during a run (a non-obvious infra trap, a wrong assumption, a missing
29
- gate, a tooling gotcha) used to survive only if someone hand-wrote a memory. This system
30
- makes capture a **routine exit step** of every long skill, and triage a **routine phase**
31
- of the weekly housekeeping. Capture is cheap and append-only; triage is where fixes happen.
32
-
33
- Precedent: brochurify's `rdc-extract-verifier-rules` already does read-log → cluster →
34
- propose-rule for one domain. This generalizes that pattern fleet-wide.
35
-
36
- ---
37
-
38
- ## Storage — directory of per-lesson files
39
-
40
- Lessons live in **`.rdc/lessons/`**, one markdown file per lesson:
41
-
42
- ```
43
- .rdc/lessons/<YYYY-MM-DD>-<skill>-<short-slug>.md
44
- ```
45
-
46
- - One file per lesson (NOT a single appended file) so parallel agents finishing at the
47
- same time never collide on one file in git.
48
- - `<skill>` is the capturing skill (`build`, `deploy`, `overnight`, `fixit`, `plan`,
49
- `preplan`, `review`, `release`, `collab`).
50
- - `<short-slug>` is 2–4 kebab words naming the lesson.
51
-
52
- A run that taught nothing writes nothing — **absence is the default**. Only write a lesson
53
- when something was genuinely learned (see § When to capture).
54
-
55
- ---
56
-
57
- ## Lesson file schema
58
-
59
- ```markdown
60
- ---
61
- id: <YYYY-MM-DD>-<skill>-<short-slug>
62
- date: "<YYYY-MM-DD>"
63
- skill: build | deploy | overnight | fixit | plan | preplan | review | release | collab
64
- session: <session-id or short ref>
1
+ ---
2
+ mdk_schema_version: "1.0"
3
+ doc_type: guide
4
+ system: claude-workflow
5
+ status: active
6
+ owner: infrastructure
7
+ created: 2026-06-08
8
+ last_reviewed: 2026-06-08
9
+ source_of_truth: true
10
+ supersedes: []
11
+ depends_on:
12
+ - ".claude/rules/architectural-change-approval.md"
13
+ - ".rdc/guides/output-contract.md"
14
+ tags: [rdc, lessons-learned, skills, housekeeping, adaptive]
15
+ ---
16
+
17
+ # Lessons-Learned Capture & Triage — Spec
18
+
19
+ > Auto-referenced by long-running `rdc:*` skills at exit, and by `rdc:housekeeping` for triage.
20
+ > Goal: make the fleet an **interactive adaptive modeler** — every run that teaches us
21
+ > something writes it down, and the weekly housekeeping pass turns those lessons into
22
+ > actual fixes (rules, skill docs, work_items).
23
+
24
+ ---
25
+
26
+ ## Why this exists
27
+
28
+ Lessons learned during a run (a non-obvious infra trap, a wrong assumption, a missing
29
+ gate, a tooling gotcha) used to survive only if someone hand-wrote a memory. This system
30
+ makes capture a **routine exit step** of every long skill, and triage a **routine phase**
31
+ of the weekly housekeeping. Capture is cheap and append-only; triage is where fixes happen.
32
+
33
+ Precedent: brochurify's `rdc-extract-verifier-rules` already does read-log → cluster →
34
+ propose-rule for one domain. This generalizes that pattern fleet-wide.
35
+
36
+ ---
37
+
38
+ ## Storage — directory of per-lesson files
39
+
40
+ Lessons live in **`.rdc/lessons/`**, one markdown file per lesson:
41
+
42
+ ```
43
+ .rdc/lessons/<YYYY-MM-DD>-<skill>-<short-slug>.md
44
+ ```
45
+
46
+ - One file per lesson (NOT a single appended file) so parallel agents finishing at the
47
+ same time never collide on one file in git.
48
+ - `<skill>` is the capturing skill (`build`, `deploy`, `overnight`, `fixit`, `plan`,
49
+ `preplan`, `review`, `release`, `collab`).
50
+ - `<short-slug>` is 2–4 kebab words naming the lesson.
51
+
52
+ A run that taught nothing writes nothing — **absence is the default**. Only write a lesson
53
+ when something was genuinely learned (see § When to capture).
54
+
55
+ ---
56
+
57
+ ## Lesson file schema
58
+
59
+ ```markdown
60
+ ---
61
+ id: <YYYY-MM-DD>-<skill>-<short-slug>
62
+ date: "<YYYY-MM-DD>"
63
+ skill: build | deploy | overnight | fixit | plan | preplan | review | release | collab
64
+ session: <session-id or short ref>
65
65
  scope: simple | architectural # triage routing — see § Scope gate
66
- status: open | triaged | applied | wont-fix
67
- area: infra | skill | guide | rule | schema | ui | content | other
68
- links:
69
- commits: [] # SHAs that relate to the lesson
70
- memory: [] # memory file slugs, if a memory was also written
71
- work_items: [] # work_item UUIDs spawned during triage
72
- ---
73
-
74
- ## What happened
75
- <one paragraph — the concrete situation, with evidence (exit code, file:line, command)>
76
-
77
- ## Root cause
78
- <one paragraph — the evidenced cause, not a guess>
79
-
80
- ## The fix / rule
66
+ lesson_status: open | triaged | applied | wont-fix
67
+ area: infra | skill | guide | rule | schema | ui | content | other
68
+ links:
69
+ commits: [] # SHAs that relate to the lesson
70
+ memory: [] # memory file slugs, if a memory was also written
71
+ work_items: [] # work_item UUIDs spawned during triage
72
+ ---
73
+
74
+ ## What happened
75
+ <one paragraph — the concrete situation, with evidence (exit code, file:line, command)>
76
+
77
+ ## Root cause
78
+ <one paragraph — the evidenced cause, not a guess>
79
+
80
+ ## The fix / rule
81
81
  <what should change so this never recurs: a rule edit, skill-doc line, code change,
82
- or a check. If already applied in the same run, say so and link the commit.>
83
- ```
84
-
82
+ or a check. Cite a same-run related commit as context when useful, but keep
83
+ lesson_status: open until the weekly triage audit records the final outcome.>
84
+ ```
85
+
85
86
  `scope` is the single most important field — it routes triage:
86
-
87
- - **`simple`** — a doc line, a one-file fix, a config tweak, a clarifying sentence in a
88
- skill, a missing grep guard. Housekeeping applies these directly.
89
- - **`architectural`** anything matching `.claude/rules/architectural-change-approval.md`
90
- (rule/CLAUDE.md/ARCHITECTURE.md edits, cross-cutting refactors, schema reshape, public
91
- API/MCP changes, skill-contract changes affecting multiple skills). Housekeeping does
92
- NOT apply these; it surfaces them via `AskUserQuestion` for explicit approval first.
93
-
87
+
88
+ - **`simple`** — a doc line, a one-file fix, a config tweak, a clarifying sentence in a
89
+ skill, a missing grep guard. Housekeeping routes these through `rdc:fixit` or
90
+ `rdc:plan` -> `rdc:build`; it never applies them outside an RDC work item.
91
+ - **`architectural`** anything matching `.claude/rules/architectural-change-approval.md`
92
+ (rule/CLAUDE.md/ARCHITECTURE.md edits, cross-cutting refactors, schema reshape, public
93
+ API/MCP changes, skill-contract changes affecting multiple skills). Housekeeping does
94
+ NOT apply these; it surfaces them via `AskUserQuestion` for explicit approval first.
95
+
94
96
  When unsure, mark `architectural`.
95
97
 
96
- ---
97
-
98
- ## When to capture (at skill exit)
99
-
100
- Write a lesson when ANY of these were true during the run:
101
-
102
- 1. A root cause turned out to be different from the first theory (a wrong assumption).
103
- 2. The standard/documented path didn't work and you had to do something non-obvious.
104
- 3. A gate, check, or doc was missing and its absence cost a round.
105
- 4. A tool/infra behaved in a surprising way (exit codes, caching, serve/PM2/webhook quirks).
106
- 5. A hook blocked you and the block revealed a real gap (not just your mistake).
107
-
108
- Do NOT capture: routine success, your own one-off typo, anything already fully documented
109
- in a rule/guide. If a durable user preference or correction was involved, also write a
110
- `memory` (this spec and memory are complementary — link them).
111
-
112
- ---
113
-
114
- ## Capture procedure (the exit step long skills call)
115
-
116
- At the end of a long skill run, before the final verdict line:
117
-
118
- 1. Decide if anything qualifies When to capture). If not, write nothing and move on.
98
+ ### Legacy status migration
99
+
100
+ Older lesson files may use `status` instead of `lesson_status`. During weekly
101
+ intake, before filtering or clustering, normalize every lesson that has
102
+ `status` and no `lesson_status` by moving the unchanged value to
103
+ `lesson_status` and removing the legacy key. Record each migration in the
104
+ weekly report. Do not reinterpret a legacy value or create a work item merely
105
+ because it was migrated.
106
+
107
+ ---
108
+
109
+ ## When to capture (at skill exit)
110
+
111
+ Write a lesson when ANY of these were true during the run:
112
+
113
+ 1. A root cause turned out to be different from the first theory (a wrong assumption).
114
+ 2. The standard/documented path didn't work and you had to do something non-obvious.
115
+ 3. A gate, check, or doc was missing and its absence cost a round.
116
+ 4. A tool/infra behaved in a surprising way (exit codes, caching, serve/PM2/webhook quirks).
117
+ 5. A hook blocked you and the block revealed a real gap (not just your mistake).
118
+
119
+ Do NOT capture: routine success, your own one-off typo, anything already fully documented
120
+ in a rule/guide. If a durable user preference or correction was involved, also write a
121
+ `memory` (this spec and memory are complementary — link them).
122
+
123
+ ---
124
+
125
+ ## Capture procedure (the exit step long skills call)
126
+
127
+ At the end of a long skill run, before the final verdict line:
128
+
129
+ 1. Decide if anything qualifies (§ When to capture). If not, write nothing and move on.
119
130
  2. For each lesson, write `.rdc/lessons/<date>-<skill>-<slug>.md` using the schema above.
120
- Set `status: open` (or `applied` if you already shipped the fix in this same run, with
121
- the commit linked).
122
- 3. Set `scope` honestly (`simple` vs `architectural`).
123
- 4. Commit the lesson file(s) on `develop` alongside the run's other commits.
124
- 5. Mention in the verdict/summary that N lessons were captured.
125
-
126
- ---
127
-
131
+ Set `lesson_status: open`; a captured lesson is never self-marked as applied.
132
+ 3. Set `scope` honestly (`simple` vs `architectural`).
133
+ 4. Commit the lesson file(s) on `develop` alongside the run's other commits.
134
+ 5. Mention in the verdict/summary that N lessons were captured.
135
+
136
+ ---
137
+
128
138
  ## Triage procedure (rdc:housekeeping, weekly)
129
139
 
130
- `rdc:housekeeping` adds a **Lessons triage** phase:
131
-
132
- 1. Read all `.rdc/lessons/*.md` with `status: open`.
133
- 2. Cluster by `area` + root-cause similarity (dedupe repeats into one fix).
134
- 3. For each cluster:
135
- - `scope: simple` apply the fix directly (rule line, skill-doc edit, config, guard),
136
- commit it, set the lesson(s) `status: applied` and link the commit.
137
- - `scope: architectural` do NOT edit. Present the issue + options via
138
- `AskUserQuestion` (per `architectural-change-approval.md`). On approval, apply via the
139
- correct lifecycle (rdc-skills tag/push for skills; cited commit for rules) and set
140
- `status: applied`. If deferred, set `status: triaged` and spawn a `work_item`.
141
- - Not worth fixing → `status: wont-fix` with a one-line reason.
142
- 4. Summarize in the housekeeping report: captured / applied / escalated / deferred counts.
143
-
144
- Lessons are never silently deleted — `applied` and `wont-fix` files stay as the audit trail.
145
-
146
- ---
147
-
148
- ## Skills that capture (the long-running set)
149
-
150
- `build` · `deploy` · `overnight` · `fixit` · `plan` · `preplan` · `review` · `release` · `collab`
151
-
152
- Each references this spec from a final "§ Capture lessons" step. A Stop-hook backstop warns
153
- when one of these skills ends a run with findings but no new `.rdc/lessons/` file.
140
+ `rdc:housekeeping` uses this strict order. It prevents duplicate plans and fixits, gathers every architectural answer before changes, and keeps each executable change inside an RDC work item.
141
+
142
+ 1. Normalize legacy `status` fields as described above, then read all `.rdc/lessons/*.md` with `lesson_status: open` and cluster by `area` + root-cause similarity.
143
+ 2. **Resolution audit before routing:** for every cluster, inspect the relevant code, rules, skills, guides, tests, recent commits, linked work items, and existing mitigations. Record what was inspected, the evidence, and one result: `already-fixed`, `sufficiently-mitigated`, or `still-open`. Do not create an `rdc:fixit`, `rdc:plan`, or `rdc:build` item before this audit.
144
+ 3. Resolve no-work clusters from the audit: link the prior commit and set `lesson_status: applied` for `already-fixed`; set `lesson_status: wont-fix` for a sufficient mitigation with its remaining-risk reason. Leave partially mitigated clusters open.
145
+ 4. **Architectural report and interview:** before any file changes, report every still-open architectural decision with options, tradeoffs, recommendation, risks, and audit evidence. Create the complete interview list, ask each required question in attended mode, and record every question, answer, decision, rationale, and affected cluster. Gather all answers before the first fix. In unattended mode, create deduplicated `human_items` decision records and defer unresolved choices.
146
+ 5. **RDC routing:** route each approved still-open cluster through a complete work item and either `rdc:fixit` (only under its scope limit; it creates the sole work item) or `rdc:plan` -> `rdc:build`. Include cluster and lesson ids in the fixit description or planned task. No direct edits are allowed. Complete the required checklist, implementation report, review, validator closure, commit, and push. Deploy deployable targets to dev through RDC and record the evidence; record `not applicable` for non-deployable work.
147
+ 6. Run `rdc:review` across each completed action batch. Mark lessons `lesson_status: applied` only after review passes and the linked commit is pushed; mark deferred and declined clusters `triaged` or `wont-fix` with their linked evidence.
148
+ 7. Write the full weekly lessons report with cluster audit, architectural report, interview Q&A, RDC action register, deployment evidence, and counts for open, deduped, already fixed, mitigated, applied, triaged, wont-fix, deferred, fixits, builds, review passes, and dev deployments.
149
+
150
+ Lessons are never silently deleted `applied` and `wont-fix` files stay as the audit trail.
151
+
152
+ ---
153
+
154
+ ## Skills that capture (the long-running set)
155
+
156
+ `build` · `deploy` · `overnight` · `fixit` · `plan` · `preplan` · `review` · `release` · `collab`
157
+
158
+ Each references this spec from a final "§ Capture lessons" step. A Stop-hook backstop warns
159
+ when one of these skills ends a run with findings but no new `.rdc/lessons/` file.
@@ -1,108 +1,108 @@
1
- # RDC Skill Output Contract
2
- > Every `rdc:*` skill MUST follow this contract. Non-negotiable.
3
-
4
- ## Why
5
-
6
- The user has zero visibility when skills narrate tool calls and dump raw output.
7
- A wall of JSON, MCP responses, and "let me check X..." chatter buries the one
8
- thing they need: **is this working or not, and what step are we on?**
9
-
10
- ## The contract
11
-
12
- 1. **One checklist per invocation.** Show it upfront, update it in place as items
13
- progress, print it again at the end with a 1-line verdict.
14
-
15
- 2. **Checklist markers:**
16
- - `[ ]` pending
17
- - `[~]` in progress (currently executing)
18
- - `[x]` done
19
- - `[!]` failed
20
- - `[-]` skipped (with one-word reason in parens)
21
-
22
- 3. **NO narration of tool calls.** Forbidden phrases: "Let me...", "I'll check...",
23
- "Now reading...", "Let me fetch...", "Let me verify...". Tool calls happen
24
- silently. The checklist is the communication channel.
25
-
26
- 4. **NO raw tool output in chat.** No MCP JSON, no log dumps, no UUIDs, no
27
- SQL result tables, no curl bodies — unless a checklist item explicitly asks
28
- for one (e.g., "show HTTP status"). Everything else is consumed silently and
29
- folded into checklist state.
30
-
31
- 5. **Failures are one sentence.** When `[!]` fires, print ONE sentence on what
32
- failed and what you're doing about it. Stack traces, full error messages,
33
- and debug dumps go in memory, not in chat.
34
-
35
- 6. **Verdict line.** End every invocation with one line:
36
- - `✅ <skill>: <outcome> in Nm Ns`
37
- - `⚠️ <skill>: <N findings> — <next action>`
38
- - `❌ <skill>: <one-sentence reason>`
39
-
40
- ⛔ **The verdict emoji (✅ / ⚠️ / ❌) MUST be the FIRST character of the final
41
- line — never prefix it with `**Verdict:**` or any other text.** The enforcing
42
- Stop-hook checks that a line *begins* with the emoji; `**Verdict:** ✅ PASS …`
43
- reads as a verdict to a human but FAILS the machine check because the line
44
- starts with `**Verdict:`, not `✅` (lesson 2026-06-08-collab-verdict-line-must-start-with-emoji).
45
-
46
- > This guide is the source under `guides/output-contract.md`; it is mirrored to
47
- > `regen-root/.rdc/guides/output-contract.md` by the installer. Edit only the
48
- > rdc-skills source here — never the mirror.
49
-
50
- 7. **Interactive checklists only when human input is required.** If the skill
51
- needs a decision (pick an epic, confirm a destructive op), ask ONE question,
52
- then resume.
53
-
54
- 8. **TaskCreate is internal.** If you use TaskCreate/TodoWrite for internal
55
- tracking, that's fine — but the checklist shown to the user is the one
56
- defined in the skill's markdown, not the raw task list.
57
-
58
- ## Template
59
-
60
- Every skill invocation prints, in order:
61
-
62
- ```
63
- <Skill Name>: <one-line subject>
64
- [ ] Step 1
65
- [ ] Step 2
66
- [ ] Step 3
67
- ...
68
- ```
69
-
70
- Then executes silently, re-rendering the checklist when state changes (tools
71
- like CLI agents that stream output should refresh in place). At the end:
72
-
73
- ```
74
- <Skill Name>: <one-line subject>
75
- [x] Step 1
76
- [x] Step 2
77
- [x] Step 3
78
- ✅ <verdict>
79
- ```
80
-
81
- ## What the skill may additionally emit
82
-
83
- - **One question at a time** when input is required
84
- - **One-sentence status updates** at major state transitions (optional)
85
- - **Final artifacts** if the skill's output is itself a file/report/diff — link,
86
- don't inline the full content
87
-
88
- ## What the skill MUST NOT emit
89
-
90
- - Tool call narration
91
- - Raw MCP responses
92
- - JSON dumps
93
- - Log tails
94
- - SQL result grids
95
- - UUIDs unless asked
96
- - "I'm going to..." preambles
97
- - "Let me now..." transitions
98
- - Summaries of what just happened (the checklist shows it)
99
- - Apologies for verbosity
100
-
101
- ## Enforcement
102
-
103
- If a skill violates this contract, the user will say "squelch" — at which point
104
- any in-flight narration stops, only the checklist + verdict is shown for the
105
- remainder of the session.
106
-
107
- Skills SHOULD self-enforce by treating every tool call as silent and every
108
- user-facing emission as a deliberate checklist update.
1
+ # RDC Skill Output Contract
2
+ > Every `rdc:*` skill MUST follow this contract. Non-negotiable.
3
+
4
+ ## Why
5
+
6
+ The user has zero visibility when skills narrate tool calls and dump raw output.
7
+ A wall of JSON, MCP responses, and "let me check X..." chatter buries the one
8
+ thing they need: **is this working or not, and what step are we on?**
9
+
10
+ ## The contract
11
+
12
+ 1. **One checklist per invocation.** Show it upfront, update it in place as items
13
+ progress, print it again at the end with a 1-line verdict.
14
+
15
+ 2. **Checklist markers:**
16
+ - `[ ]` pending
17
+ - `[~]` in progress (currently executing)
18
+ - `[x]` done
19
+ - `[!]` failed
20
+ - `[-]` skipped (with one-word reason in parens)
21
+
22
+ 3. **NO narration of tool calls.** Forbidden phrases: "Let me...", "I'll check...",
23
+ "Now reading...", "Let me fetch...", "Let me verify...". Tool calls happen
24
+ silently. The checklist is the communication channel.
25
+
26
+ 4. **NO raw tool output in chat.** No MCP JSON, no log dumps, no UUIDs, no
27
+ SQL result tables, no curl bodies — unless a checklist item explicitly asks
28
+ for one (e.g., "show HTTP status"). Everything else is consumed silently and
29
+ folded into checklist state.
30
+
31
+ 5. **Failures are one sentence.** When `[!]` fires, print ONE sentence on what
32
+ failed and what you're doing about it. Stack traces, full error messages,
33
+ and debug dumps go in memory, not in chat.
34
+
35
+ 6. **Verdict line.** End every invocation with one line:
36
+ - `✅ <skill>: <outcome> in Nm Ns`
37
+ - `⚠️ <skill>: <N findings> — <next action>`
38
+ - `❌ <skill>: <one-sentence reason>`
39
+
40
+ ⛔ **The verdict emoji (✅ / ⚠️ / ❌) MUST be the FIRST character of the final
41
+ line — never prefix it with `**Verdict:**` or any other text.** The enforcing
42
+ Stop-hook checks that a line *begins* with the emoji; `**Verdict:** ✅ PASS …`
43
+ reads as a verdict to a human but FAILS the machine check because the line
44
+ starts with `**Verdict:`, not `✅` (lesson 2026-06-08-collab-verdict-line-must-start-with-emoji).
45
+
46
+ > This guide is the source under `guides/output-contract.md`; it is mirrored to
47
+ > `regen-root/.rdc/guides/output-contract.md` by the installer. Edit only the
48
+ > rdc-skills source here — never the mirror.
49
+
50
+ 7. **Interactive checklists only when human input is required.** If the skill
51
+ needs a decision (pick an epic, confirm a destructive op), ask ONE question,
52
+ then resume.
53
+
54
+ 8. **TaskCreate is internal.** If you use TaskCreate/TodoWrite for internal
55
+ tracking, that's fine — but the checklist shown to the user is the one
56
+ defined in the skill's markdown, not the raw task list.
57
+
58
+ ## Template
59
+
60
+ Every skill invocation prints, in order:
61
+
62
+ ```
63
+ <Skill Name>: <one-line subject>
64
+ [ ] Step 1
65
+ [ ] Step 2
66
+ [ ] Step 3
67
+ ...
68
+ ```
69
+
70
+ Then executes silently, re-rendering the checklist when state changes (tools
71
+ like CLI agents that stream output should refresh in place). At the end:
72
+
73
+ ```
74
+ <Skill Name>: <one-line subject>
75
+ [x] Step 1
76
+ [x] Step 2
77
+ [x] Step 3
78
+ ✅ <verdict>
79
+ ```
80
+
81
+ ## What the skill may additionally emit
82
+
83
+ - **One question at a time** when input is required
84
+ - **One-sentence status updates** at major state transitions (optional)
85
+ - **Final artifacts** if the skill's output is itself a file/report/diff — link,
86
+ don't inline the full content
87
+
88
+ ## What the skill MUST NOT emit
89
+
90
+ - Tool call narration
91
+ - Raw MCP responses
92
+ - JSON dumps
93
+ - Log tails
94
+ - SQL result grids
95
+ - UUIDs unless asked
96
+ - "I'm going to..." preambles
97
+ - "Let me now..." transitions
98
+ - Summaries of what just happened (the checklist shows it)
99
+ - Apologies for verbosity
100
+
101
+ ## Enforcement
102
+
103
+ If a skill violates this contract, the user will say "squelch" — at which point
104
+ any in-flight narration stops, only the checklist + verdict is shown for the
105
+ remainder of the session.
106
+
107
+ Skills SHOULD self-enforce by treating every tool call as silent and every
108
+ user-facing emission as a deliberate checklist update.