rcf-lite 0.18.0 → 0.20.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 +53 -0
- package/bin/rcf.js +5 -0
- 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/docs/topics.md +4 -2
- 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 +2 -0
- 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/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 +2 -2
- 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/code-nodes/cn-098.json +13 -0
- package/rcf/code-nodes/cn-099.json +13 -0
- package/rcf/code-nodes/cn-100.json +13 -0
- package/rcf/code-nodes/cn-101.json +13 -0
- package/rcf/code-nodes/cn-102.json +13 -0
- package/rcf/code-nodes/cn-103.json +13 -0
- package/rcf/code-nodes/cn-104.json +13 -0
- package/rcf/code-nodes/cn-105.json +13 -0
- package/rcf/evals/eval-001.json +55 -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/fbs/fbs-035.json +18 -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/requirements/req-016.json +37 -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/test-suites/ts-045.json +46 -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/rcf/user-stories/us-1601.json +37 -0
- package/releases/releases.yaml +20 -1
- package/src/blueprint/apply.js +8 -0
- package/src/blueprint/companions.js +485 -0
- package/src/blueprint/index.js +16 -0
- package/src/blueprint/loader.js +243 -1
- package/src/cli/blueprint.js +309 -0
- package/src/cli/create.js +14 -0
- package/src/cli/eval-coverage.js +221 -0
- package/src/cli/eval.js +43 -0
- package/src/cli/finalise.js +64 -0
- package/src/cli/help.js +4 -0
- package/src/cli/validate.js +7 -0
- package/src/core/store/ids.js +5 -1
- package/src/core/store/init.js +4 -0
- package/src/core/store/loader.js +4 -0
- package/src/core/store/validator.js +8 -1
- package/src/core/store/walker.js +71 -2
- package/src/core/store/writer.js +4 -0
- package/src/eval/judge.js +338 -0
- package/src/finalise/index.js +8 -0
- package/src/finalise/ingest.js +27 -0
- package/src/finalise/ship-without-eval.js +123 -0
- package/src/query/eval-coverage.js +162 -0
- package/src/verify/chain/index.js +67 -0
- package/src/verify/cli/run.js +15 -0
- package/src/verify/engine/index.js +10 -0
- package/src/verify/verdict/index.js +46 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-088",
|
|
3
|
+
"path": "src/blueprint/companions.js#renderAmbiguousLibraryRefusal",
|
|
4
|
+
"title": "companions.js: two-libraries-one-role refusal renderer with the three-path resolution message (spec 2.4)",
|
|
5
|
+
"description": "Anchored by the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022); see the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md for the full trace.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-1404-2"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
13
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-089",
|
|
3
|
+
"path": "src/cli/blueprint.js#handleCompanionsVerb",
|
|
4
|
+
"title": "rcf define blueprint companions <slug> propagates the ambiguousLibraries refusal to exit 3",
|
|
5
|
+
"description": "Anchored by the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022); see the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md for the full trace.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-1404-2"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
13
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-090",
|
|
3
|
+
"path": "src/cli/validate.js#main",
|
|
4
|
+
"title": "rcf define validate consults validateCompanionPinsResolvable so an unresolvable pin exits 3 with the ratified message shape",
|
|
5
|
+
"description": "Anchored by the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022); see the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md for the full trace.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-1404-3"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
13
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-091",
|
|
3
|
+
"path": "src/blueprint/companions.js#validateCompanionPinsResolvable",
|
|
4
|
+
"title": "companions.js: unresolvable pin detection walks applied > libraries > shelf and returns rcfError entries the validate CLI folds into exit 3",
|
|
5
|
+
"description": "Anchored by the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022); see the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md for the full trace.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-1404-3"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
13
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-092",
|
|
3
|
+
"path": "src/blueprint/loader.js#validateStandardsTrace",
|
|
4
|
+
"title": "Loader validates standardsTrace[] shape and refuses missing standardsTraceClause on every ADR contribution (amendment A2 wording preserved)",
|
|
5
|
+
"description": "Anchored by the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022); see the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md for the full trace.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-1501-1",
|
|
8
|
+
"AC-1501-2"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [],
|
|
11
|
+
"version": "0.1.0",
|
|
12
|
+
"status": "draft",
|
|
13
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
14
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-093",
|
|
3
|
+
"path": "src/blueprint/loader.js#preserveAdrDisciplineFields",
|
|
4
|
+
"title": "Loader preserves recommendedDefault, elicited and standardsTraceClause on ADR contributions so consumers read them off the LoadedBlueprint",
|
|
5
|
+
"description": "Anchored by the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022); see the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md for the full trace.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-1501-1",
|
|
8
|
+
"AC-1501-3"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [],
|
|
11
|
+
"version": "0.1.0",
|
|
12
|
+
"status": "draft",
|
|
13
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
14
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
15
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-094",
|
|
3
|
+
"path": "../../blueprints/application-api-rest/blueprint.json",
|
|
4
|
+
"title": "application-api-rest 2.1.0 declares suggestedCompanions for logging + errorHandling; ADR-304 retained without scope:global (topic transferred to ADR-1601)",
|
|
5
|
+
"description": "Anchored by the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022); see the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md for the full trace.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-1402-1"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
13
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-095",
|
|
3
|
+
"path": "../../blueprints/application-spa/blueprint.json",
|
|
4
|
+
"title": "application-spa 1.5.0 declares suggestedCompanions for logging + errorHandling to inform the browser-facing boundary",
|
|
5
|
+
"description": "Anchored by the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022); see the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md for the full trace.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-1402-1"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
13
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-096",
|
|
3
|
+
"path": "src/blueprint/apply.js#applyBlueprint",
|
|
4
|
+
"title": "apply.js: ApplyResult carries suggestedCompanions from the source blueprint so the CLI can render the resolved suggestion block after a successful apply",
|
|
5
|
+
"description": "Anchored by the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022); see the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md for the full trace.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-1402-1"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
13
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-097",
|
|
3
|
+
"path": "src/blueprint/companions.js#unsetCompanionPin",
|
|
4
|
+
"title": "companions.js: unsetCompanionPin removes the roles.<role> entry, deletes the file when empty, refuses exit 2 when no pin exists for the role",
|
|
5
|
+
"description": "Anchored by the core companions train (w-2026-09-03-dave-030, d-2026-09-04-022); see the spec at projects/rcf-lite-wsd/specs/rcf-lite-core-companions-spec-2026-09-04.md for the full trace.",
|
|
6
|
+
"implementsAcIds": [
|
|
7
|
+
"AC-1403-2"
|
|
8
|
+
],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"status": "draft",
|
|
12
|
+
"createdAt": "2026-09-04T12:20:00Z",
|
|
13
|
+
"updatedAt": "2026-09-04T12:20:00Z"
|
|
14
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-098",
|
|
3
|
+
"path": "src/cli/eval-coverage.js#main",
|
|
4
|
+
"title": "eval-coverage.js: rcf audit eval coverage main handler; parses args, dispatches strict gate, formats table/json/mermaid, exits 4 on missing",
|
|
5
|
+
"implementsAcIds": [
|
|
6
|
+
"AC-1601-1"
|
|
7
|
+
],
|
|
8
|
+
"dependencies": [],
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"status": "draft",
|
|
11
|
+
"createdAt": "2026-09-04T16:25:42.896Z",
|
|
12
|
+
"updatedAt": "2026-09-04T16:25:42.896Z"
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-099",
|
|
3
|
+
"path": "src/query/eval-coverage.js#computeEvalCoverage",
|
|
4
|
+
"title": "eval-coverage.js: computeEvalCoverage pure function classifies each AC into covered/covered-optional/missing/not-required",
|
|
5
|
+
"implementsAcIds": [
|
|
6
|
+
"AC-1601-1"
|
|
7
|
+
],
|
|
8
|
+
"dependencies": [],
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"status": "draft",
|
|
11
|
+
"createdAt": "2026-09-04T16:25:43.056Z",
|
|
12
|
+
"updatedAt": "2026-09-04T16:25:43.056Z"
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-100",
|
|
3
|
+
"path": "src/verify/verdict/index.js#evalPerAcVerdict",
|
|
4
|
+
"title": "verdict/index.js: evalPerAcVerdict emits EVAL-MISSING or EVAL-BELOW-THRESHOLD for nonDeterministic ACs",
|
|
5
|
+
"implementsAcIds": [
|
|
6
|
+
"AC-1601-2"
|
|
7
|
+
],
|
|
8
|
+
"dependencies": [],
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"status": "draft",
|
|
11
|
+
"createdAt": "2026-09-04T16:25:43.219Z",
|
|
12
|
+
"updatedAt": "2026-09-04T16:25:43.219Z"
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-101",
|
|
3
|
+
"path": "src/verify/chain/index.js#evalBindingFor",
|
|
4
|
+
"title": "chain/index.js: evalBindingFor aggregates evalStatus + evalRunVerdict per AC from tree.evals[]",
|
|
5
|
+
"implementsAcIds": [
|
|
6
|
+
"AC-1601-2"
|
|
7
|
+
],
|
|
8
|
+
"dependencies": [],
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"status": "draft",
|
|
11
|
+
"createdAt": "2026-09-04T16:25:43.382Z",
|
|
12
|
+
"updatedAt": "2026-09-04T16:25:43.382Z"
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-102",
|
|
3
|
+
"path": "src/finalise/ship-without-eval.js#composeShipWithoutEvalRecord",
|
|
4
|
+
"title": "ship-without-eval.js: composeShipWithoutEvalRecord builds the ack record with monotonic id, reason, declared per-AC verdicts, reportPath",
|
|
5
|
+
"implementsAcIds": [
|
|
6
|
+
"AC-1601-3"
|
|
7
|
+
],
|
|
8
|
+
"dependencies": [],
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"status": "draft",
|
|
11
|
+
"createdAt": "2026-09-04T16:25:43.546Z",
|
|
12
|
+
"updatedAt": "2026-09-04T16:25:43.546Z"
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-103",
|
|
3
|
+
"path": "src/finalise/ingest.js#reportHasEvalRefusal",
|
|
4
|
+
"title": "ingest.js: reportHasEvalRefusal / findEvalRefusalAcs read EVAL-MISSING and EVAL-BELOW-THRESHOLD from perAcVerdicts[]",
|
|
5
|
+
"implementsAcIds": [
|
|
6
|
+
"AC-1601-3"
|
|
7
|
+
],
|
|
8
|
+
"dependencies": [],
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"status": "draft",
|
|
11
|
+
"createdAt": "2026-09-04T16:25:43.709Z",
|
|
12
|
+
"updatedAt": "2026-09-04T16:25:43.709Z"
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-104",
|
|
3
|
+
"path": "src/eval/judge.js#runOneCase",
|
|
4
|
+
"title": "eval/judge.js: runOneCase spawns claude (or codex) with -p system-prompt, sends per-case payload on stdin, validates response, returns graded envelope",
|
|
5
|
+
"implementsAcIds": [
|
|
6
|
+
"AC-1601-4"
|
|
7
|
+
],
|
|
8
|
+
"dependencies": [],
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"status": "draft",
|
|
11
|
+
"createdAt": "2026-09-04T16:25:43.873Z",
|
|
12
|
+
"updatedAt": "2026-09-04T16:25:43.873Z"
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cnId": "CN-105",
|
|
3
|
+
"path": "src/eval/judge.js#composeRunRecord",
|
|
4
|
+
"title": "eval/judge.js: composeRunRecord aggregates perCriterion scores, applies criticalMustPass, resolves pass/fail verdict",
|
|
5
|
+
"implementsAcIds": [
|
|
6
|
+
"AC-1601-4"
|
|
7
|
+
],
|
|
8
|
+
"dependencies": [],
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"status": "draft",
|
|
11
|
+
"createdAt": "2026-09-04T16:25:44.037Z",
|
|
12
|
+
"updatedAt": "2026-09-04T16:25:44.037Z"
|
|
13
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "EVAL-001",
|
|
3
|
+
"usId": "US-1601",
|
|
4
|
+
"acIds": ["AC-1601-4"],
|
|
5
|
+
"title": "LLM-as-judge invocation shape: enum-guarded invoker, valid response envelope, honest verdict rollup",
|
|
6
|
+
"purpose": "Grades whether the LLM-as-judge run path returns a graded envelope that reads as trustworthy (aggregate score corresponds to the graded criteria, criticalFailures reflect declared critical criteria that failed, invoker was on the {claude, codex} enum, no HTTP-API call fingerprints in the recorded runRecord notes). The observable output of the judge invocation is non-deterministic (an LLM grader's rationale prose changes run to run) so TS/TC coverage alone cannot certify the shape: an EVAL is the honest peer contract. AC-1601-4 declares determinism nonDeterministic for this reason.",
|
|
7
|
+
"criteria": [
|
|
8
|
+
{
|
|
9
|
+
"id": "invoker-enum",
|
|
10
|
+
"description": "the invoker recorded on the run was 'claude' or 'codex' (subscription-only rule holds); no API key or HTTP anthropic.com fingerprint appears in stderr or notes",
|
|
11
|
+
"critical": true
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"id": "response-envelope",
|
|
15
|
+
"description": "the graded response validated against judge.harness.responseSchemaPath and carries a numeric aggregateScore between 0 and 1 with a perCriterion array"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "verdict-honesty",
|
|
19
|
+
"description": "the resolved verdict is 'pass' when the aggregate meets threshold and no critical criterion failed; 'fail' otherwise; 'pending' is not accepted as the final verdict on a completed run"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"cases": [
|
|
23
|
+
{
|
|
24
|
+
"id": "smoke-shape",
|
|
25
|
+
"input": {
|
|
26
|
+
"prompt": "grade this greeting on the criteria",
|
|
27
|
+
"criteria": ["invoker-enum", "response-envelope", "verdict-honesty"]
|
|
28
|
+
},
|
|
29
|
+
"notes": "one graded case is enough to certify the shape; a real train would carry a case per scenario"
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"judge": {
|
|
33
|
+
"type": "rubric"
|
|
34
|
+
},
|
|
35
|
+
"passThreshold": {
|
|
36
|
+
"aggregateScore": 0.8,
|
|
37
|
+
"criticalMustPass": true
|
|
38
|
+
},
|
|
39
|
+
"runRecord": [
|
|
40
|
+
{
|
|
41
|
+
"runId": "2026-09-04T16:25:00Z-hand-authored",
|
|
42
|
+
"runAt": "2026-09-04T16:25:00Z",
|
|
43
|
+
"runner": "hand-authored, seeded from unit suite outcomes",
|
|
44
|
+
"aggregateScore": 1.0,
|
|
45
|
+
"criticalFailures": [],
|
|
46
|
+
"perCaseScores": [
|
|
47
|
+
{ "caseId": "smoke-shape", "score": 1.0 }
|
|
48
|
+
],
|
|
49
|
+
"verdict": "pass"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
"status": "approved",
|
|
53
|
+
"createdAt": "2026-09-04T16:25:00Z",
|
|
54
|
+
"updatedAt": "2026-09-04T16:25:00Z"
|
|
55
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fbsId": "FBS-028",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"bsId": "BS-001",
|
|
5
|
+
"buildOrder": 28,
|
|
6
|
+
"executionStatus": "verified",
|
|
7
|
+
"title": "observability-logging v1.0.0 shelf blueprint (contributions + README + guide + docs/topics.md + assets), applies clean into a fresh fixture",
|
|
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-1301-1",
|
|
11
|
+
"AC-1301-2",
|
|
12
|
+
"AC-1301-3"
|
|
13
|
+
],
|
|
14
|
+
"dependsOnFbsIds": [
|
|
15
|
+
"FBS-027"
|
|
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-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,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-04T16:22:49.426Z",
|
|
3
|
+
"updatedAt": "2026-09-04T17:20:42.095Z",
|
|
4
|
+
"acIds": [
|
|
5
|
+
"AC-1601-1",
|
|
6
|
+
"AC-1601-2",
|
|
7
|
+
"AC-1601-3",
|
|
8
|
+
"AC-1601-4"
|
|
9
|
+
],
|
|
10
|
+
"fbsId": "FBS-035",
|
|
11
|
+
"prdId": "PRD-001",
|
|
12
|
+
"bsId": "BS-001",
|
|
13
|
+
"buildOrder": 35,
|
|
14
|
+
"executionStatus": "notStarted",
|
|
15
|
+
"title": "rcf-lite consumer wiring for the rcf-schemas 0.6.0 EVAL node (L1 audit / L2 verdict / L3 finalise / L4 define + judge)",
|
|
16
|
+
"summary": "Consumer wiring for the rcf-schemas 0.6.0 EVAL node across four tracks: L1 audits EVAL coverage on the tree, L2 folds EVAL-MISSING and EVAL-BELOW-THRESHOLD into per-AC verdicts on the verify report, L3 gates finalise on EVAL refusals with an opt-out via --ship-without-eval, and L4 lands rcf define --determinism plus the judge invocation module.",
|
|
17
|
+
"dependsOnFbsIds": []
|
|
18
|
+
}
|
|
@@ -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
|
+
}
|