Repository navigation
Conversation
Co-Authored-By: Codex <noreply@openai.com>
|
Research findings — 0/8 pairs computed. All eight remain NOT_COMPUTED; no REAL_MISMATCH was assessed, and no zero difference is inferred. A generation/hash-pinned config-manifest GET now succeeds in the approved cloud, but the subsequent bounded metadata LIST returns a confirmed HTTP 403. Cloud steps stopped immediately after that new denial. No IAM/WIF/variables/secrets or trading controls were changed.
The categories are non-exclusive. Root cause of 0/8: discovery stopped before a real replay, and access is only one blocker. Required frozen prices/actions/calendar, initial state/cash flows, complete numeric 1x/2x costs, historical plugin/option/PIT inputs and independent both-arm ledgers remain unbound. Reproducing #542 confirms exact-size changes within one bucket are missed (synthetic 0.002 vs 0.008 reports 0 difference days), A later sanitized pilot receipt locates partial SOXL/SOXX/QQQ/TQQQ history through 2026-08-25 in raw and split+dividend-adjusted bases. It is not treated as missing, but it does not establish split-only input, the current cutoff or paired IBKR ledgers; this job did not revalidate those market objects. Their catalog filename is outside the existing canonical-manifest reader contract, which was not relaxed. Access evidence:
Exact approval/evidence needed: preferably provide reviewed exact catalog/input object names, generations and SHA256s readable through the existing identity, avoiding LIST. If bucket discovery is essential, separately authorize investigation/resolution of #635 remains open at |
…20261015 Co-Authored-By: Codex <noreply@openai.com>
Motivation
#602 selected split-only yfinance Close for signals, but missing Close still silently selected Adj Close, with native O/H/L left on a different basis. The IBKR proxy also hard-coded TRADES without an explicit configuration pin. This change makes the historical signal adapter enforce one declared basis without changing strategy or execution controls.
PRICE_BASIS/ runtime JSONprice_basisaccepts exactlyraw_unadjusted,split_adjusted,split_dividend_adjusted, andtotal_return_index. An explicit environment value overrides runtime JSON and manifest defaults; the effective default remainssplit_adjusted. Invalid values fail configuration validation.Behavior
The local adapter constrains the existing pinned QPK loader. No shared QPK API, dependency pin, shared market-data standard, strategy guard, execution protection, or deployment configuration is changed. No retained fallback is considered necessary for safety. The upstream request failure now stops this history request rather than implicitly switching providers.
Volume is explicitly
provider_native_unscaled, never rescaled by the dividend factor. Missing volume is unavailable rather than zero. Provenance v2 records requested/resolved basis, provider, source columns and volume policy; failure logs include a reason and no provider exception text, prices, credentials or account data. External indicators and feature snapshots retain their separate contracts.Verification
Synthetic fixtures only:
Local full suite: 2148 passed, 5 skipped (Python 3.12, pinned dependencies). Full-repo Ruff, dependency pin consistency,
uv lock --check, inert Cloud Run startup smoke andgit diff --checkpassed. The 5 existing deprecation warnings concern legacy execution-report environment naming. No market/account data or live broker access was used.Real paired strategy results remain NOT_COMPUTED: the approved aggregation entry in UESP #542 is unmerged and default-branch gated, and upstream frozen paired replay inputs are still required. Unit tests and CI do not establish real strategy equivalence.
Related vocabulary/design: QPK #678. Research entry: UESP #542.
Needs owner review before IBKR deploy. No merge, auto-merge, deployment, orders, broker writes, or production changes are requested or performed by this PR.