@lifeaitools/rdc-skills 0.25.4 → 0.25.9

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 (71) hide show
  1. package/.claude-plugin/plugin.json +1574 -1528
  2. package/.github/workflows/self-test.yml +34 -34
  3. package/CHANGELOG.md +326 -313
  4. package/MANIFEST.md +224 -224
  5. package/README.md +372 -369
  6. package/RELEASE.md +26 -2
  7. package/commands/build.md +181 -181
  8. package/commands/collab.md +180 -180
  9. package/commands/deploy.md +148 -148
  10. package/commands/fixit.md +150 -150
  11. package/commands/handoff.md +173 -173
  12. package/commands/overnight.md +220 -220
  13. package/commands/plan.md +158 -158
  14. package/commands/preplan.md +131 -131
  15. package/commands/prototype.md +145 -145
  16. package/commands/report.md +99 -99
  17. package/commands/review.md +120 -120
  18. package/commands/status.md +86 -86
  19. package/commands/workitems.md +127 -127
  20. package/git-sha.json +1 -1
  21. package/guides/agent-bootstrap.md +195 -195
  22. package/guides/agents/backend.md +102 -102
  23. package/guides/agents/content.md +94 -94
  24. package/guides/agents/cs2.md +56 -56
  25. package/guides/agents/data.md +86 -86
  26. package/guides/agents/design.md +77 -77
  27. package/guides/agents/frontend.md +91 -91
  28. package/guides/agents/infrastructure.md +81 -81
  29. package/guides/agents/setup.md +272 -272
  30. package/guides/agents/verify.md +119 -119
  31. package/guides/agents/viz.md +106 -106
  32. package/hooks/check-rdc-environment.js +318 -164
  33. package/hooks/lib/box-lock.js +186 -0
  34. package/package.json +1 -1
  35. package/scripts/install-rdc-skills.js +1474 -1400
  36. package/scripts/local-install-with-stop.sh +41 -0
  37. package/scripts/probe-box-lock.mjs +179 -0
  38. package/scripts/probe-installed-hooks.mjs +60 -0
  39. package/scripts/probe-lock-holders.mjs +36 -0
  40. package/scripts/self-test.mjs +1459 -1459
  41. package/scripts/validate-publish-manifests.js +502 -502
  42. package/skills/build/SKILL.md +578 -578
  43. package/skills/channel-formatter/SKILL.md +538 -538
  44. package/skills/collab/SKILL.md +239 -239
  45. package/skills/convert/SKILL.md +150 -161
  46. package/skills/deploy/SKILL.md +541 -541
  47. package/skills/design/SKILL.md +205 -205
  48. package/skills/env/SKILL.md +139 -139
  49. package/skills/fixit/SKILL.md +203 -203
  50. package/skills/handoff/SKILL.md +236 -236
  51. package/skills/housekeeping/SKILL.md +189 -189
  52. package/skills/new-model/SKILL.md +14 -3
  53. package/skills/onramp/SKILL.md +1459 -1459
  54. package/skills/overnight/SKILL.md +251 -251
  55. package/skills/plan/SKILL.md +345 -345
  56. package/skills/preplan/SKILL.md +90 -90
  57. package/skills/prototype/SKILL.md +150 -150
  58. package/skills/regen-media/SKILL.md +94 -94
  59. package/skills/release/SKILL.md +140 -140
  60. package/skills/report/SKILL.md +100 -100
  61. package/skills/review/SKILL.md +151 -151
  62. package/skills/self-test/SKILL.md +108 -108
  63. package/skills/status/SKILL.md +99 -99
  64. package/skills/tests/MATRIX.md +55 -55
  65. package/skills/tests/onramp.test.json +87 -87
  66. package/skills/tests/rdc-regen-media.test.json +29 -29
  67. package/skills/watch/SKILL.md +84 -84
  68. package/skills/workitems/SKILL.md +151 -151
  69. package/tests/curl-surface.test.mjs +4 -2
  70. package/tests/help-surface.test.mjs +1 -1
  71. package/tests/install-rdc-skills.test.mjs +1 -1
