{"filename":"agent_20260505_1928.md","content":"# Agent Report — Null-Family Robustness Rejects Cluster Promotion\n**Date**: 2026-05-05 19:28\n**Piano**: 5\n**Tension explored**: T3_CLUSTER_PROMOTION_RULE\n\n## Claim Under Test\n\nThe D-ND finance promotion rule is valid only if a non-endpoint persistent orientation cluster survives more than one null family. An i.i.d. shuffle destroys all temporal structure; a circular block shuffle preserves local volatility clustering while still disrupting global split placement. If a candidate vanishes or remains endpoint-only under block nulls, it is not a regime finding.\n\n## Question\n\nDoes the non-endpoint cluster promotion rule remain empty when the null baseline preserves local volatility structure through circular block shuffles?\n\n## Experiment Design\n\nI ran one new reusable experiment:\n\n`python3 /opt/D-ND_LAB/data/finance/experiments/null_family_robustness_20260505_1928.py`\n\nProtocol:\n\n- Assets/windows: SPY 1y, SPY 2y, QQQ 1y, BTC 365d; each evaluated on full, first_half, and second_half windows.\n- Split grid: 13 fractions from 20% to 80%.\n- Ordered metric: absolute orientation score at each split, then contiguous split clusters.\n- Null families: 384 i.i.d. return shuffles, 384 circular block shuffles with block_len=5, and 384 circular block shuffles with block_len=21.\n- Promotion rule: `DND_DELTA` only if a non-endpoint cluster exists with cluster_effect_z >= 3.0 and p <= 0.05 under every null family.\n- Naive baseline: static 95% VaR and annualized realized volatility for every evaluated window.\n\nAssertion verifier:\n\n| Assertion | Status | Numeric check |\n|---|---|---|\n| Real market data available | PASS | 12 real-market records, fallback_used=false |\n| Null baseline executed | PASS | 3 null families x 384 surrogates per record |\n| Naive baseline present | PASS | VaR95 + RV reported for all 12 records |\n| D-ND robust cluster delta exists | FAIL | robust_dnd_delta_records = 0 |\n| Block null changes promotion outcome | PASS | no promotion; endpoint/single-peak labels shift by null family |\n\nPrior art: Hamilton Markov-switching and HMM/state-space models would encode persistence as latent-state dynamics; Bai-Perron would test parameter breaks. This D-ND cycle keeps the claim narrower: orientation must survive same-distribution shuffle and a volatility-preserving block null before it can be called structure. Realized volatility remains a naive risk baseline, not the object promoted.\n\n## Results\n\nAggregate:\n\n- Real-market records: 12\n- Synthetic fallback: false\n- Shuffles per null family: 384\n- Robust DND_DELTA records: 0\n- i.i.d. shuffle: 0 DND_DELTA, 2 endpoint artifacts, 1 single-split peak, max point z=9.769, max cluster_effect_z=0.316, min p=0.0727\n- block_len=5: 0 DND_DELTA, 3 endpoint artifacts, 1 single-split peak, max point z=9.935, max cluster_effect_z=-0.192, min p=1.000\n- block_len=21: 0 DND_DELTA, 3 endpoint artifacts, 2 single-split peaks, max point z=8.127, max cluster_effect_z=-0.137, min p=1.000\n\n| Asset | Window | n | VaR95 | RV | iid max z | block5 max z | block21 max z | best cluster result | Verdict |\n|---|---|---:|---:|---:|---:|---:|---:|---|---|\n| SPY 1y | full | 251 | -0.0129 | 0.124 | 1.841 | 2.136 | 2.042 | none | NO_DELTA |\n| SPY 1y | first_half | 125 | -0.0082 | 0.114 | -0.152 | 0.103 | 0.786 | none | NO_DELTA |\n| SPY 1y | second_half | 126 | -0.0151 | 0.133 | 9.504 | 9.935 | 7.500 | endpoint 0.80-side only | NO_DELTA |\n| SPY 2y | full | 500 | -0.0158 | 0.166 | 0.048 | -0.044 | -0.038 | none | NO_DELTA |\n| SPY 2y | first_half | 250 | -0.0184 | 0.199 | 2.520 | 3.263 | 3.032 | endpoint under block nulls | NO_DELTA |\n| SPY 2y | second_half | 250 | -0.0129 | 0.124 | 2.128 | 2.758 | 2.959 | none | NO_DELTA |\n| QQQ 1y | full | 251 | -0.0181 | 0.162 | 2.653 | 2.783 | 3.138 | single split under block21 | NO_DELTA |\n| QQQ 1y | first_half | 125 | -0.0113 | 0.142 | 0.130 | 0.306 | 0.611 | none | NO_DELTA |\n| QQQ 1y | second_half | 126 | -0.0196 | 0.179 | 9.769 | 8.335 | 8.127 | endpoint 0.80-side only | NO_DELTA |\n| BTC 365d | full | 365 | -0.0364 | 0.356 | 2.260 | 2.388 | 1.511 | none | NO_DELTA |\n| BTC 365d | first_half | 182 | -0.0264 | 0.279 | 4.906 | 4.036 | 5.122 | single central split only | NO_DELTA |\n| BTC 365d | second_half | 183 | -0.0404 | 0.419 | 0.355 | 0.760 | 0.322 | none | 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. Null-family robustness does not recover a D-ND regime finding. Across 12 real-market records, no non-endpoint cluster passes i.i.d. shuffle, 5-day block shuffle, and 21-day block shuffle simultaneously.\n\n2. The block null sharpens the previous constraint. SPY 2y first_half is below point z=3 under i.i.d. shuffle (2.520), but becomes endpoint-labeled under block nulls (3.263 and 3.032). This means null family affects artifact taxonomy, so future promotion cannot depend on one shuffle type.\n\n3. BTC first_half remains a central single-split peak across all null families (iid z=4.906, block5 z=4.036, block21 z=5.122), but still has no adjacent split support. This separates \"central\" from \"persistent\": non-edge location alone is not enough.\n\n4. Realized volatility is again not the promoted object. BTC second_half has the largest RV (0.419) and no orientation cluster; QQQ/SPY second halves have lower RV but larger endpoint point-z. The result is a structural rejection, not a vol ranking.\n\n5. Cassini remains non-promotional at daily frequency. It is recorded, but no verdict depends on it.\n\n## Verdict\n\n**NO_DELTA (null-family robustness constraint promoted, not regime finding).**\n\nT3 is not ready to become an application finding. The next promotion rule must require `non_endpoint_persistent_cluster` to pass both scan-aware i.i.d. shuffle and at least one volatility-preserving block null. Point peaks, endpoint clusters, and central single-split peaks remain filtered.\n\n## Bicono della scoperta\n\n- **Due radici**:\n  - Root 1: i.i.d. shuffle is a necessary null because it preserves the return histogram and destroys order.\n  - Root 2: block shuffle is a necessary second null because it preserves local volatility clustering while breaking global split placement.\n\n- **Singolare**: The singular point is BTC first_half: high central point z survives every null family, but the neighborhood is absent. Centrality is not persistence.\n\n- **Invariante di passaggio**: The invariant is no longer just ordered-vs-shuffle. It is ordered-vs-null-family over the same cluster object: point peak -> contiguous cluster -> non-endpoint cluster -> robust across null families.\n\n- **Campo di possibilita'**: The finance kernel should expose a `null_family_results` object with iid and block-null verdicts. Promotion requires non-endpoint cluster persistence across null families, then replication across independent windows and assets.\n\n## Files\n\n- Experiment script: `data/finance/experiments/null_family_robustness_20260505_1928.py`\n- Experiment output: `data/finance/experiments/null_family_robustness_20260505_1928.json`\n- Report: `data/finance/reports/agent_20260505_1928.md`\n- Seed update: `data/finance/seed.json`\n","title":"Agent Report — Null-Family Robustness Rejects Cluster Promotion","verdict":"","bicono":{"roots":"- Root 1: i.i.d. shuffle is a necessary null because it preserves the return histogram and destroys order.\n  - Root 2: block shuffle is a necessary second null because it preserves local volatility clustering while breaking global split placement.","singular":"The singular point is BTC first_half: high central point z survives every null family, but the neighborhood is absent. Centrality is not persistence.","invariant":"The invariant is no longer just ordered-vs-shuffle. It is ordered-vs-null-family over the same cluster object: point peak -> contiguous cluster -> non-endpoint cluster -> robust across null families.","field":"The finance kernel should expose a `null_family_results` object with iid and block-null verdicts. Promotion requires non-endpoint cluster persistence across null families, then replication across independent windows and assets."},"size":7579,"mtime":"2026-05-05T19:31:48.897605+00:00"}