@stravica-ai/rcf-schemas 0.3.1 → 0.4.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 +27 -0
- package/fixtures/invalid/fbs/fbs-008-design-stage-complete-non-boolean.json +15 -0
- package/fixtures/invalid/fbs/fbs-009-design-stage-bad-theme-mode.json +23 -0
- package/fixtures/invalid/fbs/fbs-010-service-attestation-bad-mode.json +22 -0
- package/fixtures/invalid/fbs/fbs-011-design-journey-single-step.json +24 -0
- package/fixtures/invalid/manifest/manifest-004-optout-reason-too-short.json +18 -0
- package/fixtures/invalid/manifest/manifest-005-browser-verify-bad-verdict.json +24 -0
- package/fixtures/invalid/manifest/manifest-006-intake-fidelity-bad.json +16 -0
- package/fixtures/invalid/manifest/manifest-007-intake-artefact-bad-kind.json +18 -0
- package/fixtures/invalid/manifest/manifest-008-intake-finding-bad-kind.json +22 -0
- package/fixtures/invalid/manifest/manifest-009-review-surface-bad-mode.json +17 -0
- package/fixtures/invalid/manifest/manifest-010-preflight-bad-id.json +16 -0
- package/fixtures/invalid/manifest/manifest-011-ui-baseline-bad-id.json +14 -0
- package/fixtures/invalid/manifest/manifest-012-review-audit-bad-id.json +16 -0
- package/fixtures/invalid/manifest/manifest-013-browser-verify-bad-id.json +24 -0
- package/fixtures/invalid/manifest/manifest-014-baseline-optout-bad-id.json +18 -0
- package/fixtures/invalid/manifest/manifest-015-intake-bad-id.json +16 -0
- package/fixtures/invalid/manifest/manifest-016-register-canary-bad-id.json +24 -0
- package/fixtures/invalid/manifest/manifest-017-register-canary-missing-dimension.json +23 -0
- package/fixtures/invalid/req/req-004-shape-classification-bad-shape.json +18 -0
- package/fixtures/invalid/test-suite/ts-006-runtime-provenance-bad-profile.json +24 -0
- package/fixtures/invalid/user-story/us-003-provenance-bad-authored-by.json +23 -0
- package/fixtures/valid/fbs/fbs-004-track-a-service-attestation.json +23 -0
- package/fixtures/valid/fbs/fbs-005-track-b-ui-design-stage.json +56 -0
- package/fixtures/valid/manifest/manifest-003-v040-all-fields.json +217 -0
- package/fixtures/valid/manifest/manifest-004-pre-040-backcompat.json +8 -0
- package/fixtures/valid/manifest/manifest-005-preflight-operator-added-no-refs.json +26 -0
- package/fixtures/valid/req/req-003-shape-classification.json +23 -0
- package/fixtures/valid/test-suite/ts-003-runtime-provenance.json +38 -0
- package/fixtures/valid/user-story/us-003-baseline-provenance.json +41 -0
- package/package.json +1 -1
- package/schemas/adr.schema.json +10 -10
- package/schemas/build-sequence.schema.json +7 -7
- package/schemas/cn.schema.json +8 -8
- package/schemas/common.schema.json +5 -1
- package/schemas/fbs.schema.json +215 -11
- package/schemas/manifest.schema.json +693 -5
- package/schemas/prd.schema.json +6 -6
- package/schemas/req.schema.json +78 -7
- package/schemas/tac.schema.json +9 -9
- package/schemas/tad.schema.json +7 -7
- package/schemas/test-suite.schema.json +35 -9
- package/schemas/user-story.schema.json +35 -11
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,33 @@ 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.0 - 2026-07-30
|
|
8
|
+
|
|
9
|
+
Additive minor bump carrying the 0.7.0 release-train schema surface for `rcf-lite`: three ratified track specs (verification-integrity, UI-design-gate, elicitation-and-playbook-hardening) co-ship every new schema field in one release, resolved through a single `$defs`-uniqueness sweep. Every field is optional at schema level; pre-0.4.0 chains remain valid. The 0.6.0 init-hygiene spec is pure build-side and touches no schemas here.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **`common.schema.json`**: new `$defs.attestationMode` enum (`live | sandboxed | mocked | declaredMockOnly | notShipped`), shared between `fbs.dependsOnServices[]` and `manifest.preFlightConfig.servicesInScope[]`.
|
|
14
|
+
- **`test-suite.schema.json`**: optional `runtimeProvenance` on the `testCase` subschema, with `profile` enum (`mock | stub | fixture | live | mixed`), `envVarsRequired[]`, `externalHostsReached[]`, `notes`. `$defs.runtimeProvenance` defined locally.
|
|
15
|
+
- **`fbs.schema.json`**: optional `dependsOnServices[]` (Track A service attestation), plus Track B's `uiBearing` (boolean), `uiClassification`, `designStage` (journeys, navigation model, theme-and-a11y), and `designStageComplete` (boolean gate at `--mark complete`). New `$defs`: `serviceDependency`, `uiClassification`, `uiClassificationSignal`, `designStage`, `designJourney`, `designNavModel`, `designNavRoute`, `designThemeAndA11y`.
|
|
16
|
+
- **`req.schema.json`**: optional `shapeClassification` (Track C+D REQ-shape classifier verdict) with `shapes[]` enum (`webUi | httpApi | auth | persistence | notifications | none`), `reason`, `signals[]`, `classifiedAt`, and `operatorOverride`. New `$defs`: `reqShapeClassification`, `reqShapeSignal`, `reqShapeOperatorOverride`.
|
|
17
|
+
- **`user-story.schema.json`**: optional `provenance` on the acceptance-criterion subschema (Track C+D) with `authoredBy` enum (`operator | baseline | operatorEdited`), `baselineKey`, `injectedAt`, `sourceReqShape`, `acceptedByOperatorAt`. New `$defs.acProvenance`.
|
|
18
|
+
- **`manifest.schema.json`**: broad additive surface across the three tracks. New optional fields: `testCommand` (string), `preFlightConfig[]`, `reviewAudit[]`, `uiBaseline`, `uiBaselineHistory[]`, `browserVerification[]`, `baselineAcOptOuts[]`, `intakeClassification`, `registerCanary[]`, `reviewSurface`. New `$defs`: `preFlightConfigRecord`, `preFlightServiceEntry`, `designShapeAnswer`, `reviewAuditRecord`, `testTheatreFinding` (whose `kind` enum includes Track B's `uiBaselineDrift`), `mutationSamplingRecord`, `mutationSurvivor`, `uiBaselineRecord`, `uiBaselineDefaults`, `uiBaselineComponentVocabulary`, `uiBaselineTypography`, `uiBaselineInteractionDefaults`, `uiBaselineAuthFlow`, `uiBaselineOptOut`, `browserVerificationRecord`, `browserVerificationRoute`, `browserVerificationInvariantCheck`, `browserVerificationAuthSmokeCheck`, `baselineAcOptOutRecord`, `intakeClassificationRecord`, `intakeArtefact`, `intakeValidationFinding`, `intakeElicitationScope`, `registerCanaryRecord`, `registerCanaryGrades`, `registerCanaryPatternGrade`, `registerCanaryWordBudgetGrade`, `reviewSurfaceRecord`, `reviewSurfaceViewServer`. Load-bearing constraints: `baselineAcOptOutRecord.reason` carries `minLength: 20`; `browserVerificationRecord.routesChecked` and `invariantChecks` require `minItems: 1`; `preFlightConfigRecord.id`, `uiBaselineRecord.id`, `baselineAcOptOutRecord.id`, `intakeClassificationRecord.id`, and `registerCanaryRecord.id` carry monotonic id patterns.
|
|
19
|
+
- Fixtures: valid coverage under `fixtures/valid/fbs/`, `test-suite/`, `req/`, `user-story/`, `manifest/`, including a dedicated back-compat manifest fixture (`manifest-004-pre-040-backcompat.json`) proving a pre-0.4.0 manifest still validates against 0.4.0 unchanged. Invalid coverage under `fixtures/invalid/` exercises the enum, minLength, and boolean-type constraints most likely to catch drift downstream.
|
|
20
|
+
- Targeted per-schema tests extended for every new field: `fbs.test.js`, `test-suite.test.js`, `req.test.js`, `user-story.test.js`. New file `manifest.test.js` covers the manifest-level additions in depth, including the `baselineAcOptOutRecord.reason` 20-character floor and every enum shape.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- **Canonical `$id`** URLs bumped from `https://schemas.stravica.io/rcf/v0.3.0/...` to `https://schemas.stravica.io/rcf/v0.4.0/...` on every schema, in lock-step with the bundle version. Matches the precedent set at 0.3.0.
|
|
25
|
+
- `manifest.schema.json` description now names the added optional records and states the back-compat guarantee explicitly.
|
|
26
|
+
|
|
27
|
+
### Notes
|
|
28
|
+
|
|
29
|
+
- Every addition is optional at schema level. The additive-only contract is proven by `fixtures/valid/manifest/manifest-004-pre-040-backcompat.json` (a bare 0.3.x-era manifest) validating cleanly, and by the `pre-0.4.0 ... still validates` tests in each per-schema test file.
|
|
30
|
+
- `$defs` uniqueness was audited across all three tracks before authoring; no shape-disagreeing collisions. The one intentionally shared def (`common.$defs.attestationMode`) is the enum both FBS's `dependsOnServices[]` and manifest's `preFlightServiceEntry` need.
|
|
31
|
+
- The 0.6.0 init-hygiene spec (`packages/{build,core}` in `rcf-lite`) confirmed schema-free and therefore not represented here.
|
|
32
|
+
- Pre-merge constraint alignments in the same 0.4.0 release: `fbs.$defs.designJourney.steps` `minItems` raised from 1 to 2 to match Track B §3.1 ("2-8 short strings"); `manifest.$defs.preFlightServiceEntry.sourceRefs` `minItems` relaxed from 1 to 0 so operator-added service candidates with no PRD or TAD reference validate. Negative-fixture symmetry back-filled for the enum and id-pattern constraints that lacked a dedicated fixture.
|
|
33
|
+
|
|
7
34
|
## 0.3.1 - 2026-07-10
|
|
8
35
|
|
|
9
36
|
Added optional `noCodeNodes` boolean to `fbs.schema.json`. It declares that a build spec produces no traceable code (docs-only or config-only): `rcf build --mark complete` records it via `--no-code-nodes` and the CodeNode gate skips the spec. Additive and backward-compatible - existing FBS documents without the field remain valid. Canonical `$id` URLs stay at `v0.3.0`, following the patch-release precedent set at 0.2.1.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-016",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 16,
|
|
6
|
+
"executionStatus": "inProgress",
|
|
7
|
+
"title": "Web UI dashboard",
|
|
8
|
+
"summary": "Dashboard rendering.",
|
|
9
|
+
"acIds": ["AC-1101-1"],
|
|
10
|
+
"dependsOnFbsIds": [],
|
|
11
|
+
"uiBearing": true,
|
|
12
|
+
"designStageComplete": "yes",
|
|
13
|
+
"createdAt": "2026-07-30T14:15:00Z",
|
|
14
|
+
"updatedAt": "2026-07-30T14:15:00Z"
|
|
15
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-016",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 16,
|
|
6
|
+
"executionStatus": "inProgress",
|
|
7
|
+
"title": "Web UI dashboard",
|
|
8
|
+
"summary": "Dashboard rendering.",
|
|
9
|
+
"acIds": ["AC-1101-1"],
|
|
10
|
+
"dependsOnFbsIds": [],
|
|
11
|
+
"uiBearing": true,
|
|
12
|
+
"designStage": {
|
|
13
|
+
"themeAndA11y": {
|
|
14
|
+
"themeMode": "sepia",
|
|
15
|
+
"themeTokensModule": "src/ui/tokens.ts",
|
|
16
|
+
"contrastTargets": "WCAG AA",
|
|
17
|
+
"contrastTestPath": "test/a11y.test.ts",
|
|
18
|
+
"contrastTestAuthoredBeforePalette": true
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"createdAt": "2026-07-30T14:15:00Z",
|
|
22
|
+
"updatedAt": "2026-07-30T14:15:00Z"
|
|
23
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-011",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 11,
|
|
6
|
+
"executionStatus": "inProgress",
|
|
7
|
+
"title": "Email channel",
|
|
8
|
+
"summary": "Recovery email dispatch.",
|
|
9
|
+
"acIds": ["AC-1001-2"],
|
|
10
|
+
"dependsOnFbsIds": [],
|
|
11
|
+
"dependsOnServices": [
|
|
12
|
+
{
|
|
13
|
+
"id": "resend",
|
|
14
|
+
"displayName": "Resend email API",
|
|
15
|
+
"purpose": "outbound transactional email delivery",
|
|
16
|
+
"attestationMode": "someday",
|
|
17
|
+
"acIds": ["AC-1001-2"]
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"createdAt": "2026-07-30T14:15:00Z",
|
|
21
|
+
"updatedAt": "2026-07-30T14:15:00Z"
|
|
22
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-016",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 16,
|
|
6
|
+
"executionStatus": "inProgress",
|
|
7
|
+
"title": "Web UI dashboard",
|
|
8
|
+
"summary": "Dashboard rendering.",
|
|
9
|
+
"acIds": ["AC-1101-1"],
|
|
10
|
+
"dependsOnFbsIds": [],
|
|
11
|
+
"uiBearing": true,
|
|
12
|
+
"designStage": {
|
|
13
|
+
"journeys": [
|
|
14
|
+
{
|
|
15
|
+
"id": "single-step-journey",
|
|
16
|
+
"actor": "signed-in owner",
|
|
17
|
+
"goal": "see status at a glance",
|
|
18
|
+
"steps": ["lands on / after login"]
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"createdAt": "2026-07-30T14:15:00Z",
|
|
23
|
+
"updatedAt": "2026-07-30T14:15:00Z"
|
|
24
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Reason floor breach",
|
|
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
|
+
"baselineAcOptOuts": [
|
|
8
|
+
{
|
|
9
|
+
"id": "boo-2026-07-30-002",
|
|
10
|
+
"createdAt": "2026-07-30T14:30:00Z",
|
|
11
|
+
"reqId": "REQ-012",
|
|
12
|
+
"baselineKey": "auth.htmlLoginPage",
|
|
13
|
+
"scope": "req",
|
|
14
|
+
"reason": "too short",
|
|
15
|
+
"operatorAckAt": "2026-07-30T14:30:00Z"
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Bad browser-verify verdict",
|
|
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-016-1",
|
|
10
|
+
"fbsId": "FBS-016",
|
|
11
|
+
"createdAt": "2026-07-30T15:22: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-016-1/dashboard.png", "themeApplied": "light" }
|
|
17
|
+
],
|
|
18
|
+
"invariantChecks": [
|
|
19
|
+
{ "invariant": "sharedNavPresent", "verdict": "pass" }
|
|
20
|
+
],
|
|
21
|
+
"verdict": "green"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Intake fidelity enum breach",
|
|
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
|
+
"intakeClassification": {
|
|
8
|
+
"id": "ic-2026-07-30-001",
|
|
9
|
+
"createdAt": "2026-07-30T13:50:00Z",
|
|
10
|
+
"fidelity": "wireframeSet",
|
|
11
|
+
"artefacts": [],
|
|
12
|
+
"validationFindings": [],
|
|
13
|
+
"elicitationScope": {},
|
|
14
|
+
"operatorAckAt": "2026-07-30T13:55:00Z"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Intake artefact kind enum breach",
|
|
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
|
+
"intakeClassification": {
|
|
8
|
+
"id": "ic-2026-07-30-001",
|
|
9
|
+
"createdAt": "2026-07-30T13:50:00Z",
|
|
10
|
+
"fidelity": "napkin",
|
|
11
|
+
"artefacts": [
|
|
12
|
+
{ "path": "docs/scribbles.md", "kind": "wireframe" }
|
|
13
|
+
],
|
|
14
|
+
"validationFindings": [],
|
|
15
|
+
"elicitationScope": {},
|
|
16
|
+
"operatorAckAt": "2026-07-30T13:55:00Z"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Intake validation finding kind enum breach",
|
|
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
|
+
"intakeClassification": {
|
|
8
|
+
"id": "ic-2026-07-30-001",
|
|
9
|
+
"createdAt": "2026-07-30T13:50:00Z",
|
|
10
|
+
"fidelity": "briefLight",
|
|
11
|
+
"artefacts": [],
|
|
12
|
+
"validationFindings": [
|
|
13
|
+
{
|
|
14
|
+
"kind": "typoDetected",
|
|
15
|
+
"detail": "not in the schema enum",
|
|
16
|
+
"raisedAt": "2026-07-30T13:52:00Z"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"elicitationScope": {},
|
|
20
|
+
"operatorAckAt": "2026-07-30T13:55:00Z"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Review-surface viewServer mode enum breach",
|
|
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
|
+
"reviewSurface": {
|
|
8
|
+
"viewServer": {
|
|
9
|
+
"mode": "daemon",
|
|
10
|
+
"startedAt": "2026-07-30T09:40:00Z",
|
|
11
|
+
"socketPath": ".rcf/view.sock",
|
|
12
|
+
"pid": 1,
|
|
13
|
+
"healthCheckPath": "http://127.0.0.1:4373/healthz",
|
|
14
|
+
"lastHeartbeatAt": "2026-07-30T09:40:00Z"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Preflight-config id pattern breach",
|
|
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
|
+
"preFlightConfig": [
|
|
8
|
+
{
|
|
9
|
+
"id": "preflight-001",
|
|
10
|
+
"createdAt": "2026-07-30T14:20:00Z",
|
|
11
|
+
"prdId": "PRD-001",
|
|
12
|
+
"servicesInScope": [],
|
|
13
|
+
"operatorAckAt": "2026-07-30T14:22:00Z"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "UI-baseline id pattern breach",
|
|
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
|
+
"uiBaseline": {
|
|
8
|
+
"id": "baseline-001",
|
|
9
|
+
"createdAt": "2026-07-30T14:15:00Z",
|
|
10
|
+
"prdId": "PRD-001",
|
|
11
|
+
"defaults": {},
|
|
12
|
+
"operatorAckAt": "2026-07-30T14:15:00Z"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Review-audit id pattern breach",
|
|
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": "audit-011-1",
|
|
10
|
+
"fbsId": "FBS-011",
|
|
11
|
+
"createdAt": "2026-07-30T15:10:00Z",
|
|
12
|
+
"testTheatreFindings": [],
|
|
13
|
+
"verdict": "pass"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Browser-verify id pattern breach",
|
|
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": "verify-016-1",
|
|
10
|
+
"fbsId": "FBS-016",
|
|
11
|
+
"createdAt": "2026-07-30T15:22:00Z",
|
|
12
|
+
"mode": "operatorSession",
|
|
13
|
+
"runtimeProfile": "local-dev",
|
|
14
|
+
"runtimeUrl": "http://127.0.0.1:3000",
|
|
15
|
+
"routesChecked": [
|
|
16
|
+
{ "path": "/", "screenshotPath": ".rcf/artefacts/verify-016-1/dashboard.png", "themeApplied": "light" }
|
|
17
|
+
],
|
|
18
|
+
"invariantChecks": [
|
|
19
|
+
{ "invariant": "sharedNavPresent", "verdict": "pass" }
|
|
20
|
+
],
|
|
21
|
+
"verdict": "pass"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Baseline-AC opt-out id pattern breach",
|
|
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
|
+
"baselineAcOptOuts": [
|
|
8
|
+
{
|
|
9
|
+
"id": "optout-001",
|
|
10
|
+
"createdAt": "2026-07-30T14:30:00Z",
|
|
11
|
+
"reqId": "REQ-012",
|
|
12
|
+
"baselineKey": "auth.htmlLoginPage",
|
|
13
|
+
"scope": "req",
|
|
14
|
+
"reason": "operator ruling with sufficient length to clear the twenty-character floor",
|
|
15
|
+
"operatorAckAt": "2026-07-30T14:30:00Z"
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Intake-classification id pattern breach",
|
|
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
|
+
"intakeClassification": {
|
|
8
|
+
"id": "intake-001",
|
|
9
|
+
"createdAt": "2026-07-30T13:50:00Z",
|
|
10
|
+
"fidelity": "napkin",
|
|
11
|
+
"artefacts": [],
|
|
12
|
+
"validationFindings": [],
|
|
13
|
+
"elicitationScope": {},
|
|
14
|
+
"operatorAckAt": "2026-07-30T13:55:00Z"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Register-canary id pattern breach",
|
|
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
|
+
"registerCanary": [
|
|
8
|
+
{
|
|
9
|
+
"id": "canary-001",
|
|
10
|
+
"createdAt": "2026-07-30T18:10:00Z",
|
|
11
|
+
"buildVersion": "0.7.0-rc.1",
|
|
12
|
+
"fixturePromptId": "canary-prompt-01",
|
|
13
|
+
"responseWordCount": 152,
|
|
14
|
+
"grades": {
|
|
15
|
+
"internalRuleCitation": { "verdict": "pass", "matches": [] },
|
|
16
|
+
"unglossedJargon": { "verdict": "pass", "matches": [] },
|
|
17
|
+
"redundantPermissionAsk": { "verdict": "pass", "matches": [] },
|
|
18
|
+
"bypassOffer": { "verdict": "pass", "matches": [] },
|
|
19
|
+
"wordCountBudget": { "verdict": "pass", "target": 200, "actual": 152 }
|
|
20
|
+
},
|
|
21
|
+
"verdict": "pass"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"projectName": "Register-canary grades structural breach",
|
|
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
|
+
"registerCanary": [
|
|
8
|
+
{
|
|
9
|
+
"id": "rc-2026-07-30-001",
|
|
10
|
+
"createdAt": "2026-07-30T18:10:00Z",
|
|
11
|
+
"buildVersion": "0.7.0-rc.1",
|
|
12
|
+
"fixturePromptId": "canary-prompt-01",
|
|
13
|
+
"responseWordCount": 152,
|
|
14
|
+
"grades": {
|
|
15
|
+
"internalRuleCitation": { "verdict": "pass", "matches": [] },
|
|
16
|
+
"unglossedJargon": { "verdict": "pass", "matches": [] },
|
|
17
|
+
"redundantPermissionAsk": { "verdict": "pass", "matches": [] },
|
|
18
|
+
"bypassOffer": { "verdict": "pass", "matches": [] }
|
|
19
|
+
},
|
|
20
|
+
"verdict": "pass"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "REQ-012",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Dashboard",
|
|
5
|
+
"description": "Signed-in dashboard for owners.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "webUi",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"status": "draft",
|
|
11
|
+
"createdAt": "2026-07-30T14:20:00Z",
|
|
12
|
+
"updatedAt": "2026-07-30T14:20:00Z",
|
|
13
|
+
"shapeClassification": {
|
|
14
|
+
"shapes": ["chatbot"],
|
|
15
|
+
"reason": "keyword-scan",
|
|
16
|
+
"classifiedAt": "2026-07-30T14:20:00Z"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "TS-015",
|
|
3
|
+
"usId": "US-1001",
|
|
4
|
+
"title": "Recovery email dispatch",
|
|
5
|
+
"purpose": "Cover the recovery-email flow.",
|
|
6
|
+
"testLevel": "integration",
|
|
7
|
+
"acIds": ["AC-1001-2"],
|
|
8
|
+
"testCases": [
|
|
9
|
+
{
|
|
10
|
+
"id": "TC-015-happy-path",
|
|
11
|
+
"acId": "AC-1001-2",
|
|
12
|
+
"description": "email dispatched on recovery event",
|
|
13
|
+
"status": "passing",
|
|
14
|
+
"runtimeProvenance": {
|
|
15
|
+
"profile": "somehow",
|
|
16
|
+
"envVarsRequired": [],
|
|
17
|
+
"externalHostsReached": []
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"status": "approved",
|
|
22
|
+
"createdAt": "2026-07-30T14:20:00Z",
|
|
23
|
+
"updatedAt": "2026-07-30T14:20:00Z"
|
|
24
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"usId": "US-1201",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"reqId": "REQ-012",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"status": "draft",
|
|
7
|
+
"title": "Signed-in owner reaches dashboard",
|
|
8
|
+
"asA": "signed-in owner",
|
|
9
|
+
"iWant": "to land on the dashboard after logging in",
|
|
10
|
+
"soThat": "I can see every monitor at a glance",
|
|
11
|
+
"acceptanceCriteria": [
|
|
12
|
+
{
|
|
13
|
+
"id": "AC-1201-1",
|
|
14
|
+
"description": "any authenticated route renders the shared nav",
|
|
15
|
+
"testable": true,
|
|
16
|
+
"provenance": {
|
|
17
|
+
"authoredBy": "guessed"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"createdAt": "2026-07-30T14:20:00Z",
|
|
22
|
+
"updatedAt": "2026-07-30T14:20:00Z"
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-011",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 11,
|
|
6
|
+
"executionStatus": "inProgress",
|
|
7
|
+
"title": "Email channel via Resend",
|
|
8
|
+
"summary": "Route recovery emails through the Resend transactional API.",
|
|
9
|
+
"acIds": ["AC-1001-2"],
|
|
10
|
+
"dependsOnFbsIds": [],
|
|
11
|
+
"dependsOnServices": [
|
|
12
|
+
{
|
|
13
|
+
"id": "resend",
|
|
14
|
+
"displayName": "Resend email API",
|
|
15
|
+
"purpose": "outbound transactional email delivery",
|
|
16
|
+
"attestationMode": "live",
|
|
17
|
+
"acIds": ["AC-1001-2"],
|
|
18
|
+
"preFlightRef": "pfc-2026-07-30-001#services.resend"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"createdAt": "2026-07-30T14:20:00Z",
|
|
22
|
+
"updatedAt": "2026-07-30T14:20:00Z"
|
|
23
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-016",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 16,
|
|
6
|
+
"executionStatus": "inProgress",
|
|
7
|
+
"title": "Web UI dashboard",
|
|
8
|
+
"summary": "Ship the signed-in owner's dashboard with a shared nav and a light-default theme toggle.",
|
|
9
|
+
"acIds": ["AC-1101-1", "AC-1101-2"],
|
|
10
|
+
"dependsOnFbsIds": [],
|
|
11
|
+
"uiBearing": true,
|
|
12
|
+
"uiClassification": {
|
|
13
|
+
"verdict": "ui",
|
|
14
|
+
"reason": "keyword-scan",
|
|
15
|
+
"signals": [
|
|
16
|
+
{ "source": "summary", "match": "dashboard" },
|
|
17
|
+
{ "source": "summary", "match": "nav" }
|
|
18
|
+
],
|
|
19
|
+
"classifiedAt": "2026-07-30T14:20:00Z"
|
|
20
|
+
},
|
|
21
|
+
"designStage": {
|
|
22
|
+
"journeys": [
|
|
23
|
+
{
|
|
24
|
+
"id": "signed-in-owner-checks-status",
|
|
25
|
+
"actor": "signed-in owner",
|
|
26
|
+
"goal": "see current status of every monitor at a glance",
|
|
27
|
+
"steps": [
|
|
28
|
+
"lands on / after login",
|
|
29
|
+
"sees count tiles and monitor list",
|
|
30
|
+
"clicks a monitor to see its detail"
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"navModel": {
|
|
35
|
+
"shape": "shared-persistent",
|
|
36
|
+
"routes": [
|
|
37
|
+
{ "path": "/", "label": "Dashboard", "authRequired": true },
|
|
38
|
+
{ "path": "/monitors", "label": "Monitors", "authRequired": true }
|
|
39
|
+
],
|
|
40
|
+
"signedInAsAffordance": true,
|
|
41
|
+
"notes": "one persistent nav bar rendered by src/ui/layout.ts on every authenticated route"
|
|
42
|
+
},
|
|
43
|
+
"themeAndA11y": {
|
|
44
|
+
"themeMode": "light-default-with-toggle",
|
|
45
|
+
"themeTokensModule": "src/ui/tokens.ts",
|
|
46
|
+
"contrastTargets": "WCAG AA (4.5 text, 3.0 large text, 3.0 UI component)",
|
|
47
|
+
"contrastTestPath": "test/ui-accessibility.test.ts",
|
|
48
|
+
"contrastTestAuthoredBeforePalette": true
|
|
49
|
+
},
|
|
50
|
+
"authoredAt": "2026-07-30T14:35:00Z",
|
|
51
|
+
"authoredBy": "rcf-lite-engineer:design-worker"
|
|
52
|
+
},
|
|
53
|
+
"designStageComplete": true,
|
|
54
|
+
"createdAt": "2026-07-30T14:15:00Z",
|
|
55
|
+
"updatedAt": "2026-07-30T14:35:00Z"
|
|
56
|
+
}
|