Description
The genuine contradictions the 2026-08-27 report surfaced, separated from the noise. Small, concrete, and each is an emitter defect rather than a comparator one.
kubelet_pod_start_duration_seconds — synth emits the default Prometheus bucket set [0.005 … 10]; the real kubelet on the k3d capture emits [0.5, 1, 2, 3, 4, 5, 6, 8, 10, 20, 30, 45, 60, 120, 180, 240, 300, 360, 480, 600, 900, 1200, 1800, 2700, 3600]. A dashboard computing a pod-start latency quantile against synthkit gets a different answer shape than against a real cluster, which is exactly the defect class this audit exists to catch.
coredns_proxy_request_duration_seconds — synth stops at 2.048; reality continues to 4.096 and 8.192. Same bucket family otherwise, so this is a truncation rather than a different scheme.
kubelet_pod_worker_duration_seconds and the other k3d bucket-bound PENDINGs in the same report — establish whether they diverge too rather than fixing only the two the report ranked as contradictions.
The realism direction is one-way: the synth is corrected to the capture, never the reverse. Where the corrected bounds are not already recorded in signals/k8s.md or signals/k8s-addons.md, the captured set is recorded there with its provenance and date. Those two files are single-owner, so the correction text is handed to the wiring pass rather than edited in a lane.
Acceptance Criteria
- #1 kubelet_pod_start_duration_seconds emits the captured kubelet bucket set
- #2 coredns_proxy_request_duration_seconds emits the full captured bucket set including 4.096 and 8.192
- #3 Every other histogram family the report flags for bucket bounds is checked, and either corrected or recorded as already matching
- #4 The captured bucket sets are recorded in the relevant signals/ area file with provenance and date
- #5 make signal-fidelity reports no remaining bucket_bound_mismatch contradiction
Definition of Done
- #1 make gate (build vet test race rw-proto-check spdx-check forbidden-words)
- #2 make blueprint-schema (only if a blueprint field or construct/workload config struct changed)
- #3 DRY_RUN=true go run ./cmd/synthkit -once -dump — inventory diffed against signals/
Implementation Notes
Lane L3 (2026-08-27). Both real bucket-bound divergences corrected and every other histogram family with corpus evidence checked.
CORRECTED:
- kubelet_pod_start_duration_seconds (internal/construct/k8scluster/kubelet.go:32-38 new podStartHistoBounds, wired :195). Was the Prometheus default set [0.005..10]; now the kubelet’s real 25-boundary set [0.5,1,2,3,4,5,6,8,10,20,30,45,60,120,180,240,300,360,480,600,900,1200,1800,2700,3600]. This resolves the long-standing SK-73 known divergence.
- coredns_proxy_request_duration_seconds (internal/construct/coredns/coredns.go:148-154). Was truncated at 2.048; now continues to 4.096, 8.192 (16 values).
CHECKED AND ALREADY MATCHING (a confirmed-correct family is a useful result, not a non-result): kubelet_pleg_relist_duration_seconds, kubelet_pleg_relist_interval_seconds (this also upgrades its signals entry from v:assumed to v:ok, resolving the other half of SK-73), kubelet_cgroup_manager_duration_seconds, kubelet_pod_worker_duration_seconds (the family the tracker specifically asked to widen to — NOT divergent), coredns_dns_request_duration_seconds, coredns_dns_request_size_bytes, coredns_dns_response_size_bytes, coredns_health_request_duration_seconds, coredns_kubernetes_dns_programming_duration_seconds.
NO CORPUS EVIDENCE: storage_operation_duration_seconds (corpus bucket_bounds empty; synth emits only the _count sibling, consistent), prober_probe_duration_seconds (absent from the k3d capture). reality-corpus/cw/*.json carries no histogram evidence at all — CloudWatch is five-stat, not bucketed.
signals/k8s.md and signals/k8s-addons.md updated by the wiring pass with the captured sets, provenance and date.
make signal-fidelity now reports zero bucket_bound_mismatch in either section (was 1 contradiction + 2 coverage-gap entries).
Final Summary
Both real bucket-bound divergences corrected, and every other histogram family with corpus evidence checked rather than only the two the report ranked as contradictions.
kubelet_pod_start_duration_seconds now emits the kubelet real 25-boundary set instead of the default Prometheus set, resolving the long-standing SK-73 divergence; a pod-start latency quantile computed against synthkit now has the same answer shape as against a real cluster. coredns_proxy_request_duration_seconds no longer truncates at 2.048 and continues through 4.096 and 8.192.
Nine further families were confirmed already matching — including kubelet_pod_worker_duration_seconds, which this task suspected — and kubelet_pleg_relist_interval_seconds moved from v: assumed to v: ok, closing the other half of SK-73. Two families carry no corpus bucket evidence and are recorded as such rather than guessed.
signals/k8s.md and signals/k8s-addons.md carry the captured sets with provenance and date. Verified: make signal-fidelity reports zero bucket_bound_mismatch in either section, down from one contradiction plus two coverage-gap entries; make gate green.