@sdd-method/sdd-cli 1.44.0 → 1.46.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/README.md +4 -9
- package/dist/lib/api-surface/__fixtures__/serverless-repo/serverless/serverless.yml +4 -4
- package/dist/lib/api-surface/analyzers/serverless.js +1 -1
- package/dist/lib/api-surface/analyzers/serverless.js.map +1 -1
- package/dist/lib/api-surface/analyzers/spring.js +1 -1
- package/dist/lib/api-surface/analyzers/spring.js.map +1 -1
- package/dist/lib/briefing/render.d.ts +1 -2
- package/dist/lib/briefing/render.d.ts.map +1 -1
- package/dist/lib/briefing/render.js +1 -2
- package/dist/lib/briefing/render.js.map +1 -1
- package/dist/lib/briefing/variables.d.ts +1 -2
- package/dist/lib/briefing/variables.d.ts.map +1 -1
- package/dist/lib/briefing/variables.js +1 -2
- package/dist/lib/briefing/variables.js.map +1 -1
- package/dist/lib/catalogue/aggregate.d.ts +9 -9
- package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
- package/dist/lib/catalogue/aggregate.js +35 -36
- package/dist/lib/catalogue/aggregate.js.map +1 -1
- package/dist/lib/catalogue/application-archetype/expectations.d.ts +1 -1
- package/dist/lib/catalogue/application-archetype/expectations.d.ts.map +1 -1
- package/dist/lib/catalogue/application-archetype/expectations.js +1 -1
- package/dist/lib/catalogue/application-archetype/expectations.js.map +1 -1
- package/dist/lib/catalogue/archetype/resolver.d.ts +1 -1
- package/dist/lib/catalogue/archetype/wireframe.js +1 -1
- package/dist/lib/catalogue/archetype/wireframe.js.map +1 -1
- package/dist/lib/catalogue/build.d.ts +4 -5
- package/dist/lib/catalogue/build.d.ts.map +1 -1
- package/dist/lib/catalogue/build.js +17 -23
- package/dist/lib/catalogue/build.js.map +1 -1
- package/dist/lib/catalogue/builders/application-conformance-coverage.js +1 -1
- package/dist/lib/catalogue/builders/application-conformance-coverage.js.map +1 -1
- package/dist/lib/catalogue/builders/c4-components.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/c4-components.js +4 -5
- package/dist/lib/catalogue/builders/c4-components.js.map +1 -1
- package/dist/lib/catalogue/builders/c4-containers.d.ts +4 -4
- package/dist/lib/catalogue/builders/c4-containers.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/c4-containers.js +3 -3
- package/dist/lib/catalogue/builders/c4-containers.js.map +1 -1
- package/dist/lib/catalogue/builders/c4-entity-rollups.js +1 -1
- package/dist/lib/catalogue/builders/c4-entity-rollups.js.map +1 -1
- package/dist/lib/catalogue/builders/c4-external-systems.d.ts +6 -6
- package/dist/lib/catalogue/builders/c4-external-systems.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/c4-external-systems.js +1 -1
- package/dist/lib/catalogue/builders/c4-l1-candidates.js +1 -1
- package/dist/lib/catalogue/builders/c4-l1-candidates.js.map +1 -1
- package/dist/lib/catalogue/builders/capabilities.js +2 -2
- package/dist/lib/catalogue/builders/capabilities.js.map +1 -1
- package/dist/lib/catalogue/builders/capability-edges.d.ts +1 -1
- package/dist/lib/catalogue/builders/capability-edges.js +4 -4
- package/dist/lib/catalogue/builders/capability-edges.js.map +1 -1
- package/dist/lib/catalogue/builders/capability-spec-walker.d.ts +3 -3
- package/dist/lib/catalogue/builders/capability-spec-walker.js +3 -3
- package/dist/lib/catalogue/builders/container-dependency.d.ts +3 -3
- package/dist/lib/catalogue/builders/container-dependency.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/container-dependency.js +18 -19
- package/dist/lib/catalogue/builders/container-dependency.js.map +1 -1
- package/dist/lib/catalogue/builders/contracts.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/contracts.js +5 -6
- package/dist/lib/catalogue/builders/contracts.js.map +1 -1
- package/dist/lib/catalogue/builders/data-store-mapping.js +3 -3
- package/dist/lib/catalogue/builders/data-store-mapping.js.map +1 -1
- package/dist/lib/catalogue/builders/edge-label-merge.js +2 -2
- package/dist/lib/catalogue/builders/edge-label-merge.js.map +1 -1
- package/dist/lib/catalogue/builders/entities-manifest.js +1 -1
- package/dist/lib/catalogue/builders/entities-manifest.js.map +1 -1
- package/dist/lib/catalogue/builders/entities-mermaid.js +3 -3
- package/dist/lib/catalogue/builders/entities-mermaid.js.map +1 -1
- package/dist/lib/catalogue/builders/entity-slug.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/entity-slug.js +11 -12
- package/dist/lib/catalogue/builders/entity-slug.js.map +1 -1
- package/dist/lib/catalogue/builders/event-catalog-walker.js +3 -3
- package/dist/lib/catalogue/builders/event-catalog-walker.js.map +1 -1
- package/dist/lib/catalogue/builders/event-edges.js +1 -1
- package/dist/lib/catalogue/builders/event-edges.js.map +1 -1
- package/dist/lib/catalogue/builders/evidence-class.js +2 -2
- package/dist/lib/catalogue/builders/evidence-class.js.map +1 -1
- package/dist/lib/catalogue/builders/external-system-exemption.js +1 -1
- package/dist/lib/catalogue/builders/external-system-exemption.js.map +1 -1
- package/dist/lib/catalogue/builders/feature-contract.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/feature-contract.js +1 -3
- package/dist/lib/catalogue/builders/feature-contract.js.map +1 -1
- package/dist/lib/catalogue/builders/feature-grounding.d.ts +1 -1
- package/dist/lib/catalogue/builders/feature-grounding.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/feature-grounding.js +1 -2
- package/dist/lib/catalogue/builders/feature-grounding.js.map +1 -1
- package/dist/lib/catalogue/builders/feature-groups.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/feature-groups.js +0 -1
- package/dist/lib/catalogue/builders/feature-groups.js.map +1 -1
- package/dist/lib/catalogue/builders/feature-subscription-channels.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/feature-subscription-channels.js +2 -3
- package/dist/lib/catalogue/builders/feature-subscription-channels.js.map +1 -1
- package/dist/lib/catalogue/builders/feature-tree-walker.d.ts +1 -1
- package/dist/lib/catalogue/builders/feature-tree-walker.js +1 -1
- package/dist/lib/catalogue/builders/features.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/features.js +3 -4
- package/dist/lib/catalogue/builders/features.js.map +1 -1
- package/dist/lib/catalogue/builders/glossary-xref.js +1 -1
- package/dist/lib/catalogue/builders/glossary-xref.js.map +1 -1
- package/dist/lib/catalogue/builders/persona-c4system.js +7 -7
- package/dist/lib/catalogue/builders/persona-c4system.js.map +1 -1
- package/dist/lib/catalogue/builders/persona-container.d.ts +1 -1
- package/dist/lib/catalogue/builders/persona-container.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/persona-container.js +14 -14
- package/dist/lib/catalogue/builders/persona-container.js.map +1 -1
- package/dist/lib/catalogue/builders/personas.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/personas.js +1 -2
- package/dist/lib/catalogue/builders/personas.js.map +1 -1
- package/dist/lib/catalogue/builders/product-platform-dependencies.d.ts +1 -1
- package/dist/lib/catalogue/builders/product-platform-dependencies.js +2 -2
- package/dist/lib/catalogue/builders/product-platform-dependencies.js.map +1 -1
- package/dist/lib/catalogue/builders/quality-scores.d.ts +1 -1
- package/dist/lib/catalogue/builders/quality-scores.js +1 -1
- package/dist/lib/catalogue/builders/quality-scores.js.map +1 -1
- package/dist/lib/catalogue/builders/repositories.d.ts +1 -1
- package/dist/lib/catalogue/builders/repositories.js +2 -2
- package/dist/lib/catalogue/builders/repositories.js.map +1 -1
- package/dist/lib/catalogue/builders/screen-tree.d.ts +1 -1
- package/dist/lib/catalogue/builders/screen-tree.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/screen-tree.js +1 -1
- package/dist/lib/catalogue/builders/screen-tree.js.map +1 -1
- package/dist/lib/catalogue/builders/screens.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/screens.js +3 -4
- package/dist/lib/catalogue/builders/screens.js.map +1 -1
- package/dist/lib/catalogue/builders/system-external-dependency.d.ts +1 -1
- package/dist/lib/catalogue/builders/system-external-dependency.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/system-external-dependency.js +7 -7
- package/dist/lib/catalogue/builders/system-external-dependency.js.map +1 -1
- package/dist/lib/catalogue/canonical-schema.yaml +23 -23
- package/dist/lib/catalogue/contract-path-resolution.d.ts +2 -2
- package/dist/lib/catalogue/contract-path-resolution.js +3 -3
- package/dist/lib/catalogue/contract-path-resolution.js.map +1 -1
- package/dist/lib/catalogue/coverage-predicates.d.ts +2 -2
- package/dist/lib/catalogue/coverage-predicates.js +4 -4
- package/dist/lib/catalogue/coverage-predicates.js.map +1 -1
- package/dist/lib/catalogue/coverage-run.js +1 -1
- package/dist/lib/catalogue/coverage-run.js.map +1 -1
- package/dist/lib/catalogue/dedupe-keyed-tables.d.ts +2 -3
- package/dist/lib/catalogue/dedupe-keyed-tables.d.ts.map +1 -1
- package/dist/lib/catalogue/dedupe-keyed-tables.js +2 -3
- package/dist/lib/catalogue/dedupe-keyed-tables.js.map +1 -1
- package/dist/lib/catalogue/ext-id.d.ts +3 -3
- package/dist/lib/catalogue/ext-id.js +4 -4
- package/dist/lib/catalogue/ext-id.js.map +1 -1
- package/dist/lib/catalogue/feature-grounding-aliases-loader.d.ts +1 -1
- package/dist/lib/catalogue/feature-grounding-aliases-loader.js +1 -1
- package/dist/lib/catalogue/finding-identity.d.ts +3 -3
- package/dist/lib/catalogue/finding-identity.js +3 -3
- package/dist/lib/catalogue/findings.d.ts +1 -1
- package/dist/lib/catalogue/freshness.d.ts +1 -1
- package/dist/lib/catalogue/freshness.js +1 -1
- package/dist/lib/catalogue/manifest-loader.d.ts +2 -2
- package/dist/lib/catalogue/manifest-loader.d.ts.map +1 -1
- package/dist/lib/catalogue/manifest-loader.js +2 -2
- package/dist/lib/catalogue/manifest-loader.js.map +1 -1
- package/dist/lib/catalogue/scaffold-delta.js +1 -1
- package/dist/lib/catalogue/schema-compat.d.ts +1 -2
- package/dist/lib/catalogue/schema-compat.d.ts.map +1 -1
- package/dist/lib/catalogue/schema-compat.js +1 -2
- package/dist/lib/catalogue/schema-compat.js.map +1 -1
- package/dist/lib/catalogue/screen-validation-loader.d.ts +1 -1
- package/dist/lib/catalogue/screen-validation-loader.js +1 -1
- package/dist/lib/catalogue/staleness-verdicts.js +2 -2
- package/dist/lib/catalogue/staleness-verdicts.js.map +1 -1
- package/dist/lib/catalogue/traceability-loader.d.ts +1 -1
- package/dist/lib/catalogue/traceability-loader.d.ts.map +1 -1
- package/dist/lib/catalogue/traceability-loader.js +2 -3
- package/dist/lib/catalogue/traceability-loader.js.map +1 -1
- package/dist/lib/ci-binding/index.d.ts +12 -3
- package/dist/lib/ci-binding/index.d.ts.map +1 -1
- package/dist/lib/ci-binding/index.js +108 -33
- package/dist/lib/ci-binding/index.js.map +1 -1
- package/dist/lib/ci-binding/module.d.ts +1 -1
- package/dist/lib/ci-binding/module.d.ts.map +1 -1
- package/dist/lib/ci-binding/module.js +18 -8
- package/dist/lib/ci-binding/module.js.map +1 -1
- package/dist/lib/conformance/index.d.ts +2 -0
- package/dist/lib/conformance/index.d.ts.map +1 -1
- package/dist/lib/conformance/index.js +29 -8
- package/dist/lib/conformance/index.js.map +1 -1
- package/dist/lib/init/app.js +3 -3
- package/dist/lib/init/app.js.map +1 -1
- package/dist/lib/init/ci-workflow.js +2 -0
- package/dist/lib/init/ci-workflow.js.map +1 -1
- package/dist/lib/init/index.js +1 -1
- package/dist/lib/init/index.js.map +1 -1
- package/dist/lib/init/platform.d.ts +3 -0
- package/dist/lib/init/platform.d.ts.map +1 -1
- package/dist/lib/init/platform.js +22 -3
- package/dist/lib/init/platform.js.map +1 -1
- package/dist/lib/init/sdd-manifest.js +1 -1
- package/dist/lib/lock-file.js +1 -1
- package/dist/lib/lock-file.js.map +1 -1
- package/dist/lib/pack/builder.d.ts +1 -1
- package/dist/lib/pack/index.d.ts +1 -2
- package/dist/lib/pack/index.d.ts.map +1 -1
- package/dist/lib/pack/index.js.map +1 -1
- package/dist/lib/pack/reference-closure.d.ts +3 -3
- package/dist/lib/pack/reference-closure.js +3 -3
- package/dist/lib/package-version.d.ts +1 -1
- package/dist/lib/package-version.js +1 -1
- package/dist/lib/snapshot/manifest.js +1 -1
- package/dist/lib/snapshot/targets.d.ts +1 -1
- package/dist/lib/snapshot/targets.js +1 -1
- package/dist/lib/sync/adr-transitions.js +1 -1
- package/dist/lib/sync/bundle-source.d.ts +3 -4
- package/dist/lib/sync/bundle-source.d.ts.map +1 -1
- package/dist/lib/sync/bundle-source.js.map +1 -1
- package/dist/lib/sync/config.d.ts +5 -3
- package/dist/lib/sync/config.d.ts.map +1 -1
- package/dist/lib/sync/config.js +8 -1
- package/dist/lib/sync/config.js.map +1 -1
- package/dist/lib/sync/diff.d.ts +1 -1
- package/dist/lib/sync/diff.js +1 -1
- package/dist/lib/sync/index.d.ts.map +1 -1
- package/dist/lib/sync/index.js +8 -3
- package/dist/lib/sync/index.js.map +1 -1
- package/dist/lib/validate/behaviour-store.d.ts +31 -0
- package/dist/lib/validate/behaviour-store.d.ts.map +1 -0
- package/dist/lib/validate/behaviour-store.js +351 -0
- package/dist/lib/validate/behaviour-store.js.map +1 -0
- package/dist/lib/validate/dispatch.d.ts.map +1 -1
- package/dist/lib/validate/dispatch.js +18 -0
- package/dist/lib/validate/dispatch.js.map +1 -1
- package/dist/lib/validate/index.js +1 -1
- package/dist/lib/validate/index.js.map +1 -1
- package/dist/lib/validate/plan.d.ts +3 -3
- package/dist/lib/validate/plan.d.ts.map +1 -1
- package/dist/lib/validate/plan.js +3 -1
- package/dist/lib/validate/plan.js.map +1 -1
- package/dist/lib/validate/yaml-parse.js +1 -1
- package/dist/lib/validate/yaml-parse.js.map +1 -1
- package/dist/maintain-version.json +2 -2
- package/dist/verbs/plan.js +3 -3
- package/dist/verbs/plan.js.map +1 -1
- package/dist/verbs/sync.js +1 -1
- package/dist/verbs/sync.js.map +1 -1
- package/dist/verify-version.json +2 -2
- package/package.json +3 -5
- package/scripts/author-version.json +2 -2
- package/scripts/build-persona-package.mjs +1 -2
- package/scripts/dagger-parity.sh +2 -2
- package/scripts/maintain-version.json +2 -2
- package/scripts/publish-release.mjs +11 -5
- package/scripts/release-gate.mjs +1 -1
- package/scripts/validate-app-dependencies.sh +5 -5
- package/scripts/validate-integration-docs.sh +1 -1
- package/scripts/verify-version.json +2 -2
- package/LICENSE +0 -201
- package/NOTICE +0 -17
|
@@ -161,8 +161,7 @@ export async function runCatalogueAggregate(inputs, write) {
|
|
|
161
161
|
// capability_service.service_id, emitting one row per resolved
|
|
162
162
|
// (consuming-product, platform-capability) pair. Per-SDD builders
|
|
163
163
|
// emit nothing for this catalogue; the aggregator owns it entirely.
|
|
164
|
-
// See
|
|
165
|
-
// §"Cross-SDD platform-capability-edge" + ADR 0134.
|
|
164
|
+
// See ADR 0134.
|
|
166
165
|
const crossSddRows = deriveCrossSddPlatformCapability(rowsByCatalogue.get("product_platform_dependencies") ?? [], rowsByCatalogue.get("capability_service") ?? [], findings, rowsByCatalogue.get("capabilities") ?? []);
|
|
167
166
|
rowsByCatalogue.set("cross_sdd_platform_capability", crossSddRows);
|
|
168
167
|
// @rule aggregate-feature-integration-support
|
|
@@ -184,8 +183,8 @@ export async function runCatalogueAggregate(inputs, write) {
|
|
|
184
183
|
// The same roots, additionally reachable by DIRECTORY BASENAME. An author who
|
|
185
184
|
// writes a `platform/<name>/...` contract path is reading that name off the
|
|
186
185
|
// filesystem, so it is the directory — which is routinely not the sdd_id (one
|
|
187
|
-
// estate declares `
|
|
188
|
-
// `sdd-
|
|
186
|
+
// estate declares `loyalty-platform` in a directory named
|
|
187
|
+
// `sdd-loyalty-platform`). Kept separate from sddRootsById on purpose: the
|
|
189
188
|
// try-every-root pass must iterate each root ONCE, or a root reachable under two
|
|
190
189
|
// names would count as two hits and report a false ambiguity.
|
|
191
190
|
const sddRootAliases = new Map(sddRootsById);
|
|
@@ -714,7 +713,7 @@ export function dedupExternalSystems(rowsByCatalogue, findings) {
|
|
|
714
713
|
// adopter-AUTHORED platform/domain ADRs untouched — a collision there is a genuine
|
|
715
714
|
// error and MUST still fail the duplicate-PK check. Mirrors dedupExternalSystems.
|
|
716
715
|
//
|
|
717
|
-
// WHAT COUNTS AS METHOD-DISTRIBUTED (M-ADR 0208
|
|
716
|
+
// WHAT COUNTS AS METHOD-DISTRIBUTED (M-ADR 0208): a row whose doc_path is
|
|
718
717
|
// BUNDLE-MANAGED in the contributing SDD's method-baseline.lock. Provenance, not
|
|
719
718
|
// path prefix. The earlier test `startsWith("docs/method/adr/")` was a proxy for
|
|
720
719
|
// the same property and it failed the first time two platform-roots aggregated:
|
|
@@ -1384,7 +1383,7 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1384
1383
|
const exts = rowsByCatalogue.get("c4_external_systems") ?? [];
|
|
1385
1384
|
const containers = rowsByCatalogue.get("c4_containers") ?? [];
|
|
1386
1385
|
const deps = rowsByCatalogue.get("system_external_dependency") ?? [];
|
|
1387
|
-
// Camel humps split BEFORE lowercasing
|
|
1386
|
+
// Camel humps split BEFORE lowercasing: most SDD ids are
|
|
1388
1387
|
// hyphenated, and `posGatewayFramework` must be able to declare
|
|
1389
1388
|
// `pos-gateway-framework`.
|
|
1390
1389
|
const norm = (s) => s
|
|
@@ -1400,7 +1399,7 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1400
1399
|
.filter((s) => String(s["product_id"] ?? "") !== "")
|
|
1401
1400
|
.map((s) => [String(s["product_id"]), String(s["id"])]));
|
|
1402
1401
|
// Name index — names ambiguous across systems are excluded from matching
|
|
1403
|
-
// (
|
|
1402
|
+
// (duplicate system names are themselves a finding).
|
|
1404
1403
|
const systemsByName = new Map();
|
|
1405
1404
|
for (const s of systems) {
|
|
1406
1405
|
const key = compact(String(s["name"] ?? ""));
|
|
@@ -1412,7 +1411,7 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1412
1411
|
else
|
|
1413
1412
|
systemsByName.set(key, [String(s["id"])]);
|
|
1414
1413
|
}
|
|
1415
|
-
// Container indexes
|
|
1414
|
+
// Container indexes: keys (names + slug aliases) are confident
|
|
1416
1415
|
// only within the DECLARING SDD's own system; across the estate, only a
|
|
1417
1416
|
// full display-name match counts, and only when it is unique — a
|
|
1418
1417
|
// diagram-local alias like `emailService` must never bind to an
|
|
@@ -1497,7 +1496,7 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1497
1496
|
}
|
|
1498
1497
|
const containerNameById = new Map(containers.map((c) => [String(c["id"]), String(c["name"] ?? "")]));
|
|
1499
1498
|
const containerSystemById = new Map(containers.map((c) => [String(c["id"]), String(c["system_id"] ?? "")]));
|
|
1500
|
-
//
|
|
1499
|
+
// Containers follow the SAME precedence as systems — declared id
|
|
1501
1500
|
// first, corroborated by the display name; the name alone only as a
|
|
1502
1501
|
// unique fallback. 0.73.0 inverted this (name-equality only, declared id
|
|
1503
1502
|
// discarded) and traded two false positives for five silent true
|
|
@@ -1552,11 +1551,11 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1552
1551
|
}
|
|
1553
1552
|
return null;
|
|
1554
1553
|
};
|
|
1555
|
-
//
|
|
1554
|
+
// Corroboration: a declared-id hit converts (or binds) only when
|
|
1556
1555
|
// the display name agrees with the target — diagram entry ids are
|
|
1557
1556
|
// conventionally local, and an old mnemonic that happens to equal an
|
|
1558
1557
|
// estate id must not convert silently. Comparison is TOKEN-level, not
|
|
1559
|
-
// substring
|
|
1558
|
+
// substring: "Stockroom Service" must not corroborate `stock`
|
|
1560
1559
|
// (shared prefix, different entity), while "Engine (telematics
|
|
1561
1560
|
// processor)" must corroborate a container named "Engine" (a richer
|
|
1562
1561
|
// label must not defeat the match) and three-letter names like "OMS"
|
|
@@ -1593,7 +1592,7 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1593
1592
|
const corroborates = (ext, sysId) => corroboratesLabel(String(ext["name"] ?? ""), nameBysystem.get(sysId) ?? "", sddById.get(sysId) ?? "");
|
|
1594
1593
|
// A bracketed qualifier ("Email Service [unknown]") is the author
|
|
1595
1594
|
// declaring uncertainty — it must never be rendered as a confident
|
|
1596
|
-
// referent
|
|
1595
|
+
// referent: held, with the uncertainty as the stated reason.
|
|
1597
1596
|
const isUncertainLabel = (name) => /\[[^\]]*\]/.test(name);
|
|
1598
1597
|
const keptExts = [];
|
|
1599
1598
|
const dropExtIds = new Map();
|
|
@@ -1609,7 +1608,7 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1609
1608
|
let containerConverted = 0;
|
|
1610
1609
|
let containerEdgesRewritten = 0;
|
|
1611
1610
|
let systemFallbackEdges = 0;
|
|
1612
|
-
//
|
|
1611
|
+
// Edges per candidate, split by whether the member build resolved
|
|
1613
1612
|
// the Rel's non-external endpoint to a local container — the datum that
|
|
1614
1613
|
// decides whether a container-bound candidate can convert without
|
|
1615
1614
|
// destroying an edge.
|
|
@@ -1650,24 +1649,24 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1650
1649
|
continue;
|
|
1651
1650
|
}
|
|
1652
1651
|
if (sys.method === "declared" && !corroborates(ext, sys.id)) {
|
|
1653
|
-
//
|
|
1652
|
+
// Declared-id hit without name corroboration — a collision
|
|
1654
1653
|
// between a diagram-local mnemonic and an estate id, not a
|
|
1655
1654
|
// reference. Kept external, loudly.
|
|
1656
1655
|
uncorroboratedKept++;
|
|
1657
1656
|
outcomeByExtId.set(extId, "uncorroborated hold");
|
|
1658
1657
|
keptExts.push(ext);
|
|
1659
1658
|
findings.add("convention", `c4_external_systems: "${extId}" declared_id resolves to internal system "${sys.id}" ` +
|
|
1660
|
-
`but the display name does not corroborate — kept external; align the entry id or name to convert (M-ADR 0189 §4.2
|
|
1659
|
+
`but the display name does not corroborate — kept external; align the entry id or name to convert (M-ADR 0189 §4.2)`);
|
|
1661
1660
|
continue;
|
|
1662
1661
|
}
|
|
1663
1662
|
if (isUncertainLabel(String(ext["name"] ?? ""))) {
|
|
1664
|
-
// Declared uncertainty never converts
|
|
1663
|
+
// Declared uncertainty never converts — held with the
|
|
1665
1664
|
// uncertainty as the stated reason.
|
|
1666
1665
|
uncertainHolds++;
|
|
1667
1666
|
outcomeByExtId.set(extId, "uncertain hold");
|
|
1668
1667
|
keptExts.push(ext);
|
|
1669
1668
|
findings.add("coverage", `c4_external_systems: "${extId}" resolves to internal system "${sys.id}" but the label declares uncertainty — ` +
|
|
1670
|
-
`held, not converted; resolve the uncertainty to convert (M-ADR 0189 §4.4
|
|
1669
|
+
`held, not converted; resolve the uncertainty to convert (M-ADR 0189 §4.4)`);
|
|
1671
1670
|
continue;
|
|
1672
1671
|
}
|
|
1673
1672
|
// Internal reference — convert.
|
|
@@ -1692,7 +1691,7 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1692
1691
|
uncorroboratedKept++;
|
|
1693
1692
|
findings.add("convention", `c4_external_systems: "${extId}"${declaredBy !== "" ? ` (declared by ${declaredBy})` : ""} ` +
|
|
1694
1693
|
`declared_id matches internal container "${containerRes.containerId}" but the display name does not corroborate — ` +
|
|
1695
|
-
`no referent asserted; align the entry id or name to bind (M-ADR 0189 §4.2
|
|
1694
|
+
`no referent asserted; align the entry id or name to bind (M-ADR 0189 §4.2)`);
|
|
1696
1695
|
keptExts.push(ext);
|
|
1697
1696
|
continue;
|
|
1698
1697
|
}
|
|
@@ -1701,7 +1700,7 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1701
1700
|
// (already marked as an outcome above)
|
|
1702
1701
|
findings.add("coverage", `c4_external_systems: "${extId}"${declaredBy !== "" ? ` (declared by ${declaredBy})` : ""} ` +
|
|
1703
1702
|
`matches internal container "${containerRes.containerId}" but the label declares uncertainty — ` +
|
|
1704
|
-
`held, not asserted; resolve the uncertainty to bind (M-ADR 0189 §4.4
|
|
1703
|
+
`held, not asserted; resolve the uncertainty to bind (M-ADR 0189 §4.4)`);
|
|
1705
1704
|
keptExts.push(ext);
|
|
1706
1705
|
continue;
|
|
1707
1706
|
}
|
|
@@ -1709,17 +1708,17 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1709
1708
|
ambiguousHolds++;
|
|
1710
1709
|
findings.add("coverage", `c4_external_systems: "${extId}"${declaredBy !== "" ? ` (declared by ${declaredBy})` : ""} ` +
|
|
1711
1710
|
`name-matches ${containerRes.candidates.length} internal containers [${containerRes.candidates.join(", ")}] — ` +
|
|
1712
|
-
`ambiguous tier contradiction, no referent asserted, row kept (M-ADR 0189 §4.4
|
|
1711
|
+
`ambiguous tier contradiction, no referent asserted, row kept (M-ADR 0189 §4.4)`);
|
|
1713
1712
|
}
|
|
1714
1713
|
else {
|
|
1715
|
-
//
|
|
1714
|
+
// A bound candidate CONVERTS — its edges rewrite onto
|
|
1716
1715
|
// container_dependency where the from-endpoint is known. Only a
|
|
1717
1716
|
// candidate with unconvertible edges is kept, with the
|
|
1718
1717
|
// contradiction finding stating exactly what blocks it. No edge
|
|
1719
1718
|
// is ever destroyed to make a build quieter.
|
|
1720
1719
|
containerTargetByExtId.set(extId, containerRes.containerId);
|
|
1721
1720
|
const bucket = edgesByExtId.get(extId);
|
|
1722
|
-
//
|
|
1721
|
+
// A stuck edge whose from-SYSTEM differs from
|
|
1723
1722
|
// the target container's owning system is a correct C4 L1 edge —
|
|
1724
1723
|
// it rewrites onto system_system_dependency (from-system → owning
|
|
1725
1724
|
// system). Only a stuck edge WITHIN the owning system truly blocks
|
|
@@ -1736,13 +1735,13 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1736
1735
|
tierContradictions++;
|
|
1737
1736
|
findings.add("coverage", `c4_external_systems: "${extId}"${declaredBy !== "" ? ` (declared by ${declaredBy})` : ""} ` +
|
|
1738
1737
|
`resolves to ${containerRes.kind === "own" ? "its declarer's own" : "an"} internal container "${containerRes.containerId}" — ` +
|
|
1739
|
-
`tier contradiction, row kept: ${trulyStuck} same-system dependency edge(s) have no member-resolved from-container and would be L1 self-edges (M-ADR 0189 §4.4
|
|
1738
|
+
`tier contradiction, row kept: ${trulyStuck} same-system dependency edge(s) have no member-resolved from-container and would be L1 self-edges (M-ADR 0189 §4.4)`);
|
|
1740
1739
|
}
|
|
1741
1740
|
}
|
|
1742
1741
|
keptExts.push(ext);
|
|
1743
1742
|
}
|
|
1744
1743
|
// Rewrite dependency edges whose external endpoint converted — to a
|
|
1745
|
-
// system (§4.4) or, one tier down, to a container
|
|
1744
|
+
// system (§4.4) or, one tier down, to a container.
|
|
1746
1745
|
const keptDeps = [];
|
|
1747
1746
|
const newEdges = new Map();
|
|
1748
1747
|
const newContainerEdges = new Map();
|
|
@@ -1753,7 +1752,7 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1753
1752
|
if (containerTarget !== undefined) {
|
|
1754
1753
|
const fromContainer = String(dep["from_container_id"] ?? "");
|
|
1755
1754
|
if (fromContainer === "") {
|
|
1756
|
-
//
|
|
1755
|
+
// No member-resolved from-container. Across systems this is a
|
|
1757
1756
|
// correct C4 L1 edge — from-system → the container's owning system.
|
|
1758
1757
|
// Within the owning system it would be an L1 self-edge: kept, and
|
|
1759
1758
|
// its candidate row was kept for it.
|
|
@@ -1782,7 +1781,7 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1782
1781
|
}
|
|
1783
1782
|
if (fromContainer === containerTarget) {
|
|
1784
1783
|
findings.add("coverage", `container_dependency: refused self-edge ${fromContainer} → ${containerTarget} ` +
|
|
1785
|
-
`(external declaration resolved to the declaring container itself; M-ADR 0189 §4.4
|
|
1784
|
+
`(external declaration resolved to the declaring container itself; M-ADR 0189 §4.4)`);
|
|
1786
1785
|
continue;
|
|
1787
1786
|
}
|
|
1788
1787
|
const cid = `${fromContainer}__${containerTarget}`;
|
|
@@ -1829,13 +1828,13 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1829
1828
|
}
|
|
1830
1829
|
edgesRewritten++;
|
|
1831
1830
|
}
|
|
1832
|
-
// §4.6
|
|
1831
|
+
// §4.6: exemptions vs outcomes, then the coverage predicate.
|
|
1833
1832
|
// An exemption on a CONVERTED candidate contradicts the adjudication —
|
|
1834
1833
|
// reported and dropped (it would also dangle). A kept candidate with no
|
|
1835
|
-
// outcome and no exemption is
|
|
1834
|
+
// outcome and no exemption is a silent bucket: reported
|
|
1836
1835
|
// unverified, one finding per candidate, retired by declared identity
|
|
1837
1836
|
// or by an asserted exemption.
|
|
1838
|
-
//
|
|
1837
|
+
// The builder docstring — "each row retires exactly one unverified
|
|
1839
1838
|
// finding, and nothing else" — is enforced here, not assumed. A kept
|
|
1840
1839
|
// exemption MUST retire exactly one unverified finding; one that retires
|
|
1841
1840
|
// nothing (its candidate converted, or already has an adjudication
|
|
@@ -1857,17 +1856,17 @@ export function adjudicateExternalSystems(rowsByCatalogue, findings) {
|
|
|
1857
1856
|
const containerDrop = containerDroppedByExtId.get(target);
|
|
1858
1857
|
if (containerDrop !== undefined) {
|
|
1859
1858
|
findings.add("convention", `external_system_exemption: "${target}" is asserted genuinely external but adjudication resolved it to ` +
|
|
1860
|
-
`internal container "${containerDrop}" — contradiction; exemption dropped (M-ADR 0189 §4.6
|
|
1859
|
+
`internal container "${containerDrop}" — contradiction; exemption dropped (M-ADR 0189 §4.6)`);
|
|
1861
1860
|
continue;
|
|
1862
1861
|
}
|
|
1863
1862
|
const outcome = outcomeByExtId.get(target);
|
|
1864
1863
|
if (outcome !== undefined) {
|
|
1865
1864
|
findings.add("convention", `external_system_exemption: "${target}" retires nothing — the candidate already has an adjudication ` +
|
|
1866
|
-
`outcome (${outcome}); exemption dropped (M-ADR 0189 §4.6
|
|
1865
|
+
`outcome (${outcome}); exemption dropped (M-ADR 0189 §4.6)`);
|
|
1867
1866
|
continue;
|
|
1868
1867
|
}
|
|
1869
1868
|
if (!keptExtIds.has(target)) {
|
|
1870
|
-
findings.add("convention", `external_system_exemption: "${target}" names no kept external-system candidate — exemption dropped (M-ADR 0189 §4.6
|
|
1869
|
+
findings.add("convention", `external_system_exemption: "${target}" names no kept external-system candidate — exemption dropped (M-ADR 0189 §4.6)`);
|
|
1871
1870
|
continue;
|
|
1872
1871
|
}
|
|
1873
1872
|
keptExemptions.push(ex);
|
|
@@ -2221,7 +2220,7 @@ async function fileExists(absPath) {
|
|
|
2221
2220
|
*
|
|
2222
2221
|
* ASYNC shared-stream dependencies (M-ADR 0192) — a dependency whose
|
|
2223
2222
|
* `contract_type` is in the async set (`event`/`event-stream`/`stream`) — have
|
|
2224
|
-
* no single realiser service and carry an empty `target_service_id`. The
|
|
2223
|
+
* no single realiser service and carry an empty `target_service_id`. The
|
|
2225
2224
|
* synchronous realiser-join does not apply to them: instead they resolve via
|
|
2226
2225
|
* the capability leg (`target_capability_id` against any `capability_service`
|
|
2227
2226
|
* row for that capability) and emit the (consuming-product, platform-capability)
|
|
@@ -2309,7 +2308,7 @@ export function deriveCrossSddPlatformCapability(productPlatformDeps, capability
|
|
|
2309
2308
|
if (consumingProductId === "")
|
|
2310
2309
|
continue;
|
|
2311
2310
|
// M-ADR 0192: an async shared-stream dependency has no realiser service.
|
|
2312
|
-
// The
|
|
2311
|
+
// The pair-join cannot apply — resolve via the capability leg and emit
|
|
2313
2312
|
// the (consuming-product, platform-capability) edge with an empty service.
|
|
2314
2313
|
if (isAsyncContractType(contractType)) {
|
|
2315
2314
|
if (targetCapabilityId === "")
|
|
@@ -2351,7 +2350,7 @@ export function deriveCrossSddPlatformCapability(productPlatformDeps, capability
|
|
|
2351
2350
|
findings.add("orphan", `cross_sdd_platform_capability: ${consumingSddId}/${consumingProductId} declares target_service_id="${targetServiceId}" but no capability_service row resolves it ecosystem-wide`);
|
|
2352
2351
|
continue;
|
|
2353
2352
|
}
|
|
2354
|
-
//
|
|
2353
|
+
// Validate the declared PAIR, not each column alone. Both columns
|
|
2355
2354
|
// resolving independently while no capability_service row binds them
|
|
2356
2355
|
// is a false pairing accepted in silence — the evidence table for the
|
|
2357
2356
|
// pair exists and was never consulted.
|
|
@@ -2364,7 +2363,7 @@ export function deriveCrossSddPlatformCapability(productPlatformDeps, capability
|
|
|
2364
2363
|
.join(", ");
|
|
2365
2364
|
findings.add("divergence", `product_platform_dependencies: ${consumingSddId}/${consumingProductId} declares the pair ` +
|
|
2366
2365
|
`(target_capability_id="${declaredCapability}", target_service_id="${targetServiceId}") but no ` +
|
|
2367
|
-
`capability_service row binds them — the service resolves to [${actual}]
|
|
2366
|
+
`capability_service row binds them — the service resolves to [${actual}]`);
|
|
2368
2367
|
}
|
|
2369
2368
|
}
|
|
2370
2369
|
for (const match of matches) {
|