Task · SKT-0059

Scope signal identity by reviewed producer, and fail loud when no producer is comparable

Description

Every corpus promotion is blocked behind the same 27 unexempted contradictions, and reading the rows shows they are not one defect. The comparator identifies a signal by metric family name alone, so it folds unrelated producers that happen to share a name into one comparison. http_request_duration_seconds is emitted by synthkits LLM gateway with api_key_name/model/provider/stream and by a Grafana component in the AWS capture with handler/method; the union difference is reported as a contradiction, but neither side is wrong and neither can be corrected into the other. The same category error produces the target_info, http_server_active_requests, http_server_request_duration_seconds, up and scrape_duration_seconds rows. A second group, the workqueue and scheduler families, is a real job-shape difference: synthkit models a pod-scoped scrape carrying container/controller/endpoint/namespace/pod while the capture is node-scoped carrying node/source. A third group looks like genuine synth defects: the pg_stat_* families stamp env and grafana_kubernetes_monitoring_build_info stamps source where no observed producer carries them. Scoping by producer must therefore not become a general escape: a synth signal whose producer matches no reality producer has to stay visible, or the third group is silently hidden and the fidelity gate stops meaning anything. The reviewed producer identity already exists on every capture-v2 family route, so the evidence needed is present and no new capture is required. Preserved candidates for the four blocked promotions are retained under codex/scratch/wave-2026-09-10/.

Acceptance Criteria

Definition of Done

Implementation Plan

Test the frozen same-producer, different-producer, and no-comparable outcomes; preserve legacy evidence and all existing contradiction classes. Add a strict versioned count ratchet and separate report section. Measure the unchanged producer sets of every blocking family and compare each preserved or freshly projected candidate in scratch before corpus edits. Write the contract once, review, and integrate with exact residue if frozen identity cannot resolve a real contradiction.

Wave 2026-09-12: implement the frozen composite transport/job producer identity test-first on capture and synth paths; consume both identity labels; measure all six preserved candidates before and after; retain same-producer contradictions; update the producer-coverage ratchet; retire only the now-unreachable kubelet-job exemption; review, gate, commit, and push before dependent promotions.

Wave 2026-09-13: verify producer pairing and family ownership from source and immutable evidence; measure all six candidates before mutation; add fail-first contract and ratchet controls; resolve live-job privacy handling; retire only unreachable exemption; review, gate and commit forward before promotions.

Wave 2026-09-14: inspect the 178 previously uninspected unmatched claims from emitter source and captured producer evidence. Preserve the settled producer contract and the 25 previously reviewed macOS/database gaps; sharpen each remaining reason to name the evidence needed. Root alone updates the exact claim list after triage, without normalization or comparator weakening.

Implementation Notes

Producer-scoped contract implemented with same-producer comparisons unchanged, named producer_mismatch gaps, separate no_comparable_producer report and strict versioned count ratchet initially 6. Test-first fixtures and just check passed. CodeRabbit completed with two major findings; regression tests reproduced duplicate-name counting and duplicate JSON-key overwrite, both fixed and targeted tests green. AC5 remains unproven: unexempted contradictions before/after Rancher 25/25, AWS 27/27, Azure 64/64, GCP 21/21, control-plane 10/10. Candidate evaluations use actual projection, CanonicalMerge and comparator in scratch; no corpus evidence file changed. Recorded identity is promrw for both modeled and observed collision families; it is not a job identity. Frozen routes cannot distinguish those jobs. Resume with reviewed producer/shape attribution authority or evidence-backed same-producer model corrections; do not suppress findings or add exemptions.

Final source integration just check passed, including baseline fidelity with producer coverage observed=6 expected=6. Frozen-inventory raw counts before -> after: baseline contradictions 0 -> 0 and gaps 13995 -> 14013, new-kind 6; Rancher 25 -> 25 and 15604 -> 15623, new-kind 6; AWS 27 -> 27 and 14042 -> 14065, new-kind 7; Azure 64 -> 64 and 14127 -> 14171, new-kind 7; GCP 21 -> 21 and 14042 -> 14063, new-kind 6; preserved control-plane 10 -> 10 and 14016 -> 14034, new-kind 6. Literal candidate recipe reports are also retained; their grouped report rows are not raw finding totals. Protected pg_stat_* env and monitoring build-info source rows remain contradictions. Zero new exemptions. Safe dump was generated, but the partial metric-name catalogue comparison has parser/representation gaps and does not prove full label/envelope conformance; that DoD is not checked. Generation ran once without drift, although this task adds no generator input.

