@lifeaitools/rdc-skills 0.25.5 → 0.25.10

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 (66) hide show
  1. package/.claude-plugin/plugin.json +1550 -1550
  2. package/.github/workflows/self-test.yml +34 -34
  3. package/CHANGELOG.md +319 -319
  4. package/MANIFEST.md +224 -224
  5. package/README.md +367 -367
  6. package/commands/build.md +181 -181
  7. package/commands/collab.md +180 -180
  8. package/commands/deploy.md +148 -148
  9. package/commands/fixit.md +150 -150
  10. package/commands/handoff.md +173 -173
  11. package/commands/overnight.md +220 -220
  12. package/commands/plan.md +158 -158
  13. package/commands/preplan.md +131 -131
  14. package/commands/prototype.md +145 -145
  15. package/commands/report.md +99 -99
  16. package/commands/review.md +120 -120
  17. package/commands/status.md +86 -86
  18. package/commands/workitems.md +127 -127
  19. package/git-sha.json +1 -1
  20. package/guides/agent-bootstrap.md +195 -195
  21. package/guides/agents/backend.md +102 -102
  22. package/guides/agents/content.md +94 -94
  23. package/guides/agents/cs2.md +56 -56
  24. package/guides/agents/data.md +86 -86
  25. package/guides/agents/design.md +77 -77
  26. package/guides/agents/frontend.md +91 -91
  27. package/guides/agents/infrastructure.md +81 -81
  28. package/guides/agents/setup.md +272 -272
  29. package/guides/agents/verify.md +119 -119
  30. package/guides/agents/viz.md +106 -106
  31. package/hooks/check-rdc-environment.js +378 -164
  32. package/hooks/lib/box-lock.js +207 -0
  33. package/package.json +1 -1
  34. package/scripts/install-rdc-skills.js +97 -8
  35. package/scripts/local-install-with-stop.sh +41 -0
  36. package/scripts/probe-box-lock.mjs +179 -0
  37. package/scripts/probe-installed-hooks.mjs +60 -0
  38. package/scripts/probe-lock-holders.mjs +36 -0
  39. package/scripts/self-test.mjs +1459 -1459
  40. package/scripts/validate-publish-manifests.js +502 -502
  41. package/skills/build/SKILL.md +578 -578
  42. package/skills/channel-formatter/SKILL.md +538 -538
  43. package/skills/collab/SKILL.md +239 -239
  44. package/skills/convert/SKILL.md +138 -138
  45. package/skills/deploy/SKILL.md +541 -541
  46. package/skills/design/SKILL.md +205 -205
  47. package/skills/env/SKILL.md +139 -139
  48. package/skills/fixit/SKILL.md +203 -203
  49. package/skills/handoff/SKILL.md +236 -236
  50. package/skills/housekeeping/SKILL.md +189 -189
  51. package/skills/onramp/SKILL.md +1459 -1459
  52. package/skills/overnight/SKILL.md +251 -251
  53. package/skills/plan/SKILL.md +345 -345
  54. package/skills/preplan/SKILL.md +90 -90
  55. package/skills/prototype/SKILL.md +150 -150
  56. package/skills/regen-media/SKILL.md +94 -94
  57. package/skills/release/SKILL.md +140 -140
  58. package/skills/report/SKILL.md +100 -100
  59. package/skills/review/SKILL.md +151 -151
  60. package/skills/self-test/SKILL.md +108 -108
  61. package/skills/status/SKILL.md +99 -99
  62. package/skills/tests/MATRIX.md +55 -55
  63. package/skills/tests/onramp.test.json +87 -87
  64. package/skills/tests/rdc-regen-media.test.json +29 -29
  65. package/skills/watch/SKILL.md +84 -84
  66. package/skills/workitems/SKILL.md +151 -151
@@ -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