Repository navigation
Overfitting controls: non-gating RiskLabAI 3.2.0 parity test, with upstream's native expected-max Sharpe and DSR as oracles - #729
Conversation
… with the six known differences pinned The repository keeps its own overfitting.py. This is glue under the 2026-10-05 never-rebuild rule: the Claude adjudication of job 073 found that RiskLabAI 3.2.0 (RiskLabAI.py commit 7d5aa112) uses the same formulas in the regular case, but six semantic differences would change gate results. - tests/test_overfitting_riskl_parity.py is skipped unless RiskLabAI 3.2.0 is importable, so CI without it neither gates nor fails on it. In the regular case it checks numeric parity for PSR, the benchmark Sharpe/DSR and CSCV/PBO within a stated tolerance. It also has one test per known difference that asserts the documented divergence, so an upstream or local change fails loudly: 1. a non-positive PSR denominator; 2. N=1 and the effective number of trials; 3. unequal np.array_split blocks; 4. ordinal versus averaged ranks; 5. strict PBO; 6. std=0. Each difference is confirmed at the pinned upstream lines. - A research-only parity env: requirements-riskl-parity.in and a hash-pinned lock on CPython 3.12. RiskLabAI's own upstream tests ran in it, and a negative-control run shows the divergence tests fail when a difference is removed. - The README and docs/decisions/2026-10-05-overfitting-riskl-parity.md record which side the repository keeps and why, and the trigger for adopting RiskLabAI directly: upstream support for an effective trial count and for strict PBO. overfitting.py and the frozen protocols are unchanged. Built by GPT-6.1 Sol through the packaged SDK worker (round t-parity-r1); committed by the coordinator. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ventory Coordinator follow-up: the pre-push lockfile-coverage test requires every tracked lockfile and manifest to be listed. requirements-riskl-parity.lock (parser requirements.txt) and its .in (covered by that lock) are added, and the inventory is re-registered. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…fore the final hot-file commit Co-Authored-By: Claude Opus 5.5 <[email protected]>
… (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <[email protected]>
… DSR, tie-order-robust ranks, degenerate CSCV columns - The parity test now compares against upstream expected_max_sharpe_ratio and deflated_sharpe_gate (RiskLabAI/RiskLabAI.py@7d5aa112, src/RiskLabAI/backtest/test_set_overfitting.py:12-56 and validation/leakage_aware_hpo.py:177-240). - It adds supplied-N parity for N in {1, 2, 5, 100}, plus native DSR comparisons on fixed series. - It records upstream's Euler-constant rounding, with relative tolerance 1e-11. - The capability claims, the receipt and the adoption rationale now say that independent-N expected-max Sharpe and DSR already exist natively. - Tied ranks accept either valid upstream ordinal rank, 2 or 3, while requiring the local averaged rank of 2.5. A regression exercises the alternate tie order through the real upstream PBO. - Constant and near-constant CSCV columns are exercised. The local code raises ValueError, while upstream returns a finite PBO. The local threshold std <= 1e-12 * max(1, |mean|) is documented, and an oracle-sensitivity regression covers it. - The CSCV adoption trigger is narrowed to averaged ranks and the required diagnostics. The README states that the research lock takes part in the required OSV scan, with advisory response owned by the trading lane. Frozen controls, parameters, evaluators, the historical receipt and the lock are unchanged. Built by GPT-6.1 Sol through the packaged SDK worker (round t-parity-r2). Commands ran from a clean hash-locked scratch venv: - 14 parity tests passed; - 12 unchanged upstream tests passed; - 7 scratch mutants each failed, as intended; - osv-scanner 2.6.0 found no issues; - validate, evidence_manifest --check and git diff --check exited 0. Committed by the coordinator. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…fore the final hot-file commit Co-Authored-By: Claude Opus 5.5 <[email protected]>
… (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
Dependency limit exceeded — report not shown. This pull request scan exceeded the 10,000-dependency limit applied to this scan, so the results are incomplete and may be inaccurate. To avoid reporting false positives, Socket has not posted a report. Upgrade your plan to raise the dependency limit and get complete reports, or view the partial scan in the dashboard. Socket is always free for open source. If this is a non-commercial open source project, contact us to request a free Team account. |
|
Claude session native-agent-stack-5f: landing at head Observed main Required checks at this head: 7 pass . Unresolved review threads: 0. |
|
Claude session native-agent-stack-5f: post-merge observation. Landed as |
…erged by entry; registry last) Both sides added an entry at the same place in .github/osv-scanner-lockfiles.json (this branch's adaptive-paper engine lock, main's #729 riskl-parity lock), so a line merge produced one object with two "path" keys and the queue's line-union refresh stopped at record discovery, whose JSON reader refuses duplicate keys. The file is merged by whole entries instead: main's lists plus this branch's three entries at their reviewed positions, so it differs from main by exactly this branch's insertions and from the branch head by exactly main's. .github/workflows/catalog-freshness.yml merged cleanly. manifests/evidence.json is main's registry with this branch's rows re-registered from the merged files, plus its receipts and convergence-record additions (hot-file protocol). Checks on the merged tree: scripts/validate.py exit 0; scripts/validate_convergence.py --all-recorded exit 0; scripts/evidence_manifest.py --check passed (10,157 files); git diff --check against main clean. Unit tests: 410 run with the system python3 (8 errors, all ModuleNotFoundError exchange_calendars); the 7 calendar-dependent modules re-run in a venv from .github/requirements-calendar.txt: 591 tests OK (126 skipped). Co-Authored-By: Claude Opus 5.5 <[email protected]>
Scope
f946c6d4ca988a17b6fa4392ecb488909f147883lane:tradingSOTA sources
RiskLabAI/RiskLabAI.py 3.2.0 at
7d5aa11271c70d83a7069d5900d80bb08b29e481(https://github.com/RiskLabAI/RiskLabAI.py):expected_max_sharpe_ratio, effective N)deflated_sharpe_gate)Source sha256s are recorded in the receipt.
NumPy 2.5.3
argsortdefault kind (quicksort), for the tie-order expectation.google/osv-scanner v2.6.0, from the checksum-verified release recipe in .github/workflows/security-scan.yml, for the lock's required OSV scan.
Evidence-class table
python -m unittest tests.test_overfitting_riskl_parityin the hash-locked parity venv: 14 passed, 0 skips; riskl-parity-receipt.jsonLocal commands run
Review
Built by GPT-6.1 Sol through the packaged SDK worker (rounds t-parity-r1 and t-parity-r2); committed by the coordinator.
6b060b140..63531f18creturned ACCEPT: 0 P1, 2 P2. The P2s are recorded below as residuals.Decision record
docs/decisions/2026-10-05-overfitting-riskl-parity.md
Checklist
Recorded residuals (bounded review, 2026-10-05)
Claude Opus delta read r2 at
63531f18c429returned ACCEPT with no p1. Under the bounded review rule these p2 items land as recorded residuals, each owed as a follow-up:docs/decisions/2026-10-05-overfitting-riskl-parity.md:119-139 (exclusions at :115-117); blueprints/us-equities/overfitting-controls/overfitt: The adoption record is incomplete under the 2026-10-05 never-rebuild rule.tests/test_overfitting_riskl_parity.py:305-318 (the claims it supports are at blueprints/us-equities/overfitting-controls/riskl-parity-recei: Low severity.🤖 Generated with Claude Code