@stravica-ai/rcf-schemas 0.6.0 → 0.6.1

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 CHANGED
@@ -4,6 +4,31 @@ All notable changes to `@stravica-ai/rcf-schemas` are documented in this file.
4
4
 
5
5
  The format roughly follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Pre-1.0 breaking changes are signalled by a minor bump per semver 0.x convention.
6
6
 
7
+ ## 0.6.1 - 2026-09-05
8
+
9
+ Patch bump for the T-0 visual-round Playwright-first ship-gate seam (`projects/blueprint-library/specs/visual-round-spec-2026-09-04.md`, section 3.4). Adds an additive, optional `probePacks[]` carrier on `browserVerificationRecord` so the record shape that rcf-lite's `packages/rcf-lite/src/browser-verify/pack-runner.js` already emits (per pack `packName`, `packVersion`, `blueprintSlug`, `applicable`, `checks[]`, optional `preChecks[]`, optional pack-level `detail` string) can persist without tripping `additionalProperties: false`.
10
+
11
+ Patch semver convention: URLs pinned at `v0.6.0`. No breaking change; every 0.6.0-valid manifest keeps validating.
12
+
13
+ ### Added
14
+
15
+ - **`manifest.schema.json`**: new optional `probePacks` array on `$defs.browserVerificationRecord`. Items are the new `$defs.browserVerificationProbePack` def: required `packName` (min-length-1 string), `packVersion` (min-length-1 string), `blueprintSlug` (min-length-1 string), `applicable` (boolean), `checks` (array, empty allowed when `applicable` is false); optional `detail` (string, carries the appliesTo skip reason for a not-applicable pack), and optional `preChecks` (array of the same check-item shape). `additionalProperties: false` on the pack item.
16
+ - **`manifest.schema.json`**: new `$defs.browserVerificationProbePackCheck` def used for both `checks[]` and `preChecks[]`. Required `id` (min-length-1 string, equals an AC id contributed by the same blueprint for browser checks per pack-loader), `verdict` (enum `pass | warn | fail | skipped`, where the `skipped` token is emitted by the pack-runner when a browser check's `dependsOn` pre-check failed), `severity` (enum `block | warn | advisory`); optional `detail` (string). `additionalProperties: false` on the check item.
17
+ - **Fixtures (valid)**: `fixtures/valid/manifest/manifest-014-browser-verify-probe-packs.json` (two packs, one `applicable: false` with a skip detail and an empty `checks`, one `applicable: true` with a `preChecks` entry and three checks covering `pass`, `fail` with detail, and `skipped` with a `skipped-by-pre-check:<id>` detail).
18
+ - **Fixtures (invalid)**: `fixtures/invalid/manifest/manifest-023-browser-verify-probe-pack-unknown-field.json` (a check item with an unknown field, refused by `additionalProperties: false`).
19
+ - **Tests**: `test/manifest.test.js` gains 7 cases (two-pack positive shape, back-compat absent-probePacks, unknown-field-on-check rejection, `skipped` verdict acceptance, unknown-verdict rejection, unknown-severity rejection, missing-required-`checks` rejection). Total suite grows from 323 to 330.
20
+
21
+ ### Migration
22
+
23
+ - **Existing chains on 0.6.0**: bump `@stravica-ai/rcf-schemas` to `0.6.1`. Every existing document keeps validating; `probePacks` is optional and unknown to pre-T-0 callers.
24
+ - **rcf-lite consumer bump**: `rcf-lite` pins `@stravica-ai/rcf-schemas` exactly. Its own release bumps the pin (rides the admin-console train or a separate one-line PR); this repo does not touch rcf-lite.
25
+
26
+ ### Notes
27
+
28
+ - Traces to work item `w-2026-09-05-dave-001` and the T-4 integration gate (`d-2026-09-05-001`) that found `rcf verify browser --probe-pack <name>` composing a `probePacks[]` record and exiting `3` with `validation /browserVerification/0 must NOT have additional properties` before this schema could accept it. Every earlier T-N gate ran with `--dry-run` and did not exercise the persist path.
29
+ - Sub-defs sit alongside the existing `browserVerificationInvariantCheck` and `browserVerificationAuthSmokeCheck` peers. Reuses the file's per-check-item pattern.
30
+ - Aggregate-verdict semantics live in `packages/rcf-lite/src/browser-verify/manifest-writer.js:aggregateVerdict` per spec section 3.4; the schema does not encode the cross-field rule.
31
+
7
32
  ## 0.6.0 - 2026-09-04
8
33
 
9
34
  Minor bump for commit track S1 of the ratified eval-node spec (Baz ratified 2026-09-04, "eval-node - agree spec is right shape, schema route is correct"). Adds a new `eval.schema.json` document type as the graded-output peer of a Test Suite, adds an optional `determinism` marker on the inline acceptance criterion, and adds an optional `tags` array on the User Story so a consumer authoring rule (rcf-lite blueprint-authoring checklist s6) becomes satisfiable. Every change is additive at the document layer: every 0.5.1-valid document remains valid.
@@ -0,0 +1,35 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "projectName": "invalid: probePacks check with unknown field",
4
+ "prd": { "id": "PRD-001", "path": "rcf/prd.json" },
5
+ "tad": { "id": "TAD-001", "path": "rcf/tad.json" },
6
+ "bs": { "id": "BS-001", "path": "rcf/build-sequence.json" },
7
+ "browserVerification": [
8
+ {
9
+ "id": "bv-FBS-040-1",
10
+ "fbsId": "FBS-040",
11
+ "createdAt": "2026-09-05T09:20:00Z",
12
+ "mode": "agentScreenshotCritique",
13
+ "runtimeProfile": "local-dev",
14
+ "runtimeUrl": "http://127.0.0.1:3000",
15
+ "routesChecked": [
16
+ { "path": "/", "screenshotPath": ".rcf/artefacts/x.png", "themeApplied": "light" }
17
+ ],
18
+ "invariantChecks": [
19
+ { "invariant": "sharedNavPresent", "verdict": "pass" }
20
+ ],
21
+ "probePacks": [
22
+ {
23
+ "packName": "application-datatable-grid-shell",
24
+ "packVersion": "1.0.0",
25
+ "blueprintSlug": "application-datatable",
26
+ "applicable": true,
27
+ "checks": [
28
+ { "id": "AC-17101-1", "verdict": "pass", "severity": "block", "unexpectedField": "x" }
29
+ ]
30
+ }
31
+ ],
32
+ "verdict": "pass"
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "projectName": "visual-round T-0 probe-pack fixture",
4
+ "prd": { "id": "PRD-001", "path": "rcf/prd.json" },
5
+ "tad": { "id": "TAD-001", "path": "rcf/tad.json" },
6
+ "bs": { "id": "BS-001", "path": "rcf/build-sequence.json" },
7
+ "browserVerification": [
8
+ {
9
+ "id": "bv-FBS-040-1",
10
+ "fbsId": "FBS-040",
11
+ "createdAt": "2026-09-05T09:00:00Z",
12
+ "mode": "agentScreenshotCritique",
13
+ "runtimeProfile": "local-dev",
14
+ "runtimeUrl": "http://127.0.0.1:3000",
15
+ "routesChecked": [
16
+ { "path": "/", "screenshotPath": ".rcf/artefacts/bv-FBS-040-1/root-light.png", "themeApplied": "light" }
17
+ ],
18
+ "invariantChecks": [
19
+ { "invariant": "sharedNavPresent", "verdict": "pass" }
20
+ ],
21
+ "probePacks": [
22
+ {
23
+ "packName": "application-dashboard-tile-states",
24
+ "packVersion": "1.0.0",
25
+ "blueprintSlug": "application-dashboard",
26
+ "applicable": false,
27
+ "detail": "appliesTo returned false for FBS-040",
28
+ "checks": []
29
+ },
30
+ {
31
+ "packName": "application-datatable-grid-shell",
32
+ "packVersion": "1.0.0",
33
+ "blueprintSlug": "application-datatable",
34
+ "applicable": true,
35
+ "preChecks": [
36
+ { "id": "AC-17101-0", "verdict": "pass", "severity": "warn" }
37
+ ],
38
+ "checks": [
39
+ { "id": "AC-17101-1", "verdict": "pass", "severity": "block" },
40
+ { "id": "AC-17101-2", "verdict": "fail", "severity": "block", "detail": "row order after sort did not match server order" },
41
+ { "id": "AC-17101-3", "verdict": "skipped", "severity": "warn", "detail": "skipped-by-pre-check:AC-17101-0" }
42
+ ]
43
+ }
44
+ ],
45
+ "verdict": "block"
46
+ }
47
+ ]
48
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stravica-ai/rcf-schemas",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "type": "module",
5
5
  "description": "JSON Schemas for the Requirements Confidence Framework (RCF). Language-neutral. The contract every RCF tool keys to.",
6
6
  "license": "Apache-2.0",
@@ -451,9 +451,75 @@
451
451
  "type": "string",
452
452
  "minLength": 1,
453
453
  "description": "Operator's reason for shipping despite a block verdict. Written by --accept-block on --mark complete."
454
+ },
455
+ "probePacks": {
456
+ "type": "array",
457
+ "items": { "$ref": "#/$defs/browserVerificationProbePack" },
458
+ "description": "Playwright-first probe-pack results per the visual-round spec (2026-09-04) section 3.4. Additive and optional: pre-T-0 callers omit the field; a T-0 run emits one entry per pack composed by packages/rcf-lite/src/browser-verify/pack-runner.js. The aggregate verdict extends per spec section 3.4 (block on any severity:block pack check failing, warn on any severity:warn pack check failing)."
454
459
  }
455
460
  }
456
461
  },
