Task · SKT-0010.16

Refresh the k3d metric corpus from the corrected capture, with a lab-artefact filter

Description

Scoped OUT of SKT-0013.07 deliberately, and recorded here so the evidence is not lost. That task’s acceptance is about LOG evidence, and it promoted only the log entries; the metric side of the same capture carries 50 family names the committed corpus does not, which is a refresh rather than a bug fix.

The 2026-08-27 capture (both Alloy permutations, corrected receiver, 107 metric families each) holds these beyond the committed corpus:

One correction from that capture is ALREADY applied, because leaving a disproved entry in place was not defensible: storage_operation_duration_seconds carried classic: true with empty bucket bounds purely from the suffix inference, and is now recorded as storage_operation_duration_seconds_count with no histogram evidence and volume_unmount added to its observed operation_name set. That correction removed a name mismatch which had been hiding a real finding — synth omits the node label the family carries — which is now visible and belongs to SKT-0010.07.

Refresh through lab-matrix promote -merge, which runs CanonicalMerge and so never removes established evidence. A refresh that must REMOVE something is a deliberate correction with its own reasoning, not a merge.

Acceptance Criteria

Definition of Done

Implementation Plan

Inspect the lab-matrix capture and promotion contract; capture both corrected-receiver permutations in root-exclusive k3d; add a declarative lab-own-family exclusion rule; record an explicit scrape-meta verdict; promote cumulatively with CanonicalMerge; then measure and triage every finding delta.

Implementation Notes

Root start. Docker, k3d, Helm and kubectl remain exclusive to root; no Grafana Cloud write authority is used.

Root-exclusive k3d matrix run skt001016a captured both selected Alloy permutations: alloy-default and alloy-otlp-podlogs each observed 107 metric families and 3 log families over 385s; captured=2, partial=0, empty=0, failed=0, teardown confirmed. The two metric name sets were identical.

Promotion used the tested rule: select all metrics, route coredns_* to the separate k8s-addons area, exclude the lab-owned synthkit_lab_* prefix, exclude Prometheus scrape metadata scrape_* and exact up, then CanonicalMerge. The scrape verdict is explicit: these families describe collection health/volume rather than target telemetry; exact up avoids excluding unrelated names such as uptime_seconds. The k8s document grew from 32 to 75 families; prober_probe_duration_seconds retained 11 captured bounds; go_gc_duration_seconds remained a summary and its _sum/_count remained independent.

Finding delta used the identical pre-refresh synth inventory. Coverage moved: extra_metric 411->437 (+26), instrument_mismatch 103->119 (+16), unexpected_label_key 89->103 (+14). Contradictions moved: unexpected_label_key 65->80 (+15), instrument_mismatch 0->1, label_value 4->2 (-2). The two removed value contradictions were kubelet operation_type sets becoming correctly open-ended under the existing promotion rule, not emitter disappearance. New contradictions triaged: go_gc_duration_seconds is recorded as gauge on the synth side despite captured summary/quantile evidence, requiring a focused Kind-propagation investigation outside this task. The 15 key contradictions cover eight generic Go runtime families, six generic process families and rest_client_requests_total; each is a cross-producer union where the comparator identifies metrics by global family name while the capture observes one producer shape. They are comparator scoping findings, not authority to rewrite emitters in this refresh.

Final verification: promotion/filter tests, the corrected two-permutation k3d capture, cumulative corpus inspection and measured fidelity report establish every criterion. The final report is contradiction instrument_mismatch=1, label_value=2, unexpected_label_key=80; coverage extra_metric=418, instrument_mismatch=119, unexpected_label_key=122; extra_log=0. make blueprint-schema regenerated cleanly; complete 28-blueprint dry-run inventory, make e2e at 650/650 and make gate passed.

Exact implementation SHA 1729e2068321fc53b6d973a6fc981fc1066c4c42 passed GitHub ci run 33186760476, including signal-fidelity, go, docker, hygiene, helm, ui, secret-scan, e2e and ci-success.

Final Summary

Refreshed the k3d corpus cumulatively from two corrected-receiver captures with tested lab-own and scrape-meta exclusions, then measured and triaged every finding delta; full gates passed.

View the source file on GitHub