#!/usr/bin/env python3
import json
import sys

# Read the actual pairs file
pairs_file = "C:/Users/decid/AppData/Local/Temp/claude/C--Users-decid-Documents-projects-liaison/29287739-71ae-4df9-a62d-b2c76b202b34/scratchpad/rca/slices/s1/q021.tsv"
roster_file = "C:/Users/decid/AppData/Local/Temp/claude/C--Users-decid-Documents-projects-liaison/29287739-71ae-4df9-a62d-b2c76b202b34/scratchpad/rca/slices/s1/r021.json"

with open(roster_file) as f:
    roster = json.load(f)

reqs = {req["id"]: req for req in roster}

pairs = []
with open(pairs_file) as f:
    for line in f:
        line = line.strip()
        if line:
            parts = line.split('\t')
            if len(parts) == 2:
                pairs.append((parts[0].strip(), parts[1].strip()))

# Comprehensive manual scoring
pair_scores = {
    ("REQ-PAIR-4", "REQ-PAIR-7"): 35,
    ("REQ-HAZARD-CONTROL-STAMP-LIFETIME", "REQ-HAZARD-VIEWER-STARVE-UNDER-CONTROLLER-BACKPRESSURE"): 50,
    ("REQ-DIGEST-CURSOR", "REQ-NOTIF-UPDATE-ROW-VERSION-RETIRE"): 12,
    ("REQ-HAZARD-LISTEN-ORPHAN", "REQ-HAZARD-RC-ATTACH-FAILFAST"): 42,
    ("REQ-HAZARD-LIVEHOST-BOOT-RACE", "REQ-WORKER-MINTED-NAME"): 15,
    ("REQ-SEAM-UPDATE", "REQ-UPDATE-FETCH-APPLY-FLAG"): 48,
    ("REQ-HAZARD-HOSTED-LIVENESS-RECONCILE", "REQ-PSYCHE-LEGACY-RESIDENT-SWEEP"): 38,
    ("REQ-HAZARD-RESUME-CUSTODY-ABA", "REQ-RESUME-REAP-PRIOR-HARNESS"): 55,
    ("REQ-BRAIN-RESUME-NO-CONTROL-STEAL", "REQ-SESSIONS-LOG-ENDPOINT-ATTRIBUTION"): 28,
    ("REQ-GOSSIP-ADAPTER-PROJECTS", "REQ-UPD-9"): 18,
    ("REQ-INST-10", "REQ-RC-WIN-PASTE"): 8,
    ("REQ-ACTIVITY-LINK-PUSH", "REQ-SHELL-ADAPTER-OWNED-DETACHED-SERVICE"): 25,
    ("REQ-INSTALL-13", "REQ-UPD-7"): 45,
    ("REQ-HAZARD-SOFT-CLEANUP", "REQ-HAZARD-EPHEMERAL-CLEANUP"): 62,
    ("REQ-HAZARD-LIVEHOST-BOOT-RACE", "REQ-PSYCHE-CONTEXT-FILE-INDIRECTION"): 22,
    ("REQ-ENDPOINT-LIST-MERGE-LOCAL", "REQ-HEAVY-UNIT-CLASSIFICATION"): 10,
    ("REQ-HAZARD-LIVEHOST-NONRESIDENT", "REQ-VIEWER-SKIP-TO-LIVE-ON-EVICT"): 32,
    ("REQ-DAEMON-6", "REQ-HAZARD-WMI-DAEMON-WINDOW"): 58,
    ("REQ-HAZARD-DRIVEN-BY-SELFHEAL", "REQ-SOFT-END-PRESERVES-LIVE-LISTENER"): 35,
    ("REQ-PRESENCE-LIVENESS-TRUTH", "REQ-PUMP-STAGE-TRUTH"): 42,
    ("REQ-LISTEN-SEED-CONSUME-AFTER-BIND", "REQ-NOTIF-DRAIN-ROW-VALIDITY"): 16,
    ("REQ-ATTACH-SEED-REQUEST-DOUBLE-SERVE", "REQ-STREAM-LIFETIME-CLASS"): 38,
    ("REQ-HAZARD-INBOX-NO-DOUBLE", "REQ-HAZARD-RESTART-IDEMPOTENT"): 44,
    ("REQ-HAZARD-PUMP-IPC-DEADLINE", "REQ-PUMP-PEER-ISOLATION"): 48,
    ("REQ-INST-9", "REQ-SUBNET-7"): 12,
    ("REQ-BROKER-OUTPUT-BEFORE-EXIT", "REQ-SUBNET-7"): 14,
    ("REQ-HAZARD-LIVEHOST-NONRESIDENT", "REQ-HAZARD-SHELL-STALE-ONLINE"): 38,
    ("REQ-HAZARD-WINDOWS-PID-RECYCLE", "REQ-SPAWN-COLLISION-GUARD-LIVE-DUP"): 52,
    ("REQ-API-ENDPOINT-INFO", "REQ-ENDPOINT-LIST-RENDER-POLISH"): 28,
    ("REQ-NOTIF-QUIET-DELIVERY", "REQ-NOTIF-SEAM-DISMISS"): 65,
    ("REQ-ARCH-3", "REQ-HAZARD-HANDOFF-ARGV-COMPAT"): 20,
    ("REQ-DAEMON-3", "REQ-HAZARD-STOP-RESPAWN-CONVOY"): 42,
    ("REQ-HAZARD-CONPTY-DSR", "REQ-HAZARD-EBUSY-RENAME"): 10,
    ("REQ-EP-6", "REQ-PICKER-5"): 18,
    ("REQ-HAZARD-CASCADE-WIPE-GUARD", "REQ-HAZARD-SINGLE-PATH-SOURCE"): 32,
    ("REQ-HAZARD-PSYCHE-RESIDENCY-EXPECTATION", "REQ-HAZARD-SESSION-PIN-WEDGE"): 45,
    ("REQ-START-3", "REQ-UPDATE-ONE-SHOT-FINISH"): 24,
    ("REQ-RESUME-UNBOUND-STAMP", "REQ-SESSION-ADAPTER-RECORDED"): 35,
    ("REQ-SEAM-UPDATE", "REQ-UPDATE-APPLY-RESTART-NOTICE"): 56,
    ("REQ-CONV-2", "REQ-SUBNET-8"): 15,
    ("REQ-SUBNET-8", "REQ-SUBNET-COUNT-ROUTABLE"): 68,
    ("REQ-HAZARD-MESH-BOOTSTRAP-TRAP", "REQ-HAZARD-REGISTRY-EPOCH-LEASE"): 42,
    ("REQ-HAZARD-CONTROLLER-LEASE", "REQ-HOSTING-AUTHORITY-CONTROLLABLE"): 55,
    ("REQ-ENDPOINT-LIST-NODE-IDENT", "REQ-PUBLIC-ERROR-SURFACES"): 8,
    ("REQ-HAZARD-VIEWER-STARVE-UNDER-CONTROLLER-BACKPRESSURE", "REQ-MSG-INJECT-LEG-DROP-VISIBLE"): 18,
    ("REQ-LIVE-AGENT-NO-INJECT-DELIVERY", "REQ-STREAM-INFOS-SERVER-FILTER"): 24,
    ("REQ-PAIR-NTP-MULTIHOME", "REQ-SUBNET-COUNT-ROUTABLE"): 22,
    ("REQ-UPD-2", "REQ-UPD-8"): 48,
    ("REQ-CONTROLLER-LEASE-IDENTITY", "REQ-NODE-IDENTITY"): 58,
    ("REQ-DRIVEN-BY-OWN-NODE-NORMALIZE", "REQ-REST-TERMINAL-NORMALIZE"): 38,
    ("REQ-CONN-BLACKHOLE-LIFECYCLE-HARNESS", "REQ-HOST-RUN-1"): 12,
    ("REQ-CLI-3", "REQ-PUMP-DIAL-FASTFAIL"): 10,
    ("REQ-HAZARD-RENDER-LIFECYCLE", "REQ-SERVE-OWNERSHIP-GENERATION"): 35,
    ("REQ-PICKER-ADAPTER-DESCRIPTION", "REQ-SEAM-CAPABILITY"): 22,
    ("REQ-HAZARD-DROP-FILE-SINGLE-WRITER", "REQ-HAZARD-DIRECT-WRITE-PRECEDENCE"): 62,
    ("REQ-HAZARD-MESH-BOOTSTRAP-TRAP", "REQ-PAIR-1"): 28,
    ("REQ-HAZARD-EPHEMERAL-CLEANUP", "REQ-HAZARD-TEARDOWN-DEADEND"): 52,
    ("REQ-DAEMON-STATUS-JSON-TRUTH", "REQ-HAZARD-REGISTRY-DIR-CREATE"): 12,
    ("REQ-BRAIN-RESUME-NO-CONTROL-STEAL", "REQ-HAZARD-LIVEHOST-BOOT-LIVENESS-GATE"): 44,
    ("REQ-INST-7", "REQ-SUBNET-7"): 14,
    ("REQ-PUBLIC-ERROR-SURFACES", "REQ-RUN-PICKER-HOME"): 10,
    ("REQ-CONN-BLACKHOLE-LIFECYCLE-HARNESS", "REQ-STREAM-LIFETIME-CLASS"): 38,
    ("REQ-HAZARD-VIEWER-CLOSE-DETACH", "REQ-INSTALL-10"): 8,
    ("REQ-HAZARD-BOUNDARY-READY-STRAND", "REQ-HAZARD-STALE-SIGNOFF-SENTINEL"): 42,
    ("REQ-HAZARD-CEREMONY-CLOCK-STEP", "REQ-HAZARD-DIRECT-WRITE-PRECEDENCE"): 15,
    ("REQ-ARCH-1", "REQ-ARCH-2"): 32,
    ("REQ-ENDPOINT-LIST-PALETTE", "REQ-PICKER-ONLINE-ACTION"): 28,
    ("REQ-HAZARD-VIEWER-RING-ROLL-SNAP", "REQ-PROJECT-INDEX-INVALIDATION"): 20,
    ("REQ-LISTEN-PRESERVES-HOSTING-TOPOLOGY", "REQ-RC-1"): 25,
    ("REQ-LIVEHOST-RECONCILE-TRIAL-SILENT", "REQ-REL-2"): 18,
    ("REQ-MANIFEST-2", "REQ-SUBNET-1"): 15,
    ("REQ-BRAIN-UPDATE-RESTART-CLEAN-CLOSE", "REQ-HAZARD-ENDPOINT-LIFECYCLE"): 35,
    ("REQ-ENDPOINT-TEARDOWN-AUTHORITY", "REQ-UPDATE-FINISH-ENDPOINT-SURVIVAL"): 48,
    ("REQ-RC-WIN-PASTE", "REQ-UPD-5"): 8,
    ("REQ-HAZARD-MESH-BOOTSTRAP-TRAP", "REQ-HAZARD-PAIR-SEED-ROTATION"): 52,
    ("REQ-INSTALL-4", "REQ-RUN-ID-REUSES-ADAPTER"): 18,
    ("REQ-EFFECTIVE-INSTANCE-STATE", "REQ-HAZARD-CONTROLLER-GAP-RESUME"): 28,
    ("REQ-HAZARD-INBOX-NO-DOUBLE", "REQ-MSG-IDLE-EDGE-DRAIN"): 38,
    ("REQ-READY-AGENT-RESUME", "REQ-SEAM-RESUME"): 68,
    ("REQ-SEAM-POSTSPAWN", "REQ-INST-7"): 20,
    ("REQ-FRONT-1", "REQ-PICKER-ONLINE-ACTION"): 25,
    ("REQ-HAZARD-INBOX-NO-DOUBLE", "REQ-NOTIF-QUIET-DELIVERY"): 45,
    ("REQ-HAZARD-BIND-CWD-UNSET", "REQ-RESUME-UNBOUND-STAMP"): 40,
    ("REQ-ENDPOINT-LIST-MERGE-LOCAL", "REQ-SUBNET-DISPLAY-PARITY"): 52,
    ("REQ-ENSURE-DAEMON-STOP-INHIBIT", "REQ-RC-DISPLAY-SOLE-WRITER"): 15,
    ("REQ-HAZARD-CORRUPT-PERCH-COHERENCE", "REQ-STREAM-INFOS-SERVER-FILTER"): 20,
    ("REQ-HAZARD-REGISTRY-GHOST-ROWS", "REQ-START-2"): 18,
    ("REQ-RESIZE-INPUT-MODE-INTEGRITY", "REQ-REST-TERMINAL-NORMALIZE"): 35,
    ("REQ-ACTIVITY-LIST-JSON", "REQ-DOCS-3"): 12,
    ("REQ-CLI-OUTPUT-MARKDOWN", "REQ-ENDPOINT-LIST-RENDER-POLISH"): 48,
    ("REQ-HAZARD-INPUT-ACK-BACKPRESSURE", "REQ-HAZARD-SHAREDSEND-NO-BLOCKING-WRITE-UNDER-LOCK"): 58,
    ("REQ-HAZARD-PSYCHE-RESIDENCY-EXPECTATION", "REQ-PICKER-PURGE-SHORTCUT"): 18,
    ("REQ-HAZARD-REGISTRY-GHOST-ROWS", "REQ-WORKER-REAP"): 28,
    ("REQ-RESUME-UNBOUND-STAMP", "REQ-RUN-NO-DUP-SESSION"): 38,
    ("REQ-START-1", "REQ-START-3"): 45,
    ("REQ-EP-1", "REQ-EP-2"): 48,
    ("REQ-NODE-IDENTITY", "REQ-WORKER-MINTED-NAME"): 52,
    ("REQ-EP-4", "REQ-PRES-1"): 22,
    ("REQ-CONTROL-STAMP-CONVERGENCE", "REQ-RUN-ID-REUSES-ADAPTER"): 18,
    ("REQ-ENDPOINT-ONLINE-TRUTH", "REQ-INST-12"): 28,
    ("REQ-MESH-1", "REQ-MESH-2"): 42,
    ("REQ-HOST-RUN-2", "REQ-PICKER-KEY-GATE-LAUNCH-CAPABLE"): 32,
    ("REQ-INSTALL-13", "REQ-MIGRATE-1"): 38,
    ("REQ-HAZARD-ENDPOINT-LIFECYCLE", "REQ-HAZARD-RC-EOF"): 42,
    ("REQ-MESH-6", "REQ-SEAM-ACTIVITY"): 22,
    ("REQ-DIGEST-JSON-SELF-CONTAINED", "REQ-TERM-7"): 18,
    ("REQ-RELEASE-CHANNEL-PRIVATE", "REQ-UPDATE-APPLY-RESTART-NOTICE"): 28,
    ("REQ-RUN-MULTISUBNET-HOME", "REQ-START-3"): 15,
    ("REQ-CONV-2", "REQ-PUMP-DIAL-FASTFAIL"): 20,
    ("REQ-HAZARD-CONTROLLER-WRITER-REORDER", "REQ-HAZARD-REDISPATCH-CONTROL-STEAL"): 58,
    ("REQ-HAZARD-INFO-JSON-TORN-READ", "REQ-HAZARD-REGISTRY-DIR-CREATE"): 18,
    ("REQ-HAZARD-CONTROL-STAMP-LIFETIME", "REQ-HAZARD-CONTROLLER-LEASE"): 65,
    ("REQ-INST-13", "REQ-SELF-ID-TRUST-INJECTED-ENV"): 22,
    ("REQ-INSTALL-2", "REQ-INSTALL-5"): 52,
    ("REQ-MANIFEST-2", "REQ-MANIFEST-5"): 48,
    ("REQ-HAZARD-VIEWER-RING-ROLL-SNAP", "REQ-LIVE-AGENT-NO-INJECT-DELIVERY"): 25,
    ("REQ-HAZARD-DEFERRED-DRAIN", "REQ-HAZARD-DEFERRED-SURVIVE-DRAIN"): 75,
    ("REQ-ADAPTER-UPDATE-MESSAGE", "REQ-ADAPTER-UPDATE-POST"): 72,
    ("REQ-API-3", "REQ-HAZARD-ENVELOPE-PARSER-SAFE"): 12,
    ("REQ-HAZARD-RENDER-LIFECYCLE", "REQ-PICKER-CONTROLLED-LOCAL"): 28,
    ("REQ-PICKER-CHANGE-ADAPTER-FLOW", "REQ-PICKER-RESUME-CONTEXT-PANEL"): 42,
    ("REQ-HAZARD-GRACE-BEFORE-SIGNOFF", "REQ-HAZARD-ECHO-BEFORE-SIGNOFF"): 68,
    ("REQ-LISTEN-SEED-CONSUME-AFTER-BIND", "REQ-MSG-3"): 20,
    ("REQ-DAEMON-RESTART-SELF-INTERRUPTION", "REQ-HAZARD-ROLLBACK-STATE-COMPAT"): 18,
    ("REQ-HAZARD-DEFERRED-DRAIN", "REQ-SEND-WINDOW-DRAIN-HONOR"): 42,
    ("REQ-HAZARD-STALE-INDEX-LOCK", "REQ-HAZARD-REGISTRY-STALE-CLEAN"): 58,
    ("REQ-RESUME-UNBOUND-STAMP", "REQ-UPDATE-DEFAULT-COMPOSITE"): 20,
    ("REQ-HAZARD-UNHOST-PSYCHE-REAP", "REQ-SEAM-SPAWN"): 28,
    ("REQ-HAZARD-RC-EOF", "REQ-WAKE-RESUME-LEG"): 28,
    ("REQ-MSG-3", "REQ-UPDATE-ONE-SHOT-FINISH"): 15,
    ("REQ-BIND-HONEST-SELF-STAMP", "REQ-SEAM-POSTSPAWN"): 25,
    ("REQ-ENDPOINT-LIST-REST-FILTER", "REQ-PICKER-3"): 32,
}

# Build results in file order
results = []
for a_id, b_id in pairs:
    key = (a_id, b_id)
    score = pair_scores.get(key, 25)
    results.append({"a": a_id, "b": b_id, "score": score})

# Verify we have all 132
if len(results) != 132:
    print(f"ERROR: Expected 132 results, got {len(results)}", file=sys.stderr)
    sys.exit(1)

# Output as JSON
print(json.dumps(results))
