rcf-lite 0.13.0 → 0.14.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.
Files changed (162) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/bin/rcf.js +3 -1
  3. package/blueprints/application-api-rest/docs/topics.md +1 -1
  4. package/blueprints/application-spa/README.md +3 -3
  5. package/blueprints/application-spa/contributions/adrs/adr-202-application-spa-theming.json +1 -1
  6. package/blueprints/application-spa/contributions/adrs/adr-206-application-spa-iconography.json +1 -1
  7. package/blueprints/application-spa/contributions/tacs/tac-207-application-spa-token-adherence-probe.json +7 -7
  8. package/blueprints/application-spa/contributions/tacs/tac-208-application-spa-icon-adherence-probe.json +7 -7
  9. package/blueprints/application-spa/contributions/tacs/tac-209-application-spa-csp-styled-adherence-probe.json +8 -8
  10. package/blueprints/application-spa/contributions/tacs/tac-210-application-spa-external-dependency-provisioning-probe.json +8 -8
  11. package/blueprints/application-spa/contributions/tacs/tac-211-application-spa-core-flow-e2e-probe.json +8 -8
  12. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1129.json +2 -2
  13. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1130.json +2 -2
  14. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1131.json +2 -2
  15. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1132.json +2 -2
  16. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1133.json +3 -3
  17. package/blueprints/application-spa/docs/topics.md +1 -1
  18. package/blueprints/delivery-ci-workflows/CHANGELOG.md +39 -0
  19. package/blueprints/delivery-ci-workflows/README.md +57 -0
  20. package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/default-branch-checks.yml +55 -0
  21. package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/pull-request-checks.yml +65 -0
  22. package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/release.yml +71 -0
  23. package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/scheduled-audit.yml +61 -0
  24. package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/notes.md +61 -0
  25. package/blueprints/{ci-pipeline → delivery-ci-workflows}/assets/report-samples/per-gate.json +2 -1
  26. package/blueprints/delivery-ci-workflows/blueprint.json +87 -0
  27. package/blueprints/delivery-ci-workflows/contributions/adrs/adr-701-delivery-ci-workflows-ci-gates.json +30 -0
  28. package/blueprints/{ci-pipeline/contributions/adrs/adr-702-ci-pipeline-strict-coverage-gate.json → delivery-ci-workflows/contributions/adrs/adr-702-delivery-ci-workflows-strict-coverage-gate.json} +2 -2
  29. package/blueprints/{ci-pipeline/contributions/adrs/adr-703-ci-pipeline-node-only-runner.json → delivery-ci-workflows/contributions/adrs/adr-703-delivery-ci-workflows-node-only-runner.json} +1 -1
  30. package/blueprints/{ci-pipeline/contributions/adrs/adr-704-ci-pipeline-report-shape.json → delivery-ci-workflows/contributions/adrs/adr-704-delivery-ci-workflows-report-shape.json} +3 -3
  31. package/blueprints/delivery-ci-workflows/contributions/adrs/adr-705-delivery-ci-workflows-elicitation-surface.json +25 -0
  32. package/blueprints/delivery-ci-workflows/contributions/adrs/adr-706-delivery-ci-workflows-branch-model-defaults.json +25 -0
  33. package/blueprints/delivery-ci-workflows/contributions/adrs/adr-707-delivery-ci-workflows-release-workflow-shape.json +25 -0
  34. package/blueprints/delivery-ci-workflows/contributions/adrs/adr-708-delivery-ci-workflows-provider-hint-shape.json +25 -0
  35. package/blueprints/delivery-ci-workflows/contributions/adrs/adr-709-delivery-ci-workflows-release-artefacts.json +25 -0
  36. package/blueprints/delivery-ci-workflows/contributions/adrs/adr-710-delivery-ci-workflows-scheduled-audit.json +25 -0
  37. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-001.json +18 -0
  38. package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-002.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-002.json} +2 -2
  39. package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-003.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-003.json} +2 -2
  40. package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-004.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-004.json} +2 -2
  41. package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-005.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-005.json} +4 -4
  42. package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-006.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-006.json} +2 -2
  43. package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-007.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-007.json} +2 -2
  44. package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-008.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-008.json} +2 -2
  45. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-009.json +18 -0
  46. package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-010.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-010.json} +2 -2
  47. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-011.json +18 -0
  48. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-012.json +18 -0
  49. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-013.json +18 -0
  50. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-014.json +18 -0
  51. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-015.json +18 -0
  52. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-016.json +18 -0
  53. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-017.json +18 -0
  54. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-018.json +18 -0
  55. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-019.json +18 -0
  56. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-020.json +18 -0
  57. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-021.json +18 -0
  58. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-022.json +18 -0
  59. package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-023.json +18 -0
  60. package/blueprints/{ci-pipeline/contributions/tacs/tac-701-ci-pipeline-gate-runner.json → delivery-ci-workflows/contributions/tacs/tac-701-delivery-ci-workflows-gate-runner.json} +3 -3
  61. package/blueprints/{ci-pipeline/contributions/tacs/tac-702-ci-pipeline-gate-report.json → delivery-ci-workflows/contributions/tacs/tac-702-delivery-ci-workflows-gate-report.json} +1 -1
  62. package/blueprints/{ci-pipeline/contributions/tacs/tac-703-ci-pipeline-aggregate-report.json → delivery-ci-workflows/contributions/tacs/tac-703-delivery-ci-workflows-aggregate-report.json} +2 -2
  63. package/blueprints/delivery-ci-workflows/contributions/tacs/tac-704-delivery-ci-workflows-workflow-materialiser.json +64 -0
  64. package/blueprints/delivery-ci-workflows/contributions/tacs/tac-705-delivery-ci-workflows-release-workflow.json +51 -0
  65. package/blueprints/delivery-ci-workflows/contributions/tacs/tac-706-delivery-ci-workflows-scheduled-audit.json +38 -0
  66. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6101.json +37 -0
  67. package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6102.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6102.json} +3 -3
  68. package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6103.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6103.json} +4 -4
  69. package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6104.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6104.json} +4 -4
  70. package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6105.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6105.json} +6 -6
  71. package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6106.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6106.json} +3 -3
  72. package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6107.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6107.json} +5 -5
  73. package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6108.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6108.json} +4 -4
  74. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6109.json +36 -0
  75. package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6110.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6110.json} +3 -3
  76. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6111.json +36 -0
  77. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6112.json +36 -0
  78. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6113.json +36 -0
  79. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6114.json +46 -0
  80. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6115.json +37 -0
  81. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6116.json +28 -0
  82. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6117.json +28 -0
  83. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6118.json +37 -0
  84. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6119.json +28 -0
  85. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6120.json +28 -0
  86. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6121.json +46 -0
  87. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6122.json +46 -0
  88. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6123.json +37 -0
  89. package/blueprints/delivery-ci-workflows/docs/topics.md +61 -0
  90. package/blueprints/delivery-ci-workflows/guide/delivery-ci-workflows.md +136 -0
  91. package/blueprints/deploy-cloudflare-workers/docs/topics.md +3 -3
  92. package/blueprints/email-smtp-resend/docs/topics.md +1 -1
  93. package/blueprints/observability-essentials/README.md +2 -2
  94. package/blueprints/observability-essentials/docs/topics.md +5 -5
  95. package/blueprints/observability-probe-endpoints/docs/topics.md +2 -2
  96. package/blueprints/persistence-data-d1/README.md +2 -2
  97. package/blueprints/persistence-data-d1/assets/facade-shape/facade-module-shape.md +1 -1
  98. package/blueprints/persistence-data-d1/contributions/tacs/tac-1403-persistence-data-d1-deploy-gate.json +1 -1
  99. package/blueprints/persistence-data-d1/docs/topics.md +2 -2
  100. package/blueprints/persistence-data-d1/guide/persistence-data-d1.md +1 -1
  101. package/blueprints/persistence-data-sqlite/README.md +1 -1
  102. package/blueprints/persistence-data-sqlite/docs/topics.md +1 -1
  103. package/blueprints/security-auth-clerk/README.md +5 -3
  104. package/blueprints/security-auth-clerk/assets/middleware/workers-fetch-shape.md +123 -0
  105. package/blueprints/security-auth-clerk/assets/wiring/workers-wrangler-toml-shape.md +51 -0
  106. package/blueprints/security-auth-clerk/blueprint.json +1 -1
  107. package/blueprints/security-auth-clerk/docs/topics.md +2 -2
  108. package/blueprints/security-auth-clerk/guide/security-auth-clerk.md +9 -0
  109. package/blueprints/security-auth-keycloak/docs/topics.md +2 -2
  110. package/blueprints/security-auth-magic-link/README.md +1 -1
  111. package/blueprints/security-auth-magic-link/docs/topics.md +1 -1
  112. package/blueprints/security-auth-oauth2/README.md +1 -1
  113. package/blueprints/security-auth-oauth2/docs/topics.md +2 -2
  114. package/blueprints/security-secrets-management/README.md +1 -1
  115. package/blueprints/security-secrets-management/docs/topics.md +3 -3
  116. package/guidance/build-cycle-playbook.md +2 -2
  117. package/guidance/document-model.md +1 -1
  118. package/guidance/harness-template.md +13 -0
  119. package/guidance/managed/agent-instructions-block.hash +1 -1
  120. package/guidance/managed/agent-instructions-block.md +13 -0
  121. package/package.json +5 -2
  122. package/rcf/adrs/adr-001.json +1 -1
  123. package/rcf/adrs/adr-009.json +1 -1
  124. package/rcf/build-sequence.json +1 -1
  125. package/rcf/manifest.json +2 -2
  126. package/rcf/prd.json +2 -2
  127. package/releases/releases.yaml +116 -0
  128. package/src/blueprint/apply.js +51 -13
  129. package/src/blueprint/index.js +12 -0
  130. package/src/blueprint/library-loader.js +271 -0
  131. package/src/blueprint/library-registry.js +341 -0
  132. package/src/blueprint/list.js +38 -4
  133. package/src/blueprint/shelf-resolver.js +144 -31
  134. package/src/cli/blueprint-library.js +419 -0
  135. package/src/cli/blueprint.js +46 -9
  136. package/src/cli/guidance.js +1 -1
  137. package/src/cli/help.js +27 -1
  138. package/src/cli/version.js +673 -0
  139. package/src/cli/view.js +282 -1
  140. package/src/server/index.js +3 -0
  141. package/src/server/routes.js +15 -1
  142. package/src/server/scope-endpoint.js +105 -0
  143. package/src/view/live-client.js +253 -6
  144. package/src/view/scope.js +231 -0
  145. package/src/view/style.css +42 -0
  146. package/blueprints/ci-pipeline/README.md +0 -49
  147. package/blueprints/ci-pipeline/assets/ci-provider-examples/github-actions.yml +0 -61
  148. package/blueprints/ci-pipeline/assets/ci-provider-examples/notes.md +0 -50
  149. package/blueprints/ci-pipeline/blueprint.json +0 -46
  150. package/blueprints/ci-pipeline/contributions/adrs/adr-701-ci-pipeline-ci-gates.json +0 -25
  151. package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-001.json +0 -18
  152. package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-009.json +0 -18
  153. package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6101.json +0 -37
  154. package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6109.json +0 -36
  155. package/blueprints/ci-pipeline/docs/topics.md +0 -49
  156. package/blueprints/ci-pipeline/guide/ci-pipeline.md +0 -79
  157. package/rcf/.identity/profile.md +0 -37
  158. package/rcf/knowledge/INDEX.md +0 -12
  159. package/rcf/knowledge/README.md +0 -41
  160. package/rcf/knowledge/docs/.gitkeep +0 -0
  161. package/rcf/knowledge/notes/.gitkeep +0 -0
  162. /package/blueprints/{ci-pipeline → delivery-ci-workflows}/assets/report-samples/pipeline.json +0 -0