@@ -1,189 +1,189 @@
1
- ---
2
- name: rdc:housekeeping
3
- description: "Usage `rdc:housekeeping [--fix]` — Weekly maintenance audit: directory structure verification, PUBLISH.md URL validation, CLAUDE.md freshness, orphan detection, places compliance, and stale version scan. Produces `.rdc/reports/YYYY-MM-DD-housekeeping.md`. With `--fix`, auto-remediate safe issues."
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`), then `{PROJECT_ROOT}/.rdc/guides/engineering-behavior.md` (fallback: `{PROJECT_ROOT}/.rdc/guides/engineering-behavior.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:housekeeping — Weekly Maintenance Audit
16
-
17
- ## When to Use
18
- - Weekly maintenance (Sunday or session start)
19
- - After large batch of new apps/packages/sites added
20
- - Before monthly `workspace-intelligence-audit`
21
- - When disoriented about repo health
22
- - Called by `rdc:overnight` as a pre-flight if `--housekeeping` flag set
23
-
24
- ## Arguments
25
- - `rdc:housekeeping` — audit only, report issues
26
- - `rdc:housekeeping --fix` — auto-remediate safe issues (scaffold missing CLAUDE.md, fix PUBLISH.md URLs, create missing tracker dirs)
27
-
28
- ## Procedure
29
-
30
- ### 1. Directory Structure Verification
31
-
32
- Scan every deployable target for required files:
33
-
34
- ```
35
- For each dir in apps/*, sites/*, models/*, workers/*, mcp-servers/*, packages/*:
36
- ```
37
-
38
- | Target Type | Required Files |
39
- |-------------|---------------|
40
- | Next.js app (`apps/*` with next.config) | `package.json`, `CLAUDE.md`, `PUBLISH.md`, `tsconfig.json` |
41
- | Vite SPA (`models/*`, `sites/*` with vite.config) | `package.json`, `CLAUDE.md`, `PUBLISH.md`, `vite.config.js` or `.ts`, `dist/` |
42
- | Static site (`sites/*` no vite/next) | `index.html`, `CLAUDE.md`, `PUBLISH.md` |
43
- | Worker (`workers/*`) | `package.json`, `CLAUDE.md`, `wrangler.toml`, `src/index.ts` |
44
- | MCP server (`mcp-servers/*`) | `package.json`, `CLAUDE.md`, `ARCHITECTURE.md`, `PUBLISH.md` |
45
- | Package (`packages/*`) | `package.json`, `CLAUDE.md`, `tsconfig.json`, `src/` |
46
-
47
- Report: `PASS` / `MISSING: <file list>` per target.
48
-
49
- **With `--fix`:** Scaffold missing CLAUDE.md files using package.json description + src/ inspection (same pattern as the 2026-06-08 audit). Do NOT auto-create PUBLISH.md (requires domain knowledge).
50
-
51
- ### 2. PUBLISH.md URL Validation
52
-
53
- For every PUBLISH.md that exists:
54
-
55
- 1. Parse frontmatter: extract `entity_slug`, `environments`, `status`
56
- 2. Query `app_deployments` for the slug:
57
- ```sql
58
- SELECT app_slug, environment, url, host_type FROM app_deployments WHERE app_slug = '<slug>';
59
- ```
60
- 3. Cross-reference: any URL mentioned in the PUBLISH.md body/notes/SURFACE blocks must match the `app_deployments.url` for that environment
61
- 4. Check domain convention compliance (per `.claude/rules/domain-conventions.md`):
62
- - Real estate projects → `*.dev.place.fund` (dev) / `*.place.fund` (prod)
63
- - Class-A brands → `dev.<brand>` (dev) / `<brand>` (prod)
64
- - Internal tools → `*.dev.regendevcorp.com` (dev) / `*.regendevcorp.com` (prod)
65
- 5. Flag mismatches: `MISMATCH: PUBLISH.md says <X>, app_deployments says <Y>`
66
-
67
- **With `--fix`:** Update PUBLISH.md URLs to match app_deployments (the DB is the source of truth).
68
-
69
- ### 3. CLAUDE.md Freshness Check
70
-
71
- For each package with a CLAUDE.md:
72
- 1. Get CLAUDE.md last modified date
73
- 2. Get latest src/ modification date
74
- 3. If src/ changed after CLAUDE.md by >30 days, flag: `STALE: CLAUDE.md older than src/ by <N> days`
75
- 4. Check if new exports were added to `src/index.ts` that aren't mentioned in CLAUDE.md
76
-
77
- **With `--fix`:** Re-scaffold CLAUDE.md from current src/ state.
78
-
79
- ### 4. Package.json Health
80
-
81
- For each package:
82
- 1. Check `version` — flag `0.0.0` or `0.1.0` on packages with >5 src files as potentially stale
83
- 2. Check `exports` field exists (required for monorepo packages)
84
- 3. Check `name` matches `@regen/<dir-name>` or `@lifeai/<dir-name>` convention
85
- 4. Flag name mismatches between directory and package.json
86
-
87
- ### 5. Places Compliance
88
-
89
- For each directory under `places/`:
90
- 1. Check PLACE.md exists with valid frontmatter (`schema_version`, `prt_slug`, `project_type`, `research_status`)
91
- 2. Check HISTORY.md exists (required for real-estate project types per `.claude/rules/history-md-convention.md`)
92
- 3. Check `corpus/INDEX.md` exists
93
- 4. Check `tracker/` directory exists with DECISIONS.md + MILESTONES.md
94
- 5. Check `artifacts/` directory exists
95
-
96
- **With `--fix`:** Scaffold missing PLACE.md from HISTORY.md frontmatter, create missing tracker/corpus dirs.
97
-
98
- ### 6. Orphan Detection
99
-
100
- 1. **Empty/stub directories:** Any target dir with <3 files and no package.json → flag for removal
101
- 2. **Standalone repo drift:** Check `C:/Dev/` for repos that have monorepo copies and compare versions
102
- 3. **Dead app_deployments rows:** Query for slugs with `status='down'` or `status='broken'`
103
-
104
- ### 7. Stale Coolify Apps on .dev URLs
105
-
106
- Query Coolify API for apps serving `.dev.*` URLs — these should be on PM2 per domain conventions:
107
- ```bash
108
- TOKEN=$(curl -s http://127.0.0.1:52437/v/coolify-api)
109
- curl -s -H "Authorization: Bearer $TOKEN" "https://deploy.regendevcorp.com/api/v1/applications" | \
110
- python3 -c "import sys,json; [print(a['name'], a.get('fqdn','')) for a in json.load(sys.stdin) if '.dev.' in (a.get('fqdn',''))]"
111
- ```
112
-
113
- Flag any .dev apps still on Coolify.
114
-
115
- ### 8. Media CDN Hotlink Allowlist
116
-
117
- Read `workers/media-cdn/src/index.ts` ALLOWED_SUFFIXES. Cross-reference against all class-A brand domains from `app_deployments`:
118
- ```sql
119
- SELECT DISTINCT url FROM app_deployments WHERE host_type = 'coolify' AND url NOT LIKE '%.place.fund' AND url NOT LIKE '%.regendevcorp.com';
120
- ```
121
-
122
- Flag any class-A domain NOT in ALLOWED_SUFFIXES.
123
-
124
- **With `--fix`:** Add missing suffixes to ALLOWED_SUFFIXES and redeploy the worker.
125
-
126
- ### 9. Report
127
-
128
- Write to `.rdc/reports/YYYY-MM-DD-housekeeping.md`:
129
-
130
- ```markdown
131
- # Housekeeping Report — YYYY-MM-DD
132
-
133
- ## Summary
134
- | Check | Pass | Fail | Fixed |
135
- |-------|------|------|-------|
136
-
137
- ## Directory Structure
138
- <table of targets with issues>
139
-
140
- ## PUBLISH.md URL Validation
141
- <table of mismatches>
142
-
143
- ## CLAUDE.md Freshness
144
- <stale entries>
145
-
146
- ## Package Health
147
- <version/exports/naming issues>
148
-
149
- ## Places Compliance
150
- <incomplete places>
151
-
152
- ## Orphans
153
- <empty dirs, dead deployments>
154
-
155
- ## Media CDN
156
- <missing allowlist entries>
157
-
158
- ## Verdict: CLEAN / HAS_ISSUES
159
- ```
160
-
161
- ## Lessons triage (weekly)
162
-
163
- Read all `.rdc/lessons/*.md` with `status: open` (schema + procedure: `.rdc/guides/lessons-learned-spec.md` § Triage procedure). Cluster by `area` + root-cause similarity (dedupe repeats into one fix).
164
-
165
- ### Attended mode (default — a human is present)
166
-
167
- For each cluster:
168
-
169
- - `scope: simple` → apply the fix directly (rule line, skill-doc edit, config, guard), commit it, set the lesson(s) `status: applied` with the commit linked.
170
- - `scope: architectural` → do NOT edit. Present the issue + options via `AskUserQuestion` (per `.claude/rules/architectural-change-approval.md`). On approval, apply via the correct lifecycle (rdc-skills tag/push for skills; cited commit for rules) and set `status: applied`. If deferred, set `status: triaged` and spawn a `work_item`.
171
- - Not worth fixing → `status: wont-fix` with a one-line reason.
172
-
173
- ### Unattended mode (no human — overnight / cron / `rdc:overnight`)
174
-
175
- When the weekly triage runs unattended, follow `.rdc/guides/lessons-learned-spec.md` § **Triage procedure — UNATTENDED weekly mode** — do not run `AskUserQuestion`. In brief (the spec is authoritative):
176
-
177
- - **Per-difficulty model routing** (reuses the `rdc:build` table): the run is led by `claude-sonnet-5` for clustering + scope/difficulty triage; mechanical apply → `claude-haiku-4-5`; harder multi-file/migration fix → `claude-sonnet-5`; design/architectural fix → `claude-opus-5`.
178
- - `scope: simple` → apply directly or via `rdc:fixit`, commit, `status: applied`.
179
- - `scope: architectural` with a single clear correct fix (records an already-learned lesson — e.g. "document X", "add a gate", update a guide) → route through `rdc:plan` → `rdc:build` (or `rdc:fixit` if genuinely <5 files), update the documentation, set `status: applied`/`triaged`.
180
- - `scope: architectural` **and genuinely ambiguous** (multiple valid approaches, real tradeoffs) → write a `human_items` row (`item_type='decision'`, with options in `suggested_agent_prompt`, `source_type='lesson'`, `source_fingerprint` for dedupe), set `status: triaged`, spawn + link a `work_item`. Decided in the morning. This is the asynchronous equivalent of the attended interview and honors `.claude/rules/architectural-change-approval.md`.
181
-
182
- Never delete lesson files — `applied` and `wont-fix` stay as the audit trail. Report captured / applied / escalated / deferred counts in the housekeeping report.
183
-
184
- ## Rules
185
- - Never run `pnpm build` — not needed for this audit
186
- - Never modify app_deployments — the DB is the source of truth; PUBLISH.md conforms to it
187
- - The `--fix` flag only auto-remediates safe issues (CLAUDE.md scaffold, missing dirs, URL alignment)
188
- - Architectural changes (name mismatches, dead package removal) are always flagged, never auto-fixed
189
- - This skill is read-heavy, write-light — most runs are audit-only
1
+ ---
2
+ name: rdc:housekeeping
3
+ description: "Usage `rdc:housekeeping [--fix]` — Weekly maintenance audit: directory structure verification, PUBLISH.md URL validation, CLAUDE.md freshness, orphan detection, places compliance, and stale version scan. Produces `.rdc/reports/YYYY-MM-DD-housekeeping.md`. With `--fix`, auto-remediate safe issues."
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`), then `{PROJECT_ROOT}/.rdc/guides/engineering-behavior.md` (fallback: `{PROJECT_ROOT}/.rdc/guides/engineering-behavior.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:housekeeping — Weekly Maintenance Audit
16
+
17
+ ## When to Use
18
+ - Weekly maintenance (Sunday or session start)
19
+ - After large batch of new apps/packages/sites added
20
+ - Before monthly `workspace-intelligence-audit`
21
+ - When disoriented about repo health
22
+ - Called by `rdc:overnight` as a pre-flight if `--housekeeping` flag set
23
+
24
+ ## Arguments
25
+ - `rdc:housekeeping` — audit only, report issues
26
+ - `rdc:housekeeping --fix` — auto-remediate safe issues (scaffold missing CLAUDE.md, fix PUBLISH.md URLs, create missing tracker dirs)
27
+
28
+ ## Procedure
29
+
30
+ ### 1. Directory Structure Verification
31
+
32
+ Scan every deployable target for required files:
33
+
34
+ ```
35
+ For each dir in apps/*, sites/*, models/*, workers/*, mcp-servers/*, packages/*:
36
+ ```
37
+
38
+ | Target Type | Required Files |
39
+ |-------------|---------------|
40
+ | Next.js app (`apps/*` with next.config) | `package.json`, `CLAUDE.md`, `PUBLISH.md`, `tsconfig.json` |
41
+ | Vite SPA (`models/*`, `sites/*` with vite.config) | `package.json`, `CLAUDE.md`, `PUBLISH.md`, `vite.config.js` or `.ts`, `dist/` |
42
+ | Static site (`sites/*` no vite/next) | `index.html`, `CLAUDE.md`, `PUBLISH.md` |
43
+ | Worker (`workers/*`) | `package.json`, `CLAUDE.md`, `wrangler.toml`, `src/index.ts` |
44
+ | MCP server (`mcp-servers/*`) | `package.json`, `CLAUDE.md`, `ARCHITECTURE.md`, `PUBLISH.md` |
45
+ | Package (`packages/*`) | `package.json`, `CLAUDE.md`, `tsconfig.json`, `src/` |
46
+
47
+ Report: `PASS` / `MISSING: <file list>` per target.
48
+
49
+ **With `--fix`:** Scaffold missing CLAUDE.md files using package.json description + src/ inspection (same pattern as the 2026-06-08 audit). Do NOT auto-create PUBLISH.md (requires domain knowledge).
50
+
51
+ ### 2. PUBLISH.md URL Validation
52
+
53
+ For every PUBLISH.md that exists:
54
+
55
+ 1. Parse frontmatter: extract `entity_slug`, `environments`, `status`
56
+ 2. Query `app_deployments` for the slug:
57
+ ```sql
58
+ SELECT app_slug, environment, url, host_type FROM app_deployments WHERE app_slug = '<slug>';
59
+ ```
60
+ 3. Cross-reference: any URL mentioned in the PUBLISH.md body/notes/SURFACE blocks must match the `app_deployments.url` for that environment
61
+ 4. Check domain convention compliance (per `.claude/rules/domain-conventions.md`):
62
+ - Real estate projects → `*.dev.place.fund` (dev) / `*.place.fund` (prod)
63
+ - Class-A brands → `dev.<brand>` (dev) / `<brand>` (prod)
64
+ - Internal tools → `*.dev.regendevcorp.com` (dev) / `*.regendevcorp.com` (prod)
65
+ 5. Flag mismatches: `MISMATCH: PUBLISH.md says <X>, app_deployments says <Y>`
66
+
67
+ **With `--fix`:** Update PUBLISH.md URLs to match app_deployments (the DB is the source of truth).
68
+
69
+ ### 3. CLAUDE.md Freshness Check
70
+
71
+ For each package with a CLAUDE.md:
72
+ 1. Get CLAUDE.md last modified date
73
+ 2. Get latest src/ modification date
74
+ 3. If src/ changed after CLAUDE.md by >30 days, flag: `STALE: CLAUDE.md older than src/ by <N> days`
75
+ 4. Check if new exports were added to `src/index.ts` that aren't mentioned in CLAUDE.md
76
+
77
+ **With `--fix`:** Re-scaffold CLAUDE.md from current src/ state.
78
+
79
+ ### 4. Package.json Health
80
+
81
+ For each package:
82
+ 1. Check `version` — flag `0.0.0` or `0.1.0` on packages with >5 src files as potentially stale
83
+ 2. Check `exports` field exists (required for monorepo packages)
84
+ 3. Check `name` matches `@regen/<dir-name>` or `@lifeai/<dir-name>` convention
85
+ 4. Flag name mismatches between directory and package.json
86
+
87
+ ### 5. Places Compliance
88
+
89
+ For each directory under `places/`:
90
+ 1. Check PLACE.md exists with valid frontmatter (`schema_version`, `prt_slug`, `project_type`, `research_status`)
91
+ 2. Check HISTORY.md exists (required for real-estate project types per `.claude/rules/history-md-convention.md`)
92
+ 3. Check `corpus/INDEX.md` exists
93
+ 4. Check `tracker/` directory exists with DECISIONS.md + MILESTONES.md
94
+ 5. Check `artifacts/` directory exists
95
+
96
+ **With `--fix`:** Scaffold missing PLACE.md from HISTORY.md frontmatter, create missing tracker/corpus dirs.
97
+
98
+ ### 6. Orphan Detection
99
+
100
+ 1. **Empty/stub directories:** Any target dir with <3 files and no package.json → flag for removal
101
+ 2. **Standalone repo drift:** Check `C:/Dev/` for repos that have monorepo copies and compare versions
102
+ 3. **Dead app_deployments rows:** Query for slugs with `status='down'` or `status='broken'`
103
+
104
+ ### 7. Stale Coolify Apps on .dev URLs
105
+
106
+ Query Coolify API for apps serving `.dev.*` URLs — these should be on PM2 per domain conventions:
107
+ ```bash
108
+ TOKEN=$(curl -s http://127.0.0.1:52437/v/coolify-api)
109
+ curl -s -H "Authorization: Bearer $TOKEN" "https://deploy.regendevcorp.com/api/v1/applications" | \
110
+ python3 -c "import sys,json; [print(a['name'], a.get('fqdn','')) for a in json.load(sys.stdin) if '.dev.' in (a.get('fqdn',''))]"
111
+ ```
112
+
113
+ Flag any .dev apps still on Coolify.
114
+
115
+ ### 8. Media CDN Hotlink Allowlist
116
+
117
+ Read `workers/media-cdn/src/index.ts` ALLOWED_SUFFIXES. Cross-reference against all class-A brand domains from `app_deployments`:
118
+ ```sql
119
+ SELECT DISTINCT url FROM app_deployments WHERE host_type = 'coolify' AND url NOT LIKE '%.place.fund' AND url NOT LIKE '%.regendevcorp.com';
120
+ ```
121
+
122
+ Flag any class-A domain NOT in ALLOWED_SUFFIXES.
123
+
124
+ **With `--fix`:** Add missing suffixes to ALLOWED_SUFFIXES and redeploy the worker.
125
+
126
+ ### 9. Report
127
+
128
+ Write to `.rdc/reports/YYYY-MM-DD-housekeeping.md`:
129
+
130
+ ```markdown
131
+ # Housekeeping Report — YYYY-MM-DD
132
+
133
+ ## Summary
134
+ | Check | Pass | Fail | Fixed |
135
+ |-------|------|------|-------|
136
+
137
+ ## Directory Structure
138
+ <table of targets with issues>
139
+
140
+ ## PUBLISH.md URL Validation
141
+ <table of mismatches>
142
+
143
+ ## CLAUDE.md Freshness
144
+ <stale entries>
145
+
146
+ ## Package Health
147
+ <version/exports/naming issues>
148
+
149
+ ## Places Compliance
150
+ <incomplete places>
151
+
152
+ ## Orphans
153
+ <empty dirs, dead deployments>
154
+
155
+ ## Media CDN
156
+ <missing allowlist entries>
157
+
158
+ ## Verdict: CLEAN / HAS_ISSUES
159
+ ```
160
+
161
+ ## Lessons triage (weekly)
162
+
163
+ Read all `.rdc/lessons/*.md` with `status: open` (schema + procedure: `.rdc/guides/lessons-learned-spec.md` § Triage procedure). Cluster by `area` + root-cause similarity (dedupe repeats into one fix).
164
+
165
+ ### Attended mode (default — a human is present)
166
+
167
+ For each cluster:
168
+
169
+ - `scope: simple` → apply the fix directly (rule line, skill-doc edit, config, guard), commit it, set the lesson(s) `status: applied` with the commit linked.
170
+ - `scope: architectural` → do NOT edit. Present the issue + options via `AskUserQuestion` (per `.claude/rules/architectural-change-approval.md`). On approval, apply via the correct lifecycle (rdc-skills tag/push for skills; cited commit for rules) and set `status: applied`. If deferred, set `status: triaged` and spawn a `work_item`.
171
+ - Not worth fixing → `status: wont-fix` with a one-line reason.
172
+
173
+ ### Unattended mode (no human — overnight / cron / `rdc:overnight`)
174
+
175
+ When the weekly triage runs unattended, follow `.rdc/guides/lessons-learned-spec.md` § **Triage procedure — UNATTENDED weekly mode** — do not run `AskUserQuestion`. In brief (the spec is authoritative):
176
+
177
+ - **Per-difficulty model routing** (reuses the `rdc:build` table): the run is led by `claude-sonnet-5` for clustering + scope/difficulty triage; mechanical apply → `claude-haiku-4-5`; harder multi-file/migration fix → `claude-sonnet-5`; design/architectural fix → `claude-opus-5`.
178
+ - `scope: simple` → apply directly or via `rdc:fixit`, commit, `status: applied`.
179
+ - `scope: architectural` with a single clear correct fix (records an already-learned lesson — e.g. "document X", "add a gate", update a guide) → route through `rdc:plan` → `rdc:build` (or `rdc:fixit` if genuinely <5 files), update the documentation, set `status: applied`/`triaged`.
180
+ - `scope: architectural` **and genuinely ambiguous** (multiple valid approaches, real tradeoffs) → write a `human_items` row (`item_type='decision'`, with options in `suggested_agent_prompt`, `source_type='lesson'`, `source_fingerprint` for dedupe), set `status: triaged`, spawn + link a `work_item`. Decided in the morning. This is the asynchronous equivalent of the attended interview and honors `.claude/rules/architectural-change-approval.md`.
181
+
182
+ Never delete lesson files — `applied` and `wont-fix` stay as the audit trail. Report captured / applied / escalated / deferred counts in the housekeeping report.
183
+
184
+ ## Rules
185
+ - Never run `pnpm build` — not needed for this audit
186
+ - Never modify app_deployments — the DB is the source of truth; PUBLISH.md conforms to it
187
+ - The `--fix` flag only auto-remediates safe issues (CLAUDE.md scaffold, missing dirs, URL alignment)
188
+ - Architectural changes (name mismatches, dead package removal) are always flagged, never auto-fixed
189
+ - This skill is read-heavy, write-light — most runs are audit-only
@@ -1,16 +1,27 @@
1
1
  ---
