rcf-lite 0.17.0 → 0.19.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 +60 -0
- package/blueprints/application-api-rest/README.md +5 -1
- package/blueprints/application-api-rest/blueprint.json +12 -4
- package/blueprints/application-api-rest/contributions/adrs/adr-304-application-api-rest-logging.json +3 -3
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-006.json +4 -4
- package/blueprints/application-api-rest/contributions/tacs/tac-306-application-api-rest-operability.json +9 -8
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2103.json +3 -3
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2108.json +27 -27
- package/blueprints/application-api-rest/docs/topics.md +6 -4
- package/blueprints/application-api-rest/guide/application-api-rest.md +5 -1
- package/blueprints/application-error-handling/README.md +42 -0
- package/blueprints/application-error-handling/assets/schemas/error-record.schema.json +17 -0
- package/blueprints/application-error-handling/blueprint.json +27 -0
- package/blueprints/application-error-handling/contributions/adrs/adr-1701-application-error-handling-record-shape.json +25 -0
- package/blueprints/application-error-handling/contributions/adrs/adr-1702-application-error-handling-classification-vocabulary.json +20 -0
- package/blueprints/application-error-handling/contributions/adrs/adr-1703-application-error-handling-transport-mapping.json +20 -0
- package/blueprints/application-error-handling/contributions/requirements/application-error-handling-req-001.json +15 -0
- package/blueprints/application-error-handling/contributions/requirements/application-error-handling-req-002.json +15 -0
- package/blueprints/application-error-handling/contributions/requirements/application-error-handling-req-003.json +15 -0
- package/blueprints/application-error-handling/contributions/requirements/application-error-handling-req-004.json +15 -0
- package/blueprints/application-error-handling/contributions/tacs/tac-1701-application-error-handling-boundary.json +45 -0
- package/blueprints/application-error-handling/contributions/tacs/tac-1702-application-error-handling-record-factory.json +40 -0
- package/blueprints/application-error-handling/contributions/user-stories/application-error-handling-us-16101.json +25 -0
- package/blueprints/application-error-handling/contributions/user-stories/application-error-handling-us-16102.json +25 -0
- package/blueprints/application-error-handling/contributions/user-stories/application-error-handling-us-16103.json +34 -0
- package/blueprints/application-error-handling/contributions/user-stories/application-error-handling-us-16104.json +25 -0
- package/blueprints/application-error-handling/contributions/user-stories/application-error-handling-us-16105.json +25 -0
- package/blueprints/application-error-handling/contributions/user-stories/application-error-handling-us-16106.json +25 -0
- package/blueprints/application-error-handling/contributions/user-stories/application-error-handling-us-16107.json +25 -0
- package/blueprints/application-error-handling/docs/topics.md +24 -0
- package/blueprints/application-error-handling/guide/application-error-handling.md +35 -0
- package/blueprints/application-spa/blueprint.json +12 -2
- package/blueprints/application-spa/docs/topics.md +4 -2
- package/blueprints/delivery-ci-workflows/docs/topics.md +2 -2
- package/blueprints/deploy-cloudflare-workers/docs/topics.md +2 -2
- package/blueprints/email-smtp-resend/docs/topics.md +2 -2
- package/blueprints/observability-essentials/README.md +6 -2
- package/blueprints/observability-essentials/blueprint.json +133 -33
- package/blueprints/observability-essentials/contributions/adrs/adr-801-observability-essentials-health-probes.json +4 -4
- package/blueprints/observability-essentials/contributions/adrs/adr-802-observability-essentials-readiness-semantics.json +4 -4
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-001.json +4 -4
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-002.json +4 -4
- package/blueprints/observability-essentials/contributions/tacs/tac-801-observability-essentials-liveness-probe.json +10 -9
- package/blueprints/observability-essentials/contributions/tacs/tac-802-observability-essentials-readiness-probe.json +17 -11
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7101.json +12 -3
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7102.json +12 -3
- package/blueprints/observability-essentials/docs/topics.md +15 -8
- package/blueprints/observability-essentials/guide/observability-essentials.md +9 -3
- package/blueprints/observability-logging/README.md +44 -0
- package/blueprints/observability-logging/assets/samples/log-line.json +13 -0
- package/blueprints/observability-logging/blueprint.json +27 -0
- package/blueprints/observability-logging/contributions/adrs/adr-1601-observability-logging-line-shape.json +25 -0
- package/blueprints/observability-logging/contributions/adrs/adr-1602-observability-logging-correlation-id-header.json +25 -0
- package/blueprints/observability-logging/contributions/adrs/adr-1603-observability-logging-redaction-categories.json +25 -0
- package/blueprints/observability-logging/contributions/adrs/adr-1604-observability-logging-level-vocabulary.json +20 -0
- package/blueprints/observability-logging/contributions/requirements/observability-logging-req-001.json +15 -0
- package/blueprints/observability-logging/contributions/requirements/observability-logging-req-002.json +15 -0
- package/blueprints/observability-logging/contributions/requirements/observability-logging-req-003.json +15 -0
- package/blueprints/observability-logging/contributions/requirements/observability-logging-req-004.json +15 -0
- package/blueprints/observability-logging/contributions/requirements/observability-logging-req-005.json +15 -0
- package/blueprints/observability-logging/contributions/tacs/tac-1601-observability-logging-logger-factory.json +46 -0
- package/blueprints/observability-logging/contributions/tacs/tac-1602-observability-logging-redaction-boundary.json +27 -0
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15101.json +34 -0
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15102.json +43 -0
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15103.json +34 -0
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15104.json +25 -0
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15105.json +34 -0
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15106.json +25 -0
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15107.json +25 -0
- package/blueprints/observability-logging/contributions/user-stories/observability-logging-us-15108.json +25 -0
- package/blueprints/observability-logging/docs/topics.md +21 -0
- package/blueprints/observability-logging/guide/observability-logging.md +36 -0
- package/blueprints/observability-probe-endpoints/README.md +5 -1
- package/blueprints/observability-probe-endpoints/blueprint.json +116 -24
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1503-observability-probe-endpoints-kubernetes-default.json +5 -5
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14102.json +11 -2
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14107.json +11 -2
- package/blueprints/observability-probe-endpoints/docs/topics.md +6 -6
- package/blueprints/observability-probe-endpoints/guide/observability-probe-endpoints.md +10 -0
- package/blueprints/persistence-data-d1/docs/topics.md +2 -2
- package/blueprints/persistence-data-sqlite/docs/topics.md +2 -2
- package/blueprints/security-auth-clerk/docs/topics.md +2 -2
- package/blueprints/security-auth-keycloak/docs/topics.md +2 -2
- package/blueprints/security-auth-magic-link/docs/topics.md +2 -2
- package/blueprints/security-auth-oauth2/docs/topics.md +2 -2
- package/blueprints/security-secrets-management/docs/topics.md +2 -2
- package/fixtures/canary-manifest.json +6 -6
- package/guidance/harness-template.md +8 -0
- package/guidance/managed/agent-instructions-block.hash +1 -1
- package/guidance/managed/agent-instructions-block.md +8 -0
- package/package.json +1 -1
- package/rcf/code-nodes/cn-074.json +19 -0
- package/rcf/code-nodes/cn-075.json +15 -0
- package/rcf/code-nodes/cn-076.json +14 -0
- package/rcf/code-nodes/cn-077.json +14 -0
- package/rcf/code-nodes/cn-078.json +15 -0
- package/rcf/code-nodes/cn-079.json +14 -0
- package/rcf/code-nodes/cn-080.json +15 -0
- package/rcf/code-nodes/cn-081.json +15 -0
- package/rcf/code-nodes/cn-082.json +15 -0
- package/rcf/code-nodes/cn-083.json +14 -0
- package/rcf/code-nodes/cn-084.json +15 -0
- package/rcf/code-nodes/cn-085.json +14 -0
- package/rcf/code-nodes/cn-086.json +16 -0
- package/rcf/code-nodes/cn-087.json +14 -0
- package/rcf/code-nodes/cn-088.json +14 -0
- package/rcf/code-nodes/cn-089.json +14 -0
- package/rcf/code-nodes/cn-090.json +14 -0
- package/rcf/code-nodes/cn-091.json +14 -0
- package/rcf/code-nodes/cn-092.json +15 -0
- package/rcf/code-nodes/cn-093.json +15 -0
- package/rcf/code-nodes/cn-094.json +14 -0
- package/rcf/code-nodes/cn-095.json +14 -0
- package/rcf/code-nodes/cn-096.json +14 -0
- package/rcf/code-nodes/cn-097.json +14 -0
- package/rcf/fbs/fbs-024.json +24 -0
- package/rcf/fbs/fbs-025.json +25 -0
- package/rcf/fbs/fbs-026.json +27 -0
- package/rcf/fbs/fbs-027.json +25 -0
- package/rcf/fbs/fbs-028.json +27 -0
- package/rcf/fbs/fbs-029.json +27 -0
- package/rcf/fbs/fbs-030.json +27 -0
- package/rcf/fbs/fbs-031.json +27 -0
- package/rcf/fbs/fbs-032.json +27 -0
- package/rcf/fbs/fbs-033.json +27 -0
- package/rcf/fbs/fbs-034.json +27 -0
- package/rcf/requirements/req-012.json +22 -0
- package/rcf/requirements/req-013.json +22 -0
- package/rcf/requirements/req-014.json +22 -0
- package/rcf/requirements/req-015.json +21 -0
- package/rcf/test-suites/ts-034.json +32 -0
- package/rcf/test-suites/ts-035.json +23 -0
- package/rcf/test-suites/ts-036.json +65 -0
- package/rcf/test-suites/ts-037.json +55 -0
- package/rcf/test-suites/ts-038.json +41 -0
- package/rcf/test-suites/ts-039.json +41 -0
- package/rcf/test-suites/ts-040.json +57 -0
- package/rcf/test-suites/ts-041.json +57 -0
- package/rcf/test-suites/ts-042.json +57 -0
- package/rcf/test-suites/ts-043.json +49 -0
- package/rcf/test-suites/ts-044.json +41 -0
- package/rcf/user-stories/us-1201.json +34 -0
- package/rcf/user-stories/us-1202.json +25 -0
- package/rcf/user-stories/us-1203.json +43 -0
- package/rcf/user-stories/us-1204.json +25 -0
- package/rcf/user-stories/us-1301.json +43 -0
- package/rcf/user-stories/us-1302.json +43 -0
- package/rcf/user-stories/us-1401.json +43 -0
- package/rcf/user-stories/us-1402.json +43 -0
- package/rcf/user-stories/us-1403.json +43 -0
- package/rcf/user-stories/us-1404.json +43 -0
- package/rcf/user-stories/us-1501.json +43 -0
- package/releases/releases.yaml +21 -1
- package/src/blueprint/apply.js +8 -0
- package/src/blueprint/companions.js +485 -0
- package/src/blueprint/index.js +17 -0
- package/src/blueprint/loader.js +243 -1
- package/src/blueprint/remove-resolution.js +104 -0
- package/src/cli/blueprint.js +350 -0
- package/src/cli/doctor.js +76 -1
- package/src/cli/validate.js +7 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-029",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 29,
|
|
6
|
+
"executionStatus": "verified",
|
|
7
|
+
"title": "application-error-handling v1.0.0 shelf blueprint (contributions + README + guide + docs/topics.md + assets); errorHandling topic distinct from errorEnvelope",
|
|
8
|
+
"summary": "Core companions train (w-2026-09-03-dave-030, d-2026-09-04-022). Covers the AC set above end to end through the shipped code paths named on the paired CN implementsAcIds[] and the paired TS testPointer entries under packages/rcf-lite/test/. Runtime provenance: Node 24.14.0 on the repo's dogfood tree; each fixture verified in scratchpad. See the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md.",
|
|
9
|
+
"acIds": [
|
|
10
|
+
"AC-1302-1",
|
|
11
|
+
"AC-1302-2",
|
|
12
|
+
"AC-1302-3"
|
|
13
|
+
],
|
|
14
|
+
"dependsOnFbsIds": [
|
|
15
|
+
"FBS-028"
|
|
16
|
+
],
|
|
17
|
+
"contextRequirements": {
|
|
18
|
+
"tacIds": [],
|
|
19
|
+
"adrIds": []
|
|
20
|
+
},
|
|
21
|
+
"domain": "blueprints",
|
|
22
|
+
"estimatedSize": "small",
|
|
23
|
+
"riskLevel": "low",
|
|
24
|
+
"notes": "Part of the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022). One FBS per US on REQ-013/014/015.",
|
|
25
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
26
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-030",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 30,
|
|
6
|
+
"executionStatus": "verified",
|
|
7
|
+
"title": "Loader accepts providesRoles[] and suggestedCompanions[] with shape validation + em-dash / emoji refusal on reason strings + paired-scope:global-ADR gate",
|
|
8
|
+
"summary": "Core companions train (w-2026-09-03-dave-030, d-2026-09-04-022). Covers the AC set above end to end through the shipped code paths named on the paired CN implementsAcIds[] and the paired TS testPointer entries under packages/rcf-lite/test/. Runtime provenance: Node 24.14.0 on the repo's dogfood tree; each fixture verified in scratchpad. See the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md.",
|
|
9
|
+
"acIds": [
|
|
10
|
+
"AC-1401-1",
|
|
11
|
+
"AC-1401-2",
|
|
12
|
+
"AC-1401-3"
|
|
13
|
+
],
|
|
14
|
+
"dependsOnFbsIds": [
|
|
15
|
+
"FBS-029"
|
|
16
|
+
],
|
|
17
|
+
"contextRequirements": {
|
|
18
|
+
"tacIds": [],
|
|
19
|
+
"adrIds": []
|
|
20
|
+
},
|
|
21
|
+
"domain": "blueprints",
|
|
22
|
+
"estimatedSize": "small",
|
|
23
|
+
"riskLevel": "low",
|
|
24
|
+
"notes": "Part of the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022). One FBS per US on REQ-013/014/015.",
|
|
25
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
26
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-031",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 31,
|
|
6
|
+
"executionStatus": "verified",
|
|
7
|
+
"title": "rcf define blueprint add prints resolved companion suggestions after apply; --companion selectors preflight-refuse non-providers; --no-companion-suggestions suppresses both phases; pins land in rcf/companions.json",
|
|
8
|
+
"summary": "Core companions train (w-2026-09-03-dave-030, d-2026-09-04-022). Covers the AC set above end to end through the shipped code paths named on the paired CN implementsAcIds[] and the paired TS testPointer entries under packages/rcf-lite/test/. Runtime provenance: Node 24.14.0 on the repo's dogfood tree; each fixture verified in scratchpad. See the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md.",
|
|
9
|
+
"acIds": [
|
|
10
|
+
"AC-1402-1",
|
|
11
|
+
"AC-1402-2",
|
|
12
|
+
"AC-1402-3"
|
|
13
|
+
],
|
|
14
|
+
"dependsOnFbsIds": [
|
|
15
|
+
"FBS-030"
|
|
16
|
+
],
|
|
17
|
+
"contextRequirements": {
|
|
18
|
+
"tacIds": [],
|
|
19
|
+
"adrIds": []
|
|
20
|
+
},
|
|
21
|
+
"domain": "blueprints",
|
|
22
|
+
"estimatedSize": "small",
|
|
23
|
+
"riskLevel": "low",
|
|
24
|
+
"notes": "Part of the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022). One FBS per US on REQ-013/014/015.",
|
|
25
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
26
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-032",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 32,
|
|
6
|
+
"executionStatus": "verified",
|
|
7
|
+
"title": "rcf define blueprint companions <slug>|set|unset sub-verbs (text output with origin annotations; --json envelope; set/unset round-trip; unset without pin refuses)",
|
|
8
|
+
"summary": "Core companions train (w-2026-09-03-dave-030, d-2026-09-04-022). Covers the AC set above end to end through the shipped code paths named on the paired CN implementsAcIds[] and the paired TS testPointer entries under packages/rcf-lite/test/. Runtime provenance: Node 24.14.0 on the repo's dogfood tree; each fixture verified in scratchpad. See the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md.",
|
|
9
|
+
"acIds": [
|
|
10
|
+
"AC-1403-1",
|
|
11
|
+
"AC-1403-2",
|
|
12
|
+
"AC-1403-3"
|
|
13
|
+
],
|
|
14
|
+
"dependsOnFbsIds": [
|
|
15
|
+
"FBS-031"
|
|
16
|
+
],
|
|
17
|
+
"contextRequirements": {
|
|
18
|
+
"tacIds": [],
|
|
19
|
+
"adrIds": []
|
|
20
|
+
},
|
|
21
|
+
"domain": "blueprints",
|
|
22
|
+
"estimatedSize": "small",
|
|
23
|
+
"riskLevel": "low",
|
|
24
|
+
"notes": "Part of the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022). One FBS per US on REQ-013/014/015.",
|
|
25
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
26
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-033",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 33,
|
|
6
|
+
"executionStatus": "verified",
|
|
7
|
+
"title": "Deterministic tier ladder resolver (applied > pinned > registered library > shelf); two-libraries-one-role refuses exit 3 with three-path resolution message on both add and companions verb; validate refuses unresolvable pin exit 3",
|
|
8
|
+
"summary": "Core companions train (w-2026-09-03-dave-030, d-2026-09-04-022). Covers the AC set above end to end through the shipped code paths named on the paired CN implementsAcIds[] and the paired TS testPointer entries under packages/rcf-lite/test/. Runtime provenance: Node 24.14.0 on the repo's dogfood tree; each fixture verified in scratchpad. See the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md.",
|
|
9
|
+
"acIds": [
|
|
10
|
+
"AC-1404-1",
|
|
11
|
+
"AC-1404-2",
|
|
12
|
+
"AC-1404-3"
|
|
13
|
+
],
|
|
14
|
+
"dependsOnFbsIds": [
|
|
15
|
+
"FBS-032"
|
|
16
|
+
],
|
|
17
|
+
"contextRequirements": {
|
|
18
|
+
"tacIds": [],
|
|
19
|
+
"adrIds": []
|
|
20
|
+
},
|
|
21
|
+
"domain": "blueprints",
|
|
22
|
+
"estimatedSize": "small",
|
|
23
|
+
"riskLevel": "low",
|
|
24
|
+
"notes": "Part of the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022). One FBS per US on REQ-013/014/015.",
|
|
25
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
26
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-034",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 34,
|
|
6
|
+
"executionStatus": "verified",
|
|
7
|
+
"title": "Loader accepts standardsTrace[] + per-ADR recommendedDefault / elicited / standardsTraceClause; refuses missing standardsTraceClause when standardsTrace is declared; no cross-check on clause severity to kind (amendment A2)",
|
|
8
|
+
"summary": "Core companions train (w-2026-09-03-dave-030, d-2026-09-04-022). Covers the AC set above end to end through the shipped code paths named on the paired CN implementsAcIds[] and the paired TS testPointer entries under packages/rcf-lite/test/. Runtime provenance: Node 24.14.0 on the repo's dogfood tree; each fixture verified in scratchpad. See the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md.",
|
|
9
|
+
"acIds": [
|
|
10
|
+
"AC-1501-1",
|
|
11
|
+
"AC-1501-2",
|
|
12
|
+
"AC-1501-3"
|
|
13
|
+
],
|
|
14
|
+
"dependsOnFbsIds": [
|
|
15
|
+
"FBS-033"
|
|
16
|
+
],
|
|
17
|
+
"contextRequirements": {
|
|
18
|
+
"tacIds": [],
|
|
19
|
+
"adrIds": []
|
|
20
|
+
},
|
|
21
|
+
"domain": "blueprints",
|
|
22
|
+
"estimatedSize": "small",
|
|
23
|
+
"riskLevel": "low",
|
|
24
|
+
"notes": "Part of the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022). One FBS per US on REQ-013/014/015.",
|
|
25
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
26
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
27
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "REQ-012",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Core shelf: probe-path binding has one owner (observability-probe-endpoints), essentials and api-rest defer",
|
|
5
|
+
"description": "The shipped observability-essentials, observability-probe-endpoints, and application-api-rest blueprints compose on one project without a `globalAdrTopic` conflict on the `healthProbes` or `readinessSemantics` topics; observability-probe-endpoints is the sole shelf-wide `scope: global` claimant on both topics. observability-essentials v2.0.0 drops those claims and restates its two probe REQs and TACs path-neutral, refusing boot with the stable-coded error `PROBE_INTERFACE_PATHS_MISSING` when `probeInterface.paths.liveness` or `probeInterface.paths.readiness` is absent and probe-endpoints is not composed. application-api-rest v2.0.0 drops the literal `/healthz/live`, `/healthz/ready`, and `/healthz/startup` bindings from REQ-006, US-2108 (all eight ACs), TAC-306 and US-2103, deferring to the resolved probe path set (probe-endpoints Kubernetes profile default `/live` and `/ready`, optional `/startup`; loadBalancer profile `/health`; or project-supplied `probeInterface.paths` in the essentials-alone case). observability-probe-endpoints v1.1.0 adds the optional third Kubernetes-profile path `startup` (default `/startup`), off by default and enabled by `probeInterface.options.kubernetes.startup.enabled: true`, with paired ACs on US-14102 and US-14107 and a composing section in its guide. The three-way alignment is verified by the compose test at `packages/rcf-lite/test/blueprint/probe-path-alignment.test.js` and is the ratified truth for the shelf.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "blueprints",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "The shipped shelf carried three literal probe-path opinions before this alignment (essentials /healthz + /readyz, probe-endpoints /live + /ready, api-rest /healthz/live + /healthz/ready + /healthz/startup). Composing any two of the three on one project either fired a designed-in `globalAdrTopic` conflict on healthProbes/readinessSemantics or silently shipped three disagreeing probe bindings. WSD-012 mandates /live and /ready, which is the probe-endpoints Kubernetes default; Dex's A4 wsd-service-anatomy binds those two paths as a parameter and required this item as its dependency. Aligning ownership to one blueprint (probe-endpoints) and making the other two defer is the smallest change that closes both the conflict-by-design surface and the silent-disagreement surface without inventing a new composer primitive. Ratified spec: `projects/rcf-lite-wsd/specs/rcf-lite-probe-path-alignment-spec-2026-09-04.md` (sections 1 through 11).",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprints",
|
|
12
|
+
"observability",
|
|
13
|
+
"probe-endpoints",
|
|
14
|
+
"essentials",
|
|
15
|
+
"api-rest",
|
|
16
|
+
"alignment"
|
|
17
|
+
],
|
|
18
|
+
"version": "0.1.0",
|
|
19
|
+
"status": "draft",
|
|
20
|
+
"createdAt": "2026-09-04T00:00:00Z",
|
|
21
|
+
"updatedAt": "2026-09-04T00:00:00Z"
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "REQ-013",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Core shelf gains two general-enterprise-practice companion blueprints: observability-logging and application-error-handling",
|
|
5
|
+
"description": "The shipped core shelf carries two new blueprints written to general enterprise practice, not to any one organisation's standards. `observability-logging` v1.0.0 (category `observability`, US band 15101-15899, ADR/TAC suffix block 16xx) contributes REQs, USs, TACs and ADRs for a structured single-line JSON emission surface with a correlation-identifier propagation contract, a redaction boundary anchored to named PII categories, an operator-elicited level vocabulary, and an environment/service-name/service-version stamping contract. Its `providesRoles` field carries `[\"logging\"]` and its ADR-1601 mints the shelf-wide `logging` global topic (transferred from `application-api-rest-ADR-304`, retained there as a superseded record per version-rule discipline). `application-error-handling` v1.0.0 (category `application`, US band 16101-16899, ADR/TAC suffix block 17xx) contributes REQs, USs, TACs and ADRs for the uncaught-exception boundary, the internal error record shape (code, category, message, correlation identifier, cause chain, redacted context), a transient/permanent/unknown classification vocabulary, and error emission delegated through the logging companion. Its `providesRoles` carries `[\"errorHandling\"]` and its ADR-1701 mints the `errorHandling` global topic (distinct from `errorEnvelope`, which stays with `application-api-rest` as the REST wire shape). Both blueprints ship the same anatomy every shipped shelf blueprint teaches: `blueprint.json` + `contributions/` + `README.md` + `guide/<slug>.md` + `docs/topics.md` + `assets/`; every AC is runtime-observable through a stdout capture, a filesystem-write observer, or a stubbed transport.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "blueprints",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "The core shelf carried no logging or error-handling blueprint before this train; every WSD-facing service blueprint (Dex's `wsd-api-rest`) stated its companion suggestions in prose only, with no core fallback for projects that had not registered the WSD library. Baz on 2026-09-03 during the WSD blueprint round review ratified two decisions in one clause: the core shelf carries a `logging` and an `error-handling` blueprint written to general enterprise practice (not to any one organisation's standards), and a companion-suggestion mechanism (REQ-014) surfaces them at apply time. Shipping the two blueprints as general-enterprise-practice siblings of the WSD library halves means every project falls back to a sensible logging and error-handling contract without adopting a library, and the WSD library becomes a specialisation (adds `standardsTrace[]`, adds WSD-specific ADR clauses) that the mechanism resolves in preference to the core when the library is registered.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprints",
|
|
12
|
+
"observability",
|
|
13
|
+
"logging",
|
|
14
|
+
"error-handling",
|
|
15
|
+
"companions",
|
|
16
|
+
"shelf"
|
|
17
|
+
],
|
|
18
|
+
"version": "0.1.0",
|
|
19
|
+
"status": "draft",
|
|
20
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
21
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "REQ-014",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Companion-suggestion mechanism: additive manifest fields, deterministic resolution rule, `rcf define blueprint companions` verb, refusal shapes, project-level pin file, agent-facing paragraph",
|
|
5
|
+
"description": "The blueprint mechanism gains a suggestion channel that a service blueprint uses to name the companion roles it recommends alongside itself, and the loader resolves each role deterministically. Two additive optional top-level fields land on `blueprint.json`: `providesRoles[]` names the roles a blueprint provides (lower camelCase strings on `^[a-z][a-zA-Z0-9]*$`); a blueprint declaring a role MUST also carry the paired `scope: global` ADR on the topic string the role names (a `logging` role carries a `scope: global, topic: logging` ADR; a `errorHandling` role carries `scope: global, topic: errorHandling`). `suggestedCompanions[]` is a non-empty array of `{role, reason}` objects the service blueprint recommends. The resolution rule walks a deterministic tier ladder for each suggested role: applied provider wins first (already resolved at apply time), then registered library provider (`rcf/blueprint-libraries.json`), then core-shelf provider. A single library candidate wins over the shelf candidate; two library candidates for one role refuses at apply and at `rcf define blueprint companions` with exit 3 and a three-path resolution message (explicit `--companion` selector, project-level pin, or removing one library). A `--companion <role>=<slug>` selector on `rcf define blueprint add` accepts `<libraryPrefix>:<slug>` or a bare shelf slug and writes the choice to `rcf/companions.json`; naming a slug that does not declare the role refuses exit 2. A project-level `rcf/companions.json` (schemaVersion 1, current pin only per amendment A1, no per-apply history, no severity field) records role-to-provider pinnings; `rcf define blueprint companions set|unset` writes and removes pins; the file rides git. `rcf define validate` refuses exit 3 when a pinned role names an unresolvable provider. The apply-time suggestion block prints after `rcf define blueprint add` succeeds and is suppressible with `--no-companion-suggestions`. The three surfaces (apply-time block, `rcf define blueprint companions <slug>` verb, `rcf define blueprint list` annotation for suggested-but-not-applied companions) render the same resolution through a single loader function. A paragraph on the managed agent-instructions block's `How to talk to your operator` section (regenerated via `scripts/gen-managed-artefacts.mjs`) tells the agent to surface resolved companions verbally without picking. The mechanism is suggestion, never compulsion: a blueprint that declares `suggestedCompanions: [\"logging\"]` still applies cleanly with no logging blueprint present. Backward-compatible: a blueprint that does not declare `suggestedCompanions[]` produces an empty resolution and prints no block.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "blueprints",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Before this train, service blueprints named their companion suggestions in prose in each README and each guide, and the machine could not act on them: `rcf define blueprint add` could not print a suggestion, `rcf define blueprint list` could not annotate an outstanding one, the agent could not know which library provider to prefer, and the operator had no place to record a project-level choice that outlived any single apply. Baz on 2026-09-03 during the WSD blueprint round review ratified the mechanism in the same clause as the two new core blueprints: the mechanism surfaces the suggestion three ways from one resolution rule, the agent surfaces the resolved companions verbally, and the operator adopts explicitly. Suggestion by role (not by slug) is the load-bearing choice: a service blueprint ships once and works with every library that provides the role; the operator's opt-in to a library IS the choice the resolution rule records.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprints",
|
|
12
|
+
"companions",
|
|
13
|
+
"provides-roles",
|
|
14
|
+
"suggested-companions",
|
|
15
|
+
"resolution",
|
|
16
|
+
"pin"
|
|
17
|
+
],
|
|
18
|
+
"version": "0.1.0",
|
|
19
|
+
"status": "draft",
|
|
20
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
21
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
22
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "REQ-015",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Standards-derived-blueprint discipline: authoring standard section 8a, additive contribution fields, load-time validation",
|
|
5
|
+
"description": "The blueprint-authoring standard gains a section 8a that names the standards-derived discipline for any blueprint that composes on an organisational or industry standard: MUST clauses become ACs where the clause binds a testable runtime or artefact behaviour; a MUST that binds an operator choice (choice-shaped) may land as a `recommendedDefault: true` ADR carrying the clause id on `standardsTraceClause`; not-carried rows stay allowed with a named reason (per amendment A2, Baz 2026-09-04T12:20:31Z). SHOULD clauses become recommended ADR defaults (`recommendedDefault: true`) with the elicited-parameter alternative documented in the ADR's consequences. MAY clauses become elicited ADR choices (`elicited: true`) that the applying operator supplies at apply. Three additive optional ADR-contribution fields on `blueprint.json`: `recommendedDefault: true` marks the ADR as a SHOULD (or a choice-shaped MUST); `elicited: true` marks the ADR as taking an operator-supplied value at apply; `standardsTraceClause` records the standard clause identifier verbatim (`WSD-001 clause 3.1`, `RFC 7807 section 3.1`) or the sentinel `\"generic enterprise practice\"` for the neutral shelf blueprints. `recommendedDefault` and `elicited` are mutually independent. One additive blueprint-level field: `standardsTrace[]` is a list of `{id, version}` objects naming the standards the blueprint composes; optional; a blueprint that ships without it is a general-enterprise-practice blueprint by default. Load-time validation: if `standardsTrace[]` is set, every ADR contribution MUST carry a non-null `standardsTraceClause` (refusal shape: `blueprint '<slug>' declares standardsTrace but ADR contribution '<id>' has no standardsTraceClause; every ADR must reference a standard clause or the sentinel 'generic enterprise practice'.`); no cross-check on clause severity to kind mapping (that discipline is prose, not code). The discipline lands the moment a blueprint declares `standardsTrace[]`; zero shelf blueprints declare it today (the two new core blueprints in REQ-013 are general enterprise practice). Dex's WSD library at 0.9.1 already ships standards-trace tables that this discipline formalises.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "blueprints",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Dex's WSD library composes on the WSD-001 through WSD-012 standards with clause-level trace tables under `docs/standards-trace.md`. Before this train, the trace lived in prose only, and a library blueprint's ADR could omit any standard reference without the loader noticing. Baz on 2026-09-03 during the WSD blueprint round review ratified the discipline as `really good idea` and made it the shelf standard for any future library or shipped blueprint that composes on named standards. Baz amendment A2 (2026-09-04T12:20:31Z) refined the MUST-to-kind mapping to admit choice-shaped MUSTs as ADRs so the WSD library's 41 MUSTs (27 to AC, 8 to ADR, 8 not-carried per Dex's tables) fit under the discipline without renumbering. The additive fields and load-time validation give machine-checkable adherence without changing any existing blueprint (zero shelf blueprints declare `standardsTrace[]` today).",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprints",
|
|
12
|
+
"authoring",
|
|
13
|
+
"standards",
|
|
14
|
+
"traceability",
|
|
15
|
+
"loader"
|
|
16
|
+
],
|
|
17
|
+
"version": "0.1.0",
|
|
18
|
+
"status": "draft",
|
|
19
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
20
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
21
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "TS-034",
|
|
3
|
+
"usId": "US-1201",
|
|
4
|
+
"title": "Three amended blueprints apply cleanly in every ordering with one-owner-per-topic in the manifest",
|
|
5
|
+
"purpose": "Cover the two ACs on US-1201: no globalAdrTopic conflict on healthProbes/readinessSemantics during apply in any of the six permutations, and one-and-only-one probe-endpoints scope:global claimant per topic in the resulting manifest.",
|
|
6
|
+
"testLevel": "integration",
|
|
7
|
+
"acIds": [
|
|
8
|
+
"AC-1201-1",
|
|
9
|
+
"AC-1201-2"
|
|
10
|
+
],
|
|
11
|
+
"testCases": [
|
|
12
|
+
{
|
|
13
|
+
"id": "TC-034-permutations-no-globaladr-conflict",
|
|
14
|
+
"acId": "AC-1201-1",
|
|
15
|
+
"description": "The first of six orderings (essentials -> probe-endpoints -> api-rest) is exercised here as the resolved test-point representative of the parameterised assertion; the other five permutations run in the same suite file (assertion 1 (apply cleanly in every ordering): ...) and share this AC.",
|
|
16
|
+
"testPointer": "test/blueprint/probe-path-alignment.test.js::assertion 1 (apply cleanly in every ordering): observability-essentials -> observability-probe-endpoints -> application-api-rest",
|
|
17
|
+
"status": "pending",
|
|
18
|
+
"scope": "library"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "TC-034-one-owner-per-topic",
|
|
22
|
+
"acId": "AC-1201-2",
|
|
23
|
+
"description": "After applying all three blueprints into a fresh project tree, exactly one scope:global ADR on healthProbes and one on readinessSemantics are present in the manifest, both owned by observability-probe-endpoints",
|
|
24
|
+
"testPointer": "test/blueprint/probe-path-alignment.test.js::assertion 2: one owner per topic across the applied manifest",
|
|
25
|
+
"status": "pending",
|
|
26
|
+
"scope": "library"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"status": "draft",
|
|
30
|
+
"createdAt": "2026-09-04T00:00:00Z",
|
|
31
|
+
"updatedAt": "2026-09-04T00:00:00Z"
|
|
32
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "TS-035",
|
|
3
|
+
"usId": "US-1202",
|
|
4
|
+
"title": "Applied tree carries no literal /healthz or /readyz path outside probe-endpoints prose",
|
|
5
|
+
"purpose": "Cover the one AC on US-1202: greppable proof that /healthz, /readyz, /healthz/live, /healthz/ready and /healthz/startup do not appear in the applied rcf/ contribution JSON tree after re-applying all three amended blueprints.",
|
|
6
|
+
"testLevel": "integration",
|
|
7
|
+
"acIds": [
|
|
8
|
+
"AC-1202-1"
|
|
9
|
+
],
|
|
10
|
+
"testCases": [
|
|
11
|
+
{
|
|
12
|
+
"id": "TC-035-no-literal-path-in-applied-tree",
|
|
13
|
+
"acId": "AC-1202-1",
|
|
14
|
+
"description": "Applying all three amended blueprints and grepping the applied rcf/ tree for the five literal path strings returns zero matches",
|
|
15
|
+
"testPointer": "test/blueprint/probe-path-alignment.test.js::assertion 3: no literal probe path outside probe-endpoints prose or Historical ADRs in applied tree",
|
|
16
|
+
"status": "pending",
|
|
17
|
+
"scope": "library"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"status": "draft",
|
|
21
|
+
"createdAt": "2026-09-04T00:00:00Z",
|
|
22
|
+
"updatedAt": "2026-09-04T00:00:00Z"
|
|
23
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "TS-036",
|
|
3
|
+
"usId": "US-1203",
|
|
4
|
+
"title": "Each amended blueprint carries the ratified alignment facts (probe-endpoints, essentials, api-rest)",
|
|
5
|
+
"purpose": "Cover the three ACs on US-1203: probe-endpoints has the optional startup ACs and composing section; essentials has path-neutral REQs/TACs and boot-refusal ACs; api-rest defers all probe paths to the resolved set.",
|
|
6
|
+
"testLevel": "integration",
|
|
7
|
+
"acIds": [
|
|
8
|
+
"AC-1203-1",
|
|
9
|
+
"AC-1203-2",
|
|
10
|
+
"AC-1203-3"
|
|
11
|
+
],
|
|
12
|
+
"testCases": [
|
|
13
|
+
{
|
|
14
|
+
"id": "TC-036-probe-endpoints-optional-startup",
|
|
15
|
+
"acId": "AC-1203-1",
|
|
16
|
+
"description": "probe-endpoints v1.1.0 declares the optional startup path across ADR-1503, US-14102 AC-14102-4, US-14107 AC-14107-4, and the guide composing section",
|
|
17
|
+
"testPointer": "test/blueprint/probe-path-alignment.test.js::assertion 4: bare compose default declares /live and /ready; optional /startup; loadBalancer /health",
|
|
18
|
+
"status": "pending",
|
|
19
|
+
"scope": "library"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "TC-036-essentials-path-neutral-and-refusal",
|
|
23
|
+
"acId": "AC-1203-2",
|
|
24
|
+
"description": "essentials v2.0.0 restates REQ-001/002 path-neutral, marks TAC-801/802 path as REQUIRED with no default, and adds AC-7101-4/AC-7102-4 for the PROBE_INTERFACE_PATHS_MISSING boot refusal",
|
|
25
|
+
"testPointer": "test/blueprint/probe-path-alignment.test.js::assertion 5: essentials-alone declares required probeInterface.paths and refuses boot when absent",
|
|
26
|
+
"status": "pending",
|
|
27
|
+
"scope": "library"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "TC-036-essentials-no-shipped-default",
|
|
31
|
+
"acId": "AC-1203-2",
|
|
32
|
+
"description": "TAC-801/802 interfaces carry no literal /healthz or /readyz path defaults and mark the path parameter as REQUIRED",
|
|
33
|
+
"testPointer": "test/blueprint/probe-path-alignment.test.js::assertion 7: essentials-alone shape gates on required probeInterface.paths, TACs carry no shipped default",
|
|
34
|
+
"status": "pending",
|
|
35
|
+
"scope": "library"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "TC-036-essentials-no-dual-handler",
|
|
39
|
+
"acId": "AC-1203-2",
|
|
40
|
+
"description": "essentials TAC-801/802 responsibilities name the no-dual-handler semantics when probe-endpoints is composed",
|
|
41
|
+
"testPointer": "test/blueprint/probe-path-alignment.test.js::assertion 9: essentials TAC-801/802 promise no dual handler registration when probe-endpoints is composed",
|
|
42
|
+
"status": "pending",
|
|
43
|
+
"scope": "library"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "TC-036-api-rest-auth-exempt-list",
|
|
47
|
+
"acId": "AC-1203-3",
|
|
48
|
+
"description": "api-rest US-2108 AC-2108-5 binds the auth-exempt assertion to the resolved probe path set naming getExemptPathSet, and TAC-306 responsibilities carry the same binding",
|
|
49
|
+
"testPointer": "test/blueprint/probe-path-alignment.test.js::assertion 6: api-rest auth-exempt list equals the probe-endpoints resolved path set",
|
|
50
|
+
"status": "pending",
|
|
51
|
+
"scope": "library"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "TC-036-api-rest-startup-consumption",
|
|
55
|
+
"acId": "AC-1203-3",
|
|
56
|
+
"description": "api-rest US-2108 AC-2108-4 binds the startup semantics to the resolved startup path and names the startup.enabled flag or probeInterface.paths.startup as the enablement source",
|
|
57
|
+
"testPointer": "test/blueprint/probe-path-alignment.test.js::assertion 8: startup binding when enabled is declared on probe-endpoints and consumed by api-rest",
|
|
58
|
+
"status": "pending",
|
|
59
|
+
"scope": "library"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"status": "draft",
|
|
63
|
+
"createdAt": "2026-09-04T00:00:00Z",
|
|
64
|
+
"updatedAt": "2026-09-04T00:00:00Z"
|
|
65
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "TS-037",
|
|
3
|
+
"usId": "US-1204",
|
|
4
|
+
"title": "`rcf define blueprint remove-resolution <adr-id>` verb: remove + idempotent + refuse behaviours",
|
|
5
|
+
"purpose": "Cover the single AC on US-1204: the ratified three-behaviour surface (remove entry, idempotent re-run, refuse-exit-2 on malformed or unknown id) end-to-end through the CLI, plus the help block advertising the verb.",
|
|
6
|
+
"testLevel": "integration",
|
|
7
|
+
"acIds": [
|
|
8
|
+
"AC-1204-1"
|
|
9
|
+
],
|
|
10
|
+
"testCases": [
|
|
11
|
+
{
|
|
12
|
+
"id": "TC-037-remove-drops-entry-and-prints-line",
|
|
13
|
+
"acId": "AC-1204-1",
|
|
14
|
+
"description": "One resolutions[] entry seeded with resolvedByAdrId 'ADR-011-health-probes'; the verb prints the removal line naming the id, topic 'healthProbes' and resolution id, exits 0, drops the single entry from manifest.resolutions[], and leaves every other manifest section and the ruling ADR file on disk unchanged.",
|
|
15
|
+
"testPointer": "test/blueprint/cli.test.js::rcf blueprint remove-resolution drops the resolutions[] entry and prints one result line (spec A2)",
|
|
16
|
+
"status": "pending",
|
|
17
|
+
"scope": "library"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "TC-037-idempotent-second-run",
|
|
21
|
+
"acId": "AC-1204-1",
|
|
22
|
+
"description": "After a successful remove, a second run of the same command exits 0 and prints the 'nothing to remove' line without writing the manifest.",
|
|
23
|
+
"testPointer": "test/blueprint/cli.test.js::rcf blueprint remove-resolution is idempotent on re-run when the ruling ADR still exists on the tree",
|
|
24
|
+
"status": "pending",
|
|
25
|
+
"scope": "library"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "TC-037-refuse-malformed-adr-id",
|
|
29
|
+
"acId": "AC-1204-1",
|
|
30
|
+
"description": "A malformed id 'not-an-adr' exits 2 with the well-formed-ADR-id error on stderr.",
|
|
31
|
+
"testPointer": "test/blueprint/cli.test.js::rcf blueprint remove-resolution refuses exit 2 on a malformed <adr-id>",
|
|
32
|
+
"status": "pending",
|
|
33
|
+
"scope": "library"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "TC-037-refuse-unknown-adr-id",
|
|
37
|
+
"acId": "AC-1204-1",
|
|
38
|
+
"description": "A well-formed id ('ADR-999-nowhere') that names no ADR on the tree and no resolutions[] entry exits 2 with the 'is not a resolution entry' error on stderr.",
|
|
39
|
+
"testPointer": "test/blueprint/cli.test.js::rcf blueprint remove-resolution refuses exit 2 when <adr-id> is well-formed but names no ADR anywhere on the tree",
|
|
40
|
+
"status": "pending",
|
|
41
|
+
"scope": "library"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "TC-037-help-lists-verb",
|
|
45
|
+
"acId": "AC-1204-1",
|
|
46
|
+
"description": "`rcf help define blueprint` output contains the `remove-resolution <adr-id>` verb block including the idempotent-on-re-run line.",
|
|
47
|
+
"testPointer": "test/blueprint/cli.test.js::rcf help define blueprint prints the remove-resolution verb",
|
|
48
|
+
"status": "pending",
|
|
49
|
+
"scope": "library"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
"status": "draft",
|
|
53
|
+
"createdAt": "2026-09-04T00:00:00Z",
|
|
54
|
+
"updatedAt": "2026-09-04T00:00:00Z"
|
|
55
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "TS-038",
|
|
3
|
+
"usId": "US-1301",
|
|
4
|
+
"title": "observability-logging v1.0.0 ships on the core shelf with the ratified anatomy and applies clean",
|
|
5
|
+
"purpose": "Cover the three ACs on US-1301: shipped anatomy (blueprint.json + contributions + README + guide + docs/topics.md + assets), clean apply into a fresh fixture, and shelf-canonical logging global topic on ADR-1601 with providesRoles logging.",
|
|
6
|
+
"testLevel": "integration",
|
|
7
|
+
"acIds": [
|
|
8
|
+
"AC-1301-1",
|
|
9
|
+
"AC-1301-2",
|
|
10
|
+
"AC-1301-3"
|
|
11
|
+
],
|
|
12
|
+
"testCases": [
|
|
13
|
+
{
|
|
14
|
+
"id": "TC-038-blueprint-json-fields",
|
|
15
|
+
"acId": "AC-1301-1",
|
|
16
|
+
"description": "blueprints/observability-logging/blueprint.json declares slug, version 1.0.0, category observability, providesRoles [\"logging\"], and includes contributions for REQ-001..005, US-15101..15108, TAC-1601, TAC-1602 and ADR-1601..1604 with ADR-1601 carrying scope global and topic logging.",
|
|
17
|
+
"testPointer": "test/blueprint/observability-logging-anatomy.test.js::observability-logging: blueprint.json declares the ratified shape (TC-038-blueprint-json-fields)",
|
|
18
|
+
"status": "pending",
|
|
19
|
+
"scope": "library"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "TC-038-clean-apply",
|
|
23
|
+
"acId": "AC-1301-2",
|
|
24
|
+
"description": "rcf define blueprint add against a fresh fixture applies observability-logging cleanly (exit 0), records manifest.blueprints[] with slug observability-logging at 1.0.0, and writes rcf/adr/adr-1601-observability-logging-line-shape.json.",
|
|
25
|
+
"testPointer": "test/blueprint/observability-logging-anatomy.test.js::observability-logging: apply into a fresh fixture succeeds and writes the namespaced contributions (TC-038-clean-apply)",
|
|
26
|
+
"status": "pending",
|
|
27
|
+
"scope": "library"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "TC-038-anatomy-and-topics",
|
|
31
|
+
"acId": "AC-1301-3",
|
|
32
|
+
"description": "The blueprint anatomy is complete: README.md carries the Apply block and Known mechanism-reach gaps section; docs/topics.md names the logging global topic string and records the 15101-15899 band with 16xx suffix block; guide/observability-logging.md exists.",
|
|
33
|
+
"testPointer": "test/blueprint/observability-logging-anatomy.test.js::observability-logging: anatomy files exist with the required sections (TC-038-anatomy-and-topics)",
|
|
34
|
+
"status": "pending",
|
|
35
|
+
"scope": "library"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"status": "draft",
|
|
39
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
40
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
41
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "TS-039",
|
|
3
|
+
"usId": "US-1302",
|
|
4
|
+
"title": "application-error-handling v1.0.0 ships on the core shelf with providesRoles errorHandling and mints the errorHandling global topic distinct from errorEnvelope",
|
|
5
|
+
"purpose": "Cover the three ACs on US-1302: shipped anatomy and blueprint.json fields, clean apply into a fresh fixture, and errorHandling vs errorEnvelope topic distinction.",
|
|
6
|
+
"testLevel": "integration",
|
|
7
|
+
"acIds": [
|
|
8
|
+
"AC-1302-1",
|
|
9
|
+
"AC-1302-2",
|
|
10
|
+
"AC-1302-3"
|
|
11
|
+
],
|
|
12
|
+
"testCases": [
|
|
13
|
+
{
|
|
14
|
+
"id": "TC-039-blueprint-json-fields",
|
|
15
|
+
"acId": "AC-1302-1",
|
|
16
|
+
"description": "blueprints/application-error-handling/blueprint.json declares slug, version 1.0.0, category application, providesRoles [\"errorHandling\"], and includes contributions for REQ-001..004, US-16101..16107, TAC-1701, TAC-1702 and ADR-1701..1703 with ADR-1701 carrying scope global and topic errorHandling.",
|
|
17
|
+
"testPointer": "test/blueprint/application-error-handling-anatomy.test.js::application-error-handling: blueprint.json declares the ratified shape (TC-039-blueprint-json-fields)",
|
|
18
|
+
"status": "pending",
|
|
19
|
+
"scope": "library"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "TC-039-clean-apply",
|
|
23
|
+
"acId": "AC-1302-2",
|
|
24
|
+
"description": "rcf define blueprint add applies application-error-handling cleanly into a fresh fixture, records manifest.blueprints[] with the slug at 1.0.0, and writes rcf/adr/adr-1701-application-error-handling-record-shape.json.",
|
|
25
|
+
"testPointer": "test/blueprint/application-error-handling-anatomy.test.js::application-error-handling: apply into a fresh fixture succeeds and writes the namespaced contributions (TC-039-clean-apply)",
|
|
26
|
+
"status": "pending",
|
|
27
|
+
"scope": "library"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "TC-039-topics-distinct",
|
|
31
|
+
"acId": "AC-1302-3",
|
|
32
|
+
"description": "docs/topics.md distinguishes errorHandling from errorEnvelope (errorHandling internal record and boundary; errorEnvelope stays with application-api-rest as REST wire shape) and reserves the 16101-16899 band with 17xx suffix block.",
|
|
33
|
+
"testPointer": "test/blueprint/application-error-handling-anatomy.test.js::application-error-handling: docs/topics.md distinguishes errorHandling from errorEnvelope (TC-039-topics-distinct)",
|
|
34
|
+
"status": "pending",
|
|
35
|
+
"scope": "library"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"status": "draft",
|
|
39
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
40
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
41
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "TS-040",
|
|
3
|
+
"usId": "US-1401",
|
|
4
|
+
"title": "Loader accepts providesRoles and suggestedCompanions with shape validation and paired-ADR gate",
|
|
5
|
+
"purpose": "Cover the three ACs on US-1401: accepted shape (both fields optional and independent), refusal shapes for camelCase pattern / empty reason / em-dash / emoji, paired-scope-global-ADR gate.",
|
|
6
|
+
"testLevel": "unit",
|
|
7
|
+
"acIds": [
|
|
8
|
+
"AC-1401-1",
|
|
9
|
+
"AC-1401-2",
|
|
10
|
+
"AC-1401-3"
|
|
11
|
+
],
|
|
12
|
+
"testCases": [
|
|
13
|
+
{
|
|
14
|
+
"id": "TC-040-loader-accepts-both",
|
|
15
|
+
"acId": "AC-1401-1",
|
|
16
|
+
"description": "loadBlueprint against a fixture declaring providesRoles: [\"logging\"] and suggestedCompanions: [{role: \"logging\", reason: \"...\"}] returns the fields on the LoadedBlueprint object; a fixture declaring neither also loads clean.",
|
|
17
|
+
"testPointer": "test/blueprint/loader-companions.test.js::loader accepts and preserves providesRoles and suggestedCompanions (AC-1401-1)",
|
|
18
|
+
"status": "pending",
|
|
19
|
+
"scope": "library"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "TC-040-refuse-bad-camelcase",
|
|
23
|
+
"acId": "AC-1401-2",
|
|
24
|
+
"description": "loadBlueprint refuses a fixture declaring providesRoles: [\"Logging\"] (upper camel) with rcfError kind validation naming providesRoles[0] and the offending value.",
|
|
25
|
+
"testPointer": "test/blueprint/loader-companions.test.js::loader refuses providesRoles value that fails the lower camelCase pattern (AC-1401-2)",
|
|
26
|
+
"status": "pending",
|
|
27
|
+
"scope": "library"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "TC-040-refuse-empty-reason",
|
|
31
|
+
"acId": "AC-1401-2",
|
|
32
|
+
"description": "loadBlueprint refuses a fixture with suggestedCompanions entry whose reason is empty or whitespace-only.",
|
|
33
|
+
"testPointer": "test/blueprint/loader-companions.test.js::loader refuses suggestedCompanions entry with empty or whitespace-only reason (AC-1401-2)",
|
|
34
|
+
"status": "pending",
|
|
35
|
+
"scope": "library"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "TC-040-refuse-em-dash-and-emoji",
|
|
39
|
+
"acId": "AC-1401-2",
|
|
40
|
+
"description": "loadBlueprint refuses a fixture with an em-dash (U+2014) or an emoji in the reason string.",
|
|
41
|
+
"testPointer": "test/blueprint/loader-companions.test.js::loader refuses em-dash in suggestedCompanions reason (AC-1401-2)",
|
|
42
|
+
"status": "pending",
|
|
43
|
+
"scope": "library"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "TC-040-paired-adr-required",
|
|
47
|
+
"acId": "AC-1401-3",
|
|
48
|
+
"description": "loadBlueprint refuses a fixture declaring providesRoles: [\"logging\"] but no scope:global ADR carrying topic 'logging' with the exact paired-ADR refusal message.",
|
|
49
|
+
"testPointer": "test/blueprint/loader-companions.test.js::loader refuses providesRoles without a paired scope:global ADR on the topic string (AC-1401-3)",
|
|
50
|
+
"status": "pending",
|
|
51
|
+
"scope": "library"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"status": "draft",
|
|
55
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
56
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
57
|
+
}
|