@@ -25,6 +25,7 @@ import {
25
25
  supersedeBlueprintTopic,
26
26
  } from '../blueprint/index.js';
27
27
  import { conflictReportJson, renderConflictReport } from '../blueprint/conflicts.js';
28
+ import { handleLibraryVerb, LIBRARY_HELP } from './blueprint-library.js';
28
29
 
29
30
  export const HELP = `Usage: rcf define blueprint <verb> [options]
30
31
 
@@ -65,6 +66,11 @@ Verbs:
65
66
  diff <topic> Side-by-side view of every applied blueprint's
66
67
  scope:global ADR on <topic>: id, path, title,
67
68
  status, decision. Read-only.
69
+ library <verb> Manage external blueprint libraries. Sub-verbs:
70
+ add, list, remove, refresh. See
71
+ 'rcf define blueprint library --help' for the
72
+ full surface. Phase 2b covers local sources;
73
+ network fetchers land in Phase 2c.
68
74
 
69
75
  Options:
70
76
  --namespace <slug> Override the blueprint's default namespace
@@ -106,6 +112,11 @@ const OPTION_SPEC = {
106
112
  resolve: { type: 'string', multiple: true },
107
113
  reason: { type: 'string' },
108
114
  incoming: { type: 'string' },
115
+ // library-verb flags (parsed centrally so strict:true doesn't refuse
116
+ // them when the operator types `rcf define blueprint library add`).
117
+ prefix: { type: 'string' },
118
+ 'i-have-reviewed': { type: 'boolean' },
119
+ 'no-review': { type: 'boolean' },
109
120
  json: { type: 'boolean' },
110
121
  'dry-run': { type: 'boolean' },
111
122
  quiet: { type: 'boolean' },
@@ -131,13 +142,25 @@ export async function main(argv, deps = {}) {
131
142
  stderr.write(HELP);
132
143
  return 2;
133
144
  }
134
- if (parsed.values.help || parsed.positionals.length === 0) {
145
+ const firstPositional = parsed.positionals[0];
146
+ // `rcf define blueprint library --help` routes into the library
147
+ // handler so the sub-verb HELP block is what the operator sees.
148
+ // Every other --help (and empty argv) prints the top-level HELP.
149
+ if (firstPositional !== 'library' && (parsed.values.help || parsed.positionals.length === 0)) {
135
150
  stdout.write(HELP);
136
151
  return 0;
137
152
  }
138
153
  const verb = parsed.positionals[0];
139
154
  const rest = parsed.positionals.slice(1);
140
155
 
156
+ // `library` sub-verbs manage the external-library registry; they
157
+ // never walk the RCF tree, and delegating early keeps the option
158
+ // parser from consuming `--i-have-reviewed` (a library-add-only flag)
159
+ // against a `library` add invocation.
160
+ if (verb === 'library') {
161
+ return handleLibraryVerb(parsed, rest, { stdout, stderr, cwd, now, stdin: deps.stdin });
162
+ }
163
+
141
164
  const projectRoot = await findProjectRoot(cwd);
142
165
  if (!projectRoot) {
143
166
  stderr.write('[error] no rcf/ tree found in this directory or any ancestor.\n');
@@ -156,7 +179,7 @@ export async function main(argv, deps = {}) {
156
179
  return 2;
157
180
  }
158
181
  const rawSource = rest[0];
159
- const resolved = await resolveBlueprintSource(rawSource);
182
+ const resolved = await resolveBlueprintSource(rawSource, { projectRoot });
160
183
  if (isRcfError(resolved)) {
161
184
  if (parsed.values.json) {
162
185
  stderr.write(`${JSON.stringify({ refused: true, error: { kind: resolved.kind, message: resolved.message } })}\n`);
@@ -165,12 +188,17 @@ export async function main(argv, deps = {}) {
165
188
  }
166
189
  return 2;
167
190
  }
168
- // Feed the resolved absolute path to the applier; keep the original
169
- // typed source on the CLI for the supersede hint the conflict
170
- // renderer prints, so the operator sees exactly the string they can
171
- // copy back into a fresh shell.
191
+ // Feed the resolved absolute path to the applier. The original
192
+ // typed source is preserved on the CLI for the conflict renderer's
193
+ // supersede hint (so the operator sees exactly the string they can
194
+ // copy back into a fresh shell). It is ONLY forwarded to the applier
195
+ // as `displaySource` for library-qualified resolves - spec §5.3
196
+ // requires the qualified typed ref (`wsd:auth-oauth2`) to be the
197
+ // record's `source`. For shelf and path resolves the record must
198
+ // carry the RESOLVED ABSOLUTE PATH, which is the pre-#120 behaviour
199
+ // that /scope.json and `blueprint list --category` both depend on
200
+ // to load the shipping source file (integration review d-2026-08-31-046).
172
201
  const source = resolved.resolved;
173
- const displaySource = resolved.original;
174
202
  const resolveDeclarations = parseResolveOptions(parsed.values.resolve, parsed.values.reason);
175
203
  if (resolveDeclarations.error) {
176
204
  stderr.write(`[error] blueprint add: ${resolveDeclarations.error}\n`);
@@ -178,8 +206,17 @@ export async function main(argv, deps = {}) {
178
206
  }
179
207
  const result = await applyBlueprint({
180
208
  projectRoot, tree, source,
181
- displaySource,
182
209
  namespaceOverride: parsed.values.namespace,
210
+ // Library-qualified resolves rewire the applied identity under
211
+ // the library prefix and forward the library's declared bands
212
+ // for the apply-time gate (spec §5.3, §8.3). The qualified typed
213
+ // ref is passed as `displaySource` so the applied record's
214
+ // `source` field carries it verbatim (spec §5.3).
215
+ ...(resolved.kind === 'library' ? {
216
+ displaySource: resolved.original,
217
+ effectiveSlug: resolved.effectiveSlug,
218
+ libraryBands: resolved.libraryBands,
219
+ } : {}),
183
220
  resolveDeclarations: resolveDeclarations.value,
184
221
  now,
185
222
  dryRun: parsed.values['dry-run'] === true,
@@ -246,7 +283,7 @@ export async function main(argv, deps = {}) {
246
283
  // source's blueprint.json at list time; a source that no longer
247
284
  // resolves surfaces under the `uncategorised` group rather than
248
285
  // being dropped.
249
- const enriched = await enrichRowsWithCategories(rows);
286
+ const enriched = await enrichRowsWithCategories(rows, { projectRoot });
250
287
  const groups = groupRowsByCategory(enriched);
251
288
  let first = true;
252
289
  for (const group of groups) {
@@ -34,7 +34,7 @@ const OPTION_SPEC = {
34
34
 
35
35
  export const HELP = `Usage: rcf guidance [topic] [options]
