<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="bun test" tests="693" assertions="2323" failures="0" skipped="2" time="17.525568933">
  <testsuite name="src/hooks-inventory.test.ts" file="src/hooks-inventory.test.ts" tests="9" assertions="14" failures="0" skipped="0" time="0.009" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testcase name="inventories healthy, missing, and non-executable configured hooks" classname="" time="0.008006" file="src/hooks-inventory.test.ts" line="16" assertions="3" />
    <testcase name="accepts a readable script launched by an executable interpreter" classname="" time="0.000935" file="src/hooks-inventory.test.ts" line="44" assertions="1" />
    <testcase name="flags an executable script whose shebang runtime does not resolve" classname="" time="0.000687" file="src/hooks-inventory.test.ts" line="55" assertions="1" />
    <testcase name="resolves a runtime named through an env shebang" classname="" time="0.000555" file="src/hooks-inventory.test.ts" line="74" assertions="1" />
    <testcase name="treats an executable without a shebang as self-contained" classname="" time="0.000517" file="src/hooks-inventory.test.ts" line="86" assertions="1" />
    <testcase name="records source errors for unparseable registries" classname="" time="0.000934" file="src/hooks-inventory.test.ts" line="98" assertions="4" />
    <testcase name="substitutes CLAUDE_PLUGIN_ROOT from the plugin manifest next to the registry" classname="" time="0.001367" file="src/hooks-inventory.test.ts" line="110" assertions="1" />
    <testcase name="marks commands with unresolvable environment variables UNOBSERVED, never DEAD" classname="" time="0.000511" file="src/hooks-inventory.test.ts" line="125" assertions="1" />
    <testcase name="resolves PLUGIN_ROOT to the dot-dir manifest&apos;s parent when the target lives there" classname="" time="0.000813" file="src/hooks-inventory.test.ts" line="138" assertions="1" />
  </testsuite>
  <testsuite name="src/alerter.test.ts" file="src/alerter.test.ts" tests="10" assertions="45" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="resolveAlerterSettings" file="src/alerter.test.ts" line="42" tests="1" assertions="5" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="ships disabled with named error when mining output is absent" classname="resolveAlerterSettings" time="0.000205" file="src/alerter.test.ts" line="49" assertions="5" />
    </testsuite>
    <testsuite name="Alerter cooldown and quiet hours" file="src/alerter.test.ts" line="65" tests="3" assertions="13" failures="0" skipped="0" time="0.006" hostname="debian1">
      <testcase name="honors per-item cooldown" classname="Alerter cooldown and quiet hours" time="0.002973" file="src/alerter.test.ts" line="74" assertions="4" />
      <testcase name="honors quiet hours" classname="Alerter cooldown and quiet hours" time="0.000832" file="src/alerter.test.ts" line="93" assertions="7" />
      <testcase name="ignores non-act severities via createAlerter subscription" classname="Alerter cooldown and quiet hours" time="0.004821" file="src/alerter.test.ts" line="118" assertions="2" />
    </testsuite>
    <testsuite name="gdbusNotify" file="src/alerter.test.ts" line="162" tests="3" assertions="16" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="asks the gate first, then follows notifier.py argv shape and parses the id" classname="gdbusNotify" time="0.000781" file="src/alerter.test.ts" line="163" assertions="11" />
      <testcase name="an unapproved source never reaches the session bus" classname="gdbusNotify" time="0.000155" file="src/alerter.test.ts" line="190" assertions="3" />
      <testcase name="a gate that cannot be run denies rather than emitting" classname="gdbusNotify" time="0.000146" file="src/alerter.test.ts" line="208" assertions="2" />
    </testsuite>
    <testsuite name="morning digest" file="src/alerter.test.ts" line="226" tests="2" assertions="7" failures="0" skipped="0" time="0.244" hostname="debian1">
      <testcase name="digest string is exact on fixture day" classname="morning digest" time="0.000187" file="src/alerter.test.ts" line="227" assertions="1" />
      <testcase name="buildDigest assembles fixture state for the fixture morning" classname="morning digest" time="0.244865" file="src/alerter.test.ts" line="246" assertions="6" />
    </testsuite>
    <testsuite name="mining fixture seeding" file="src/alerter.test.ts" line="335" tests="1" assertions="4" failures="0" skipped="0" time="0.001" hostname="debian1">
      <testcase name="reads thresholds from mining output without inventing defaults" classname="mining fixture seeding" time="0.001687" file="src/alerter.test.ts" line="336" assertions="4" />
    </testsuite>
  </testsuite>
  <testsuite name="src/permissions.test.ts" file="src/permissions.test.ts" tests="12" assertions="33" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="PermissionQueue" file="src/permissions.test.ts" line="40" tests="12" assertions="33" failures="0" skipped="0" time="0.081" hostname="debian1">
      <testcase name="a pending request becomes a decision item and an allow verdict resolves it" classname="PermissionQueue" time="0.001344" file="src/permissions.test.ts" line="41" assertions="7" />
      <testcase name="a deny verdict resolves with deny" classname="PermissionQueue" time="0.000295" file="src/permissions.test.ts" line="56" assertions="1" />
      <testcase name="the wait bound lapses to ask and never to allow" classname="PermissionQueue" time="0.005303" file="src/permissions.test.ts" line="64" assertions="3" />
      <testcase name="a disconnected caller lapses to ask" classname="PermissionQueue" time="0.000435" file="src/permissions.test.ts" line="72" assertions="1" />
      <testcase name="answering an unknown or already-lapsed request reports not applied" classname="PermissionQueue" time="0.000153" file="src/permissions.test.ts" line="80" assertions="1" />
      <testcase name="a full queue falls straight back to the terminal" classname="PermissionQueue" time="0.073852" file="src/permissions.test.ts" line="85" assertions="3" />
      <testcase name="credential-shaped tool input is redacted before it reaches the browser" classname="PermissionQueue" time="0.000478" file="src/permissions.test.ts" line="97" assertions="2" />
      <testcase name="arming writes a self-expiring 0600 arm file and disarming removes it" classname="PermissionQueue" time="0.000349" file="src/permissions.test.ts" line="111" assertions="6" />
      <testcase name="the gate panel reports arm state and queue depth honestly" classname="PermissionQueue" time="0.000259" file="src/permissions.test.ts" line="127" assertions="2" />
      <testcase name="the Claude Code feeder maps the hook envelope onto a neutral request" classname="PermissionQueue" time="0.000109" file="src/permissions.test.ts" line="138" assertions="2" />
      <testcase name="only allow and deny render a PreToolUse directive" classname="PermissionQueue" time="0.000105" file="src/permissions.test.ts" line="144" assertions="3" />
      <testcase name="startup clears journalled pendings and a stale arm file from a dead collector" classname="PermissionQueue" time="0.002309" file="src/permissions.test.ts" line="156" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/ghci-run-history.test.ts" file="src/ghci-run-history.test.ts" tests="2" assertions="3" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="ghci-run-history" file="src/ghci-run-history.test.ts" line="29" tests="2" assertions="3" failures="0" skipped="0" time="0.001" hostname="debian1">
      <testcase name="merges runs by id+attempt and keeps newest first" classname="ghci-run-history" time="0.001765" file="src/ghci-run-history.test.ts" line="38" assertions="2" />
      <testcase name="persists and reloads from disk" classname="ghci-run-history" time="0.000557" file="src/ghci-run-history.test.ts" line="47" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/abandoned-store.test.ts" file="src/abandoned-store.test.ts" tests="3" assertions="7" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="abandoned plan store" file="src/abandoned-store.test.ts" line="22" tests="3" assertions="7" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="missing and corrupt stores read as empty without throwing" classname="abandoned plan store" time="0.000477" file="src/abandoned-store.test.ts" line="23" assertions="4" />
      <testcase name="abandon is restart-safe, idempotent, and atomically persisted" classname="abandoned plan store" time="0.00035" file="src/abandoned-store.test.ts" line="39" assertions="2" />
      <testcase name="restore is idempotent" classname="abandoned plan store" time="0.00021" file="src/abandoned-store.test.ts" line="49" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/factory-artifact.test.ts" file="src/factory-artifact.test.ts" tests="2" assertions="17" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="factory artifact reader" file="src/factory-artifact.test.ts" line="10" tests="2" assertions="17" failures="0" skipped="0" time="0.016" hostname="debian1">
      <testcase name="serves contained text and tails oversized files" classname="factory artifact reader" time="0.016557" file="src/factory-artifact.test.ts" line="11" assertions="15" />
      <testcase name="rejects traversal and symlinks escaping the data directory" classname="factory artifact reader" time="0.000884" file="src/factory-artifact.test.ts" line="38" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/host-logs.test.ts" file="src/host-logs.test.ts" tests="10" assertions="29" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="GET /hosts/:hostname/logs proxy" file="src/host-logs.test.ts" line="35" tests="5" assertions="15" failures="0" skipped="0" time="0.03" hostname="debian1">
      <testcase name="proxies to controller with bearer token and returns JSON body" classname="GET /hosts/:hostname/logs proxy" time="0.007255" file="src/host-logs.test.ts" line="51" assertions="4" />
      <testcase name="returns 503 when controller connection is not configured" classname="GET /hosts/:hostname/logs proxy" time="0.016196" file="src/host-logs.test.ts" line="94" assertions="2" />
      <testcase name="refuses a registry-disabled host without contacting the controller" classname="GET /hosts/:hostname/logs proxy" time="0.002991" file="src/host-logs.test.ts" line="110" assertions="3" />
      <testcase name="refuses a host the registry does not declare" classname="GET /hosts/:hostname/logs proxy" time="0.003292" file="src/host-logs.test.ts" line="133" assertions="3" />
      <testcase name="fails closed when the registry cannot be read" classname="GET /hosts/:hostname/logs proxy" time="0.002667" file="src/host-logs.test.ts" line="156" assertions="3" />
    </testsuite>
    <testsuite name="GET /activity" file="src/host-logs.test.ts" line="185" tests="5" assertions="14" failures="0" skipped="0" time="0.017" hostname="debian1">
      <testcase name="returns activity response shape" classname="GET /activity" time="0.008619" file="src/host-logs.test.ts" line="201" assertions="2" />
      <testcase name="returns 400 for invalid from" classname="GET /activity" time="0.00276" file="src/host-logs.test.ts" line="226" assertions="2" />
      <testcase name="returns 400 for invalid limit" classname="GET /activity" time="0.002394" file="src/host-logs.test.ts" line="243" assertions="2" />
      <testcase name="returns 400 for unknown category" classname="GET /activity" time="0.002605" file="src/host-logs.test.ts" line="259" assertions="2" />
      <testcase name="serves per-source entries and rejects an unknown source" classname="GET /activity" time="0.003557" file="src/host-logs.test.ts" line="275" assertions="6" />
    </testsuite>
  </testsuite>
  <testsuite name="src/actions.test.ts" file="src/actions.test.ts" tests="62" assertions="227" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="action gateway deny paths" file="src/actions.test.ts" line="247" tests="3" assertions="7" failures="0" skipped="0" time="0.006" hostname="debian1">
      <testcase name="non-allowlisted verb returns 404" classname="action gateway deny paths" time="0.001283" file="src/actions.test.ts" line="248" assertions="4" />
      <testcase name="reap with pid absent from orphan candidate set returns 400" classname="action gateway deny paths" time="0.004296" file="src/actions.test.ts" line="256" assertions="2" />
      <testcase name="ci-rerun with run id absent from ci panel returns 400" classname="action gateway deny paths" time="0.001203" file="src/actions.test.ts" line="263" assertions="1" />
    </testsuite>
    <testsuite name="harness action gateway" file="src/actions.test.ts" line="269" tests="6" assertions="29" failures="0" skipped="0" time="0.021" hostname="debian1">
      <testcase name="rejects task controls with missing or extra args before harness call" classname="harness action gateway" time="0.003638" file="src/actions.test.ts" line="270" assertions="3" />
      <testcase name="forwards exact observed task IDs and leaves duplicate request IDs idempotent upstream" classname="harness action gateway" time="0.002963" file="src/actions.test.ts" line="282" assertions="3" />
      <testcase name="preserves stale attempt conflicts and journals config patch atomically" classname="harness action gateway" time="0.004394" file="src/actions.test.ts" line="293" assertions="6" />
      <testcase name="authorizes every config patch key against authoritative mutability metadata" classname="harness action gateway" time="0.005622" file="src/actions.test.ts" line="314" assertions="10" />
      <testcase name="bounds and redacts harness config patches before parsing" classname="harness action gateway" time="0.00677" file="src/actions.test.ts" line="341" assertions="5" />
      <testcase name="forwards exact run controls" classname="harness action gateway" time="0.001758" file="src/actions.test.ts" line="370" assertions="2" />
    </testsuite>
    <testsuite name="mediated train actions" file="src/actions.test.ts" line="379" tests="22" assertions="51" failures="0" skipped="0" time="0.02" hostname="debian1">
      <testcase name="spawns and journals exact ci.rerunFailed argv" classname="mediated train actions" time="0.0018" file="src/actions.test.ts" line="383" assertions="4" />
      <testcase name="spawns and journals exact ci.cancelRun argv" classname="mediated train actions" time="0.001941" file="src/actions.test.ts" line="383" assertions="4" />
      <testcase name="accepts exact repository regex boundaries" classname="mediated train actions" time="0.001498" file="src/actions.test.ts" line="403" assertions="2" />
      <testcase name="rejects invalid or shell-bearing repo -alexcodeplace/multideal before spawn" classname="mediated train actions" time="0.00094" file="src/actions.test.ts" line="422" assertions="2" />
      <testcase name="rejects invalid or shell-bearing repo aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/repo before spawn" classname="mediated train actions" time="0.00064" file="src/actions.test.ts" line="422" assertions="2" />
      <testcase name="rejects invalid or shell-bearing repo owner/rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr before spawn" classname="mediated train actions" time="0.001353" file="src/actions.test.ts" line="422" assertions="2" />
      <testcase name="rejects invalid or shell-bearing repo owner/repo;rm before spawn" classname="mediated train actions" time="0.002014" file="src/actions.test.ts" line="422" assertions="2" />
      <testcase name="rejects invalid or shell-bearing repo owner/repo$(id) before spawn" classname="mediated train actions" time="0.000996" file="src/actions.test.ts" line="422" assertions="2" />
      <testcase name="rejects non-string args, extra keys, and malformed bodies" classname="mediated train actions" time="0.00351" file="src/actions.test.ts" line="434" assertions="5" />
      <testcase name="rejects cross-repo run" classname="mediated train actions" time="0.00109" file="src/actions.test.ts" line="452" assertions="2" />
      <testcase name="rejects stale run" classname="mediated train actions" time="0.000907" file="src/actions.test.ts" line="452" assertions="2" />
      <testcase name="rejects an obsolete run from a reused train branch" classname="mediated train actions" time="0.002034" file="src/actions.test.ts" line="462" assertions="2" />
      <testcase name="rejects refsComplete false" classname="mediated train actions" time="0.00093" file="src/actions.test.ts" line="481" assertions="2" />
      <testcase name="rejects trainRunsComplete false" classname="mediated train actions" time="0.000615" file="src/actions.test.ts" line="481" assertions="2" />
      <testcase name="rejects prsComplete false" classname="mediated train actions" time="0.002405" file="src/actions.test.ts" line="481" assertions="2" />
      <testcase name="rejects trainsComplete false" classname="mediated train actions" time="0.001117" file="src/actions.test.ts" line="481" assertions="2" />
      <testcase name="does not gate eligible actions on history completeness" classname="mediated train actions" time="0.000932" file="src/actions.test.ts" line="495" assertions="2" />
      <testcase name="rejects ineligible ci.rerunFailed state green/completed" classname="mediated train actions" time="0.000899" file="src/actions.test.ts" line="511" assertions="2" />
      <testcase name="rejects ineligible ci.cancelRun state failed/completed" classname="mediated train actions" time="0.001052" file="src/actions.test.ts" line="511" assertions="2" />
      <testcase name="rejects ineligible ci.cancelRun state gating/completed" classname="mediated train actions" time="0.002502" file="src/actions.test.ts" line="511" assertions="2" />
      <testcase name="rejects a stale adapter snapshot" classname="mediated train actions" time="0.001404" file="src/actions.test.ts" line="524" assertions="2" />
      <testcase name="rejects after a successful poll is followed by a failed poll" classname="mediated train actions" time="0.001064" file="src/actions.test.ts" line="536" assertions="2" />
    </testsuite>
    <testsuite name="action gateway journal" file="src/actions.test.ts" line="551" tests="5" assertions="19" failures="0" skipped="0" time="0.011" hostname="debian1">
      <testcase name="abandon and restore are idempotent local actions with journal entries" classname="action gateway journal" time="0.004864" file="src/actions.test.ts" line="552" assertions="9" />
      <testcase name="abandon rejects invalid args with the steer validation shape" classname="action gateway journal" time="0.001269" file="src/actions.test.ts" line="577" assertions="2" />
      <testcase name="forwards a decision answer through the harness adapter" classname="action gateway journal" time="0.001646" file="src/actions.test.ts" line="584" assertions="2" />
      <testcase name="appends a journal line with exact shape on failed attempt" classname="action gateway journal" time="0.003518" file="src/actions.test.ts" line="594" assertions="2" />
      <testcase name="appends a journal line with exact shape on successful reap" classname="action gateway journal" time="0.002622" file="src/actions.test.ts" line="610" assertions="4" />
    </testsuite>
    <testsuite name="offload action gateway" file="src/actions.test.ts" line="632" tests="7" assertions="72" failures="0" skipped="0" time="0.013" hostname="debian1">
      <testcase name="all 8 offload verbs proxy to controller /transition with gateway-owned idempotency key" classname="offload action gateway" time="0.006506" file="src/actions.test.ts" line="644" assertions="56" />
      <testcase name="rejects caller-supplied idempotencyKey in args" classname="offload action gateway" time="0.000998" file="src/actions.test.ts" line="670" assertions="2" />
      <testcase name="box-drain with host absent from fleet panel returns 400" classname="offload action gateway" time="0.002503" file="src/actions.test.ts" line="680" assertions="2" />
      <testcase name="job-retry with job absent from remote-jobs panel returns 400" classname="offload action gateway" time="0.002513" file="src/actions.test.ts" line="690" assertions="2" />
      <testcase name="job-retry forwards jobId to controller args" classname="offload action gateway" time="0.001476" file="src/actions.test.ts" line="700" assertions="2" />
      <testcase name="controller unreachable returns typed 502" classname="offload action gateway" time="0.002383" file="src/actions.test.ts" line="709" assertions="2" />
      <testcase name="appends journal line with exact shape on offload proxy success" classname="offload action gateway" time="0.000964" file="src/actions.test.ts" line="723" assertions="6" />
    </testsuite>
    <testsuite name="factory decision action handler" file="src/actions.test.ts" line="841" tests="7" assertions="18" failures="0" skipped="0" time="0.015" hostname="debian1">
      <testcase name="factory.decision.answer is allowlisted" classname="factory decision action handler" time="0.000065" file="src/actions.test.ts" line="842" assertions="1" />
      <testcase name="valid option answer returns 200, marks decision answered, and writes decision_answered event" classname="factory decision action handler" time="0.006499" file="src/actions.test.ts" line="846" assertions="6" />
      <testcase name="second answer returns 409" classname="factory decision action handler" time="0.003341" file="src/actions.test.ts" line="880" assertions="3" />
      <testcase name="unknown decisionId returns 404" classname="factory decision action handler" time="0.001494" file="src/actions.test.ts" line="902" assertions="1" />
      <testcase name="invalid choice returns 400 when options are fixed and free text is disabled" classname="factory decision action handler" time="0.001455" file="src/actions.test.ts" line="918" assertions="2" />
      <testcase name="free-text decision accepts arbitrary choice text" classname="factory decision action handler" time="0.002702" file="src/actions.test.ts" line="935" assertions="2" />
      <testcase name="event insert failure rolls back the decision update and returns 500" classname="factory decision action handler" time="0.002341" file="src/actions.test.ts" line="962" assertions="3" />
    </testsuite>
    <testsuite name="factory stop action handler" file="src/actions.test.ts" line="1007" tests="6" assertions="16" failures="0" skipped="0" time="0.008" hostname="debian1">
      <testcase name="factory.run.stop is allowlisted" classname="factory stop action handler" time="0.000095" file="src/actions.test.ts" line="1026" assertions="1" />
      <testcase name="running session returns 200 and spawns factory stop with the session repo" classname="factory stop action handler" time="0.002084" file="src/actions.test.ts" line="1030" assertions="3" />
      <testcase name="unknown adwId returns 404 without spawning" classname="factory stop action handler" time="0.001397" file="src/actions.test.ts" line="1045" assertions="3" />
      <testcase name="non-running session returns 409 without spawning" classname="factory stop action handler" time="0.001541" file="src/actions.test.ts" line="1058" assertions="3" />
      <testcase name="invalid adwId returns 400 without touching the db" classname="factory stop action handler" time="0.003106" file="src/actions.test.ts" line="1074" assertions="3" />
      <testcase name="failed factory stop spawn returns 500 with stderr" classname="factory stop action handler" time="0.001378" file="src/actions.test.ts" line="1087" assertions="3" />
    </testsuite>
    <testsuite name="incident.resolve action handler" file="src/actions.test.ts" line="1105" tests="6" assertions="15" failures="0" skipped="0" time="0.002" hostname="debian1">
      <testcase name="incident.resolve is allowlisted" classname="incident.resolve action handler" time="0.000072" file="src/actions.test.ts" line="1129" assertions="1" />
      <testcase name="missing artifact returns 400 naming the artifact-required rule, provider untouched" classname="incident.resolve action handler" time="0.002304" file="src/actions.test.ts" line="1133" assertions="5" />
      <testcase name="happy path resolves through the provider and returns ok" classname="incident.resolve action handler" time="0.000544" file="src/actions.test.ts" line="1148" assertions="3" />
      <testcase name="resolution conflict maps to 409 with the stored-artifact detail" classname="incident.resolve action handler" time="0.000565" file="src/actions.test.ts" line="1160" assertions="3" />
      <testcase name="unknown incident maps to 404" classname="incident.resolve action handler" time="0.000482" file="src/actions.test.ts" line="1173" assertions="1" />
      <testcase name="collector without an incidents provider answers 503, never a bare 500" classname="incident.resolve action handler" time="0.000432" file="src/actions.test.ts" line="1179" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="test/hook-controls.test.ts" file="test/hook-controls.test.ts" tests="29" assertions="89" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="hook controls store" file="test/hook-controls.test.ts" line="41" tests="29" assertions="89" failures="0" skipped="0" time="2.727" hostname="debian1">
      <testcase name="materializes registry defaults and preserves future boolean keys" classname="hook controls store" time="0.00601" file="test/hook-controls.test.ts" line="42" assertions="4" />
      <testcase name="marks malformed bytes as repairable and nonregular targets as nonrepairable" classname="hook controls store" time="0.001764" file="test/hook-controls.test.ts" line="52" assertions="4" />
      <testcase name="repairs invalid bytes only after writing a durable private backup" classname="hook controls store" time="0.00197" file="test/hook-controls.test.ts" line="72" assertions="4" />
      <testcase name="removes corruption backup when repair fails before rename commit" classname="hook controls store" time="0.002108" file="test/hook-controls.test.ts" line="83" assertions="3" />
      <testcase name="surfaces backup cleanup failure when repair fails before rename commit" classname="hook controls store" time="0.001954" file="test/hook-controls.test.ts" line="95" assertions="4" />
      <testcase name="removes corruption backup when backup write fails after exclusive create during repair" classname="hook controls store" time="0.002519" file="test/hook-controls.test.ts" line="113" assertions="3" />
      <testcase name="removes corruption backup when backup file fsync fails during repair" classname="hook controls store" time="0.00215" file="test/hook-controls.test.ts" line="123" assertions="3" />
      <testcase name="removes corruption backup when post-backup directory fsync fails during repair" classname="hook controls store" time="0.001778" file="test/hook-controls.test.ts" line="133" assertions="4" />
      <testcase name="surfaces backup cleanup failure when backup file fsync fails during repair" classname="hook controls store" time="0.001537" file="test/hook-controls.test.ts" line="149" assertions="4" />
      <testcase name="rejects prototype pollution IDs with unknown-hook-control" classname="hook controls store" time="0.00008" file="test/hook-controls.test.ts" line="165" assertions="4" />
      <testcase name="rejects symlink lock paths without following or truncating them" classname="hook controls store" time="0.001163" file="test/hook-controls.test.ts" line="172" assertions="2" />
      <testcase name="rejects hard-linked lock files" classname="hook controls store" time="0.000472" file="test/hook-controls.test.ts" line="182" assertions="1" />
      <testcase name="unlocks and closes the lock descriptor when post-flock initialization fails, then allows a later acquisition" classname="hook controls store" time="0.001911" file="test/hook-controls.test.ts" line="190" assertions="2" />
      <testcase name="releases a stale advisory lock after the holder exits" classname="hook controls store" time="0.131527" file="test/hook-controls.test.ts" line="199" assertions="1" />
      <testcase name="fails closed when a live advisory lock is held past the bounded wait" classname="hook controls store" time="2.109893" file="test/hook-controls.test.ts" line="227" assertions="1" />
      <testcase name="serializes concurrent mutations without lost updates" classname="hook controls store" time="0.033499" file="test/hook-controls.test.ts" line="253" assertions="2" />
      <testcase name="preserves prior bytes when pre-rename persistence fails" classname="hook controls store" time="0.000874" file="test/hook-controls.test.ts" line="264" assertions="2" />
      <testcase name="returns observed indeterminate success when post-rename parent fsync fails" classname="hook controls store" time="0.003641" file="test/hook-controls.test.ts" line="275" assertions="6" />
      <testcase name="returns committed indeterminate success when post-rename fsync and reread both fail" classname="hook controls store" time="0.00123" file="test/hook-controls.test.ts" line="294" assertions="5" />
      <testcase name="GET fsync retries then confirms persistence" classname="hook controls store" time="0.03303" file="test/hook-controls.test.ts" line="313" assertions="3" />
      <testcase name="GET reports indeterminate persistence when directory fsync keeps failing" classname="hook controls store" time="0.060423" file="test/hook-controls.test.ts" line="328" assertions="3" />
      <testcase name="GET confirmed generation matches disk while lock serializes concurrent POST" classname="hook controls store" time="0.213666" file="test/hook-controls.test.ts" line="338" assertions="5" />
      <testcase name="closes the lock descriptor in finally when release fails after commit" classname="hook controls store" time="0.007101" file="test/hook-controls.test.ts" line="366" assertions="2" />
      <testcase name="returns indeterminate success when lock release fails after commit" classname="hook controls store" time="0.000945" file="test/hook-controls.test.ts" line="376" assertions="4" />
      <testcase name="leaves no marker or rollback artifacts after indeterminate write" classname="hook controls store" time="0.001039" file="test/hook-controls.test.ts" line="386" assertions="1" />
      <testcase name="appends lock release failure when GET persistence is already indeterminate" classname="hook controls store" time="0.05912" file="test/hook-controls.test.ts" line="393" assertions="3" />
      <testcase name="includes temp cleanup failure in write error before commit" classname="hook controls store" time="0.005628" file="test/hook-controls.test.ts" line="403" assertions="3" />
      <testcase name="marks persistence indeterminate when temp cleanup fails after commit" classname="hook controls store" time="0.000779" file="test/hook-controls.test.ts" line="415" assertions="3" />
      <testcase name="allows concurrent GET readers under shared flock" classname="hook controls store" time="0.053935" file="test/hook-controls.test.ts" line="424" assertions="3" />
    </testsuite>
  </testsuite>
  <testsuite name="test/journal.test.ts" file="test/journal.test.ts" tests="9" assertions="22" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="journal restart-safe dedupe" file="test/journal.test.ts" line="28" tests="4" assertions="9" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="append writes a line, load replays it" classname="journal restart-safe dedupe" time="0.000386" file="test/journal.test.ts" line="29" assertions="3" />
      <testcase name="appending same id twice within a process is a no-op the second time" classname="journal restart-safe dedupe" time="0.000106" file="test/journal.test.ts" line="40" assertions="3" />
      <testcase name="dedupe survives restart: unchanged item journaled before restart is not re-appended" classname="journal restart-safe dedupe" time="0.000145" file="test/journal.test.ts" line="50" assertions="2" />
      <testcase name="load with no existing file returns empty array" classname="journal restart-safe dedupe" time="0.00006" file="test/journal.test.ts" line="63" assertions="1" />
    </testsuite>
    <testsuite name="journal event log: changed content, tombstones, replay order" file="test/journal.test.ts" line="70" tests="5" assertions="13" failures="0" skipped="0" time="0.001" hostname="debian1">
      <testcase name="appending an id with changed content re-persists (does not no-op)" classname="journal event log: changed content, tombstones, replay order" time="0.000172" file="test/journal.test.ts" line="71" assertions="5" />
      <testcase name="tombstone replay: a resolved item does not resurrect after restart" classname="journal event log: changed content, tombstones, replay order" time="0.000154" file="test/journal.test.ts" line="89" assertions="1" />
      <testcase name="interleaved upsert/tombstone order is respected on replay (genuinely last-write-wins)" classname="journal event log: changed content, tombstones, replay order" time="0.001142" file="test/journal.test.ts" line="100" assertions="2" />
      <testcase name="a tombstone is not silently dropped as a malformed line" classname="journal event log: changed content, tombstones, replay order" time="0.000198" file="test/journal.test.ts" line="116" assertions="3" />
      <testcase name="malformed lines are skipped without throwing" classname="journal event log: changed content, tombstones, replay order" time="0.000318" file="test/journal.test.ts" line="130" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="test/server.test.ts" file="test/server.test.ts" tests="19" assertions="64" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="hook controls routes" file="test/server.test.ts" line="115" tests="2" assertions="6" failures="0" skipped="0" time="0.002" hostname="debian1">
      <testcase name="uses registry defaults, exact JSON essence, and stable known-route methods" classname="hook controls routes" time="0.00207" file="test/server.test.ts" line="116" assertions="4" />
      <testcase name="rejects prototype hook IDs as unknown-hook-control" classname="hook controls routes" time="0.000338" file="test/server.test.ts" line="126" assertions="2" />
    </testsuite>
    <testsuite name="auth" file="test/server.test.ts" line="134" tests="3" assertions="3" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="missing Authorization header is rejected with 401" classname="auth" time="0.000206" file="test/server.test.ts" line="135" assertions="1" />
      <testcase name="wrong bearer token is rejected with 401" classname="auth" time="0.000192" file="test/server.test.ts" line="140" assertions="1" />
      <testcase name="correct bearer token is accepted" classname="auth" time="0.000239" file="test/server.test.ts" line="147" assertions="1" />
    </testsuite>
    <testsuite name="endpoints" file="test/server.test.ts" line="155" tests="11" assertions="45" failures="0" skipped="0" time="12.041" hostname="debian1">
      <testcase name="GET /health returns 401 without auth" classname="endpoints" time="0.000158" file="test/server.test.ts" line="156" assertions="1" />
      <testcase name="GET /health returns ok with valid bearer" classname="endpoints" time="0.000241" file="test/server.test.ts" line="161" assertions="2" />
      <testcase name="GET /state returns panels and adapter statuses" classname="endpoints" time="0.000242" file="test/server.test.ts" line="169" assertions="2" />
      <testcase name="cluster reads expose the snapshot, exact node, workload evidence, and honest 404s" classname="endpoints" time="0.004314" file="test/server.test.ts" line="178" assertions="5" />
      <testcase name="GET /items returns items, filterable by kind" classname="endpoints" time="0.000437" file="test/server.test.ts" line="193" assertions="2" />
      <testcase name="GET /events streams an SSE delta on new poll data" classname="endpoints" time="0.003693" file="test/server.test.ts" line="207" assertions="4" />
      <testcase name="an idle /events stream outlives Bun&apos;s default 10s idleTimeout" classname="endpoints" time="12.002775" file="test/server.test.ts" line="240" assertions="1" />
      <testcase name="harness reads are authenticated, exact, and preserve query cursor" classname="endpoints" time="0.007523" file="test/server.test.ts" line="259" assertions="13" />
      <testcase name="task SSE is relayed without buffering and cancellation closes upstream" classname="endpoints" time="0.02411" file="test/server.test.ts" line="308" assertions="6" />
      <testcase name="task SSE drops malformed data frames without exposing bytes" classname="endpoints" time="0.000988" file="test/server.test.ts" line="336" assertions="3" />
      <testcase name="task SSE rejects oversized delimited frames before redaction" classname="endpoints" time="0.001189" file="test/server.test.ts" line="348" assertions="6" />
    </testsuite>
    <testsuite name="port busy" file="test/server.test.ts" line="363" tests="1" assertions="3" failures="0" skipped="0" time="0.005" hostname="debian1">
      <testcase name="binding an already-bound port throws CollectorFatalError with code PORT_BUSY" classname="port busy" time="0.005457" file="test/server.test.ts" line="364" assertions="3" />
    </testsuite>
    <testsuite name="GET /hooks" file="test/server.test.ts" line="387" tests="2" assertions="7" failures="0" skipped="0" time="0.003" hostname="debian1">
      <testcase name="rejects requests without auth" classname="GET /hooks" time="0.002307" file="test/server.test.ts" line="388" assertions="1" />
      <testcase name="returns the hook inventory with liveness verdicts" classname="GET /hooks" time="0.001575" file="test/server.test.ts" line="393" assertions="6" />
    </testsuite>
  </testsuite>
  <testsuite name="test/config.test.ts" file="test/config.test.ts" tests="5" assertions="9" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="config fail-closed startup" file="test/config.test.ts" line="22" tests="5" assertions="9" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="missing config file falls back to defaults" classname="config fail-closed startup" time="0.000402" file="test/config.test.ts" line="23" assertions="1" />
      <testcase name="valid config.toml is parsed" classname="config fail-closed startup" time="0.000225" file="test/config.test.ts" line="28" assertions="3" />
      <testcase name="invalid TOML syntax throws a named fatal error" classname="config fail-closed startup" time="0.000284" file="test/config.test.ts" line="39" assertions="2" />
      <testcase name="valid TOML but wrong shape throws a named fatal error" classname="config fail-closed startup" time="0.000264" file="test/config.test.ts" line="49" assertions="2" />
      <testcase name="unreadable config file throws a named fatal error" classname="config fail-closed startup" time="0.000158" file="test/config.test.ts" line="60" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="test/routing-config.test.ts" file="test/routing-config.test.ts" tests="6" assertions="16" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="routing config endpoints" file="test/routing-config.test.ts" line="51" tests="6" assertions="16" failures="0" skipped="0" time="0.037" hostname="debian1">
      <testcase name="reads rules with the provider account registry" classname="routing config endpoints" time="0.016847" file="test/routing-config.test.ts" line="52" assertions="2" />
      <testcase name="rejects an unknown account slug without changing the file" classname="routing config endpoints" time="0.006327" file="test/routing-config.test.ts" line="58" assertions="3" />
      <testcase name="rejects malformed and extra fields without changing the file" classname="routing config endpoints" time="0.00387" file="test/routing-config.test.ts" line="68" assertions="2" />
      <testcase name="atomically replaces the complete routing file" classname="routing config endpoints" time="0.005744" file="test/routing-config.test.ts" line="77" assertions="3" />
      <testcase name="rejects noncanonical account slugs" classname="routing config endpoints" time="0.003675" file="test/routing-config.test.ts" line="85" assertions="2" />
      <testcase name="rejects invalid alias min-length registry for both routing and incidents parsers" classname="routing config endpoints" time="0.004175" file="test/routing-config.test.ts" line="94" assertions="4" />
    </testsuite>
  </testsuite>
  <testsuite name="test/adapters-wiring.test.ts" file="test/adapters-wiring.test.ts" tests="9" assertions="15" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="buildAdapters" file="test/adapters-wiring.test.ts" line="8" tests="9" assertions="15" failures="0" skipped="0" time="0.003" hostname="debian1">
      <testcase name="default config enables every wave-1 adapter" classname="buildAdapters" time="0.003006" file="test/adapters-wiring.test.ts" line="9" assertions="1" />
      <testcase name="enabled = false omits an adapter, others stay" classname="buildAdapters" time="0.000311" file="test/adapters-wiring.test.ts" line="29" assertions="2" />
      <testcase name="enabled = false omits cluster" classname="buildAdapters" time="0.000202" file="test/adapters-wiring.test.ts" line="36" assertions="2" />
      <testcase name="enabled = false omits gates" classname="buildAdapters" time="0.000137" file="test/adapters-wiring.test.ts" line="43" assertions="2" />
      <testcase name="enabled = false omits botmaster" classname="buildAdapters" time="0.000125" file="test/adapters-wiring.test.ts" line="50" assertions="2" />
      <testcase name="enabled = false omits offload" classname="buildAdapters" time="0.000126" file="test/adapters-wiring.test.ts" line="57" assertions="2" />
      <testcase name="intervalMs overrides the adapter&apos;s default interval" classname="buildAdapters" time="0.000153" file="test/adapters-wiring.test.ts" line="64" assertions="1" />
      <testcase name="every built adapter id is unique — registry registration cannot collide" classname="buildAdapters" time="0.000141" file="test/adapters-wiring.test.ts" line="73" assertions="1" />
      <testcase name="empty token throws TOKEN_EMPTY when offload is enabled" classname="buildAdapters" time="0.000218" file="test/adapters-wiring.test.ts" line="78" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="test/scheduler.test.ts" file="test/scheduler.test.ts" tests="4" assertions="6" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="stale adapter marking" file="test/scheduler.test.ts" line="16" tests="4" assertions="6" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="adapter is fresh right after a successful poll" classname="stale adapter marking" time="0.000593" file="test/scheduler.test.ts" line="17" assertions="1" />
      <testcase name="adapter is marked stale once age exceeds 2x interval" classname="stale adapter marking" time="0.000429" file="test/scheduler.test.ts" line="30" assertions="2" />
      <testcase name="adapter that has never succeeded is stale" classname="stale adapter marking" time="0.000069" file="test/scheduler.test.ts" line="51" assertions="1" />
      <testcase name="throwing adapter never crashes the scheduler" classname="stale adapter marking" time="0.000293" file="test/scheduler.test.ts" line="58" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="test/token.test.ts" file="test/token.test.ts" tests="3" assertions="4" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="token generation" file="test/token.test.ts" line="21" tests="3" assertions="4" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="generates a token file with mode 600 when missing" classname="token generation" time="0.000418" file="test/token.test.ts" line="22" assertions="2" />
      <testcase name="reuses an existing token on subsequent loads" classname="token generation" time="0.000139" file="test/token.test.ts" line="30" assertions="1" />
      <testcase name="token file contents match what is returned" classname="token generation" time="0.000106" file="test/token.test.ts" line="36" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="test/incidents-post.test.ts" file="test/incidents-post.test.ts" tests="9" assertions="40" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="POST /incidents" file="test/incidents-post.test.ts" line="51" tests="9" assertions="40" failures="0" skipped="0" time="0.044" hostname="debian1">
      <testcase name="validates and forwards a filing to the incidents provider" classname="POST /incidents" time="0.004891" file="test/incidents-post.test.ts" line="78" assertions="3" />
      <testcase name="rejects malformed and unknown fields before reaching the provider" classname="POST /incidents" time="0.003434" file="test/incidents-post.test.ts" line="85" assertions="3" />
      <testcase name="rejects a client-supplied wrapper model before reaching the provider" classname="POST /incidents" time="0.002677" file="test/incidents-post.test.ts" line="92" assertions="3" />
      <testcase name="rejects each tampered dispatch dimension before reaching the provider" classname="POST /incidents" time="0.005489" file="test/incidents-post.test.ts" line="99" assertions="12" />
      <testcase name="accepts unsafe:true when authority declares unsafe and persists authoritative wrapper" classname="POST /incidents" time="0.004536" file="test/incidents-post.test.ts" line="114" assertions="4" />
      <testcase name="rejects unsupported unsafe permission before reaching the provider" classname="POST /incidents" time="0.005504" file="test/incidents-post.test.ts" line="122" assertions="3" />
      <testcase name="rejects an unready account before reaching the provider" classname="POST /incidents" time="0.004725" file="test/incidents-post.test.ts" line="146" assertions="3" />
      <testcase name="rejects a body over the collector limit" classname="POST /incidents" time="0.009639" file="test/incidents-post.test.ts" line="166" assertions="3" />
      <testcase name="authority load failures occur before Kanboard mutation or idempotency creation" classname="POST /incidents" time="0.008373" file="test/incidents-post.test.ts" line="173" assertions="6" />
    </testsuite>
  </testsuite>
  <testsuite name="test/state.test.ts" file="test/state.test.ts" tests="13" assertions="29" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="fixture adapter round-trip" file="test/state.test.ts" line="17" tests="4" assertions="10" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="poll result lands in state as items and panels" classname="fixture adapter round-trip" time="0.000598" file="test/state.test.ts" line="18" assertions="4" />
      <testcase name="delta is emitted to subscribers on poll" classname="fixture adapter round-trip" time="0.000714" file="test/state.test.ts" line="37" assertions="2" />
      <testcase name="getItems filters by kind" classname="fixture adapter round-trip" time="0.000312" file="test/state.test.ts" line="56" assertions="2" />
      <testcase name="scheduler forwards parsed completeScopes into scoped reconciliation" classname="fixture adapter round-trip" time="0.000524" file="test/state.test.ts" line="72" assertions="2" />
    </testsuite>
    <testsuite name="reconciliation on success" file="test/state.test.ts" line="119" tests="9" assertions="19" failures="0" skipped="0" time="0.003" hostname="debian1">
      <testcase name="adapter health tracks poll latency and consecutive failures, then resets on success" classname="reconciliation on success" time="0.000156" file="test/state.test.ts" line="120" assertions="3" />
      <testcase name="an id absent from a successful poll is removed, tombstoned, and delta&apos;d as resolved" classname="reconciliation on success" time="0.00031" file="test/state.test.ts" line="142" assertions="4" />
      <testcase name="recordFailure retains items — nothing is resolved on a failed poll" classname="reconciliation on success" time="0.000124" file="test/state.test.ts" line="162" assertions="1" />
      <testcase name="ownership isolation: adapter A&apos;s poll never resolves adapter B&apos;s items" classname="reconciliation on success" time="0.000154" file="test/state.test.ts" line="173" assertions="1" />
      <testcase name="items replayed from the journal are reconcilable: a restart does not orphan them" classname="reconciliation on success" time="0.000196" file="test/state.test.ts" line="188" assertions="2" />
      <testcase name="named scopes reconcile independently and empty completeScopes resolves none" classname="reconciliation on success" time="0.000229" file="test/state.test.ts" line="205" assertions="2" />
      <testcase name="named scope ownership survives restart and resolves by exact scope only" classname="reconciliation on success" time="0.000337" file="test/state.test.ts" line="225" assertions="2" />
      <testcase name="upserting an id into a new scope does not let its completed old scope tombstone it" classname="reconciliation on success" time="0.00012" file="test/state.test.ts" line="245" assertions="1" />
      <testcase name="replay migrates only valid unscoped ghci run failures and persists upgraded ownership" classname="reconciliation on success" time="0.003645" file="test/state.test.ts" line="256" assertions="3" />
    </testsuite>
  </testsuite>
  <testsuite name="src/sessions/ledger.test.ts" file="src/sessions/ledger.test.ts" tests="22" assertions="33" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="readLedger" file="src/sessions/ledger.test.ts" line="56" tests="19" assertions="30" failures="0" skipped="0" time="0.008" hostname="debian1">
      <testcase name="a ledger that was never written reports missing, never invents sessions" classname="readLedger" time="0.00064" file="src/sessions/ledger.test.ts" line="57" assertions="2" />
      <testcase name="a ledger root without a sessions directory reports missing" classname="readLedger" time="0.000166" file="src/sessions/ledger.test.ts" line="63" assertions="1" />
      <testcase name="an armed but empty ledger is present and empty" classname="readLedger" time="0.000261" file="src/sessions/ledger.test.ts" line="68" assertions="2" />
      <testcase name="a schemaVersion 1 entry becomes a record carrying its resume id" classname="readLedger" time="0.000945" file="src/sessions/ledger.test.ts" line="75" assertions="2" />
      <testcase name="a linked worktree reports its own directory as the worktree" classname="readLedger" time="0.000367" file="src/sessions/ledger.test.ts" line="95" assertions="1" />
      <testcase name="a session with no runtime session id yet carries no resume id" classname="readLedger" time="0.001444" file="src/sessions/ledger.test.ts" line="101" assertions="1" />
      <testcase name="the dtach socket is never reported as a tmux target" classname="readLedger" time="0.000238" file="src/sessions/ledger.test.ts" line="107" assertions="2" />
      <testcase name="a human session records the tmux target it can be reopened through" classname="readLedger" time="0.000349" file="src/sessions/ledger.test.ts" line="114" assertions="2" />
      <testcase name="a tmux host discovered from process ancestry becomes a browser target" classname="readLedger" time="0.000259" file="src/sessions/ledger.test.ts" line="126" assertions="2" />
      <testcase name="unparseable and wrong-schema files are reported, not silently dropped" classname="readLedger" time="0.000431" file="src/sessions/ledger.test.ts" line="136" assertions="2" />
      <testcase name="a name readdir lists but whose bytes are gone by read time is skipped, not a crash or a fabricated entry" classname="readLedger" time="0.00034" file="src/sessions/ledger.test.ts" line="145" assertions="2" />
      <testcase name="an unrecognized liveness state is rejected rather than guessed" classname="readLedger" time="0.000285" file="src/sessions/ledger.test.ts" line="156" assertions="2" />
      <testcase name="a classifier that cannot run makes the ledger unavailable, never wrong" classname="readLedger" time="0.000242" file="src/sessions/ledger.test.ts" line="165" assertions="2" />
      <testcase name="host, parent, mux and the classifier&apos;s own verdict all reach the record" classname="readLedger" time="0.004021" file="src/sessions/ledger.test.ts" line="176" assertions="1" />
      <testcase name="recorder fields the panel renders are null until the recorder stamps them, never guessed" classname="readLedger" time="0.000387" file="src/sessions/ledger.test.ts" line="198" assertions="1" />
      <testcase name="recorder-stamped title, activity, launcher and account are carried verbatim" classname="readLedger" time="0.000369" file="src/sessions/ledger.test.ts" line="209" assertions="1" />
      <testcase name="the closer&apos;s own words for why a session ended reach the record verbatim" classname="readLedger" time="0.003275" file="src/sessions/ledger.test.ts" line="226" assertions="1" />
      <testcase name="a session nobody said anything about carries no finish reason" classname="readLedger" time="0.000397" file="src/sessions/ledger.test.ts" line="236" assertions="1" />
      <testcase name="no progress timestamp is ever back-filled from the session&apos;s start time" classname="readLedger" time="0.000306" file="src/sessions/ledger.test.ts" line="242" assertions="2" />
    </testsuite>
    <testsuite name="normalizeRecord" file="src/sessions/ledger.test.ts" line="252" tests="3" assertions="3" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="an entry with no ledger id is rejected" classname="normalizeRecord" time="0.000105" file="src/sessions/ledger.test.ts" line="253" assertions="1" />
      <testcase name="an entry with no cwd is rejected" classname="normalizeRecord" time="0.000085" file="src/sessions/ledger.test.ts" line="257" assertions="1" />
      <testcase name="lowercase and underscored state spellings normalize" classname="normalizeRecord" time="0.000077" file="src/sessions/ledger.test.ts" line="261" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/sessions/hosts.test.ts" file="src/sessions/hosts.test.ts" tests="5" assertions="15" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="host registry" file="src/sessions/hosts.test.ts" line="15" tests="5" assertions="15" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="reads declared enablement without contacting any host" classname="host registry" time="0.000395" file="src/sessions/hosts.test.ts" line="16" assertions="2" />
      <testcase name="reads the registry the workstation module actually ships, extra keys and all" classname="host registry" time="0.000222" file="src/sessions/hosts.test.ts" line="25" assertions="5" />
      <testcase name="an unreadable or malformed registry reads as missing rather than throwing" classname="host registry" time="0.000191" file="src/sessions/hosts.test.ts" line="35" assertions="3" />
      <testcase name="a host outside the registry is unknown, never assumed reachable" classname="host registry" time="0.000157" file="src/sessions/hosts.test.ts" line="41" assertions="3" />
      <testcase name="the registry path honours the same env override as the workstation reader" classname="host registry" time="0.000068" file="src/sessions/hosts.test.ts" line="48" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/sessions/remote.test.ts" file="src/sessions/remote.test.ts" tests="4" assertions="11" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="probeRemoteHosts" file="src/sessions/remote.test.ts" line="28" tests="1" assertions="6" failures="0" skipped="0" time="0.005" hostname="debian1">
      <testcase name="reports ok, ssh failure, invalid output, and registry-disabled hosts without contacting disabled hosts" classname="probeRemoteHosts" time="0.005025" file="src/sessions/remote.test.ts" line="29" assertions="6" />
    </testsuite>
    <testsuite name="remote command execution" file="src/sessions/remote.test.ts" line="55" tests="3" assertions="5" failures="0" skipped="0" time="0.031" hostname="debian1">
      <testcase name="quotes every remote command argument" classname="remote command execution" time="0.000106" file="src/sessions/remote.test.ts" line="56" assertions="1" />
      <testcase name="registry gating refuses unknown and unreachable hosts by name" classname="remote command execution" time="0.000508" file="src/sessions/remote.test.ts" line="63" assertions="2" />
      <testcase name="a hung command is killed and returns an honest timeout" classname="remote command execution" time="0.031254" file="src/sessions/remote.test.ts" line="72" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/sessions/screen.test.ts" file="src/sessions/screen.test.ts" tests="11" assertions="24" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="session screen" file="src/sessions/screen.test.ts" line="85" tests="11" assertions="24" failures="0" skipped="0" time="0.007" hostname="debian1">
      <testcase name="captures the pane of an attachable session" classname="session screen" time="0.004962" file="src/sessions/screen.test.ts" line="86" assertions="3" />
      <testcase name="an unknown session id is refused" classname="session screen" time="0.000279" file="src/sessions/screen.test.ts" line="100" assertions="2" />
      <testcase name="an orphaned session cannot be attached" classname="session screen" time="0.000283" file="src/sessions/screen.test.ts" line="110" assertions="2" />
      <testcase name="a non-loopback bind refuses capture" classname="session screen" time="0.00023" file="src/sessions/screen.test.ts" line="120" assertions="2" />
      <testcase name="a missing tmux binary reports unavailable instead of failing opaquely" classname="session screen" time="0.003183" file="src/sessions/screen.test.ts" line="130" assertions="2" />
      <testcase name="keystrokes are sent literally to the ledger&apos;s tmux target" classname="session screen" time="0.000577" file="src/sessions/screen.test.ts" line="137" assertions="2" />
      <testcase name="named keys are sent without the literal flag" classname="session screen" time="0.000225" file="src/sessions/screen.test.ts" line="150" assertions="1" />
      <testcase name="a tmux failure surfaces its stderr rather than reporting success" classname="session screen" time="0.000199" file="src/sessions/screen.test.ts" line="160" assertions="2" />
      <testcase name="captures a reachable remote pane through registry-resolved ssh with quoted target" classname="session screen" time="0.000482" file="src/sessions/screen.test.ts" line="170" assertions="3" />
      <testcase name="surfaces a remote ssh failure without fabricating a screen" classname="session screen" time="0.000289" file="src/sessions/screen.test.ts" line="190" assertions="3" />
      <testcase name="sendKeys uses the same remote ssh path" classname="session screen" time="0.000268" file="src/sessions/screen.test.ts" line="204" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/incidents/kanboard-client.test.ts" file="src/incidents/kanboard-client.test.ts" tests="8" assertions="8" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="createKanboardClient.call" file="src/incidents/kanboard-client.test.ts" line="8" tests="6" assertions="6" failures="0" skipped="0" time="0.001" hostname="debian1">
      <testcase name="throws on malformed JSON" classname="createKanboardClient.call" time="0.001262" file="src/incidents/kanboard-client.test.ts" line="9" assertions="1" />
      <testcase name="throws when response id is missing" classname="createKanboardClient.call" time="0.000685" file="src/incidents/kanboard-client.test.ts" line="21" assertions="1" />
      <testcase name="throws on response id mismatch" classname="createKanboardClient.call" time="0.000478" file="src/incidents/kanboard-client.test.ts" line="35" assertions="1" />
      <testcase name="includes issue paths when response schema is invalid" classname="createKanboardClient.call" time="0.000913" file="src/incidents/kanboard-client.test.ts" line="54" assertions="1" />
      <testcase name="throws on json-rpc false failure result" classname="createKanboardClient.call" time="0.000402" file="src/incidents/kanboard-client.test.ts" line="80" assertions="1" />
      <testcase name="throws on json-rpc error envelope" classname="createKanboardClient.call" time="0.000468" file="src/incidents/kanboard-client.test.ts" line="92" assertions="1" />
    </testsuite>
    <testsuite name="createKanboardClient.batch" file="src/incidents/kanboard-client.test.ts" line="108" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="fails when batch response is partial" classname="createKanboardClient.batch" time="0.000784" file="src/incidents/kanboard-client.test.ts" line="109" assertions="1" />
      <testcase name="fails when a batch element has false result" classname="createKanboardClient.batch" time="0.000809" file="src/incidents/kanboard-client.test.ts" line="133" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/incidents/dispatch-brief.test.ts" file="src/incidents/dispatch-brief.test.ts" tests="13" assertions="29" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="assembleDispatchBrief" file="src/incidents/dispatch-brief.test.ts" line="102" tests="13" assertions="29" failures="0" skipped="0" time="0.001" hostname="debian1">
      <testcase name="resolves every placeholder for a typed incident" classname="assembleDispatchBrief" time="0.001141" file="src/incidents/dispatch-brief.test.ts" line="103" assertions="13" />
      <testcase name="omits type, skill and similar sections for an untyped incident" classname="assembleDispatchBrief" time="0.000152" file="src/incidents/dispatch-brief.test.ts" line="125" assertions="4" />
      <testcase name="omits type sections for a type id absent from the taxonomy" classname="assembleDispatchBrief" time="0.00013" file="src/incidents/dispatch-brief.test.ts" line="134" assertions="1" />
      <testcase name="throws a named error when taxonomy.json is missing" classname="assembleDispatchBrief" time="0.000245" file="src/incidents/dispatch-brief.test.ts" line="140" assertions="1" />
      <testcase name="throws a named error when dispatch-template.md is missing" classname="assembleDispatchBrief" time="0.000019" file="src/incidents/dispatch-brief.test.ts" line="140" assertions="1" />
      <testcase name="throws a named error when placement-map.md is missing" classname="assembleDispatchBrief" time="0.000011" file="src/incidents/dispatch-brief.test.ts" line="140" assertions="1" />
      <testcase name="throws a named error when never-touch.md is missing" classname="assembleDispatchBrief" time="0.000009" file="src/incidents/dispatch-brief.test.ts" line="140" assertions="1" />
      <testcase name="throws on invalid taxonomy JSON" classname="assembleDispatchBrief" time="0.000088" file="src/incidents/dispatch-brief.test.ts" line="147" assertions="1" />
      <testcase name="throws on an unknown placeholder" classname="assembleDispatchBrief" time="0.000081" file="src/incidents/dispatch-brief.test.ts" line="152" assertions="1" />
      <testcase name="throws on an unclosed template section" classname="assembleDispatchBrief" time="0.000084" file="src/incidents/dispatch-brief.test.ts" line="157" assertions="1" />
      <testcase name="caps similar incidents at three of the same type" classname="assembleDispatchBrief" time="0.000199" file="src/incidents/dispatch-brief.test.ts" line="162" assertions="2" />
      <testcase name="reports an empty knowledge base honestly" classname="assembleDispatchBrief" time="0.000127" file="src/incidents/dispatch-brief.test.ts" line="174" assertions="1" />
      <testcase name="renders unset priority honestly" classname="assembleDispatchBrief" time="0.000186" file="src/incidents/dispatch-brief.test.ts" line="179" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/incidents/bootstrap.test.ts" file="src/incidents/bootstrap.test.ts" tests="7" assertions="29" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="checkIncidentsReadiness" file="src/incidents/bootstrap.test.ts" line="89" tests="7" assertions="29" failures="0" skipped="0" time="0.015" hostname="debian1">
      <testcase name="creates project on bootstrap absent case" classname="checkIncidentsReadiness" time="0.007696" file="src/incidents/bootstrap.test.ts" line="90" assertions="10" />
      <testcase name="is idempotent and makes no redundant writes when already correct" classname="checkIncidentsReadiness" time="0.001524" file="src/incidents/bootstrap.test.ts" line="156" assertions="6" />
      <testcase name="reports drift when project remains public" classname="checkIncidentsReadiness" time="0.001898" file="src/incidents/bootstrap.test.ts" line="186" assertions="3" />
      <testcase name="adds a missing column while keeping readiness ready" classname="checkIncidentsReadiness" time="0.003191" file="src/incidents/bootstrap.test.ts" line="202" assertions="3" />
      <testcase name="adds a missing swimlane while keeping readiness ready" classname="checkIncidentsReadiness" time="0.001962" file="src/incidents/bootstrap.test.ts" line="234" assertions="3" />
      <testcase name="reports degraded readiness on unknown structural drift" classname="checkIncidentsReadiness" time="0.002048" file="src/incidents/bootstrap.test.ts" line="263" assertions="3" />
      <testcase name="does not consider token or auth in error messages" classname="checkIncidentsReadiness" time="0.000501" file="src/incidents/bootstrap.test.ts" line="289" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/incidents/connection.test.ts" file="src/incidents/connection.test.ts" tests="3" assertions="6" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="loadIncidentsConnection" file="src/incidents/connection.test.ts" line="8" tests="3" assertions="6" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="returns null when kanboard env is missing" classname="loadIncidentsConnection" time="0.000284" file="src/incidents/connection.test.ts" line="27" assertions="1" />
      <testcase name="returns null when api token is missing" classname="loadIncidentsConnection" time="0.000401" file="src/incidents/connection.test.ts" line="31" assertions="1" />
      <testcase name="reads token and defaults baseUrl" classname="loadIncidentsConnection" time="0.000161" file="src/incidents/connection.test.ts" line="38" assertions="4" />
    </testsuite>
  </testsuite>
  <testsuite name="src/incidents/provider.test.ts" file="src/incidents/provider.test.ts" tests="8" assertions="22" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="createIncidentsProvider" file="src/incidents/provider.test.ts" line="161" tests="8" assertions="22" failures="0" skipped="0" time="0.013" hostname="debian1">
      <testcase name="resolves readiness lazily" classname="createIncidentsProvider" time="0.000336" file="src/incidents/provider.test.ts" line="162" assertions="1" />
      <testcase name="caches readiness inside the ttl and re-resolves after it" classname="createIncidentsProvider" time="0.005881" file="src/incidents/provider.test.ts" line="169" assertions="2" />
      <testcase name="shares a single in-flight resolution across concurrent callers" classname="createIncidentsProvider" time="0.002207" file="src/incidents/provider.test.ts" line="184" assertions="1" />
      <testcase name="does not cache a failed resolution" classname="createIncidentsProvider" time="0.00176" file="src/incidents/provider.test.ts" line="197" assertions="4" />
      <testcase name="preserves named mutation errors instead of wrapping them as unavailable" classname="createIncidentsProvider" time="0.001798" file="src/incidents/provider.test.ts" line="211" assertions="3" />
      <testcase name="rethrows IncidentOptionsError from loadIncidentOptions during dispatch with same kind/detail" classname="createIncidentsProvider" time="0.002538" file="src/incidents/provider.test.ts" line="229" assertions="5" />
      <testcase name="wraps unrelated loadIncidentOptions failures as IncidentsUnavailableError" classname="createIncidentsProvider" time="0.002489" file="src/incidents/provider.test.ts" line="253" assertions="3" />
      <testcase name="never leaks the token or store address through the failure message" classname="createIncidentsProvider" time="0.000387" file="src/incidents/provider.test.ts" line="274" assertions="3" />
    </testsuite>
  </testsuite>
  <testsuite name="src/incidents/routes.test.ts" file="src/incidents/routes.test.ts" tests="13" assertions="61" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="incident read routes" file="src/incidents/routes.test.ts" line="84" tests="13" assertions="61" failures="0" skipped="0" time="0.139" hostname="debian1">
      <testcase name="returns 404 for both routes when no incident store is configured" classname="incident read routes" time="0.025486" file="src/incidents/routes.test.ts" line="135" assertions="2" />
      <testcase name="requires the bearer token" classname="incident read routes" time="0.003062" file="src/incidents/routes.test.ts" line="142" assertions="2" />
      <testcase name="defaults scope to active and forwards query and priority" classname="incident read routes" time="0.002872" file="src/incidents/routes.test.ts" line="149" assertions="3" />
      <testcase name="rejects an unknown scope or priority without reaching the store" classname="incident read routes" time="0.012363" file="src/incidents/routes.test.ts" line="163" assertions="4" />
      <testcase name="returns a single incident and 404 for an unknown id" classname="incident read routes" time="0.008486" file="src/incidents/routes.test.ts" line="175" assertions="5" />
      <testcase name="decodes the incident id segment" classname="incident read routes" time="0.01227" file="src/incidents/routes.test.ts" line="188" assertions="1" />
      <testcase name="surfaces an unavailable store as 503 on both routes" classname="incident read routes" time="0.00733" file="src/incidents/routes.test.ts" line="195" assertions="4" />
      <testcase name="files and dispatches through dedicated mutation routes" classname="incident read routes" time="0.015259" file="src/incidents/routes.test.ts" line="208" assertions="4" />
      <testcase name="serves taxonomy options and reports missing assets as unavailable" classname="incident read routes" time="0.014793" file="src/incidents/routes.test.ts" line="219" assertions="2" />
      <testcase name="preserves named authority and dispatch errors without partial options 200" classname="incident read routes" time="0.017844" file="src/incidents/routes.test.ts" line="227" assertions="20" />
      <testcase name="requires auth and returns 404 for an unknown incident on the brief route" classname="incident read routes" time="0.009208" file="src/incidents/routes.test.ts" line="304" assertions="3" />
      <testcase name="assembles a fresh brief and prefers the persisted one" classname="incident read routes" time="0.007815" file="src/incidents/routes.test.ts" line="314" assertions="8" />
      <testcase name="surfaces a brief assembly failure as a named refusal, never a bare 500" classname="incident read routes" time="0.008788" file="src/incidents/routes.test.ts" line="336" assertions="3" />
    </testsuite>
  </testsuite>
  <testsuite name="src/incidents/incident-service.test.ts" file="src/incidents/incident-service.test.ts" tests="25" assertions="123" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="incident service" file="src/incidents/incident-service.test.ts" line="248" tests="21" assertions="113" failures="0" skipped="0" time="0.008" hostname="debian1">
      <testcase name="returns no incidents for empty project and does not fetch comments" classname="incident service" time="0.000567" file="src/incidents/incident-service.test.ts" line="249" assertions="3" />
      <testcase name="maps metadata-absent task as filed and keeps null timestamps" classname="incident service" time="0.001055" file="src/incidents/incident-service.test.ts" line="268" assertions="5" />
      <testcase name="marks state mismatch between column and metadata as needs-attention" classname="incident service" time="0.000343" file="src/incidents/incident-service.test.ts" line="301" assertions="2" />
      <testcase name="surfaces priority/swimlane drift without guessing the wrong priority" classname="incident service" time="0.000242" file="src/incidents/incident-service.test.ts" line="327" assertions="3" />
      <testcase name="resolves scope filters without mixing active and resolved" classname="incident service" time="0.002801" file="src/incidents/incident-service.test.ts" line="354" assertions="6" />
      <testcase name="filters by query and priority" classname="incident service" time="0.000579" file="src/incidents/incident-service.test.ts" line="391" assertions="3" />
      <testcase name="maps getAllComments entries with comment field for incident detail" classname="incident service" time="0.000744" file="src/incidents/incident-service.test.ts" line="444" assertions="5" />
      <testcase name="returns null when missing incident is requested" classname="incident service" time="0.000172" file="src/incidents/incident-service.test.ts" line="480" assertions="1" />
      <testcase name="locates a non-numeric incident id through the task reference" classname="incident service" time="0.000254" file="src/incidents/incident-service.test.ts" line="499" assertions="5" />
      <testcase name="refuses a task that belongs to another project" classname="incident service" time="0.00021" file="src/incidents/incident-service.test.ts" line="532" assertions="2" />
      <testcase name="reports bootstrap drift as list coverage" classname="incident service" time="0.000176" file="src/incidents/incident-service.test.ts" line="547" assertions="2" />
      <testcase name="files into the Filed column with matching priority and durable idempotency metadata" classname="incident service" time="0.002542" file="src/incidents/incident-service.test.ts" line="562" assertions="4" />
      <testcase name="dispatches a filed incident, persisting brief and provenance with the dispatch metadata" classname="incident service" time="0.000595" file="src/incidents/incident-service.test.ts" line="585" assertions="5" />
      <testcase name="aborts the dispatch transition when brief assembly throws" classname="incident service" time="0.000921" file="src/incidents/incident-service.test.ts" line="601" assertions="3" />
      <testcase name="aborts before moving the column when brief persistence fails" classname="incident service" time="0.000472" file="src/incidents/incident-service.test.ts" line="616" assertions="3" />
      <testcase name="dispatches without a brief only on explicit override, recording the degraded path" classname="incident service" time="0.000362" file="src/incidents/incident-service.test.ts" line="638" assertions="4" />
      <testcase name="stale/authority matrix preserves named codes and writes zero dispatch state" classname="incident service" time="0.00322" file="src/incidents/incident-service.test.ts" line="660" assertions="40" />
      <testcase name="resolves an incident: writes artifact metadata and moves it to Resolved" classname="incident service" time="0.000689" file="src/incidents/incident-service.test.ts" line="711" assertions="7" />
      <testcase name="re-resolving with the same artifact is a no-op success" classname="incident service" time="0.000257" file="src/incidents/incident-service.test.ts" line="737" assertions="4" />
      <testcase name="re-resolving with a different artifact is a conflict, not an overwrite" classname="incident service" time="0.000963" file="src/incidents/incident-service.test.ts" line="755" assertions="5" />
      <testcase name="resolving an unknown incident throws not-found" classname="incident service" time="0.00015" file="src/incidents/incident-service.test.ts" line="774" assertions="1" />
    </testsuite>
    <testsuite name="fileIncident idempotency" file="src/incidents/incident-service.test.ts" line="783" tests="4" assertions="10" failures="0" skipped="0" time="0.001" hostname="debian1">
      <testcase name="creates the task with its reference in one call and no updateTask" classname="fileIncident idempotency" time="0.001183" file="src/incidents/incident-service.test.ts" line="853" assertions="3" />
      <testcase name="concurrent duplicate filings create exactly one task" classname="fileIncident idempotency" time="0.000488" file="src/incidents/incident-service.test.ts" line="865" assertions="3" />
      <testcase name="adopts and repairs a task whose metadata write never landed" classname="fileIncident idempotency" time="0.000355" file="src/incidents/incident-service.test.ts" line="879" assertions="3" />
      <testcase name="still rejects a request id reused with a different payload" classname="fileIncident idempotency" time="0.000236" file="src/incidents/incident-service.test.ts" line="892" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/incidents/dispatch-options.test.ts" file="src/incidents/dispatch-options.test.ts" tests="7" assertions="39" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="incident dispatch options" file="src/incidents/dispatch-options.test.ts" line="65" tests="7" assertions="39" failures="0" skipped="0" time="0.017" hostname="debian1">
      <testcase name="joins deployed authority without incident history and keeps wrapper mappings private" classname="incident dispatch options" time="0.002259" file="src/incidents/dispatch-options.test.ts" line="66" assertions="2" />
      <testcase name="profile joins via loader; fixed-account join stays on materialize seam" classname="incident dispatch options" time="0.000514" file="src/incidents/dispatch-options.test.ts" line="87" assertions="3" />
      <testcase name="loadIncidentOptions rejects tampered deployed v1 that switches codex to fixed" classname="incident dispatch options" time="0.000692" file="src/incidents/dispatch-options.test.ts" line="105" assertions="1" />
      <testcase name="validates the shipped Codex capability against the adapter registry" classname="incident dispatch options" time="0.010012" file="src/incidents/dispatch-options.test.ts" line="114" assertions="1" />
      <testcase name="trust-boundary matrix fails closed for unknown version/shape and scoped duplicates" classname="incident dispatch options" time="0.002125" file="src/incidents/dispatch-options.test.ts" line="135" assertions="20" />
      <testcase name="trust-boundary matrix fails closed for adapter/wrapper/model emptiness and registry faults" classname="incident dispatch options" time="0.003729" file="src/incidents/dispatch-options.test.ts" line="179" assertions="10" />
      <testcase name="rejects self-declared non-v1 capabilities and unregistered selections" classname="incident dispatch options" time="0.00067" file="src/incidents/dispatch-options.test.ts" line="213" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/incidents/kanboard-live.integration.test.ts" file="src/incidents/kanboard-live.integration.test.ts" tests="2" assertions="0" failures="0" skipped="2" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="checkIncidentsReadiness (live Kanboard)" file="src/incidents/kanboard-live.integration.test.ts" line="29" tests="2" assertions="0" failures="0" skipped="2" time="0" hostname="debian1">
      <testcase name="bootstraps with real store idempotently and validates measured shape" classname="checkIncidentsReadiness (live Kanboard)" time="0" file="src/incidents/kanboard-live.integration.test.ts" line="30" assertions="0">
        <skipped />
      </testcase>
      <testcase name="projects real tasks through the incident read path" classname="checkIncidentsReadiness (live Kanboard)" time="0" file="src/incidents/kanboard-live.integration.test.ts" line="77" assertions="0">
        <skipped />
      </testcase>
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/factory.test.ts" file="src/adapters/factory.test.ts" tests="27" assertions="153" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="createFactoryAdapter" file="src/adapters/factory.test.ts" line="370" tests="27" assertions="153" failures="0" skipped="0" time="0.28" hostname="debian1">
      <testcase name="keeps core run data when optional trace tables are absent" classname="createFactoryAdapter" time="0.006752" file="src/adapters/factory.test.ts" line="371" assertions="10" />
      <testcase name="propagates runSlug from sessions.run_slug" classname="createFactoryAdapter" time="0.004016" file="src/adapters/factory.test.ts" line="396" assertions="3" />
      <testcase name="returns null runSlug when sessions.run_slug column is absent" classname="createFactoryAdapter" time="0.00312" file="src/adapters/factory.test.ts" line="411" assertions="3" />
      <testcase name="propagates repoName from sessions.repo_name" classname="createFactoryAdapter" time="0.003173" file="src/adapters/factory.test.ts" line="441" assertions="4" />
      <testcase name="returns null repoName when sessions.repo_name column is absent" classname="createFactoryAdapter" time="0.002968" file="src/adapters/factory.test.ts" line="457" assertions="4" />
      <testcase name="discovers an optional trace table created in the same db file after polling" classname="createFactoryAdapter" time="0.010338" file="src/adapters/factory.test.ts" line="489" assertions="11" />
      <testcase name="discovers an optional column added in the same db file after polling" classname="createFactoryAdapter" time="0.007579" file="src/adapters/factory.test.ts" line="527" assertions="6" />
      <testcase name="prefers attempt model and exposes account while legacy attempt columns stay optional" classname="createFactoryAdapter" time="0.007808" file="src/adapters/factory.test.ts" line="556" assertions="6" />
      <testcase name="computes idle time only for running attempts with heartbeat data" classname="createFactoryAdapter" time="0.004976" file="src/adapters/factory.test.ts" line="597" assertions="4" />
      <testcase name="surfaces attempts, phase durations, and parsed or raw gate checks from legacy columns" classname="createFactoryAdapter" time="0.006548" file="src/adapters/factory.test.ts" line="628" assertions="8" />
      <testcase name="surfaces phase diffs and owned processes" classname="createFactoryAdapter" time="0.012094" file="src/adapters/factory.test.ts" line="660" assertions="5" />
      <testcase name="uses empty violations for malformed gate JSON" classname="createFactoryAdapter" time="0.003887" file="src/adapters/factory.test.ts" line="714" assertions="3" />
      <testcase name="uses empty violations when the legacy gate table has no violations column" classname="createFactoryAdapter" time="0.006699" file="src/adapters/factory.test.ts" line="730" assertions="3" />
      <testcase name="surfaces ordered tool calls with safe parsed args and timeout kind" classname="createFactoryAdapter" time="0.007309" file="src/adapters/factory.test.ts" line="751" assertions="4" />
      <testcase name="returns an empty panel when the db file is absent" classname="createFactoryAdapter" time="0.000271" file="src/adapters/factory.test.ts" line="801" assertions="4" />
      <testcase name="projects completed and running runs from two repos with phase spend and tokens" classname="createFactoryAdapter" time="0.007363" file="src/adapters/factory.test.ts" line="812" assertions="21" />
      <testcase name="emits a halt item for failed runs without invented actions" classname="createFactoryAdapter" time="0.003103" file="src/adapters/factory.test.ts" line="909" assertions="3" />
      <testcase name="pages the global rowid cursor beyond 500 events without duplicates on repeat polls" classname="createFactoryAdapter" time="0.084881" file="src/adapters/factory.test.ts" line="931" assertions="8" />
      <testcase name="does not skip cross-session events when a new session bootstraps after an incremental event" classname="createFactoryAdapter" time="0.036401" file="src/adapters/factory.test.ts" line="965" assertions="9" />
      <testcase name="preserves open db and cursor across mtime/size changes but rebuilds on inode replacement" classname="createFactoryAdapter" time="0.020558" file="src/adapters/factory.test.ts" line="1008" assertions="10" />
      <testcase name="rebuilds safely after db replacement and schema reset" classname="createFactoryAdapter" time="0.028229" file="src/adapters/factory.test.ts" line="1071" assertions="7" />
      <testcase name="opens the database readonly and never writes" classname="createFactoryAdapter" time="0.001663" file="src/adapters/factory.test.ts" line="1114" assertions="1" />
      <testcase name="documents the completed-session cap consistent with the visualizer" classname="createFactoryAdapter" time="0.000037" file="src/adapters/factory.test.ts" line="1136" assertions="1" />
      <testcase name="projects pending decisions as inbox items with factory answer actions" classname="createFactoryAdapter" time="0.010028" file="src/adapters/factory.test.ts" line="1140" assertions="9" />
      <testcase name="does not project answered or canceled decisions" classname="createFactoryAdapter" time="0.005142" file="src/adapters/factory.test.ts" line="1209" assertions="1" />
      <testcase name="projects pending decisions across multiple repos" classname="createFactoryAdapter" time="0.003303" file="src/adapters/factory.test.ts" line="1240" assertions="2" />
      <testcase name="panel runs carry the full decision history including answered decisions" classname="createFactoryAdapter" time="0.003262" file="src/adapters/factory.test.ts" line="1281" assertions="3" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/systray.test.ts" file="src/adapters/systray.test.ts" tests="11" assertions="37" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="createSystrayAdapter" file="src/adapters/systray.test.ts" line="40" tests="11" assertions="37" failures="0" skipped="0" time="0.002" hostname="debian1">
      <testcase name="linear-projection ETA from 60% -&gt; 70% -&gt; 78% over 30 minutes" classname="createSystrayAdapter" time="0.00242" file="src/adapters/systray.test.ts" line="41" assertions="7" />
      <testcase name="panel exposes percent, status, spend, window per account" classname="createSystrayAdapter" time="0.000251" file="src/adapters/systray.test.ts" line="70" assertions="7" />
      <testcase name="percent &gt;= threshold triggers warn item even with single sample (no ETA)" classname="createSystrayAdapter" time="0.000231" file="src/adapters/systray.test.ts" line="96" assertions="3" />
      <testcase name="ETA &lt; threshold triggers warn item even when percent is below percentWarn" classname="createSystrayAdapter" time="0.000216" file="src/adapters/systray.test.ts" line="106" assertions="5" />
      <testcase name="declarative auto-resolve: warn item is simply omitted once back under threshold" classname="createSystrayAdapter" time="0.0003" file="src/adapters/systray.test.ts" line="127" assertions="3" />
      <testcase name="stale snapshot: panel marked stale, no alert items emitted despite over-threshold data" classname="createSystrayAdapter" time="0.000383" file="src/adapters/systray.test.ts" line="142" assertions="3" />
      <testcase name="fresh snapshot within stale_after_s: panel not stale" classname="createSystrayAdapter" time="0.000189" file="src/adapters/systray.test.ts" line="159" assertions="1" />
      <testcase name="tolerates one atomic-rename race by retrying the read once" classname="createSystrayAdapter" time="0.000277" file="src/adapters/systray.test.ts" line="173" assertions="2" />
      <testcase name="uses accounts.json alias as the display label" classname="createSystrayAdapter" time="0.000229" file="src/adapters/systray.test.ts" line="196" assertions="2" />
      <testcase name="propagates failure when the read fails twice in a row (retry-once only)" classname="createSystrayAdapter" time="0.000276" file="src/adapters/systray.test.ts" line="219" assertions="1" />
      <testcase name="merges codex and claude health caches with provider-prefixed labels" classname="createSystrayAdapter" time="0.000287" file="src/adapters/systray.test.ts" line="232" assertions="3" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/sessions.test.ts" file="src/adapters/sessions.test.ts" tests="28" assertions="56" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="sessions adapter" file="src/adapters/sessions.test.ts" line="83" tests="23" assertions="46" failures="0" skipped="0" time="0.02" hostname="debian1">
      <testcase name="never groups a session under the home directory just because the repo walk landed there" classname="sessions adapter" time="0.000745" file="src/adapters/sessions.test.ts" line="84" assertions="2" />
      <testcase name="keeps a real repo root as the grouping key" classname="sessions adapter" time="0.000144" file="src/adapters/sessions.test.ts" line="92" assertions="1" />
      <testcase name="empty ledger yields an empty panel that names the directory" classname="sessions adapter" time="0.00013" file="src/adapters/sessions.test.ts" line="97" assertions="4" />
      <testcase name="sorts most-recently-active first" classname="sessions adapter" time="0.000209" file="src/adapters/sessions.test.ts" line="105" assertions="1" />
      <testcase name="sorts by classifier activity, not by the record&apos;s own heartbeat" classname="sessions adapter" time="0.017361" file="src/adapters/sessions.test.ts" line="115" assertions="1" />
      <testcase name="groups by the absolute project root, not a repo nickname" classname="sessions adapter" time="0.000257" file="src/adapters/sessions.test.ts" line="125" assertions="1" />
      <testcase name="carries every recorder field the panel renders, absent ones as null" classname="sessions adapter" time="0.00017" file="src/adapters/sessions.test.ts" line="132" assertions="1" />
      <testcase name="a tmux-hosted live session attaches in the browser and reopens from a terminal" classname="sessions adapter" time="0.00014" file="src/adapters/sessions.test.ts" line="148" assertions="2" />
      <testcase name="a dtach-wrapped live session reopens from a terminal but cannot render a screen" classname="sessions adapter" time="0.000153" file="src/adapters/sessions.test.ts" line="158" assertions="3" />
      <testcase name="a live session with no multiplexer says why it cannot be reopened" classname="sessions adapter" time="0.000258" file="src/adapters/sessions.test.ts" line="173" assertions="1" />
      <testcase name="a finished claude session resumes by runtime id, with the account when one was recorded" classname="sessions adapter" time="0.000185" file="src/adapters/sessions.test.ts" line="183" assertions="2" />
      <testcase name="codex and cursor-agent resume with their own verbs, never claude&apos;s" classname="sessions adapter" time="0.000185" file="src/adapters/sessions.test.ts" line="197" assertions="2" />
      <testcase name="an unknown runtime is refused by name rather than given claude&apos;s verb" classname="sessions adapter" time="0.000137" file="src/adapters/sessions.test.ts" line="205" assertions="1" />
      <testcase name="a session with no runtime id cannot be resumed and says so" classname="sessions adapter" time="0.000139" file="src/adapters/sessions.test.ts" line="213" assertions="1" />
      <testcase name="a registry-reachable off-host tmux session reconnects and renders over ssh" classname="sessions adapter" time="0.000197" file="src/adapters/sessions.test.ts" line="221" assertions="3" />
      <testcase name="a registry-disabled host is refused from static data, never probed" classname="sessions adapter" time="0.000156" file="src/adapters/sessions.test.ts" line="232" assertions="2" />
      <testcase name="a host absent from the registry is reported unknown, not assumed reachable" classname="sessions adapter" time="0.000142" file="src/adapters/sessions.test.ts" line="246" assertions="3" />
      <testcase name="orphaned sessions cannot render a screen and say why" classname="sessions adapter" time="0.000112" file="src/adapters/sessions.test.ts" line="253" assertions="2" />
      <testcase name="a missing tmux binary blocks the browser screen with a named reason" classname="sessions adapter" time="0.000113" file="src/adapters/sessions.test.ts" line="259" assertions="2" />
      <testcase name="a non-loopback bind disables the browser screen for every session" classname="sessions adapter" time="0.000165" file="src/adapters/sessions.test.ts" line="265" assertions="4" />
      <testcase name="a missing host registry is reported, not silently treated as empty" classname="sessions adapter" time="0.003261" file="src/adapters/sessions.test.ts" line="277" assertions="2" />
      <testcase name="poll does not await probes, then merges cached remote records with remote collisions winning" classname="sessions adapter" time="0.000593" file="src/adapters/sessions.test.ts" line="283" assertions="3" />
      <testcase name="sessionFromPanel resolves only ids present in the snapshot" classname="sessions adapter" time="0.000157" file="src/adapters/sessions.test.ts" line="306" assertions="2" />
    </testsuite>
    <testsuite name="resume ids held by a live session" file="src/adapters/sessions.test.ts" line="313" tests="3" assertions="7" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="a stopped entry sharing a live session&apos;s id refuses to resume and names the holder" classname="resume ids held by a live session" time="0.000201" file="src/adapters/sessions.test.ts" line="316" assertions="4" />
      <testcase name="stopped entries with no live holder stay resumable" classname="resume ids held by a live session" time="0.000145" file="src/adapters/sessions.test.ts" line="330" assertions="2" />
      <testcase name="the same id under a different runtime is not treated as held" classname="resume ids held by a live session" time="0.000168" file="src/adapters/sessions.test.ts" line="341" assertions="1" />
    </testsuite>
    <testsuite name="attach posture" file="src/adapters/sessions.test.ts" line="352" tests="2" assertions="3" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="default config binds loopback and allows attach" classname="attach posture" time="0.000182" file="src/adapters/sessions.test.ts" line="353" assertions="1" />
      <testcase name="tailnet bind refuses attach instead of inheriting it" classname="attach posture" time="0.000087" file="src/adapters/sessions.test.ts" line="357" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/sandbox-toolgap.test.ts" file="src/adapters/sandbox-toolgap.test.ts" tests="8" assertions="17" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="aggregateGaps" file="src/adapters/sandbox-toolgap.test.ts" line="30" tests="4" assertions="10" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="collapses repeat hits of one tool into one gap" classname="aggregateGaps" time="0.000417" file="src/adapters/sandbox-toolgap.test.ts" line="31" assertions="6" />
      <testcase name="drops records from an image that is no longer deployed" classname="aggregateGaps" time="0.000049" file="src/adapters/sandbox-toolgap.test.ts" line="48" assertions="1" />
      <testcase name="skips malformed lines instead of failing the poll" classname="aggregateGaps" time="0.000295" file="src/adapters/sandbox-toolgap.test.ts" line="52" assertions="2" />
      <testcase name="orders by hit count then name" classname="aggregateGaps" time="0.000109" file="src/adapters/sandbox-toolgap.test.ts" line="58" assertions="1" />
    </testsuite>
    <testsuite name="createSandboxToolgapAdapter" file="src/adapters/sandbox-toolgap.test.ts" line="67" tests="4" assertions="7" failures="0" skipped="0" time="0.002" hostname="debian1">
      <testcase name="one item per tool, keyed on the tool name" classname="createSandboxToolgapAdapter" time="0.002051" file="src/adapters/sandbox-toolgap.test.ts" line="68" assertions="2" />
      <testcase name="gaps retire once the image is rebuilt under a new tag" classname="createSandboxToolgapAdapter" time="0.000208" file="src/adapters/sandbox-toolgap.test.ts" line="81" assertions="2" />
      <testcase name="stays silent until a sandbox image has been provisioned" classname="createSandboxToolgapAdapter" time="0.000084" file="src/adapters/sandbox-toolgap.test.ts" line="91" assertions="1" />
      <testcase name="reports no gaps when nothing has been recorded yet" classname="createSandboxToolgapAdapter" time="0.000094" file="src/adapters/sandbox-toolgap.test.ts" line="96" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/gates.test.ts" file="src/adapters/gates.test.ts" tests="11" assertions="55" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="createGatesAdapter" file="src/adapters/gates.test.ts" line="57" tests="11" assertions="55" failures="0" skipped="0" time="0.002" hostname="debian1">
      <testcase name="id defaults to gates with a sane default interval" classname="createGatesAdapter" time="0.000077" file="src/adapters/gates.test.ts" line="58" assertions="2" />
      <testcase name="emits gates panel with prevent open count, slopgate debt total and 7-day trend" classname="createGatesAdapter" time="0.002082" file="src/adapters/gates.test.ts" line="70" assertions="9" />
      <testcase name="emits gate items for each confirmed prevent-band finding" classname="createGatesAdapter" time="0.000442" file="src/adapters/gates.test.ts" line="106" assertions="3" />
      <testcase name="emits gate decision items for warnignore additions awaiting sign-off" classname="createGatesAdapter" time="0.000861" file="src/adapters/gates.test.ts" line="125" assertions="2" />
      <testcase name="successful poll omits an item when its condition no longer holds (snapshot contract)" classname="createGatesAdapter" time="0.000399" file="src/adapters/gates.test.ts" line="152" assertions="2" />
      <testcase name="throws when confirmed.json cannot be read so prior state is retained" classname="createGatesAdapter" time="0.000284" file="src/adapters/gates.test.ts" line="167" assertions="1" />
      <testcase name="throws when precision records cannot be read" classname="createGatesAdapter" time="0.000187" file="src/adapters/gates.test.ts" line="181" assertions="1" />
      <testcase name="throws when a slopgate baseline exists but is unreadable" classname="createGatesAdapter" time="0.000412" file="src/adapters/gates.test.ts" line="193" assertions="1" />
      <testcase name="throws when a configured slopgate baseline is missing" classname="createGatesAdapter" time="0.000224" file="src/adapters/gates.test.ts" line="210" assertions="1" />
      <testcase name="throws when baseline git history cannot be read" classname="createGatesAdapter" time="0.000296" file="src/adapters/gates.test.ts" line="227" assertions="1" />
      <testcase name="uses argv-array git invocation, never a shell string" classname="createGatesAdapter" time="0.000827" file="src/adapters/gates.test.ts" line="238" assertions="32" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/kubernetes.test.ts" file="src/adapters/kubernetes.test.ts" tests="4" assertions="19" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="kubernetes projection contracts" file="src/adapters/kubernetes.test.ts" line="27" tests="4" assertions="19" failures="0" skipped="0" time="0.005" hostname="debian1">
      <testcase name="covers exact, host-only, unplaced, conflicting, expired and partial-source cases without invented metrics" classname="kubernetes projection contracts" time="0.003471" file="src/adapters/kubernetes.test.ts" line="28" assertions="11" />
      <testcase name="an absent ledger reports absent and fabricates no session placement" classname="kubernetes projection contracts" time="0.000331" file="src/adapters/kubernetes.test.ts" line="43" assertions="3" />
      <testcase name="reads the canonical annotation from the real launcher Job and Pod template shape" classname="kubernetes projection contracts" time="0.000587" file="src/adapters/kubernetes.test.ts" line="50" assertions="3" />
      <testcase name="adapter reports partial namespaces and reads only closed API paths" classname="kubernetes projection contracts" time="0.002565" file="src/adapters/kubernetes.test.ts" line="59" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/golive.test.ts" file="src/adapters/golive.test.ts" tests="17" assertions="128" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="createGoliveAdapter" file="src/adapters/golive.test.ts" line="55" tests="17" assertions="128" failures="0" skipped="0" time="0.014" hostname="debian1">
      <testcase name="id defaults to golive with a sane default interval" classname="createGoliveAdapter" time="0.00015" file="src/adapters/golive.test.ts" line="56" assertions="2" />
      <testcase name="counts works/total from checkbox lines, excluding a decoy inside a fenced code block" classname="createGoliveAdapter" time="0.006136" file="src/adapters/golive.test.ts" line="62" assertions="6" />
      <testcase name="parses verdict tags: works=WORKS-count, 4-way breakdown, per-criterion rows, fenced decoy excluded" classname="createGoliveAdapter" time="0.000622" file="src/adapters/golive.test.ts" line="84" assertions="9" />
      <testcase name="reachedAt: committed criterion line gets its commit date; uncommitted (zero-SHA) line stays null" classname="createGoliveAdapter" time="0.00265" file="src/adapters/golive.test.ts" line="129" assertions="2" />
      <testcase name="computes 7-day trend from a fake git log: works 7 days ago vs now" classname="createGoliveAdapter" time="0.000529" file="src/adapters/golive.test.ts" line="166" assertions="1" />
      <testcase name="no commit found before the 7-day cutoff: trend falls back to current works count" classname="createGoliveAdapter" time="0.000317" file="src/adapters/golive.test.ts" line="194" assertions="1" />
      <testcase name="churn threshold: commitsSinceLastWorksDelta at threshold is not churn" classname="createGoliveAdapter" time="0.002285" file="src/adapters/golive.test.ts" line="214" assertions="2" />
      <testcase name="churn threshold: commitsSinceLastWorksDelta over threshold fires churn" classname="createGoliveAdapter" time="0.000567" file="src/adapters/golive.test.ts" line="237" assertions="2" />
      <testcase name="a missing or unreadable GOLIVE.md drops that repo from the panel without throwing; other repos survive" classname="createGoliveAdapter" time="0.000542" file="src/adapters/golive.test.ts" line="260" assertions="2" />
      <testcase name="empty git history (untracked GOLIVE.md) is tolerated: zero trend, no churn" classname="createGoliveAdapter" time="0.00136" file="src/adapters/golive.test.ts" line="280" assertions="3" />
      <testcase name="sourceUpdatedAt: newest GOLIVE.md commit date, normalised to an ISO instant" classname="createGoliveAdapter" time="0.000523" file="src/adapters/golive.test.ts" line="300" assertions="1" />
      <testcase name="sourceUpdatedAt: never-committed GOLIVE.md stays null" classname="createGoliveAdapter" time="0.003336" file="src/adapters/golive.test.ts" line="317" assertions="1" />
      <testcase name="scores from origin/main when the remote branch exists — working tree never shadows it" classname="createGoliveAdapter" time="0.000957" file="src/adapters/golive.test.ts" line="334" assertions="2" />
      <testcase name="origin/main derivation anchors history reads to the ref" classname="createGoliveAdapter" time="0.000485" file="src/adapters/golive.test.ts" line="355" assertions="12" />
      <testcase name="no remote branch: falls back to the working tree and HEAD-anchored history" classname="createGoliveAdapter" time="0.000292" file="src/adapters/golive.test.ts" line="385" assertions="1" />
      <testcase name="emits no items — panel only" classname="createGoliveAdapter" time="0.000308" file="src/adapters/golive.test.ts" line="399" assertions="1" />
      <testcase name="uses argv-array git invocation, never a shell string" classname="createGoliveAdapter" time="0.000482" file="src/adapters/golive.test.ts" line="412" assertions="80" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/agent-sessions.test.ts" file="src/adapters/agent-sessions.test.ts" tests="10" assertions="27" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="createAgentSessionsAdapter" file="src/adapters/agent-sessions.test.ts" line="71" tests="10" assertions="27" failures="0" skipped="0" time="0.001" hostname="debian1">
      <testcase name="ORPHANED with dirty files -&gt; act/alert item" classname="createAgentSessionsAdapter" time="0.001214" file="src/adapters/agent-sessions.test.ts" line="72" assertions="5" />
      <testcase name="ORPHANED with no dirty files -&gt; warn/alert item" classname="createAgentSessionsAdapter" time="0.000255" file="src/adapters/agent-sessions.test.ts" line="84" assertions="3" />
      <testcase name="DETACHED-ALIVE -&gt; warn/progress item with attach action" classname="createAgentSessionsAdapter" time="0.000214" file="src/adapters/agent-sessions.test.ts" line="94" assertions="5" />
      <testcase name="ALIVE-WORKING and ALIVE-IDLE -&gt; info/progress items" classname="createAgentSessionsAdapter" time="0.000216" file="src/adapters/agent-sessions.test.ts" line="108" assertions="5" />
      <testcase name="FINISHED session excluded from items but present in panel within 24h" classname="createAgentSessionsAdapter" time="0.00015" file="src/adapters/agent-sessions.test.ts" line="122" assertions="2" />
      <testcase name="FINISHED session older than retention window excluded from panel too" classname="createAgentSessionsAdapter" time="0.000257" file="src/adapters/agent-sessions.test.ts" line="133" assertions="1" />
      <testcase name="completeScopes always includes agent-sessions on a successful poll" classname="createAgentSessionsAdapter" time="0.000115" file="src/adapters/agent-sessions.test.ts" line="143" assertions="1" />
      <testcase name="skips corrupt JSON and wrong-schemaVersion files, keeps parsable ones (warn once)" classname="createAgentSessionsAdapter" time="0.000504" file="src/adapters/agent-sessions.test.ts" line="148" assertions="2" />
      <testcase name="classify import/impl failure -&gt; poll throws (adapter.ts: retains previously known state)" classname="createAgentSessionsAdapter" time="0.000182" file="src/adapters/agent-sessions.test.ts" line="171" assertions="1" />
      <testcase name="groups panel sessions per project, newest lastProgressAt first" classname="createAgentSessionsAdapter" time="0.000255" file="src/adapters/agent-sessions.test.ts" line="186" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/harness.test.ts" file="src/adapters/harness.test.ts" tests="47" assertions="156" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="timeline fixtures match the generator&apos;s invariants" file="src/adapters/harness.test.ts" line="109" tests="2" assertions="12" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="timeline-opt-data-integrity.json: every segment falls inside a run window" classname="timeline fixtures match the generator&amp;apos;s invariants" time="0.000398" file="src/adapters/harness.test.ts" line="113" assertions="8" />
      <testcase name="timeline-grok-account-parity.json: every segment falls inside a run window" classname="timeline fixtures match the generator&amp;apos;s invariants" time="0.000083" file="src/adapters/harness.test.ts" line="113" assertions="4" />
    </testsuite>
    <testsuite name="createHarnessAdapter" file="src/adapters/harness.test.ts" line="137" tests="45" assertions="144" failures="0" skipped="0" time="0.166" hostname="debian1">
      <testcase name="projects ordered queue entries losslessly without fabricated run fields" classname="createHarnessAdapter" time="0.006497" file="src/adapters/harness.test.ts" line="138" assertions="4" />
      <testcase name="rejects failed or invalid queue reads so collector retains prior plans state" classname="createHarnessAdapter" time="0.002556" file="src/adapters/harness.test.ts" line="190" assertions="3" />
      <testcase name="keeps legacy plans output free of every observability field" classname="createHarnessAdapter" time="0.00183" file="src/adapters/harness.test.ts" line="214" assertions="6" />
      <testcase name="projects enriched observability reads losslessly without defaults" classname="createHarnessAdapter" time="0.001859" file="src/adapters/harness.test.ts" line="226" assertions="5" />
      <testcase name="redacts credential-like config values while retaining field metadata" classname="createHarnessAdapter" time="0.000365" file="src/adapters/harness.test.ts" line="257" assertions="3" />
      <testcase name="redacts nested credentials from every JSON browser egress surface" classname="createHarnessAdapter" time="0.000674" file="src/adapters/harness.test.ts" line="276" assertions="6" />
      <testcase name="streams task SSE without applying request timeout and preserves opaque cursors" classname="createHarnessAdapter" time="0.000625" file="src/adapters/harness.test.ts" line="298" assertions="3" />
      <testcase name="sends task, run, and config controls with observed IDs and revisions" classname="createHarnessAdapter" time="0.000675" file="src/adapters/harness.test.ts" line="315" assertions="3" />
      <testcase name="rejects malformed wire payloads and retains upstream status plus redacted body" classname="createHarnessAdapter" time="0.000316" file="src/adapters/harness.test.ts" line="343" assertions="2" />
      <testcase name="accepts run-scoped events and rejects unchecked enriched wire values" classname="createHarnessAdapter" time="0.000743" file="src/adapters/harness.test.ts" line="351" assertions="5" />
      <testcase name="builds a plans panel from /runs with waves grouped from the DAG" classname="createHarnessAdapter" time="0.001125" file="src/adapters/harness.test.ts" line="374" assertions="12" />
      <testcase name="forwards honest defaults when repo metadata is absent" classname="createHarnessAdapter" time="0.00091" file="src/adapters/harness.test.ts" line="458" assertions="2" />
      <testcase name="forwards the persisted abandoned timestamp without fabrication" classname="createHarnessAdapter" time="0.001166" file="src/adapters/harness.test.ts" line="478" assertions="2" />
      <testcase name="emits a halt item for a run whose status requires human intervention" classname="createHarnessAdapter" time="0.000911" file="src/adapters/harness.test.ts" line="491" assertions="3" />
      <testcase name="does not emit harness decision inbox items" classname="createHarnessAdapter" time="0.000844" file="src/adapters/harness.test.ts" line="510" assertions="1" />
      <testcase name="does not emit a liveness alert when an attempt is within budget with recent heartbeats" classname="createHarnessAdapter" time="0.001298" file="src/adapters/harness.test.ts" line="582" assertions="4" />
      <testcase name="emits a liveness alert when attempt elapsed exceeds 2x timeoutSecs" classname="createHarnessAdapter" time="0.001041" file="src/adapters/harness.test.ts" line="611" assertions="4" />
      <testcase name="emits an alert when active-run attempt coverage is unavailable" classname="createHarnessAdapter" time="0.001128" file="src/adapters/harness.test.ts" line="645" assertions="1" />
      <testcase name="emits a liveness alert when heartbeat gap exceeds 180s while still in progress" classname="createHarnessAdapter" time="0.000602" file="src/adapters/harness.test.ts" line="662" assertions="2" />
      <testcase name="never emits a liveness alert for a completed attempt regardless of elapsed time" classname="createHarnessAdapter" time="0.00066" file="src/adapters/harness.test.ts" line="685" assertions="2" />
      <testcase name="alarms only the stale attempt when concurrent in-progress attempts share a fresh run.updatedAt" classname="createHarnessAdapter" time="0.000655" file="src/adapters/harness.test.ts" line="705" assertions="2" />
      <testcase name="computes per-run staleness from the newest journal and heartbeat timestamps" classname="createHarnessAdapter" time="0.000137" file="src/adapters/harness.test.ts" line="734" assertions="6" />
      <testcase name="flags a run alarmed by run-level staleness when journal and heartbeat are both stale" classname="createHarnessAdapter" time="0.000694" file="src/adapters/harness.test.ts" line="749" assertions="3" />
      <testcase name="does not flag run-level staleness when journal coverage is unavailable" classname="createHarnessAdapter" time="0.000643" file="src/adapters/harness.test.ts" line="781" assertions="1" />
      <testcase name="computes exact bucket sums for the forensics panel from the fixture timeline" classname="createHarnessAdapter" time="0.000959" file="src/adapters/harness.test.ts" line="805" assertions="3" />
      <testcase name="poll rejects when the harness control-api is unreachable, so the reconciler retains all prior state" classname="createHarnessAdapter" time="0.000288" file="src/adapters/harness.test.ts" line="828" assertions="1" />
      <testcase name="aborts a hung control-api request after the configured timeout" classname="createHarnessAdapter" time="0.020506" file="src/adapters/harness.test.ts" line="837" assertions="1" />
      <testcase name="caps concurrent decisions and timeline requests" classname="createHarnessAdapter" time="0.108933" file="src/adapters/harness.test.ts" line="857" assertions="1" />
      <testcase name="poll succeeds when a run&apos;s decisions endpoint would fail because decisions are not polled for inbox items" classname="createHarnessAdapter" time="0.001415" file="src/adapters/harness.test.ts" line="889" assertions="1" />
      <testcase name="stays zero-throw when only the timeline endpoint fails — the forensics panel just stays stale" classname="createHarnessAdapter" time="0.004001" file="src/adapters/harness.test.ts" line="904" assertions="4" />
      <testcase name="proxies decision answers with the bearer token and JSON body" classname="createHarnessAdapter" time="0.000711" file="src/adapters/harness.test.ts" line="923" assertions="4" />
      <testcase name="redacts nested credentials from decision answer responses" classname="createHarnessAdapter" time="0.000278" file="src/adapters/harness.test.ts" line="936" assertions="2" />
      <testcase name="proxies steer requests with the bearer token and JSON body" classname="createHarnessAdapter" time="0.000532" file="src/adapters/harness.test.ts" line="948" assertions="4" />
      <testcase name="discards nested credentials from closed steer responses" classname="createHarnessAdapter" time="0.000269" file="src/adapters/harness.test.ts" line="961" assertions="2" />
      <testcase name="attaches the bearer token to every GET call during poll()" classname="createHarnessAdapter" time="0.000776" file="src/adapters/harness.test.ts" line="981" assertions="10" />
      <testcase name="re-reads the control-api pointer for each poll" classname="createHarnessAdapter" time="0.003984" file="src/adapters/harness.test.ts" line="993" assertions="1" />
      <testcase name="invalidates discovered connections on network failures and timeouts" classname="createHarnessAdapter" time="0.000541" file="src/adapters/harness.test.ts" line="1009" assertions="3" />
      <testcase name="classifies 401 separately from other status and JSON failures" classname="createHarnessAdapter" time="0.000543" file="src/adapters/harness.test.ts" line="1029" assertions="6" />
      <testcase name="invalidates discovered connections when reading a response body fails" classname="createHarnessAdapter" time="0.006465" file="src/adapters/harness.test.ts" line="1051" assertions="2" />
      <testcase name="keeps a newer generation when an older in-flight request fails" classname="createHarnessAdapter" time="0.004533" file="src/adapters/harness.test.ts" line="1071" assertions="2" />
      <testcase name="pins a poll and established SSE stream to their starting connection" classname="createHarnessAdapter" time="0.001463" file="src/adapters/harness.test.ts" line="1093" assertions="3" />
      <testcase name="invalidates SSE handshakes, rotates tokens, and never reads fixed-endpoint pointers" classname="createHarnessAdapter" time="0.004081" file="src/adapters/harness.test.ts" line="1127" assertions="5" />
      <testcase name="rejects failed /runs reads rather than mixing stale runs with queue state" classname="createHarnessAdapter" time="0.000511" file="src/adapters/harness.test.ts" line="1165" assertions="2" />
      <testcase name="self-heals a dead control-api by running ensure and retrying the poll" classname="createHarnessAdapter" time="0.000458" file="src/adapters/harness.test.ts" line="1179" assertions="1" />
      <testcase name="re-runs ensure when the control-api serves a superseded engine version" classname="createHarnessAdapter" time="0.000501" file="src/adapters/harness.test.ts" line="1193" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/index.test.ts" file="src/adapters/index.test.ts" tests="5" assertions="8" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="requireOffloadToken" file="src/adapters/index.test.ts" line="8" tests="2" assertions="4" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="returns trimmed non-empty token" classname="requireOffloadToken" time="0.000032" file="src/adapters/index.test.ts" line="9" assertions="1" />
      <testcase name="empty token throws CollectorFatalError with code TOKEN_EMPTY" classname="requireOffloadToken" time="0.00012" file="src/adapters/index.test.ts" line="13" assertions="3" />
    </testsuite>
    <testsuite name="resolveOffloadConnection" file="src/adapters/index.test.ts" line="24" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="resolves defaults and passes through validated token" classname="resolveOffloadConnection" time="0.000098" file="src/adapters/index.test.ts" line="25" assertions="1" />
      <testcase name="empty token throws TOKEN_EMPTY before connection is returned" classname="resolveOffloadConnection" time="0.000055" file="src/adapters/index.test.ts" line="34" assertions="1" />
    </testsuite>
    <testsuite name="buildAdapters offload token" file="src/adapters/index.test.ts" line="39" tests="1" assertions="2" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="empty token throws TOKEN_EMPTY when offload is enabled" classname="buildAdapters offload token" time="0.000272" file="src/adapters/index.test.ts" line="40" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/prometheus.test.ts" file="src/adapters/prometheus.test.ts" tests="11" assertions="22" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="createPrometheusAdapter" file="src/adapters/prometheus.test.ts" line="32" tests="11" assertions="22" failures="0" skipped="0" time="0.004" hostname="debian1">
      <testcase name="emits a host panel with no alert items when everything is nominal" classname="createPrometheusAdapter" time="0.00092" file="src/adapters/prometheus.test.ts" line="33" assertions="6" />
      <testcase name="PROCHOT: package throttle rate &gt; 0 fires an alert item" classname="createPrometheusAdapter" time="0.000716" file="src/adapters/prometheus.test.ts" line="49" assertions="4" />
      <testcase name="PROCHOT: zero throttle rate does not fire" classname="createPrometheusAdapter" time="0.000259" file="src/adapters/prometheus.test.ts" line="64" assertions="1" />
      <testcase name="mem runway: eta below 30 minutes fires an alert item" classname="createPrometheusAdapter" time="0.000281" file="src/adapters/prometheus.test.ts" line="73" assertions="3" />
      <testcase name="mem runway: eta at the 30 minute boundary does not fire" classname="createPrometheusAdapter" time="0.004567" file="src/adapters/prometheus.test.ts" line="86" assertions="1" />
      <testcase name="mem runway: sentinel 999999 (no exhaustion trajectory) never fires" classname="createPrometheusAdapter" time="0.000346" file="src/adapters/prometheus.test.ts" line="95" assertions="1" />
      <testcase name="disk: free percent below 5% fires an alert item" classname="createPrometheusAdapter" time="0.000277" file="src/adapters/prometheus.test.ts" line="104" assertions="2" />
      <testcase name="disk: free percent at the 5% boundary does not fire" classname="createPrometheusAdapter" time="0.000223" file="src/adapters/prometheus.test.ts" line="116" assertions="1" />
      <testcase name="panel carries build.slice job count from the real systemd unit_state metric" classname="createPrometheusAdapter" time="0.000218" file="src/adapters/prometheus.test.ts" line="125" assertions="1" />
      <testcase name="Prometheus down: poll rejects so the scheduler marks the panel stale, no items produced" classname="createPrometheusAdapter" time="0.000193" file="src/adapters/prometheus.test.ts" line="135" assertions="1" />
      <testcase name="Prometheus reachable but errors (HTTP 500): poll rejects" classname="createPrometheusAdapter" time="0.00064" file="src/adapters/prometheus.test.ts" line="143" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/cluster.test.ts" file="src/adapters/cluster.test.ts" tests="18" assertions="44" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="createClusterAdapter" file="src/adapters/cluster.test.ts" line="92" tests="15" assertions="38" failures="0" skipped="0" time="0.046" hostname="debian1">
      <testcase name="speaks the agent-guard poll protocol over a unix socket" classname="createClusterAdapter" time="0.043469" file="src/adapters/cluster.test.ts" line="93" assertions="3" />
      <testcase name="emits cluster and agents panels from fixture sources" classname="createClusterAdapter" time="0.000583" file="src/adapters/cluster.test.ts" line="124" assertions="12" />
      <testcase name="debian1 offline is reflected in the cluster panel" classname="createClusterAdapter" time="0.000352" file="src/adapters/cluster.test.ts" line="160" assertions="1" />
      <testcase name="autoscaler idle state comes from ci-fallback counters" classname="createClusterAdapter" time="0.000477" file="src/adapters/cluster.test.ts" line="166" assertions="2" />
      <testcase name="orphan candidate emits act alert with reap action" classname="createClusterAdapter" time="0.000402" file="src/adapters/cluster.test.ts" line="175" assertions="8" />
      <testcase name="no orphan items when ps output has no qualifying processes" classname="createClusterAdapter" time="0.000337" file="src/adapters/cluster.test.ts" line="190" assertions="2" />
      <testcase name="etime and cpu boundaries are exclusive: at 30m and 80% does not fire" classname="createClusterAdapter" time="0.000218" file="src/adapters/cluster.test.ts" line="197" assertions="1" />
      <testcase name="declarative snapshot: orphan absent on next poll when ps clears" classname="createClusterAdapter" time="0.000386" file="src/adapters/cluster.test.ts" line="202" assertions="2" />
      <testcase name="agent-guard socket failure rejects the poll" classname="createClusterAdapter" time="0.000186" file="src/adapters/cluster.test.ts" line="212" assertions="1" />
      <testcase name="ps failure rejects the poll" classname="createClusterAdapter" time="0.000154" file="src/adapters/cluster.test.ts" line="217" assertions="1" />
      <testcase name="invalid buildbox state rejects the poll" classname="createClusterAdapter" time="0.000239" file="src/adapters/cluster.test.ts" line="222" assertions="1" />
      <testcase name="unreadable ci-fallback counter rejects the poll" classname="createClusterAdapter" time="0.000134" file="src/adapters/cluster.test.ts" line="238" assertions="1" />
      <testcase name="reads only configured ci-fallback idle and pressure sources" classname="createClusterAdapter" time="0.000401" file="src/adapters/cluster.test.ts" line="243" assertions="1" />
      <testcase name="unreadable queued buildslot ticket rejects the poll" classname="createClusterAdapter" time="0.003393" file="src/adapters/cluster.test.ts" line="256" assertions="1" />
      <testcase name="unreadable agent cgroup rejects the poll" classname="createClusterAdapter" time="0.000498" file="src/adapters/cluster.test.ts" line="267" assertions="1" />
    </testsuite>
    <testsuite name="parsePsOutput" file="src/adapters/cluster.test.ts" line="278" tests="3" assertions="6" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="classifies agent processes with the configured regex" classname="parsePsOutput" time="0.000169" file="src/adapters/cluster.test.ts" line="279" assertions="2" />
      <testcase name="rejects malformed process rows instead of returning a partial snapshot" classname="parsePsOutput" time="0.00015" file="src/adapters/cluster.test.ts" line="289" assertions="1" />
      <testcase name="accepts rtk ps rows with dash NI and day-prefixed etime" classname="parsePsOutput" time="0.000081" file="src/adapters/cluster.test.ts" line="294" assertions="3" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/ghci.test.ts" file="src/adapters/ghci.test.ts" tests="61" assertions="203" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="createGhciAdapter T1 snapshots" file="src/adapters/ghci.test.ts" line="126" tests="22" assertions="109" failures="0" skipped="0" time="0.226" hostname="debian1">
      <testcase name="uses pinned snapshot argv, OID identity, and independent completeness fields" classname="createGhciAdapter T1 snapshots" time="0.016302" file="src/adapters/ghci.test.ts" line="127" assertions="13" />
      <testcase name="keeps train evidence when GitHub returns a short partial history page" classname="createGhciAdapter T1 snapshots" time="0.000789" file="src/adapters/ghci.test.ts" line="150" assertions="3" />
      <testcase name="treats a full first history page as complete when total_count exceeds the page size" classname="createGhciAdapter T1 snapshots" time="0.001328" file="src/adapters/ghci.test.ts" line="159" assertions="2" />
      <testcase name="serves persisted run history when the latest GitHub fetch fails" classname="createGhciAdapter T1 snapshots" time="0.00137" file="src/adapters/ghci.test.ts" line="169" assertions="3" />
      <testcase name="treats missing self-hosted runners as empty occupancy" classname="createGhciAdapter T1 snapshots" time="0.000912" file="src/adapters/ghci.test.ts" line="190" assertions="2" />
      <testcase name="adds org-level runners to the fleet when repo runners are unavailable" classname="createGhciAdapter T1 snapshots" time="0.000841" file="src/adapters/ghci.test.ts" line="203" assertions="2" />
      <testcase name="paginates train refs until the connection is complete" classname="createGhciAdapter T1 snapshots" time="0.001067" file="src/adapters/ghci.test.ts" line="227" assertions="2" />
      <testcase name="preserves simultaneous REST, ref, PR, and check pagination gaps" classname="createGhciAdapter T1 snapshots" time="0.000875" file="src/adapters/ghci.test.ts" line="236" assertions="4" />
      <testcase name="keeps ref and PR completeness independent on a malformed sibling connection" classname="createGhciAdapter T1 snapshots" time="0.000528" file="src/adapters/ghci.test.ts" line="268" assertions="3" />
      <testcase name="rejects exact-run responses containing a different head SHA" classname="createGhciAdapter T1 snapshots" time="0.000525" file="src/adapters/ghci.test.ts" line="278" assertions="2" />
      <testcase name="serves cached snapshot for repos outside the admitted batch" classname="createGhciAdapter T1 snapshots" time="0.001794" file="src/adapters/ghci.test.ts" line="294" assertions="3" />
      <testcase name="isolates early repo failures and advances rotation" classname="createGhciAdapter T1 snapshots" time="0.00538" file="src/adapters/ghci.test.ts" line="306" assertions="7" />
      <testcase name="rotates 10 configured repos in exact batches" classname="createGhciAdapter T1 snapshots" time="0.001939" file="src/adapters/ghci.test.ts" line="325" assertions="5" />
      <testcase name="rotates 11 configured repos in exact batches" classname="createGhciAdapter T1 snapshots" time="0.007411" file="src/adapters/ghci.test.ts" line="325" assertions="5" />
      <testcase name="rotates 21 configured repos in exact batches" classname="createGhciAdapter T1 snapshots" time="0.006051" file="src/adapters/ghci.test.ts" line="325" assertions="11" />
      <testcase name="latches the tenth successful poll and uses an inclusive UTC seven-day query" classname="createGhciAdapter T1 snapshots" time="0.002215" file="src/adapters/ghci.test.ts" line="343" assertions="2" />
      <testcase name="retains a failed merged-fetch latch until a later successful admitted poll" classname="createGhciAdapter T1 snapshots" time="0.007796" file="src/adapters/ghci.test.ts" line="352" assertions="1" />
      <testcase name="finishes every fixed and exact query before jobs or logs and stays within the poll budget" classname="createGhciAdapter T1 snapshots" time="0.002198" file="src/adapters/ghci.test.ts" line="366" assertions="22" />
      <testcase name="pins ordinary, mixed-due, and all-due five-repo arithmetic" classname="createGhciAdapter T1 snapshots" time="0.11234" file="src/adapters/ghci.test.ts" line="382" assertions="12" />
      <testcase name="rotates constrained job admission after dispatch failure" classname="createGhciAdapter T1 snapshots" time="0.026389" file="src/adapters/ghci.test.ts" line="420" assertions="2" />
      <testcase name="rotates constrained log admission independently" classname="createGhciAdapter T1 snapshots" time="0.038101" file="src/adapters/ghci.test.ts" line="442" assertions="2" />
      <testcase name="preserves stable run-failure item identity" classname="createGhciAdapter T1 snapshots" time="0.000526" file="src/adapters/ghci.test.ts" line="472" assertions="1" />
    </testsuite>
    <testsuite name="createGhciAdapter T2 train state" file="src/adapters/ghci.test.ts" line="579" tests="16" assertions="26" failures="0" skipped="0" time="0.011" hostname="debian1">
      <testcase name="derives queued/%s attempt 1 as gating" classname="createGhciAdapter T2 train state" time="0.001046" file="src/adapters/ghci.test.ts" line="585" assertions="1" />
      <testcase name="derives in_progress/%s attempt 2 as rerunning" classname="createGhciAdapter T2 train state" time="0.00029" file="src/adapters/ghci.test.ts" line="585" assertions="1" />
      <testcase name="derives completed/failure attempt 1 as failed" classname="createGhciAdapter T2 train state" time="0.000288" file="src/adapters/ghci.test.ts" line="585" assertions="1" />
      <testcase name="derives completed/success attempt 1 as green" classname="createGhciAdapter T2 train state" time="0.000242" file="src/adapters/ghci.test.ts" line="585" assertions="1" />
      <testcase name="keeps a branch-only queued/%s run building" classname="createGhciAdapter T2 train state" time="0.000382" file="src/adapters/ghci.test.ts" line="599" assertions="1" />
      <testcase name="keeps a branch-only completed/failure run building" classname="createGhciAdapter T2 train state" time="0.000176" file="src/adapters/ghci.test.ts" line="599" assertions="1" />
      <testcase name="keeps a branch-only completed/success run building" classname="createGhciAdapter T2 train state" time="0.000164" file="src/adapters/ghci.test.ts" line="599" assertions="1" />
      <testcase name="applies canonical total ordering and exact-query admission" classname="createGhciAdapter T2 train state" time="0.000596" file="src/adapters/ghci.test.ts" line="608" assertions="2" />
      <testcase name="orders invalid train suffixes by created time, PR number, then branch" classname="createGhciAdapter T2 train state" time="0.000545" file="src/adapters/ghci.test.ts" line="625" assertions="1" />
      <testcase name="selects latest exact-OID run by created time, attempt, then ID and exposes unsupported gaps" classname="createGhciAdapter T2 train state" time="0.000529" file="src/adapters/ghci.test.ts" line="639" assertions="2" />
      <testcase name="ignores obsolete open and merged PR identities on reused branches" classname="createGhciAdapter T2 train state" time="0.00196" file="src/adapters/ghci.test.ts" line="651" assertions="2" />
      <testcase name="retains cached merged train PRs and gives open PR lifecycle precedence" classname="createGhciAdapter T2 train state" time="0.003608" file="src/adapters/ghci.test.ts" line="662" assertions="2" />
      <testcase name="applies completeness guard %s" classname="createGhciAdapter T2 train state" time="0.000414" file="src/adapters/ghci.test.ts" line="676" assertions="2" />
      <testcase name="applies completeness guard %s" classname="createGhciAdapter T2 train state" time="0.000242" file="src/adapters/ghci.test.ts" line="676" assertions="2" />
      <testcase name="applies completeness guard %s" classname="createGhciAdapter T2 train state" time="0.006618" file="src/adapters/ghci.test.ts" line="676" assertions="2" />
      <testcase name="derives PR queue metrics, staleVsMain, checks, and train membership" classname="createGhciAdapter T2 train state" time="0.000672" file="src/adapters/ghci.test.ts" line="683" assertions="4" />
    </testsuite>
    <testsuite name="createGhciAdapter T2 jobs and runners" file="src/adapters/ghci.test.ts" line="695" tests="7" assertions="19" failures="0" skipped="0" time="0.009" hostname="debian1">
      <testcase name="classifies each unseen job ID once and reuses the cached result" classname="createGhciAdapter T2 jobs and runners" time="0.002745" file="src/adapters/ghci.test.ts" line="696" assertions="4" />
      <testcase name="classifies only the retained 64KiB log suffix and caches matches by job ID" classname="createGhciAdapter T2 jobs and runners" time="0.001774" file="src/adapters/ghci.test.ts" line="717" assertions="3" />
      <testcase name="derives deterministic blockers and runner occupancy joins" classname="createGhciAdapter T2 jobs and runners" time="0.00375" file="src/adapters/ghci.test.ts" line="736" assertions="4" />
      <testcase name="selects failed blockers by started time with null last, then job ID" classname="createGhciAdapter T2 jobs and runners" time="0.000639" file="src/adapters/ghci.test.ts" line="760" assertions="1" />
      <testcase name="marks truncated or budget-deferred jobs incomplete without inventing infra state" classname="createGhciAdapter T2 jobs and runners" time="0.000486" file="src/adapters/ghci.test.ts" line="780" assertions="2" />
      <testcase name="marks excess train job scope degraded while completeness guards suppress job calls" classname="createGhciAdapter T2 jobs and runners" time="0.000629" file="src/adapters/ghci.test.ts" line="789" assertions="3" />
      <testcase name="does not report saturation for an empty online-runner set" classname="createGhciAdapter T2 jobs and runners" time="0.003275" file="src/adapters/ghci.test.ts" line="799" assertions="2" />
    </testsuite>
    <testsuite name="createGhciAdapter T5 inbox scopes" file="src/adapters/ghci.test.ts" line="807" tests="4" assertions="25" failures="0" skipped="0" time="0.009" hostname="debian1">
      <testcase name="emits scoped run failure, infra failure, green-unmerged, and queue-without-train items" classname="createGhciAdapter T5 inbox scopes" time="0.001296" file="src/adapters/ghci.test.ts" line="811" assertions="8" />
      <testcase name="marks complete empty scopes while suppressing positive claims at exact incompleteness boundaries" classname="createGhciAdapter T5 inbox scopes" time="0.002161" file="src/adapters/ghci.test.ts" line="868" assertions="13" />
      <testcase name="budget-excluded repos expose no reconciliation scopes" classname="createGhciAdapter T5 inbox scopes" time="0.001257" file="src/adapters/ghci.test.ts" line="923" assertions="1" />
      <testcase name="green-unmerged uses a strict ten-minute completion threshold and stable identity" classname="createGhciAdapter T5 inbox scopes" time="0.005635" file="src/adapters/ghci.test.ts" line="930" assertions="3" />
    </testsuite>
    <testsuite name="createGhciAdapter T3 lag history" file="src/adapters/ghci.test.ts" line="953" tests="12" assertions="24" failures="0" skipped="0" time="0.061" hostname="debian1">
      <testcase name="derives complete UTC merged metrics and leaves history completeness independent" classname="createGhciAdapter T3 lag history" time="0.00526" file="src/adapters/ghci.test.ts" line="958" assertions="4" />
      <testcase name="nulls both merged metrics for truncated count" classname="createGhciAdapter T3 lag history" time="0.002013" file="src/adapters/ghci.test.ts" line="983" assertions="2" />
      <testcase name="nulls both merged metrics for next page" classname="createGhciAdapter T3 lag history" time="0.004885" file="src/adapters/ghci.test.ts" line="983" assertions="2" />
      <testcase name="nulls both merged metrics for invalid timestamp" classname="createGhciAdapter T3 lag history" time="0.004936" file="src/adapters/ghci.test.ts" line="983" assertions="2" />
      <testcase name="nulls both merged metrics for null node" classname="createGhciAdapter T3 lag history" time="0.00176" file="src/adapters/ghci.test.ts" line="983" assertions="2" />
      <testcase name="nulls both merged metrics for query failure" classname="createGhciAdapter T3 lag history" time="0.001777" file="src/adapters/ghci.test.ts" line="983" assertions="2" />
      <testcase name="requires three valid seven-day samples without hiding today&apos;s count" classname="createGhciAdapter T3 lag history" time="0.004118" file="src/adapters/ghci.test.ts" line="989" assertions="1" />
      <testcase name="records only completed runs with complete, valid job timing and resets on restart" classname="createGhciAdapter T3 lag history" time="0.002539" file="src/adapters/ghci.test.ts" line="995" assertions="2" />
      <testcase name="dedupes, orders by completion and run ID, and retains newest 50 after sorting" classname="createGhciAdapter T3 lag history" time="0.038085" file="src/adapters/ghci.test.ts" line="1020" assertions="4" />
      <testcase name="filters invalid created time from amplification" classname="createGhciAdapter T3 lag history" time="0.000627" file="src/adapters/ghci.test.ts" line="1047" assertions="1" />
      <testcase name="filters invalid updated time from amplification" classname="createGhciAdapter T3 lag history" time="0.000267" file="src/adapters/ghci.test.ts" line="1047" assertions="1" />
      <testcase name="filters reversed run time from amplification" classname="createGhciAdapter T3 lag history" time="0.000212" file="src/adapters/ghci.test.ts" line="1047" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/botmaster.test.ts" file="src/adapters/botmaster.test.ts" tests="6" assertions="11" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="createBotmasterAdapter" file="src/adapters/botmaster.test.ts" line="51" tests="6" assertions="11" failures="0" skipped="0" time="0.004" hostname="debian1">
      <testcase name="requires an injected fetch implementation" classname="createBotmasterAdapter" time="0.000097" file="src/adapters/botmaster.test.ts" line="52" assertions="1" />
      <testcase name="builds a bots panel with runtime status, traffic health, msgs, errors, and cost" classname="createBotmasterAdapter" time="0.001232" file="src/adapters/botmaster.test.ts" line="61" assertions="3" />
      <testcase name="emits an alert item for each running bot that went silent after prior activity" classname="createBotmasterAdapter" time="0.000269" file="src/adapters/botmaster.test.ts" line="150" assertions="2" />
      <testcase name="omits the down alert once the bot recovers — the reconciler resolves it" classname="createBotmasterAdapter" time="0.000411" file="src/adapters/botmaster.test.ts" line="169" assertions="3" />
      <testcase name="poll rejects when the summary API is unreachable, so prior state is retained" classname="createBotmasterAdapter" time="0.000121" file="src/adapters/botmaster.test.ts" line="204" assertions="1" />
      <testcase name="attaches the bearer token to every API call during poll()" classname="createBotmasterAdapter" time="0.003126" file="src/adapters/botmaster.test.ts" line="213" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/gh-http.test.ts" file="src/adapters/gh-http.test.ts" tests="13" assertions="38" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="gh-http request translation" file="src/adapters/gh-http.test.ts" line="44" tests="3" assertions="12" failures="0" skipped="0" time="0.003" hostname="debian1">
      <testcase name="maps an api path to the REST base with versioned auth headers" classname="gh-http request translation" time="0.000983" file="src/adapters/gh-http.test.ts" line="45" assertions="6" />
      <testcase name="posts graphql with string and typed variables" classname="gh-http request translation" time="0.003363" file="src/adapters/gh-http.test.ts" line="57" assertions="3" />
      <testcase name="rejects argv shapes the collector never issues" classname="gh-http request translation" time="0.000209" file="src/adapters/gh-http.test.ts" line="84" assertions="3" />
    </testsuite>
    <testsuite name="gh-http failures" file="src/adapters/gh-http.test.ts" line="92" tests="3" assertions="5" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="throws a status-bearing error that the runner 404 probe matches" classname="gh-http failures" time="0.000247" file="src/adapters/gh-http.test.ts" line="93" assertions="1" />
      <testcase name="never leaks the token into the error message" classname="gh-http failures" time="0.000173" file="src/adapters/gh-http.test.ts" line="99" assertions="2" />
      <testcase name="re-resolves the token once after a 401 and retries" classname="gh-http failures" time="0.000289" file="src/adapters/gh-http.test.ts" line="106" assertions="2" />
    </testsuite>
    <testsuite name="gh-http conditional requests" file="src/adapters/gh-http.test.ts" line="129" tests="4" assertions="8" failures="0" skipped="0" time="0.011" hostname="debian1">
      <testcase name="replays the cached body on 304 without re-reading the network payload" classname="gh-http conditional requests" time="0.000339" file="src/adapters/gh-http.test.ts" line="130" assertions="4" />
      <testcase name="caches per URL so a different query is not answered from another entry" classname="gh-http conditional requests" time="0.000221" file="src/adapters/gh-http.test.ts" line="149" assertions="2" />
      <testcase name="omits if-none-match once an entry is evicted by the cache bound" classname="gh-http conditional requests" time="0.005479" file="src/adapters/gh-http.test.ts" line="165" assertions="1" />
      <testcase name="does not cache a body above the size bound" classname="gh-http conditional requests" time="0.006285" file="src/adapters/gh-http.test.ts" line="176" assertions="1" />
    </testsuite>
    <testsuite name="gh-http log tail" file="src/adapters/gh-http.test.ts" line="186" tests="2" assertions="5" failures="0" skipped="0" time="0.004" hostname="debian1">
      <testcase name="follows the log redirect without forwarding credentials and keeps the tail bytes" classname="gh-http log tail" time="0.001057" file="src/adapters/gh-http.test.ts" line="187" assertions="4" />
      <testcase name="throws on a failing log request" classname="gh-http log tail" time="0.003253" file="src/adapters/gh-http.test.ts" line="204" assertions="1" />
    </testsuite>
    <testsuite name="ghci adapter over gh-http" file="src/adapters/gh-http.test.ts" line="211" tests="1" assertions="8" failures="0" skipped="0" time="0.001" hostname="debian1">
      <testcase name="keeps completeness flags true when every conditional request answers 304" classname="ghci adapter over gh-http" time="0.00157" file="src/adapters/gh-http.test.ts" line="228" assertions="8" />
    </testsuite>
  </testsuite>
  <testsuite name="src/adapters/offload.test.ts" file="src/adapters/offload.test.ts" tests="29" assertions="114" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="createOffloadAdapter" file="src/adapters/offload.test.ts" line="118" tests="22" assertions="79" failures="0" skipped="0" time="0.037" hostname="debian1">
      <testcase name="requires an injected fetch implementation" classname="createOffloadAdapter" time="0.000066" file="src/adapters/offload.test.ts" line="119" assertions="1" />
      <testcase name="empty token throws TOKEN_EMPTY before any controller request" classname="createOffloadAdapter" time="0.000101" file="src/adapters/offload.test.ts" line="128" assertions="2" />
      <testcase name="emits the four offload panels on a healthy poll" classname="createOffloadAdapter" time="0.018367" file="src/adapters/offload.test.ts" line="145" assertions="6" />
      <testcase name="plumbs structured controller KPI samples and derives longest observed pull-back" classname="createOffloadAdapter" time="0.001401" file="src/adapters/offload.test.ts" line="165" assertions="1" />
      <testcase name="a lifetime exit counter with no open circuit raises no capability item" classname="createOffloadAdapter" time="0.003971" file="src/adapters/offload.test.ts" line="196" assertions="2" />
      <testcase name="2026-07-18 incident: exactly remote-idle-queue-stalled + capability-missing with job links" classname="createOffloadAdapter" time="0.001617" file="src/adapters/offload.test.ts" line="221" assertions="12" />
      <testcase name="controller-down: one controller-down item and all panels stale" classname="createOffloadAdapter" time="0.0033" file="src/adapters/offload.test.ts" line="263" assertions="7" />
      <testcase name="controller-down: Bun connection-refused (no ECONNREFUSED substring) still models controller-down" classname="createOffloadAdapter" time="0.00026" file="src/adapters/offload.test.ts" line="284" assertions="7" />
      <testcase name="normal-temp fixture emits no cpu-temp-critical item" classname="createOffloadAdapter" time="0.000845" file="src/adapters/offload.test.ts" line="300" assertions="2" />
      <testcase name="crit-temp fixture emits exactly one cpu-temp-critical item" classname="createOffloadAdapter" time="0.000885" file="src/adapters/offload.test.ts" line="311" assertions="5" />
      <testcase name="reachable controller with malformed status rejects the poll" classname="createOffloadAdapter" time="0.000225" file="src/adapters/offload.test.ts" line="331" assertions="1" />
      <testcase name="reachable controller with wrong-shaped status rejects the poll" classname="createOffloadAdapter" time="0.000337" file="src/adapters/offload.test.ts" line="343" assertions="1" />
      <testcase name="reachable controller with malformed metric vector rejects the poll" classname="createOffloadAdapter" time="0.000961" file="src/adapters/offload.test.ts" line="355" assertions="2" />
      <testcase name="malformed status after success retains last-good snapshot" classname="createOffloadAdapter" time="0.001395" file="src/adapters/offload.test.ts" line="371" assertions="4" />
      <testcase name="two-mount disk metrics pair free and size bytes per mountpoint" classname="createOffloadAdapter" time="0.003929" file="src/adapters/offload.test.ts" line="400" assertions="2" />
      <testcase name="publishes the recorded ~/.claude parity verdict per host" classname="createOffloadAdapter" time="0.000993" file="src/adapters/offload.test.ts" line="454" assertions="3" />
      <testcase name="an unreadable parity state leaves every host&apos;s verdict unrecorded" classname="createOffloadAdapter" time="0.003829" file="src/adapters/offload.test.ts" line="483" assertions="3" />
      <testcase name="a controller host absent from the registry reaches neither the fleet nor capability" classname="createOffloadAdapter" time="0.001071" file="src/adapters/offload.test.ts" line="497" assertions="2" />
      <testcase name="a registry host the controller never enrolled is listed, not dropped" classname="createOffloadAdapter" time="0.00377" file="src/adapters/offload.test.ts" line="527" assertions="8" />
      <testcase name="an unreadable registry fails closed before contacting the controller" classname="createOffloadAdapter" time="0.000333" file="src/adapters/offload.test.ts" line="556" assertions="3" />
      <testcase name="a controller outage leaves the declared hosts listed and marked stale" classname="createOffloadAdapter" time="0.000225" file="src/adapters/offload.test.ts" line="577" assertions="3" />
      <testcase name="reachable controller but metrics failure rejects the poll" classname="createOffloadAdapter" time="0.000476" file="src/adapters/offload.test.ts" line="591" assertions="2" />
    </testsuite>
    <testsuite name="offload box-side guard telemetry" file="src/adapters/offload.test.ts" line="633" tests="7" assertions="35" failures="0" skipped="0" time="0.022" hostname="debian1">
      <testcase name="publishes a host&apos;s reported live sessions and leaves an unavailable series unknown" classname="offload box-side guard telemetry" time="0.001596" file="src/adapters/offload.test.ts" line="634" assertions="4" />
      <testcase name="carries the box&apos;s own per-path work counts, and leaves an absent split unknown" classname="offload box-side guard telemetry" time="0.008672" file="src/adapters/offload.test.ts" line="650" assertions="6" />
      <testcase name="publishes stall, tmpfs and work-slice facts per host on the fleet panel" classname="offload box-side guard telemetry" time="0.002178" file="src/adapters/offload.test.ts" line="683" assertions="2" />
      <testcase name="a host with no guard series reports nulls and an empty slice list, never invented numbers" classname="offload box-side guard telemetry" time="0.000739" file="src/adapters/offload.test.ts" line="711" assertions="2" />
      <testcase name="an OOM-kill total already on the clock at startup never alerts; only a fresh kill does" classname="offload box-side guard telemetry" time="0.009233" file="src/adapters/offload.test.ts" line="725" assertions="10" />
      <testcase name="a full tmpfs alerts because writes are already failing; a merely busy one does not" classname="offload box-side guard telemetry" time="0.001492" file="src/adapters/offload.test.ts" line="762" assertions="5" />
      <testcase name="a stalled box alerts on lack of forward progress, not on how much memory is in use" classname="offload box-side guard telemetry" time="0.00149" file="src/adapters/offload.test.ts" line="778" assertions="6" />
    </testsuite>
  </testsuite>
  <testsuite name="src/activity/entries.test.ts" file="src/activity/entries.test.ts" tests="9" assertions="31" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="readActivitySourceEntries" file="src/activity/entries.test.ts" line="28" tests="9" assertions="31" failures="0" skipped="0" time="0.024" hostname="debian1">
      <testcase name="returns undefined for a source id this collector does not know" classname="readActivitySourceEntries" time="0.000052" file="src/activity/entries.test.ts" line="29" assertions="1" />
      <testcase name="serves one source&apos;s entries newest-first with its coverage" classname="readActivitySourceEntries" time="0.000894" file="src/activity/entries.test.ts" line="33" assertions="5" />
      <testcase name="explains every skipped record instead of dropping it" classname="readActivitySourceEntries" time="0.000199" file="src/activity/entries.test.ts" line="46" assertions="8" />
      <testcase name="pages with offset and limit while total counts every match" classname="readActivitySourceEntries" time="0.00014" file="src/activity/entries.test.ts" line="63" assertions="4" />
      <testcase name="clamps a limit above the maximum and a negative offset" classname="readActivitySourceEntries" time="0.000091" file="src/activity/entries.test.ts" line="71" assertions="2" />
      <testcase name="searches record detail, not only the title" classname="readActivitySourceEntries" time="0.024865" file="src/activity/entries.test.ts" line="77" assertions="3" />
      <testcase name="filters by severity floor and by window" classname="readActivitySourceEntries" time="0.000278" file="src/activity/entries.test.ts" line="88" assertions="2" />
      <testcase name="redacts credential-named values in a skipped record&apos;s excerpt" classname="readActivitySourceEntries" time="0.000125" file="src/activity/entries.test.ts" line="96" assertions="3" />
      <testcase name="reports an absent source honestly rather than as an empty ok source" classname="readActivitySourceEntries" time="0.000077" file="src/activity/entries.test.ts" line="112" assertions="3" />
    </testsuite>
  </testsuite>
  <testsuite name="src/activity/kubernetes-lifecycle.test.ts" file="src/activity/kubernetes-lifecycle.test.ts" tests="2" assertions="6" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="Kubernetes lifecycle transitions" file="src/activity/kubernetes-lifecycle.test.ts" line="9" tests="2" assertions="6" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="emits scheduled and started once with exact correlation fields" classname="Kubernetes lifecycle transitions" time="0.000292" file="src/activity/kubernetes-lifecycle.test.ts" line="10" assertions="3" />
      <testcase name="emits terminal and deletion transitions without treating an absent value as a sample" classname="Kubernetes lifecycle transitions" time="0.000091" file="src/activity/kubernetes-lifecycle.test.ts" line="17" assertions="3" />
    </testsuite>
  </testsuite>
  <testsuite name="src/activity/read.test.ts" file="src/activity/read.test.ts" tests="6" assertions="29" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="readActivity" file="src/activity/read.test.ts" line="30" tests="6" assertions="29" failures="0" skipped="0" time="0.04" hostname="debian1">
      <testcase name="adds facet counts computed over the full match set before limit truncation" classname="readActivity" time="0.001452" file="src/activity/read.test.ts" line="31" assertions="5" />
      <testcase name="keeps other category counts when filtering by one category" classname="readActivity" time="0.000497" file="src/activity/read.test.ts" line="52" assertions="5" />
      <testcase name="narrows category and source facets with non-category filters" classname="readActivity" time="0.000396" file="src/activity/read.test.ts" line="74" assertions="3" />
      <testcase name="omits facets with zero matches instead of fabricating zeros" classname="readActivity" time="0.003276" file="src/activity/read.test.ts" line="93" assertions="4" />
      <testcase name="respects limit after sorting and clamps above max to 2000" classname="readActivity" time="0.035999" file="src/activity/read.test.ts" line="107" assertions="6" />
      <testcase name="keeps other source coverage when one source throws while still returning events" classname="readActivity" time="0.001019" file="src/activity/read.test.ts" line="164" assertions="6" />
    </testsuite>
  </testsuite>
  <testsuite name="src/activity/sources/reaper.test.ts" file="src/activity/sources/reaper.test.ts" tests="2" assertions="14" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="readReaperSource" file="src/activity/sources/reaper.test.ts" line="8" tests="2" assertions="14" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="maps known actions, unknown actions, and root/session mapping" classname="readReaperSource" time="0.000622" file="src/activity/sources/reaper.test.ts" line="9" assertions="11" />
      <testcase name="reports absent for missing file and keeps malformed lines accounted" classname="readReaperSource" time="0.000167" file="src/activity/sources/reaper.test.ts" line="71" assertions="3" />
    </testsuite>
  </testsuite>
  <testsuite name="src/activity/sources/agentSessions.test.ts" file="src/activity/sources/agentSessions.test.ts" tests="3" assertions="13" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="readAgentSessionsSource" file="src/activity/sources/agentSessions.test.ts" line="7" tests="3" assertions="13" failures="0" skipped="0" time="0.009" hostname="debian1">
      <testcase name="maps start/finish events and enforces optional-field honesty" classname="readAgentSessionsSource" time="0.009873" file="src/activity/sources/agentSessions.test.ts" line="8" assertions="6" />
      <testcase name="honors range filters while coverage stays whole-file" classname="readAgentSessionsSource" time="0.000171" file="src/activity/sources/agentSessions.test.ts" line="65" assertions="5" />
      <testcase name="reports absent when sessions directory does not exist" classname="readAgentSessionsSource" time="0.000066" file="src/activity/sources/agentSessions.test.ts" line="79" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/activity/sources/controller.test.ts" file="src/activity/sources/controller.test.ts" tests="2" assertions="8" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="readControllerSource" file="src/activity/sources/controller.test.ts" line="8" tests="2" assertions="8" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="maps controller records into stable activity events" classname="readControllerSource" time="0.000367" file="src/activity/sources/controller.test.ts" line="9" assertions="6" />
      <testcase name="reports absent when controller file does not exist" classname="readControllerSource" time="0.000072" file="src/activity/sources/controller.test.ts" line="77" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/activity/sources/notifGate.test.ts" file="src/activity/sources/notifGate.test.ts" tests="6" assertions="20" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="readNotifGateSource" file="src/activity/sources/notifGate.test.ts" line="8" tests="6" assertions="20" failures="0" skipped="0" time="0.015" hostname="debian1">
      <testcase name="maps every attempt to a row carrying its own text" classname="readNotifGateSource" time="0.015556" file="src/activity/sources/notifGate.test.ts" line="9" assertions="6" />
      <testcase name="keeps coverage full-file while applying from/to windows" classname="readNotifGateSource" time="0.000267" file="src/activity/sources/notifGate.test.ts" line="59" assertions="3" />
      <testcase name="reports absent when the log has never been written" classname="readNotifGateSource" time="0.00007" file="src/activity/sources/notifGate.test.ts" line="72" assertions="3" />
      <testcase name="reports error instead of throwing when the log cannot be read" classname="readNotifGateSource" time="0.000087" file="src/activity/sources/notifGate.test.ts" line="83" assertions="3" />
      <testcase name="skips corrupt lines without losing the sound ones" classname="readNotifGateSource" time="0.000162" file="src/activity/sources/notifGate.test.ts" line="97" assertions="4" />
      <testcase name="keeps historical records queryable after the event schema change" classname="readNotifGateSource" time="0.000106" file="src/activity/sources/notifGate.test.ts" line="114" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/activity/sources/kubernetes.test.ts" file="src/activity/sources/kubernetes.test.ts" tests="1" assertions="3" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testcase name="Kubernetes activity source dedupes stable ids and reports absent coverage honestly" classname="" time="0.000416" file="src/activity/sources/kubernetes.test.ts" line="4" assertions="3" />
  </testsuite>
  <testsuite name="src/activity/sources/suppressed.test.ts" file="src/activity/sources/suppressed.test.ts" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="readSuppressedNotifications" file="src/activity/sources/suppressed.test.ts" line="8" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="summarizes pending registry and skips malformed row counts" classname="readSuppressedNotifications" time="0.00035" file="src/activity/sources/suppressed.test.ts" line="9" assertions="1" />
      <testcase name="returns absent status when pending registry is not present" classname="readSuppressedNotifications" time="0.000061" file="src/activity/sources/suppressed.test.ts" line="50" assertions="1" />
    </testsuite>
  </testsuite>
  <testsuite name="src/activity/sources/landq.test.ts" file="src/activity/sources/landq.test.ts" tests="2" assertions="5" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="readLandqSource" file="src/activity/sources/landq.test.ts" line="9" tests="2" assertions="5" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="reads each repo root, honors window, and keeps stable IDs" classname="readLandqSource" time="0.000652" file="src/activity/sources/landq.test.ts" line="10" assertions="3" />
      <testcase name="reports absent if no landq roots exist" classname="readLandqSource" time="0.000095" file="src/activity/sources/landq.test.ts" line="67" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/activity/sources/fleetHarden.test.ts" file="src/activity/sources/fleetHarden.test.ts" tests="3" assertions="11" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="readFleetHardenSource" file="src/activity/sources/fleetHarden.test.ts" line="8" tests="3" assertions="11" failures="0" skipped="0" time="0.005" hostname="debian1">
      <testcase name="maps hardened host events from jsonl and skips malformed lines" classname="readFleetHardenSource" time="0.005063" file="src/activity/sources/fleetHarden.test.ts" line="9" assertions="4" />
      <testcase name="reports absent when harden ledger does not exist" classname="readFleetHardenSource" time="0.000111" file="src/activity/sources/fleetHarden.test.ts" line="85" assertions="2" />
      <testcase name="honors range filters while coverage stays whole-file" classname="readFleetHardenSource" time="0.000187" file="src/activity/sources/fleetHarden.test.ts" line="104" assertions="5" />
    </testsuite>
  </testsuite>
  <testsuite name="src/activity/sources/actions.test.ts" file="src/activity/sources/actions.test.ts" tests="2" assertions="8" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="readActionsSource" file="src/activity/sources/actions.test.ts" line="8" tests="2" assertions="8" failures="0" skipped="0" time="0" hostname="debian1">
      <testcase name="maps action audit records and skips malformed entries" classname="readActionsSource" time="0.000343" file="src/activity/sources/actions.test.ts" line="9" assertions="6" />
      <testcase name="reports absent when actions file does not exist" classname="readActionsSource" time="0.000074" file="src/activity/sources/actions.test.ts" line="56" assertions="2" />
    </testsuite>
  </testsuite>
  <testsuite name="src/activity/sources/notifications.test.ts" file="src/activity/sources/notifications.test.ts" tests="3" assertions="16" failures="0" skipped="0" time="0" hostname="debian1">
    <properties>
      <property name="ci" value="https://github.com/alexcodeplace/overdeck/actions/runs/31488133161" />
      <property name="commit" value="9f23d4b61ea9af2e6ac32232ee9f4ad13067a907" />
    </properties>
    <testsuite name="readNotificationsSource" file="src/activity/sources/notifications.test.ts" line="8" tests="3" assertions="16" failures="0" skipped="0" time="0.018" hostname="debian1">
      <testcase name="maps notification attempts and normalizes keys, severities, and titles" classname="readNotificationsSource" time="0.018468" file="src/activity/sources/notifications.test.ts" line="9" assertions="9" />
      <testcase name="keeps coverage full-file while applying from/to windows" classname="readNotificationsSource" time="0.000202" file="src/activity/sources/notifications.test.ts" line="58" assertions="5" />
      <testcase name="reports absent when log file does not exist" classname="readNotificationsSource" time="0.000069" file="src/activity/sources/notifications.test.ts" line="78" assertions="2" />
    </testsuite>
  </testsuite>
</testsuites>
