@stravica-ai/rcf-schemas 0.4.1 → 0.4.2
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,27 @@ 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.4.2 - 2026-07-31
|
|
8
|
+
|
|
9
|
+
Additive patch bump: closes the Track B N-5 review finding on the 0.7.0 train. The `testTheatreFinding` shape now expresses "not every finding kind anchors on a test suite" honestly instead of forcing a UI-drift finding to smuggle an FBS id through the `tsId` slot.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **`manifest.schema.json`**: new optional `anchorId` (string, `minLength: 1`) on `$defs.testTheatreFinding`, for kinds whose anchor is not a test suite (for example, `uiBaselineDrift`, which anchors on the FBS id or a file path).
|
|
14
|
+
- Fixture: `fixtures/valid/manifest/manifest-007-ui-baseline-drift-anchor.json` proves the new shape (a `uiBaselineDrift` finding without `tsId`, carrying `anchorId`) validates alongside a legacy test-theatre finding on the same record.
|
|
15
|
+
- Tests: `manifest.test.js` covers the new `anchorId` field, the per-kind `tsId` requiredness rule (drift may omit; test-theatre kinds still must supply), the back-compat guarantee (a pre-0.4.2 emitter's `uiBaselineDrift` with `tsId` still validates), the `anchorId` `minLength: 1` guard, and the coexistence of `anchorId` + `tsId` on one finding.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- **`$defs.testTheatreFinding`**: top-level `required` list drops `tsId` (now `["kind", "detail", "severity"]`); a new `allOf` clause requires `tsId` for every kind other than `uiBaselineDrift`. Test-theatre kinds (`mockOnlyIntegrationClaim`, `testPointerBroken`, `assertionStrengthWeak`, `acIdsCoverageDrift`, `otherDeclared`) still cannot omit `tsId`.
|
|
20
|
+
- `manifest.schema.json` description names the 0.4.2 addition and restates the back-compat guarantee.
|
|
21
|
+
|
|
22
|
+
### Notes
|
|
23
|
+
|
|
24
|
+
- Additive-only: every 0.4.0- or 0.4.1-valid manifest remains valid. The change relaxes a required field on one specific kind and adds an optional field; nothing that previously validated stops validating.
|
|
25
|
+
- Canonical `$id` URLs stay at `v0.4.0`, following the patch-release precedent set at 0.2.1, 0.3.1, and 0.4.1.
|
|
26
|
+
- Consumed by `rcf-build-lite`'s Track B fix pass (PR `Stravica/rcf-lite#75`), which will bump its `@stravica-ai/rcf-schemas` dep to `^0.4.2` and emit `uiBaselineDrift` findings with `anchorId` instead of the legacy `tsId: fbs.fbsId` smuggle.
|
|
27
|
+
|
|
7
28
|
## 0.4.1 - 2026-07-31
|
|
8
29
|
|
|
9
30
|
Additive patch bump: closes the verification-integrity B-1 finding on the 0.7.0 train by giving `rcf finalise --ship-without-verified` a durable, greppable manifest record.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "uiBaselineDrift anchor coverage",
|
|
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
|
+
"reviewAudit": [
|
|
8
|
+
{
|
|
9
|
+
"id": "ra-FBS-016-1",
|
|
10
|
+
"fbsId": "FBS-016",
|
|
11
|
+
"createdAt": "2026-07-31T15:10:00Z",
|
|
12
|
+
"testTheatreFindings": [
|
|
13
|
+
{
|
|
14
|
+
"anchorId": "FBS-016",
|
|
15
|
+
"kind": "uiBaselineDrift",
|
|
16
|
+
"detail": "hex literal #ff0000 detected in src/ui/dashboard.ts (baseline defaults.noHexInViewFiles: true).",
|
|
17
|
+
"severity": "block"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"tsId": "TS-016",
|
|
21
|
+
"kind": "mockOnlyIntegrationClaim",
|
|
22
|
+
"detail": "testLevel=integration but runtimeProvenance.profile=mock",
|
|
23
|
+
"severity": "block"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"verdict": "block"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://schemas.stravica.io/rcf/v0.4.0/manifest.schema.json",
|
|
4
4
|
"title": "RCF Project Manifest",
|
|
5
|
-
"description": "Project manifest. Roots-only shape: declares prd, tad, bs. Children are owned by their parents and discovered by walking from the roots. From 0.4.0 the manifest also carries optional records for pre-flight configuration, review audits, UI baselines, browser verification, baseline-AC opt-outs, intake classification, register-regression canaries, and the review-surface state. From 0.4.1 the manifest additionally carries optional shipWithoutVerified acknowledgements written by rcf finalise --ship-without-verified. Every added field is optional; pre-0.4.0 manifests remain valid.",
|
|
5
|
+
"description": "Project manifest. Roots-only shape: declares prd, tad, bs. Children are owned by their parents and discovered by walking from the roots. From 0.4.0 the manifest also carries optional records for pre-flight configuration, review audits, UI baselines, browser verification, baseline-AC opt-outs, intake classification, register-regression canaries, and the review-surface state. From 0.4.1 the manifest additionally carries optional shipWithoutVerified acknowledgements written by rcf finalise --ship-without-verified. From 0.4.2 the testTheatreFinding shape carries an optional anchorId and drops tsId from its required list when kind is uiBaselineDrift (the drift finding is not anchored on a test suite); every other kind still requires tsId, and any 0.4.0- or 0.4.1-valid record remains valid. Every added field is optional; pre-0.4.0 manifests remain valid.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"required": ["version", "projectName", "prd", "tad", "bs"],
|
|
@@ -178,10 +178,15 @@
|
|
|
178
178
|
"testTheatreFinding": {
|
|
179
179
|
"type": "object",
|
|
180
180
|
"additionalProperties": false,
|
|
181
|
-
"required": ["
|
|
181
|
+
"required": ["kind", "detail", "severity"],
|
|
182
182
|
"properties": {
|
|
183
183
|
"tsId": { "$ref": "https://schemas.stravica.io/rcf/v0.4.0/common.schema.json#/$defs/tsId" },
|
|
184
184
|
"tcId": { "$ref": "https://schemas.stravica.io/rcf/v0.4.0/common.schema.json#/$defs/tcId" },
|
|
185
|
+
"anchorId": {
|
|
186
|
+
"type": "string",
|
|
187
|
+
"minLength": 1,
|
|
188
|
+
"description": "Free-form anchor for findings whose kind does not map to a test suite (for example, uiBaselineDrift, which anchors on the FBS id or a file path). Optional; test-theatre kinds keep tsId as the anchor."
|
|
189
|
+
},
|
|
185
190
|
"kind": {
|
|
186
191
|
"enum": [
|
|
187
192
|
"mockOnlyIntegrationClaim",
|
|
@@ -207,7 +212,19 @@
|
|
|
207
212
|
"enum": ["advisory", "warn", "block"],
|
|
208
213
|
"description": "Severity of the finding. Only block severities force a block verdict on the audit."
|
|
209
214
|
}
|
|
210
|
-
}
|
|
215
|
+
},
|
|
216
|
+
"allOf": [
|
|
217
|
+
{
|
|
218
|
+
"if": { "properties": { "kind": { "const": "uiBaselineDrift" } }, "required": ["kind"] },
|
|
219
|
+
"then": {},
|
|
220
|
+
"else": {
|
|
221
|
+
"properties": {
|
|
222
|
+
"tsId": { "$ref": "https://schemas.stravica.io/rcf/v0.4.0/common.schema.json#/$defs/tsId" }
|
|
223
|
+
},
|
|
224
|
+
"required": ["tsId"]
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
]
|
|
211
228
|
},
|
|
212
229
|
"mutationSamplingRecord": {
|
|
213
230
|
"type": "object",
|