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.
- package/CHANGELOG.md +36 -0
- package/blueprints/application-api-rest/README.md +5 -1
- package/blueprints/application-api-rest/blueprint.json +1 -1
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-006.json +4 -4
- package/blueprints/application-api-rest/contributions/tacs/tac-306-application-api-rest-operability.json +9 -8
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2103.json +3 -3
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2108.json +27 -27
- package/blueprints/application-api-rest/docs/topics.md +2 -2
- package/blueprints/application-api-rest/guide/application-api-rest.md +5 -1
- package/blueprints/application-spa/assets/tc-templates/e2e.md +85 -0
- package/blueprints/application-spa/blueprint.json +24 -2
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1134.json +24 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1135.json +24 -0
- package/blueprints/application-spa/docs/topics.md +2 -2
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/pull-request-checks.yml +69 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/notes.md +18 -0
- package/blueprints/delivery-ci-workflows/blueprint.json +301 -60
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6124.json +28 -0
- package/blueprints/delivery-ci-workflows/docs/topics.md +2 -2
- package/blueprints/deploy-cloudflare-workers/docs/topics.md +2 -2
- package/blueprints/email-smtp-resend/docs/topics.md +2 -2
- package/blueprints/observability-essentials/README.md +6 -2
- package/blueprints/observability-essentials/blueprint.json +133 -33
- package/blueprints/observability-essentials/contributions/adrs/adr-801-observability-essentials-health-probes.json +4 -4
- package/blueprints/observability-essentials/contributions/adrs/adr-802-observability-essentials-readiness-semantics.json +4 -4
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-001.json +4 -4
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-002.json +4 -4
- package/blueprints/observability-essentials/contributions/tacs/tac-801-observability-essentials-liveness-probe.json +10 -9
- package/blueprints/observability-essentials/contributions/tacs/tac-802-observability-essentials-readiness-probe.json +17 -11
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7101.json +12 -3
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7102.json +12 -3
- package/blueprints/observability-essentials/docs/topics.md +15 -8
- package/blueprints/observability-essentials/guide/observability-essentials.md +9 -3
- package/blueprints/observability-probe-endpoints/README.md +5 -1
- package/blueprints/observability-probe-endpoints/blueprint.json +116 -24
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1503-observability-probe-endpoints-kubernetes-default.json +5 -5
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14102.json +11 -2
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14107.json +11 -2
- package/blueprints/observability-probe-endpoints/docs/topics.md +6 -6
- package/blueprints/observability-probe-endpoints/guide/observability-probe-endpoints.md +10 -0
- package/blueprints/persistence-data-d1/docs/topics.md +2 -2
- package/blueprints/persistence-data-sqlite/docs/topics.md +2 -2
- package/blueprints/security-auth-clerk/docs/topics.md +2 -2
- package/blueprints/security-auth-keycloak/docs/topics.md +2 -2
- package/blueprints/security-auth-magic-link/docs/topics.md +2 -2
- package/blueprints/security-auth-oauth2/docs/topics.md +2 -2
- package/blueprints/security-secrets-management/docs/topics.md +2 -2
- package/fixtures/canary-manifest.json +9 -9
- package/package.json +13 -1
- package/rcf/code-nodes/cn-070.json +12 -0
- package/rcf/code-nodes/cn-071.json +12 -0
- package/rcf/code-nodes/cn-072.json +12 -0
- package/rcf/code-nodes/cn-073.json +12 -0
- package/rcf/code-nodes/cn-074.json +19 -0
- package/rcf/code-nodes/cn-075.json +15 -0
- package/rcf/code-nodes/cn-076.json +14 -0
- package/rcf/fbs/fbs-020.json +18 -0
- package/rcf/fbs/fbs-021.json +18 -0
- package/rcf/fbs/fbs-022.json +18 -0
- package/rcf/fbs/fbs-023.json +18 -0
- package/rcf/fbs/fbs-024.json +24 -0
- package/rcf/fbs/fbs-025.json +25 -0
- package/rcf/fbs/fbs-026.json +27 -0
- package/rcf/fbs/fbs-027.json +25 -0
- package/rcf/prd.json +3 -2
- package/rcf/requirements/req-011.json +22 -0
- package/rcf/requirements/req-012.json +22 -0
- package/rcf/test-suites/ts-030.json +66 -0
- package/rcf/test-suites/ts-031.json +59 -0
- package/rcf/test-suites/ts-032.json +50 -0
- package/rcf/test-suites/ts-033.json +83 -0
- package/rcf/test-suites/ts-034.json +32 -0
- package/rcf/test-suites/ts-035.json +23 -0
- package/rcf/test-suites/ts-036.json +65 -0
- package/rcf/test-suites/ts-037.json +55 -0
- package/rcf/user-stories/us-1101.json +51 -0
- package/rcf/user-stories/us-1102.json +60 -0
- package/rcf/user-stories/us-1103.json +51 -0
- package/rcf/user-stories/us-1104.json +60 -0
- package/rcf/user-stories/us-1201.json +34 -0
- package/rcf/user-stories/us-1202.json +25 -0
- package/rcf/user-stories/us-1203.json +43 -0
- package/rcf/user-stories/us-1204.json +25 -0
- package/releases/releases.yaml +21 -1
- package/src/blueprint/index.js +1 -0
- package/src/blueprint/remove-resolution.js +104 -0
- package/src/blueprint/supersede.js +2 -2
- package/src/cli/blueprint.js +41 -0
- package/src/cli/doctor.js +257 -5
- package/src/cli/init.js +166 -0
- package/src/setup/playwright-checks.js +426 -0
- package/src/verify/cli/run.js +28 -0
- package/src/verify/engine/index.js +24 -4
- 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:
|
|
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
|