@lifeaitools/rdc-skills 0.35.23 → 0.35.25

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 (39) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.github/workflows/self-test.yml +34 -34
  3. package/MANIFEST.md +224 -224
  4. package/RELEASE.md +53 -11
  5. package/deploy/install-systemd.sh +29 -6
  6. package/deploy/systemd/rdc-skills-mcp-update.service +15 -0
  7. package/deploy/systemd/rdc-skills-mcp-update.timer +9 -0
  8. package/deploy/update-from-tag.sh +382 -0
  9. package/guides/agents/backend.md +102 -102
  10. package/guides/agents/content.md +94 -94
  11. package/guides/agents/cs2.md +56 -56
  12. package/guides/agents/data.md +86 -86
  13. package/guides/agents/design.md +77 -77
  14. package/guides/agents/frontend.md +91 -91
  15. package/guides/agents/infrastructure.md +81 -81
  16. package/guides/agents/setup.md +272 -272
  17. package/guides/agents/verify.md +119 -119
  18. package/guides/agents/viz.md +106 -106
  19. package/guides/orchestration-epic.md +17 -17
  20. package/guides/output-contract.md +8 -0
  21. package/guides/work-contract.md +194 -0
  22. package/package.json +3 -2
  23. package/scripts/lib/guide-content-rules.mjs +49 -0
  24. package/scripts/self-test.mjs +1439 -1459
  25. package/scripts/test-guide-validator.mjs +25 -24
  26. package/skills/behavior-audit/agents/openai.yaml +4 -4
  27. package/skills/build/SKILL.md +81 -29
  28. package/skills/fixit/SKILL.md +16 -0
  29. package/skills/open/SKILL.md +35 -5
  30. package/skills/overnight/SKILL.md +3 -1
  31. package/skills/plan/SKILL.md +21 -23
  32. package/skills/tests/onramp.test.json +101 -101
  33. package/skills/tests/rdc-env.test.json +12 -12
  34. package/skills/tests/rdc-new-model.test.json +12 -12
  35. package/skills/tests/rdc-refactor.test.json +29 -29
  36. package/skills/tests/rdc-regen-media.test.json +29 -29
  37. package/tests/deploy-updater.test.mjs +608 -0
  38. package/.rdc/evidence/orchestrator-rework-strikes/a9fad8b4716ee35e5f5d0047.json +0 -1
  39. package/.rdc/last_seen.json +0 -8
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rdc",
3
- "version": "0.35.23",
3
+ "version": "0.35.25",
4
4
  "description": "RDC typed-agent dispatch skill suite for Claude Code — plan, build, review, overnight unattended builds with work-item tracking and TDD enforcement.",
