{"filename":"agent_20260505_1602.md","content":"# Agent Report — Sliding-Split Scan Against Scan-Aware Shuffle Null\n**Date**: 2026-05-05 16:04\n**Piano**: 3\n**Tension explored**: T1_SLIDING_SPLIT\n\n## Claim Under Test\n\nReplacing the fixed-midpoint `orientation_score()` with a sliding split scan over 20%-80% of the series should recover regime structure if the previous NO_DELTA results were only midpoint-placement artifacts.\n\n## Question\n\nWhen the split location is scanned, does D-ND orientation separate from a shuffle null that performs the same scan, or do the strongest peaks collapse into single-split placement artifacts?\n\n## Experiment Design\n\nI ran a new reusable experiment:\n\n`python3 /opt/D-ND_LAB/data/finance/experiments/scan_split_20260505_1602.py`\n\nAssets/windows:\n\n| Asset | Source window | Subwindows tested |\n|---|---|---|\n| SPY | yfinance 1y | full, first_half, second_half |\n| SPY | yfinance 2y | full, first_half, second_half |\n| QQQ | yfinance 1y | full, first_half, second_half |\n| BTC | CoinGecko 365d | full, first_half, second_half |\n\nProtocol:\n\n- Split grid: 13 fractions from 20% to 80%.\n- Ordered metric: max absolute orientation score over the grid.\n- Null baseline: 256 return shuffles, each scanned over the same 20%-80% grid; the ordered max is compared to the null distribution of shuffled maxima.\n- Stability filter: a candidate is promotable only if `effect_z >= 3.0` and at least 30% of split locations exceed the shuffle-scan 95% threshold.\n- Naive baseline: static 95% VaR and annualized realized volatility for every evaluated window.\n\nPrior art: Hamilton-style Markov switching and HMM state-space models would estimate latent state persistence; Bai-Perron would search structural breaks with multiple-test control. This cycle keeps the D-ND axis separate: orientation must survive same-distribution shuffle and a scan-aware null. RV remains a naive volatility baseline, not the target signal.\n\n## Results\n\nAggregate: 12 real-market records evaluated, 0 fallback synthetic records, 0 promotable DND_DELTA records. The largest raw scan z-score was 5.77, but it failed the stability filter.\n\n| Asset | Window | n | best split | ordered max | shuffle max mean | shuffle max std | z(scan) | pass fraction | VaR95 | RV | Verdict |\n|---|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|\n| SPY 1y | full | 251 | 0.50 | 5.87e-06 | 7.23e-06 | 4.56e-06 | -0.30 | 0.000 | -0.0129 | 0.124 | NO_DELTA |\n| SPY 1y | first_half | 125 | 0.20 | 3.09e-06 | 1.02e-05 | 7.22e-06 | -0.99 | 0.000 | -0.0082 | 0.114 | NO_DELTA |\n| SPY 1y | second_half | 126 | 0.80 | 6.00e-05 | 1.24e-05 | 8.24e-06 | **5.77** | 0.077 | -0.0151 | 0.133 | NO_DELTA |\n| SPY 2y | full | 500 | 0.30 | 2.51e-06 | 9.36e-06 | 7.47e-06 | -0.92 | 0.000 | -0.0158 | 0.166 | NO_DELTA |\n| SPY 2y | first_half | 250 | 0.80 | 4.31e-05 | 2.16e-05 | 1.37e-05 | 1.57 | 0.000 | -0.0184 | 0.199 | NO_DELTA |\n| SPY 2y | second_half | 250 | 0.50 | 6.42e-06 | 6.68e-06 | 4.12e-06 | -0.06 | 0.000 | -0.0129 | 0.124 | NO_DELTA |\n| QQQ 1y | full | 251 | 0.50 | 1.34e-05 | 1.25e-05 | 7.93e-06 | 0.11 | 0.000 | -0.0181 | 0.162 | NO_DELTA |\n| QQQ 1y | first_half | 125 | 0.55 | 4.52e-06 | 1.59e-05 | 1.11e-05 | -1.02 | 0.000 | -0.0113 | 0.142 | NO_DELTA |\n| QQQ 1y | second_half | 126 | 0.80 | 1.09e-04 | 2.20e-05 | 1.63e-05 | **5.35** | 0.077 | -0.0196 | 0.179 | NO_DELTA |\n| BTC 365d | full | 365 | 0.20 | 4.79e-05 | 4.85e-05 | 3.12e-05 | -0.02 | 0.000 | -0.0364 | 0.356 | NO_DELTA |\n| BTC 365d | first_half | 182 | 0.55 | 6.80e-05 | 4.14e-05 | 2.49e-05 | 1.07 | 0.000 | -0.0264 | 0.279 | NO_DELTA |\n| BTC 365d | second_half | 183 | 0.75 | 4.91e-05 | 1.17e-04 | 7.02e-05 | -0.97 | 0.000 | -0.0404 | 0.419 | NO_DELTA |\n\nData provenance:\n\n- SPY 1y: `yfinance://Ticker(SPY).history(period=1y, interval=1d)`, retrieved `2026-05-05T14:01:16.122258+00:00`, n_obs=252.\n- SPY 2y: `yfinance://Ticker(SPY).history(period=2y, interval=1d)`, retrieved `2026-05-05T14:03:42.172775+00:00`, n_obs=501.\n- QQQ 1y: `yfinance://Ticker(QQQ).history(period=1y, interval=1d)`, retrieved `2026-05-05T14:15:04.240133+00:00`, n_obs=252.\n- BTC 365d: `https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=365`, retrieved `2026-05-05T14:01:16.674490+00:00`, n_obs=366.\n\n## Key Findings\n\n1. The scan-aware null removes the prior QQQ 1y DND_DELTA. Fixed-midpoint QQQ 1y looked strong in the previous cycle, but under a null that also scans split locations its full-window z is only 0.11.\n\n2. Sliding scan finds high single-point peaks in SPY and QQQ second halves, but they are endpoint artifacts. SPY 1y second_half reaches z=5.77 and QQQ 1y second_half reaches z=5.35, both at split fraction 0.80. In both cases only 1 of 13 split locations clears the shuffle-scan 95% threshold (`pass_fraction=0.077`), far below the 0.30 stability requirement.\n\n3. BTC remains NO_DELTA after scan correction. Its realized volatility is much higher than SPY/QQQ, but its shuffle-scan null widens accordingly; the full BTC window has z=-0.02.\n\n4. VaR/RV explain risk scale, not orientation. The strongest z peaks occur in second-half equity windows with moderate RV (SPY 0.133, QQQ 0.179), while BTC second_half has the highest RV (0.419) and negative z. The D-ND metric is not just replaying realized volatility.\n\n5. Cassini remains non-discriminating at this frequency. Cassini residues vary from 0.00287 to 0.02433, but the pass/fail boundary is driven by scan-aware orientation versus shuffle, not by a stable Cassini signature.\n\n## Verdict\n\n**NO_DELTA (redesign constraint promoted, not regime finding).**\n\nThe claim that sliding split scan should recover regime structure if the previous NO_DELTA results were only midpoint-placement artifacts was falsified at this cycle. The new claim that emerged is: sliding split scan is useful because it exposes where orientation peaks occur, but max-z alone is not promotable. Once the null baseline is given the same freedom to scan, full-window SPY, QQQ, and BTC do not separate from noise. The apparent high-z discoveries are isolated endpoint peaks, not stable orientation fields.\n\nPromotable constraint: future `orientation_score` redesign must report both scan-aware `effect_z` and split-stability. A DND_DELTA requires `effect_z >= 3` plus local support across adjacent split locations; a lone endpoint maximum is `PLACEMENT_ARTIFACT`.\n\n## Bicono della scoperta\n\n- **Due radici**:\n  - Root 1: Fixed midpoint was too rigid and could miss off-center structure.\n  - Root 2: Pure max sliding scan is too permissive and creates look-elsewhere artifacts unless the shuffle null scans too.\n\n- **Singolare**: The invariant is not the maximum orientation score; it is orientation that remains non-null across neighboring split positions after the null has received the same search freedom.\n\n- **Invariante di passaggio**: Ordered-vs-shuffle survives the redesign, but the comparison object changes from \"one fixed split\" to \"one scanned profile against scanned surrogate profiles.\"\n\n- **Campo di possibilita'**: The next kernel should output an orientation profile: best split, scan-aware z, pass fraction, endpoint flag, VaR/RV, and data_card. Only profiles with non-endpoint peaks and adjacent support can become finance findings.\n\n## Files\n\n- Experiment script: `data/finance/experiments/scan_split_20260505_1602.py`\n- Experiment output: `data/finance/experiments/scan_split_20260505_1602.json`\n- Report: `data/finance/reports/agent_20260505_1602.md`\n- Seed update: `data/finance/seed.json`\n","title":"Agent Report — Sliding-Split Scan Against Scan-Aware Shuffle Null","verdict":"","bicono":{"roots":"- Root 1: Fixed midpoint was too rigid and could miss off-center structure.\n  - Root 2: Pure max sliding scan is too permissive and creates look-elsewhere artifacts unless the shuffle null scans too.","singular":"The invariant is not the maximum orientation score; it is orientation that remains non-null across neighboring split positions after the null has received the same search freedom.","invariant":"Ordered-vs-shuffle survives the redesign, but the comparison object changes from \"one fixed split\" to \"one scanned profile against scanned surrogate profiles.\"","field":"The next kernel should output an orientation profile: best split, scan-aware z, pass fraction, endpoint flag, VaR/RV, and data_card. Only profiles with non-endpoint peaks and adjacent support can become finance findings."},"size":7454,"mtime":"2026-05-05T16:07:04.349944+00:00"}