{
  "schema": "termix-sim/T1-mvp/v1",
  "artefact": "T1-full-run-manifest",
  "mvp": false,
  "quotable": true,
  "disclaimer": "FULL RUN. OFFCHAIN-SIM. These numbers are the study's result and may be quoted WITH their label and their limitations: the human arms are MODELLED and not measured, the venue is one Aave-V3-shaped rule tuple, the liquidator is a testnet-shaped LogNormal(median 15 s), and nothing here is a claim about money on BSC mainnet.",
  "label": "OFFCHAIN-SIM",
  "generatedAtUtc": "2026-09-07T18:12:23.655Z",
  "scope": {
    "task": "T1 (liquidation protection) only",
    "design": "Shock (4) x Clock (2) x Books (2) = 16 cells, crossed",
    "arms": [
      "A",
      "H1",
      "H2",
      "H3",
      "P"
    ],
    "confirmatoryArms": [
      "A",
      "H2"
    ],
    "exploratoryArms": [
      "H1",
      "H3",
      "P"
    ],
    "armRoles": {
      "A": "SurvivalGuard policy, unattended, evented. Decision-to-execution latency is a measured input, never zero.",
      "H1": "REPORT-PLAN §3: a human always at the screen, no operational error, threshold rules, total event-to-broadcast delay U(5,15) s, +45 s per extra book, sequential. FULL RUN ONLY, and exploratory.",
      "H2": "Real schedule, phone notifications, sequential books. Every parameter in H2_MODEL is published.",
      "H3": "H2 with a hard 23:00-07:00 CST off window, forced regardless of the availability table. FULL RUN ONLY, and exploratory.",
      "P": "Never repays, never closes. Measures whether intervening helps at all."
    },
    "cells": [
      {
        "cellId": "grind-work-b1",
        "books": 1
      },
      {
        "cellId": "grind-work-b3",
        "books": 3
      },
      {
        "cellId": "grind-night-b1",
        "books": 1
      },
      {
        "cellId": "grind-night-b3",
        "books": 3
      },
      {
        "cellId": "crash-work-b1",
        "books": 1
      },
      {
        "cellId": "crash-work-b3",
        "books": 3
      },
      {
        "cellId": "crash-night-b1",
        "books": 1
      },
      {
        "cellId": "crash-night-b3",
        "books": 3
      },
      {
        "cellId": "wick-persist-work-b1",
        "books": 1
      },
      {
        "cellId": "wick-persist-work-b3",
        "books": 3
      },
      {
        "cellId": "wick-persist-night-b1",
        "books": 1
      },
      {
        "cellId": "wick-persist-night-b3",
        "books": 3
      },
      {
        "cellId": "wick-1block-work-b1",
        "books": 1
      },
      {
        "cellId": "wick-1block-work-b3",
        "books": 3
      },
      {
        "cellId": "wick-1block-night-b1",
        "books": 1
      },
      {
        "cellId": "wick-1block-night-b3",
        "books": 3
      }
    ],
    "pathsPerCell": 50,
    "nPaths": 800,
    "nRuns": 4000,
    "nBookRuns": 8000,
    "confirmatory": "C1 (Wilcoxon signed-rank on paired cost-inclusive terminal equity, A vs H2) and C1b (paired CVaR(5%)), Holm-corrected over the family of two that was actually run.",
    "armRRemoved": "Arm R is removed by the operator's decision and has no substitute.",
    "chain": "Nothing new on chain. BSC 56/97 only. Testnet U and mock tokens are never converted to dollars."
  },
  "seeds": {
    "base": 1000,
    "block": "{1000…1799}",
    "perCell": [
      {
        "cellId": "grind-work-b1",
        "seeds": [
          1000,
          1001,
          1002,
          1003,
          1004,
          1005,
          1006,
          1007,
          1008,
          1009,
          1010,
          1011,
          1012,
          1013,
          1014,
          1015,
          1016,
          1017,
          1018,
          1019,
          1020,
          1021,
          1022,
          1023,
          1024,
          1025,
          1026,
          1027,
          1028,
          1029,
          1030,
          1031,
          1032,
          1033,
          1034,
          1035,
          1036,
          1037,
          1038,
          1039,
          1040,
          1041,
          1042,
          1043,
          1044,
          1045,
          1046,
          1047,
          1048,
          1049
        ]
      },
      {
        "cellId": "grind-work-b3",
        "seeds": [
          1050,
          1051,
          1052,
          1053,
          1054,
          1055,
          1056,
          1057,
          1058,
          1059,
          1060,
          1061,
          1062,
          1063,
          1064,
          1065,
          1066,
          1067,
          1068,
          1069,
          1070,
          1071,
          1072,
          1073,
          1074,
          1075,
          1076,
          1077,
          1078,
          1079,
          1080,
          1081,
          1082,
          1083,
          1084,
          1085,
          1086,
          1087,
          1088,
          1089,
          1090,
          1091,
          1092,
          1093,
          1094,
          1095,
          1096,
          1097,
          1098,
          1099
        ]
      },
      {
        "cellId": "grind-night-b1",
        "seeds": [
          1100,
          1101,
          1102,
          1103,
          1104,
          1105,
          1106,
          1107,
          1108,
          1109,
          1110,
          1111,
          1112,
          1113,
          1114,
          1115,
          1116,
          1117,
          1118,
          1119,
          1120,
          1121,
          1122,
          1123,
          1124,
          1125,
          1126,
          1127,
          1128,
          1129,
          1130,
          1131,
          1132,
          1133,
          1134,
          1135,
          1136,
          1137,
          1138,
          1139,
          1140,
          1141,
          1142,
          1143,
          1144,
          1145,
          1146,
          1147,
          1148,
          1149
        ]
      },
      {
        "cellId": "grind-night-b3",
        "seeds": [
          1150,
          1151,
          1152,
          1153,
          1154,
          1155,
          1156,
          1157,
          1158,
          1159,
          1160,
          1161,
          1162,
          1163,
          1164,
          1165,
          1166,
          1167,
          1168,
          1169,
          1170,
          1171,
          1172,
          1173,
          1174,
          1175,
          1176,
          1177,
          1178,
          1179,
          1180,
          1181,
          1182,
          1183,
          1184,
          1185,
          1186,
          1187,
          1188,
          1189,
          1190,
          1191,
          1192,
          1193,
          1194,
          1195,
          1196,
          1197,
          1198,
          1199
        ]
      },
      {
        "cellId": "crash-work-b1",
        "seeds": [
          1200,
          1201,
          1202,
          1203,
          1204,
          1205,
          1206,
          1207,
          1208,
          1209,
          1210,
          1211,
          1212,
          1213,
          1214,
          1215,
          1216,
          1217,
          1218,
          1219,
          1220,
          1221,
          1222,
          1223,
          1224,
          1225,
          1226,
          1227,
          1228,
          1229,
          1230,
          1231,
          1232,
          1233,
          1234,
          1235,
          1236,
          1237,
          1238,
          1239,
          1240,
          1241,
          1242,
          1243,
          1244,
          1245,
          1246,
          1247,
          1248,
          1249
        ]
      },
      {
        "cellId": "crash-work-b3",
        "seeds": [
          1250,
          1251,
          1252,
          1253,
          1254,
          1255,
          1256,
          1257,
          1258,
          1259,
          1260,
          1261,
          1262,
          1263,
          1264,
          1265,
          1266,
          1267,
          1268,
          1269,
          1270,
          1271,
          1272,
          1273,
          1274,
          1275,
          1276,
          1277,
          1278,
          1279,
          1280,
          1281,
          1282,
          1283,
          1284,
          1285,
          1286,
          1287,
          1288,
          1289,
          1290,
          1291,
          1292,
          1293,
          1294,
          1295,
          1296,
          1297,
          1298,
          1299
        ]
      },
      {
        "cellId": "crash-night-b1",
        "seeds": [
          1300,
          1301,
          1302,
          1303,
          1304,
          1305,
          1306,
          1307,
          1308,
          1309,
          1310,
          1311,
          1312,
          1313,
          1314,
          1315,
          1316,
          1317,
          1318,
          1319,
          1320,
          1321,
          1322,
          1323,
          1324,
          1325,
          1326,
          1327,
          1328,
          1329,
          1330,
          1331,
          1332,
          1333,
          1334,
          1335,
          1336,
          1337,
          1338,
          1339,
          1340,
          1341,
          1342,
          1343,
          1344,
          1345,
          1346,
          1347,
          1348,
          1349
        ]
      },
      {
        "cellId": "crash-night-b3",
        "seeds": [
          1350,
          1351,
          1352,
          1353,
          1354,
          1355,
          1356,
          1357,
          1358,
          1359,
          1360,
          1361,
          1362,
          1363,
          1364,
          1365,
          1366,
          1367,
          1368,
          1369,
          1370,
          1371,
          1372,
          1373,
          1374,
          1375,
          1376,
          1377,
          1378,
          1379,
          1380,
          1381,
          1382,
          1383,
          1384,
          1385,
          1386,
          1387,
          1388,
          1389,
          1390,
          1391,
          1392,
          1393,
          1394,
          1395,
          1396,
          1397,
          1398,
          1399
        ]
      },
      {
        "cellId": "wick-persist-work-b1",
        "seeds": [
          1400,
          1401,
          1402,
          1403,
          1404,
          1405,
          1406,
          1407,
          1408,
          1409,
          1410,
          1411,
          1412,
          1413,
          1414,
          1415,
          1416,
          1417,
          1418,
          1419,
          1420,
          1421,
          1422,
          1423,
          1424,
          1425,
          1426,
          1427,
          1428,
          1429,
          1430,
          1431,
          1432,
          1433,
          1434,
          1435,
          1436,
          1437,
          1438,
          1439,
          1440,
          1441,
          1442,
          1443,
          1444,
          1445,
          1446,
          1447,
          1448,
          1449
        ]
      },
      {
        "cellId": "wick-persist-work-b3",
        "seeds": [
          1450,
          1451,
          1452,
          1453,
          1454,
          1455,
          1456,
          1457,
          1458,
          1459,
          1460,
          1461,
          1462,
          1463,
          1464,
          1465,
          1466,
          1467,
          1468,
          1469,
          1470,
          1471,
          1472,
          1473,
          1474,
          1475,
          1476,
          1477,
          1478,
          1479,
          1480,
          1481,
          1482,
          1483,
          1484,
          1485,
          1486,
          1487,
          1488,
          1489,
          1490,
          1491,
          1492,
          1493,
          1494,
          1495,
          1496,
          1497,
          1498,
          1499
        ]
      },
      {
        "cellId": "wick-persist-night-b1",
        "seeds": [
          1500,
          1501,
          1502,
          1503,
          1504,
          1505,
          1506,
          1507,
          1508,
          1509,
          1510,
          1511,
          1512,
          1513,
          1514,
          1515,
          1516,
          1517,
          1518,
          1519,
          1520,
          1521,
          1522,
          1523,
          1524,
          1525,
          1526,
          1527,
          1528,
          1529,
          1530,
          1531,
          1532,
          1533,
          1534,
          1535,
          1536,
          1537,
          1538,
          1539,
          1540,
          1541,
          1542,
          1543,
          1544,
          1545,
          1546,
          1547,
          1548,
          1549
        ]
      },
      {
        "cellId": "wick-persist-night-b3",
        "seeds": [
          1550,
          1551,
          1552,
          1553,
          1554,
          1555,
          1556,
          1557,
          1558,
          1559,
          1560,
          1561,
          1562,
          1563,
          1564,
          1565,
          1566,
          1567,
          1568,
          1569,
          1570,
          1571,
          1572,
          1573,
          1574,
          1575,
          1576,
          1577,
          1578,
          1579,
          1580,
          1581,
          1582,
          1583,
          1584,
          1585,
          1586,
          1587,
          1588,
          1589,
          1590,
          1591,
          1592,
          1593,
          1594,
          1595,
          1596,
          1597,
          1598,
          1599
        ]
      },
      {
        "cellId": "wick-1block-work-b1",
        "seeds": [
          1600,
          1601,
          1602,
          1603,
          1604,
          1605,
          1606,
          1607,
          1608,
          1609,
          1610,
          1611,
          1612,
          1613,
          1614,
          1615,
          1616,
          1617,
          1618,
          1619,
          1620,
          1621,
          1622,
          1623,
          1624,
          1625,
          1626,
          1627,
          1628,
          1629,
          1630,
          1631,
          1632,
          1633,
          1634,
          1635,
          1636,
          1637,
          1638,
          1639,
          1640,
          1641,
          1642,
          1643,
          1644,
          1645,
          1646,
          1647,
          1648,
          1649
        ]
      },
      {
        "cellId": "wick-1block-work-b3",
        "seeds": [
          1650,
          1651,
          1652,
          1653,
          1654,
          1655,
          1656,
          1657,
          1658,
          1659,
          1660,
          1661,
          1662,
          1663,
          1664,
          1665,
          1666,
          1667,
          1668,
          1669,
          1670,
          1671,
          1672,
          1673,
          1674,
          1675,
          1676,
          1677,
          1678,
          1679,
          1680,
          1681,
          1682,
          1683,
          1684,
          1685,
          1686,
          1687,
          1688,
          1689,
          1690,
          1691,
          1692,
          1693,
          1694,
          1695,
          1696,
          1697,
          1698,
          1699
        ]
      },
      {
        "cellId": "wick-1block-night-b1",
        "seeds": [
          1700,
          1701,
          1702,
          1703,
          1704,
          1705,
          1706,
          1707,
          1708,
          1709,
          1710,
          1711,
          1712,
          1713,
          1714,
          1715,
          1716,
          1717,
          1718,
          1719,
          1720,
          1721,
          1722,
          1723,
          1724,
          1725,
          1726,
          1727,
          1728,
          1729,
          1730,
          1731,
          1732,
          1733,
          1734,
          1735,
          1736,
          1737,
          1738,
          1739,
          1740,
          1741,
          1742,
          1743,
          1744,
          1745,
          1746,
          1747,
          1748,
          1749
        ]
      },
      {
        "cellId": "wick-1block-night-b3",
        "seeds": [
          1750,
          1751,
          1752,
          1753,
          1754,
          1755,
          1756,
          1757,
          1758,
          1759,
          1760,
          1761,
          1762,
          1763,
          1764,
          1765,
          1766,
          1767,
          1768,
          1769,
          1770,
          1771,
          1772,
          1773,
          1774,
          1775,
          1776,
          1777,
          1778,
          1779,
          1780,
          1781,
          1782,
          1783,
          1784,
          1785,
          1786,
          1787,
          1788,
          1789,
          1790,
          1791,
          1792,
          1793,
          1794,
          1795,
          1796,
          1797,
          1798,
          1799
        ]
      }
    ],
    "bootstrapSeed": 90000,
    "bootstrapIters": 10000
  },
  "digests": {
    "pathsSha256": "7276ab036a5a83884972a67fee3cc5339d2c8cbbe823f1304285923daab31ef1",
    "pathsSha256Scope": "sha256 over the compact serialisation of `paths` alone, so re-running reproduces it",
    "pathsSha256SecondGeneration": "7276ab036a5a83884972a67fee3cc5339d2c8cbbe823f1304285923daab31ef1",
    "runsSha256": "9441b1bdaff9e42525816cb7cba75048f2ad0e6d035a2a67fae95616404d6117",
    "runsSha256Scope": "sha256 over the whole T1-runs.jsonl byte stream"
  },
  "frozenInputs": {
    "openingPositionPerBook": {
      "balances": {
        "freeN": 277.1722222222222,
        "freeR": 0,
        "encR": 3.5636428571428573,
        "debtN": 1293.4703703703703
      },
      "p0": 700,
      "hf0": 1.35,
      "triggerHf": 1.15,
      "targetHf": 1.4,
      "maxRepayPerProtect": 277.1722222222222,
      "derivation": "collateral $2,494.55 (Demo Lab, ONCHAIN-97) at listed $700 (DeployTestnetV2); debt derived so HF0 = 1.35 at LT 7000 bps; buffer = 1.2x mechanical repay from trigger 1.15 to target 1.40."
    },
    "venue": {
      "name": "aave-v3-shaped/mockpool-v2",
      "ltBps": 7000,
      "closeFactorBps": 5000,
      "closeFactorFullBelowHf": 0.95,
      "liquidationBonusBps": 500,
      "liquidationHf": 1,
      "provenance": "LT 7000 bps from DeployTestnetV2.s.sol listReserve(wbnb, 700e8, 7000, 7500). Close factor and bonus PROVISIONAL — see comment; resolve at freeze into outputs/sim/venue-profiles.json."
    },
    "costs": {
      "keeperFeeBps": 10,
      "gasCostPerTxN": 0.00751,
      "swapFeeBps": 5,
      "impactValueNPerBp": 717,
      "borrowApr": 0,
      "provenance": {
        "keeperFeeBps": "MEASURED from source — SurvivalGuard.sol `uint16 public feeBps = 10`.",
        "gasCostPerTxN": "ONCHAIN-56 — E2 gas reconciliation: 507,674,350,000,000 wei over 48 transactions = 0.0000105766 BNB = $0.00751/tx.",
        "swapFeeBps": "Pancake V3 WBNB/USDT 0.05% tier. E2's own pool.",
        "impactValueNPerBp": "ONCHAIN-56 — at the thinnest liquidity in agents/ranger-history.json (L = 5.18e23), $717 of flow moves the price 1 bp.",
        "borrowApr": "MockPoolV2 mints a static debt token and accrues nothing, so 0 mirrors the contract exactly. At 5% APR on $1,293 over the longest MVP path (9 h) interest would be $0.066 — 4.5 bps of opening equity, below the gas line. The INTEREST event exists so the full run can switch this on without a schema change."
      }
    },
    "volDaily": {
      "value": 0.0242,
      "label": "ONCHAIN-56",
      "source": "agents/ranger-history.json realised vol, via CONFLICT-VERDICTS schedule verdict"
    },
    "latency": {
      "A": {
        "measuredAnchorSec": {
          "value": 6,
          "label": "ONCHAIN-97",
          "source": "Demo Lab dip-to-repay, tx 0xbe97e2fa…c7d8. One path — it calibrates A's delay, it is not n = 50."
        },
        "jitterMaxSec": {
          "value": 6,
          "label": "CALIBRATION-TARGET",
          "source": "REPORT-PLAN §6.7 latency table, A (lab) = 6–12 s. Drawn U(0, 6) on top of the measured floor."
        }
      },
      "chainMineSec": {
        "value": 3,
        "label": "CALIBRATION-TARGET",
        "source": "inputs/T1-liquidation-factorial.md frozen constants — 'chain mine +3 s'."
      },
      "liquidator": {
        "medianSec": 15,
        "sigmaLn": 0.4,
        "label": "CALIBRATION-TARGET",
        "source": "inputs/T1-liquidation-factorial.md — LogNormal(median 15 s, sigma_ln 0.4). Testnet is not mainnet MEV."
      }
    },
    "agentRoundRobinSec": {
      "value": 3,
      "label": "CALIBRATION-TARGET",
      "source": "LATENCY_MVP.chainMineSec, reused rather than restated — one protect per block, round-robin. Conservative: a keeper batching consecutive nonces can land every book in one block, so this over-charges arm A."
    },
    "humanExtraBookSec": 45
  },
  "gapsClosed": {
    "model": [
      {
        "where": "REPORT-PLAN §3.1 availability table",
        "gap": "Weekend rows cover 10:00–23:00 and 'weekend night = weekday night' (23:00–09:00). Weekend 09:00–10:00 is in neither row.",
        "decision": "weekend-day extended to 09:00–23:00, so the four buckets tile the day with no hole."
      },
      {
        "where": "REPORT-PLAN §6.4 shock table",
        "gap": "Gives shock duration but not total path horizon, so the terminal mark would land exactly on the last shock tick.",
        "decision": "Each scenario carries an explicit settle tail (SCENARIOS[*].pathDurationSec) so the terminal price is a settled price, identical for every arm."
      },
      {
        "where": "MockPoolV2",
        "gap": "The mock pool has no liquidation entry point and accrues no interest, so neither can be mirrored from the contract.",
        "decision": "Liquidation is modelled from VENUE_MVP (close factor, bonus); interest is modelled at borrowApr = 0, which is what MockPoolV2 actually does. The INTEREST event exists so the full run can switch it on without a schema change."
      }
    ],
    "engine": [
      {
        "where": "the race",
        "gap": "REPORT-PLAN §6.5 defines survival as 'HF never spent a block < 1.0 without a successful repay in that block or the next' but does not say who wins when a seizure and a repay land in the same second.",
        "decision": "The liquidator wins ties. Scheduled events resolve OBSERVE, then LIQUIDATE, then EXECUTE at equal simulated time.",
        "direction": "Against arm A. It is also the truthful ordering — a liquidation bot outbids a keeper for position inside a block."
      },
      {
        "where": "SurvivalGuard.protect() reverts",
        "gap": "A protect that is no longer eligible at mine time (debt already seized, HF back above trigger, buffer empty) reverts. A reverted transaction still burns gas — but a keeper that calls previewProtect first never broadcasts it.",
        "decision": "The keeper is modelled as calling previewProtect: an ineligible protect is not broadcast, so it costs no gas and emits no event. Eligibility is re-evaluated at MINE TIME against the state the transaction actually lands in.",
        "direction": "Marginally toward arm A, bounded by COSTS_MVP.gasCostPerTxN = 0.00751 N per avoided revert — 0.05 bps of opening equity. previewProtect exists in the deployed contract for exactly this and the Demo Lab keeper uses it."
      },
      {
        "where": "SurvivalGuard.Plan.cooldown",
        "gap": "The frozen constants in inputs/T1-liquidation-factorial.md do not give a cooldown, and the contract requires one.",
        "decision": "cooldown = 0. The binding guard is the contract's own: protect() reverts unless HF < trigger AND the clamped amount is non-zero AND HF strictly improves, so an exhausted buffer stops the loop without a timer.",
        "direction": "Neutral on the MVP paths. Verified: the buffer funds at most two protects before _clamp returns 'no buffer balance'."
      },
      {
        "where": "arm H2",
        "gap": "REPORT-PLAN §3.1's availability table leaves several things open — where the notice clock starts after an OFF stretch, what happens to a notification in flight across a bucket boundary, and how many uniforms a call costs.",
        "decision": "The engine does not answer any of them. `HumanAgent` in `human.ts` owns the human model and states its four decisions there; this engine asks it `respondTo(eventTSec)` and does nothing with the answer but schedule it. A second implementation of H2 living in the engine is a second implementation that will disagree with the first.",
        "direction": "As documented in human.ts. Its decision 2 in particular favours H2, and therefore flatters arm A least, which is the correct direction for C1's own comparator."
      },
      {
        "where": "when a keeper decides, as opposed to when it executes",
        "gap": "An arm that re-arms on every observation below the trigger would keep scheduling protects after its buffer is spent.",
        "decision": "Both A and H2 gate on `previewProtect` — the contract's own view function — before deciding at all, and `executeProtect` re-runs every gate at mine time. Deciding on a preview and executing against live state is what a keeper does.",
        "direction": "Identical gate for both arms, so it cannot move C1. It also removes the only path by which an exhausted buffer could burn gas."
      },
      {
        "where": "a broadcast protect that the market overtakes",
        "gap": "REPORT-PLAN says nothing about what a keeper does when its transaction is already in flight and the position recovers before the block lands. On `wick-1block` this was not a corner case when the trough was ONE 3 s block: arm A's total delay is 9-15 s from the observation that trips the trigger, so its transaction mined at an ABSOLUTE 12-18 s of path time against a market that had recovered at 6 s, and EVERY protect A sent on that shock was obsolete before it mined. The trough is now 24 s with the recovery printed at 27 s, so A's protect lands inside it on every draw and this rule no longer decides the cell. (Two numbers that must not be confused: 9-15 s is the DELAY; 12-18 s was the absolute mine time under the superseded geometry.)",
        "decision": "The engine re-runs every one of SurvivalGuard.protect's gates at MINE TIME and, when HealthFactorAboveTrigger now fails, treats the transaction as never broadcast: no gas, no event. That is the same rule as the previewProtect row above, applied to a window the preview cannot actually see into — the preview happens at DECISION time and the ineligibility arises between broadcast and mine. A transaction already in the mempool is mined and reverts, and a revert burns gas.",
        "direction": "TOWARD ARM A, and on `wick-1block` it is worth the WHOLE of the pre-registered loss rather than a rounding error: A pays nothing at all on that shock and ties passive exactly, where charging one reverted transaction's gas would put it 0.05 bps behind. Left as it is on purpose — changing it after seeing that the pre-registered loss failed to appear would be fitting the model to its own forecast. It is a pre-registration decision for the full run."
      },
      {
        "where": "the oracle",
        "gap": "MockPoolV2 prices are uint256 with 8 decimals; the generated path is float64.",
        "decision": "Every price an actor sees is `oraclePrice(p)` — the path price rounded to the oracle's 8 decimals. One price, used by the pool mirror, by protectAmounts and as `priceAtEvent`, so the pool and the ledger can never be looking at different numbers.",
        "direction": "Neutral and shared. Worth at most 5e-9 N per risk unit — the mock pool's own quote unit, not dollars — and identical for every arm, so it cancels in the paired difference. The terminal mark stays the raw exogenous path price via terminalEquityOf, likewise identical for every arm."
      },
      {
        "where": "the path horizon",
        "gap": "An event scheduled past the last observation of the path has no price to execute at and no window in which to be observed.",
        "decision": "Nothing is scheduled beyond the horizon. A trigger crossed with no repay mined before the horizon (or before a seizure) is recorded as CENSORED, which is REPORT-PLAN §6.5's own rule for the latency secondary.",
        "direction": "Shared across arms — the horizon is a property of the exogenous path. The MVP shocks complete well inside it."
      }
    ]
  },
  "timings": {
    "armReplayMs": 19221
  },
  "runtime": {
    "node": "v22.23.1",
    "platform": "darwin"
  },
  "artefacts": {
    "paths": "T1-paths.json",
    "pathsBytes": 29035626,
    "runs": "T1-runs.jsonl",
    "cells": "T1-cells.json",
    "confirmatory": "T1-confirmatory.json",
    "report": "T1-FULL-REPORT.md"
  },
  "verification": [
    {
      "id": "V1",
      "name": "800 paths x 5 arms = 4000 runs, every path complete",
      "ok": true,
      "detail": "4000 runs over 800 paths; per arm A=800 H1=800 H2=800 H3=800 P=800; 1-book=2000 3-book=2000; 0 incomplete paths"
    },
    {
      "id": "V2",
      "name": "E(T) = E_hodl(T) + TR on all 8000 book-level runs and all 4000 portfolios, recomputed from the stored records",
      "ok": true,
      "detail": "worst relative residual 4.420e-16 (H2 on crash-night-b1#1316 book); book identity 0 bad, equity-vs-balances 0 bad, portfolio identity 0 bad"
    },
    {
      "id": "V3a",
      "name": "passive is liquidated on every book of the three shocks that fall and stay down",
      "ok": true,
      "detail": "1200/1200 passive book-runs liquidated on grind / crash / wick-persist"
    },
    {
      "id": "V3b",
      "name": "the wick-1block market REPAIRS ITSELF — every path ends above the trigger, and no seizure lands at or after the recovery print",
      "ok": true,
      "detail": "400/400 passive book-runs ended above the trigger price and 0 seizures landed at or after the 27s recovery print; passive survived 50/400 (0.125), which is the liquidator race — derived target P(d >= 24) = 0.120 — and NOT a property of the shape"
    },
    {
      "id": "V4a",
      "name": "all five arms open identically on every path",
      "ok": true,
      "detail": "800/800 paths"
    },
    {
      "id": "V4b",
      "name": "all five arms mark at the path's own terminal price",
      "ok": true,
      "detail": "800/800 agree with each other, 800/800 agree with the path's last point"
    },
    {
      "id": "V4c",
      "name": "the liquidator draw is shared BETWEEN ARMS: idle arms are seized at the same second, book by book",
      "ok": true,
      "detail": "1422/1422 (path, book) slots where two or more arms did nothing and were seized; 2758 book-runs excluded because they acted"
    },
    {
      "id": "V4d",
      "name": "the liquidator draw is INDEPENDENT ACROSS BOOKS: a three-book passive portfolio is not seized at one instant",
      "ok": true,
      "detail": "400/400 three-book passive portfolios were seized at more than one distinct second (0 at a single second, which on a step shock is possible by coincidence and is not a failure unless it is all of them)"
    },
    {
      "id": "V5",
      "name": "the same seed reproduces the same run, arm-internal draws and every book included",
      "ok": true,
      "detail": "20 re-runs over 4 paths x 5 arms; 0 differed"
    },
    {
      "id": "V6",
      "name": "the cell file and the scoring stage's own recomputation agree on every cell",
      "ok": true,
      "detail": "16/16 cells agree"
    },
    {
      "id": "V7",
      "name": "the runner never calls runArmForTest",
      "ok": true,
      "detail": "0 call sites in run-full.ts"
    },
    {
      "id": "V8a",
      "name": "every seizure applied the close factor its own health factor selects (5000 at or above HF 0.95, 10000 below)",
      "ok": true,
      "detail": "5066/5066 seizures agree"
    },
    {
      "id": "V8b",
      "name": "the realised close factor per cell is the one the shock's depth implies: 5000 on the -28% shocks, 10000 on the -35% shocks",
      "ok": true,
      "detail": "per cell, bps: grind-work-b1=5000 grind-work-b3=5000 grind-night-b1=5000 grind-night-b3=5000 crash-work-b1=5000 crash-work-b3=5000 crash-night-b1=5000 crash-night-b3=5000 wick-persist-work-b1=10000 wick-persist-work-b3=10000 wick-persist-night-b1=10000 wick-persist-night-b3=10000 wick-1block-work-b1=10000 wick-1block-work-b3=10000 wick-1block-night-b1=10000 wick-1block-night-b3=10000"
    },
    {
      "id": "V9",
      "name": "a one-book portfolio is byte-identical to the MVP's runArm — one engine, not two",
      "ok": true,
      "detail": "9 comparisons over 3 one-book paths x 3 MVP arms; 0 differed"
    },
    {
      "id": "V10",
      "name": "the Books axis is real: three books are three ledgers, and book 2 is reached one round-robin behind book 0 by the agent and two hand-overs behind by every human arm",
      "ok": true,
      "detail": "2000 three-book portfolios, 0 with the wrong book count. Broadcast offset book2 - book0. Arm A: mean 5.806 s, range [0.248, 11.848] over 400 — expected mean 6 s (= 2 x 3) inside [0, 12], because A draws its U(0,6) s jitter per transaction; 3 s.e. of the mean is 0.3674 s. H1: mean 90.000 s, range [90.000, 90.000] over 400; H2: mean 90.000 s, range [90.000, 90.000] over 206; H3: mean 90.000 s, range [90.000, 90.000] over 198 — expected exactly 90 s (= 2 x 45), no per-book draw."
    },
    {
      "id": "V11",
      "name": "PRE-REGISTERED: arm A finishes BELOW passive on wick-1block, the shock that recovers",
      "ok": false,
      "detail": "FAILED, for the SECOND time and for the same reason the MVP recorded. Median paired gap A - P is +1830.175 bps over 200 pairs: A is ABOVE passive on 72.0% of paths and below it on only 11.0%. A -35% wick crosses HF 1.0, so the trough that is long enough for arm A's protect to land is also long enough for the liquidator to reach passive. This is a failed PREDICTION, not a failed pipeline, and it is reported as one."
    }
  ],
  "allChecksPassed": false,
  "verificationNote": "V11 is not a check on the pipeline. It is the pre-registered prediction confronted with the run, and a FAIL there is a failed prediction reported as failed — which is what a pre-registration is for.",
  "populationGeneratedAtUtc": "2026-09-07T13:46:44.568Z",
  "issue": {
    "kind": "rescore",
    "note": "PHASE 3 ONLY. The paths, the runs and the cells on disk are the ones this manifest already recorded — R1 and R2 below recompute their digests and this reissue refuses if either has moved. Nothing in the population was regenerated; the confirmatory record and the report were rewritten from it, and this manifest is re-dated so that it is not older than the document it certifies.",
    "nRescoresSince": 20,
    "populationUntouched": true,
    "integrity": [
      {
        "id": "R1",
        "name": "T1-runs.jsonl on disk is byte-for-byte the file the manifest recorded — no run was regenerated",
        "ok": true,
        "detail": "sha256 9441b1bdaff9e42525816cb7cba75048f2ad0e6d035a2a67fae95616404d6117 against the manifest's 9441b1bdaff9e42525816cb7cba75048f2ad0e6d035a2a67fae95616404d6117"
      },
      {
        "id": "R2",
        "name": "T1-paths.json's path population is the one the manifest recorded — no path was regenerated",
        "ok": true,
        "detail": "sha256 7276ab036a5a83884972a67fee3cc5339d2c8cbbe823f1304285923daab31ef1 against the manifest's 7276ab036a5a83884972a67fee3cc5339d2c8cbbe823f1304285923daab31ef1 (envelope says 7276ab036a5a83884972a67fee3cc5339d2c8cbbe823f1304285923daab31ef1)"
      }
    ]
  },
  "analysisDigests": {
    "confirmatorySha256": "48bc23eaf6b94b5fb7cd04ad85a91ffd1353cc5aed8ee5d590bf0f16bbd9578b",
    "reportSha256": "c3faf64a6efab09a0ff098907bbe0231d18a115f9f1c0f5ef571b61777b07154",
    "reportFile": "T1-FULL-REPORT.md",
    "scope": "sha256 over each file's whole byte stream, computed after phase 3 wrote it"
  }
}
