@lifeaitools/rdc-skills 0.24.38 → 0.24.41

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 (196) hide show
  1. package/.claude/settings.json +15 -15
  2. package/.claude-plugin/marketplace.json +21 -21
  3. package/.claude-plugin/plugin.json +1371 -1371
  4. package/.github/workflows/publish.yml +34 -34
  5. package/.github/workflows/self-test.yml +58 -58
  6. package/CHANGELOG.md +310 -310
  7. package/LICENSE +21 -21
  8. package/MANIFEST.md +221 -221
  9. package/README.md +376 -375
  10. package/README.sandbox.md +3 -3
  11. package/RELEASE.md +42 -0
  12. package/assets/watcher/viewer.html +164 -164
  13. package/bin/rdc-skills-mcp.mjs +316 -316
  14. package/commands/build.md +183 -183
  15. package/commands/collab.md +180 -180
  16. package/commands/deploy.md +152 -152
  17. package/commands/design.md +31 -31
  18. package/commands/edit.md +28 -28
  19. package/commands/fixit.md +124 -124
  20. package/commands/handoff.md +173 -173
  21. package/commands/help.md +95 -95
  22. package/commands/overnight.md +220 -220
  23. package/commands/plan.md +158 -158
  24. package/commands/preplan.md +131 -131
  25. package/commands/prototype.md +145 -145
  26. package/commands/release.md +49 -49
  27. package/commands/report.md +99 -99
  28. package/commands/review.md +120 -120
  29. package/commands/self-test.md +113 -113
  30. package/commands/status.md +86 -86
  31. package/commands/watch.md +98 -98
  32. package/commands/workitems.md +137 -137
  33. package/git-sha.json +1 -1
  34. package/guides/agent-bootstrap.md +295 -295
  35. package/guides/agents/backend.md +104 -104
  36. package/guides/agents/content.md +94 -94
  37. package/guides/agents/cs2.md +56 -56
  38. package/guides/agents/data.md +87 -87
  39. package/guides/agents/design.md +77 -77
  40. package/guides/agents/frontend.md +92 -92
  41. package/guides/agents/infrastructure.md +81 -81
  42. package/guides/agents/setup.md +281 -281
  43. package/guides/agents/verify.md +151 -151
  44. package/guides/agents/viz.md +106 -106
  45. package/guides/backend.md +146 -146
  46. package/guides/content.md +147 -147
  47. package/guides/cs2.md +190 -190
  48. package/guides/data.md +123 -123
  49. package/guides/design.md +116 -116
  50. package/guides/engineering-behavior.md +43 -43
  51. package/guides/escalation-protocol.md +125 -125
  52. package/guides/frontend.md +151 -151
  53. package/guides/history-md-spec.md +297 -297
  54. package/guides/infrastructure.md +179 -179
  55. package/guides/lessons-learned-spec.md +151 -145
  56. package/guides/output-contract.md +108 -108
  57. package/guides/publish-md-spec.md +289 -289
  58. package/guides/rdc-skills-startup.md +30 -30
  59. package/guides/verify.md +11 -11
  60. package/hooks/check-cwd.js +31 -31
  61. package/hooks/check-rdc-environment.js +164 -164
  62. package/hooks/check-services.js +6 -6
  63. package/hooks/check-stale-work-items.js +19 -19
  64. package/hooks/foreground-process-gate.js +128 -128
  65. package/hooks/gate-watchdog-selfcheck.js +257 -257
  66. package/hooks/hook-logger.js +25 -25
  67. package/hooks/lib/run-evidence-gate.mjs +241 -241
  68. package/hooks/no-stop-open-epics.js +127 -127
  69. package/hooks/post-tool-batch-gate.js +203 -203
  70. package/hooks/post-work-check.js +21 -21
  71. package/hooks/postcompact-log.js +13 -13
  72. package/hooks/precompact-log.js +13 -13
  73. package/hooks/rate-limit-retry.js +46 -46
  74. package/hooks/rdc-invocation-marker.js +157 -157
  75. package/hooks/rdc-output-contract-gate.js +94 -94
  76. package/hooks/require-work-item-on-commit.js +294 -294
  77. package/hooks/restart-brief.js +19 -19
  78. package/hooks/run-hidden-hook.ps1 +47 -47
  79. package/hooks/task-completed-gate.js +274 -274
  80. package/hooks/work-item-exit-gate.js +944 -944
  81. package/lib/catalog.mjs +236 -236
  82. package/lib/cloud-rewrite.mjs +155 -155
  83. package/package.json +57 -56
  84. package/rules/work-items-rpc.md +520 -520
  85. package/scaffold/templates/HISTORY.md.template +39 -39
  86. package/scaffold/templates/PUBLISH.md.template +21 -21
  87. package/scaffold/templates/brochure-studio-default.html +70 -70
  88. package/scripts/acceptance.mjs +502 -502
  89. package/scripts/fixtures/guides/bad-guide.md +15 -15
  90. package/scripts/fixtures/guides-clean/good-guide.md +16 -16
  91. package/scripts/install-rdc-skills.js +1289 -1289
  92. package/scripts/install.ps1 +202 -202
  93. package/scripts/install.sh +132 -132
  94. package/scripts/lib/assertions.mjs +287 -287
  95. package/scripts/lib/manifest-schema.mjs +754 -754
  96. package/scripts/lib/runner.mjs +465 -465
  97. package/scripts/lib/sandbox.mjs +435 -435
  98. package/scripts/prepack.mjs +32 -32
  99. package/scripts/rdc-brochure.mjs +482 -464
  100. package/scripts/rdc-design-cli.mjs +134 -134
  101. package/scripts/rebuild-mcp.mjs +107 -107
  102. package/scripts/self-test.mjs +1460 -1460
  103. package/scripts/stamp-git-sha.mjs +29 -29
  104. package/scripts/test-guide-validator.mjs +196 -196
  105. package/scripts/test-rdc-hooks.mjs +145 -145
  106. package/scripts/uninstall.ps1 +77 -77
  107. package/scripts/uninstall.sh +69 -69
  108. package/scripts/update.ps1 +43 -43
  109. package/scripts/update.sh +43 -43
  110. package/scripts/validate-place-histories.js +461 -461
  111. package/scripts/validate-publish-manifests.js +424 -424
  112. package/scripts/watch-init.mjs +100 -100
  113. package/skills/brochure/SKILL.md +107 -107
  114. package/skills/build/SKILL.md +563 -563
  115. package/skills/channel-formatter/SKILL.md +533 -533
  116. package/skills/co-develop/SKILL.md +196 -196
  117. package/skills/collab/SKILL.md +239 -239
  118. package/skills/convert/SKILL.md +140 -140
  119. package/skills/deploy/SKILL.md +541 -541
  120. package/skills/design/SKILL.md +211 -211
  121. package/skills/design/reference/ownership.md +16 -16
  122. package/skills/design/reference/rampa.md +92 -92
  123. package/skills/design/reference/studio-model.md +153 -153
  124. package/skills/edit/SKILL.md +98 -98
  125. package/skills/fixit/SKILL.md +165 -165
  126. package/skills/fs-mcp/SKILL.md +148 -148
  127. package/skills/handoff/SKILL.md +236 -200
  128. package/skills/help/SKILL.md +143 -143
  129. package/skills/housekeeping/SKILL.md +219 -160
  130. package/skills/lifeai-brochure-author/SKILL.md +340 -340
  131. package/skills/overnight/SKILL.md +251 -251
  132. package/skills/plan/SKILL.md +345 -345
  133. package/skills/preplan/SKILL.md +90 -90
  134. package/skills/prototype/SKILL.md +150 -150
  135. package/skills/rdc-brochurify/SKILL.md +245 -245
  136. package/skills/rdc-extract-verifier-rules/SKILL.md +191 -191
  137. package/skills/release/SKILL.md +140 -140
  138. package/skills/report/SKILL.md +100 -100
  139. package/skills/review/SKILL.md +152 -152
  140. package/skills/rpms-filemap/SKILL.cloud.md +111 -111
  141. package/skills/rpms-filemap/SKILL.md +111 -111
  142. package/skills/self-test/SKILL.md +132 -132
  143. package/skills/status/SKILL.md +99 -99
  144. package/skills/terminal-config/SKILL.md +62 -62
  145. package/skills/tests/MATRIX.md +54 -54
  146. package/skills/tests/README.md +47 -47
  147. package/skills/tests/rdc-brochure.test.json +34 -34
  148. package/skills/tests/rdc-build.test.json +36 -36
  149. package/skills/tests/rdc-channel-formatter.test.json +45 -45
  150. package/skills/tests/rdc-co-develop.test.json +29 -29
  151. package/skills/tests/rdc-collab.test.json +29 -29
  152. package/skills/tests/rdc-convert.test.json +35 -35
  153. package/skills/tests/rdc-deploy.test.json +30 -30
  154. package/skills/tests/rdc-design.test.json +27 -27
  155. package/skills/tests/rdc-edit.test.json +29 -29
  156. package/skills/tests/rdc-fixit.test.json +36 -36
  157. package/skills/tests/rdc-fs-mcp.test.json +36 -36
  158. package/skills/tests/rdc-handoff.test.json +28 -28
  159. package/skills/tests/rdc-help.test.json +29 -29
  160. package/skills/tests/rdc-housekeeping.test.json +32 -28
  161. package/skills/tests/rdc-lifeai-brochure-author.test.json +35 -35
  162. package/skills/tests/rdc-overnight.test.json +37 -37
  163. package/skills/tests/rdc-plan.test.json +27 -27
  164. package/skills/tests/rdc-preplan.test.json +31 -31
  165. package/skills/tests/rdc-prototype.test.json +28 -28
  166. package/skills/tests/rdc-rdc-brochurify.test.json +23 -23
  167. package/skills/tests/rdc-rdc-extract-verifier-rules.test.json +34 -34
  168. package/skills/tests/rdc-release.test.json +29 -29
  169. package/skills/tests/rdc-report.test.json +28 -28
  170. package/skills/tests/rdc-review.test.json +29 -29
  171. package/skills/tests/rdc-rpms-filemap.test.json +28 -28
  172. package/skills/tests/rdc-self-test.test.json +24 -24
  173. package/skills/tests/rdc-status.test.json +29 -29
  174. package/skills/tests/rdc-terminal-config.test.json +29 -29
  175. package/skills/tests/rdc-watch.test.json +24 -24
  176. package/skills/tests/rdc-workitems.test.json +27 -27
  177. package/skills/watch/SKILL.md +97 -97
  178. package/skills/workitems/SKILL.md +151 -151
  179. package/tests/acceptance.test.mjs +59 -59
  180. package/tests/channel-formatter.contract.test.mjs +251 -251
  181. package/tests/curl-surface.test.mjs +289 -289
  182. package/tests/harness-gates.test.mjs +325 -325
  183. package/tests/help-surface.test.mjs +61 -61
  184. package/tests/housekeeping-lessons-triage.test.mjs +49 -0
  185. package/tests/install-rdc-skills.test.mjs +49 -49
  186. package/tests/lessons-pipeline-contract.test.mjs +26 -0
  187. package/tests/manifest-contract-fields.test.mjs +78 -78
  188. package/tests/mcp.test.mjs +271 -271
  189. package/tests/rdc-brochure.test.mjs +125 -0
  190. package/tests/release-contract.test.mjs +16 -0
  191. package/tests/require-work-item-on-commit.test.mjs +162 -162
  192. package/tests/run-evidence-gate.test.mjs +82 -82
  193. package/tests/skill-test-matrix.test.mjs +66 -66
  194. package/tests/validate-skills.js +27 -27
  195. package/tests/work-item-exit-gate-l2.test.mjs +368 -368
  196. package/tests/work-item-exit-gate-l3.test.mjs +197 -197
@@ -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.