rcf-lite 0.22.0 → 0.23.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 (151) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/bin/rcf.js +13 -2
  3. package/blueprints/application-account-settings/docs/topics.md +2 -0
  4. package/blueprints/application-admin-console/docs/topics.md +2 -0
  5. package/blueprints/application-api-rest/docs/topics.md +2 -0
  6. package/blueprints/application-charts/docs/topics.md +2 -0
  7. package/blueprints/application-dashboard/docs/topics.md +2 -0
  8. package/blueprints/application-datatable/docs/topics.md +2 -0
  9. package/blueprints/application-empty-error-states/docs/topics.md +2 -0
  10. package/blueprints/application-error-handling/docs/topics.md +2 -0
  11. package/blueprints/application-file-upload/docs/topics.md +2 -0
  12. package/blueprints/application-forms-wizard/docs/topics.md +2 -0
  13. package/blueprints/application-notifications-in-app/docs/topics.md +2 -0
  14. package/blueprints/application-onboarding-tour/docs/topics.md +2 -0
  15. package/blueprints/application-spa/docs/topics.md +3 -1
  16. package/blueprints/delivery-ci-workflows/docs/topics.md +2 -0
  17. package/blueprints/deploy-cloudflare-workers/CHANGELOG.md +69 -0
  18. package/blueprints/deploy-cloudflare-workers/README.md +12 -0
  19. package/blueprints/deploy-cloudflare-workers/blueprint.json +234 -36
  20. package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1306-deploy-cloudflare-workers-spa-shape.json +30 -0
  21. package/blueprints/deploy-cloudflare-workers/contributions/probes/assets-manifest-scan.mjs +207 -0
  22. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-013.json +18 -0
  23. package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-014.json +18 -0
  24. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12113.json +36 -0
  25. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12114.json +27 -0
  26. package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12115.json +27 -0
  27. package/blueprints/deploy-cloudflare-workers/docs/topics.md +3 -1
  28. package/blueprints/deploy-cloudflare-workers/guide/deploy-cloudflare-workers.md +25 -0
  29. package/blueprints/email-smtp-resend/docs/topics.md +2 -0
  30. package/blueprints/jobs-background/CHANGELOG.md +16 -0
  31. package/blueprints/jobs-background/README.md +105 -0
  32. package/blueprints/jobs-background/blueprint.json +149 -0
  33. package/blueprints/jobs-background/contributions/adrs/adr-3101-jobs-background-model.json +27 -0
  34. package/blueprints/jobs-background/contributions/adrs/adr-3102-jobs-background-scheduler-mode.json +25 -0
  35. package/blueprints/jobs-background/contributions/adrs/adr-3103-jobs-background-requires-applied-capabilities.json +25 -0
  36. package/blueprints/jobs-background/contributions/adrs/adr-3104-jobs-background-timeout-floor.json +25 -0
  37. package/blueprints/jobs-background/contributions/probes/apply-time-override.mjs +95 -0
  38. package/blueprints/jobs-background/contributions/probes/apply-time-refusal.mjs +82 -0
  39. package/blueprints/jobs-background/contributions/probes/event-secrecy.mjs +69 -0
  40. package/blueprints/jobs-background/contributions/probes/fake-clock-cron.mjs +65 -0
  41. package/blueprints/jobs-background/contributions/probes/probe-utils.mjs +91 -0
  42. package/blueprints/jobs-background/contributions/probes/retry-and-fail.mjs +65 -0
  43. package/blueprints/jobs-background/contributions/probes/run-apply-time-override.mjs +10 -0
  44. package/blueprints/jobs-background/contributions/probes/run-apply-time-refusal.mjs +11 -0
  45. package/blueprints/jobs-background/contributions/probes/run-event-secrecy.mjs +11 -0
  46. package/blueprints/jobs-background/contributions/probes/run-fake-clock-cron.mjs +11 -0
  47. package/blueprints/jobs-background/contributions/probes/run-retry-and-fail.mjs +11 -0
  48. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-001.json +18 -0
  49. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-002.json +18 -0
  50. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-003.json +18 -0
  51. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-004.json +18 -0
  52. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-005.json +18 -0
  53. package/blueprints/jobs-background/contributions/requirements/jobs-background-req-006.json +18 -0
  54. package/blueprints/jobs-background/contributions/tacs/tac-3101-jobs-background-job-definition.json +50 -0
  55. package/blueprints/jobs-background/contributions/tacs/tac-3102-jobs-background-scheduler.json +50 -0
  56. package/blueprints/jobs-background/contributions/tacs/tac-3103-jobs-background-run-log.json +49 -0
  57. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30101.json +25 -0
  58. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30102.json +25 -0
  59. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30103.json +25 -0
  60. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30104.json +25 -0
  61. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30105.json +25 -0
  62. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30106.json +25 -0
  63. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30107.json +25 -0
  64. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30108.json +25 -0
  65. package/blueprints/jobs-background/contributions/user-stories/jobs-background-us-30109.json +25 -0
  66. package/blueprints/jobs-background/docs/topics.md +62 -0
  67. package/blueprints/jobs-background/guide/jobs-background.md +147 -0
  68. package/blueprints/messaging-queue-cloudflare/CHANGELOG.md +15 -0
  69. package/blueprints/messaging-queue-cloudflare/README.md +125 -0
  70. package/blueprints/messaging-queue-cloudflare/blueprint.json +67 -0
  71. package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3001-messaging-queue-cloudflare-adapter.json +30 -0
  72. package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3002-messaging-queue-cloudflare-delivery-semantics.json +25 -0
  73. package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3003-messaging-queue-cloudflare-max-attempts-floor.json +25 -0
  74. package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3004-messaging-queue-cloudflare-batch-defaults.json +25 -0
  75. package/blueprints/messaging-queue-cloudflare/contributions/probes/event-secrecy.mjs +137 -0
  76. package/blueprints/messaging-queue-cloudflare/contributions/probes/probe-utils.mjs +82 -0
  77. package/blueprints/messaging-queue-cloudflare/contributions/probes/producer-facade-ready.mjs +35 -0
  78. package/blueprints/messaging-queue-cloudflare/contributions/probes/publish-to-delivery.mjs +94 -0
  79. package/blueprints/messaging-queue-cloudflare/contributions/probes/real-account-concurrency-smoke.mjs +54 -0
  80. package/blueprints/messaging-queue-cloudflare/contributions/probes/retry-and-dlq.mjs +87 -0
  81. package/blueprints/messaging-queue-cloudflare/contributions/probes/run-event-secrecy.mjs +5 -0
  82. package/blueprints/messaging-queue-cloudflare/contributions/probes/run-producer-facade-ready.mjs +11 -0
  83. package/blueprints/messaging-queue-cloudflare/contributions/probes/run-publish-to-delivery.mjs +5 -0
  84. package/blueprints/messaging-queue-cloudflare/contributions/probes/run-real-account-concurrency-smoke.mjs +5 -0
  85. package/blueprints/messaging-queue-cloudflare/contributions/probes/run-retry-and-dlq.mjs +5 -0
  86. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-001.json +18 -0
  87. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-002.json +18 -0
  88. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-003.json +18 -0
  89. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-004.json +18 -0
  90. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-005.json +18 -0
  91. package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-006.json +18 -0
  92. package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3001-messaging-queue-cloudflare-producer-facade.json +56 -0
  93. package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3002-messaging-queue-cloudflare-consumer-registration.json +40 -0
  94. package/blueprints/messaging-queue-cloudflare/contributions/tacs/tac-3003-messaging-queue-cloudflare-event-sink.json +39 -0
  95. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29101.json +34 -0
  96. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29102.json +34 -0
  97. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29103.json +25 -0
  98. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29104.json +25 -0
  99. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29105.json +25 -0
  100. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29106.json +25 -0
  101. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29107.json +25 -0
  102. package/blueprints/messaging-queue-cloudflare/contributions/user-stories/messaging-queue-cloudflare-us-29108.json +25 -0
  103. package/blueprints/messaging-queue-cloudflare/docs/topics.md +62 -0
  104. package/blueprints/messaging-queue-cloudflare/guide/messaging-queue-cloudflare.md +110 -0
  105. package/blueprints/object-storage-s3/docs/topics.md +2 -0
  106. package/blueprints/observability-essentials/docs/topics.md +2 -0
  107. package/blueprints/observability-logging/docs/topics.md +2 -0
  108. package/blueprints/observability-probe-endpoints/docs/topics.md +2 -0
  109. package/blueprints/persistence-data-d1/docs/topics.md +2 -0
  110. package/blueprints/persistence-data-postgres/docs/topics.md +2 -0
  111. package/blueprints/persistence-data-sqlite/docs/topics.md +2 -0
  112. package/blueprints/security-auth-clerk/docs/topics.md +2 -0
  113. package/blueprints/security-auth-keycloak/docs/topics.md +2 -0
  114. package/blueprints/security-auth-magic-link/docs/topics.md +2 -0
  115. package/blueprints/security-auth-oauth2/docs/topics.md +2 -0
  116. package/blueprints/security-secrets-management/docs/topics.md +2 -0
  117. package/fixtures/canary-manifest.json +6 -6
  118. package/package.json +1 -1
  119. package/rcf/code-nodes/cn-206.json +14 -0
  120. package/rcf/code-nodes/cn-207.json +13 -0
  121. package/rcf/code-nodes/cn-208.json +14 -0
  122. package/rcf/code-nodes/cn-209.json +14 -0
  123. package/rcf/code-nodes/cn-210.json +13 -0
  124. package/rcf/code-nodes/cn-211.json +12 -0
  125. package/rcf/code-nodes/cn-212.json +12 -0
  126. package/rcf/code-nodes/cn-213.json +12 -0
  127. package/rcf/code-nodes/cn-214.json +15 -0
  128. package/rcf/code-nodes/cn-215.json +13 -0
  129. package/rcf/code-nodes/cn-216.json +14 -0
  130. package/rcf/code-nodes/cn-217.json +13 -0
  131. package/rcf/fbs/fbs-062.json +20 -0
  132. package/rcf/fbs/fbs-063.json +22 -0
  133. package/rcf/fbs/fbs-064.json +23 -0
  134. package/rcf/requirements/req-029.json +57 -0
  135. package/rcf/requirements/req-030.json +67 -0
  136. package/rcf/requirements/req-042.json +59 -0
  137. package/rcf/requirements/req-043.json +39 -0
  138. package/rcf/test-suites/ts-072.json +62 -0
  139. package/rcf/test-suites/ts-073.json +38 -0
  140. package/rcf/test-suites/ts-074.json +30 -0
  141. package/rcf/test-suites/ts-075.json +38 -0
  142. package/rcf/test-suites/ts-076.json +70 -0
  143. package/rcf/user-stories/us-2901.json +45 -0
  144. package/rcf/user-stories/us-2902.json +36 -0
  145. package/rcf/user-stories/us-3001.json +45 -0
  146. package/rcf/user-stories/us-4201.json +69 -0
  147. package/rcf/user-stories/us-4301.json +78 -0
  148. package/releases/releases.yaml +11 -1
  149. package/src/blueprint/apply.js +7 -4
  150. package/src/blueprint/capabilities.js +25 -0
  151. package/src/cli/blueprint.js +8 -1
