@lifeaitools/rdc-skills 0.24.42 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +15 -15
- package/.claude-plugin/marketplace.json +21 -21
- package/.claude-plugin/plugin.json +1560 -1371
- package/.github/workflows/publish.yml +34 -34
- package/.github/workflows/self-test.yml +58 -58
- package/CHANGELOG.md +322 -310
- package/LICENSE +21 -21
- package/MANIFEST.md +224 -221
- package/README.md +377 -376
- package/README.sandbox.md +3 -3
- package/assets/watcher/viewer.html +164 -164
- package/bin/rdc-skills-mcp.mjs +316 -316
- package/commands/build.md +183 -183
- package/commands/collab.md +180 -180
- package/commands/deploy.md +152 -152
- package/commands/design.md +31 -31
- package/commands/edit.md +28 -28
- package/commands/fixit.md +150 -124
- package/commands/handoff.md +173 -173
- package/commands/help.md +95 -95
- package/commands/overnight.md +220 -220
- package/commands/plan.md +158 -158
- package/commands/preplan.md +131 -131
- package/commands/prototype.md +145 -145
- package/commands/release.md +49 -49
- package/commands/report.md +99 -99
- package/commands/review.md +120 -120
- package/commands/self-test.md +113 -113
- package/commands/status.md +86 -86
- package/commands/watch.md +98 -98
- package/commands/workitems.md +137 -137
- package/git-sha.json +1 -1
- package/guides/agent-bootstrap.md +295 -295
- package/guides/agents/backend.md +104 -104
- package/guides/agents/content.md +94 -94
- package/guides/agents/cs2.md +56 -56
- package/guides/agents/data.md +87 -87
- package/guides/agents/design.md +77 -77
- package/guides/agents/frontend.md +92 -92
- package/guides/agents/infrastructure.md +81 -81
- package/guides/agents/setup.md +281 -281
- package/guides/agents/verify.md +151 -151
- package/guides/agents/viz.md +106 -106
- package/guides/backend.md +146 -146
- package/guides/content.md +147 -147
- package/guides/cs2.md +190 -190
- package/guides/data.md +123 -123
- package/guides/design.md +116 -116
- package/guides/engineering-behavior.md +43 -43
- package/guides/escalation-protocol.md +125 -125
- package/guides/frontend.md +151 -151
- package/guides/history-md-spec.md +297 -297
- package/guides/infrastructure.md +179 -179
- package/guides/lessons-learned-spec.md +145 -151
- package/guides/output-contract.md +108 -108
- package/guides/publish-md-spec.md +289 -289
- package/guides/rdc-skills-startup.md +30 -30
- package/guides/verify.md +11 -11
- package/hooks/check-cwd.js +31 -31
- package/hooks/check-rdc-environment.js +164 -164
- package/hooks/check-services.js +6 -6
- package/hooks/check-stale-work-items.js +19 -19
- package/hooks/foreground-process-gate.js +128 -128
- package/hooks/gate-watchdog-selfcheck.js +257 -257
- package/hooks/hook-logger.js +25 -25
- package/hooks/lib/run-evidence-gate.mjs +241 -241
- package/hooks/no-stop-open-epics.js +127 -127
- package/hooks/post-tool-batch-gate.js +203 -203
- package/hooks/post-work-check.js +21 -21
- package/hooks/postcompact-log.js +13 -13
- package/hooks/precompact-log.js +13 -13
- package/hooks/rate-limit-retry.js +46 -46
- package/hooks/rdc-invocation-marker.js +157 -157
- package/hooks/rdc-output-contract-gate.js +94 -94
- package/hooks/require-work-item-on-commit.js +294 -294
- package/hooks/restart-brief.js +19 -19
- package/hooks/run-hidden-hook.ps1 +47 -47
- package/hooks/task-completed-gate.js +274 -274
- package/hooks/work-item-exit-gate.js +944 -944
- package/lib/catalog.mjs +236 -236
- package/lib/cloud-rewrite.mjs +155 -155
- package/package.json +57 -57
- package/rules/work-items-rpc.md +520 -520
- package/scaffold/templates/HISTORY.md.template +39 -39
- package/scaffold/templates/PUBLISH.md.template +21 -21
- package/scaffold/templates/brochure-studio-default.html +70 -70
- package/scripts/acceptance.mjs +502 -502
- package/scripts/fixtures/guides/bad-guide.md +15 -15
- package/scripts/fixtures/guides-clean/good-guide.md +16 -16
- package/scripts/install-rdc-skills.js +1401 -1289
- package/scripts/install.ps1 +202 -202
- package/scripts/install.sh +132 -132
- package/scripts/lib/assertions.mjs +287 -287
- package/scripts/lib/manifest-schema.mjs +754 -754
- package/scripts/lib/runner.mjs +465 -465
- package/scripts/lib/sandbox.mjs +435 -435
- package/scripts/prepack.mjs +32 -32
- package/scripts/rdc-brochure.mjs +482 -482
- package/scripts/rdc-design-cli.mjs +134 -134
- package/scripts/rebuild-mcp.mjs +107 -107
- package/scripts/self-test.mjs +1460 -1460
- package/scripts/stamp-git-sha.mjs +29 -29
- package/scripts/test-guide-validator.mjs +196 -196
- package/scripts/test-rdc-hooks.mjs +145 -145
- package/scripts/uninstall.ps1 +77 -77
- package/scripts/uninstall.sh +69 -69
- package/scripts/update.ps1 +43 -43
- package/scripts/update.sh +43 -43
- package/scripts/validate-place-histories.js +461 -461
- package/scripts/validate-publish-manifests.js +502 -424
- package/scripts/watch-init.mjs +100 -100
- package/skills/brochure/SKILL.md +107 -107
- package/skills/build/SKILL.md +578 -563
- package/skills/channel-formatter/SKILL.md +538 -533
- package/skills/co-develop/SKILL.md +196 -196
- package/skills/collab/SKILL.md +239 -239
- package/skills/convert/SKILL.md +167 -140
- package/skills/deploy/SKILL.md +541 -541
- package/skills/design/SKILL.md +211 -211
- package/skills/design/reference/ownership.md +16 -16
- package/skills/design/reference/rampa.md +92 -92
- package/skills/design/reference/studio-model.md +153 -153
- package/skills/edit/SKILL.md +98 -98
- package/skills/env/SKILL.md +141 -0
- package/skills/fixit/SKILL.md +203 -165
- package/skills/fs-mcp/SKILL.md +183 -148
- package/skills/handoff/SKILL.md +236 -236
- package/skills/help/SKILL.md +143 -143
- package/skills/housekeeping/SKILL.md +160 -219
- package/skills/lifeai-brochure-author/SKILL.md +340 -340
- package/skills/new-model/SKILL.md +49 -0
- package/skills/onramp/SKILL.md +1459 -0
- package/skills/overnight/SKILL.md +251 -251
- package/skills/plan/SKILL.md +345 -345
- package/skills/preplan/SKILL.md +90 -90
- package/skills/prototype/SKILL.md +150 -150
- package/skills/rdc-brochurify/SKILL.md +245 -245
- package/skills/rdc-extract-verifier-rules/SKILL.md +191 -191
- package/skills/regen-media/SKILL.md +94 -0
- package/skills/release/SKILL.md +140 -140
- package/skills/report/SKILL.md +100 -100
- package/skills/review/SKILL.md +160 -152
- package/skills/rpms-filemap/SKILL.cloud.md +111 -111
- package/skills/rpms-filemap/SKILL.md +111 -111
- package/skills/self-test/SKILL.md +132 -132
- package/skills/status/SKILL.md +99 -99
- package/skills/terminal-config/SKILL.md +62 -62
- package/skills/tests/MATRIX.md +55 -54
- package/skills/tests/README.md +47 -47
- package/skills/tests/onramp.test.json +87 -0
- package/skills/tests/rdc-brochure.test.json +34 -34
- package/skills/tests/rdc-build.test.json +36 -36
- package/skills/tests/rdc-channel-formatter.test.json +45 -45
- package/skills/tests/rdc-co-develop.test.json +29 -29
- package/skills/tests/rdc-collab.test.json +29 -29
- package/skills/tests/rdc-convert.test.json +35 -35
- package/skills/tests/rdc-deploy.test.json +30 -30
- package/skills/tests/rdc-design.test.json +27 -27
- package/skills/tests/rdc-edit.test.json +29 -29
- package/skills/tests/rdc-fixit.test.json +36 -36
- package/skills/tests/rdc-fs-mcp.test.json +36 -36
- package/skills/tests/rdc-handoff.test.json +28 -28
- package/skills/tests/rdc-help.test.json +29 -29
- package/skills/tests/rdc-housekeeping.test.json +28 -32
- package/skills/tests/rdc-lifeai-brochure-author.test.json +35 -35
- package/skills/tests/rdc-overnight.test.json +37 -37
- package/skills/tests/rdc-plan.test.json +27 -27
- package/skills/tests/rdc-preplan.test.json +31 -31
- package/skills/tests/rdc-prototype.test.json +28 -28
- package/skills/tests/rdc-rdc-brochurify.test.json +23 -23
- package/skills/tests/rdc-rdc-extract-verifier-rules.test.json +34 -34
- package/skills/tests/rdc-regen-media.test.json +29 -0
- package/skills/tests/rdc-release.test.json +29 -29
- package/skills/tests/rdc-report.test.json +28 -28
- package/skills/tests/rdc-review.test.json +29 -29
- package/skills/tests/rdc-rpms-filemap.test.json +28 -28
- package/skills/tests/rdc-self-test.test.json +24 -24
- package/skills/tests/rdc-status.test.json +29 -29
- package/skills/tests/rdc-terminal-config.test.json +29 -29
- package/skills/tests/rdc-watch.test.json +24 -24
- package/skills/tests/rdc-workitems.test.json +27 -27
- package/skills/watch/SKILL.md +97 -97
- package/skills/workitems/SKILL.md +151 -151
- package/tests/acceptance.test.mjs +59 -59
- package/tests/channel-formatter.contract.test.mjs +251 -251
- package/tests/curl-surface.test.mjs +289 -289
- package/tests/harness-gates.test.mjs +325 -325
- package/tests/help-surface.test.mjs +61 -61
- package/tests/install-rdc-skills.test.mjs +49 -49
- package/tests/manifest-contract-fields.test.mjs +78 -78
- package/tests/mcp.test.mjs +271 -271
- package/tests/rdc-brochure.test.mjs +125 -125
- package/tests/require-work-item-on-commit.test.mjs +162 -162
- package/tests/run-evidence-gate.test.mjs +82 -82
- package/tests/skill-test-matrix.test.mjs +66 -66
- package/tests/validate-skills.js +27 -27
- package/tests/work-item-exit-gate-l2.test.mjs +368 -368
- package/tests/work-item-exit-gate-l3.test.mjs +197 -197
- package/RELEASE.md +0 -42
- package/tests/housekeeping-lessons-triage.test.mjs +0 -49
- package/tests/lessons-pipeline-contract.test.mjs +0 -27
- package/tests/release-contract.test.mjs +0 -16
|
@@ -1,289 +1,289 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: spec
|
|
3
|
-
role: publish-md
|
|
4
|
-
systems: [deploy, release, plan]
|
|
5
|
-
schema_version: "1.0"
|
|
6
|
-
tags: [publish-md, spec, rdc-skills]
|
|
7
|
-
---
|
|
8
|
-
# PUBLISH.md — Authoritative Specification
|
|
9
|
-
> Version: 1.0 | Effective: 2026-05-22
|
|
10
|
-
> Architectural approval: 2026-05-22 interview (Option A — Full Rollout)
|
|
11
|
-
|
|
12
|
-
Every deployable target in the RDC ecosystem MAY carry a `PUBLISH.md` file
|
|
13
|
-
in its root directory. Skills that deploy, release, and plan read this file
|
|
14
|
-
to derive watch paths, surface metadata, and promotion gates.
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Schema
|
|
19
|
-
|
|
20
|
-
A `PUBLISH.md` file consists of two parts:
|
|
21
|
-
|
|
22
|
-
1. **YAML frontmatter** — app-level metadata, bounded by `---` delimiters.
|
|
23
|
-
2. **One or more surface sections** — per-surface metadata, bounded by
|
|
24
|
-
HTML comment markers (`<!-- SURFACE:<name> -->` … `<!-- /SURFACE:<name> -->`).
|
|
25
|
-
|
|
26
|
-
Frontmatter is authoritative. Surface sections are the publish manifest.
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## Frontmatter Fields
|
|
31
|
-
|
|
32
|
-
All fields are required unless marked optional.
|
|
33
|
-
|
|
34
|
-
```yaml
|
|
35
|
-
---
|
|
36
|
-
schema_version: "1.0" # (required) always "1.0" for this revision
|
|
37
|
-
entity_slug: <slug> # (required) matches app_deployments.app_slug
|
|
38
|
-
artifact_type: <type> # (required) one of: website | api | package | worker | mcp-server
|
|
39
|
-
environments: [dev] # (required) array; subset of: dev, prod
|
|
40
|
-
status: active # (required) one of: active | draft | deprecated
|
|
41
|
-
notes: "" # (optional) free-text, ignored by validator
|
|
42
|
-
---
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### Field Reference
|
|
46
|
-
|
|
47
|
-
| Field | Type | Required | Allowed Values |
|
|
48
|
-
|-------|------|----------|---------------|
|
|
49
|
-
| `schema_version` | string | yes | `"1.0"` |
|
|
50
|
-
| `entity_slug` | string | yes | must match `app_deployments.app_slug` |
|
|
51
|
-
| `artifact_type` | string | yes | `website` · `api` · `package` · `worker` · `mcp-server` |
|
|
52
|
-
| `environments` | string[] | yes | subset of `[dev, prod]`; at least one required |
|
|
53
|
-
| `status` | string | yes | `active` · `draft` · `deprecated` |
|
|
54
|
-
| `notes` | string | no | free-text annotation |
|
|
55
|
-
|
|
56
|
-
#### `environments` semantics
|
|
57
|
-
|
|
58
|
-
- `[dev]` — surface is only available on the PM2 dev server
|
|
59
|
-
- `[prod]` — surface is only available on the Coolify production instance
|
|
60
|
-
- `[dev, prod]` — surface exists in both tiers
|
|
61
|
-
|
|
62
|
-
The validator enforces: each value in `environments` must match an
|
|
63
|
-
`app_deployments.environment` row for the same `entity_slug`.
|
|
64
|
-
|
|
65
|
-
#### `status` semantics
|
|
66
|
-
|
|
67
|
-
- `active` — `rdc:release` promotion is allowed
|
|
68
|
-
- `draft` — `rdc:release` will block and print a warning; dev deploy is allowed
|
|
69
|
-
- `deprecated` — `rdc:release` will block; validator flags as warn
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
## Surface Sections
|
|
74
|
-
|
|
75
|
-
Each deployable surface gets one managed section inside the PUBLISH.md body.
|
|
76
|
-
Sections are bounded by HTML comment markers so skills can read and rewrite
|
|
77
|
-
them without clobbering hand-authored prose.
|
|
78
|
-
|
|
79
|
-
```
|
|
80
|
-
<!-- SURFACE:<name> -->
|
|
81
|
-
path: /
|
|
82
|
-
source_dir: apps/baru-website
|
|
83
|
-
build_type: nextjs
|
|
84
|
-
visibility: public
|
|
85
|
-
cache: no-store
|
|
86
|
-
watch_paths:
|
|
87
|
-
- apps/baru-website/**
|
|
88
|
-
- packages/ui/**
|
|
89
|
-
- packages/supabase/**
|
|
90
|
-
<!-- /SURFACE:<name> -->
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### Surface Field Reference
|
|
94
|
-
|
|
95
|
-
| Field | Type | Required | Description |
|
|
96
|
-
|-------|------|----------|-------------|
|
|
97
|
-
| `path` | string | yes | URL path prefix served by this surface (e.g. `/`, `/api`) |
|
|
98
|
-
| `source_dir` | string | yes | Monorepo-relative path to the source directory |
|
|
99
|
-
| `build_type` | string | yes | `nextjs` · `static` · `docker` · `node` · `edge` |
|
|
100
|
-
| `visibility` | string | yes | `public` · `private` · `internal` |
|
|
101
|
-
| `cache` | string | yes | HTTP cache directive: `no-store` · `immutable` · `stale-while-revalidate` · `max-age=N` |
|
|
102
|
-
| `watch_paths` | string[] | yes | gitignore-style globs; at least one required. These are unioned to derive Coolify `watch_paths`. |
|
|
103
|
-
| `artifact_id` | string | no | Stable ID for `artifact_registry` upserts; defaults to `<entity_slug>/<name>` |
|
|
104
|
-
|
|
105
|
-
### `<name>` convention
|
|
106
|
-
|
|
107
|
-
The surface name appears in the comment markers and must be a short,
|
|
108
|
-
lowercase, hyphen-separated identifier that describes the surface:
|
|
109
|
-
|
|
110
|
-
- `website` — primary web UI
|
|
111
|
-
- `api` — REST/GraphQL API
|
|
112
|
-
- `mcp` — Model Context Protocol server endpoint
|
|
113
|
-
- `worker` — background worker or cron
|
|
114
|
-
- `static` — purely static asset serving
|
|
115
|
-
|
|
116
|
-
Multiple surfaces are allowed per file (e.g. a Next.js app that also exposes
|
|
117
|
-
an API surface under `/api`).
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## Environments Array
|
|
122
|
-
|
|
123
|
-
The top-level `environments` field declares which deployment tiers host this app.
|
|
124
|
-
Each surface inherits the app-level `environments` unless overridden at the
|
|
125
|
-
surface level (not supported in schema v1.0 — planned for v1.1).
|
|
126
|
-
|
|
127
|
-
Validator enforcement:
|
|
128
|
-
1. At least one environment must be declared.
|
|
129
|
-
2. Each declared environment must be one of `dev` or `prod`.
|
|
130
|
-
3. Each declared environment must have a corresponding `app_deployments` row for the `entity_slug`.
|
|
131
|
-
|
|
132
|
-
`rdc:deploy` uses `environments` to determine whether a dev or prod deploy is
|
|
133
|
-
appropriate for the given target. `rdc:release` requires `prod` to be present
|
|
134
|
-
before promoting.
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## Opt-out (File Absence)
|
|
139
|
-
|
|
140
|
-
**PUBLISH.md absence = opt-out.** There is no sentinel field, no `publish: false`.
|
|
141
|
-
|
|
142
|
-
A deployable target without a `PUBLISH.md`:
|
|
143
|
-
- Is skipped by `rdc:deploy`'s watch-paths derivation step.
|
|
144
|
-
- Is NOT inserted into `artifact_registry` on deploy.
|
|
145
|
-
- Is flagged as a **warn** (not fail) by the validator during the Option A rollout period.
|
|
146
|
-
- Will become a **fail** once the rollout is complete (controlled by the `--strict` flag on the validator).
|
|
147
|
-
|
|
148
|
-
Packages and libraries that are not independently deployed (e.g. `@regen/ui`)
|
|
149
|
-
do not require a `PUBLISH.md`. Only targets with a row in `app_deployments` are in scope.
|
|
150
|
-
|
|
151
|
-
---
|
|
152
|
-
|
|
153
|
-
## Validator Contract
|
|
154
|
-
|
|
155
|
-
The validator (`scripts/validate-publish-manifests.js`) operates in two modes:
|
|
156
|
-
|
|
157
|
-
### Warn mode (default, during rollout)
|
|
158
|
-
|
|
159
|
-
In warn mode the validator:
|
|
160
|
-
- Queries `app_deployments` for all `status = 'active'` rows.
|
|
161
|
-
- For each row, checks whether a `PUBLISH.md` exists at the expected path.
|
|
162
|
-
- For rows without `PUBLISH.md`: emits a `WARN` line and continues.
|
|
163
|
-
- For rows WITH `PUBLISH.md`: parses YAML frontmatter and validates all required fields.
|
|
164
|
-
- If frontmatter is invalid (missing required field, bad enum value): emits a `FAIL` line.
|
|
165
|
-
- Exits 0 if there are no `FAIL` lines (warns are non-fatal in this mode).
|
|
166
|
-
|
|
167
|
-
### Strict mode (`--strict`)
|
|
168
|
-
|
|
169
|
-
In strict mode:
|
|
170
|
-
- Missing `PUBLISH.md` is treated as `FAIL`, not `WARN`.
|
|
171
|
-
- Exits non-zero if any registered active app is missing a manifest.
|
|
172
|
-
- Used in CI after Option A rollout is complete.
|
|
173
|
-
|
|
174
|
-
### Field validation rules
|
|
175
|
-
|
|
176
|
-
| Check | Fail condition |
|
|
177
|
-
|-------|---------------|
|
|
178
|
-
| `schema_version` present | missing or not `"1.0"` |
|
|
179
|
-
| `entity_slug` present | missing or empty string |
|
|
180
|
-
| `artifact_type` present | missing or not in allowed set |
|
|
181
|
-
| `environments` present | missing, empty array, or contains unknown value |
|
|
182
|
-
| `status` present | missing or not in allowed set |
|
|
183
|
-
| At least one surface section | no `<!-- SURFACE: -->` markers found |
|
|
184
|
-
| `watch_paths` non-empty | surface section has no `watch_paths` entries |
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
## Consumer Skills
|
|
189
|
-
|
|
190
|
-
### `rdc:deploy`
|
|
191
|
-
|
|
192
|
-
Reads PUBLISH.md during the deploy pre-flight step:
|
|
193
|
-
|
|
194
|
-
1. Locates `PUBLISH.md` in the app's `source_dir`.
|
|
195
|
-
2. Parses YAML frontmatter — fails deploy if invalid.
|
|
196
|
-
3. Unions all `watch_paths` across surface sections.
|
|
197
|
-
4. Updates `app_deployments.watch_paths` with the union.
|
|
198
|
-
5. After a successful deploy, calls `storeArtifact` (INSERT into `artifact_registry`) for each surface section.
|
|
199
|
-
|
|
200
|
-
If `PUBLISH.md` is absent, `rdc:deploy` skips steps 2–5 and proceeds with the deploy without watch-path derivation.
|
|
201
|
-
|
|
202
|
-
### `rdc:release`
|
|
203
|
-
|
|
204
|
-
Reads PUBLISH.md during the promotion pre-flight gate:
|
|
205
|
-
|
|
206
|
-
1. Locates `PUBLISH.md` in the app's `source_dir`.
|
|
207
|
-
2. Checks `status` field — blocks promotion if `status != "active"`.
|
|
208
|
-
3. Checks `environments` array — blocks promotion if `prod` is not declared.
|
|
209
|
-
4. If checks pass, proceeds with Coolify promotion.
|
|
210
|
-
|
|
211
|
-
### `rdc:plan`
|
|
212
|
-
|
|
213
|
-
When scaffolding a new app, reads the `PUBLISH.md.template` from
|
|
214
|
-
`scaffold/templates/` and hydrates it with the app's metadata to produce
|
|
215
|
-
a starter `PUBLISH.md` in the new app directory.
|
|
216
|
-
|
|
217
|
-
---
|
|
218
|
-
|
|
219
|
-
## Example PUBLISH.md — baru-website
|
|
220
|
-
|
|
221
|
-
```markdown
|
|
222
|
-
---
|
|
223
|
-
schema_version: "1.0"
|
|
224
|
-
entity_slug: baru-website
|
|
225
|
-
artifact_type: website
|
|
226
|
-
environments: [dev]
|
|
227
|
-
status: active
|
|
228
|
-
notes: "Baru.dev — reference implementation for PUBLISH.md convention"
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
# baru-website
|
|
232
|
-
|
|
233
|
-
<!-- SURFACE:website -->
|
|
234
|
-
path: /
|
|
235
|
-
source_dir: apps/baru-website
|
|
236
|
-
build_type: nextjs
|
|
237
|
-
visibility: public
|
|
238
|
-
cache: no-store
|
|
239
|
-
watch_paths:
|
|
240
|
-
- apps/baru-website/**
|
|
241
|
-
- packages/ui/**
|
|
242
|
-
- packages/supabase/**
|
|
243
|
-
<!-- /SURFACE:website -->
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
---
|
|
247
|
-
|
|
248
|
-
## Example PUBLISH.md — regen-media MCP server
|
|
249
|
-
|
|
250
|
-
```markdown
|
|
251
|
-
---
|
|
252
|
-
schema_version: "1.0"
|
|
253
|
-
entity_slug: regen-media
|
|
254
|
-
artifact_type: mcp-server
|
|
255
|
-
environments: [dev, prod]
|
|
256
|
-
status: active
|
|
257
|
-
notes: "Regen Media MCP — R2 image library, Flux/MJ generation, embeddings"
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
# regen-media
|
|
261
|
-
|
|
262
|
-
<!-- SURFACE:mcp -->
|
|
263
|
-
path: /mcp
|
|
264
|
-
source_dir: mcp-servers/regen-media
|
|
265
|
-
build_type: docker
|
|
266
|
-
visibility: internal
|
|
267
|
-
cache: no-store
|
|
268
|
-
watch_paths:
|
|
269
|
-
- mcp-servers/regen-media/**
|
|
270
|
-
<!-- /SURFACE:mcp -->
|
|
271
|
-
|
|
272
|
-
<!-- SURFACE:api -->
|
|
273
|
-
path: /api
|
|
274
|
-
source_dir: mcp-servers/regen-media
|
|
275
|
-
build_type: docker
|
|
276
|
-
visibility: private
|
|
277
|
-
cache: no-store
|
|
278
|
-
watch_paths:
|
|
279
|
-
- mcp-servers/regen-media/**
|
|
280
|
-
<!-- /SURFACE:api -->
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
---
|
|
284
|
-
|
|
285
|
-
## Changelog
|
|
286
|
-
|
|
287
|
-
| Version | Date | Change |
|
|
288
|
-
|---------|------|--------|
|
|
289
|
-
| 1.0 | 2026-05-22 | Initial spec — OQ-1/OQ-2/OQ-3 resolved; Option A Full Rollout approved |
|
|
1
|
+
---
|
|
2
|
+
type: spec
|
|
3
|
+
role: publish-md
|
|
4
|
+
systems: [deploy, release, plan]
|
|
5
|
+
schema_version: "1.0"
|
|
6
|
+
tags: [publish-md, spec, rdc-skills]
|
|
7
|
+
---
|
|
8
|
+
# PUBLISH.md — Authoritative Specification
|
|
9
|
+
> Version: 1.0 | Effective: 2026-05-22
|
|
10
|
+
> Architectural approval: 2026-05-22 interview (Option A — Full Rollout)
|
|
11
|
+
|
|
12
|
+
Every deployable target in the RDC ecosystem MAY carry a `PUBLISH.md` file
|
|
13
|
+
in its root directory. Skills that deploy, release, and plan read this file
|
|
14
|
+
to derive watch paths, surface metadata, and promotion gates.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Schema
|
|
19
|
+
|
|
20
|
+
A `PUBLISH.md` file consists of two parts:
|
|
21
|
+
|
|
22
|
+
1. **YAML frontmatter** — app-level metadata, bounded by `---` delimiters.
|
|
23
|
+
2. **One or more surface sections** — per-surface metadata, bounded by
|
|
24
|
+
HTML comment markers (`<!-- SURFACE:<name> -->` … `<!-- /SURFACE:<name> -->`).
|
|
25
|
+
|
|
26
|
+
Frontmatter is authoritative. Surface sections are the publish manifest.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Frontmatter Fields
|
|
31
|
+
|
|
32
|
+
All fields are required unless marked optional.
|
|
33
|
+
|
|
34
|
+
```yaml
|
|
35
|
+
---
|
|
36
|
+
schema_version: "1.0" # (required) always "1.0" for this revision
|
|
37
|
+
entity_slug: <slug> # (required) matches app_deployments.app_slug
|
|
38
|
+
artifact_type: <type> # (required) one of: website | api | package | worker | mcp-server
|
|
39
|
+
environments: [dev] # (required) array; subset of: dev, prod
|
|
40
|
+
status: active # (required) one of: active | draft | deprecated
|
|
41
|
+
notes: "" # (optional) free-text, ignored by validator
|
|
42
|
+
---
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Field Reference
|
|
46
|
+
|
|
47
|
+
| Field | Type | Required | Allowed Values |
|
|
48
|
+
|-------|------|----------|---------------|
|
|
49
|
+
| `schema_version` | string | yes | `"1.0"` |
|
|
50
|
+
| `entity_slug` | string | yes | must match `app_deployments.app_slug` |
|
|
51
|
+
| `artifact_type` | string | yes | `website` · `api` · `package` · `worker` · `mcp-server` |
|
|
52
|
+
| `environments` | string[] | yes | subset of `[dev, prod]`; at least one required |
|
|
53
|
+
| `status` | string | yes | `active` · `draft` · `deprecated` |
|
|
54
|
+
| `notes` | string | no | free-text annotation |
|
|
55
|
+
|
|
56
|
+
#### `environments` semantics
|
|
57
|
+
|
|
58
|
+
- `[dev]` — surface is only available on the PM2 dev server
|
|
59
|
+
- `[prod]` — surface is only available on the Coolify production instance
|
|
60
|
+
- `[dev, prod]` — surface exists in both tiers
|
|
61
|
+
|
|
62
|
+
The validator enforces: each value in `environments` must match an
|
|
63
|
+
`app_deployments.environment` row for the same `entity_slug`.
|
|
64
|
+
|
|
65
|
+
#### `status` semantics
|
|
66
|
+
|
|
67
|
+
- `active` — `rdc:release` promotion is allowed
|
|
68
|
+
- `draft` — `rdc:release` will block and print a warning; dev deploy is allowed
|
|
69
|
+
- `deprecated` — `rdc:release` will block; validator flags as warn
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Surface Sections
|
|
74
|
+
|
|
75
|
+
Each deployable surface gets one managed section inside the PUBLISH.md body.
|
|
76
|
+
Sections are bounded by HTML comment markers so skills can read and rewrite
|
|
77
|
+
them without clobbering hand-authored prose.
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
<!-- SURFACE:<name> -->
|
|
81
|
+
path: /
|
|
82
|
+
source_dir: apps/baru-website
|
|
83
|
+
build_type: nextjs
|
|
84
|
+
visibility: public
|
|
85
|
+
cache: no-store
|
|
86
|
+
watch_paths:
|
|
87
|
+
- apps/baru-website/**
|
|
88
|
+
- packages/ui/**
|
|
89
|
+
- packages/supabase/**
|
|
90
|
+
<!-- /SURFACE:<name> -->
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Surface Field Reference
|
|
94
|
+
|
|
95
|
+
| Field | Type | Required | Description |
|
|
96
|
+
|-------|------|----------|-------------|
|
|
97
|
+
| `path` | string | yes | URL path prefix served by this surface (e.g. `/`, `/api`) |
|
|
98
|
+
| `source_dir` | string | yes | Monorepo-relative path to the source directory |
|
|
99
|
+
| `build_type` | string | yes | `nextjs` · `static` · `docker` · `node` · `edge` |
|
|
100
|
+
| `visibility` | string | yes | `public` · `private` · `internal` |
|
|
101
|
+
| `cache` | string | yes | HTTP cache directive: `no-store` · `immutable` · `stale-while-revalidate` · `max-age=N` |
|
|
102
|
+
| `watch_paths` | string[] | yes | gitignore-style globs; at least one required. These are unioned to derive Coolify `watch_paths`. |
|
|
103
|
+
| `artifact_id` | string | no | Stable ID for `artifact_registry` upserts; defaults to `<entity_slug>/<name>` |
|
|
104
|
+
|
|
105
|
+
### `<name>` convention
|
|
106
|
+
|
|
107
|
+
The surface name appears in the comment markers and must be a short,
|
|
108
|
+
lowercase, hyphen-separated identifier that describes the surface:
|
|
109
|
+
|
|
110
|
+
- `website` — primary web UI
|
|
111
|
+
- `api` — REST/GraphQL API
|
|
112
|
+
- `mcp` — Model Context Protocol server endpoint
|
|
113
|
+
- `worker` — background worker or cron
|
|
114
|
+
- `static` — purely static asset serving
|
|
115
|
+
|
|
116
|
+
Multiple surfaces are allowed per file (e.g. a Next.js app that also exposes
|
|
117
|
+
an API surface under `/api`).
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Environments Array
|
|
122
|
+
|
|
123
|
+
The top-level `environments` field declares which deployment tiers host this app.
|
|
124
|
+
Each surface inherits the app-level `environments` unless overridden at the
|
|
125
|
+
surface level (not supported in schema v1.0 — planned for v1.1).
|
|
126
|
+
|
|
127
|
+
Validator enforcement:
|
|
128
|
+
1. At least one environment must be declared.
|
|
129
|
+
2. Each declared environment must be one of `dev` or `prod`.
|
|
130
|
+
3. Each declared environment must have a corresponding `app_deployments` row for the `entity_slug`.
|
|
131
|
+
|
|
132
|
+
`rdc:deploy` uses `environments` to determine whether a dev or prod deploy is
|
|
133
|
+
appropriate for the given target. `rdc:release` requires `prod` to be present
|
|
134
|
+
before promoting.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Opt-out (File Absence)
|
|
139
|
+
|
|
140
|
+
**PUBLISH.md absence = opt-out.** There is no sentinel field, no `publish: false`.
|
|
141
|
+
|
|
142
|
+
A deployable target without a `PUBLISH.md`:
|
|
143
|
+
- Is skipped by `rdc:deploy`'s watch-paths derivation step.
|
|
144
|
+
- Is NOT inserted into `artifact_registry` on deploy.
|
|
145
|
+
- Is flagged as a **warn** (not fail) by the validator during the Option A rollout period.
|
|
146
|
+
- Will become a **fail** once the rollout is complete (controlled by the `--strict` flag on the validator).
|
|
147
|
+
|
|
148
|
+
Packages and libraries that are not independently deployed (e.g. `@regen/ui`)
|
|
149
|
+
do not require a `PUBLISH.md`. Only targets with a row in `app_deployments` are in scope.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Validator Contract
|
|
154
|
+
|
|
155
|
+
The validator (`scripts/validate-publish-manifests.js`) operates in two modes:
|
|
156
|
+
|
|
157
|
+
### Warn mode (default, during rollout)
|
|
158
|
+
|
|
159
|
+
In warn mode the validator:
|
|
160
|
+
- Queries `app_deployments` for all `status = 'active'` rows.
|
|
161
|
+
- For each row, checks whether a `PUBLISH.md` exists at the expected path.
|
|
162
|
+
- For rows without `PUBLISH.md`: emits a `WARN` line and continues.
|
|
163
|
+
- For rows WITH `PUBLISH.md`: parses YAML frontmatter and validates all required fields.
|
|
164
|
+
- If frontmatter is invalid (missing required field, bad enum value): emits a `FAIL` line.
|
|
165
|
+
- Exits 0 if there are no `FAIL` lines (warns are non-fatal in this mode).
|
|
166
|
+
|
|
167
|
+
### Strict mode (`--strict`)
|
|
168
|
+
|
|
169
|
+
In strict mode:
|
|
170
|
+
- Missing `PUBLISH.md` is treated as `FAIL`, not `WARN`.
|
|
171
|
+
- Exits non-zero if any registered active app is missing a manifest.
|
|
172
|
+
- Used in CI after Option A rollout is complete.
|
|
173
|
+
|
|
174
|
+
### Field validation rules
|
|
175
|
+
|
|
176
|
+
| Check | Fail condition |
|
|
177
|
+
|-------|---------------|
|
|
178
|
+
| `schema_version` present | missing or not `"1.0"` |
|
|
179
|
+
| `entity_slug` present | missing or empty string |
|
|
180
|
+
| `artifact_type` present | missing or not in allowed set |
|
|
181
|
+
| `environments` present | missing, empty array, or contains unknown value |
|
|
182
|
+
| `status` present | missing or not in allowed set |
|
|
183
|
+
| At least one surface section | no `<!-- SURFACE: -->` markers found |
|
|
184
|
+
| `watch_paths` non-empty | surface section has no `watch_paths` entries |
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Consumer Skills
|
|
189
|
+
|
|
190
|
+
### `rdc:deploy`
|
|
191
|
+
|
|
192
|
+
Reads PUBLISH.md during the deploy pre-flight step:
|
|
193
|
+
|
|
194
|
+
1. Locates `PUBLISH.md` in the app's `source_dir`.
|
|
195
|
+
2. Parses YAML frontmatter — fails deploy if invalid.
|
|
196
|
+
3. Unions all `watch_paths` across surface sections.
|
|
197
|
+
4. Updates `app_deployments.watch_paths` with the union.
|
|
198
|
+
5. After a successful deploy, calls `storeArtifact` (INSERT into `artifact_registry`) for each surface section.
|
|
199
|
+
|
|
200
|
+
If `PUBLISH.md` is absent, `rdc:deploy` skips steps 2–5 and proceeds with the deploy without watch-path derivation.
|
|
201
|
+
|
|
202
|
+
### `rdc:release`
|
|
203
|
+
|
|
204
|
+
Reads PUBLISH.md during the promotion pre-flight gate:
|
|
205
|
+
|
|
206
|
+
1. Locates `PUBLISH.md` in the app's `source_dir`.
|
|
207
|
+
2. Checks `status` field — blocks promotion if `status != "active"`.
|
|
208
|
+
3. Checks `environments` array — blocks promotion if `prod` is not declared.
|
|
209
|
+
4. If checks pass, proceeds with Coolify promotion.
|
|
210
|
+
|
|
211
|
+
### `rdc:plan`
|
|
212
|
+
|
|
213
|
+
When scaffolding a new app, reads the `PUBLISH.md.template` from
|
|
214
|
+
`scaffold/templates/` and hydrates it with the app's metadata to produce
|
|
215
|
+
a starter `PUBLISH.md` in the new app directory.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Example PUBLISH.md — baru-website
|
|
220
|
+
|
|
221
|
+
```markdown
|
|
222
|
+
---
|
|
223
|
+
schema_version: "1.0"
|
|
224
|
+
entity_slug: baru-website
|
|
225
|
+
artifact_type: website
|
|
226
|
+
environments: [dev]
|
|
227
|
+
status: active
|
|
228
|
+
notes: "Baru.dev — reference implementation for PUBLISH.md convention"
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
# baru-website
|
|
232
|
+
|
|
233
|
+
<!-- SURFACE:website -->
|
|
234
|
+
path: /
|
|
235
|
+
source_dir: apps/baru-website
|
|
236
|
+
build_type: nextjs
|
|
237
|
+
visibility: public
|
|
238
|
+
cache: no-store
|
|
239
|
+
watch_paths:
|
|
240
|
+
- apps/baru-website/**
|
|
241
|
+
- packages/ui/**
|
|
242
|
+
- packages/supabase/**
|
|
243
|
+
<!-- /SURFACE:website -->
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Example PUBLISH.md — regen-media MCP server
|
|
249
|
+
|
|
250
|
+
```markdown
|
|
251
|
+
---
|
|
252
|
+
schema_version: "1.0"
|
|
253
|
+
entity_slug: regen-media
|
|
254
|
+
artifact_type: mcp-server
|
|
255
|
+
environments: [dev, prod]
|
|
256
|
+
status: active
|
|
257
|
+
notes: "Regen Media MCP — R2 image library, Flux/MJ generation, embeddings"
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
# regen-media
|
|
261
|
+
|
|
262
|
+
<!-- SURFACE:mcp -->
|
|
263
|
+
path: /mcp
|
|
264
|
+
source_dir: mcp-servers/regen-media
|
|
265
|
+
build_type: docker
|
|
266
|
+
visibility: internal
|
|
267
|
+
cache: no-store
|
|
268
|
+
watch_paths:
|
|
269
|
+
- mcp-servers/regen-media/**
|
|
270
|
+
<!-- /SURFACE:mcp -->
|
|
271
|
+
|
|
272
|
+
<!-- SURFACE:api -->
|
|
273
|
+
path: /api
|
|
274
|
+
source_dir: mcp-servers/regen-media
|
|
275
|
+
build_type: docker
|
|
276
|
+
visibility: private
|
|
277
|
+
cache: no-store
|
|
278
|
+
watch_paths:
|
|
279
|
+
- mcp-servers/regen-media/**
|
|
280
|
+
<!-- /SURFACE:api -->
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Changelog
|
|
286
|
+
|
|
287
|
+
| Version | Date | Change |
|
|
288
|
+
|---------|------|--------|
|
|
289
|
+
| 1.0 | 2026-05-22 | Initial spec — OQ-1/OQ-2/OQ-3 resolved; Option A Full Rollout approved |
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
# RDC Skills Startup Contract
|
|
2
|
-
> Managed by `rdc-skills`. Keep local project-specific details in adjacent project guides.
|
|
3
|
-
|
|
4
|
-
## What RDC Skills Adds
|
|
5
|
-
|
|
6
|
-
- Slash commands for the RDC workflow: plan, build, review, report, design, deploy, release, status, and work item operations.
|
|
7
|
-
- Output-contract enforcement for active `/rdc:*` turns: visible checklist rows plus a final verdict line.
|
|
8
|
-
- Engineering behavior guidance: small scoped changes, explicit assumptions, evidence for completed work, and honest blockers.
|
|
9
|
-
- Optional project integrations for work items, credentials, deployments, and release automation.
|
|
10
|
-
|
|
11
|
-
## Agent Startup Rules
|
|
12
|
-
|
|
13
|
-
1. Read the active project instructions first (`CLAUDE.md` for Claude Code, `AGENTS.md` for Codex).
|
|
14
|
-
2. For any `/rdc:*` invocation, follow `.rdc/guides/output-contract.md` and `.rdc/guides/engineering-behavior.md`.
|
|
15
|
-
3. Do not treat skill prose as proof. Completed work needs evidence: command output, test result, route probe, screenshot, SQL result, or source citation.
|
|
16
|
-
4. If a project has its own approval gates, architecture rules, or credential model, those project rules override generic RDC defaults.
|
|
17
|
-
5. When an RDC skill cannot access the required project services, stop with a specific blocker instead of inventing a fallback.
|
|
18
|
-
|
|
19
|
-
## Profiles
|
|
20
|
-
|
|
21
|
-
- `core`: portable defaults for a clean machine. No regen-root cwd lock, clauth requirement, Supabase exit gate, or LIFEAI deployment assumption.
|
|
22
|
-
- `lifeai`: LIFEAI/regen-root defaults. Enables project-specific hooks and workflows for clauth, Supabase work items, deployment, and overnight queue behavior.
|
|
23
|
-
|
|
24
|
-
## Where To Look
|
|
25
|
-
|
|
26
|
-
- Skills: `skills/<name>/SKILL.md`
|
|
27
|
-
- Commands: `commands/<name>.md`
|
|
28
|
-
- Guides: `guides/*.md` and project copies under `.rdc/guides/`
|
|
29
|
-
- Hooks: `hooks/*.js`
|
|
30
|
-
- Installer: `scripts/install-rdc-skills.js`
|
|
1
|
+
# RDC Skills Startup Contract
|
|
2
|
+
> Managed by `rdc-skills`. Keep local project-specific details in adjacent project guides.
|
|
3
|
+
|
|
4
|
+
## What RDC Skills Adds
|
|
5
|
+
|
|
6
|
+
- Slash commands for the RDC workflow: plan, build, review, report, design, deploy, release, status, and work item operations.
|
|
7
|
+
- Output-contract enforcement for active `/rdc:*` turns: visible checklist rows plus a final verdict line.
|
|
8
|
+
- Engineering behavior guidance: small scoped changes, explicit assumptions, evidence for completed work, and honest blockers.
|
|
9
|
+
- Optional project integrations for work items, credentials, deployments, and release automation.
|
|
10
|
+
|
|
11
|
+
## Agent Startup Rules
|
|
12
|
+
|
|
13
|
+
1. Read the active project instructions first (`CLAUDE.md` for Claude Code, `AGENTS.md` for Codex).
|
|
14
|
+
2. For any `/rdc:*` invocation, follow `.rdc/guides/output-contract.md` and `.rdc/guides/engineering-behavior.md`.
|
|
15
|
+
3. Do not treat skill prose as proof. Completed work needs evidence: command output, test result, route probe, screenshot, SQL result, or source citation.
|
|
16
|
+
4. If a project has its own approval gates, architecture rules, or credential model, those project rules override generic RDC defaults.
|
|
17
|
+
5. When an RDC skill cannot access the required project services, stop with a specific blocker instead of inventing a fallback.
|
|
18
|
+
|
|
19
|
+
## Profiles
|
|
20
|
+
|
|
21
|
+
- `core`: portable defaults for a clean machine. No regen-root cwd lock, clauth requirement, Supabase exit gate, or LIFEAI deployment assumption.
|
|
22
|
+
- `lifeai`: LIFEAI/regen-root defaults. Enables project-specific hooks and workflows for clauth, Supabase work items, deployment, and overnight queue behavior.
|
|
23
|
+
|
|
24
|
+
## Where To Look
|
|
25
|
+
|
|
26
|
+
- Skills: `skills/<name>/SKILL.md`
|
|
27
|
+
- Commands: `commands/<name>.md`
|
|
28
|
+
- Guides: `guides/*.md` and project copies under `.rdc/guides/`
|
|
29
|
+
- Hooks: `hooks/*.js`
|
|
30
|
+
- Installer: `scripts/install-rdc-skills.js`
|
package/guides/verify.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# Verify Guide
|
|
2
|
-
|
|
3
|
-
Compatibility shim for skill references that point to `guides/verify.md`.
|
|
4
|
-
|
|
5
|
-
The active verification playbook lives at:
|
|
6
|
-
|
|
7
|
-
```text
|
|
8
|
-
guides/agents/verify.md
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Use that file for evidence-before-claims verification, scoped type checks, scoped tests, route probes, and final acceptance reporting.
|
|
1
|
+
# Verify Guide
|
|
2
|
+
|
|
3
|
+
Compatibility shim for skill references that point to `guides/verify.md`.
|
|
4
|
+
|
|
5
|
+
The active verification playbook lives at:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
guides/agents/verify.md
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Use that file for evidence-before-claims verification, scoped type checks, scoped tests, route probes, and final acceptance reporting.
|