rcf-lite 0.11.0 → 0.12.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 CHANGED
@@ -4,6 +4,25 @@ All notable changes to this project are documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Pre-1.0, breaking changes are signalled by a minor version bump.
6
6
 
7
+ ## [0.12.0] - 2026-08-28
8
+
9
+ Adopts `@stravica-ai/rcf-schemas@0.5.0` and retires the local `testPointer` strictness overlay (`w-2026-07-28-005`). The `testPointer`-required rule now comes from the shared schema and is expressed conditionally by TC status: REQUIRED for `passing` and `failing`, OPTIONAL for `pending` and `skipped` (`w-2026-08-27-dave-001`, Baz ratified 2026-08-27). Pre-0.12 rcf-lite required a pointer on every TC regardless of status; 0.12 relaxes pending and skipped TCs to schema-legit-without-pointer, which is the honest shape ("no executable has landed yet"). Existing test-suite documents that already carried a pointer on every TC continue to validate unchanged.
10
+
11
+ ### Changed (BREAKING)
12
+
13
+ - **`@stravica-ai/rcf-schemas` pin**: `0.4.5` → `0.5.0` (exact). The schema bump is a minor version because it tightens `testPointer` requiredness for `passing`/`failing` TCs and adds `minLength: 1` on the field when present. Docs that shipped `passing`/`failing` TCs without `testPointer` (dishonest coverage) stop validating; docs with only `pending`/`skipped` TCs without pointers remain valid, and are additionally now legitimate under the schema (they were rejected by the pre-0.12 overlay).
14
+ - **`src/core/store/validator.js`**: the local strictness overlay is removed. The `testSuite` schema is registered from the raw import (`testSuiteSchema`), not a `structuredClone`d strict copy. Validation of TCs now inherits the schema's conditional-required rule unmodified.
15
+ - **`src/ruleset/ruleset.json`**: `scopeTagVocabulary.schemaRef` URL bumped `v0.4.0` → `v0.5.0` in lock-step with the schemas release. Documentation reference only; no runtime behaviour change.
16
+
17
+ ### Added
18
+
19
+ - **`packages/rcf-lite/test/core/store/validator.test.js`**: the pre-0.12 overlay-driven `rejects TC without testPointer` case is replaced by four cases covering every branch of the new rule (passing rejected, failing rejected, pending accepted, skipped accepted). The empty-string testPointer case is retained; the `minLength: 1` guard is preserved by the shared schema.
20
+
21
+ ### Migration
22
+
23
+ - **rcf-lite consumers on 0.11**: no code change required. Existing chains with a `testPointer` on every TC keep validating. Chains that shipped pointer-less `pending` or `skipped` TCs (which the pre-0.12 overlay would have rejected on load) now validate on 0.12.
24
+ - **Downstream chains with dishonest `passing`/`failing` TCs (no pointer)**: were rejected on load by the pre-0.12 overlay and continue to be rejected on 0.12 by the shared schema. The fix is unchanged: add the real pointer or downgrade the TC to `pending`/`skipped`.
25
+
7
26
  ## [0.11.0] - 2026-08-27
8
27
 
