Task · SKT-0020.05

Make per-substrate divergence first-class in the comparator

Description

Once captures exist from more than two substrates, the comparator has to answer a question it cannot answer today: is a difference between synth and reality a synthkit defect, or a legitimate difference between clouds?

The corpus already tags entries with a substrate — eks, k3s — and the report already prints it. What is missing is the semantics. A shape verified only on EKS is not evidence about AKS, but the comparator currently treats an absent AKS capture the same way it treats a matching one: silently. Once AKS and GKE land, a synthkit emission that matches EKS and contradicts GKE must produce a finding that names both, rather than one verdict that depends on which capture happened to be compared.

This is the seam that makes multi-cloud capture worth doing, and it must land before the per-cloud reconciliation work, or each new substrate will look like a wall of contradictions against a comparator that has no way to express “these clouds genuinely differ”.

Depends on at least one non-EKS managed capture existing, so it can be built against real divergence rather than an imagined shape.

Acceptance Criteria

Definition of Done

Implementation Plan

2026-08-31 Lane E: implement substrate-keyed comparator semantics, preserve absent evidence as a gap, ingest the short clean GCP capture with exact duration, and refuse the mixed-provenance capture pending SKT-0042.

Implementation Notes

2026-08-31 verification: comparator findings remain document- and substrate-scoped, distinguish matching from absent evidence, and require every relevant document for a substrate to contain the signal before calling that substrate a match. The short GCP capture is retained as immutable provenance only; the ambiguous mixed AWS/Azure artifact was not ingested or relabelled and is tracked by SKT-0042. Final gates passed.

2026-09-06 per-AC evidence map: AC1 TestCompareCorpusDoesNotUnionSubstratesAndUsesArea; AC2-3 TestCompareCorpusNamesMatchingAndAbsentSubstrateEvidence and TestCompareCorpusRequiresEverySubstrateDocumentToContainSignalBeforeMatching; AC4 TestWriteFindingsReportNamesCrossSubstrateMatchAndAbsentEvidence plus the new grouped tuple-preservation regression; AC5 docs/reality-corpus.md Cross-substrate findings. All ran in the current just check. Status and checked criteria remain Done; grouping preserves the existing substrate contract.

Final Summary

2026-08-31: Implemented first-class substrate divergence and explicit absent-evidence reporting, documented the contract, and retained immutable GCP provenance without promoting a short capture into comparator evidence.

View the source file on GitHub