Wave 2026-09-12 stopped at the mandatory step-2 honesty gate. The composite transport/job mechanism and focused package tests passed, but the protected contradictions did not survive reprojection: pg_stat_* contradictions were 5 to 0 for each of the AWS and Azure candidates, and grafana_kubernetes_monitoring_build_info was 1 to 0 for each Rancher, AWS, Azure and GCP candidate. The findings became producer mismatches because synth emitted promrw/langsmith-postgres where reality carried PostgreSQL integration producers, and promrw/integrations/kubernetes/kubernetes_monitoring_telemetry where reality carried promrw/integrations/static. This falsifies the producer-alignment assumption in the wave goal and triggers its hard stop. No implementation or corpus document was committed; no candidate was promoted; no exemption or ratchet was changed; no lane or live read-back was started. Resume only after correcting the frozen producer-ownership evidence, then rerun step 2 and require these protected contradictions to remain before any dependent promotion or lane.

Correction: ee723e0 committed the composite mechanism, routing manifest and seven reprojected canonical documents after the prior report. The prior sentence saying no implementation or corpus document was committed is no longer true. The experiment is the retained committed base; this wave corrects forward. The old protected-family comparison assumptions are being re-derived from their actual emitting constructs.

Source re-derivation confirms the platform activity family and chart telemetry build-info have different producer jobs from their captured counterparts. Family capture marginals do not preserve transport/job pairings: multi-valued components now keep transport-only identity instead of inventing Cartesian pairs. Baseline unmatched claims remain 103; each is now triaged and an unknown family/producer pair fails even at unchanged count. Both identity labels remain consumed. The live-job vocabulary stays a privacy admission set rather than a family map. The obsolete kubelet-job exemption is retired because job is consumed into identity; exemptions added 0. Initial just check passed with observed=103 expected=103, disproving the goal note that the current default gate sees at most six. Candidate contradiction residue is still visible, not an AC5 pass.

Final ordered fallback retained203explicit unmatched claims after P3 reprojection. Source inspection confirms the macOS job is intentional and differs from Linux capture producers; dbo11y similarly differs from the plain PostgreSQL exporter in both route and job. No same-producer defect was established and no normalization or adjacent task is justified for those observations. A future independent matching-producer capture is the precise evidence boundary.

Wave 2026-09-14 source triage: all 178 previously uninspected claims dispositioned, 157 legitimate distinct-producer gaps and 21 Azure claims with ambiguous capture route/job pairing; no emitter defect established. All 203 signal/producer pairs remain, with 178 reasons sharpened to name the exact independent capture required. The 23 macOS and two database claims settled last wave were skipped without re-investigation. A generic Azure route is insufficient evidence that a different real pipeline was observed; the capture must preserve paired route and job attribution. No normalization, label-ignore widening, comparison weakening, exemption or new task was used.

All 203 exact pairs and expected_count 203 retained. The 178 new inspections: 157 legitimate different producers, 21 ambiguous Azure pairings, zero proven emitter defects. All 203 reasons sharpened, including 23 macOS and two database reasons reused from settled source conclusions without reinvestigation. No identity normalization, comparator weakening or exemption change. Evidence: codex/scratch/wave-2026-09-14/l3-final-dispositions.json and fallback-settled-25.json.

Final Summary

AC1-4 implemented and reviewed; AC5 remains open. Same-producer behavior is preserved rather than used to hide the still-red candidates. Initial visible unmatched-producer bound is 6.

Settled mechanism ce93918 and attributed-shape correction 9426333 are pushed. Both protected-family assumptions were re-derived from emitter ownership: they are different producers, not same-producer contradictions. Marginal transport/job sets no longer invent Cartesian pairs; both identity labels are consumed. Explicit unmatched claims reject same-count substitution as well as growth. Baseline103, cloud cumulative219, final required-promotion set203. All six evaluated scopes reached zero unexempted contradictions after sourced emitter corrections; no exemption added. trustedLiveJobValues remains a privacy vocabulary, not a family mapping table. Full gates passed and the named exemption became unreachable and was retired.

All 203 exact pairs and expected_count 203 retained. The 178 new inspections: 157 legitimate different producers, 21 ambiguous Azure pairings, zero proven emitter defects. All 203 reasons sharpened, including 23 macOS and two database reasons reused from settled source conclusions without reinvestigation. No identity normalization, comparator weakening or exemption change. Evidence: codex/scratch/wave-2026-09-14/l3-final-dispositions.json and fallback-settled-25.json.

References

View the source file on GitHub