@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.
- package/.claude/settings.json +15 -15
- package/.claude-plugin/marketplace.json +21 -21
- package/.claude-plugin/plugin.json +1371 -1371
- package/.github/workflows/publish.yml +34 -34
- package/.github/workflows/self-test.yml +58 -58
- package/CHANGELOG.md +310 -310
- package/LICENSE +21 -21
- package/MANIFEST.md +221 -221
- package/README.md +376 -375
- package/README.sandbox.md +3 -3
- package/RELEASE.md +42 -0
- package/assets/watcher/viewer.html +164 -164
- package/bin/rdc-skills-mcp.mjs +316 -316
- package/commands/build.md +183 -183
- package/commands/collab.md +180 -180
- package/commands/deploy.md +152 -152
- package/commands/design.md +31 -31
- package/commands/edit.md +28 -28
- package/commands/fixit.md +124 -124
- package/commands/handoff.md +173 -173
- package/commands/help.md +95 -95
- package/commands/overnight.md +220 -220
- package/commands/plan.md +158 -158
- package/commands/preplan.md +131 -131
- package/commands/prototype.md +145 -145
- package/commands/release.md +49 -49
- package/commands/report.md +99 -99
- package/commands/review.md +120 -120
- package/commands/self-test.md +113 -113
- package/commands/status.md +86 -86
- package/commands/watch.md +98 -98
- package/commands/workitems.md +137 -137
- package/git-sha.json +1 -1
- package/guides/agent-bootstrap.md +295 -295
- package/guides/agents/backend.md +104 -104
- package/guides/agents/content.md +94 -94
- package/guides/agents/cs2.md +56 -56
- package/guides/agents/data.md +87 -87
- package/guides/agents/design.md +77 -77
- package/guides/agents/frontend.md +92 -92
- package/guides/agents/infrastructure.md +81 -81
- package/guides/agents/setup.md +281 -281
- package/guides/agents/verify.md +151 -151
- package/guides/agents/viz.md +106 -106
- package/guides/backend.md +146 -146
- package/guides/content.md +147 -147
- package/guides/cs2.md +190 -190
- package/guides/data.md +123 -123
- package/guides/design.md +116 -116
- package/guides/engineering-behavior.md +43 -43
- package/guides/escalation-protocol.md +125 -125
- package/guides/frontend.md +151 -151
- package/guides/history-md-spec.md +297 -297
- package/guides/infrastructure.md +179 -179
- package/guides/lessons-learned-spec.md +151 -145
- package/guides/output-contract.md +108 -108
- package/guides/publish-md-spec.md +289 -289
- package/guides/rdc-skills-startup.md +30 -30
- package/guides/verify.md +11 -11
- package/hooks/check-cwd.js +31 -31
- package/hooks/check-rdc-environment.js +164 -164
- package/hooks/check-services.js +6 -6
- package/hooks/check-stale-work-items.js +19 -19
- package/hooks/foreground-process-gate.js +128 -128
- package/hooks/gate-watchdog-selfcheck.js +257 -257
- package/hooks/hook-logger.js +25 -25
- package/hooks/lib/run-evidence-gate.mjs +241 -241
- package/hooks/no-stop-open-epics.js +127 -127
- package/hooks/post-tool-batch-gate.js +203 -203
- package/hooks/post-work-check.js +21 -21
- package/hooks/postcompact-log.js +13 -13
- package/hooks/precompact-log.js +13 -13
- package/hooks/rate-limit-retry.js +46 -46
- package/hooks/rdc-invocation-marker.js +157 -157
- package/hooks/rdc-output-contract-gate.js +94 -94
- package/hooks/require-work-item-on-commit.js +294 -294
- package/hooks/restart-brief.js +19 -19
- package/hooks/run-hidden-hook.ps1 +47 -47
- package/hooks/task-completed-gate.js +274 -274
- package/hooks/work-item-exit-gate.js +944 -944
- package/lib/catalog.mjs +236 -236
- package/lib/cloud-rewrite.mjs +155 -155
- package/package.json +57 -56
- package/rules/work-items-rpc.md +520 -520
- package/scaffold/templates/HISTORY.md.template +39 -39
- package/scaffold/templates/PUBLISH.md.template +21 -21
- package/scaffold/templates/brochure-studio-default.html +70 -70
- package/scripts/acceptance.mjs +502 -502
- package/scripts/fixtures/guides/bad-guide.md +15 -15
- package/scripts/fixtures/guides-clean/good-guide.md +16 -16
- package/scripts/install-rdc-skills.js +1289 -1289
- package/scripts/install.ps1 +202 -202
- package/scripts/install.sh +132 -132
- package/scripts/lib/assertions.mjs +287 -287
- package/scripts/lib/manifest-schema.mjs +754 -754
- package/scripts/lib/runner.mjs +465 -465
- package/scripts/lib/sandbox.mjs +435 -435
- package/scripts/prepack.mjs +32 -32
- package/scripts/rdc-brochure.mjs +482 -464
- package/scripts/rdc-design-cli.mjs +134 -134
- package/scripts/rebuild-mcp.mjs +107 -107
- package/scripts/self-test.mjs +1460 -1460
- package/scripts/stamp-git-sha.mjs +29 -29
- package/scripts/test-guide-validator.mjs +196 -196
- package/scripts/test-rdc-hooks.mjs +145 -145
- package/scripts/uninstall.ps1 +77 -77
- package/scripts/uninstall.sh +69 -69
- package/scripts/update.ps1 +43 -43
- package/scripts/update.sh +43 -43
- package/scripts/validate-place-histories.js +461 -461
- package/scripts/validate-publish-manifests.js +424 -424
- package/scripts/watch-init.mjs +100 -100
- package/skills/brochure/SKILL.md +107 -107
- package/skills/build/SKILL.md +563 -563
- package/skills/channel-formatter/SKILL.md +533 -533
- package/skills/co-develop/SKILL.md +196 -196
- package/skills/collab/SKILL.md +239 -239
- package/skills/convert/SKILL.md +140 -140
- package/skills/deploy/SKILL.md +541 -541
- package/skills/design/SKILL.md +211 -211
- package/skills/design/reference/ownership.md +16 -16
- package/skills/design/reference/rampa.md +92 -92
- package/skills/design/reference/studio-model.md +153 -153
- package/skills/edit/SKILL.md +98 -98
- package/skills/fixit/SKILL.md +165 -165
- package/skills/fs-mcp/SKILL.md +148 -148
- package/skills/handoff/SKILL.md +236 -200
- package/skills/help/SKILL.md +143 -143
- package/skills/housekeeping/SKILL.md +219 -160
- package/skills/lifeai-brochure-author/SKILL.md +340 -340
- package/skills/overnight/SKILL.md +251 -251
- package/skills/plan/SKILL.md +345 -345
- package/skills/preplan/SKILL.md +90 -90
- package/skills/prototype/SKILL.md +150 -150
- package/skills/rdc-brochurify/SKILL.md +245 -245
- package/skills/rdc-extract-verifier-rules/SKILL.md +191 -191
- package/skills/release/SKILL.md +140 -140
- package/skills/report/SKILL.md +100 -100
- package/skills/review/SKILL.md +152 -152
- package/skills/rpms-filemap/SKILL.cloud.md +111 -111
- package/skills/rpms-filemap/SKILL.md +111 -111
- package/skills/self-test/SKILL.md +132 -132
- package/skills/status/SKILL.md +99 -99
- package/skills/terminal-config/SKILL.md +62 -62
- package/skills/tests/MATRIX.md +54 -54
- package/skills/tests/README.md +47 -47
- package/skills/tests/rdc-brochure.test.json +34 -34
- package/skills/tests/rdc-build.test.json +36 -36
- package/skills/tests/rdc-channel-formatter.test.json +45 -45
- package/skills/tests/rdc-co-develop.test.json +29 -29
- package/skills/tests/rdc-collab.test.json +29 -29
- package/skills/tests/rdc-convert.test.json +35 -35
- package/skills/tests/rdc-deploy.test.json +30 -30
- package/skills/tests/rdc-design.test.json +27 -27
- package/skills/tests/rdc-edit.test.json +29 -29
- package/skills/tests/rdc-fixit.test.json +36 -36
- package/skills/tests/rdc-fs-mcp.test.json +36 -36
- package/skills/tests/rdc-handoff.test.json +28 -28
- package/skills/tests/rdc-help.test.json +29 -29
- package/skills/tests/rdc-housekeeping.test.json +32 -28
- package/skills/tests/rdc-lifeai-brochure-author.test.json +35 -35
- package/skills/tests/rdc-overnight.test.json +37 -37
- package/skills/tests/rdc-plan.test.json +27 -27
- package/skills/tests/rdc-preplan.test.json +31 -31
- package/skills/tests/rdc-prototype.test.json +28 -28
- package/skills/tests/rdc-rdc-brochurify.test.json +23 -23
- package/skills/tests/rdc-rdc-extract-verifier-rules.test.json +34 -34
- package/skills/tests/rdc-release.test.json +29 -29
- package/skills/tests/rdc-report.test.json +28 -28
- package/skills/tests/rdc-review.test.json +29 -29
- package/skills/tests/rdc-rpms-filemap.test.json +28 -28
- package/skills/tests/rdc-self-test.test.json +24 -24
- package/skills/tests/rdc-status.test.json +29 -29
- package/skills/tests/rdc-terminal-config.test.json +29 -29
- package/skills/tests/rdc-watch.test.json +24 -24
- package/skills/tests/rdc-workitems.test.json +27 -27
- package/skills/watch/SKILL.md +97 -97
- package/skills/workitems/SKILL.md +151 -151
- package/tests/acceptance.test.mjs +59 -59
- package/tests/channel-formatter.contract.test.mjs +251 -251
- package/tests/curl-surface.test.mjs +289 -289
- package/tests/harness-gates.test.mjs +325 -325
- package/tests/help-surface.test.mjs +61 -61
- package/tests/housekeeping-lessons-triage.test.mjs +49 -0
- package/tests/install-rdc-skills.test.mjs +49 -49
- package/tests/lessons-pipeline-contract.test.mjs +26 -0
- package/tests/manifest-contract-fields.test.mjs +78 -78
- package/tests/mcp.test.mjs +271 -271
- package/tests/rdc-brochure.test.mjs +125 -0
- package/tests/release-contract.test.mjs +16 -0
- package/tests/require-work-item-on-commit.test.mjs +162 -162
- package/tests/run-evidence-gate.test.mjs +82 -82
- package/tests/skill-test-matrix.test.mjs +66 -66
- package/tests/validate-skills.js +27 -27
- package/tests/work-item-exit-gate-l2.test.mjs +368 -368
- 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 `
|
|
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.
|