9
28
  Guidance-only release: the agent-side driving playbook. No CLI, schema, or runtime behaviour changes.
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "registerCanary": [
3
3
  {
4
- "id": "rc-2026-08-27-001",
5
- "createdAt": "2026-08-27T14:25:40.313Z",
6
- "buildVersion": "0.11.0-mockdriver",
4
+ "id": "rc-2026-08-28-001",
5
+ "createdAt": "2026-08-28T15:27:07.804Z",
6
+ "buildVersion": "0.12.0-mockdriver",
7
7
  "fixturePromptId": "canary-prompt-01",
8
8
  "responseWordCount": 55,
9
9
  "grades": {
@@ -34,9 +34,9 @@
34
34
  "shipDespiteFailReason": "mock canary driver used; no real subagent was dispatched. This record verifies canary infrastructure only, not the register itself."
35
35
  },
36
36
  {
37
- "id": "rc-2026-08-27-002",
38
- "createdAt": "2026-08-27T14:25:40.313Z",
39
- "buildVersion": "0.11.0-mockdriver",
37
+ "id": "rc-2026-08-28-002",
38
+ "createdAt": "2026-08-28T15:27:07.805Z",
39
+ "buildVersion": "0.12.0-mockdriver",
40
40
  "fixturePromptId": "canary-prompt-02",
41
41
  "responseWordCount": 55,
42
42
  "grades": {
@@ -67,9 +67,9 @@
67
67
  "shipDespiteFailReason": "mock canary driver used; no real subagent was dispatched. This record verifies canary infrastructure only, not the register itself."
68
68
  },
69
69
  {
70
- "id": "rc-2026-08-27-003",
71
- "createdAt": "2026-08-27T14:25:40.314Z",
72
- "buildVersion": "0.11.0-mockdriver",
70
+ "id": "rc-2026-08-28-003",
71
+ "createdAt": "2026-08-28T15:27:07.805Z",
72
+ "buildVersion": "0.12.0-mockdriver",
73
73
  "fixturePromptId": "canary-prompt-03",
74
74
  "responseWordCount": 55,
75
75
  "grades": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rcf-lite",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "type": "module",
5
5
  "description": "One-install tooling for the Requirements Confidence Framework (RCF): the unified `rcf` CLI grouped into the five RCF tool groups (discover, define, build, verify, audit) plus a small core set (init, doctor, guidance, mcp), an MCP server, the live tree viewer and the fresh-context adversarial ship-gate verifier. Consumes @stravica-ai/rcf-schemas.",
6
6
  "license": "Apache-2.0",
@@ -57,7 +57,7 @@
57
57
  "#admissibility": "./src/admissibility/index.js"
58
58
  },
59
59
  "dependencies": {
60
- "@stravica-ai/rcf-schemas": "0.4.5",
60
+ "@stravica-ai/rcf-schemas": "0.5.0",
61
61
  "ajv": "^8.20.0",
62
62
  "ajv-formats": "^3.0.1"
63
63
  },
@@ -1,11 +1,14 @@
1
- // Schema validator. Registers the @stravica-ai/rcf-schemas@0.2.0 bundle once
2
- // at start-up and exposes a single `validateDocument` entry point. Returns
1
+ // Schema validator. Registers the @stravica-ai/rcf-schemas bundle once at
2
+ // start-up and exposes a single `validateDocument` entry point. Returns
3
3
  // `null` on success or a structured `validation` error on failure.
4
4
  //
5
5
  // Validation runs on load (FBS-001 / AC-701-3): the published bundle is the
6
- // contract, not a local copy - with ONE documented strictness overlay
7
- // (`testPointer` required on every Test Case; see the overlay block below).
8
- // Referential-integrity checking lives in the walker (D8); this module is
6
+ // contract, no local overlays. The `testPointer` conditional-required rule
7
+ // (required for TCs with status `passing` or `failing`, optional for
8
+ // `pending` or `skipped`) landed in the shared schema at rcf-schemas 0.5.0
9
+ // (w-2026-08-27-dave-001), replacing the pre-0.12 local strictness overlay
10
+ // that required a pointer on every TC (w-2026-07-28-005). Referential
11
+ // -integrity checking lives in the walker (D8); this module is
9
12
  // schema-shape-only.
10
13
 
11
14
  import Ajv2020 from 'ajv/dist/2020.js';
@@ -28,26 +31,12 @@ import cnSchema from '@stravica-ai/rcf-schemas/schemas/cn.schema.json' with { ty
28
31
 
29
32
  import { rcfError } from '../errors/index.js';
30
33
 
31
- // w-2026-07-28-005: strictness overlay - `testPointer` is REQUIRED on every
32
- // Test Case. The published bundle (0.3.1) still declares it optional; an
33
- // optional pointer is how 76 stub TC rows can claim coverage while pointing
34
- // at nothing, so Build Lite refuses the shape at the schema layer. This is
35
- // the ONLY local divergence from the published bundle, it is a pure
36
- // tightening (every document valid here is valid upstream), and it is
37
- // registered under the bundle's own $id so every validation path (walker
38
- // load, post-write gate, write verbs) inherits it. Durable home: making
39
- // testPointer required in @stravica-ai/rcf-schemas itself; drop this block
40
- // when that ships.
41
- const testSuiteSchemaStrict = structuredClone(testSuiteSchema);
42
- {
43
- const testCase = testSuiteSchemaStrict.$defs.testCase;
44
- testCase.required = [...testCase.required, 'testPointer'];
45
- testCase.properties.testPointer = {
46
- ...testCase.properties.testPointer,
47
- minLength: 1,
48
- description: 'Required pointer to the executable test, format: filePath::testName.',
49
- };
50
- }
34
+ // w-2026-07-28-005 strictness overlay retired at rcf-lite 0.12.0. The
35
+ // durable landing (`testPointer` required on Test Cases with status
36
+ // `passing` or `failing`, `minLength: 1` when present, and OPTIONAL for
37
+ // `pending` or `skipped`) shipped in @stravica-ai/rcf-schemas 0.5.0
38
+ // (w-2026-08-27-dave-001). rcf-lite now inherits the rule from the shared
39
+ // schema, unmodified.
51
40
 
52
41
  /**
53
42
  * @typedef {('manifest'|'prd'|'req'|'userStory'|'tad'|'tac'|'adr'|'buildSequence'|'fbs'|'testSuite'|'codeNode')} DocKind
@@ -63,8 +52,7 @@ const SCHEMAS = {
63
52
  adr: adrSchema,
64
53
  buildSequence: buildSequenceSchema,
65
54
  fbs: fbsSchema,
66
- // w-2026-07-28-005 overlay: the tightened copy, not the raw import.
67
- testSuite: testSuiteSchemaStrict,
55
+ testSuite: testSuiteSchema,
68
56
  // Phase 10: Code Node.
69
57
  codeNode: cnSchema,
70
58
  };
@@ -82,7 +82,7 @@
82
82
  ],
83
83
  "scopeTagVocabulary": {
84
84
  "sourcePackage": "@stravica-ai/rcf-schemas",
85
- "schemaRef": "https://schemas.stravica.io/rcf/v0.4.0/common.schema.json#/$defs/scopeTag",
85
+ "schemaRef": "https://schemas.stravica.io/rcf/v0.5.0/common.schema.json#/$defs/scopeTag",
86
86
  "values": [
87
87
  { "value": "library", "description": "Observable in an isolated library or fixture." },
88
88
  { "value": "runtime", "description": "Observable in the running product against local integration." },