@stravica-ai/rcf-schemas 0.5.0 → 0.5.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,23 @@ 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.5.1 - 2026-08-31
|
|
8
|
+
|
|
9
|
+
Additive patch bump for the external-blueprint-library mechanism landing in `rcf-lite`. Adds one optional field on the applied-blueprint record so a project can durably record which registered library an apply resolved through, without the ownership fact having to be re-derived by string-matching `source`. Every change is additive: every 0.5.0-valid document remains valid, and every existing id continues to validate byte-for-byte.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **`manifest.schema.json`**: new optional `libraryPrefix` on `$defs.appliedBlueprintRecord`, referencing `common.$defs.blueprintSlug`. Stamped when an apply resolves through a registered external blueprint library (for example, an apply of `acme:spa` stamps `libraryPrefix: acme`); absent for shelf and path applies. Once stamped, the record's `libraryPrefix` is the ownership fact: the library registry may be renamed, re-pointed, or unregistered without orphaning previously applied records. Written by the library-resolving branch of `rcf blueprint add`; read by `rcf library remove`'s ownership check in preference to `source`-prefix matching.
|
|
14
|
+
- Fixtures (valid): `fixtures/valid/manifest/manifest-013-blueprint-library-prefix.json` (one library-applied blueprint with `libraryPrefix` stamped, alongside a shelf-applied blueprint with no `libraryPrefix`).
|
|
15
|
+
- Fixtures (invalid): `fixtures/invalid/manifest/manifest-022-library-prefix-bad-slug.json` (uppercase `libraryPrefix`, violates the `blueprintSlug` shape).
|
|
16
|
+
- Tests: `libraryPrefix` cases added to `manifest.test.js` covering the happy path (stamped alone, coexists with `namespace` and `contributions`), the shelf/path back-compat case (record without `libraryPrefix` still validates), a mixed library-and-shelf record, the two reject cases (uppercase, leading-hyphen), and a pre-0.5.1 back-compat case that keeps a `blueprints[]` record without `libraryPrefix` valid.
|
|
17
|
+
|
|
18
|
+
### Notes
|
|
19
|
+
|
|
20
|
+
- Additive-only: every 0.5.0-valid document remains valid. `additionalProperties: false` on the record is preserved: `libraryPrefix` is the only new permitted property.
|
|
21
|
+
- Canonical `$id` URLs stay at `v0.5.0`, following the patch-release precedent set at 0.2.1, 0.3.1, 0.4.1, 0.4.2, 0.4.3, 0.4.4, and 0.4.5.
|
|
22
|
+
- Version choice: per repo precedent (every additive change since 0.2.0 has bumped as a patch), this bumps `0.5.0 -> 0.5.1`.
|
|
23
|
+
|
|
7
24
|
## 0.5.0 - 2026-08-28
|
|
8
25
|
|
|
9
26
|
Minor bump for the `testPointer` conditional-by-status ruling (`w-2026-08-27-dave-001`, Baz ratified 2026-08-27). `testPointer` on a Test Case is now REQUIRED when the TC's `status` is `passing` or `failing`, and OPTIONAL when the TC's `status` is `pending` or `skipped`. This closes the "a passing verdict may point at nothing" hole the 0.4.x shape allowed and moves the durable landing point for the rule out of `rcf-lite`'s local strictness overlay (`w-2026-07-28-005`) into the shared schema, where every consumer inherits it uniformly.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Invalid libraryPrefix (uppercase)",
|
|
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
|
+
"blueprints": [
|
|
8
|
+
{
|
|
9
|
+
"slug": "spa",
|
|
10
|
+
"version": "1.0.0",
|
|
11
|
+
"appliedAt": "2026-08-31T10:00:00Z",
|
|
12
|
+
"source": "acme:spa",
|
|
13
|
+
"libraryPrefix": "ACME"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Project applying blueprints through a registered library",
|
|
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
|
+
"blueprints": [
|
|
8
|
+
{
|
|
9
|
+
"slug": "spa",
|
|
10
|
+
"version": "1.0.0",
|
|
11
|
+
"appliedAt": "2026-08-31T10:00:00Z",
|
|
12
|
+
"source": "acme:spa",
|
|
13
|
+
"libraryPrefix": "acme",
|
|
14
|
+
"contributions": [
|
|
15
|
+
{ "id": "spa-REQ-001", "path": "rcf/requirements/spa-req-001.json", "kind": "req" }
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"slug": "rest",
|
|
20
|
+
"version": "1.0.0",
|
|
21
|
+
"appliedAt": "2026-08-31T10:00:05Z",
|
|
22
|
+
"source": "rcf/blueprints/rest"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
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.5.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. 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. From 0.4.4 the manifest carries two optional additive sections that host the blueprint-library mechanism: blueprints[] (applied-blueprints registry written by rcf blueprint add / remove / upgrade) and standards[] (standards-pack registry written at rcf init and rcf standards add). From 0.4.5 the manifest additionally carries an optional resolutions[] section: one entry per operator-authored resolution of a cross-blueprint conflict, keyed at first by the globalAdrTopic conflict class (two applied blueprints each contributing a scope:global ADR on the same topic, resolved by a project-level ADR that supersedes both). Written by rcf blueprint supersede and by rcf blueprint add --resolve; read by the conflict detector so the resolved conflict is honoured and both blueprint ADRs may co-reside as superseded history. 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. From 0.4.4 the manifest carries two optional additive sections that host the blueprint-library mechanism: blueprints[] (applied-blueprints registry written by rcf blueprint add / remove / upgrade) and standards[] (standards-pack registry written at rcf init and rcf standards add). From 0.4.5 the manifest additionally carries an optional resolutions[] section: one entry per operator-authored resolution of a cross-blueprint conflict, keyed at first by the globalAdrTopic conflict class (two applied blueprints each contributing a scope:global ADR on the same topic, resolved by a project-level ADR that supersedes both). Written by rcf blueprint supersede and by rcf blueprint add --resolve; read by the conflict detector so the resolved conflict is honoured and both blueprint ADRs may co-reside as superseded history. From 0.5.1 the appliedBlueprintRecord carries an optional libraryPrefix (blueprintSlug), stamped when an apply resolves through a registered external blueprint library so the library-registered ownership is durable on the record itself rather than derived by string-matching source; absent for shelf or path applies. 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"],
|
|
@@ -797,6 +797,10 @@
|
|
|
797
797
|
"$ref": "https://schemas.stravica.io/rcf/v0.5.0/common.schema.json#/$defs/blueprintSlug",
|
|
798
798
|
"description": "Doc-id namespace used for this blueprint's contributions. Defaults to slug when omitted; the field exists so an operator can rename the namespace at add-time to avoid a project-authored slug collision."
|
|
799
799
|
},
|
|
800
|
+
"libraryPrefix": {
|
|
801
|
+
"$ref": "https://schemas.stravica.io/rcf/v0.5.0/common.schema.json#/$defs/blueprintSlug",
|
|
802
|
+
"description": "Registered library prefix the blueprint was resolved through at apply time (for example, acme in acme:spa). Present only when the apply resolved through a registered external blueprint library; absent for shelf or path applies. Once stamped this record's libraryPrefix is the ownership fact for remove: the library registry may be edited (renamed, re-pointed, unregistered) without orphaning previously applied records."
|
|
803
|
+
},
|
|
800
804
|
"contributions": {
|
|
801
805
|
"type": "array",
|
|
802
806
|
"items": { "$ref": "#/$defs/appliedBlueprintContribution" },
|