Companion data for The Detector That Said Yes to Everything.
The post argues that a hand-written evaluation suite can only check whether a prompt matches the picture its author had in mind, and that the way out is to label what the system actually did, after the fact, blind. It reports a set of numbers from doing that. These files are here so you can check them, and so you can try the labelling task yourself.
Three files, three different jobs. Read the caveats before you use any of them as a benchmark.
conflict-labels.csv— 2,772 blind labels, no textconflict-pairs-recoded.jsonl— 192 recoded pairs with textteaching-set.jsonl— 60 authored pairs across ten failure modes
1. conflict-labels.csv: every number in the post, no text
2,772 rows, one per scored decision pair. No decision text at all, which is why this file covers the whole corpus rather than a scoped subset.
| column | meaning |
|---|---|
pair_id |
stable, non-reversible identifier shared with file 2 when in_recoded_subset is t |
gold_label |
blind four-way label: contradiction, supersession, related_not_contradicting, unrelated |
detector_relationship |
what the shipped detector said about this pair |
topic_similarity, significance, outcome_divergence, confidence_weight, temporal_decay |
the scorer’s features |
decision_type_a, decision_type_b, agent_a, agent_b |
roles and decision categories |
same_project, same_agent, days_apart |
structural metadata |
severity, category, scoring_method |
detector metadata |
len_a, len_b |
decision text length in characters |
in_recoded_subset |
whether this pair is one of the 192 published with text in file 2 |
What you can reproduce from this file alone:
- The base rate. 93 contradictions in 2,772 pairs, 3.35%.
- The central finding. The detector said
contradictionfor 2,711 of 2,772 pairs, 97.8%, of which 92 were right. Precision 3.39%, recall 98.9%. - Every feature AUC. Rank AUC with midrank ties, Hanley–McNeil intervals:
temporal_decay0.728,topic_similarity0.616,significance0.601,confidence_weight0.584,outcome_divergence0.434. Two of those are worth a second look.outcome_divergenceis inverted, with an interval that excludes 0.5, and the strongest feature in the scorer is a staleness weight. - The precision arithmetic at a 3.35% base rate, and why F1 picks the wrong judge when the majority class is 96.65% of the data.
Snapshot 2026-08-12. Feature columns are mutable in the source system, and 39 of these rows were rescored after the labelling run. Treat any AUC you compute here as a property of this snapshot, not of the pipeline in general.
2. conflict-pairs-recoded.jsonl: real pairs you can judge
192 pairs with their decision text, so you can run your own judge and compare.
Fields: pair_id, gold_label, decision_type_a, decision_type_b,
decision_a, decision_b.
This is a scoped subset and its base rate is not the corpus base rate. 14 of 192 pairs are contradictions, 7.3%, against 3.35% for the full corpus. A judge evaluated here will look better than the same judge in production, because the positives are more than twice as dense. If you quote a precision number from this file, quote the 7.3% alongside it.
Label mix: 14 contradiction, 59 supersession, 119 related_not_contradicting.
Identifying tokens are recoded. Ticket ids, paths, commit hashes, pull
request numbers, environment variables, branch names, person names, and named
stack products use stable placeholders (TICKET-X001, SHAX004,
pkg/xfile003.ext, Xname007, xterm002, xvendor001). The same source token
maps to the same placeholder, which preserves parameter-binding contradictions
without releasing the original token.
3. teaching-set.jsonl: 60 authored pairs
Synthetic, hand-designed, no real data. Fields add class and why.
This one exists because the interesting thing about the task is not that it is hard for models. It is that it is hard for people, and in a specific direction: readers reliably call a supersession a contradiction. The set is deliberately enriched, with 12 contradiction, 18 supersession, 26 related_not_contradicting and 4 unrelated, and organised by the failure modes actually measured in production:
| class | what it tests |
|---|---|
binding_collision |
same named parameter, two values. A real contradiction |
genuine_reversal |
a live position actually reversed |
explicit_supersession |
the later decision says it replaces the earlier |
silent_supersession |
it replaces without saying so. Hard |
layer_confusion |
both say “access control”; one is route-level, one row-level |
diagnosis_then_repair |
one finds a defect, one fixes it |
measurement_vs_shipping |
one measures a rate, one ships a change |
surface_negation |
“no new vulnerabilities” vs “known vulnerabilities exist”. Both true |
scope_disjoint |
same vocabulary, different subsystem |
unrelated_high_similarity |
dense shared jargon, no shared question |
Try silent_supersession and surface_negation before reading the labels.
What is not here, and why
The decision text for the full 2,772 pairs. The corpus is an engineering diary of real systems, most of it not mine to publish. File 1 carries the statistics precisely because dropping the text is what made full coverage safe.
The substitution map. It is a decoder ring. Publishing it would reverse the recoding in file 2.
Anything identifying the systems involved. Ticket ids, hashes, paths,
branch names, hostnames, resource ids, people, and named stack products are
recoded. Every release runs scripts/check_conflict_detection_data.rb, which
verifies the CSV/JSONL join and exits non-zero on raw identifier patterns or the
named product denylist. Agent identifiers are the exception: file 1’s agent_a
and agent_b columns carry the real tool names, published deliberately, because
the post’s argument is about which agents disagree. If you find something that
should not be here, open an issue on
ashita-ai/akashi.
Provenance and license
Labels are LLM-generated, blind: each rater saw the two decision texts and structural metadata, never the detector’s verdict. An independent 200-pair re-rate agrees at Cohen’s kappa 0.766 for contradiction-versus-rest, with a 5.7% false-flag rate on non-contradictions. These labels are a noisy reference, not ground truth. Every precision figure derived from them inherits that noise.
Released under CC BY 4.0.