rcf-lite 0.16.0 → 0.18.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 (94) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/blueprints/application-api-rest/README.md +5 -1
  3. package/blueprints/application-api-rest/blueprint.json +1 -1
  4. package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-006.json +4 -4
  5. package/blueprints/application-api-rest/contributions/tacs/tac-306-application-api-rest-operability.json +9 -8
  6. package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2103.json +3 -3
  7. package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2108.json +27 -27
  8. package/blueprints/application-api-rest/docs/topics.md +2 -2
  9. package/blueprints/application-api-rest/guide/application-api-rest.md +5 -1
  10. package/blueprints/application-spa/assets/tc-templates/e2e.md +85 -0
  11. package/blueprints/application-spa/blueprint.json +24 -2
  12. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1134.json +24 -0
  13. package/blueprints/application-spa/contributions/user-stories/application-spa-us-1135.json +24 -0
  14. package/blueprints/application-spa/docs/topics.md +2 -2
  15. package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/pull-request-checks.yml +69 -0
  16. package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/notes.md +18 -0
  17. package/blueprints/delivery-ci-workflows/blueprint.json +301 -60
  18. package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6124.json +28 -0
  19. package/blueprints/delivery-ci-workflows/docs/topics.md +2 -2
  20. package/blueprints/deploy-cloudflare-workers/docs/topics.md +2 -2
  21. package/blueprints/email-smtp-resend/docs/topics.md +2 -2
  22. package/blueprints/observability-essentials/README.md +6 -2
  23. package/blueprints/observability-essentials/blueprint.json +133 -33
  24. package/blueprints/observability-essentials/contributions/adrs/adr-801-observability-essentials-health-probes.json +4 -4
  25. package/blueprints/observability-essentials/contributions/adrs/adr-802-observability-essentials-readiness-semantics.json +4 -4
  26. package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-001.json +4 -4
  27. package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-002.json +4 -4
  28. package/blueprints/observability-essentials/contributions/tacs/tac-801-observability-essentials-liveness-probe.json +10 -9
  29. package/blueprints/observability-essentials/contributions/tacs/tac-802-observability-essentials-readiness-probe.json +17 -11
  30. package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7101.json +12 -3
  31. package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7102.json +12 -3
  32. package/blueprints/observability-essentials/docs/topics.md +15 -8
  33. package/blueprints/observability-essentials/guide/observability-essentials.md +9 -3
  34. package/blueprints/observability-probe-endpoints/README.md +5 -1
  35. package/blueprints/observability-probe-endpoints/blueprint.json +116 -24
  36. package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1503-observability-probe-endpoints-kubernetes-default.json +5 -5
  37. package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14102.json +11 -2
  38. package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14107.json +11 -2
  39. package/blueprints/observability-probe-endpoints/docs/topics.md +6 -6
  40. package/blueprints/observability-probe-endpoints/guide/observability-probe-endpoints.md +10 -0
  41. package/blueprints/persistence-data-d1/docs/topics.md +2 -2
  42. package/blueprints/persistence-data-sqlite/docs/topics.md +2 -2
  43. package/blueprints/security-auth-clerk/docs/topics.md +2 -2
  44. package/blueprints/security-auth-keycloak/docs/topics.md +2 -2
  45. package/blueprints/security-auth-magic-link/docs/topics.md +2 -2
  46. package/blueprints/security-auth-oauth2/docs/topics.md +2 -2
  47. package/blueprints/security-secrets-management/docs/topics.md +2 -2
  48. package/fixtures/canary-manifest.json +9 -9
  49. package/package.json +13 -1
  50. package/rcf/code-nodes/cn-070.json +12 -0
  51. package/rcf/code-nodes/cn-071.json +12 -0
  52. package/rcf/code-nodes/cn-072.json +12 -0
  53. package/rcf/code-nodes/cn-073.json +12 -0
  54. package/rcf/code-nodes/cn-074.json +19 -0
  55. package/rcf/code-nodes/cn-075.json +15 -0
  56. package/rcf/code-nodes/cn-076.json +14 -0
  57. package/rcf/fbs/fbs-020.json +18 -0
  58. package/rcf/fbs/fbs-021.json +18 -0
  59. package/rcf/fbs/fbs-022.json +18 -0
  60. package/rcf/fbs/fbs-023.json +18 -0
  61. package/rcf/fbs/fbs-024.json +24 -0
  62. package/rcf/fbs/fbs-025.json +25 -0
  63. package/rcf/fbs/fbs-026.json +27 -0
  64. package/rcf/fbs/fbs-027.json +25 -0
  65. package/rcf/prd.json +3 -2
  66. package/rcf/requirements/req-011.json +22 -0
  67. package/rcf/requirements/req-012.json +22 -0
  68. package/rcf/test-suites/ts-030.json +66 -0
  69. package/rcf/test-suites/ts-031.json +59 -0
  70. package/rcf/test-suites/ts-032.json +50 -0
  71. package/rcf/test-suites/ts-033.json +83 -0
  72. package/rcf/test-suites/ts-034.json +32 -0
  73. package/rcf/test-suites/ts-035.json +23 -0
  74. package/rcf/test-suites/ts-036.json +65 -0
  75. package/rcf/test-suites/ts-037.json +55 -0
  76. package/rcf/user-stories/us-1101.json +51 -0
  77. package/rcf/user-stories/us-1102.json +60 -0
  78. package/rcf/user-stories/us-1103.json +51 -0
  79. package/rcf/user-stories/us-1104.json +60 -0
  80. package/rcf/user-stories/us-1201.json +34 -0
  81. package/rcf/user-stories/us-1202.json +25 -0
  82. package/rcf/user-stories/us-1203.json +43 -0
  83. package/rcf/user-stories/us-1204.json +25 -0
  84. package/releases/releases.yaml +21 -1
  85. package/src/blueprint/index.js +1 -0
  86. package/src/blueprint/remove-resolution.js +104 -0
  87. package/src/blueprint/supersede.js +2 -2
  88. package/src/cli/blueprint.js +41 -0
  89. package/src/cli/doctor.js +257 -5
  90. package/src/cli/init.js +166 -0
  91. package/src/setup/playwright-checks.js +426 -0
  92. package/src/verify/cli/run.js +28 -0
  93. package/src/verify/engine/index.js +24 -4
  94. package/src/verify/engine/launcher.js +41 -10
