# Temporal Integrity and Future-Data Audit

**Overall executable audit: PASS.** 22 of 22 checks passed.

## Scope

The audit verifies release identity, source-snapshot hashes, every Study 2 training-validation-test boundary, non-overlap of sealed test blocks, prefix invariance of the EWMA transformation, and independent recomputation of selected frozen outputs. The frozen analysis scripts and results were not altered.

## Executable checks

| check_id                          | scope                          | status   | evidence                                                                                             |
|:----------------------------------|:-------------------------------|:---------|:-----------------------------------------------------------------------------------------------------|
| release_identity_common_models.py | release                        | PASS     | working=frozen=manifest=190f9d2cfe29694e68517457e732875022aa12b7f480cc397a42ba27d28ccdc0             |
| release_identity_run_study2.py    | release                        | PASS     | working=frozen=manifest=90b5cf6fc3ca848256e6df40e6102074ccfbb0d2a8f4d786dcb9a4c908212950             |
| release_identity_run_study1.py    | release                        | PASS     | working=frozen=manifest=f3f0b3daefd2fa5d0971230a5942c1a63be4229f47b2218fa467ab663edd1186             |
| source_snapshot_SPY               | Study 2 source data            | PASS     | SPY.csv: 37473c5c7776519ca6d8d16086a205966432f5e36eb7077ac0bdf604333d6b15                            |
| source_snapshot_QQQ               | Study 2 source data            | PASS     | QQQ.csv: 27bff8e4a18a3471719942c8f071e530dd40d4ef966cf3e54acdddb891297acb                            |
| source_snapshot_IWM               | Study 2 source data            | PASS     | IWM.csv: e18214b0d6ea5862cc53729935ba093412f5e2f61182b7c61e5efc06a37c7f8f                            |
| source_snapshot_EFA               | Study 2 source data            | PASS     | EFA.csv: 7e8d74d0fd5a6aab853a1a5dde247e038ae1bf4875c37a61d8261f6f1b57b85c                            |
| source_snapshot_TLT               | Study 2 source data            | PASS     | TLT.csv: 8c59cfd1c9dbecfcf4b1bc1afcf78eba5666b46a6750b4dbba39b71f49f3fcf4                            |
| source_snapshot_IEF               | Study 2 source data            | PASS     | IEF.csv: e1f2fbe15b40260e9d7990b260fc58b36fb9c8f12bd1ecc97968f7d6b7053ced                            |
| source_snapshot_LQD               | Study 2 source data            | PASS     | LQD.csv: c4ab771a81715b7b4f0efc5b0c8ca0ebbbf61f38f4916531fa33eeccec6ed26d                            |
| source_snapshot_HYG               | Study 2 source data            | PASS     | HYG.csv: 0655cae2bab1181ddab6465f0f353c6d043e81e0e7a0017514a3cf10aeeea8c3                            |
| source_snapshot_GLD               | Study 2 source data            | PASS     | GLD.csv: e40c310cc67eea6e5d318f52562b3b2ab235aa3badcda2109ea1766bded3bddd                            |
| source_snapshot_EURUSD            | Study 2 source data            | PASS     | EURUSD_X.csv: 4f9cd690546070bb29a85aa1426325b57949e880c9a78924dad16aec4378c002                       |
| source_snapshot_BTC               | Study 2 source data            | PASS     | BTC-USD.csv: 13ac5746069f9463b1c0a42bd5bd64784317c02e2ba0801397c495cb6e77c679                        |
| study2_window_order               | all 2,710 Study 2 blocks       | PASS     | training[1000] < validation[120] < sealed test[20] for every block                                   |
| study2_test_nonoverlap            | all assets                     | PASS     | successive test starts are separated by exactly 20 observations                                      |
| study2_saved_dates                | all 2,710 Study 2 blocks       | PASS     | saved test_start/test_end equal dates reconstructed from raw snapshots                               |
| study2_block_inventory            | all assets                     | PASS     | SPY=364; QQQ=287; IWM=272; EFA=256; TLT=245; IEF=245; LQD=245; HYG=186; GLD=215; EURUSD=237; BTC=158 |
| study2_policy_rows                | all 2,710 Study 2 blocks       | PASS     | four frozen policies are present for every asset-block                                               |
| ewma_prefix_invariance            | 33 asset-cutoff comparisons    | PASS     | maximum absolute change after truncating future data=0                                               |
| study2_independent_recomputation  | 33 blocks / 132 policy rows    | PASS     | first/middle/last block per asset; max numeric difference=4.44e-16                                   |
| study1_independent_recomputation  | 8 DGP replications / 120 cells | PASS     | models fit on training only; validation/test recomputed; max numeric difference=4.44e-16             |

## Manual information-flow review

- **Study 1:** each model is fitted only on the first 1,000 simulated observations. Validation stream A constructs the empirical acceptable set and selects the winner; disjoint validation stream B measures winner reversal; the final 250 observations are used only for sealed-test regret. No sealed-test value enters fitting, screening, or tuning.
- **Study 2:** models are fitted on 1,000 past standardized returns. The following 120 observations determine validation loss, the winner, weights, and the acceptable set. Quantiles are fixed before the next 20 observations are read. Test observations are used only for violations, severity, and ES error.
- **EWMA:** after an initial 60-observation variance estimate, the scale at time t is recorded before return t updates the recursion. All first decisions occur after 1,120 observations. The executable prefix tests show that deleting every later observation changes no earlier adjusted return or scale.
- **Downstream inference:** the bootstrap reads only already sealed block outcomes. It does not refit models or feed test outcomes back into later policy choices. Prior selected winners are used only to report turnover.

## Limitations that are not code leakage

1. The first 60 EWMA-standardized observations share a batch variance initializer. This is not fully one-step online inside that historical initialization segment, but the segment lies entirely within the 1,000-observation estimation history and cannot see any validation or test outcome. A strict-online initializer would be a new sensitivity specification, not a correction to the frozen results.
2. The preserved files contain adjusted-close histories from a current data snapshot, not a point-in-time vendor database. Corporate-action revisions and current-vintage conventions are data-provenance risks. They are not caused by the train/validation/test code and cannot be eliminated without vintage-stamped source data.
3. The eleven assets are a fixed surviving panel. Asset selection and survivorship limit external validity. Overlapping estimation histories and cross-asset dependence affect uncertainty quantification, not the direction of the information flow.

## Conclusion

No validation-to-training or test-to-model information path was found. The frozen numerical outputs sampled by this audit reproduce from the preserved inputs. The strongest defensible statement is therefore: **the released code is free of decision-time future-data leakage under the preserved data snapshot, while point-in-time data-vintage and survivorship limitations remain.**