@@ -40,8 +40,18 @@
40
40
  # `npm install rcf-lite`.
41
41
 
42
42
  feedVersion: 1
43
- latest: "0.22.0"
43
+ latest: "0.23.0"
44
44
  releases:
45
+ - version: "0.23.0"
46
+ date: "2026-09-07"
47
+ breaking: false
48
+ headlines:
49
+ - "rcf-lite 0.23.0 adds the infrastructure spine four blueprints wide: a Postgres store with a facade contract and forward-only migrations, an S3-shape object store with a Cloudflare R2 first adapter, a Cloudflare Queues producer and consumer with dead-letter semantics, and a background-jobs discipline that refuses to apply until a queue is applied."
50
+ - "Each blueprint verifies against the real engine with node-only probes, and the four surfaces compose through the capability mechanism the round-3 admin console shipped."
51
+ - "Also in this release: the deploy-cloudflare-workers blueprint bumps 1.1.0 to 1.2.0 to bless the Workers-with-static-assets shape as the SPA-on-Workers deploy shape, and a CLI stdout-flush fix so large outputs are not truncated at the pipe buffer."
52
+ minAgentAction: null
53
+ notesUrl: "https://stravica.ai/docs/rcf/changelog/"
54
+
45
55
  - version: "0.22.0"