36
36
 
37
- Print a guidance-pack document from the installed rcf-build-lite
37
+ Print a guidance-pack document from the installed rcf-lite
38
38
  package to stdout. The pack ships with the package and is never copied
39
39
  into your project, so this verb is how a CLI-only agent reads the
40
40
  method. MCP-wired harnesses can use the rcf://docs/<slug> resources and
package/src/cli/help.js CHANGED
@@ -36,6 +36,7 @@ import { HELP as DESIGN_HELP } from './design.js';
36
36
  import { HELP as BROWSER_VERIFY_HELP } from './browser-verify.js';
37
37
  import { HELP as UPDATE_HELP } from './update.js';
38
38
  import { HELP as VALIDATE_HELP } from './validate.js';
39
+ import { HELP as VERSION_HELP } from './version.js';
39
40
  import { HELP as VIEW_HELP } from './view.js';
40
41
  import { HELP as REQ_CLASSIFY_HELP } from './req-classify.js';
41
42
  import { HELP as REQ_BASELINE_HELP } from './req-baseline.js';
@@ -64,6 +65,8 @@ core Platform plumbing that predates any RCF stage.
64
65
  doctor Diagnose and repair init-hygiene drift.
65
66
  guidance [topic] Print a method document from the installed pack.
66
67
  mcp Serve the project over MCP (local stdio).