@@ -18,7 +18,7 @@ import {
18
18
  import { readChain as defaultReadChain } from '../chain/index.js';
19
19
  import { runProvisioning, cleanup as defaultCleanup } from '../provision/index.js';
20
20
  import { composeBrief } from './brief.js';
21
- import { resolveLauncher } from './launcher.js';
21
+ import { PLAYWRIGHT_MCP_VERSION, playwrightMcpConfig, resolveLauncher } from './launcher.js';
22
22
  import { aggregateVerdict, derivePerAcVerdicts, validateFinding } from '../verdict/index.js';
23
23
  import { buildReport } from '../report/index.js';
24
24
 
@@ -127,11 +127,23 @@ export async function runVerification(opts = {}, deps = {}) {
127
127
  if (cleanupResult.cleanupBlocked?.length) provisioning.cleanupBlocked = cleanupResult.cleanupBlocked;
128
128
  };
129
129
 
130
+ // Playwright MCP effective pin (spec 2026-09-03, section 1). The override
131
+ // overrides the constant for one run; unset means the pinned default. The
132
+ // effective pin lands on the report as runStats.playwrightMcpVersion so a
133
+ // report re-render tells the operator what browser tooling the pass ran
134
+ // against, whether default or overridden (spec Q1).
135
+ const playwrightMcpVersion = opts.playwrightMcpVersion ?? PLAYWRIGHT_MCP_VERSION;
136
+ const playwrightMcpOverridden = opts.playwrightMcpVersion !== undefined
137
+ && opts.playwrightMcpVersion !== null;
138
+ const mcpConfigForPin = playwrightMcpOverridden
139
+ ? playwrightMcpConfig(playwrightMcpVersion)
140
+ : undefined;
141
+
130
142
  // 6. Launch the isolated verifier agent (§7.3 isolation env, §9 fresh session).
131
143
  let launchResult;
132
144
  try {
133
145
  const launchAgent = await resolveLauncher(deps);
134
- launchResult = await launchAgent({ brief, url, profile });
146
+ launchResult = await launchAgent({ brief, url, profile, mcpConfig: mcpConfigForPin });
135
147
  } catch (err) {
136
148
  // A verifier agent that could not run — or whose output could not be
137
149
  // ingested — is NEVER a fabricated PASS (§9). But the report is still
@@ -147,6 +159,7 @@ export async function runVerification(opts = {}, deps = {}) {
147
159
  findings: [], blockedAcs, provisioning,
148
160
  launchFailure: { message: err.message, rawOutputPath: err.rawOutputPath ?? null },
149
161
  perAcVerdicts,
162
+ runStats: { playwrightMcpVersion },
150
163
  });
151
164
  return { report };
152
165
  }