5
5
  "author": {
6
6
  "name": "LIFEAI",
@@ -1,29 +1,29 @@
1
- name: self-test
2
-
3
- on:
4
- push:
5
- branches: ['**']
6
- tags: ['v*']
7
- pull_request:
8
-
9
- jobs:
10
- tier1:
11
- name: Tier 1 static lint
12
- runs-on: ubuntu-latest
13
- steps:
14
- - name: Checkout
15
- uses: actions/checkout@v4
16
-
17
- - name: Setup Node 20
18
- uses: actions/setup-node@v4
19
- with:
20
- node-version: '20'
21
-
22
- - name: Run rdc:self-test --strict (Tier 1)
23
- # Tier 2 requires headless claude + clauth daemon — not available in standard CI.
24
- # Tier 1 catches the backtick-drift + frontmatter class of bugs.
25
- run: node scripts/self-test.mjs --strict
26
-
1
+ name: self-test
2
+
3
+ on:
4
+ push:
5
+ branches: ['**']
6
+ tags: ['v*']
7
+ pull_request:
8
+
9
+ jobs:
10
+ tier1:
11
+ name: Tier 1 static lint
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - name: Checkout
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Setup Node 20
18
+ uses: actions/setup-node@v4
19
+ with:
20
+ node-version: '20'
21
+
22
+ - name: Run rdc:self-test --strict (Tier 1)
23
+ # Tier 2 requires headless claude + clauth daemon — not available in standard CI.
24
+ # Tier 1 catches the backtick-drift + frontmatter class of bugs.
25
+ run: node scripts/self-test.mjs --strict
26
+
27
27
  tier2-gate:
28
28
  name: Tier 2 behavioral (tag releases only)
29
29
  runs-on: ubuntu-latest
@@ -32,14 +32,14 @@ jobs:
32
32
  env:
33
33
  ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
34
34
  steps:
35
- - name: Checkout
36
- uses: actions/checkout@v4
37
-
38
- - name: Setup Node 20
39
- uses: actions/setup-node@v4
40
- with:
41
- node-version: '20'
42
-
35
+ - name: Checkout
36
+ uses: actions/checkout@v4
37
+
38
+ - name: Setup Node 20
39
+ uses: actions/setup-node@v4
40
+ with:
41
+ node-version: '20'
42
+
43
43
  - name: Install claude CLI
44
44
  if: env.ANTHROPIC_API_KEY != ''
45
45
  run: npm install -g @anthropic-ai/claude-code
package/MANIFEST.md CHANGED
@@ -1,224 +1,224 @@
1
- # RDC Skills Library — Manifest
2
-
3
- **Created:** 2026-04-13
4
- **Last updated:** 2026-05-01
5
- **Source:** Regen Root project `.claude/skills/user/`
6
- **Files:** 31 skill files, 10 agent guides, command mirrors, and support scripts
7
- **Size:** ~480K
8
-
9
- ## Generic Conversion Summary
10
-
11
- All skills have been converted from project-specific to generic/portable:
12
-
13
- ### Path Replacements
14
- - `C:/Dev/regen-root/` → `{PROJECT_ROOT}/`
15
- - Hardcoded app names (rdc-marketing-engine, brand-studio, prt, etc.) → generic examples
16
- - Specific Supabase project IDs → generic table references
17
- - Developer-specific paths → variables
18
-
19
- ### TDD Enhancements
20
- - Added mandatory post-wave test gate to rdc:build
21
- - Updated rdc:review with test coverage delta reporting
22
- - Added test-first requirement to all agent skills
23
- - TDD enforcement: red → implement → green cycle
24
-
25
- ### Preserved Elements
26
- - All logic and procedures (100%)
27
- - All safety rules
28
- - All RPC patterns
29
- - Branch strategy (development → production)
30
- - Work item lifecycle
31
- - Escalation protocols
32
- - Unattended mode patterns
33
- - Status block format
34
-
35
- ## Files Created
36
-
37
- ```
38
- /c/Dev/rdc-skills/
39
- ├── README.md
40
- ├── MANIFEST.md (this file)
41
- └── skills/
42
- ├── build/SKILL.md [+TDD enforcement, +verify gate]
43
- ├── plan/SKILL.md
44
- ├── preplan/SKILL.md
45
- ├── review/SKILL.md [+test coverage delta, +verify gate]
46
- ├── overnight/SKILL.md
47
- ├── fixit/SKILL.md
48
- ├── status/SKILL.md
49
- ├── report/SKILL.md
50
- ├── co-develop/SKILL.md [peer-aware Claude/Codex co-development]
51
- ├── collab/SKILL.md [claude.ai ↔ Claude Code relay]
52
- ├── handoff/SKILL.md
53
- ├── prototype/SKILL.md
54
- ├── workitems/SKILL.md
55
- ├── design/SKILL.md [RDC/Studio design, Palette Library, Rampa CLI]
56
- ├── help/SKILL.md
57
- ├── regen-media/SKILL.md [primary image generation + Regen Media upload]
58
- ├── deploy/SKILL.md [Coolify deployment ops]
59
- ├── release/SKILL.md [atomic version release]
60
- ├── self-test/SKILL.md [static lint + tier2 smoke tests]
61
- └── watch/SKILL.md [session log + browser viewer]
62
- └── guides/agents/ (agent-only playbooks — dispatched by rdc:build, not user-invocable)
63
- ├── frontend.md
64
- ├── backend.md
65
- ├── cs2.md
66
- ├── data.md
67
- ├── design.md
68
- ├── infrastructure.md
69
- ├── content.md
70
- ├── viz.md
71
- ├── setup.md
72
- └── verify.md
73
- ```
74
-
75
- **Note (v0.7.9):** Skills migrated from flat `rdc-<name>.md` files to `<name>/SKILL.md` subdirectories. Plugin namespace is `rdc`, so composed skill names are `rdc:<name>` — matching the frontmatter. This eliminates the duplicate `rdc:rdc-*` registration that occurred when directories were named `rdc-<name>/`.
76
-
77
- ## Skill Categories
78
-
79
- ### Orchestration (8)
80
- - rdc:build — dispatch typed agents in waves
81
- - rdc:plan — architecture + epic/tasks
82
- - rdc:preplan — research before planning
83
- - rdc:review — quality gate
84
- - rdc:overnight — unattended build supervisor
85
- - rdc:fixit — quick-fix bypass
86
- - rdc:status — project dashboard
87
- - rdc:report — nightly report
88
-
89
- ### DevOps (3)
90
- - rdc:deploy — Coolify deployment ops (deploy, new, diagnose, audit)
91
- - rdc:release — atomic version release with git tag + changelog
92
- - rdc:watch — session log + browser viewer for Claude activity
93
-
94
- ### Quality (1)
95
- - rdc:self-test — static lint (tier1) + smoke tests (tier2)
96
-
97
- ### Collaboration (1)
98
- - rdc:co-develop — peer-aware Claude/Codex co-development over clauth
99
-
100
- ### Agent Guides (10, in `guides/agents/`) — [agent-only — dispatched by rdc:build, not user-invocable]
101
- - frontend — React, UI, Tailwind
102
- - backend — API, database, auth
103
- - data — migrations, schema
104
- - design — brand, tokens
105
- - infrastructure — deployment, CI/CD
106
- - content — copy, messaging
107
- - cs2 — paradigm-level work
108
- - viz — visualizations
109
- - setup — project scan + .rdc/config.json generation
110
- - verify — evidence-before-claims verification gate
111
-
112
- ### Utility (1)
113
- - rdc:collab — bidirectional claude.ai ↔ Claude Code relay via file transport
114
- - rdc:channel-formatter — channel-native formatting and content repurposing,
115
- including article-to-post, social-pack, campaign-pack, exec-pack, and
116
- launch-pack outputs
117
- - rdc:regen-media — primary image generation and Regen Media upload workflow,
118
- defaulting to local keyless Codex `gpt-image-2` via built-in `image_gen`
119
-
120
- ### Bridge (3)
121
- - rdc:handoff — planning → work items
122
- - rdc:prototype — JSX prototypes
123
- - rdc:workitems — work item CRUD
124
-
125
- ### Design (1)
126
- - rdc:design — Studio-aware design workflow with token, Palette Library, and Rampa CLI context
127
-
128
- ### Reference (1)
129
- - rdc:help — skill index
130
-
131
- ## Usage Instructions
132
-
133
- 1. **Clone or reference** the `/c/Dev/rdc-skills/` directory
134
- 2. **Update path variables** in all skills for your project
135
- 3. **Create project guides** (agent-bootstrap.md, frontend.md, etc.)
136
- 4. **Set up database** (work_items RPC, prototype_registry, design_context)
137
- 5. **Invoke skills** via your agent framework
138
- - Interactive: `/rdc:build <epic-id>`
139
- - Unattended: `/rdc:overnight`
140
- - Quality: `/rdc:review --unattended`
141
- - Content repurposing: `/rdc:channel-formatter social-pack article.md`
142
-
143
- ## Channel Formatter Content Packs
144
-
145
- `rdc:channel-formatter` can strictly format copy for one channel or repurpose a
146
- long source into a channel-native output set.
147
-
148
- Examples:
149
-
150
- ```bash
151
- rdc:channel-formatter linkedin article.md
152
- rdc:channel-formatter twitter-thread article.md
153
- rdc:channel-formatter social-pack article.md
154
- rdc:channel-formatter campaign-pack report.md
155
- ```
156
-
157
- Use `rdc:convert` for actual Office/Markdown file conversion, `rdc:brochure`
158
- for HTML/folder/URL PDF rendering, and `rdc:brochurify` for Brochurify
159
- orchestration. Channel formatter writes and repurposes text; it does not produce
160
- binary Word or PDF artifacts.
161
-
162
- ## Key Differences from Source
163
-
164
- ### Added: TDD Enforcement
165
-
166
- **rdc:build (Step 8):**
167
- ```bash
168
- # Post-wave test gate (mandatory)
169
- cd packages/<name> && npx vitest run 2>&1 | tail -20
170
- ```
171
- All tests must pass before next wave.
172
-
173
- **All agent skills:**
174
- ```
175
- TDD REQUIREMENT: Write tests FIRST for new functions/modules.
176
- Run: npx vitest run packages/<name>
177
- ```
178
-
179
- **rdc:review (Step 3):**
180
- ```bash
181
- # Check test coverage delta
182
- git diff origin/main...HEAD -- packages/*/src/ | grep -c "^+"
183
- git diff origin/main...HEAD -- packages/*/test* | grep -c "^+"
184
- ```
185
- Flags any package with implementation added but 0 new tests.
186
-
187
- **rdc:review report format:**
188
- ```
189
- | Package | Tests | Pass/Fail | New Tests Added | Issues |
190
- ```
191
-
192
- ### Preserved: All Logic
193
-
194
- - Work item RPC patterns (never raw SQL)
195
- - Agent type classification
196
- - Wave-based parallelization
197
- - Escalation protocols
198
- - Unattended mode patterns
199
- - Status block formatting
200
- - Safety rules (100%)
201
- - Branch strategy
202
-
203
- ## Deployment
204
-
205
- These skills are ready to use in any project that has:
206
-
207
- 1. A monorepo with `packages/`, `apps/`, or `sites/` structure
208
- 2. A database (Supabase, PostgreSQL, etc.) with work_items RPC functions
209
- 3. Capability to run agents (Claude Code, subagents, or CLI)
210
- 4. Git-based version control with at least 2 branches (dev + prod)
211
- 5. A credential management system (clauth daemon or equivalent)
212
-
213
- ## Questions?
214
-
215
- - **Specific project integration:** Refer to your project's infrastructure documentation
216
- - **Skill logic:** All skills are pure logic extracted from Regen Root; no project-specific magic
217
- - **TDD requirements:** Built into every skill; red → implement → green is mandatory
218
- - **Database schema:** You define; skills use generic `work_items` table and RPC patterns
219
-
220
- ---
221
-
222
- **Manifest created:** 2026-04-13
223
- **Source project:** Regen Root (github.com/LIFEAI/regen-root)
224
- **Genericization:** Complete — all hardcoded references removed, all logic preserved
1
+ # RDC Skills Library — Manifest
2
+
3
+ **Created:** 2026-04-13
4
+ **Last updated:** 2026-05-01
5
+ **Source:** Regen Root project `.claude/skills/user/`
6
+ **Files:** 31 skill files, 10 agent guides, command mirrors, and support scripts
7
+ **Size:** ~480K
8
+
9
+ ## Generic Conversion Summary
10
+
11
+ All skills have been converted from project-specific to generic/portable:
12
+
13
+ ### Path Replacements
14
+ - `C:/Dev/regen-root/` → `{PROJECT_ROOT}/`
15
+ - Hardcoded app names (rdc-marketing-engine, brand-studio, prt, etc.) → generic examples
16
+ - Specific Supabase project IDs → generic table references
17
+ - Developer-specific paths → variables
18
+
19
+ ### TDD Enhancements
20
+ - Added mandatory post-wave test gate to rdc:build
21
+ - Updated rdc:review with test coverage delta reporting
22
+ - Added test-first requirement to all agent skills
23
+ - TDD enforcement: red → implement → green cycle
24
+
25
+ ### Preserved Elements
26
+ - All logic and procedures (100%)
27
+ - All safety rules
28
+ - All RPC patterns
29
+ - Branch strategy (development → production)
30
+ - Work item lifecycle
31
+ - Escalation protocols
32
+ - Unattended mode patterns
33
+ - Status block format
34
+
35
+ ## Files Created
36
+
37
+ ```
38
+ /c/Dev/rdc-skills/
39
+ ├── README.md
40
+ ├── MANIFEST.md (this file)
41
+ └── skills/
42
+ ├── build/SKILL.md [+TDD enforcement, +verify gate]
43
+ ├── plan/SKILL.md
44
+ ├── preplan/SKILL.md
45
+ ├── review/SKILL.md [+test coverage delta, +verify gate]
46
+ ├── overnight/SKILL.md
47
+ ├── fixit/SKILL.md
48
+ ├── status/SKILL.md
49
+ ├── report/SKILL.md
50
+ ├── co-develop/SKILL.md [peer-aware Claude/Codex co-development]
51
+ ├── collab/SKILL.md [claude.ai ↔ Claude Code relay]
52
+ ├── handoff/SKILL.md
53
+ ├── prototype/SKILL.md
54
+ ├── workitems/SKILL.md
55
+ ├── design/SKILL.md [RDC/Studio design, Palette Library, Rampa CLI]
56
+ ├── help/SKILL.md
57
+ ├── regen-media/SKILL.md [primary image generation + Regen Media upload]
58
+ ├── deploy/SKILL.md [Coolify deployment ops]
59
+ ├── release/SKILL.md [atomic version release]
60
+ ├── self-test/SKILL.md [static lint + tier2 smoke tests]
61
+ └── watch/SKILL.md [session log + browser viewer]
62
+ └── guides/agents/ (agent-only playbooks — dispatched by rdc:build, not user-invocable)
63
+ ├── frontend.md
64
+ ├── backend.md
65
+ ├── cs2.md
66
+ ├── data.md
67
+ ├── design.md
68
+ ├── infrastructure.md
69
+ ├── content.md
70
+ ├── viz.md
71
+ ├── setup.md
72
+ └── verify.md
73
+ ```
74
+
75
+ **Note (v0.7.9):** Skills migrated from flat `rdc-<name>.md` files to `<name>/SKILL.md` subdirectories. Plugin namespace is `rdc`, so composed skill names are `rdc:<name>` — matching the frontmatter. This eliminates the duplicate `rdc:rdc-*` registration that occurred when directories were named `rdc-<name>/`.
76
+
77
+ ## Skill Categories
78
+
79
+ ### Orchestration (8)
80
+ - rdc:build — dispatch typed agents in waves
81
+ - rdc:plan — architecture + epic/tasks
82
+ - rdc:preplan — research before planning
83
+ - rdc:review — quality gate
84
+ - rdc:overnight — unattended build supervisor
85
+ - rdc:fixit — quick-fix bypass
86
+ - rdc:status — project dashboard
87
+ - rdc:report — nightly report
88
+
89
+ ### DevOps (3)
90
+ - rdc:deploy — Coolify deployment ops (deploy, new, diagnose, audit)
91
+ - rdc:release — atomic version release with git tag + changelog
92
+ - rdc:watch — session log + browser viewer for Claude activity
93
+
94
+ ### Quality (1)
95
+ - rdc:self-test — static lint (tier1) + smoke tests (tier2)
96
+
97
+ ### Collaboration (1)
98
+ - rdc:co-develop — peer-aware Claude/Codex co-development over clauth
99
+
100
+ ### Agent Guides (10, in `guides/agents/`) — [agent-only — dispatched by rdc:build, not user-invocable]
101
+ - frontend — React, UI, Tailwind
102
+ - backend — API, database, auth
103
+ - data — migrations, schema
104
+ - design — brand, tokens
105
+ - infrastructure — deployment, CI/CD
106
+ - content — copy, messaging
107
+ - cs2 — paradigm-level work
108
+ - viz — visualizations
109
+ - setup — project scan + .rdc/config.json generation
110
+ - verify — evidence-before-claims verification gate
111
+
112
+ ### Utility (1)
113
+ - rdc:collab — bidirectional claude.ai ↔ Claude Code relay via file transport
114
+ - rdc:channel-formatter — channel-native formatting and content repurposing,
115
+ including article-to-post, social-pack, campaign-pack, exec-pack, and
116
+ launch-pack outputs
117
+ - rdc:regen-media — primary image generation and Regen Media upload workflow,
118
+ defaulting to local keyless Codex `gpt-image-2` via built-in `image_gen`
119
+
120
+ ### Bridge (3)
121
+ - rdc:handoff — planning → work items
122
+ - rdc:prototype — JSX prototypes
123
+ - rdc:workitems — work item CRUD
124
+
125
+ ### Design (1)
126
+ - rdc:design — Studio-aware design workflow with token, Palette Library, and Rampa CLI context
127
+
128
+ ### Reference (1)
129
+ - rdc:help — skill index
130
+
131
+ ## Usage Instructions
132
+
133
+ 1. **Clone or reference** the `/c/Dev/rdc-skills/` directory
134
+ 2. **Update path variables** in all skills for your project
135
+ 3. **Create project guides** (agent-bootstrap.md, frontend.md, etc.)
136
+ 4. **Set up database** (work_items RPC, prototype_registry, design_context)
137
+ 5. **Invoke skills** via your agent framework
138
+ - Interactive: `/rdc:build <epic-id>`
139
+ - Unattended: `/rdc:overnight`
140
+ - Quality: `/rdc:review --unattended`
141
+ - Content repurposing: `/rdc:channel-formatter social-pack article.md`
142
+
143
+ ## Channel Formatter Content Packs
144
+
145
+ `rdc:channel-formatter` can strictly format copy for one channel or repurpose a
146
+ long source into a channel-native output set.
147
+
148
+ Examples:
149
+
150
+ ```bash
151
+ rdc:channel-formatter linkedin article.md
152
+ rdc:channel-formatter twitter-thread article.md
153
+ rdc:channel-formatter social-pack article.md
154
+ rdc:channel-formatter campaign-pack report.md
155
+ ```
156
+
157
+ Use `rdc:convert` for actual Office/Markdown file conversion, `rdc:brochure`
158
+ for HTML/folder/URL PDF rendering, and `rdc:brochurify` for Brochurify
159
+ orchestration. Channel formatter writes and repurposes text; it does not produce
160
+ binary Word or PDF artifacts.
161
+
162
+ ## Key Differences from Source
163
+
164
+ ### Added: TDD Enforcement
165
+
166
+ **rdc:build (Step 8):**
167
+ ```bash
168
+ # Post-wave test gate (mandatory)
169
+ cd packages/<name> && npx vitest run 2>&1 | tail -20
170
+ ```
171
+ All tests must pass before next wave.
172
+
173
+ **All agent skills:**
174
+ ```
175
+ TDD REQUIREMENT: Write tests FIRST for new functions/modules.
176
+ Run: npx vitest run packages/<name>
177
+ ```
178
+
179
+ **rdc:review (Step 3):**
180
+ ```bash
181
+ # Check test coverage delta
182
+ git diff origin/main...HEAD -- packages/*/src/ | grep -c "^+"
183
+ git diff origin/main...HEAD -- packages/*/test* | grep -c "^+"
184
+ ```
185
+ Flags any package with implementation added but 0 new tests.
186
+
187
+ **rdc:review report format:**
188
+ ```
189
+ | Package | Tests | Pass/Fail | New Tests Added | Issues |
190
+ ```
191
+
192
+ ### Preserved: All Logic
193
+
194
+ - Work item RPC patterns (never raw SQL)
195
+ - Agent type classification
196
+ - Wave-based parallelization
197
+ - Escalation protocols
198
+ - Unattended mode patterns
199
+ - Status block formatting
200
+ - Safety rules (100%)
201
+ - Branch strategy
202
+
203
+ ## Deployment
204
+
205
+ These skills are ready to use in any project that has:
206
+
207
+ 1. A monorepo with `packages/`, `apps/`, or `sites/` structure
208
+ 2. A database (Supabase, PostgreSQL, etc.) with work_items RPC functions
209
+ 3. Capability to run agents (Claude Code, subagents, or CLI)
210
+ 4. Git-based version control with at least 2 branches (dev + prod)
211
+ 5. A credential management system (clauth daemon or equivalent)
212
+
213
+ ## Questions?
214
+
215
+ - **Specific project integration:** Refer to your project's infrastructure documentation
216
+ - **Skill logic:** All skills are pure logic extracted from Regen Root; no project-specific magic
217
+ - **TDD requirements:** Built into every skill; red → implement → green is mandatory
218
+ - **Database schema:** You define; skills use generic `work_items` table and RPC patterns
219
+
220
+ ---
221
+
222
+ **Manifest created:** 2026-04-13
223
+ **Source project:** Regen Root (github.com/LIFEAI/regen-root)
224
+ **Genericization:** Complete — all hardcoded references removed, all logic preserved
package/RELEASE.md CHANGED
@@ -69,21 +69,63 @@ The public `/health` version must equal the released npm version and its skill
69
69
  count must match the packaged catalog. The local installer never restarts or
70
70
  deploys that endpoint.
71
71
 
72
- The Vultr host checks out this repository at `/srv/regen/rdc-skills` it runs
73
- straight from the checkout (no `npm install`), so `/health`'s `git_sha` comes
74
- from `bin/rdc-skills-mcp.mjs`'s runtime `git rev-parse HEAD` fallback, NOT a
75
- stamped `git-sha.json` (that file is `.gitignore`d on purposeit's a
76
- pack-time-only artifact for npm-installed copies; see the comment above its
77
- `.gitignore` entry). `install-systemd.sh` alone does not restart the running
78
- process. After pulling `master`:
72
+ The Vultr host checks out this repository at `/srv/regen/rdc-skills` and runs the
73
+ server straight from that checkout, with production dependencies installed there
74
+ by `npm ci`. `/health`'s `git_sha` comes from `bin/rdc-skills-mcp.mjs`'s runtime
75
+ `git rev-parse HEAD`, resolved once when the process starts NOT a stamped
76
+ `git-sha.json` (that file is `.gitignore`d on purpose it's a pack-time-only
77
+ artifact for npm-installed copies; the updater deletes one if it appears in the
78
+ checkout). `version`, by contrast, is re-read from `package.json` on every
79
+ request, so **only `git_sha` proves the process restarted onto a release.**
80
+
81
+ **The host follows release tags by itself.** `rdc-skills-mcp-update.timer` runs
82
+ the updater ([`deploy/update-from-tag.sh`](deploy/update-from-tag.sh), installed
83
+ at `/usr/local/libexec/rdc-skills/` so no rollback can delete it) every five
84
+ minutes. The service is only ever restarted onto a **release**: the newest plain
85
+ `vX.Y.Z` tag merged into `master`, or the last release the updater proved serving.
86
+ Untagged commits, pre-releases and tags off `master` are never served — a checkout
87
+ pulled ahead to untagged `master` is moved back to the tag. The updater reinstalls
88
+ dependencies and unit files only when they differ from the last install, restarts
89
+ the MCP, and succeeds only when `/health` reports the release's version **and**
90
+ commit. "Current" is decided by `/health`, never by where `HEAD` is — a run that was
91
+ interrupted converges on the next tick.
92
+
93
+ A release only moves forward: a tag that is not a descendant of the proved release
94
+ (a higher number put on an older commit) is held off, so rolling back means tagging
95
+ a new, higher release. A release that restarts but never answers is recorded as
96
+ failed in `/var/lib/rdc-skills-update/failed`, the proved release is served again,
97
+ and the failed one is not retried until a newer tag exists. An install or restart
98
+ error says nothing about the release: the proved release is served again and the
99
+ new one is retried next run. A registry that cannot be reached is not counted
100
+ unless it stays unreachable for that release for a whole day; any other install or
101
+ restart error, the third time against the same release, marks it failed. To retry a release marked failed without tagging again, delete its line
102
+ from that file on the host. A host with no history adopts the commit it is already
103
+ serving (if that commit is on `master`) as the proved release before touching
104
+ anything, so the first move has somewhere to go back to. Tracked changes on the
105
+ host, or a commit made on the host, are refused and the service is left as it is.
106
+ So pushing the tag is the whole public MCP deploy — expect it live within about
107
+ five minutes:
79
108
 
80
109
  ```bash
81
- git pull --ff-only origin master
82
- sudo ./deploy/install-systemd.sh # re-verify/re-enable the unit config
83
- sudo systemctl restart rdc-skills-mcp.service # actually load the new commit
84
- curl -fsS https://rdc-skills.regendevcorp.com/health # confirm git_sha == new HEAD
110
+ tag=v$(node -p "require('./package.json').version")
111
+ curl -fsS https://rdc-skills.regendevcorp.com/health # git_sha == the line below
112
+ git rev-list -n 1 "$tag"
113
+ # on the host: journalctl -u rdc-skills-mcp-update.service -n 20
114
+ ```
115
+
116
+ `install-systemd.sh` is the one-time host bootstrap. It installs the units and the
117
+ updater, runs the updater once (which restarts the MCP onto the checked-out release
118
+ and proves it), then enables the timer:
119
+
120
+ ```bash
121
+ cd /srv/regen/rdc-skills
122
+ git fetch --tags origin && git merge --ff-only v<X.Y.Z>
123
+ sudo ./deploy/install-systemd.sh
85
124
  ```
86
125
 
126
+ Before the timer existed the checkout moved only when someone logged in and
127
+ pulled, and the public catalog sat on 0.35.18 through six releases.
128
+
87
129
  Port `3110` is reserved for this public MCP ingress. Application fleet manifests
88
130
  must not claim it.
89
131
 
@@ -1,9 +1,15 @@
1
1
  #!/usr/bin/env bash
2
+ # One-time host bootstrap for the public MCP. From then on the timer keeps the
3
+ # checkout on the newest release tag (deploy/update-from-tag.sh).
4
+ #
5
+ # cd /srv/regen/rdc-skills
6
+ # git fetch --tags origin && git merge --ff-only v<X.Y.Z>
7
+ # sudo ./deploy/install-systemd.sh
2
8
  set -euo pipefail
3
9
 
4
10
  repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
- unit_source="$repo_root/deploy/systemd/rdc-skills-mcp.service"
6
- unit_target="/etc/systemd/system/rdc-skills-mcp.service"
11
+ unit_dir="/etc/systemd/system"
12
+ libexec_dir="/usr/local/libexec/rdc-skills"
7
13
 
8
14
  if [[ "$repo_root" != "/srv/regen/rdc-skills" ]]; then
9
15
  echo "rdc-skills must be checked out at /srv/regen/rdc-skills" >&2
@@ -14,9 +20,26 @@ cd "$repo_root"
14
20
  # The MCP imports declared runtime dependencies (including express). A Git
15
21
  # checkout alone cannot satisfy those imports after a clean host or dependency
16
22
  # cleanup, so install the committed production graph before the unit is enabled.
17
- npm ci --omit=dev --no-audit --no-fund
23
+ # No install scripts: nothing the server imports needs one, and this runs as root.
24
+ npm ci --omit=dev --no-audit --no-fund --ignore-scripts
18
25
 
19
- install -m 0644 "$unit_source" "$unit_target"
26
+ install -m 0644 deploy/systemd/rdc-skills-mcp.service "$unit_dir/rdc-skills-mcp.service"
27
+ install -m 0644 deploy/systemd/rdc-skills-mcp-update.service "$unit_dir/rdc-skills-mcp-update.service"
28
+ install -m 0644 deploy/systemd/rdc-skills-mcp-update.timer "$unit_dir/rdc-skills-mcp-update.timer"
29
+ install -D -m 0755 deploy/update-from-tag.sh "$libexec_dir/update-from-tag.sh"
20
30
  systemctl daemon-reload
21
- systemctl enable --now rdc-skills-mcp.service
22
- systemctl --no-pager --full status rdc-skills-mcp.service
31
+ systemctl enable rdc-skills-mcp.service
32
+
33
+ # `enable --now` does not restart a process that is already running, so an
34
+ # existing host would keep serving the old commit. The updater restarts into the
35
+ # checked-out release and succeeds only when /health proves it; if that release
36
+ # does not come up it returns to the commit that was serving. The timer is
37
+ # enabled either way — the updater's own state decides what the next run does —
38
+ # and the installer exits with the first run's status.
39
+ first_run=0
40
+ systemctl start rdc-skills-mcp-update.service || first_run=$?
41
+ systemctl enable --now rdc-skills-mcp-update.timer
42
+ systemctl --no-pager --full status rdc-skills-mcp.service || true
43
+ systemctl --no-pager list-timers rdc-skills-mcp-update.timer
44
+ journalctl -u rdc-skills-mcp-update.service -n 20 --no-pager || true
45
+ exit "$first_run"