@lifeaitools/rdc-skills 0.13.7 → 0.15.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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rdc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
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",
|
|
@@ -37,19 +37,56 @@
|
|
|
37
37
|
"usage": "rdc:brochure <input> [--out path] [--template name] [--format Letter|A4]",
|
|
38
38
|
"args": {
|
|
39
39
|
"positional": [
|
|
40
|
-
{
|
|
40
|
+
{
|
|
41
|
+
"name": "input",
|
|
42
|
+
"required": true,
|
|
43
|
+
"description": "Path to .zip, folder, .html, .md, or http(s)://... URL",
|
|
44
|
+
"accepts": "path|url"
|
|
45
|
+
}
|
|
41
46
|
],
|
|
42
47
|
"flags": [
|
|
43
|
-
{
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
{
|
|
49
|
+
"name": "--out",
|
|
50
|
+
"type": "path",
|
|
51
|
+
"default": null,
|
|
52
|
+
"description": "Output PDF path. Defaults to <input-basename>.pdf next to the input."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "--template",
|
|
56
|
+
"type": "string",
|
|
57
|
+
"default": "studio-default",
|
|
58
|
+
"description": "Compose-mode template (scaffold/templates/brochure-<name>.html)."
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "--format",
|
|
62
|
+
"type": "string",
|
|
63
|
+
"default": "Letter",
|
|
64
|
+
"description": "Page size: Letter or A4."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "--margin",
|
|
68
|
+
"type": "string",
|
|
69
|
+
"default": null,
|
|
70
|
+
"description": "Override CSS @page margin (e.g. \"0.5in\")."
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "--no-print-emulate",
|
|
74
|
+
"type": "bool",
|
|
75
|
+
"default": false,
|
|
76
|
+
"description": "Render with screen media instead of print."
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "--keep-workdir",
|
|
80
|
+
"type": "bool",
|
|
81
|
+
"default": false,
|
|
82
|
+
"description": "Keep the staged working directory for inspection."
|
|
83
|
+
}
|
|
49
84
|
]
|
|
50
85
|
},
|
|
51
86
|
"requires": [],
|
|
52
|
-
"produces": [
|
|
87
|
+
"produces": [
|
|
88
|
+
"pdf_artifact"
|
|
89
|
+
],
|
|
53
90
|
"default_model": "sonnet",
|
|
54
91
|
"triggers": [
|
|
55
92
|
"make a brochure",
|
|
@@ -917,6 +954,49 @@
|
|
|
917
954
|
"enabled_default": true,
|
|
918
955
|
"codeflow_required": false
|
|
919
956
|
},
|
|
957
|
+
"housekeeping": {
|
|
958
|
+
"name": "housekeeping",
|
|
959
|
+
"slash": "rdc:housekeeping",
|
|
960
|
+
"category": "reporting",
|
|
961
|
+
"usage": "rdc:housekeeping [--fix]",
|
|
962
|
+
"args": {
|
|
963
|
+
"positional": [],
|
|
964
|
+
"flags": [
|
|
965
|
+
{
|
|
966
|
+
"name": "--fix",
|
|
967
|
+
"type": "boolean",
|
|
968
|
+
"default": false,
|
|
969
|
+
"description": "Auto-remediate safe issues (scaffold CLAUDE.md, fix PUBLISH.md URLs, create missing dirs)"
|
|
970
|
+
}
|
|
971
|
+
]
|
|
972
|
+
},
|
|
973
|
+
"requires": [
|
|
974
|
+
"supabase",
|
|
975
|
+
"clauth",
|
|
976
|
+
"coolify",
|
|
977
|
+
"git"
|
|
978
|
+
],
|
|
979
|
+
"produces": [
|
|
980
|
+
".rdc/reports/"
|
|
981
|
+
],
|
|
982
|
+
"default_model": "sonnet",
|
|
983
|
+
"triggers": [
|
|
984
|
+
"weekly maintenance",
|
|
985
|
+
"housekeeping",
|
|
986
|
+
"directory structure audit",
|
|
987
|
+
"verify all apps",
|
|
988
|
+
"check repo health",
|
|
989
|
+
"maintenance audit"
|
|
990
|
+
],
|
|
991
|
+
"follows": [],
|
|
992
|
+
"leads_to": [
|
|
993
|
+
"review"
|
|
994
|
+
],
|
|
995
|
+
"sandbox_aware": true,
|
|
996
|
+
"output_contract": "guides/output-contract.md",
|
|
997
|
+
"enabled_default": true,
|
|
998
|
+
"codeflow_required": false
|
|
999
|
+
},
|
|
920
1000
|
"status": {
|
|
921
1001
|
"name": "status",
|
|
922
1002
|
"slash": "rdc:status",
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Truth-Gain Escalation Protocol — Claude ↔ Codex
|
|
2
|
+
|
|
3
|
+
> Shared governance protocol for peer agent collaboration. Referenced by
|
|
4
|
+
> `rdc:co-develop` and (when built) `rdc:ccandme`.
|
|
5
|
+
> Approved: option-1 — shared guide + ref from both skills; trigger = two
|
|
6
|
+
> consecutive sub-threshold rounds. Interview: 2026-06-07 in this session.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
Two capable agents debating a question can spend unbounded rounds for shrinking
|
|
13
|
+
returns. This protocol bounds the debate: when an exchange stops materially
|
|
14
|
+
moving the answer, the agents **stop arguing and decide** — via a scored rubric
|
|
15
|
+
for ordinary decisions, or by escalating to the human for critical ones. Every
|
|
16
|
+
decision leaves an auditable record (bridge-mode Rule 4: deterministic,
|
|
17
|
+
replayable, human-in-the-loop).
|
|
18
|
+
|
|
19
|
+
It governs any governed co-development or deep-planning exchange:
|
|
20
|
+
|
|
21
|
+
- `rdc:co-develop` — headless clauth/HTTP JSON-envelope transport
|
|
22
|
+
- `rdc:ccandme` — visible WezTerm routing (proposed)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 1. Truth-gain (Δ) per round
|
|
27
|
+
|
|
28
|
+
After each peer round, the **receiving** agent rates the round's marginal
|
|
29
|
+
truth-gain:
|
|
30
|
+
|
|
31
|
+
> **Δ = the fraction of remaining decision-relevant uncertainty that this
|
|
32
|
+
> exchange actually closed** — through new evidence, a corrected error, a
|
|
33
|
+
> resolved disagreement, or a narrowed option set.
|
|
34
|
+
|
|
35
|
+
Δ measures whether the **answer moved**, not whether the agents talked.
|
|
36
|
+
Restating a position, agreeing without adding, or circling = Δ ≈ 0.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 2. Stop trigger — two consecutive sub-5% rounds
|
|
41
|
+
|
|
42
|
+
A round is **sub-threshold** only when **both** agents independently rate
|
|
43
|
+
Δ < 5%. If either agent still sees ≥ 5% gain, the dialogue continues — this
|
|
44
|
+
resolves "who owns Δ?": neither agent owns it unilaterally; the debate stops
|
|
45
|
+
only when both agree it is thin.
|
|
46
|
+
|
|
47
|
+
The trigger fires after **two consecutive sub-threshold rounds**. One thin round
|
|
48
|
+
can be rescued by a strong follow-up; two in a row means the dialogue has
|
|
49
|
+
converged or stalled.
|
|
50
|
+
|
|
51
|
+
Convergence counts: mutual agreement at Δ < 5% is a valid stop (the answer is
|
|
52
|
+
settled, not stalled). Record it as a decision and proceed — no rubric needed.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 3. On trigger → scored rubric (stop debating)
|
|
57
|
+
|
|
58
|
+
When the trigger fires on an *unresolved* question, do **not** keep debating.
|
|
59
|
+
Jointly construct a rubric:
|
|
60
|
+
|
|
61
|
+
1. **Enumerate live options**, including the status quo / do-nothing.
|
|
62
|
+
2. **Define 3–6 weighted criteria.** Default set: correctness, reversibility,
|
|
63
|
+
bridge-mode fit, cost, risk, time. Weights sum to 1.0.
|
|
64
|
+
3. **Each agent scores every option independently** (no peeking at the peer's
|
|
65
|
+
sheet) on each criterion.
|
|
66
|
+
4. **Combine** by weighted sum; the higher combined score wins.
|
|
67
|
+
5. **Record both scoresheets** verbatim as evidence — they are the audit trail.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 4. Criticality gate
|
|
72
|
+
|
|
73
|
+
Classify the pending decision:
|
|
74
|
+
|
|
75
|
+
- **Non-critical** → adopt the rubric winner. Record the decision plus both
|
|
76
|
+
scoresheets. Proceed.
|
|
77
|
+
- **Critical** → do **not** auto-adopt. Escalate **HITL** (human-in-the-loop):
|
|
78
|
+
emit a human decision item containing the rubric, both scoresheets,
|
|
79
|
+
agreements, disagreements, and a single recommendation. Then **wait** for the
|
|
80
|
+
human's decision.
|
|
81
|
+
|
|
82
|
+
### Critical = any of:
|
|
83
|
+
|
|
84
|
+
- a trigger in `.claude/rules/architectural-change-approval.md`
|
|
85
|
+
- production / deploy-facing change
|
|
86
|
+
- security / credentials
|
|
87
|
+
- destructive schema (DROP / RENAME / reshape)
|
|
88
|
+
- money, credits, valuations
|
|
89
|
+
- governance or source-of-truth definition
|
|
90
|
+
- **rubric tie**, or agents still diverge past a one-rank margin after scoring
|
|
91
|
+
- high irreversibility (hard or impossible to undo)
|
|
92
|
+
|
|
93
|
+
When in doubt, treat it as critical.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 5. HITL sink — interim reality
|
|
98
|
+
|
|
99
|
+
The intended sink is the `human_items` **decision table** described in
|
|
100
|
+
`docs/systems/claude-workflow/HUMAN-INBOX.md`.
|
|
101
|
+
|
|
102
|
+
**As of 2026-06-07 that table is not built** (verified: no `human_items`
|
|
103
|
+
relation exists; only `codeflow_policy_decisions`). Until it ships:
|
|
104
|
+
|
|
105
|
+
- HITL = surface the rubric + both scoresheets + recommendation to Dave
|
|
106
|
+
in-session, and record it as a `work_item` note and/or CodeFlow memory.
|
|
107
|
+
- Migrate these records to `human_items` decision rows once that surface exists.
|
|
108
|
+
|
|
109
|
+
Do **not** treat the missing table as a reason to auto-adopt a critical
|
|
110
|
+
decision (bridge-mode: absence of an artifact is not licence for drift —
|
|
111
|
+
build/route around it, keep the human in the loop).
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Acceptance criteria
|
|
116
|
+
|
|
117
|
+
A session that uses this protocol must, in its report, show:
|
|
118
|
+
|
|
119
|
+
1. Δ ratings per round from both agents (or a note that convergence was reached).
|
|
120
|
+
2. If the trigger fired: the rubric — options, weighted criteria, both
|
|
121
|
+
scoresheets, combined result.
|
|
122
|
+
3. The criticality classification and which trigger(s) matched.
|
|
123
|
+
4. For critical decisions: the HITL record (human item / interim note) and the
|
|
124
|
+
human's decision, or `status: awaiting_human`.
|
|
125
|
+
5. No critical decision auto-adopted without a human decision on record.
|
package/package.json
CHANGED
|
@@ -158,6 +158,19 @@ Invoke co-development when:
|
|
|
158
158
|
Do not invoke by default for simple read-only explanations, one-line command
|
|
159
159
|
output, one-file typo fixes, or already decomposed low-risk work.
|
|
160
160
|
|
|
161
|
+
## In-Session Escalation — Truth-Gain Protocol
|
|
162
|
+
|
|
163
|
+
Once a co-development session is running, bound the debate with the shared
|
|
164
|
+
escalation protocol: `guides/escalation-protocol.md`.
|
|
165
|
+
|
|
166
|
+
In short: after each peer round, both agents rate marginal truth-gain (Δ). When
|
|
167
|
+
two consecutive rounds are sub-5% for both agents, stop debating and decide —
|
|
168
|
+
build a scored rubric (options × weighted criteria, both scoresheets recorded).
|
|
169
|
+
Non-critical decisions adopt the rubric winner; critical decisions escalate HITL
|
|
170
|
+
to the human decision table (interim: surface to Dave + record as work-item
|
|
171
|
+
note / CodeFlow memory until `human_items` ships). See the guide for the full
|
|
172
|
+
criticality list and acceptance criteria.
|
|
173
|
+
|
|
161
174
|
## Workflow
|
|
162
175
|
|
|
163
176
|
1. Start or resume a session with `codevelop_start` / `codevelop_join`.
|
|
@@ -0,0 +1,166 @@
|
|
|
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
|
+
## Rules
|
|
162
|
+
- Never run `pnpm build` — not needed for this audit
|
|
163
|
+
- Never modify app_deployments — the DB is the source of truth; PUBLISH.md conforms to it
|
|
164
|
+
- The `--fix` flag only auto-remediates safe issues (CLAUDE.md scaffold, missing dirs, URL alignment)
|
|
165
|
+
- Architectural changes (name mismatches, dead package removal) are always flagged, never auto-fixed
|
|
166
|
+
- This skill is read-heavy, write-light — most runs are audit-only
|