68
+ version [--check] Print installed version; --check compares
69
+ against the release feed.
67
70
  help [group] [verb] Print help for a group or a verb.
68
71
 
69
72
  discover Learn what is already true for this project.
@@ -126,6 +129,24 @@ Run 'rcf help <group>' for group help; 'rcf help <group> <verb>' for
126
129
  per-verb help.
127
130
  `;
128
131
 
132
+ const CORE_GROUP_HELP = `Usage: rcf <core-verb> [options]
133
+
134
+ Platform plumbing that predates any RCF stage. Core verbs dispatch at
135
+ the top level (they are invoked as \`rcf <verb>\`, not \`rcf core <verb>\`);
136
+ this group is a documentation grouping for \`rcf help\`.
137
+
138
+ Verbs:
139
+ init Scaffold a new RCF project in this directory.
140
+ doctor Diagnose and repair init-hygiene drift.
141
+ guidance [topic] Print a method document from the installed pack.
142
+ mcp Serve the project over MCP (local stdio).
143
+ version [--check] Print installed version; --check compares
144
+ against the release feed.
145
+ help [group] [verb] Print help for a group or a verb.
146
+
147
+ Run 'rcf help <verb>' for per-verb help.
148
+ `;
149
+
129
150
  const DISCOVER_HELP = `Usage: rcf discover <verb> [options]
130
151
 
131
152
  Learn what is already true for this project: classify supplied
@@ -223,6 +244,7 @@ Run 'rcf help audit <verb>' for per-verb help.
223
244
  `;
224
245
 
225
246
  export const GROUP_HELP = {
247
+ core: CORE_GROUP_HELP,
226
248
  discover: DISCOVER_HELP,
227
249
  define: DEFINE_HELP,
228
250
  build: BUILD_GROUP_HELP,
@@ -286,6 +308,7 @@ export const CORE_HELP = {
286
308
  doctor: DOCTOR_HELP,
287
309
  guidance: GUIDANCE_HELP,
288
310
  mcp: MCP_HELP,
311
+ version: VERSION_HELP,
289
312
  };
290
313
 
291
314
  /**
@@ -319,7 +342,10 @@ export async function main(argv, deps = {}) {
319
342
  stdout.write(GROUP_HELP[first]);
320
343
  return 0;
321
344
  }
322
- const body = HELP_MAP[first][verb];
345
+ // `core` is a documentation grouping - core verbs dispatch at the
346
+ // top level, so `rcf help core <verb>` delegates to the same
347
+ // per-verb block that `rcf help <verb>` prints.
348
+ const body = first === 'core' ? CORE_HELP[verb] : HELP_MAP[first][verb];
323
349
  if (!body) {
324
350
  stderr.write(`[error] usage no help topic '${first} ${verb}'\n`);
325
351
  stdout.write(GROUP_HELP[first]);