46
56
  date: "2026-09-07"
47
57
  breaking: false
@@ -397,10 +397,13 @@ export async function applyBlueprint({ projectRoot, tree, source, displaySource,
397
397
  const flag = blueprint.requiresAppliedCapabilities?.allowSkipFlag ?? 'allow-no-auth-yet';
398
398
  const caps = (blueprint.requiresAppliedCapabilities?.capabilities ?? []).join(', ');
399
399
  // Predecessor-family prose is derived from the flag name so
400
- // the note reads sensibly for both the auth override ("auth
401
- // blueprint") and the secrets override ("secrets-management
402
- // blueprint") without the runner learning the family list.
403
- const family = flag.includes('secrets') ? 'secrets-management' : 'auth';
400
+ // the note reads sensibly for the auth override, the secrets
401
+ // override, and the queue override (infra round 5 T-4)
402
+ // without the runner learning the family list. New families
403
+ // extend by pattern-matching a substring of the flag name.
404
+ const family = flag.includes('secrets')
405
+ ? 'secrets-management'
406
+ : (flag.includes('queue') ? 'queue' : 'auth');
404
407
  return `no ${family} yet: applied under --${flag}; surfaces gated on ${caps} will refuse at runtime until a ${family} blueprint is applied.`;
405
408
  })()