462
+ "browserVerificationProbePack": {
463
+ "type": "object",
464
+ "additionalProperties": false,
465
+ "required": ["packName", "packVersion", "blueprintSlug", "applicable", "checks"],
466
+ "properties": {
467
+ "packName": {
468
+ "type": "string",
469
+ "minLength": 1,
470
+ "description": "Pack identifier, kebab-slug. Prefixed by the blueprint slug per pack-schema.js."
471
+ },
472
+ "packVersion": {
473
+ "type": "string",
474
+ "minLength": 1,
475
+ "description": "Pack version at emission time, copied from the pack's declared version field."
476
+ },
477
+ "blueprintSlug": {
478
+ "type": "string",
479
+ "minLength": 1,
480
+ "description": "Slug of the blueprint that contributes the pack."
481
+ },
482
+ "applicable": {
483
+ "type": "boolean",
484
+ "description": "Whether the pack's appliesTo predicate returned true for this FBS. When false, checks[] is emitted empty and a detail string explains the skip."
485
+ },
486
+ "detail": {
487
+ "type": "string",
488
+ "description": "Free-text explanation attached to the pack record, typically the appliesTo skip reason or an error message from the pack-runner."
489
+ },
490
+ "checks": {
491
+ "type": "array",
492
+ "items": { "$ref": "#/$defs/browserVerificationProbePackCheck" },
493
+ "description": "One entry per pack check; empty when applicable is false."
494
+ },
495
+ "preChecks": {
496
+ "type": "array",
497
+ "items": { "$ref": "#/$defs/browserVerificationProbePackCheck" },
498
+ "description": "Optional fast-fail source-scan pre-checks per spec section 3.5. Any pre-check that fails may skip browser checks that declare dependsOn on it, recorded as verdict:skipped on the browser check."
499
+ }
500
+ }
501
+ },
502
+ "browserVerificationProbePackCheck": {
503
+ "type": "object",
504
+ "additionalProperties": false,
505
+ "required": ["id", "verdict", "severity"],
506
+ "properties": {
507
+ "id": {
508
+ "type": "string",
509
+ "minLength": 1,
510
+ "description": "Check id. For a browser check the id equals an AC id contributed by the same blueprint (loader cross-checks this at pack load time)."
511
+ },
512
+ "verdict": {
513
+ "enum": ["pass", "warn", "fail", "skipped"],
514
+ "description": "Check verdict. skipped is emitted by the pack-runner when a browser check's dependsOn pre-check failed."
515
+ },
516
+ "severity": {
517
+ "enum": ["block", "warn", "advisory"],
518
+ "description": "Check severity, copied from the pack declaration. Feeds the aggregate verdict rule per spec section 3.4."
519
+ },
520
+ "detail": { "type": "string" }
521
+ }
522
+ },
457
523
  "browserVerificationRoute": {
458
524
  "type": "object",
459
525
  "additionalProperties": false,