@@ -162,14 +175,21 @@ export async function runVerification(opts = {}, deps = {}) {
162
175
  // 9. Aggregate the verdict — split, never averaged (§5.1).
163
176
  const verdict = aggregateVerdict({ findings, blockedAcs, notDeployed: false });
164
177
 
165
- // 10. Build the ingestible report (§5.3).
178
+ // 10. Build the ingestible report (§5.3). The effective Playwright MCP pin
179
+ // (default or overridden) always lands on the report as
180
+ // runStats.playwrightMcpVersion so a report re-render tells the operator
181
+ // which browser tooling this pass ran against (spec 2026-09-03, Q1).
182
+ const runStatsForReport = {
183
+ ...(launchResult?.runStats ?? {}),
184
+ playwrightMcpVersion,
185
+ };
166
186
  const report = buildReport({
167
187
  profile, url, parityEnv, reachability, chainRef: chain.chainRef, repo: opts.repo,
168
188
  persona: opts.persona, startedAt, finishedAt: now(),
169
189
  verifierIsolation: isolationProvenance(),
170
190
  verdict, verdictAuthority,
171
191
  findings, blockedAcs, provisioning,
172
- runStats: launchResult?.runStats ?? null,
192
+ runStats: runStatsForReport,
173
193
  perAcVerdicts,
174
194
  });
175
195
 
@@ -17,6 +17,46 @@ import { isolationEnv, isolationProvenance } from '#core/isolation';
17
17
  /** Env var naming a module (exporting `launchAgent`) to use instead of the default spawn launcher. The integration + manual-e2e seam. */
18
18
  export const LAUNCHER_ENV = 'RCF_VERIFY_LAUNCHER';
19
19
 
20
+ /**
21
+ * The pinned Playwright MCP version verify runs against. Verify is the ship
22
+ * gate; @latest re-resolves per verify run and any newly published
23
+ * Playwright MCP behaviour would become a silent runtime change on the next
24
+ * pass. The pin closes that reproducibility hole (spec 2026-09-03, section
25
+ * 1). A bump is a deliberate rcf-lite change with its own commit, CHANGELOG
26
+ * entry, and, where behaviour is affected, a re-run of the verify test set;
27
+ * pre-1.0, a Playwright MCP major bump ships as a rcf-lite minor bump per
28
+ * the pre-1.0 minor-is-breaking convention, a patch bump otherwise.
29
+ * `rcf verify run --playwright-mcp-version <semver>` overrides for one run
30
+ * only (emergency use), printed on stderr and recorded on the report.
31
+ */
32
+ export const PLAYWRIGHT_MCP_VERSION = '0.0.80';
33
+
34
+ /** True iff the value is a semver X.Y.Z (numeric segments; no pre-release). Verify's override
35
+ * accepts only exact semver so a typo cannot silently install a range. */
36
+ export function isSemverString(value) {
37
+ return typeof value === 'string' && /^\d+\.\d+\.\d+$/.test(value);
38
+ }
39
+
40
+ /**
41
+ * Compose the Playwright MCP config with the given pin. Exported so the CLI
42
+ * override can build the same shape without duplicating the DEFAULT_MCP_CONFIG
43
+ * literal.
44
+ * @param {string} version - the semver pin
45
+ * @returns {object}
46
+ */
47
+ export function playwrightMcpConfig(version) {
48
+ return {
49
+ mcpServers: {
50
+ playwright: {
51
+ type: 'stdio',
52
+ command: 'npx',
53
+ args: ['-y', `@playwright/mcp@${version}`],
54
+ env: {},
55
+ },
56
+ },
57
+ };
58
+ }
59
+
20
60
  /**
21
61
  * The minimal, SCOPED tool surface the verifier agent needs to drive a live
22
62
  * app and collect runtime evidence (spec §9 method). Deliberately narrow —
@@ -40,16 +80,7 @@ export const DEFAULT_ALLOWED_TOOLS = Object.freeze([
40
80
  * context (§9). Server name `playwright` -> tool prefix `mcp__playwright__*`.
41
81
  * `npx` is resolved off PATH for portability (no machine-specific absolute).
42
82
  */
43
- export const DEFAULT_MCP_CONFIG = Object.freeze({
44
- mcpServers: {
45
- playwright: {
46
- type: 'stdio',
47
- command: 'npx',
48
- args: ['-y', '@playwright/mcp@latest'],
49
- env: {},
50
- },
51
- },
52
- });
83
+ export const DEFAULT_MCP_CONFIG = Object.freeze(playwrightMcpConfig(PLAYWRIGHT_MCP_VERSION));
53
84
 
54
85
  /**
55
86
  * Build the child-process launch configuration for the verifier agent. Pure