@lifeaitools/rdc-skills 0.9.37 → 0.10.0
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-plugin/plugin.json +1 -1
- package/CHANGELOG.md +14 -0
- package/commands/deploy.md +4 -4
- package/commands/design.md +1 -1
- package/commands/overnight.md +2 -2
- package/commands/release.md +29 -139
- package/commands/self-test.md +1 -1
- package/commands/watch.md +1 -1
- package/guides/agent-bootstrap.md +2 -2
- package/guides/history-md-spec.md +297 -0
- package/guides/publish-md-spec.md +289 -0
- package/hooks/check-cwd.js +3 -3
- package/hooks/no-stop-open-epics.js +9 -7
- package/hooks/require-work-item-on-commit.js +2 -1
- package/package.json +11 -3
- package/scaffold/templates/HISTORY.md.template +39 -0
- package/scaffold/templates/PUBLISH.md.template +21 -0
- package/scripts/install-rdc-skills.js +6 -2
- package/scripts/validate-place-histories.js +461 -0
- package/scripts/validate-publish-manifests.js +424 -0
- package/skills/build/SKILL.md +30 -3
- package/skills/co-develop/SKILL.md +1 -1
- package/skills/deploy/SKILL.md +108 -12
- package/skills/design/SKILL.md +6 -6
- package/skills/fixit/SKILL.md +26 -1
- package/skills/fs-mcp/SKILL.md +2 -2
- package/skills/overnight/SKILL.md +3 -1
- package/skills/plan/SKILL.md +2 -2
- package/skills/release/SKILL.md +64 -295
- package/skills/review/SKILL.md +27 -1
- package/skills/self-test/SKILL.md +3 -3
- package/skills/terminal-config/SKILL.md +34 -189
- package/skills/watch/SKILL.md +1 -1
package/skills/design/SKILL.md
CHANGED
|
@@ -19,7 +19,7 @@ RDC-owned design execution for Studio and LIFEAI interfaces. This skill is the S
|
|
|
19
19
|
|
|
20
20
|
- Studio, Palette Library, brand-token, theme, component, or live-editor work
|
|
21
21
|
- Any design task that must understand RDC's real token tables and Studio routes
|
|
22
|
-
- UI critique, audit, polish, colorize, type, layout, or craft work in `
|
|
22
|
+
- UI critique, audit, polish, colorize, type, layout, or craft work in `{PROJECT_ROOT}`
|
|
23
23
|
- Agent-side color-system exploration using Rampa CLI
|
|
24
24
|
- Preparing token-aware implementation instructions for frontend/backend/data agents
|
|
25
25
|
|
|
@@ -166,7 +166,7 @@ Project docs to read for Studio work:
|
|
|
166
166
|
8. **Verify.**
|
|
167
167
|
- Run scoped tests only.
|
|
168
168
|
- For Studio: prefer route smoke checks, token API checks, and browser screenshots when UI changed.
|
|
169
|
-
- For CLI prompt work: run `node
|
|
169
|
+
- For CLI prompt work: run `node {RDC_SKILLS_ROOT}/scripts/rdc-design-cli.mjs <command> <brief>` and inspect the generated report under `.rdc/reports/rdc-design-cli/`.
|
|
170
170
|
|
|
171
171
|
## Command Menu
|
|
172
172
|
|
|
@@ -188,15 +188,15 @@ Project docs to read for Studio work:
|
|
|
188
188
|
Use the local helper to see exactly how much instruction text the skill is generating before sending it through an agent:
|
|
189
189
|
|
|
190
190
|
```powershell
|
|
191
|
-
node
|
|
192
|
-
node
|
|
193
|
-
node
|
|
191
|
+
node {RDC_SKILLS_ROOT}/scripts/rdc-design-cli.mjs studio "audit the Studio palette page"
|
|
192
|
+
node {RDC_SKILLS_ROOT}/scripts/rdc-design-cli.mjs palette "generate a PRT palette workflow"
|
|
193
|
+
node {RDC_SKILLS_ROOT}/scripts/rdc-design-cli.mjs --json theme "RDC earth-forward light theme"
|
|
194
194
|
```
|
|
195
195
|
|
|
196
196
|
The helper writes logs to:
|
|
197
197
|
|
|
198
198
|
```text
|
|
199
|
-
|
|
199
|
+
{RDC_SKILLS_ROOT}/.rdc/reports/rdc-design-cli/
|
|
200
200
|
```
|
|
201
201
|
|
|
202
202
|
Each run includes character count, word count, approximate token count, references loaded, and the final prompt text.
|
package/skills/fixit/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rdc:fixit
|
|
3
|
-
description: "Usage `rdc:fixit <description>` — Quick fix under 5 files / 30 min that does not warrant a full plan→build cycle. Creates a minimal work item, makes the change, commits, closes. The only sanctioned bypass of rdc:build."
|
|
3
|
+
description: "Usage `rdc:fixit <description>` — Quick fix under 5 files / 30 min that does not warrant a full plan→build cycle. Creates a minimal work item, makes the change, commits, runs a mandatory code-review pass (pr-review-toolkit:code-reviewer), closes. The only sanctioned bypass of rdc:build."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
|
|
@@ -90,6 +90,31 @@ else
|
|
|
90
90
|
fi
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
+
### 5.5 Mandatory code-review gate (before submitting implementation report)
|
|
94
|
+
|
|
95
|
+
⛔ **No fixit closes without a code-review pass.** Even single-file changes go through review.
|
|
96
|
+
|
|
97
|
+
Dispatch ONE `pr-review-toolkit:code-reviewer` agent on the fixit commit:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Agent({
|
|
101
|
+
subagent_type: "pr-review-toolkit:code-reviewer",
|
|
102
|
+
description: "fixit code review",
|
|
103
|
+
prompt: "Review `git show HEAD` on the development branch. Focus on:
|
|
104
|
+
bugs, logic errors, security, project-convention adherence (.claude/rules/*).
|
|
105
|
+
Confidence-based filtering — high-confidence findings only.
|
|
106
|
+
Return CODE_REVIEW_COMPLETE with: { critical_count, high_count, medium_count,
|
|
107
|
+
low_count, findings: [{severity, file:line, issue, suggested_fix}] }."
|
|
108
|
+
})
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Severity gate:**
|
|
112
|
+
- `critical` or `high` findings → fix in this same fixit session (do not escalate to rdc:build for the fix itself; the original fixit owns the cleanup), re-commit, re-run review until clean
|
|
113
|
+
- `medium` or `low` findings → record in `implementation_report.flags`; proceed to close
|
|
114
|
+
- Zero findings → proceed to close
|
|
115
|
+
|
|
116
|
+
Under `RDC_TEST=1`: echo `[RDC_TEST] skipping code-review dispatch` and proceed.
|
|
117
|
+
|
|
93
118
|
### 6. Close and clean up
|
|
94
119
|
|
|
95
120
|
Submit implementation report first, move to review, then close as validator:
|
package/skills/fs-mcp/SKILL.md
CHANGED
|
@@ -11,7 +11,7 @@ description: "Usage `rdc:fs-mcp <task>` — Use the File System MCP bridge for l
|
|
|
11
11
|
# rdc:fs-mcp — File System MCP Bridge
|
|
12
12
|
|
|
13
13
|
## When to Use
|
|
14
|
-
- Claude.ai, Cowork, or another remote surface needs live access to `
|
|
14
|
+
- Claude.ai, Cowork, or another remote surface needs live access to `{PROJECT_ROOT}` through the File System MCP.
|
|
15
15
|
- You need to read, search, or list current local repo files without relying on GitHub freshness.
|
|
16
16
|
- You need to write a small/scratch file through FS MCP.
|
|
17
17
|
- You need to move a larger cloud file into the local repo.
|
|
@@ -88,7 +88,7 @@ Required Claude.ai handoff shape:
|
|
|
88
88
|
|
|
89
89
|
```json
|
|
90
90
|
{
|
|
91
|
-
"repo": "
|
|
91
|
+
"repo": "<owner>/<repo>",
|
|
92
92
|
"remote": "origin",
|
|
93
93
|
"ref": "claude-ai/docs-upload-123",
|
|
94
94
|
"paths": ["docs/plans/foo.md"],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
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). Use when leaving Claude to run unsupervised for an extended session."
|
|
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
4
|
---
|
|
5
5
|
|
|
6
6
|
> **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
|
|
@@ -119,6 +119,8 @@ Agents receive the relevant guide file from `.rdc/guides/` (fallback: `.rdc/guid
|
|
|
119
119
|
After each wave: check `BUILD_STATUS`. If `escalated: true`, log the escalation
|
|
120
120
|
in the overnight doc and continue — don't stop the loop.
|
|
121
121
|
|
|
122
|
+
**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.
|
|
123
|
+
|
|
122
124
|
### 3d. Review
|
|
123
125
|
|
|
124
126
|
```
|
package/skills/plan/SKILL.md
CHANGED
|
@@ -227,7 +227,7 @@ Q1. Which Coolify project does this app belong to?
|
|
|
227
227
|
→ Record: project_uuid + environment_uuid (staging or production)
|
|
228
228
|
|
|
229
229
|
Q2. What is the domain?
|
|
230
|
-
→
|
|
230
|
+
→ staging wildcard subdomain? (staging / internal tools)
|
|
231
231
|
→ Custom subdomain on an existing zone? (e.g. app.regendevcorp.com)
|
|
232
232
|
→ Apex domain? (e.g. place.fund itself)
|
|
233
233
|
→ Domain on a different zone entirely? (e.g. skymesasouth.com)
|
|
@@ -238,7 +238,7 @@ Q3. Is this domain already in our Cloudflare account?
|
|
|
238
238
|
→ If NS not delegated to Cloudflare: A record in Cloudflare does nothing — must go to registrar
|
|
239
239
|
|
|
240
240
|
Q4. Does this app need Cloudflare proxy (orange cloud)?
|
|
241
|
-
→
|
|
241
|
+
→ Traefik/Let's Encrypt HTTP-01 staging wildcards are often safest unproxied; verify your platform's DNS requirements.
|
|
242
242
|
→ Custom domain needing DDoS/CDN: proxy OK only if SSL mode = Full (strict) + origin cert provisioned
|
|
243
243
|
→ Any doubt: start unproxied, add proxy after confirming SSL works
|
|
244
244
|
|
package/skills/release/SKILL.md
CHANGED
|
@@ -1,342 +1,111 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rdc:release
|
|
3
|
-
description: "Usage `rdc:release [
|
|
3
|
+
description: "Usage `rdc:release <repo> [version|--patch|--minor|--major|--dry-run]` — bump, commit, tag, push, wait for CI/publish, install, and verify a package or project using repo-local release metadata."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
|
|
7
7
|
> Checklist-only output. No tool-call narration. No raw git/npm/CI dumps.
|
|
8
8
|
> One checklist upfront, updated in place, shown again at end with 1-line verdict.
|
|
9
9
|
|
|
10
|
-
> **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
|
|
10
|
+
> **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.
|
|
11
11
|
|
|
12
|
-
# rdc:release —
|
|
13
|
-
|
|
14
|
-
## Purpose
|
|
15
|
-
|
|
16
|
-
One skill. All repos. No confusion about which release path to use.
|
|
17
|
-
|
|
18
|
-
When user says **"release"**, **"publish"**, **"promote"**, **"deploy to main"**, **"ship"**, or **"bump the version"** — this is the skill. Always. No exceptions.
|
|
19
|
-
|
|
20
|
-
Dave has Bash access. He should never be asked to run commands. This skill runs the complete loop and shows one checklist + one verdict.
|
|
12
|
+
# rdc:release — Generic Release
|
|
21
13
|
|
|
22
14
|
## When to Use
|
|
23
|
-
- User says "release", "publish", "promote", "deploy to main", "ship", or "bump the version"
|
|
24
|
-
- A package, plugin, or app needs to be versioned and pushed to its distribution channel
|
|
25
|
-
- After landing significant changes that must be published (clauth, rdc-skills, regen-media, gws)
|
|
26
|
-
- After develop is verified and staging passes — promoting to main
|
|
27
|
-
- User says "promote studio", "release studio to production", "ship the app" — use `promote <slug>` mode
|
|
28
|
-
|
|
29
|
-
**Never release autonomously.** This skill ONLY runs when the user explicitly invokes it. Never push to main on your own initiative.
|
|
30
15
|
|
|
31
|
-
|
|
16
|
+
- The user explicitly asks to release, publish, promote, ship, tag, or bump a repo.
|
|
17
|
+
- A package or app needs versioning plus verification.
|
|
18
|
+
- A repo provides release metadata in `package.json`, `.rdc/release.json`, README release instructions, or CI config.
|
|
32
19
|
|
|
33
|
-
|
|
34
|
-
- `rdc:release <repo> <version>` — explicit version (e.g. `1.6.0`)
|
|
35
|
-
- `rdc:release <repo> --minor` | `--major` | `--patch` — semver bump
|
|
36
|
-
- `rdc:release <repo> --dry-run` — show checklist and planned version, do nothing
|
|
37
|
-
- `rdc:release promote <slug>` — promote a specific deployed app from staging → production
|
|
38
|
-
- `rdc:release promote <slug> --dry-run` — show what would happen, do nothing
|
|
39
|
-
- `rdc:release` (no args) — list known repos, ask which
|
|
20
|
+
Never release without explicit user authorization.
|
|
40
21
|
|
|
41
|
-
##
|
|
22
|
+
## Inputs
|
|
42
23
|
|
|
43
|
-
|
|
24
|
+
- `rdc:release <repo>` — patch release by default.
|
|
25
|
+
- `rdc:release <repo> <version>` — explicit version.
|
|
26
|
+
- `rdc:release <repo> --patch|--minor|--major`
|
|
27
|
+
- `rdc:release <repo> --dry-run`
|
|
44
28
|
|
|
45
|
-
|
|
46
|
-
|------|------|-------------|-------------------|--------------|
|
|
47
|
-
| `clauth` | npm package | `C:/Dev/clauth` | bump + tag → GitHub Actions → npm publish | `npm install -g @lifeaitools/clauth@latest` → daemon restart |
|
|
48
|
-
| `rdc-skills` | local install | `C:/Dev/rdc-skills` | bump + tag → `install.sh` | copy to `~/.claude/skills/user/` + project |
|
|
49
|
-
| `regen-root` | monorepo | `C:/Dev/regen-root` | merge develop→main via GitHub PR → Coolify auto-deploys | run `rdc:deploy <affected-slug>` gate checks |
|
|
50
|
-
| `regen-media` | MCP server (in monorepo) | `C:/Dev/regen-root/mcp-servers/regen-media` | part of regen-root release — use `rdc:release regen-root` | Coolify redeploys `regen-media-mcp` from main |
|
|
51
|
-
| `gws` | MCP server (in monorepo) | `C:/Dev/regen-root/mcp-servers/gws` | part of regen-root release — use `rdc:release regen-root` | Coolify redeploys from main |
|
|
29
|
+
If `<repo>` is not resolvable from the current workspace, ask for its local path or GitHub slug.
|
|
52
30
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## Checklists
|
|
58
|
-
|
|
59
|
-
### Package release checklist (clauth, rdc-skills)
|
|
31
|
+
## Checklist
|
|
60
32
|
|
|
61
33
|
```
|
|
62
|
-
rdc:release: <repo> vX.Y.Z
|
|
34
|
+
rdc:release: <repo> vX.Y.Z -> vA.B.C
|
|
35
|
+
[ ] PUBLISH.md status gate: status=active AND prod in environments (block if not)
|
|
63
36
|
[ ] Source path resolved
|
|
64
|
-
[ ]
|
|
65
|
-
[ ]
|
|
37
|
+
[ ] Release metadata read
|
|
38
|
+
[ ] Working tree clean or user-approved dirty scope identified
|
|
39
|
+
[ ] Current version detected
|
|
66
40
|
[ ] New version computed
|
|
67
|
-
[ ] Dry-run gate
|
|
68
|
-
[ ]
|
|
41
|
+
[ ] Dry-run gate handled
|
|
42
|
+
[ ] Version files updated
|
|
43
|
+
[ ] Tests/self-test passed
|
|
44
|
+
[ ] Mandatory release code-review (pr-review-toolkit:code-reviewer on `git diff <last-released-tag>..HEAD`). Block release on `critical`/`high` findings; record `medium`/`low` in the release notes and proceed.
|
|
69
45
|
[ ] Commit created
|
|
70
|
-
[ ] Tag
|
|
71
|
-
[ ]
|
|
72
|
-
[ ] CI
|
|
73
|
-
[ ]
|
|
74
|
-
[ ] Local install executed
|
|
75
|
-
[ ] Installed version verified
|
|
76
|
-
[ ] Post-install action (daemon restart if clauth)
|
|
46
|
+
[ ] Tag created
|
|
47
|
+
[ ] Branch and tag pushed
|
|
48
|
+
[ ] CI/publish status verified
|
|
49
|
+
[ ] Registry/package/deploy target shows vA.B.C, if applicable
|
|
50
|
+
[ ] Local install/update executed, if applicable
|
|
51
|
+
[ ] Installed/runtime version verified
|
|
77
52
|
[ ] Smoke test passed
|
|
78
|
-
✅ rdc:release <repo>: vA.B.C live
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### App promote checklist (promote <slug>)
|
|
82
|
-
|
|
83
|
-
This mode promotes a single deployed app. It does NOT push `git push origin main` directly — it uses the GitHub PR merge API, which bypasses the `block-main-push` hook by design. The hook blocks autonomous pushes; explicit promotion via this skill is authorized by the user invoking it.
|
|
84
|
-
|
|
85
|
-
```
|
|
86
|
-
rdc:release promote: <slug> → <domain>
|
|
87
|
-
[ ] Registry lookup (slug, coolify_uuid, domain, staging_slug, staging_domain, app_version)
|
|
88
|
-
[ ] Staging health gate (HTTP 200 on staging_domain)
|
|
89
|
-
[ ] Staging TLS valid
|
|
90
|
-
[ ] develop branch clean and pushed
|
|
91
|
-
[ ] Commits ahead of main: <N> commits
|
|
92
|
-
[ ] Dry-run gate (if --dry-run, stop here and print planned commands)
|
|
93
|
-
[ ] app package.json version bumped on develop
|
|
94
|
-
[ ] Version bump committed + pushed to develop
|
|
95
|
-
[ ] GitHub PR develop→main: created or located
|
|
96
|
-
[ ] PR merged via GitHub API (merge method: merge)
|
|
97
|
-
[ ] Coolify auto-deploy confirmed started (polling <slug> deployments)
|
|
98
|
-
[ ] Deployment reached "finished" state
|
|
99
|
-
[ ] Gate: HTTP 200 on <domain>
|
|
100
|
-
[ ] Gate: TLS valid on <domain>
|
|
101
|
-
[ ] deployment_registry updated (last_deploy_at, status='active')
|
|
102
|
-
✅ rdc:release promote <slug>: <domain> live
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### Monorepo release checklist (regen-root)
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
rdc:release: regen-root — develop → main
|
|
109
|
-
[ ] Source path: C:/Dev/regen-root
|
|
110
|
-
[ ] develop branch clean and pushed (git status + git push)
|
|
111
|
-
[ ] Commits ahead of main summarised (git log main..develop --oneline)
|
|
112
|
-
[ ] Dry-run gate (if --dry-run, stop here)
|
|
113
|
-
[ ] Root package.json version bumped on develop
|
|
114
|
-
[ ] Version bump committed + pushed to develop
|
|
115
|
-
[ ] GitHub PR: develop → main created (or existing PR located)
|
|
116
|
-
[ ] PR merged via GitHub API (merge method: merge)
|
|
117
|
-
[ ] main pulled locally (git fetch origin main)
|
|
118
|
-
[ ] Coolify auto-deploy confirmed in progress (poll deployment status)
|
|
119
|
-
[ ] Affected apps gate-checked via rdc:deploy health probes
|
|
120
|
-
[ ] deployment_registry updated (last_deploy_at)
|
|
121
|
-
✅ rdc:release regen-root: main promoted, Coolify deployed
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## Execution Details
|
|
127
|
-
|
|
128
|
-
> **Notification paths by repo type:**
|
|
129
|
-
> - **Public repos** (rdc-skills, clauth): GitHub Actions POSTs to clauth channel on publish — wait for `mcp__claude_ai_clauth__channel_list` event, not a polling loop
|
|
130
|
-
> - **Private repos** (regen-root): Coolify webhook is wired to Supabase — check `deployment_registry` for deploy completion, not the clauth channel
|
|
131
|
-
|
|
132
|
-
### Package repos (clauth, rdc-skills)
|
|
133
|
-
|
|
134
|
-
#### 1. Version bump
|
|
135
|
-
- Read `package.json`, parse `version`
|
|
136
|
-
- Apply: patch (default), minor, major, or explicit
|
|
137
|
-
- Rewrite all `version` fields (some packages have `claude.version` too)
|
|
138
|
-
|
|
139
|
-
#### 2. Commit + tag + push
|
|
140
|
-
```bash
|
|
141
|
-
cd <source_path>
|
|
142
|
-
git add package.json
|
|
143
|
-
git commit -m "chore(release): vA.B.C"
|
|
144
|
-
git tag vA.B.C
|
|
145
|
-
git push && git push --tags
|
|
53
|
+
✅ rdc:release <repo>: vA.B.C live and verified
|
|
146
54
|
```
|
|
147
|
-
Never `--no-verify`. Never `--force`. Fix pre-commit hook failures at root cause.
|
|
148
|
-
|
|
149
|
-
#### 3. Wait for CI via clauth channel (rdc-skills and clauth)
|
|
150
55
|
|
|
151
|
-
|
|
56
|
+
## PUBLISH.md Status Gate (Step 0 — before any production-touching step)
|
|
152
57
|
|
|
153
|
-
|
|
154
|
-
# Check clauth channel for the completion event:
|
|
155
|
-
mcp__claude_ai_clauth__channel_list (since: <tag-push-timestamp>)
|
|
156
|
-
# Wait for event with text containing "vA.B.C" and status "success" or "failure"
|
|
157
|
-
# If no event after 10 min → fallback: gh run list --repo LIFEAI/<repo> --limit 3
|
|
158
|
-
```
|
|
58
|
+
Before touching any production system, read `PUBLISH.md` from the app root and validate promotion eligibility.
|
|
159
59
|
|
|
160
|
-
If the channel event shows failure, pull the run logs before proceeding:
|
|
161
60
|
```bash
|
|
162
|
-
|
|
61
|
+
PUBLISH_MD="<monorepo_path>/PUBLISH.md"
|
|
163
62
|
```
|
|
164
63
|
|
|
165
|
-
|
|
64
|
+
**Block promotion if ANY of the following are true:**
|
|
166
65
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
#### 5. Install
|
|
174
|
-
- **clauth:** `npm install -g @lifeaitools/clauth@latest`
|
|
175
|
-
- **rdc-skills:** `node C:/Dev/rdc-skills/scripts/install-rdc-skills.js`
|
|
176
|
-
- If install script fails, fall back:
|
|
177
|
-
`cp -r C:/Dev/rdc-skills/skills/* ~/.claude/plugins/cache/rdc-skills/rdc-skills/latest/skills/`
|
|
178
|
-
|
|
179
|
-
#### 6. Verify
|
|
180
|
-
- **clauth:** `curl -s http://127.0.0.1:52437/ping | python3 -c "import sys,json; print(json.load(sys.stdin)['app_version'])"` — must match vA.B.C
|
|
181
|
-
- **rdc-skills:** `ls ~/.claude/skills/user/rdc-release/SKILL.md` — must exist
|
|
182
|
-
- **npm:** `npm list -g --depth=0 @lifeaitools/clauth` — version matches
|
|
66
|
+
1. **PUBLISH.md is missing AND the app has a row in `app_deployments`** — emit warn and continue (during rollout period); becomes a hard block after Option A rollout is complete.
|
|
67
|
+
2. **PUBLISH.md exists AND `status` field is NOT `active`** — hard block regardless of rollout status.
|
|
68
|
+
- `status: draft` → `BLOCKED: PUBLISH.md status=draft for <slug> — promote requires status=active`
|
|
69
|
+
- `status: deprecated` → `BLOCKED: PUBLISH.md status=deprecated for <slug> — promote requires status=active`
|
|
70
|
+
3. **PUBLISH.md exists AND `environments` array does not include `prod`** → `BLOCKED: PUBLISH.md environments=[dev] for <slug> — prod must be declared before promotion`
|
|
71
|
+
4. **Any required surface field is missing** (`source_dir` or `path` absent on any surface) → `BLOCKED: PUBLISH.md surface <id> missing required field for <slug>`
|
|
183
72
|
|
|
184
|
-
|
|
185
|
-
- **clauth:** `curl -s -X POST http://127.0.0.1:52437/restart` → wait 3s → ping again
|
|
186
|
-
- **rdc-skills:** none
|
|
73
|
+
If blocked, abort immediately with the message above. Do NOT proceed to the version bump, commit, or any Coolify call.
|
|
187
74
|
|
|
188
|
-
|
|
189
|
-
- **clauth:** `curl -s http://127.0.0.1:52437/v/supabase-anon` — expect a non-empty JWT string
|
|
190
|
-
- **rdc-skills:** read frontmatter of one new/updated SKILL.md — parse succeeds
|
|
75
|
+
If PUBLISH.md is absent and app has no `app_deployments` row (library/package), skip this gate.
|
|
191
76
|
|
|
192
|
-
|
|
77
|
+
## Resolution Order
|
|
193
78
|
|
|
194
|
-
|
|
79
|
+
1. Current repo if `<repo>` is `.` or omitted and the user clearly refers to the current workspace.
|
|
80
|
+
2. Sibling directory matching `<repo>`.
|
|
81
|
+
3. GitHub slug `<owner>/<repo>`.
|
|
82
|
+
4. Repo-local `.rdc/release.json` if present.
|
|
83
|
+
5. Ask for the missing path or release mechanism.
|
|
195
84
|
|
|
196
|
-
|
|
197
|
-
```sql
|
|
198
|
-
SELECT slug, display_name, domain, staging_slug, staging_domain, coolify_uuid, monorepo_path, environment
|
|
199
|
-
FROM deployment_registry
|
|
200
|
-
WHERE slug = '<slug>';
|
|
201
|
-
```
|
|
202
|
-
If no `staging_slug` or `staging_domain`, ask Dave before proceeding — don't assume.
|
|
85
|
+
## Generic Commands
|
|
203
86
|
|
|
204
|
-
|
|
205
|
-
```bash
|
|
206
|
-
curl -s -o /dev/null -w "%{http_code}" https://<staging_domain>/
|
|
207
|
-
# Must return 200. TLS must be valid (no -k flag).
|
|
208
|
-
```
|
|
209
|
-
If staging is not healthy, STOP with `[!]` — don't promote a broken staging.
|
|
87
|
+
Use repo-local package tooling when available. Examples:
|
|
210
88
|
|
|
211
|
-
#### 3. Git state check
|
|
212
89
|
```bash
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
git
|
|
216
|
-
git
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
- Apply patch bump (default) or use explicit version if provided
|
|
222
|
-
- Commit: `chore(release): <slug> vA.B.C`
|
|
223
|
-
- Push to develop
|
|
224
|
-
|
|
225
|
-
#### 5. GitHub PR merge
|
|
226
|
-
```
|
|
227
|
-
# Check for existing open PR develop→main
|
|
228
|
-
mcp__claude_ai_Github_Proxy_MCP__list_pull_requests (base: main, head: develop)
|
|
229
|
-
|
|
230
|
-
# If none: create one
|
|
231
|
-
mcp__claude_ai_Github_Proxy_MCP__create_pull_request (base: main, head: develop, title: "chore(release): <slug> vA.B.C")
|
|
232
|
-
|
|
233
|
-
# Merge it
|
|
234
|
-
mcp__claude_ai_Github_Proxy_MCP__merge_pull_request (merge_method: merge)
|
|
235
|
-
```
|
|
236
|
-
**Note:** This uses the GitHub API — it does NOT run `git push origin main`. The `block-main-push` hook only blocks direct git push, not API merges.
|
|
237
|
-
|
|
238
|
-
#### 6. Coolify deploy poll
|
|
239
|
-
```bash
|
|
240
|
-
# Use clauth to get Coolify token, then poll the app's deployments
|
|
241
|
-
# Wait for status = "finished" — poll every 15s, 15min timeout
|
|
242
|
-
curl -s -H "Authorization: Bearer $COOLIFY_TOKEN" \
|
|
243
|
-
"https://deploy.regendevcorp.com/api/v1/applications/<coolify_uuid>/deployments?per_page=1"
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
#### 7. Gate checks
|
|
247
|
-
```bash
|
|
248
|
-
curl -s -o /dev/null -w "%{http_code}" https://<domain>/ # must return 200
|
|
249
|
-
curl -s -I https://<domain>/ | grep -i "strict-transport" # TLS
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
#### 8. Update registry
|
|
253
|
-
```sql
|
|
254
|
-
UPDATE deployment_registry SET last_deploy_at = now(), status = 'active' WHERE slug = '<slug>';
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
---
|
|
258
|
-
|
|
259
|
-
### Monorepo release (regen-root)
|
|
260
|
-
|
|
261
|
-
#### 1. Git state check
|
|
262
|
-
```bash
|
|
263
|
-
cd C:/Dev/regen-root
|
|
264
|
-
git status # must be clean on develop
|
|
265
|
-
git push origin develop # ensure latest is pushed
|
|
266
|
-
git log origin/main..develop --oneline # summarise what's going to main
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
#### 2. Bump root version on develop
|
|
270
|
-
```bash
|
|
271
|
-
# Read current version from package.json, apply patch bump
|
|
272
|
-
# Commit: "chore(release): vA.B.C — promote develop → main"
|
|
273
|
-
git add package.json && git commit -m "chore(release): vA.B.C"
|
|
274
|
-
git push origin develop
|
|
90
|
+
npm version patch --no-git-tag-version
|
|
91
|
+
npm test
|
|
92
|
+
git add package.json package-lock.json
|
|
93
|
+
git commit -m "chore(release): vA.B.C"
|
|
94
|
+
git tag vA.B.C
|
|
95
|
+
git push origin HEAD
|
|
96
|
+
git push origin vA.B.C
|
|
97
|
+
npm view <package-name> version
|
|
275
98
|
```
|
|
276
99
|
|
|
277
|
-
|
|
278
|
-
- Check for open PR from develop→main: `gh pr list --repo LIFEAI/regen-root --base main --head develop`
|
|
279
|
-
- If exists: use it. If not: create it via `mcp__claude_ai_Github_Proxy_MCP__create_pull_request`
|
|
280
|
-
- Merge via `mcp__claude_ai_Github_Proxy_MCP__merge_pull_request` with `merge_method: merge`
|
|
100
|
+
Never use `--force` or bypass hooks. If a hook fails, fix the cause.
|
|
281
101
|
|
|
282
|
-
|
|
102
|
+
## RDC Skills Package
|
|
283
103
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
```sql
|
|
287
|
-
-- Wait for the affected app's deployment to show status = 'finished'
|
|
288
|
-
SELECT slug, last_deploy_at, status, notes
|
|
289
|
-
FROM deployment_registry
|
|
290
|
-
WHERE slug IN (<affected slugs>)
|
|
291
|
-
ORDER BY last_deploy_at DESC;
|
|
292
|
-
```
|
|
104
|
+
For this package, prefer the npm installer binary after publish:
|
|
293
105
|
|
|
294
|
-
If the registry hasn't updated within 2 minutes of the PR merge, check Coolify directly:
|
|
295
106
|
```bash
|
|
296
|
-
|
|
297
|
-
|
|
107
|
+
npm install -g @lifeaitools/rdc-skills@latest
|
|
108
|
+
rdc-skills-install --profile core
|
|
298
109
|
```
|
|
299
110
|
|
|
300
|
-
|
|
301
|
-
For each affected app, verify: HTTP 200, TLS valid, container running.
|
|
302
|
-
Use `rdc:deploy diagnose <slug>` for any that fail.
|
|
303
|
-
|
|
304
|
-
#### 6. Update registry
|
|
305
|
-
```sql
|
|
306
|
-
UPDATE deployment_registry SET last_deploy_at = now() WHERE slug IN (<affected slugs>);
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
---
|
|
310
|
-
|
|
311
|
-
## Failure Modes
|
|
312
|
-
|
|
313
|
-
| Failure | Marker | Action |
|
|
314
|
-
|---------|--------|--------|
|
|
315
|
-
| Dirty working tree | `[!]` | Abort — show one-line diff summary, ask to commit or stash |
|
|
316
|
-
| Pre-commit hook fails | `[!]` | Fix root cause, re-stage, retry — NEVER `--no-verify` |
|
|
317
|
-
| CI fails | `[!]` | Print run URL + last 20 log lines |
|
|
318
|
-
| npm not registered | `[!]` | Check CI actually published — not a silent skip |
|
|
319
|
-
| PR merge blocked | `[!]` | Show blocker (branch protection, conflict) — resolve and retry |
|
|
320
|
-
| Coolify deploy failed | `[!]` | Run `rdc:deploy diagnose <slug>` — fix before declaring done |
|
|
321
|
-
| Gate non-200 | `[!]` | Don't update registry until fixed |
|
|
322
|
-
|
|
323
|
-
Show full checklist with `[!]` markers even on failure.
|
|
324
|
-
|
|
325
|
-
---
|
|
326
|
-
|
|
327
|
-
## Hard Rules
|
|
328
|
-
|
|
329
|
-
- **Never push directly to `main`** — always via GitHub PR merge (`mcp__claude_ai_Github_Proxy_MCP__merge_pull_request`)
|
|
330
|
-
- **Never `--force`, never `--no-verify`, never `--no-gpg-sign`**
|
|
331
|
-
- **Never declare success** without verified install or verified Coolify gate
|
|
332
|
-
- **Never release without an explicit `rdc:release` invocation** from the user
|
|
333
|
-
- **Monorepo MCP servers** (`regen-media`, `gws`) are released via `rdc:release regen-root` — not separately
|
|
334
|
-
|
|
335
|
-
---
|
|
336
|
-
|
|
337
|
-
## Related
|
|
338
|
-
|
|
339
|
-
- `.claude/context/clauth.md` — clauth release source of truth
|
|
340
|
-
- `.claude/context/coolify-deployment.md` — Coolify watch_paths, deploy rules
|
|
341
|
-
- `memory/feedback_version_bump_must_tag.md` — never bump without tagging
|
|
342
|
-
- `memory/feedback_use_rdc_release.md` — "promote/deploy to main" always triggers this skill
|
|
111
|
+
Use `--profile lifeai` only on a workstation that intentionally has the LIFEAI project layout and services.
|
package/skills/review/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rdc:review
|
|
3
|
-
description: "Usage `rdc:review [--unattended]` — Post-build quality gate: tsc, tests, stale docs, export conflicts across modified packages. Fixes what it can automatically, escalates the rest. Call after rdc:build and before merging to main."
|
|
3
|
+
description: "Usage `rdc:review [--unattended]` — Post-build quality gate: tsc, tests, stale docs, export conflicts, and a mandatory pr-review-toolkit:code-reviewer pass across modified packages. Fixes what it can automatically, escalates the rest. Call after rdc:build and before merging to main."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
|
|
@@ -80,6 +80,32 @@ description: "Usage `rdc:review [--unattended]` — Post-build quality gate: tsc
|
|
|
80
80
|
- Never silently leave orphaned tasks
|
|
81
81
|
- **⛔ Raw `UPDATE work_items SET parent_id = ...` is forbidden** — bypasses RLS and all constraint checks
|
|
82
82
|
|
|
83
|
+
8b. **Mandatory code-review gate — dispatch pr-review-toolkit:code-reviewer:**
|
|
84
|
+
|
|
85
|
+
⛔ **No CLEAN verdict without a code-review pass.** This is the second half of the quality gate; tsc/vitest catch type and behavior errors, code-reviewer catches logic, security, and convention drift.
|
|
86
|
+
|
|
87
|
+
Dispatch ONE `pr-review-toolkit:code-reviewer` agent on the full diff under review:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
Agent({
|
|
91
|
+
subagent_type: "pr-review-toolkit:code-reviewer",
|
|
92
|
+
description: "rdc:review code-review pass",
|
|
93
|
+
prompt: "Review `git diff origin/main...HEAD` on the development branch.
|
|
94
|
+
Focus on: bugs, logic errors, security vulnerabilities, project-convention
|
|
95
|
+
adherence (.claude/rules/*, CLAUDE.md, engineering-behavior.md).
|
|
96
|
+
Confidence-based filtering — high-confidence findings only.
|
|
97
|
+
Return CODE_REVIEW_COMPLETE with: { critical_count, high_count, medium_count,
|
|
98
|
+
low_count, findings: [{severity, file:line, issue, suggested_fix}] }."
|
|
99
|
+
})
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Severity gate:**
|
|
103
|
+
- `critical` or `high` → verdict cannot be CLEAN. Interactive: report and pause. Unattended: auto-fix if mechanical (rename, missing await, obvious null check), otherwise escalate via advisor and mark HAS_ISSUES.
|
|
104
|
+
- `medium` or `low` → record in the review report's "Issues" section; verdict can still be CLEAN.
|
|
105
|
+
- Zero findings → log `CODE_REVIEW: CLEAN` and continue.
|
|
106
|
+
|
|
107
|
+
Under `RDC_TEST=1`: echo `[RDC_TEST] skipping code-review dispatch` and continue.
|
|
108
|
+
|
|
83
109
|
9. **Verification gate — dispatch the verify agent:**
|
|
84
110
|
After any fixes land, run the verify gate on every touched package. See `guides/agents/verify.md`.
|
|
85
111
|
Apply `guides/engineering-behavior.md` while reviewing: flag unnecessary abstraction, drive-by refactors, missing assumptions, hidden uncertainty, out-of-scope edits, and prose-only verification.
|
|
@@ -31,7 +31,7 @@ description: "Usage `rdc:self-test [--strict]` — Validate all rdc:* skills, pl
|
|
|
31
31
|
Launch the interactive menu — pick tier, pick skill, see live output:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
node
|
|
34
|
+
node {RDC_SKILLS_ROOT}/scripts/self-test-ui.mjs
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
Menu options:
|
|
@@ -45,9 +45,9 @@ Test output streams live to the terminal. No server, no extra processes.
|
|
|
45
45
|
|
|
46
46
|
1. **Run the linter (direct or via UI):**
|
|
47
47
|
```bash
|
|
48
|
-
node
|
|
48
|
+
node {RDC_SKILLS_ROOT}/scripts/self-test.mjs
|
|
49
49
|
# or interactively:
|
|
50
|
-
node
|
|
50
|
+
node {RDC_SKILLS_ROOT}/scripts/self-test-ui.mjs
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
2. **Interpret exit codes:**
|