2
2
  name: new-model
3
+ triggers:
4
+ - rdc:new-model
5
+ - rdc new model
6
+ - create model
7
+ - new reference model
8
+ - add a model
9
+ - register model
10
+ - new model for
11
+ - model registration check
3
12
  description: >
4
13
  Register a new Reference Model completely — the yes/no gate that prevents half-registered models.
5
14
  A reference model is DEFINED as registered in all four homes: (1) RPMS project_nodes row
6
15
  (node_type=reference_model), (2) apps/vlas route group /models/<slug>, (3) apps/vlas
7
16
  src/data/models/<slug> definitions, (4) global-corpus Drive directory. If ANY of the four is
8
17
  missing, the model does not exist yet — run this skill.
9
- TRIGGER: 'rdc:new-model', 'rdc new model', 'create model', 'new reference model', 'add a model',
10
- 'register model', 'new model for', 'model for conservation easements', 'is this model registered',
11
- 'model registration check'.
18
+ Trigger when asked to create, register, or check whether a reference model exists.
12
19
  ---
13
20
 
21
+ > **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
22
+ > Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
23
+ > One checklist upfront, updated in place, shown again at end with a 1-line verdict.
24
+
14
25
  # rdc:new-model — Reference Model Registration (complete or not at all)
15
26
 
16
27
  ## When to run