Systems and subsystems

The routing log and explanation JSON

For every file the runner writes one JSON record: every detector's score, status, sentence and features, the fusion inputs and arithmetic, the routing log, and the version of everything that produced it. It is the explainability deliverable and the frontend's data.

In plain words

The brief asks for explainable results: which techniques said what, and why the file got its number. The record answers that in plain sentences a person can check, one per detector, plus a routing log that says what each rule decided. The eight worked examples on How it decides are these records, printed.

What goes in and comes out

In: the outputs of analyze_clip for one file. Out: results/<basename>.json, and the same object as the API's response.

Where it lives

analyze_clip, detector_entry, fusion_block, routing_log and fusion_line in pipeline.py, lines 537–750.

The record's shape

Status

Built; contract version v0. The frontend reads a static dump of these records for the test set under the shipped rule, and the live API returns the same object.

Numbers

None of its own; the record carries the detectors' numbers.

Known limits

The verdict label ignores --flip and uses the pre-map probability; the ranking the metric scores is probability_synthetic. The frontend contract's line reference into the gate module is stale.

Tests that pin it

tests/test_pipeline.py: the response shape and required version keys, the routing-log order and wording, the fusion line lists every weighted term, the verdict rule.

Sources

The frontend contract; the worked examples; the runner report.