@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,251 +1,251 @@
1
- ---
2
- name: rdc:overnight
3
- description: "Usage `rdc:overnight [epic-id|label=<label>]` — Unattended end-to-end: drain the entire work queue autonomously (preplan → plan → build → review → report). Inherits mandatory per-wave code-review (pr-review-toolkit:code-reviewer) from rdc:build and rdc:review. Use when leaving Claude to run unsupervised for an extended session."
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`).
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:overnight — Overnight Build Supervisor
16
-
17
- ## When to Use
18
- - Starting an unattended multi-hour build session
19
- - Project lead says "run overnight", "build everything", "go while I sleep"
20
- - Kicking off a full epic queue after scoping is agreed
21
-
22
- ## Arguments
23
- - `/rdc:overnight` — work all urgent/high priority todo epics
24
- - `/rdc:overnight <epic-id>` — work a specific epic only
25
- - `/rdc:overnight label=<label>` — work epics matching label
26
-
27
- ## Phase 1 — Pre-flight
28
-
29
- **First action — set the overnight sentinel** so the `no-stop-open-epics` Stop hook engages (interactive sessions are not gated by it):
30
-
31
- ```bash
32
- mkdir -p {PROJECT_ROOT}/.rdc && touch {PROJECT_ROOT}/.rdc/overnight.lock
33
- ```
34
-
35
- **Last action at end of run (success OR failure) — remove the sentinel:**
36
-
37
- ```bash
38
- rm -f {PROJECT_ROOT}/.rdc/overnight.lock
39
- ```
40
-
41
- If the sentinel file does not exist, the Stop hook will NOT block — which means interactive sessions stop freely and only `rdc:overnight` is held to the "drain the queue" contract.
42
-
43
- Before touching any code, verify the environment is safe:
44
-
45
- 1. **Clauth daemon alive AND unlocked:** `/ping` alive is NOT enough — a LOCKED
46
- vault answers `/ping` but every `/v/<service>` returns nothing, so credentials
47
- silently resolve empty and a long unattended run fails hours later
48
- (lesson 2026-06-16-overnight-preflight-clauth-locked-and-shared-develop-cells).
49
- Assert `locked:false` before proceeding:
50
- ```bash
51
- curl -s http://127.0.0.1:52437/ping
52
- curl -s http://127.0.0.1:52437/status | python3 -c "import sys,json; s=json.load(sys.stdin); print('locked:', s.get('locked')); sys.exit(1 if s.get('locked') else 0)"
53
- ```
54
- If not responding OR `locked:true`: report `BLOCKED: credential daemon offline or locked` and exit. Do not proceed.
55
-
56
- 2. **Git state clean AND no concurrent committer on shared develop:** Overnight
57
- shares the `develop` working tree with other cells/sessions. A second session
58
- committing concurrently can drop a just-committed file during a rebase
59
- (lessons 2026-06-16-overnight-preflight-clauth-locked-and-shared-develop-cells,
60
- 2026-06-17-build-shared-develop-rebase-dropped-committed-file).
61
- ```bash
62
- git status --short
63
- git fetch -q origin && git log --oneline @..@{u} # any rows = origin moved under you
64
- ```
65
- Must be on the development branch with no uncommitted changes. If dirty: commit
66
- or stash first. If `origin/develop` is ahead of local at preflight, another
67
- session is actively committing — enforce these rules for the whole run:
68
- - **Atomic stage+commit by explicit path** — `git add <paths>` then immediate
69
- `git commit`; never leave a wide `git add -A` window open while another
70
- session may stage.
71
- - **Post-push origin verification** — after every push, confirm each committed
72
- file actually reached origin (a rebase can silently drop it):
73
- ```bash
74
- git cat-file -e origin/develop:<path> && echo "OK: <path> on origin" || echo "DROPPED: <path> — re-apply and re-push"
75
- ```
76
- A `DROPPED` result means re-apply the file on fresh `origin/develop` HEAD and push again.
77
-
78
- 3. **Baseline review:**
79
- Run `rdc:review --unattended`. If `REVIEW_STATUS.verdict = "HAS_ISSUES"` and
80
- issues cannot be auto-fixed: report `BLOCKED: codebase has pre-existing issues` and exit.
81
- A dirty baseline overnight compounds into a disaster by morning.
82
-
83
- If all three pass: proceed to Phase 2.
84
-
85
- ## Phase 2 — Load Scope
86
-
87
- Determine which epics to work:
88
-
89
- - **Specific epic arg:** load that one epic via `get_work_items_by_epic()`
90
- - **Label filter:** `SELECT get_open_epics(p_label_filter := '<label>')`
91
- - **No arg (default):** `SELECT get_open_epics()` filtered to:
92
- - `priority IN ('urgent', 'high')`
93
- - `status IN ('todo', 'in_progress')`
94
- - Order: urgent first, then high, then by `created_at`
95
-
96
- Log the epic queue at the start of `.rdc/reports/overnight-<YYYY-MM-DD>.md` (fallback: `.rdc/reports/overnight-<YYYY-MM-DD>.md` if `.rdc/` does not exist).
97
-
98
- ## Phase 3 — Epic Loop
99
-
100
- ### Targeted vs. queue mode
101
-
102
- - **Targeted (`rdc:overnight <epic-id>`):** work that one epic only. When it completes, remove the sentinel and exit — do NOT poll for more epics.
103
- - **Queue mode (`rdc:overnight` no args or `label=X`):** drain all matching epics sequentially.
104
-
105
- For each epic in the queue, run this sequence:
106
-
107
- ### 3a. Research (if needed)
108
- Condition: epic has 0 child tasks AND no matching doc in `.rdc/plans/` (or `.rdc/plans/` as fallback)
109
-
110
- ```
111
- rdc:preplan <topic> --unattended
112
- ```
113
-
114
- Check `PREPLAN_STATUS.recommendation_confidence`:
115
- - `"high"` or `"medium"`: proceed
116
- - `"low"`: escalate via advisor tool (see Escalation Protocol below)
117
- - If advisor gives direction: proceed with that direction
118
- - If advisor cannot resolve: skip this epic, log reason, move to next
119
-
120
- ### 3b. Plan (if no tasks exist)
121
- Condition: epic has 0 child tasks after preplan
122
-
123
- ```
124
- rdc:plan <epic-id> --unattended
125
- ```
126
-
127
- Check `PLAN_STATUS.task_count > 0` before continuing.
128
- If 0 tasks created: escalate via advisor, then skip if still unresolved.
129
-
130
- ### 3c. Build
131
-
132
- This skill delegates to rdc:build which uses typed agent dispatch. See rdc:build for agent type classification.
133
-
134
- ```
135
- rdc:build <epic-id> --unattended
136
- ```
137
-
138
- Agents receive the relevant guide file from `.rdc/guides/` (fallback: `.rdc/guides/`) based on their work package type.
139
-
140
- After each wave: check `BUILD_STATUS`. If `escalated: true`, log the escalation
141
- in the overnight doc and continue — don't stop the loop.
142
-
143
- **Mandatory code-review gate inherited from rdc:build (Step 9b).** Every wave inside `rdc:build` runs a `pr-review-toolkit:code-reviewer` pass before the next wave dispatches. Critical/high findings reopen the affected work items to `todo` and the next wave fixes them. Overnight does not skip or weaken this gate. If a wave's code-review escalates twice, advisor decides; otherwise the loop continues.
144
-
145
- ### 3d. Review
146
-
147
- ```
148
- rdc:review --unattended
149
- ```
150
-
151
- Check `REVIEW_STATUS.verdict`:
152
- - `"CLEAN"`: mark epic `done` in work_items, push, continue to next epic
153
- - `"HAS_ISSUES"` with `escalations > 0`: log issues, push what's clean, continue
154
- - `"HAS_ISSUES"` with `escalations = 0` (all auto-fixed): push, continue
155
-
156
- ### 3e. Commit checkpoint
157
-
158
- After each epic (pass or fail):
159
- ```bash
160
- if [ "$RDC_TEST" != "1" ]; then
161
- git push origin {development-branch}
162
- else
163
- echo "[RDC_TEST] skipping git push origin {development-branch}"
164
- fi
165
- ```
166
-
167
- This ensures every epic's work is saved regardless of what comes next.
168
-
169
- ## Phase 4 — Exit
170
-
171
- After all epics are processed:
172
-
173
- 1. Run `rdc:report --unattended`
174
-
175
- 2. Write session summary to `.rdc/reports/overnight-<YYYY-MM-DD>.md` (fallback: `.rdc/reports/overnight-<YYYY-MM-DD>.md`):
176
- ```markdown
177
- # Overnight Session — YYYY-MM-DD
178
-
179
- ## Started
180
- <timestamp>
181
-
182
- ## Epics Attempted
183
- | Epic | Status | Tasks Done | Commits |
184
-
185
- ## Epics Completed
186
- <list with epic IDs>
187
-
188
- ## Escalations
189
- N advisor calls — details:
190
- - <epic>: <what was escalated> → <advisor response>
191
-
192
- ## Blockers Remaining
193
- <any epics skipped or partially done>
194
-
195
- ## Git Summary
196
- - Total commits: N
197
- - Push status: ✅
198
-
199
- ## Completed
200
- <timestamp>
201
- ```
202
-
203
- 3. Final push:
204
- ```bash
205
- if [ "$RDC_TEST" != "1" ]; then
206
- git push origin {development-branch}
207
- else
208
- echo "[RDC_TEST] skipping final git push origin {development-branch}"
209
- fi
210
- ```
211
-
212
- ## Escalation Protocol
213
-
214
- The advisor tool pairs this executor with a high-level model for high-stakes decisions.
215
- Use it when genuinely stuck — not for every small uncertainty.
216
-
217
- **Escalation triggers:**
218
- - `PREPLAN_STATUS.recommendation_confidence = "low"` (too many unknowns)
219
- - `PLAN_STATUS.task_count = 0` after planning (nothing actionable)
220
- - Build agent fails twice on the same task
221
- - `REVIEW_STATUS` has unfixable issues requiring architectural judgment
222
- - Credential daemon goes down mid-session (escalate before exiting)
223
-
224
- **How to escalate:**
225
- Provide the advisor with:
226
- 1. What was attempted and what failed
227
- 2. The error or ambiguity in detail
228
- 3. Two most likely paths forward with tradeoffs
229
- 4. Which epic/task is blocked
230
-
231
- **After advisor responds:**
232
- - Log the guidance in the overnight doc
233
- - Resume the loop from where it stopped
234
- - If advisor cannot resolve: mark task/epic `blocked`, log reason, skip to next
235
-
236
- **Max escalations:** 3 per epic. After 3, skip the epic and log.
237
-
238
- ## Safety Rules
239
-
240
- - Branch: development branch always — NEVER touch main/production
241
- - NEVER run `pnpm build` — use `npx tsc --noEmit` for typecheck, vitest for tests only on modified packages
242
- - NEVER let agents overlap on the same files
243
- - Push after every epic, not just at the end
244
- - Update Supabase work items in real time throughout
245
- - Max 2 hours per epic — if exceeded, skip and log `TIMEOUT`
246
- - If credential daemon goes down mid-session: write current state to overnight doc, push, exit gracefully
247
- - If git push fails: log the failure, attempt rebase, retry once — do not force push
248
-
249
- ## Capture lessons (exit step)
250
-
251
- 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>-overnight-<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:overnight
3
+ description: "Usage `rdc:overnight [epic-id|label=<label>]` — Unattended end-to-end: drain the entire work queue autonomously (preplan → plan → build → review → report). Inherits mandatory per-wave code-review (pr-review-toolkit:code-reviewer) from rdc:build and rdc:review. Use when leaving Claude to run unsupervised for an extended session."
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`).
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:overnight — Overnight Build Supervisor
16
+
17
+ ## When to Use
18
+ - Starting an unattended multi-hour build session
19
+ - Project lead says "run overnight", "build everything", "go while I sleep"
20
+ - Kicking off a full epic queue after scoping is agreed
21
+
22
+ ## Arguments
23
+ - `/rdc:overnight` — work all urgent/high priority todo epics
24
+ - `/rdc:overnight <epic-id>` — work a specific epic only
25
+ - `/rdc:overnight label=<label>` — work epics matching label
26
+
27
+ ## Phase 1 — Pre-flight
28
+
29
+ **First action — set the overnight sentinel** so the `no-stop-open-epics` Stop hook engages (interactive sessions are not gated by it):
30
+
31
+ ```bash
32
+ mkdir -p {PROJECT_ROOT}/.rdc && touch {PROJECT_ROOT}/.rdc/overnight.lock
33
+ ```
34
+
35
+ **Last action at end of run (success OR failure) — remove the sentinel:**
36
+
37
+ ```bash
38
+ rm -f {PROJECT_ROOT}/.rdc/overnight.lock
39
+ ```
40
+
41
+ If the sentinel file does not exist, the Stop hook will NOT block — which means interactive sessions stop freely and only `rdc:overnight` is held to the "drain the queue" contract.
42
+
43
+ Before touching any code, verify the environment is safe:
44
+
45
+ 1. **Clauth daemon alive AND unlocked:** `/ping` alive is NOT enough — a LOCKED
46
+ vault answers `/ping` but every `/v/<service>` returns nothing, so credentials
47
+ silently resolve empty and a long unattended run fails hours later
48
+ (lesson 2026-06-16-overnight-preflight-clauth-locked-and-shared-develop-cells).
49
+ Assert `locked:false` before proceeding:
50
+ ```bash
51
+ curl -s http://127.0.0.1:52437/ping
52
+ curl -s http://127.0.0.1:52437/status | python3 -c "import sys,json; s=json.load(sys.stdin); print('locked:', s.get('locked')); sys.exit(1 if s.get('locked') else 0)"
53
+ ```
54
+ If not responding OR `locked:true`: report `BLOCKED: credential daemon offline or locked` and exit. Do not proceed.
55
+
56
+ 2. **Git state clean AND no concurrent committer on shared develop:** Overnight
57
+ shares the `develop` working tree with other cells/sessions. A second session
58
+ committing concurrently can drop a just-committed file during a rebase
59
+ (lessons 2026-06-16-overnight-preflight-clauth-locked-and-shared-develop-cells,
60
+ 2026-06-17-build-shared-develop-rebase-dropped-committed-file).
61
+ ```bash
62
+ git status --short
63
+ git fetch -q origin && git log --oneline @..@{u} # any rows = origin moved under you
64
+ ```
65
+ Must be on the development branch with no uncommitted changes. If dirty: commit
66
+ or stash first. If `origin/develop` is ahead of local at preflight, another
67
+ session is actively committing — enforce these rules for the whole run:
68
+ - **Atomic stage+commit by explicit path** — `git add <paths>` then immediate
69
+ `git commit`; never leave a wide `git add -A` window open while another
70
+ session may stage.
71
+ - **Post-push origin verification** — after every push, confirm each committed
72
+ file actually reached origin (a rebase can silently drop it):
73
+ ```bash
74
+ git cat-file -e origin/develop:<path> && echo "OK: <path> on origin" || echo "DROPPED: <path> — re-apply and re-push"
75
+ ```
76
+ A `DROPPED` result means re-apply the file on fresh `origin/develop` HEAD and push again.
77
+
78
+ 3. **Baseline review:**
79
+ Run `rdc:review --unattended`. If `REVIEW_STATUS.verdict = "HAS_ISSUES"` and
80
+ issues cannot be auto-fixed: report `BLOCKED: codebase has pre-existing issues` and exit.
81
+ A dirty baseline overnight compounds into a disaster by morning.
82
+
83
+ If all three pass: proceed to Phase 2.
84
+
85
+ ## Phase 2 — Load Scope
86
+
87
+ Determine which epics to work:
88
+
89
+ - **Specific epic arg:** load that one epic via `get_work_items_by_epic()`
90
+ - **Label filter:** `SELECT get_open_epics(p_label_filter := '<label>')`
91
+ - **No arg (default):** `SELECT get_open_epics()` filtered to:
92
+ - `priority IN ('urgent', 'high')`
93
+ - `status IN ('todo', 'in_progress')`
94
+ - Order: urgent first, then high, then by `created_at`
95
+
96
+ Log the epic queue at the start of `.rdc/reports/overnight-<YYYY-MM-DD>.md` (fallback: `.rdc/reports/overnight-<YYYY-MM-DD>.md` if `.rdc/` does not exist).
97
+
98
+ ## Phase 3 — Epic Loop
99
+
100
+ ### Targeted vs. queue mode
101
+
102
+ - **Targeted (`rdc:overnight <epic-id>`):** work that one epic only. When it completes, remove the sentinel and exit — do NOT poll for more epics.
103
+ - **Queue mode (`rdc:overnight` no args or `label=X`):** drain all matching epics sequentially.
104
+
105
+ For each epic in the queue, run this sequence:
106
+
107
+ ### 3a. Research (if needed)
108
+ Condition: epic has 0 child tasks AND no matching doc in `.rdc/plans/` (or `.rdc/plans/` as fallback)
109
+
110
+ ```
111
+ rdc:preplan <topic> --unattended
112
+ ```
113
+
114
+ Check `PREPLAN_STATUS.recommendation_confidence`:
115
+ - `"high"` or `"medium"`: proceed
116
+ - `"low"`: escalate via advisor tool (see Escalation Protocol below)
117
+ - If advisor gives direction: proceed with that direction
118
+ - If advisor cannot resolve: skip this epic, log reason, move to next
119
+
120
+ ### 3b. Plan (if no tasks exist)
121
+ Condition: epic has 0 child tasks after preplan
122
+
123
+ ```
124
+ rdc:plan <epic-id> --unattended
125
+ ```
126
+
127
+ Check `PLAN_STATUS.task_count > 0` before continuing.
128
+ If 0 tasks created: escalate via advisor, then skip if still unresolved.
129
+
130
+ ### 3c. Build
131
+
132
+ This skill delegates to rdc:build which uses typed agent dispatch. See rdc:build for agent type classification.
133
+
134
+ ```
135
+ rdc:build <epic-id> --unattended
136
+ ```
137
+
138
+ Agents receive the relevant guide file from `.rdc/guides/` (fallback: `.rdc/guides/`) based on their work package type.
139
+
140
+ After each wave: check `BUILD_STATUS`. If `escalated: true`, log the escalation
141
+ in the overnight doc and continue — don't stop the loop.
142
+
143
+ **Mandatory code-review gate inherited from rdc:build (Step 9b).** Every wave inside `rdc:build` runs a `pr-review-toolkit:code-reviewer` pass before the next wave dispatches. Critical/high findings reopen the affected work items to `todo` and the next wave fixes them. Overnight does not skip or weaken this gate. If a wave's code-review escalates twice, advisor decides; otherwise the loop continues.
144
+
145
+ ### 3d. Review
146
+
147
+ ```
148
+ rdc:review --unattended
149
+ ```
150
+
151
+ Check `REVIEW_STATUS.verdict`:
152
+ - `"CLEAN"`: mark epic `done` in work_items, push, continue to next epic
153
+ - `"HAS_ISSUES"` with `escalations > 0`: log issues, push what's clean, continue
154
+ - `"HAS_ISSUES"` with `escalations = 0` (all auto-fixed): push, continue
155
+
156
+ ### 3e. Commit checkpoint
157
+
158
+ After each epic (pass or fail):
159
+ ```bash
160
+ if [ "$RDC_TEST" != "1" ]; then
161
+ git push origin {development-branch}
162
+ else
163
+ echo "[RDC_TEST] skipping git push origin {development-branch}"
164
+ fi
165
+ ```
166
+
167
+ This ensures every epic's work is saved regardless of what comes next.
168
+
169
+ ## Phase 4 — Exit
170
+
171
+ After all epics are processed:
172
+
173
+ 1. Run `rdc:report --unattended`
174
+
175
+ 2. Write session summary to `.rdc/reports/overnight-<YYYY-MM-DD>.md` (fallback: `.rdc/reports/overnight-<YYYY-MM-DD>.md`):
176
+ ```markdown
177
+ # Overnight Session — YYYY-MM-DD
178
+
179
+ ## Started
180
+ <timestamp>
181
+
182
+ ## Epics Attempted
183
+ | Epic | Status | Tasks Done | Commits |
184
+
185
+ ## Epics Completed
186
+ <list with epic IDs>
187
+
188
+ ## Escalations
189
+ N advisor calls — details:
190
+ - <epic>: <what was escalated> → <advisor response>
191
+
192
+ ## Blockers Remaining
193
+ <any epics skipped or partially done>
194
+
195
+ ## Git Summary
196
+ - Total commits: N
197
+ - Push status: ✅
198
+
199
+ ## Completed
200
+ <timestamp>
201
+ ```
202
+
203
+ 3. Final push:
204
+ ```bash
205
+ if [ "$RDC_TEST" != "1" ]; then
206
+ git push origin {development-branch}
207
+ else
208
+ echo "[RDC_TEST] skipping final git push origin {development-branch}"
209
+ fi
210
+ ```
211
+
212
+ ## Escalation Protocol
213
+
214
+ The advisor tool pairs this executor with a high-level model for high-stakes decisions.
215
+ Use it when genuinely stuck — not for every small uncertainty.
216
+
217
+ **Escalation triggers:**
218
+ - `PREPLAN_STATUS.recommendation_confidence = "low"` (too many unknowns)
219
+ - `PLAN_STATUS.task_count = 0` after planning (nothing actionable)
220
+ - Build agent fails twice on the same task
221
+ - `REVIEW_STATUS` has unfixable issues requiring architectural judgment
222
+ - Credential daemon goes down mid-session (escalate before exiting)
223
+
224
+ **How to escalate:**
225
+ Provide the advisor with:
226
+ 1. What was attempted and what failed
227
+ 2. The error or ambiguity in detail
228
+ 3. Two most likely paths forward with tradeoffs
229
+ 4. Which epic/task is blocked
230
+
231
+ **After advisor responds:**
232
+ - Log the guidance in the overnight doc
233
+ - Resume the loop from where it stopped
234
+ - If advisor cannot resolve: mark task/epic `blocked`, log reason, skip to next
235
+
236
+ **Max escalations:** 3 per epic. After 3, skip the epic and log.
237
+
238
+ ## Safety Rules
239
+
240
+ - Branch: development branch always — NEVER touch main/production
241
+ - NEVER run `pnpm build` — use `npx tsc --noEmit` for typecheck, vitest for tests only on modified packages
242
+ - NEVER let agents overlap on the same files
243
+ - Push after every epic, not just at the end
244
+ - Update Supabase work items in real time throughout
245
+ - Max 2 hours per epic — if exceeded, skip and log `TIMEOUT`
246
+ - If credential daemon goes down mid-session: write current state to overnight doc, push, exit gracefully
247
+ - If git push fails: log the failure, attempt rebase, retry once — do not force push
248
+
249
+ ## Capture lessons (exit step)
250
+
251
+ 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>-overnight-<short-slug>.md` per lesson using the schema in that spec. Set `scope` (`simple` | `architectural`) and `lesson_status: open`; weekly triage alone records a final lesson outcome. 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.