@stravica-ai/rcf-schemas 0.2.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 +62 -0
- package/LICENSE +202 -0
- package/README.md +165 -0
- package/docs/README.md +37 -0
- package/docs/adr.md +42 -0
- package/docs/build-sequence.md +44 -0
- package/docs/common.md +43 -0
- package/docs/fbs.md +75 -0
- package/docs/file-layout.md +62 -0
- package/docs/id-conventions.md +60 -0
- package/docs/manifest.md +70 -0
- package/docs/prd.md +64 -0
- package/docs/req.md +57 -0
- package/docs/tac.md +49 -0
- package/docs/tad.md +76 -0
- package/docs/test-suite.md +56 -0
- package/docs/user-story.md +61 -0
- package/fixtures/invalid/adr/adr-001-authoring-status.json +13 -0
- package/fixtures/invalid/adr/adr-002-supersededBy-bad-id.json +14 -0
- package/fixtures/invalid/adr/adr-003-missing-tadId.json +12 -0
- package/fixtures/invalid/build-sequence/bs-001-legacy-fbs-array.json +11 -0
- package/fixtures/invalid/build-sequence/bs-002-missing-prdId.json +7 -0
- package/fixtures/invalid/fbs/fbs-001-storyScope-wrapper.json +16 -0
- package/fixtures/invalid/fbs/fbs-002-empty-acIds.json +13 -0
- package/fixtures/invalid/fbs/fbs-003-authoring-status.json +13 -0
- package/fixtures/invalid/fbs/fbs-004-plain-int-acId.json +13 -0
- package/fixtures/invalid/fbs/fbs-005-missing-buildOrder.json +12 -0
- package/fixtures/invalid/fbs/fbs-006-buildOrder-zero.json +13 -0
- package/fixtures/invalid/manifest/manifest-001-userStories-array.json +10 -0
- package/fixtures/invalid/manifest/manifest-002-legacy-buildSequence.json +7 -0
- package/fixtures/invalid/manifest/manifest-003-wrong-version.json +7 -0
- package/fixtures/invalid/prd/prd-001-typoed-status.json +10 -0
- package/fixtures/invalid/prd/prd-002-legacy-requirementIds.json +11 -0
- package/fixtures/invalid/prd/prd-003-missing-objectives.json +9 -0
- package/fixtures/invalid/req/req-001-bad-prefix.json +13 -0
- package/fixtures/invalid/req/req-002-unknown-category.json +13 -0
- package/fixtures/invalid/req/req-003-missing-prdId.json +12 -0
- package/fixtures/invalid/tac/tac-001-empty-responsibilities.json +12 -0
- package/fixtures/invalid/tac/tac-002-bad-dependency-kind.json +15 -0
- package/fixtures/invalid/tac/tac-003-missing-tadId.json +11 -0
- package/fixtures/invalid/tad/tad-001-legacy-componentIds.json +16 -0
- package/fixtures/invalid/tad/tad-002-partial-deployment.json +17 -0
- package/fixtures/invalid/test-suite/ts-001-missing-usId.json +18 -0
- package/fixtures/invalid/test-suite/ts-002-empty-acIds.json +19 -0
- package/fixtures/invalid/test-suite/ts-003-bad-tc-id.json +19 -0
- package/fixtures/invalid/test-suite/ts-004-bad-tc-status.json +19 -0
- package/fixtures/invalid/test-suite/ts-005-bad-test-level.json +12 -0
- package/fixtures/invalid/user-story/us-001-empty-acs.json +14 -0
- package/fixtures/invalid/user-story/us-002-ac-missing-testable.json +19 -0
- package/fixtures/valid/adr/adr-001-minimal.json +13 -0
- package/fixtures/valid/adr/adr-002-comprehensive.json +27 -0
- package/fixtures/valid/adr/adr-003-draft-status.json +13 -0
- package/fixtures/valid/build-sequence/bs-001-minimal.json +8 -0
- package/fixtures/valid/build-sequence/bs-002-comprehensive.json +11 -0
- package/fixtures/valid/fbs/fbs-001-minimal.json +13 -0
- package/fixtures/valid/fbs/fbs-002-comprehensive.json +34 -0
- package/fixtures/valid/manifest/manifest-001-minimal.json +7 -0
- package/fixtures/valid/manifest/manifest-002-with-description.json +8 -0
- package/fixtures/valid/prd/prd-001-minimal.json +12 -0
- package/fixtures/valid/prd/prd-002-comprehensive.json +34 -0
- package/fixtures/valid/req/req-001-minimal.json +13 -0
- package/fixtures/valid/req/req-002-comprehensive.json +15 -0
- package/fixtures/valid/tac/tac-001-minimal.json +15 -0
- package/fixtures/valid/tac/tac-002-comprehensive.json +49 -0
- package/fixtures/valid/tad/tad-001-minimal.json +14 -0
- package/fixtures/valid/tad/tad-002-comprehensive.json +71 -0
- package/fixtures/valid/test-suite/ts-001-minimal.json +19 -0
- package/fixtures/valid/test-suite/ts-002-comprehensive.json +32 -0
- package/fixtures/valid/user-story/us-001-minimal.json +20 -0
- package/fixtures/valid/user-story/us-002-hierarchical-acs.json +40 -0
- package/package.json +44 -0
- package/schemas/adr.schema.json +58 -0
- package/schemas/build-sequence.schema.json +22 -0
- package/schemas/common.schema.json +103 -0
- package/schemas/fbs.schema.json +90 -0
- package/schemas/manifest.schema.json +17 -0
- package/schemas/prd.schema.json +49 -0
- package/schemas/req.schema.json +39 -0
- package/schemas/tac.schema.json +73 -0
- package/schemas/tad.schema.json +162 -0
- package/schemas/test-suite.schema.json +61 -0
- package/schemas/user-story.schema.json +56 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://schemas.stravica.io/rcf/v0.2.0/prd.schema.json",
|
|
4
|
+
"title": "RCF PRD",
|
|
5
|
+
"description": "Product Requirements Document. One per project. The PRD is a pure shell document; requirement bodies live in individual req.schema.json files and each REQ carries the mandatory prdId back-reference. The walker computes the PRD's requirement list by inverting REQ.prdId at load time.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"prdId",
|
|
10
|
+
"productName",
|
|
11
|
+
"version",
|
|
12
|
+
"status",
|
|
13
|
+
"problemStatement",
|
|
14
|
+
"objectives",
|
|
15
|
+
"createdAt",
|
|
16
|
+
"updatedAt"
|
|
17
|
+
],
|
|
18
|
+
"properties": {
|
|
19
|
+
"prdId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/prdId" },
|
|
20
|
+
"productName": { "type": "string", "minLength": 1 },
|
|
21
|
+
"version": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/version" },
|
|
22
|
+
"status": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/authoringStatus" },
|
|
23
|
+
"executiveSummary": { "type": "string" },
|
|
24
|
+
"problemStatement": { "type": "string", "minLength": 1 },
|
|
25
|
+
"targetUsers": {
|
|
26
|
+
"type": "array",
|
|
27
|
+
"items": { "type": "string", "minLength": 1 }
|
|
28
|
+
},
|
|
29
|
+
"inScope": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"items": { "type": "string", "minLength": 1 }
|
|
32
|
+
},
|
|
33
|
+
"outOfScope": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"items": { "type": "string", "minLength": 1 }
|
|
36
|
+
},
|
|
37
|
+
"objectives": {
|
|
38
|
+
"type": "array",
|
|
39
|
+
"minItems": 1,
|
|
40
|
+
"items": { "type": "string", "minLength": 1 }
|
|
41
|
+
},
|
|
42
|
+
"constraints": {
|
|
43
|
+
"type": "array",
|
|
44
|
+
"items": { "type": "string", "minLength": 1 }
|
|
45
|
+
},
|
|
46
|
+
"createdAt": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/timestamp" },
|
|
47
|
+
"updatedAt": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/timestamp" }
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://schemas.stravica.io/rcf/v0.2.0/req.schema.json",
|
|
4
|
+
"title": "RCF Requirement",
|
|
5
|
+
"description": "Individual requirement within a PRD. One file per requirement. Recommended path: rcf/requirements/REQ-001.json. Carries the mandatory prdId parent reference; the PRD does not list its requirements.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"reqId",
|
|
10
|
+
"prdId",
|
|
11
|
+
"title",
|
|
12
|
+
"description",
|
|
13
|
+
"category",
|
|
14
|
+
"domain",
|
|
15
|
+
"priority",
|
|
16
|
+
"version",
|
|
17
|
+
"status",
|
|
18
|
+
"createdAt",
|
|
19
|
+
"updatedAt"
|
|
20
|
+
],
|
|
21
|
+
"properties": {
|
|
22
|
+
"reqId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/reqId" },
|
|
23
|
+
"prdId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/prdId" },
|
|
24
|
+
"title": { "type": "string", "minLength": 1 },
|
|
25
|
+
"description": { "type": "string", "minLength": 1 },
|
|
26
|
+
"category": { "enum": ["functional", "nonFunctional", "technical", "security"] },
|
|
27
|
+
"domain": { "type": "string", "minLength": 1 },
|
|
28
|
+
"priority": { "enum": ["must", "should", "could", "wont"] },
|
|
29
|
+
"rationale": { "type": "string" },
|
|
30
|
+
"tags": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"items": { "type": "string" }
|
|
33
|
+
},
|
|
34
|
+
"version": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/version" },
|
|
35
|
+
"status": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/authoringStatus" },
|
|
36
|
+
"createdAt": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/timestamp" },
|
|
37
|
+
"updatedAt": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/timestamp" }
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://schemas.stravica.io/rcf/v0.2.0/tac.schema.json",
|
|
4
|
+
"title": "RCF Technical Architecture Component",
|
|
5
|
+
"description": "One per architectural component. Verbose per-component descriptions are fine; the schema does not constrain length.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"tacId",
|
|
10
|
+
"prdId",
|
|
11
|
+
"tadId",
|
|
12
|
+
"version",
|
|
13
|
+
"status",
|
|
14
|
+
"name",
|
|
15
|
+
"purpose",
|
|
16
|
+
"responsibilities",
|
|
17
|
+
"createdAt",
|
|
18
|
+
"updatedAt"
|
|
19
|
+
],
|
|
20
|
+
"properties": {
|
|
21
|
+
"tacId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/tacId" },
|
|
22
|
+
"prdId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/prdId" },
|
|
23
|
+
"tadId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/tadId" },
|
|
24
|
+
"version": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/version" },
|
|
25
|
+
"status": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/authoringStatus" },
|
|
26
|
+
|
|
27
|
+
"name": { "type": "string", "minLength": 1 },
|
|
28
|
+
"purpose": { "type": "string", "minLength": 1 },
|
|
29
|
+
"responsibilities": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"minItems": 1,
|
|
32
|
+
"items": { "type": "string", "minLength": 1 }
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
"internalStructure": { "type": "string" },
|
|
36
|
+
"interfaces": {
|
|
37
|
+
"type": "array",
|
|
38
|
+
"items": { "$ref": "#/$defs/interfaceDef" }
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"type": "array",
|
|
42
|
+
"items": { "$ref": "#/$defs/dependencyRef" }
|
|
43
|
+
},
|
|
44
|
+
"tradeoffs": { "type": "string" },
|
|
45
|
+
"notes": { "type": "string" },
|
|
46
|
+
|
|
47
|
+
"createdAt": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/timestamp" },
|
|
48
|
+
"updatedAt": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/timestamp" }
|
|
49
|
+
},
|
|
50
|
+
"$defs": {
|
|
51
|
+
"interfaceDef": {
|
|
52
|
+
"type": "object",
|
|
53
|
+
"additionalProperties": false,
|
|
54
|
+
"required": ["name", "kind"],
|
|
55
|
+
"properties": {
|
|
56
|
+
"name": { "type": "string", "minLength": 1 },
|
|
57
|
+
"kind": { "type": "string", "minLength": 1 },
|
|
58
|
+
"description": { "type": "string" }
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"dependencyRef": {
|
|
62
|
+
"type": "object",
|
|
63
|
+
"additionalProperties": false,
|
|
64
|
+
"required": ["name", "kind"],
|
|
65
|
+
"properties": {
|
|
66
|
+
"name": { "type": "string", "minLength": 1 },
|
|
67
|
+
"kind": { "enum": ["tac", "external"] },
|
|
68
|
+
"tacId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/tacId" },
|
|
69
|
+
"description": { "type": "string" }
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://schemas.stravica.io/rcf/v0.2.0/tad.schema.json",
|
|
4
|
+
"title": "RCF Technical Architecture Document",
|
|
5
|
+
"description": "Master Technical Architecture Document. One per project. TACs and ADRs each carry the mandatory tadId parent reference; the TAD does not list them. The walker computes both children lists by inverting TAC.tadId and ADR.tadId at load time. The schema defines the FULL set of possible sections; what's required for a given project is a tooling decision.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"tadId",
|
|
10
|
+
"prdId",
|
|
11
|
+
"version",
|
|
12
|
+
"status",
|
|
13
|
+
"systemOverview",
|
|
14
|
+
"createdAt",
|
|
15
|
+
"updatedAt"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"tadId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/tadId" },
|
|
19
|
+
"prdId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/prdId" },
|
|
20
|
+
"version": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/version" },
|
|
21
|
+
"status": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/authoringStatus" },
|
|
22
|
+
|
|
23
|
+
"systemOverview": { "$ref": "#/$defs/systemOverview" },
|
|
24
|
+
|
|
25
|
+
"architecturePrinciples": {
|
|
26
|
+
"type": "array",
|
|
27
|
+
"items": { "$ref": "#/$defs/principle" }
|
|
28
|
+
},
|
|
29
|
+
"dataArchitecture": { "$ref": "#/$defs/dataArchitecture" },
|
|
30
|
+
"integrationArchitecture": { "$ref": "#/$defs/integrationArchitecture" },
|
|
31
|
+
"securityArchitecture": { "$ref": "#/$defs/securityArchitecture" },
|
|
32
|
+
"deploymentArchitecture": { "$ref": "#/$defs/deploymentArchitecture" },
|
|
33
|
+
"operationalConcerns": { "$ref": "#/$defs/operationalConcerns" },
|
|
34
|
+
|
|
35
|
+
"createdAt": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/timestamp" },
|
|
36
|
+
"updatedAt": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/timestamp" }
|
|
37
|
+
},
|
|
38
|
+
"$defs": {
|
|
39
|
+
"systemOverview": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"additionalProperties": false,
|
|
42
|
+
"required": ["executiveSummary", "systemPurpose", "architecturalApproach", "keyCapabilities"],
|
|
43
|
+
"properties": {
|
|
44
|
+
"executiveSummary": { "type": "string", "minLength": 1 },
|
|
45
|
+
"systemPurpose": { "type": "string", "minLength": 1 },
|
|
46
|
+
"architecturalApproach": { "type": "string", "minLength": 1 },
|
|
47
|
+
"keyCapabilities": {
|
|
48
|
+
"type": "array",
|
|
49
|
+
"minItems": 1,
|
|
50
|
+
"items": { "type": "string", "minLength": 1 }
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"principle": {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"additionalProperties": false,
|
|
57
|
+
"required": ["name", "description", "rationale"],
|
|
58
|
+
"properties": {
|
|
59
|
+
"name": { "type": "string", "minLength": 1 },
|
|
60
|
+
"description": { "type": "string", "minLength": 1 },
|
|
61
|
+
"rationale": { "type": "string", "minLength": 1 }
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"dataArchitecture": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"additionalProperties": false,
|
|
67
|
+
"required": ["dataStores", "coreEntities"],
|
|
68
|
+
"properties": {
|
|
69
|
+
"dataStores": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"minItems": 1,
|
|
72
|
+
"items": {
|
|
73
|
+
"type": "object",
|
|
74
|
+
"additionalProperties": false,
|
|
75
|
+
"required": ["name", "kind"],
|
|
76
|
+
"properties": {
|
|
77
|
+
"name": { "type": "string", "minLength": 1 },
|
|
78
|
+
"kind": { "type": "string", "minLength": 1 },
|
|
79
|
+
"purpose": { "type": "string" }
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"coreEntities": {
|
|
84
|
+
"type": "array",
|
|
85
|
+
"minItems": 1,
|
|
86
|
+
"items": {
|
|
87
|
+
"type": "object",
|
|
88
|
+
"additionalProperties": false,
|
|
89
|
+
"required": ["name"],
|
|
90
|
+
"properties": {
|
|
91
|
+
"name": { "type": "string", "minLength": 1 },
|
|
92
|
+
"description": { "type": "string" }
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"dataFlow": { "type": "string" },
|
|
97
|
+
"retention": { "type": "string" }
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"integrationArchitecture": {
|
|
101
|
+
"type": "object",
|
|
102
|
+
"additionalProperties": false,
|
|
103
|
+
"required": ["apiDesign"],
|
|
104
|
+
"properties": {
|
|
105
|
+
"apiDesign": { "type": "string", "minLength": 1 },
|
|
106
|
+
"externalSystems": {
|
|
107
|
+
"type": "array",
|
|
108
|
+
"items": {
|
|
109
|
+
"type": "object",
|
|
110
|
+
"additionalProperties": false,
|
|
111
|
+
"required": ["name"],
|
|
112
|
+
"properties": {
|
|
113
|
+
"name": { "type": "string", "minLength": 1 },
|
|
114
|
+
"purpose": { "type": "string" },
|
|
115
|
+
"protocol": { "type": "string" }
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
"eventModel": { "type": "string" }
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"securityArchitecture": {
|
|
123
|
+
"type": "object",
|
|
124
|
+
"additionalProperties": false,
|
|
125
|
+
"required": ["authenticationPattern", "authorizationModel"],
|
|
126
|
+
"properties": {
|
|
127
|
+
"authenticationPattern": { "type": "string", "minLength": 1 },
|
|
128
|
+
"authorizationModel": { "type": "string", "minLength": 1 },
|
|
129
|
+
"secretsManagement": { "type": "string" },
|
|
130
|
+
"threatModel": { "type": "string" },
|
|
131
|
+
"complianceRequirements": {
|
|
132
|
+
"type": "array",
|
|
133
|
+
"items": { "type": "string" }
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"deploymentArchitecture": {
|
|
138
|
+
"type": "object",
|
|
139
|
+
"additionalProperties": false,
|
|
140
|
+
"required": ["targetEnvironment"],
|
|
141
|
+
"properties": {
|
|
142
|
+
"targetEnvironment": { "type": "string", "minLength": 1 },
|
|
143
|
+
"topology": { "type": "string" },
|
|
144
|
+
"scaling": { "type": "string" },
|
|
145
|
+
"cicd": { "type": "string" }
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
"operationalConcerns": {
|
|
149
|
+
"type": "object",
|
|
150
|
+
"additionalProperties": false,
|
|
151
|
+
"required": ["healthChecks", "logging"],
|
|
152
|
+
"properties": {
|
|
153
|
+
"healthChecks": { "type": "string", "minLength": 1 },
|
|
154
|
+
"logging": { "type": "string", "minLength": 1 },
|
|
155
|
+
"metrics": { "type": "string" },
|
|
156
|
+
"alerting": { "type": "string" },
|
|
157
|
+
"backup": { "type": "string" },
|
|
158
|
+
"disasterRecovery": { "type": "string" }
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://schemas.stravica.io/rcf/v0.2.0/test-suite.schema.json",
|
|
4
|
+
"title": "RCF Test Suite",
|
|
5
|
+
"description": "One file per Test Suite. Verifies one or more Acceptance Criteria (on the User Story identified by usId) via inline Test Cases. Test Suites hold the AC references; ACs stay clean of downstream references. Test-run status per TC is authored (Phase 3.7) and later derived from real test runs (Phase 6+).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"id",
|
|
10
|
+
"usId",
|
|
11
|
+
"title",
|
|
12
|
+
"purpose",
|
|
13
|
+
"testLevel",
|
|
14
|
+
"acIds",
|
|
15
|
+
"testCases",
|
|
16
|
+
"status",
|
|
17
|
+
"createdAt",
|
|
18
|
+
"updatedAt"
|
|
19
|
+
],
|
|
20
|
+
"properties": {
|
|
21
|
+
"id": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/tsId" },
|
|
22
|
+
"usId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/usId" },
|
|
23
|
+
"title": { "type": "string", "minLength": 1 },
|
|
24
|
+
"purpose": { "type": "string", "minLength": 1 },
|
|
25
|
+
"testLevel": { "enum": ["unit", "integration", "e2e", "contract", "manual"] },
|
|
26
|
+
"acIds": {
|
|
27
|
+
"type": "array",
|
|
28
|
+
"minItems": 1,
|
|
29
|
+
"items": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/acId" }
|
|
30
|
+
},
|
|
31
|
+
"testCases": {
|
|
32
|
+
"type": "array",
|
|
33
|
+
"minItems": 0,
|
|
34
|
+
"items": { "$ref": "#/$defs/testCase" }
|
|
35
|
+
},
|
|
36
|
+
"status": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/authoringStatus" },
|
|
37
|
+
"createdAt": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/timestamp" },
|
|
38
|
+
"updatedAt": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/timestamp" }
|
|
39
|
+
},
|
|
40
|
+
"$defs": {
|
|
41
|
+
"testCase": {
|
|
42
|
+
"type": "object",
|
|
43
|
+
"additionalProperties": false,
|
|
44
|
+
"required": ["id", "acId", "description", "status"],
|
|
45
|
+
"properties": {
|
|
46
|
+
"id": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"pattern": "^TC-\\d{3}-[a-z0-9-]+$",
|
|
49
|
+
"description": "Test Case identifier. TS suffix (three digits) joined to a lowercase alphanumeric slug (hyphens allowed)."
|
|
50
|
+
},
|
|
51
|
+
"acId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/acId" },
|
|
52
|
+
"description": { "type": "string", "minLength": 1 },
|
|
53
|
+
"testPointer": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"description": "Optional pointer to the executable test, format: filePath::testName."
|
|
56
|
+
},
|
|
57
|
+
"status": { "enum": ["pending", "passing", "failing", "skipped"] }
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://schemas.stravica.io/rcf/v0.2.0/user-story.schema.json",
|
|
4
|
+
"title": "RCF User Story",
|
|
5
|
+
"description": "User Story document. One file per US. Contains its Acceptance Criteria inline as acceptanceCriteria[].",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"usId",
|
|
10
|
+
"prdId",
|
|
11
|
+
"reqId",
|
|
12
|
+
"version",
|
|
13
|
+
"status",
|
|
14
|
+
"title",
|
|
15
|
+
"asA",
|
|
16
|
+
"iWant",
|
|
17
|
+
"soThat",
|
|
18
|
+
"acceptanceCriteria",
|
|
19
|
+
"createdAt",
|
|
20
|
+
"updatedAt"
|
|
21
|
+
],
|
|
22
|
+
"properties": {
|
|
23
|
+
"usId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/usId" },
|
|
24
|
+
"prdId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/prdId" },
|
|
25
|
+
"reqId": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/reqId" },
|
|
26
|
+
"version": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/version" },
|
|
27
|
+
"status": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/authoringStatus" },
|
|
28
|
+
"title": { "type": "string", "minLength": 1 },
|
|
29
|
+
"description": { "type": "string" },
|
|
30
|
+
"asA": { "type": "string", "minLength": 1 },
|
|
31
|
+
"iWant": { "type": "string", "minLength": 1 },
|
|
32
|
+
"soThat": { "type": "string", "minLength": 1 },
|
|
33
|
+
"acceptanceCriteria": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"minItems": 1,
|
|
36
|
+
"items": { "$ref": "#/$defs/acceptanceCriterion" }
|
|
37
|
+
},
|
|
38
|
+
"createdAt": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/timestamp" },
|
|
39
|
+
"updatedAt": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/timestamp" }
|
|
40
|
+
},
|
|
41
|
+
"$defs": {
|
|
42
|
+
"acceptanceCriterion": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"additionalProperties": false,
|
|
45
|
+
"required": ["id", "description", "testable"],
|
|
46
|
+
"properties": {
|
|
47
|
+
"id": { "$ref": "https://schemas.stravica.io/rcf/v0.2.0/common.schema.json#/$defs/acId" },
|
|
48
|
+
"description": { "type": "string", "minLength": 1 },
|
|
49
|
+
"given": { "type": "string" },
|
|
50
|
+
"when": { "type": "string" },
|
|
51
|
+
"then": { "type": "string" },
|
|
52
|
+
"testable": { "type": "boolean" }
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|