406
409
  : undefined,
@@ -129,6 +129,31 @@ export function buildRefusalMessage({ slug, refusalMessageId, requiredCapabiliti
129
129
  ` rcf define blueprint add ${slug} --${allowSkipFlag}`,
130
130
  ].join('\n');
131
131
  }
132
+ if (refusalMessageId === 'jobs-background-no-queue') {
133
+ // Infra round 5 T-4 (spec 5.4, Baz decision 5). Names the shipped
134
+ // queue provider explicitly (messaging-queue-cloudflare v1.0.0) so
135
+ // an operator hitting the refusal has the shipped answer in hand
136
+ // without a shelf-wide grep. Q3 default per spec section 10: the
137
+ // refusal asserts both exit code AND stable message id.
138
+ return [
139
+ `[jobs-background-no-queue] ${slug} requires an applied blueprint declaring`,
140
+ `at least one of: ${requiredCapabilities.join(', ')}`,
141
+ `or an operator override with --${allowSkipFlag}.`,
142
+ `The shipped provider is messaging-queue-cloudflare (v1.0.0+); a future`,
143
+ `messaging-queue-postgres sibling (Baz decision 7) will provide the same`,
144
+ `capability when demand mints it.`,
145
+ '',
146
+ 'Applied blueprints on this project:',
147
+ appliedBlock,
148
+ '',
149
+ 'Suggested next steps:',
150
+ ' 1. Apply messaging-queue-cloudflare first:',
151
+ ' rcf define blueprint add messaging-queue-cloudflare',
152
+ ` 2. Or override for a scaffolding pass (records a note on the applied`,
153
+ ` sidecar so later validation flags the surface as not-yet-activated):`,
154
+ ` rcf define blueprint add ${slug} --${allowSkipFlag}`,
155
+ ].join('\n');
156
+ }
132
157
  if (refusalMessageId === 'object-storage-s3-no-secrets') {
133
158
  return [
134
159
  `[object-storage-s3-no-secrets] ${slug} requires an applied blueprint declaring`,
@@ -196,6 +196,12 @@ const OPTION_SPEC = {
196
196
  // with the credential-pair discipline the spec names, rather than
197
197
  // reusing the auth-flavoured flag.
198
198
  'allow-no-secrets-yet': { type: 'boolean' },
199
+ // Infra round 5 T-4 (spec 5.4, Baz decision 5): jobs-background
200
+ // declares allowSkipFlag "allow-no-queue-yet" so the override for
201
+ // its requiresAppliedCapabilities gate stays semantically aligned
202
+ // with the queue-capability discipline the spec names, rather than
203
+ // reusing the auth or secrets flavoured flags.
204
+ 'allow-no-queue-yet': { type: 'boolean' },
199
205
  answer: { type: 'string', multiple: true },
200
206
  answers: { type: 'string' },
201
207
  };
@@ -346,7 +352,8 @@ export async function main(argv, deps = {}) {
346
352
  projectRoot, tree, source,
347
353
  namespaceOverride: parsed.values.namespace,
348
354
  allowNoAuthYet: parsed.values['allow-no-auth-yet'] === true
349
- || parsed.values['allow-no-secrets-yet'] === true,
355
+ || parsed.values['allow-no-secrets-yet'] === true
356
+ || parsed.values['allow-no-queue-yet'] === true,
350
357
  elicitAnswers,
351
358
  customAuthReadLine,
352
359
  // Library-qualified resolves rewire the applied identity under