{
  "issue": "#130",
  "generated": "2026-08-12T00:00:00Z",
  "generated_by": "hand-curated for issue #130 and maintained through the completed #162 result. The Gate C figures under `gate_c` were computed at 2026-08-09T22:59:17Z by calling existing, already-tested library code (`forward.coverage.coverage_for_version`, `forward.versions.record_not_frozen`) and are NOT a new estimator. Nothing in this file recomputes, refits or re-verdicts any research result. Integrating post-2h-crawl-decisions adds four documents this source did not classify: #176's executable-markout veto, #179's twenty-second gate and #200's latency20 negative stop as entries, and #169's scorecard surface as an explicit exclusion. Each verdict is copied from the cited document or its committed sidecar; nothing here recomputes or reinterprets a result.",
  "scope_note": "Every terminal research result, supporting measurement and operational status with a committed write-up under docs/research/, plus the two objects that have no committed write-up of their own (the v2 non-result and Gate C's cadence coverage). Preregistrations and evaluation instruments are listed under not_indexed as protocol inputs rather than mislabelled as terminal results. Reciprocity between `supersedes`/`superseded-by` is checked mechanically over docs/research/*.md and docs/adr/*.md (see `reciprocity_scope`).",
  "reciprocity_scope": [
    "docs/research/*.md",
    "docs/adr/*.md"
  ],
  "status_vocabulary": {
    "doc-status": [
      "canonical",
      "superseded",
      "archival"
    ],
    "result_type": [
      "result",
      "mixed",
      "negative-result",
      "inconclusive",
      "non-result",
      "supporting-measurement",
      "operational-status"
    ]
  },
  "entries": [
    {
      "id": "bid-ask-bounce",
      "title": "Bid-ask bounce, or real mean reversion?",
      "doc": "docs/research/bid-ask-bounce.md",
      "data": [
        "docs/research/bid-ask-bounce.json"
      ],
      "generator": "python -m analysis.bounce",
      "category": "forecast",
      "doc_status": "canonical",
      "result_type": "mixed",
      "target": "Whether the same-day return-reversal signal is mechanical bid-ask bounce or a real mean-reversion effect.",
      "population": "Tradeable tier (median spread <= 15.0%), re-screened per panel.",
      "resolution": "1d and 2h panels, both reported separately -- the two resolutions disagree and neither is reconciled toward the other.",
      "cutoff": "Development span only; sealed period (>= 2026-02-01) not read on either panel.",
      "baseline": "Same-side (mid vs. bid vs. ask) decomposition -- tests whether the signal survives when measured on a single book side, not a fitted null.",
      "limitations": "2h result is INCONCLUSIVE and reported as a result in its own right, not reconciled toward the 1d GENUINE answer.",
      "verdict": "1d \u2014 GENUINE \u2014 the signal survives measured on a single side (mid -0.29, bid -0.39, ask -0.27; touch retention 113%), so it is not bid-ask bounce. 2h \u2014 INCONCLUSIVE \u2014 the signal partly survives measured on a single side (mid -0.36, bid -0.30, ask -0.20; touch retention 71%). Some is bounce and some may be real; this test cannot apportion it. Return-based models stay blocked [at 2h].",
      "verify_substring_1d": "GENUINE \u2014 the signal survives measured on a single side (mid -0.29, bid -0.39, ask -0.27; touch retention 113%)",
      "verify_substring_2h": "INCONCLUSIVE \u2014 the signal partly survives measured on a single side (mid -0.36, bid -0.30, ask -0.20; touch retention 71%)",
      "issues_referenced": [
        "#41",
        "#42",
        "#45",
        "#47",
        "#57"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "REQUIRED NEGATIVE/INCONCLUSIVE RESULT for issue #130's index acceptance criterion. The 2h INCONCLUSIVE half is reported as a result in its own right rather than reconciled toward the 1d answer -- 'the two resolutions disagree, and that disagreement is reported as a result' (CONTEXT.md)."
    },
    {
      "id": "bound-artifact-fill-impact",
      "title": "What the price-bound guard changes about the measured fill rate",
      "doc": "docs/research/bound-artifact-fill-impact.md",
      "generator": "sim/measure_bound_impact.py",
      "category": "supporting",
      "doc_status": "canonical",
      "result_type": "supporting-measurement",
      "target": "How much of the touch-only fill rate the price-bound guard artifact itself accounts for, versus a real fill.",
      "population": "Tradeable tier, BUY side, VOLUME_CONFIRMED and TOUCH_ONLY fill rules.",
      "resolution": "1d and 2h panels (resolution-dependence addendum, #33).",
      "cutoff": "Development span only.",
      "baseline": "Unguarded fill count (guard off) vs. guarded (BarBookSource's price-bound guard on).",
      "limitations": "Measured only at the touch and at 25% depth on the BUY side; VOLUME_CONFIRMED's higher false-fill share at every depth >=1% is reported without a proposed fix.",
      "verdict": "At the touch the correction is ~1%. At 25% placement depth on the BUY side, 17.83% of unguarded fills came from the price-bound artifact alone under the primary VOLUME_CONFIRMED rule, and VOLUME_CONFIRMED carries a HIGHER false-fill share than TOUCH_ONLY at every depth >= 1% ('confirmation concentrates the contamination rather than diluting it').",
      "verify_substring": "17.83%",
      "issues_referenced": [
        "#23",
        "#33",
        "#34"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "Supports the price-bound guard now standing in BarBookSource; also contains the resolution-dependence addendum (#33): the 2h panel fills more in 11 of 12 measured configurations vs. the daily panel, up to +25.89pp under VOLUME_CONFIRMED at the touch."
    },
    {
      "id": "cohorts",
      "title": "Tradeable cohorts and the patch-event admission rule",
      "doc": "docs/research/cohorts.md",
      "data": [
        "docs/research/cohorts.json"
      ],
      "generator": "python -m analysis.cohorts",
      "category": "supporting",
      "doc_status": "canonical",
      "result_type": "supporting-measurement",
      "target": "Freeze the disjoint cohort partition of the tradeable tier and the fixed per-release list of admitted patch-notice events.",
      "population": "Full tradeable tier, partitioned into cohorts.",
      "resolution": "n/a -- item-cohort partition, not a time-resolution result.",
      "cutoff": "Development span only.",
      "baseline": "n/a -- computes no price aggregate itself (by design); no comparative null applies.",
      "limitations": "Computes no price aggregate; scaffolding consumed by #135's patch-event aggregates, not a hypothesis-test verdict on its own.",
      "verdict": "Freezes the disjoint cohort partition of the tradeable tier and the fixed per-release list of official-notice events admitted into it. Computes no price aggregate itself (by design -- see analysis/cohorts.py docstring).",
      "verify_substring": "Freezes two things",
      "issues_referenced": [
        "#132",
        "#135"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "Publication-eligibility scaffolding under ADR-0005's amendments (disjoint, versioned, closed cohorts), consumed by #135's future aggregates -- not indexed here since #135's own artifacts are a separate, concurrently-developing ticket."
    },
    {
      "id": "depth-widening",
      "title": "Widening historical depth to the tradeable tier",
      "doc": "docs/research/depth-widening.md",
      "data": [
        "docs/research/depth-widening.json"
      ],
      "generator": "python -m analysis.depth_widening",
      "category": "operational",
      "doc_status": "canonical",
      "result_type": "operational-status",
      "target": "Track acquisition progress of /export historical depth widened to the tradeable tier.",
      "population": "413 items, ordered by notional traded per week.",
      "resolution": "n/a -- operational acquisition-progress snapshot, not a price-resolution result.",
      "cutoff": "Current as of generation; figures move as acquisition proceeds.",
      "baseline": "n/a -- operational status, not benchmarked against a null.",
      "limitations": "Not a fixed verdict; the write-up's own item count (2,891 chunks, #40) and the module docstring's (#45) disagree and are both cited rather than reconciled.",
      "verdict": "Operational scope/progress snapshot for the /export widening acquisition (413 items, 2,891 chunks, ordered by notional traded per week). Not a fixed research verdict; figures move as acquisition proceeds.",
      "verify_substring": "2,891",
      "issues_referenced": [
        "#40",
        "#45"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "Issue #45 is the module's own docstring reference (analysis/depth_widening.py); #40 is the number found in the write-up's own text. Both are cited to show the discrepancy rather than picking one."
    },
    {
      "id": "export-coverage",
      "title": "Export coverage",
      "doc": "docs/research/export-coverage.md",
      "data": [
        "docs/research/export-coverage.json",
        "docs/research/export-coverage-by-item-year.csv"
      ],
      "generator": "python -m analysis.export_coverage",
      "category": "operational",
      "doc_status": "canonical",
      "result_type": "operational-status",
      "target": "Report present/absent/failed chunk accounting for the /export acquisition.",
      "population": "413 items, 2,891 chunks.",
      "resolution": "n/a -- operational acquisition-status snapshot.",
      "cutoff": "Current as of generation; figures move as acquisition proceeds.",
      "baseline": "n/a -- operational status, not benchmarked against a null.",
      "limitations": "Absent and failed chunks are reported as distinct outcomes, never collapsed; not a fixed research verdict.",
      "verdict": "Operational acquisition-status snapshot (present/absent/failed chunk accounting), not a fixed research verdict. Figures move as the /export acquisition proceeds; treat as current-as-of-generation only.",
      "verify_substring": "164 chunks",
      "issues_referenced": [
        "#40"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "Explicitly guards the cache invariant: absent and failed chunks are reported as distinct outcomes, never collapsed (docs/writeup/failure-stories.md story 2)."
    },
    {
      "id": "export-rate-limit",
      "title": "Why a 100/min ceiling is reached at one request every three minutes",
      "doc": "docs/research/export-rate-limit.md",
      "data": [
        "docs/research/export-rate-limit.json"
      ],
      "generator": "python -m analysis.rate_limit",
      "category": "supporting",
      "doc_status": "canonical",
      "result_type": "result",
      "target": "Determine why the 100/min export rate ceiling is effectively reached at one request every three minutes.",
      "population": "429-response sample: 73 large chunks vs. 22 small chunks.",
      "resolution": "n/a -- network/rate-limit behavior, not a price-panel result.",
      "cutoff": "Development span only.",
      "baseline": "Compared the FAN-OUT hypothesis against shared-address and competing-process explanations.",
      "limitations": "No issue number is stated inside this document's own text; not guessed.",
      "verdict": "Supported hypothesis: FAN-OUT. 429 risk is 3.9x higher after a large chunk (18% of 73) than after a small one (5% of 22); inconsistent with a shared-address or competing-process explanation.",
      "verify_substring": "Supported hypothesis: FAN-OUT",
      "issues_referenced": [],
      "supersedes": [],
      "superseded_by": [],
      "notes": "No issue number is stated inside this document's own text; not guessed here. Supports the /export acquisition's operational pacing, referenced by depth-widening.md and export-coverage.md."
    },
    {
      "id": "forecast-baselines",
      "title": "Naive forecast baselines",
      "doc": "docs/research/forecast-baselines.md",
      "data": [
        "docs/research/forecast-baselines.json",
        "docs/research/forecast-baselines-per-item.csv"
      ],
      "generator": "python -m analysis.baselines",
      "category": "forecast",
      "doc_status": "canonical",
      "result_type": "supporting-measurement",
      "target": "Establish naive/persistence forecast baselines before any model is built.",
      "population": "Point-in-time tradeable universe, per item, aggregated equal-weighted and notional-weighted.",
      "resolution": "Daily-resolution forward spread targets (y_fwd_spread_dm_{k}d).",
      "cutoff": "Development span only; sealed period not read.",
      "baseline": "Is itself the baseline (climatology / deviation persistence) supplied to spread-forecast.md.",
      "limitations": "Not itself a hypothesis verdict; a precondition artifact published before any model exists, so the null cannot be chosen after seeing model results.",
      "verdict": "Published before any model exists, per the project's standing rule that a null chosen after seeing model results cannot be distinguished from a rationalization. Supplies the persistence/naive nulls spread-forecast.md is graded against.",
      "verify_substring": "Published before any model exists",
      "issues_referenced": [
        "#39",
        "#46"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "Not itself a verdict on any hypothesis; a precondition artifact for spread-forecast.md and any future forecasting work."
    },
    {
      "id": "gate-a-drift",
      "title": "Gate A's long-patience capture: drift, or earned spread?",
      "doc": "docs/research/gate-a-drift.md",
      "data": [
        "docs/research/gate-a-drift.json"
      ],
      "generator": "python -m analysis.drift",
      "category": "gate",
      "doc_status": "canonical",
      "result_type": "result",
      "target": "Decompose Gate A's long-patience positive capture into drift share vs. genuine per-item residual, graded against ADR-0004's pre-registered criteria.",
      "population": "Tradeable tier, 401 items (1d) / 403 items (2h).",
      "resolution": "1d and 2h panels, 7-day patience, touch_only, artifact guard on, 0bps.",
      "cutoff": "Development span only; graded against ADR-0004 criteria fixed before this measurement existed.",
      "baseline": "ADR-0004's pre-registered DRIFT_SHARE_THRESHOLD = 0.5 and median-residual-above-zero criteria.",
      "limitations": "The GENUINELY EARNED grading under ADR-0004 is not re-opened, but ADR-0009 supersedes the completed-cycle residual as the going-forward earned-edge INSTRUMENT -- see this document's own '2026-08-09 additive amendment: residual is not earned edge'.",
      "verdict": "GENUINELY EARNED \u2014 1d: drift share 0.084 is below DRIFT_SHARE_THRESHOLD = 0.5 and the median per-item residual +7.170% is above zero ... ; 2h: drift share -0.062 is below DRIFT_SHARE_THRESHOLD = 0.5 and the median per-item residual +10.819% is above zero ... . Graded against ADR-0004's table, at 7-day patience under touch_only with the artifact guard on, 0bps from the weighted quote reference.",
      "verify_substring": "drift share 0.084 is below DRIFT_SHARE_THRESHOLD = 0.5 and the median per-item residual +7.170% is above zero",
      "issues_referenced": [
        "#55",
        "#62",
        "#63",
        "#84",
        "#89"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "Graded correctly against the pre-registered ADR-0004 criteria; that grading is not re-opened. ADR-0009 supersedes only the INSTRUMENT this result's residual is used for going forward (capture per attempted cycle replaces the completed-cycle residual for future earned-edge claims); it does not change this document's verdict. See ADR-0004's and ADR-0009's front-matter (`superseded-by`/`supersedes`, partial, instrument-only)."
    },
    {
      "id": "gate-a-verdict",
      "title": "Gate A: does any resting-order cycle clear its costs?",
      "doc": "docs/research/gate-a-verdict.md",
      "data": [
        "docs/research/gate-a-verdict.json",
        "docs/research/gate-a-frontier.csv"
      ],
      "generator": "python -m analysis.gate_a_run",
      "category": "gate",
      "doc_status": "canonical",
      "result_type": "mixed",
      "target": "Whether any resting-order cycle clears its costs.",
      "population": "Tradeable tier, 403 items (1d), 401-403 items (3d/7d).",
      "resolution": "1d, 3d and 7d panels; touch_only and volume_confirmed fill rules.",
      "cutoff": "Development span only (2020-05-24 -> 2026-01-31).",
      "baseline": "1-day patience, touch-only, artifact guard on, 0bps, at the touch (this document's own verdict_scope).",
      "limitations": "The 3-day/7-day NOT EXCLUDED region is unresolved evidence, not a positive result -- Gate B's calibration does not cover those horizons.",
      "verdict": "CONCLUSIVE NEGATIVE \u2014 under a touch-only fill rule, which is a proven upper bound on what could have filled, the median resting cycle does not clear its costs (median net capture per attempted cycle -0.530%, 40.7% of items above zero). Real fills are a subset of these, so the true result can only be worse. No depth data can rescue this configuration.",
      "verdict_scope": "1-day patience, touch-only, artifact guard on, 0bps, at the touch",
      "unresolved_region": "At 3-day and 7-day patience the same configuration reports NOT EXCLUDED almost everywhere (median capture +4.462% to +8.521% across depth). This is explicitly NOT a positive result -- Gate B's calibration (2/6/12h patience) does not cover 1/3/7-day horizons, so this region is unresolved evidence, never claimed as a finding, per docs/writeup/technical-narrative.md \u00a75 and ADR-0010's four-gate recommendation standard.",
      "verify_substring": "median net capture per attempted cycle -0.530%, 40.7% of items above zero",
      "issues_referenced": [
        "#34",
        "#63",
        "#126"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "The Gate B quote embedded in this document's own \"Gate B, carried back\" section was checked against the live docs/research/gate-b-calibration.md verdict and is byte-identical as of this index (both are post-#126 regenerations)."
    },
    {
      "id": "gate-b-calibration",
      "title": "Gate B: how much does bar-derived fill detection overstate real fills?",
      "doc": "docs/research/gate-b-calibration.md",
      "data": [
        "docs/research/gate-b-calibration.json",
        "docs/research/gate-b-overstatement.csv"
      ],
      "generator": "python -m analysis.gate_b",
      "category": "gate",
      "doc_status": "canonical",
      "result_type": "result",
      "target": "How much bar-derived fill detection overstates real fills, calibrated against recorded order-book depth.",
      "population": "400-413 items overlapping the 2h panel.",
      "resolution": "2-hour patience, 2h panel; touch-only and volume_confirmed fill rules.",
      "cutoff": "Recorder history 2026-08-04 20:31 -> 2026-08-07 00:26 UTC, read under the named sealing exemption gate_b_calibration (#63).",
      "baseline": "Recorded order-book depth (the frozen panel/recorder overlap) as the ground-truth fill count.",
      "limitations": "FIRST calibration over 51.9 hours / 2,770 resolvable attempted cycles, 0.080% of the 2h panel -- not a settled constant; covers only 2/6/12-hour patience, not 1/3/7-day horizons.",
      "verdict": "NO OVERSTATEMENT MEASURED \u2014 the median item's bar-derived fill count differs from recorded depth by -14.29 percentage points of attempted cycles, and the bar panel MISSED fills the recorded book shows, which is a defect in the opposite direction and is not a reason for confidence; 28% of items overstate. Under the touch-only rule ... bar data is fit for purpose for fill detection at this configuration. This is a FIRST calibration over 51.9 hours of recorded depth, 400 items, 2,770 resolvable attempted cycles ... not a settled constant.",
      "sealing_exemption": "gate_b_calibration (#63)",
      "verify_substring": "the median item's bar-derived fill count differs from recorded depth by -14.29 percentage points",
      "issues_referenced": [
        "#63",
        "#65",
        "#67",
        "#70",
        "#126"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "Regenerated in place twice (after #67's sell-leg resolution-window defect, then after #126's sub-bar lookahead fix). The document records its own prior superseded verdicts inline; there is no separate archived file for those prior figures, so no cross-file supersedes/superseded-by entry applies. Covers only 2/6/12-hour patience -- does NOT calibrate the 1/3/7-day horizons Gate A's long-patience region or any 3/7-day recommendation would need (ADR-0010)."
    },
    {
      "id": "gate-b-self-built",
      "title": "Gate B on self-built bars: a sample that grows, and whether it agrees",
      "doc": "docs/research/gate-b-self-built.md",
      "data": [
        "docs/research/gate-b-self-built.json",
        "docs/research/gate-b-self-built.csv"
      ],
      "generator": "python -m analysis.self_bars",
      "category": "gate",
      "doc_status": "canonical",
      "result_type": "result",
      "target": "Whether Gate B's calibration verdict holds on a self-built, growing bar sample instead of the static panel.",
      "population": "413 items, self-built 2h-grid bars from recorder snapshots.",
      "resolution": "2-hour patience, self-built 2h grid; touch-only fill rule.",
      "cutoff": "Recorder history 2026-08-04 22:00 -> 2026-08-06 23:59 UTC, read under the named sealing exemption gate_b_self_built_bars (#65).",
      "baseline": "gate-b-calibration.md's static-panel sample, compared on weighted prices to a pre-declared 25bps materiality line.",
      "limitations": "FIRST calibration over 51.9 hours / 7,787 resolvable attempted cycles -- not a settled constant; the self-built sample is biased OPTIMISTIC vs. the panel at the bid-side extreme.",
      "verdict": "[sample: self-built bars (recorder snapshots, 2h grid)] NO OVERSTATEMENT MEASURED \u2014 the median item's bar-derived fill count differs from recorded depth by +0.00 percentage points of attempted cycles, and the two agree at the median; 48% of items overstate. ... This is a FIRST calibration over 51.9 hours of recorded depth, 413 items, 7,787 resolvable attempted cycles, not a settled constant.",
      "sealing_exemption": "gate_b_self_built_bars (#65) -- a separate, non-inherited grant from gate_b_calibration (#63); ADR-0002 names this pairing in advance as the demonstration that exemption grants are exact and non-transitive.",
      "verify_substring": "the median item's bar-derived fill count differs from recorded depth by +0.00 percentage points",
      "issues_referenced": [
        "#63",
        "#65",
        "#67",
        "#69",
        "#70",
        "#126"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "Agrees with gate-b-calibration.md's static-panel sample on weighted prices to within a pre-declared 25bps materiality line. Regenerated in place twice for the same two reasons as gate-b-calibration.md (#67, then #126); same inline-supersession note applies."
    },
    {
      "id": "gate-c-cadence",
      "title": "Gate C: observed vs. elapsed cadence windows (not an expected-value verdict)",
      "doc": "forward/coverage.py, forward/versions.py (no committed docs/research/*.md write-up exists for Gate C as of this index)",
      "generator": "forward.coverage.coverage_for_version('v1', ...) -- called live for this index against forward_log/*.ndjson",
      "category": "strategy",
      "doc_status": "n/a (no committed write-up; see notes)",
      "result_type": "operational-status",
      "target": "Report v1's observed vs. elapsed forward-run cadence coverage -- explicitly not an expected-value verdict.",
      "population": "v1 forward-run log only (forward_log/*.ndjson).",
      "resolution": "Daily cadence windows (24h, anchored 02:00 UTC).",
      "cutoff": "Measured live at 2026-08-09T22:59:17Z, over elapsed window 2026-08-07 00:45 -> 2026-08-09 02:00 UTC.",
      "baseline": "n/a -- cadence coverage has no null; it counts elapsed vs. observed windows.",
      "limitations": "No maturity or expected-value claim is made; v1 has no committed `ev` figure yet. v2 has no coverage entry at all -- a NotFrozen version has no pre-registration window.",
      "verdict": "v1 spoke in 3 of 3 elapsed windows (100.0%; 2 with a complete cohort, 1 torn, 0 deliberately empty, 0 with no record) at an assumed 24h cadence anchored 2:00 UTC, over 2026-08-07 00:45 -> 2026-08-09 02:00 UTC. No outages: every one of the 3 elapsed windows has a record. (measured live at 2026-08-09T22:59:17Z)",
      "issues_referenced": [
        "#93",
        "#94",
        "#97",
        "#100",
        "#103",
        "#105"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "NO MATURITY CLAIM IS MADE HERE, deliberately, per issue #130's own acceptance criterion. This is 3 elapsed daily cadence windows since v1 was committed (2026-08-06) -- not a scored expected value. `forward.versions.build_report` requires an externally-supplied `ev` figure for v1 that has not been computed or committed anywhere in this repository as of this index; Gate C therefore has no headline number to report yet, and this entry reports the coverage denominator instead of implying one. v2 has no coverage entry at all -- a NotFrozen version has no pre-registration window (see `v2-not-frozen` above), and offering one would misreport it as having run."
    },
    {
      "id": "lob-coverage",
      "title": "Recorded depth: coverage and provenance",
      "doc": "docs/research/lob-coverage.md",
      "generator": "python sync_lob_depth.py --report",
      "category": "operational",
      "doc_status": "canonical",
      "result_type": "operational-status",
      "target": "Report recorder-era coverage and third-copy backup currency for recorded order-book depth.",
      "population": "n/a -- infrastructure/coverage status, not an item population.",
      "resolution": "n/a -- operational coverage snapshot, regenerated per run.",
      "cutoff": "Current as of generation.",
      "baseline": "n/a -- operational status, not benchmarked against a null.",
      "limitations": "Not a fixed research verdict; no issue number appears in the document's own text.",
      "verdict": "Recorder era coverage and third-copy backup currency, regenerated per run. Not a fixed research verdict.",
      "verify_substring": "Third-copy currency",
      "issues_referenced": [],
      "supersedes": [],
      "superseded_by": [],
      "notes": "No issue number appears inside this document's own text. The Makefile's own comment ties the underlying sync command to issues #41 and #59 ('pull new depth and rebuild the coverage report'); cited from Makefile, not invented, and kept separate from issues_referenced because it is not sourced from lob-coverage.md itself."
    },
    {
      "id": "panel-migration",
      "title": "The calendar-window migration: what moved",
      "doc": "docs/research/panel-migration.md",
      "data": [
        "docs/research/panel-migration.json"
      ],
      "generator": "python -m analysis.panel_migration",
      "category": "supporting",
      "doc_status": "canonical",
      "result_type": "supporting-measurement",
      "target": "What changed in the calendar-window panel migration, and whether Gate A's headline result moved.",
      "population": "Full daily panel and full 2h panel (all columns).",
      "resolution": "1d and 2h panels, column-level diff.",
      "cutoff": "Development span only.",
      "baseline": "Pre-migration panel columns/values, diffed against the post-migration calendar-window panel; Gate A's headline re-run as the standing check.",
      "limitations": "Post-hoc measurement -- ADR-0006's migration decision was made before this measurement existed; movement is tilted outside the tradeable tier on all 8 moved columns but not confined there.",
      "verdict": "Daily panel: 37 columns identical, 8 moved, 4 added; 2h panel: 42 identical, 0 moved, 4 added (must be zero, and is). Gate A's headline re-runs to -0.530% with 40.7% of items above zero -- unchanged. Movement is tilted outside the tradeable tier on all 8 moved columns but NOT confined there.",
      "verify_substring": "37 columns identical",
      "issues_referenced": [
        "#32",
        "#39",
        "#56",
        "#67"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "The post-hoc measurement behind ADR-0006's decision (which the ADR is explicit was decided before this measurement existed, and which this measurement only confirms)."
    },
    {
      "id": "patch-event-aggregates",
      "title": "Fixed-cohort patch-event relative-change aggregates",
      "doc": "docs/research/patch-event-aggregates.md",
      "data": [
        "docs/research/patch-event-aggregates.json"
      ],
      "generator": "python -m analysis.patch_event_aggregates",
      "category": "patch-events",
      "doc_status": "canonical",
      "result_type": "supporting-measurement",
      "target": "Compute fixed-cohort, event-indexed median relative-price-change aggregates for admitted patch-notice events.",
      "population": "9 cohorts, partition tradeable-v1-b3bfe7781e; 182 admitted events.",
      "resolution": "Per-patch-event cohort medians (event-indexed, not fixed-interval).",
      "cutoff": "Development span only.",
      "baseline": "n/a -- a supporting dataset for the optional patch-events route, not a hypothesis-test verdict.",
      "limitations": "287 of the possible cohort-event rows cleared the minimum-sample and promotion gate; no per-item, extreme or cumulative statistic is ever computed or published.",
      "verdict": "287 cohort-event rows cleared the minimum-sample and promotion gate out of 182 admitted events x their matched cohorts (9 cohorts, partition tradeable-v1-b3bfe7781e). Each row is one event's cohort-wide MEDIAN relative price change; no per-item value, extreme or cumulative statistic is ever computed or published. A supporting dataset for the optional patch-events route, not a hypothesis-test verdict.",
      "verify_substring": "287 cohort-event rows cleared the minimum sample and promotion",
      "issues_referenced": [
        "#135",
        "#132",
        "#131"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "Landed in 0608207, 13 minutes before this index's own commit on the same branch -- a completed, tested, already-merged terminal result at the time this index was written, not concurrent in-flight work. An earlier draft of this index excluded it under that mistaken premise; corrected on review."
    },
    {
      "id": "spread-forecast",
      "title": "Forecasting the spread, honestly",
      "doc": "docs/research/spread-forecast.md",
      "data": [
        "docs/research/spread-forecast.json"
      ],
      "generator": "python -m analysis.forecast_spread",
      "category": "forecast",
      "doc_status": "canonical",
      "result_type": "negative-result",
      "target": "Whether a fitted model forecasts the spread better than a naive persistence null.",
      "population": "381 items, 434,492 rows.",
      "resolution": "Daily resolution (2020-08-01 -> 2026-01-31).",
      "cutoff": "Development span only (2020-08-01 -> 2026-01-31).",
      "baseline": "The harder naive/persistence null from forecast-baselines.md.",
      "limitations": "Pooled R2 beats the null but per-item (equal-weighted and notional-weighted) R2 LOSES to it -- reported on the population that matters operationally (per-item), not smoothed into the pooled figure.",
      "verdict": "Pooled R2 beats the harder null (+0.0729 vs -0.0666) but per-item (equal-weighted and notional-weighted) R2 LOSES to it (-0.4959 vs -0.3538; -1.6372 vs -0.4366). Reporting only the pooled figure 'would have been selection dressed as a result.'",
      "verify_substring": "equal-weighted -0.4959 vs -0.3538",
      "issues_referenced": [
        "#42",
        "#46",
        "#57",
        "#64",
        "#66"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "REQUIRED NEGATIVE RESULT for issue #130's index acceptance criterion -- reported as negative on the population that matters operationally (per-item), not smoothed into a qualified positive via the pooled figure. docs/writeup/technical-narrative.md \u00a75 cites this document under 'issue #48'; #48 does not itself appear inside spread-forecast.md's own text (only #42, #46, #57, #64, #66 do) -- flagged here rather than silently resolved, per issue #130's accuracy rule. Also contains the two leakage demonstrations retold in docs/writeup/failure-stories.md story 5."
    },
    {
      "id": "spread-selection",
      "title": "Is the 2h drift residual's excess selection on spread width, or a defect? (#84)",
      "doc": "docs/research/spread-selection.md",
      "generator": "python -m analysis.spread_selection",
      "category": "supporting",
      "doc_status": "canonical",
      "result_type": "result",
      "target": "Whether the 2h drift residual's excess capture is explained by selection on wider fill spreads, or is a defect.",
      "population": "Tradeable tier, completed cycles.",
      "resolution": "1d and 2h panels.",
      "cutoff": "Development span only.",
      "baseline": "Each item's own all-bar spread distribution (fill-vs-item spread delta).",
      "limitations": "Rules out the wide-spread-selection explanation; does not itself identify the surviving explanation (recorded in ADR-0009, not here).",
      "verdict": "Completed cycles select NARROWER, not wider, BUY-fill spreads (median fill-vs-item spread delta -0.403pp at 1d, -1.126pp at 2h); no evidence of an inverted book side, mismatched item, or entry/exit join defect.",
      "verify_substring": "-1.126%",
      "issues_referenced": [
        "#63",
        "#65",
        "#83",
        "#84",
        "#89"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "The bug-hunt evidence behind ADR-0009's instrument change. Rules out the 'wide-spread selection' explanation for the drift-decomposition surprise; the surviving explanation (weighted-quote geometry) is recorded in ADR-0009 itself, not in this document."
    },
    {
      "id": "strategy",
      "title": "Strategy: the tuned sweep",
      "doc": "docs/research/strategy.md",
      "data": [
        "docs/research/strategy.json",
        "docs/research/strategy-frontier.csv"
      ],
      "generator": "python -m analysis.strategy_run",
      "category": "strategy",
      "doc_status": "canonical",
      "result_type": "non-result",
      "target": "Find the interior expected-value optimum over the declared execution-parameter grid.",
      "population": "Tradeable tier, daily panel.",
      "resolution": "Daily-panel sweep (grid search), ordinary panel bar resolver.",
      "cutoff": "Development span only.",
      "baseline": "The declared 648-configuration grid; deflation threshold |t|>=4.11 against 1,296 configurations counted from the automatic tuning ledger.",
      "limitations": "THE OPTIMUM IS NOT IDENTIFIED -- expected value rises monotonically to the grid edge on three axes; the grid bound chose the reported configuration, not the data.",
      "verdict": "THE OPTIMUM IS NOT IDENTIFIED. Expected value rises monotonically to the edge of the grid on depth_bps, sell_depth_bps, ttl_days, and the best configuration sits at that edge. The grid bound chose this configuration, not the data. (grid_edge_unidentified: true; canonical digest 1eeb1ad85faa5d700330d0180334d38a8ea859596f3d140ffe2213e12e525887)",
      "verify_substring": "THE OPTIMUM IS NOT IDENTIFIED",
      "issues_referenced": [
        "#6",
        "#75",
        "#84",
        "#90",
        "#126"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "The evidentiary basis for the v2 NotFrozen non-result recorded in ADR-0007 and mirrored in the `v2-not-frozen` entry below. 1,296 configurations counted from the automatic tuning ledger (deflation threshold |t|>=4.11 vs. the 648-configuration declared grid's 3.95)."
    },
    {
      "id": "item-selection-interior-search",
      "title": "Item-selection interior real-candidate search",
      "doc": "docs/research/item-selection-interior-search.md",
      "data": [
        "docs/research/item-selection-interior-search.json",
        "docs/research/item-selection-interior-search-frontier.csv"
      ],
      "generator": "python -m analysis.item_selection_search",
      "category": "strategy",
      "doc_status": "canonical",
      "result_type": "negative-result",
      "target": "Determine whether a preregistered item-selection grid produces an eligible real-candidate strategy with an interior optimum.",
      "population": "353 items qualified at the daily development panel's final as-of date; 40 selected by the winning cell.",
      "resolution": "Daily panel; 24-hour cadence anchored at 02:00 UTC.",
      "cutoff": "Development span through 2026-01-31T00:00:00+00:00; sealed rows were not used.",
      "baseline": "The preregistered 60-cell grid, graded at the ledger-derived Sidak threshold |t| >= 3.33 under volume-confirmed, pessimistic-equivalent execution.",
      "limitations": "The winner was not significant and sat at both continuous grid boundaries; selection and qualification use the panel's final development-span as-of date rather than being recomputed at every historical tick.",
      "verdict": "Terminal outcome: `grid_edge_unidentified`. The winning vol_7d / 30-day / top-40 cell had +0.9155% EV per attempted cycle over 6,174 attempts but t=1.552 < 3.33 and sat at both continuous grid boundaries, so it is not a real candidate and does not trigger another search.",
      "verify_substring": "Terminal outcome: `grid_edge_unidentified`.",
      "issues_referenced": [
        "#49",
        "#127",
        "#162"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "REQUIRED TERMINAL NEGATIVE RESULT. The preregistration is retained separately as a protocol input; this entry publishes the completed #162 result and its declared stopping-rule outcome."
    },
    {
      "id": "coflnet-export-gap-recovery-feasibility",
      "title": "CoflNet export gap-recovery feasibility",
      "doc": "docs/research/coflnet-export-gap-recovery-feasibility.md",
      "generator": "source and upstream-code research",
      "category": "execution-data",
      "doc_status": "canonical",
      "result_type": "negative-result",
      "target": "Determine whether narrow export re-requests can deterministically repair historical full-book gaps.",
      "population": "CoflNet export API contract and published server implementation; no market observations.",
      "resolution": "Source-contract decision, not a price-series resolution.",
      "cutoff": "Source/code research only; no live market-data request or sealed observation read.",
      "baseline": "A deterministic historical gap-recovery guarantee.",
      "limitations": "A bounded diagnostic request may be technically addressable, but completeness is not promised.",
      "verdict": "Narrow re-requests are not deterministic historical-gap recovery; prospective recording is the valid execution-grade route.",
      "verify_substring": "Do not treat narrow re-requests as deterministic historical-gap recovery.",
      "issues_referenced": [
        "#174"
      ],
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "gate-b-horizons",
      "title": "Gate B at 3- and 7-day horizons",
      "doc": "docs/research/gate-b-horizons.md",
      "data": [
        "docs/research/gate-b-horizons.json",
        "docs/research/gate-b-horizons.csv"
      ],
      "generator": "python -m analysis.gate_b_horizons",
      "category": "gate",
      "doc_status": "canonical",
      "result_type": "operational-status",
      "target": "Determine whether recorded depth can resolve 3- and 7-day calibration attempts.",
      "population": "Recorded-depth Gate B samples, kept separate by horizon and source sample.",
      "resolution": "3-day and 7-day order lifecycles.",
      "cutoff": "Recorder coverage available at generation; named exemptions apply only to the declared samples.",
      "baseline": "Worst-case order lifetime required by the frozen Gate B contract.",
      "limitations": "No attempt outcome or calibration constant is estimated while coverage is insufficient.",
      "verdict": "Every 3- and 7-day cell is not yet measurable; the result is immature coverage, not a failed or extrapolated calibration.",
      "verify_substring": "Every cell is NOT YET MEASURABLE.",
      "issues_referenced": [
        "#158"
      ],
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "tier-a-lifecycle-baseline",
      "title": "Tier-A lifecycle watchability and frozen three-day bar baseline",
      "doc": "docs/research/tier-a-lifecycle-baseline.md",
      "generator": "analysis.tier_a_lifecycle_accounting and analysis.tier_a_legacy_comparator",
      "category": "supporting",
      "doc_status": "canonical",
      "result_type": "supporting-measurement",
      "target": "Measure fixed-horizon lifecycle watchability for the frozen recorder cohort and reproduce one frozen legacy bar baseline.",
      "population": "60-item self-collected Tier-A recorder cohort for lifecycle counts; distinct historical 413-tag population for the legacy bar proxy.",
      "resolution": "2h, 1d and 3d lifecycle accounting; separate 1d and 2h bar-proxy reproduction.",
      "cutoff": "Authorized 233-hour oracle-vm prefix for aggregate lifecycle accounting; legacy comparator uses pre-seal panels only.",
      "baseline": "Historical 3-day, 0bps, guard-on, size-one sequential bar proxy with volume_confirmed primary and touch_only upper bound.",
      "limitations": "Watchability is not fill, P&L, strategy, model, or limit-order evidence; the legacy bar proxy is not queue-aware and uses a distinct static universe.",
      "verdict": "3d is first measurable for aggregate watchability (419 complete-lifecycle-eligible placements); the frozen legacy comparator has no economic drift, only receipt-bound touch-only capacity-counter instrumentation drift.",
      "verify_substring": "3d | 419 | first measurable; limited evidence",
      "issues_referenced": [
        "#246"
      ],
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "portfolio-retrospective-diagnostic",
      "title": "Balance-aware retrospective portfolio diagnostic",
      "doc": "docs/research/portfolio-retrospective-diagnostic.md",
      "data": [
        "docs/research/portfolio-retrospective-diagnostic.json"
      ],
      "generator": "python -m analysis.portfolio_retrospective",
      "category": "portfolio",
      "doc_status": "canonical",
      "result_type": "non-result",
      "target": "Evaluate the eligible survivor across independent 10M, 100M and 1B purses.",
      "population": "No eligible candidate stream exists because R2 has no survivor.",
      "resolution": "Three balance tracks, not run.",
      "cutoff": "Final 90-day holdout unread.",
      "baseline": "Frozen portfolio protocol conditional on an eligible R2 survivor.",
      "limitations": "No balance result or live-profitability claim can be computed without an eligible stream.",
      "verdict": "Typed non-result: no eligible candidate stream and no three-balance retrospective result.",
      "verify_substring": "there is no eligible candidate stream",
      "issues_referenced": [
        "#178",
        "#179"
      ],
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "toxicity-mm-corpus-admission",
      "title": "Toxicity-MM corpus admission",
      "doc": "docs/research/toxicity-mm-corpus-admission.md",
      "data": [
        "docs/research/toxicity-mm-corpus-admission.json"
      ],
      "generator": "python -m analysis.toxicity_mm_corpus",
      "category": "strategy",
      "doc_status": "canonical",
      "result_type": "operational-status",
      "target": "Admit the private full-book development corpus and account for temporal gaps.",
      "population": "Frozen 60-item cohort, aggregate admission only.",
      "resolution": "Historical full-book observations with explicit gap accounting.",
      "cutoff": "Development span only; no raw series published.",
      "baseline": "Frozen Gate 0 contract and complete-corpus requirement.",
      "limitations": "Corpus is gapped; per-item coverage and raw observations remain private.",
      "verdict": "COVERAGE_GAPPED with 1,253 temporal gaps; downstream replay must fail closed across them.",
      "verify_substring": "**COVERAGE_GAPPED**",
      "issues_referenced": [
        "#172",
        "#174"
      ],
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "toxicity-mm-fill-hazard",
      "title": "Toxicity-MM fill-hazard policy slice",
      "doc": "docs/research/toxicity-mm-fill-hazard.md",
      "data": [
        "docs/research/toxicity-mm-fill-hazard.json"
      ],
      "generator": "python -m analysis.toxicity_mm_fill_hazard",
      "category": "strategy",
      "doc_status": "canonical",
      "result_type": "negative-result",
      "target": "Test whether a causal fill-risk gate improves the frozen pessimistic strategy economically.",
      "population": "Frozen development-only five-minute candidate universe.",
      "resolution": "Candidate-level fill labels and aggregate policy evaluation.",
      "cutoff": "Final 90-day holdout unread.",
      "baseline": "Unchanged frozen reprice baseline and strict economic-improvement gate.",
      "limitations": "No model-family widening or follow-up sweep is authorised after the negative stop.",
      "verdict": "Negative stop: no fill-hazard gate passed the strict economic-improvement rule.",
      "verify_substring": "No gate passed the strict economic-improvement rule",
      "issues_referenced": [
        "#175"
      ],
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "toxicity-mm-gate-zero",
      "title": "Toxicity-MM Gate 0",
      "doc": "docs/research/toxicity-mm-gate-zero.md",
      "data": [
        "docs/research/toxicity-mm-gate-zero.json"
      ],
      "generator": "python -m analysis.toxicity_mm_gate_zero",
      "category": "strategy",
      "doc_status": "canonical",
      "result_type": "operational-status",
      "target": "Freeze the cohort and test full-book cache fidelity before replay.",
      "population": "Frozen 60-item cohort.",
      "resolution": "Gate-level admission account.",
      "cutoff": "Development-only declared cache windows.",
      "baseline": "Usable full-book data for every frozen item.",
      "limitations": "This historical Gate 0 account records the pre-acquisition state, not a strategy result.",
      "verdict": "REQUIRES_ACQUISITION: zero of 60 items were usable in the original corpus account.",
      "verify_substring": "**REQUIRES_ACQUISITION**",
      "issues_referenced": [
        "#171"
      ],
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "toxicity-mm-r1",
      "title": "Toxicity-MM R1 terminal account",
      "doc": "docs/research/toxicity-mm-r1.md",
      "data": [
        "docs/research/toxicity-mm-r1.json"
      ],
      "generator": "python -m analysis.toxicity_mm_r1",
      "category": "strategy",
      "doc_status": "canonical",
      "result_type": "negative-result",
      "target": "Bind R1 to the preregistered fill-hazard result.",
      "population": "Exact frozen R1 account.",
      "resolution": "One terminal account, no holdout run.",
      "cutoff": "Final 90-day holdout unread.",
      "baseline": "R1 promotion requires the upstream policy gate to survive.",
      "limitations": "A terminal non-candidate cannot be combined or promoted.",
      "verdict": "R1 is a terminal non-candidate because the fill-hazard measurement is a negative stop.",
      "verify_substring": "R1 is therefore a terminal non-candidate",
      "issues_referenced": [
        "#175",
        "#176"
      ],
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "toxicity-mm-r2",
      "title": "Toxicity-MM R2 terminal non-result",
      "doc": "docs/research/toxicity-mm-r2.md",
      "data": [
        "docs/research/toxicity-mm-r2.json"
      ],
      "generator": "python -m analysis.toxicity_mm_r2",
      "category": "strategy",
      "doc_status": "canonical",
      "result_type": "non-result",
      "target": "Run the one-shot R2 holdout only if the exact frozen R1 account survives.",
      "population": "No eligible R1 survivor.",
      "resolution": "One terminal account, not run.",
      "cutoff": "Final 90-day holdout unread.",
      "baseline": "Conditional R2 one-shot evaluation.",
      "limitations": "Not a strategy recommendation or holdout score.",
      "verdict": "R2 is a one-shot non-result because the exact frozen R1 account is a non-candidate.",
      "verify_substring": "R2 records a one-shot non-result",
      "issues_referenced": [
        "#176",
        "#177"
      ],
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "toxicity-mm-replay",
      "title": "Toxicity-MM gap-aware replay",
      "doc": "docs/research/toxicity-mm-replay.md",
      "data": [
        "docs/research/toxicity-mm-replay.json"
      ],
      "generator": "python -m analysis.toxicity_mm_replay",
      "category": "strategy",
      "doc_status": "canonical",
      "result_type": "supporting-measurement",
      "target": "Replay frozen strategy policies without bridging corpus gaps or hiding queue ambiguity.",
      "population": "Frozen private full-book development corpus.",
      "resolution": "Five-minute candidates over raw full-book observations.",
      "cutoff": "Development span only; aggregate output only.",
      "baseline": "Nine frozen policy/ambiguity axes including pessimistic queue treatment.",
      "limitations": "Snapshot queue ambiguity remains an explicit axis; raw observations remain private.",
      "verdict": "Gap-aware aggregate replay exists; a temporal gap is a no-trade coverage outcome and is never interpolated.",
      "verify_substring": "A temporal gap is a no-trade coverage outcome",
      "issues_referenced": [
        "#174"
      ],
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "v2-not-frozen",
      "title": "v2: the digest-bound NotFrozen non-result",
      "doc": "docs/adr/0007-two-strategy-versions-both-run-forward.md",
      "generator": "forward.versions.record_not_frozen (called live for this index; reproduces ADR-0007's recorded digest exactly -- see verification below)",
      "category": "strategy",
      "doc_status": "n/a (this entry is not itself a docs/research/*.md write-up; see notes)",
      "result_type": "non-result",
      "target": "Record v2's frozen/not-frozen status as an explicit non-result.",
      "population": "n/a -- a version-status record, not a measured population.",
      "resolution": "n/a -- non-result; no frozen sweep resolution.",
      "cutoff": "Re-recorded live 2026-08-09, bound to strategy.json's canonical digest.",
      "baseline": "n/a -- WITHHELD is a status, not a result graded against a null.",
      "limitations": "v2 is WITHHELD, not frozen and not abandoned -- weighted-quote geometry is attributed, but the per-attempt frontier still ends at the grid wall under a fill model that did not identify an interior optimum.",
      "verdict": "v2 is WITHHELD, not frozen and not abandoned. Reason (re-recorded 2026-08-09): weighted-quote geometry is attributed, but the per-attempt frontier still ends at the grid wall under a fill model whose trade-off did not identify an interior optimum. Bound to docs/research/strategy.json's canonical digest 1eeb1ad85faa5d700330d0180334d38a8ea859596f3d140ffe2213e12e525887.",
      "issues_referenced": [
        "#81",
        "#84",
        "#90",
        "#92",
        "#98",
        "#101",
        "#104"
      ],
      "supersedes": [],
      "superseded_by": [],
      "notes": "REQUIRED NON-RESULT for issue #130's index acceptance criterion. Live-verified for this index (2026-08-09T22:59Z): calling `forward.versions.record_not_frozen(reason=..., date='2026-08-09', sweep_artifact=docs/research/strategy.json)` with the reason text quoted above reproduces sweep_sha256 == 1eeb1ad85faa5d700330d0180334d38a8ea859596f3d140ffe2213e12e525887 exactly -- the same digest ADR-0007's 2026-08-09 amendment states. `v1` remains the sole primary Gate C verdict (ADR-0007); this record does not change that. `forward/spec.py`'s pinned SPEC_SHA256 (c3d36101...) still matches the committed forward/strategy-v1.json on disk, verified live the same way -- v1's immutability is a standing, already-tested invariant (tests/test_forward.py, tests/test_forward_v2.py), asserted here rather than re-derived."
    },
    {
      "id": "toxicity-mm-toxicity-veto",
      "title": "Toxicity-MM executable-markout veto",
      "doc": "docs/research/toxicity-mm-toxicity-veto.md",
      "data": [
        "docs/research/toxicity-mm-toxicity-veto.json"
      ],
      "generator": "python -m analysis.toxicity_mm_toxicity_veto",
      "category": "strategy",
      "doc_status": "canonical",
      "result_type": "inconclusive",
      "target": "Test whether an executable-markout veto improves the unchanged frozen replay baseline.",
      "population": "3,158,796 frozen opportunities; nine selected TAKE decisions.",
      "resolution": "Candidate-level decision with aggregate economics and known-target coverage.",
      "cutoff": "Final 90-day holdout unread.",
      "baseline": "Unchanged frozen replay and preregistered point-estimate selection rule.",
      "limitations": "Only one selected TAKE had a known target; no minimum-support confidence hurdle was preregistered.",
      "verdict": "Economically inconclusive despite formal selection; it cannot open the holdout or support profitability.",
      "verify_substring": "The formal selection is economically inconclusive",
      "issues_referenced": [
        "#176"
      ],
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "twenty-second-resolution-gate",
      "title": "Twenty-second resolution gate",
      "doc": "docs/research/twenty-second-resolution-gate.md",
      "data": [
        "docs/research/twenty-second-resolution-gate.json"
      ],
      "generator": "python -m analysis.twenty_second_resolution_gate",
      "category": "strategy",
      "doc_status": "canonical",
      "result_type": "non-result",
      "target": "Create a future twenty-second protocol only if R2 has a survivor.",
      "population": "No eligible R2 survivor.",
      "resolution": "No experiment created.",
      "cutoff": "No future start or sealed exemption created.",
      "baseline": "Conditional protocol-creation gate.",
      "limitations": "Not a strategy result or prospective evidence account.",
      "verdict": "No twenty-second protocol exists because R2 produced no survivor.",
      "verify_substring": "R2 produced no survivor. No twenty-second resolution experiment",
      "issues_referenced": [
        "#180"
      ],
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "toxicity-mm-latency20",
      "title": "Toxicity-MM latency20 strategy negative stop",
      "doc": "docs/research/toxicity-mm-latency20.md",
      "data": [
        "docs/research/toxicity-mm-latency20.json"
      ],
      "generator": "python -m analysis.toxicity_mm_latency20_result",
      "category": "strategy",
      "doc_status": "canonical",
      "result_type": "negative",
      "target": "Score the latency-corrected pessimistic market-making strategy reprice5-pessimistic-latency20-v1 from bounded aggregate slices.",
      "population": "3,173,940 observed candidates; 3,158,796 eligible; 15,144 unresolved.",
      "resolution": "Aggregate strategy slices only; authority is strategy-negative-only.",
      "cutoff": "Final 90-day holdout unaccessed.",
      "baseline": "Preregistered slice intersection rule over frozen replay aggregates.",
      "limitations": "A negative stop over bounded aggregates; the conditional portfolio pass was not run, so it carries no portfolio or profitability claim.",
      "verdict": "The slice intersection did not pass; terminal negative stop with the holdout unaccessed.",
      "verify_substring": "intersection did not pass",
      "issues_referenced": [
        "#200"
      ],
      "supersedes": [],
      "superseded_by": []
    }
  ],
  "adrs": [
    {
      "id": "ADR-0001",
      "doc": "docs/adr/0001-daily-panel-is-authoritative-at-daily-horizon.md",
      "doc_status": "canonical",
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "ADR-0002",
      "doc": "docs/adr/0002-sealed-period.md",
      "doc_status": "canonical",
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "ADR-0003",
      "doc": "docs/adr/0003-gate-a-is-market-making-and-its-verdict-is-one-directional.md",
      "doc_status": "canonical",
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "ADR-0004",
      "doc": "docs/adr/0004-what-each-drift-outcome-means.md",
      "doc_status": "canonical",
      "supersedes": [],
      "superseded_by": [
        "ADR-0009"
      ],
      "note": "partial -- instrument only; ADR-0004's own verdict is not superseded"
    },
    {
      "id": "ADR-0005",
      "doc": "docs/adr/0005-backing-up-the-export-corpus.md",
      "doc_status": "canonical",
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "ADR-0006",
      "doc": "docs/adr/0006-daily-panel-moves-to-calendar-windows.md",
      "doc_status": "canonical",
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "ADR-0007",
      "doc": "docs/adr/0007-two-strategy-versions-both-run-forward.md",
      "doc_status": "canonical",
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "ADR-0008",
      "doc": "docs/adr/0008-what-stage-6-commits-to-before-measuring.md",
      "doc_status": "canonical",
      "supersedes": [],
      "superseded_by": []
    },
    {
      "id": "ADR-0009",
      "doc": "docs/adr/0009-residual-measures-the-quote-ev-per-cycle-supersedes-it.md",
      "doc_status": "canonical",
      "supersedes": [
        "ADR-0004"
      ],
      "superseded_by": [],
      "note": "partial -- instrument only; ADR-0004's verdict is explicitly not re-opened"
    },
    {
      "id": "ADR-0010",
      "doc": "docs/adr/0010-the-analyst-explains-an-evidence-gated-recommender.md",
      "doc_status": "canonical",
      "supersedes": [],
      "superseded_by": [],
      "note": "supersedes specific conclusions of docs/superpowers/specs/2026-08-09-stage-9-and-10-product-plan.md (outside the reciprocity_scope; that document's own header already says 'amended by ADR-0010' in prose)"
    },
    {
      "id": "ADR-0011",
      "doc": "docs/adr/0011-paper-portfolio-tracks-are-fixed-public-benchmarks.md",
      "doc_status": "canonical",
      "supersedes": [],
      "superseded_by": [],
      "note": "fixed public paper-portfolio benchmarks; no prospective protocol, evidence grant, or recommendation-support claim is created by this decision alone"
    }
  ],
  "not_indexed": [
    {
      "path": "docs/research/analyst-evaluation-v5-freeze.md",
      "reason": "Preregistered evaluation instrument and Phase 1 freeze, explicitly not a score or terminal candidate run."
    },
    {
      "path": "docs/research/coflnet-permission-primary-sources.md",
      "reason": "Primary-source support for an unsent permission draft; explicitly not permission or a research verdict."
    },
    {
      "path": "docs/research/item-selection-interior-search-preregistration.md",
      "reason": "Preregistration and protocol input, not a terminal result. The completed terminal negative is indexed separately as item-selection-interior-search."
    },
    {
      "path": "docs/research/analyst-evaluation-v4-instrument.md",
      "reason": "Evaluation instrument and scoring protocol, not a terminal research result. Evaluation outcomes are published through their own frozen scorecard/gallery surfaces."
    },
    {
      "path": "docs/research/portfolio-shadow-protocol.md",
      "reason": "Future-bound unsupported shadow protocol, not a retrospective or prospective performance result."
    },
    {
      "path": "docs/contributors/opencode-delegation-research.md",
      "reason": "An agent-tooling/process document, not a research write-up with a terminal result. Outside this index's scope."
    },
    {
      "path": "docs/superpowers/specs/*.md",
      "reason": "Implementation checklists and product-decision records, not research results. Referenced by title where relevant (e.g. the Stage 9/10 product plan, in ADR-0010's note above) but not entered as index rows."
    },
    {
      "path": "docs/research/evaluation-scorecards.md",
      "reason": "Generated scorecard surface over other results, not a terminal research result of its own. Its own table carries the per-result verdicts, and #164 classifies evaluation surfaces as the publication channel for outcomes rather than as indexed results."
    }
  ]
}