FAILURE MAP
← Case archive

FA-10256 / Observability / Open access

Metric series identity: Different instruments collide by omitting the metric name · case 01

Different instruments collide by omitting the metric name.

Verified by executionVariant 1 · 6 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The implementation substitutes return (None, for return (name,, so different instruments collide by omitting the metric name.

VERIFIED REPAIR

Include the full metric name.

Unsuccessful approach: The attempted repair substitutes return ('metric',. Fixture 1 still yields ('metric', (('a', '2'), ('z', '1')), 'count', 'counter') instead of ('requests', (('a', '2'), ('z', '1')), 'count', 'counter').

Case contract

A series identity includes metric name, sorted label key-value pairs excluding configured dropped keys, measurement unit, and instrument kind. Dropping values never drops other equal-valued labels.

Why this case matters

An offline model of metric series identity, suitable for testing build and release tooling without external services.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(name, labels, dropped, unit, kind):
    return (None, tuple(sorted((k,v) for k,v in labels.items() if k not in dropped)), unit, kind)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve('requests', {'z': '1', 'a': '2'}, [], 'count', 'counter'), ('requests', (('a', '2'), ('z', '1')), 'count', 'counter'))
check('fixture 2', solve('requests', {'a': '2', 'z': '1'}, [], 'count', 'counter'), ('requests', (('a', '2'), ('z', '1')), 'count', 'counter'))
check('fixture 3', solve('requests', {'a': '2', 'z': '1'}, ['z'], 'count', 'counter'), ('requests', (('a', '2'),), 'count', 'counter'))
check('fixture 4', solve('requests', {'a': 'same', 'b': 'same'}, ['a'], 'count', 'counter'), ('requests', (('b', 'same'),), 'count', 'counter'))
check('fixture 5', solve('latency', {}, [], 'seconds', 'histogram'), ('latency', (), 'seconds', 'histogram'))
check('fixture 6', solve('latency', {}, [], 'milliseconds', 'gauge'), ('latency', (), 'milliseconds', 'gauge'))
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
fixture 1[None, [['a', '2'], ['z', '1']], 'count', 'counter']['requests', [['a', '2'], ['z', '1']], 'count', 'counter']Failed
fixture 2[None, [['a', '2'], ['z', '1']], 'count', 'counter']['requests', [['a', '2'], ['z', '1']], 'count', 'counter']Failed
fixture 3[None, [['a', '2']], 'count', 'counter']['requests', [['a', '2']], 'count', 'counter']Failed
fixture 4[None, [['b', 'same']], 'count', 'counter']['requests', [['b', 'same']], 'count', 'counter']Failed
fixture 5[None, [], 'seconds', 'histogram']['latency', [], 'seconds', 'histogram']Failed
fixture 6[None, [], 'milliseconds', 'gauge']['latency', [], 'milliseconds', 'gauge']Failed

SHA-256 / 24a816ee21d7f6e2a7fba6376dde5bc7b2173511f21d3eb1c9d89d8eb080c661

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(name, labels, dropped, unit, kind):
    return ('metric', tuple(sorted((k,v) for k,v in labels.items() if k not in dropped)), unit, kind)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve('requests', {'z': '1', 'a': '2'}, [], 'count', 'counter'), ('requests', (('a', '2'), ('z', '1')), 'count', 'counter'))
check('fixture 2', solve('requests', {'a': '2', 'z': '1'}, [], 'count', 'counter'), ('requests', (('a', '2'), ('z', '1')), 'count', 'counter'))
check('fixture 3', solve('requests', {'a': '2', 'z': '1'}, ['z'], 'count', 'counter'), ('requests', (('a', '2'),), 'count', 'counter'))
check('fixture 4', solve('requests', {'a': 'same', 'b': 'same'}, ['a'], 'count', 'counter'), ('requests', (('b', 'same'),), 'count', 'counter'))
check('fixture 5', solve('latency', {}, [], 'seconds', 'histogram'), ('latency', (), 'seconds', 'histogram'))
check('fixture 6', solve('latency', {}, [], 'milliseconds', 'gauge'), ('latency', (), 'milliseconds', 'gauge'))
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
fixture 1['metric', [['a', '2'], ['z', '1']], 'count', 'counter']['requests', [['a', '2'], ['z', '1']], 'count', 'counter']Failed
fixture 2['metric', [['a', '2'], ['z', '1']], 'count', 'counter']['requests', [['a', '2'], ['z', '1']], 'count', 'counter']Failed
fixture 3['metric', [['a', '2']], 'count', 'counter']['requests', [['a', '2']], 'count', 'counter']Failed
fixture 4['metric', [['b', 'same']], 'count', 'counter']['requests', [['b', 'same']], 'count', 'counter']Failed
fixture 5['metric', [], 'seconds', 'histogram']['latency', [], 'seconds', 'histogram']Failed
fixture 6['metric', [], 'milliseconds', 'gauge']['latency', [], 'milliseconds', 'gauge']Failed

SHA-256 / 5ab981fbb0b15c1ef4e162dbc8a3750e66164daff4cb803a393394b00f0639fb

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(name, labels, dropped, unit, kind):
    return (name, tuple(sorted((k,v) for k,v in labels.items() if k not in dropped)), unit, kind)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve('requests', {'z': '1', 'a': '2'}, [], 'count', 'counter'), ('requests', (('a', '2'), ('z', '1')), 'count', 'counter'))
check('fixture 2', solve('requests', {'a': '2', 'z': '1'}, [], 'count', 'counter'), ('requests', (('a', '2'), ('z', '1')), 'count', 'counter'))
check('fixture 3', solve('requests', {'a': '2', 'z': '1'}, ['z'], 'count', 'counter'), ('requests', (('a', '2'),), 'count', 'counter'))
check('fixture 4', solve('requests', {'a': 'same', 'b': 'same'}, ['a'], 'count', 'counter'), ('requests', (('b', 'same'),), 'count', 'counter'))
check('fixture 5', solve('latency', {}, [], 'seconds', 'histogram'), ('latency', (), 'seconds', 'histogram'))
check('fixture 6', solve('latency', {}, [], 'milliseconds', 'gauge'), ('latency', (), 'milliseconds', 'gauge'))
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
fixture 1['requests', [['a', '2'], ['z', '1']], 'count', 'counter']['requests', [['a', '2'], ['z', '1']], 'count', 'counter']Passed
fixture 2['requests', [['a', '2'], ['z', '1']], 'count', 'counter']['requests', [['a', '2'], ['z', '1']], 'count', 'counter']Passed
fixture 3['requests', [['a', '2']], 'count', 'counter']['requests', [['a', '2']], 'count', 'counter']Passed
fixture 4['requests', [['b', 'same']], 'count', 'counter']['requests', [['b', 'same']], 'count', 'counter']Passed
fixture 5['latency', [], 'seconds', 'histogram']['latency', [], 'seconds', 'histogram']Passed
fixture 6['latency', [], 'milliseconds', 'gauge']['latency', [], 'milliseconds', 'gauge']Passed

SHA-256 / 9e2ad6d4ea502456262bee663f6abc3f165cc50c3dc77f1f1d028f1f461a694b

Verification & scope

This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:38:37.363419+00:00.

Case digest / 6a86caf12d30bc60980454e934a6aa74f4b2ca544974e3ca2ef0573b9f8afff1