jgrusewski
de69f270da
merge: B3a — survivorship-free historical EOD ingest (mechanism + dedicated PVC/Job)
...
Resumable HistoricalEodIngest → dedicated backtest warehouse PVC; fxhnt ingest-historical CLI; external-443
egress netpol. Backtest engine (B3b) next. 370 tests green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 00:24:51 +02:00
jgrusewski
a32aac1049
fix(b3a-deploy): dedicated external-443 egress netpol for the ingest Job (Tiingo reachable past default-deny)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 00:24:47 +02:00
jgrusewski
c847d7b109
feat(b3a-deploy): historical-ingest entrypoint + config + dedicated backtest PVC + resumable Job
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 00:22:38 +02:00
jgrusewski
5e8b02ec8b
fix(b3a): mark empty-bars tickers processed (no recurring refetch on incremental runs)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 00:15:17 +02:00
jgrusewski
371a16f94c
feat(b3a): resumable survivorship-free historical EOD ingest -> warehouse + ticker membership
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 00:09:49 +02:00
jgrusewski
8d363e14b5
docs(b3): spec — survivorship-free price-only equity-factor backtest (PIT ingest + walk-forward + gauntlet)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 00:05:01 +02:00
jgrusewski
7fc1790780
feat(b2.2): equity-factor price-only (momentum+lowvol); drop fundamentals fetch (Tiingo DOW-30-only)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 22:31:31 +02:00
jgrusewski
d29593e0ed
feat(b2.2): low-vol factor + price-only composite (momentum+lowvol); keep value/quality for future
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 22:27:26 +02:00
jgrusewski
9835d64cbb
perf(b2): eqfactor_scores shared asset; 3 sleeves consume it (fetch once, n=150)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 21:31:16 +02:00
jgrusewski
6d2acf7956
perf(b2): shared batched-concurrent factor scores; services consume precomputed scores
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 21:27:53 +02:00
jgrusewski
547074aebb
fix(b2): _factor_targets resilient per-ticker — skip names lacking Tiingo coverage (one 400 no longer aborts the book)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 18:24:43 +02:00
jgrusewski
3709f7853c
merge: B2 — equity-factor sleeve (value+quality+momentum, 3 constructions) on Tiingo fundamentals
...
Cross-sectional multi-factor US-equity book; long-only/long-short/long-tilt as 3 ForwardStrategy paper-tracks.
TiingoFundamentalsClient + TiingoUniverseSource (dollar-volume top-N). 358 tests green, mypy clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 17:59:17 +02:00
jgrusewski
95571669e6
feat(b2): wire 3 equity-factor assets into the Dagster graph
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 17:55:38 +02:00
jgrusewski
273a51e86c
feat(b2): equity-factor target builder + 3 ForwardStrategy services
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 17:50:16 +02:00
jgrusewski
f89003e3df
fix(b2): rank full filtered universe by dollar-volume (drop alphabetical pre-slice bias)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 17:45:46 +02:00
jgrusewski
e1deecc702
feat(b2): TiingoUniverseSource (supported-tickers filter + dollar-volume top-N)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 17:41:27 +02:00
jgrusewski
8d4d389096
feat(b2): TiingoFundamentalsClient (daily metrics + statements)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 17:35:51 +02:00
jgrusewski
98e264f14c
refactor(b2): tilt uses statistics.median for consistency
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 17:33:11 +02:00
jgrusewski
9e4379a3e8
feat(b2): equity-factor domain (z-score, composite, 3 constructions, book return)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 17:30:01 +02:00
jgrusewski
159b9b1fc8
feat(b2): FundamentalsClient + UniverseSource ports
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 17:27:10 +02:00
jgrusewski
c033607317
docs(b2): implementation plan — equity-factor sleeve (7 tasks)
...
Ports → domain (z-score/composite/3 constructions, full code) → Tiingo fundamentals+universe adapters →
3 ForwardStrategy services → registry+assets → deploy. TDD, deterministic domain + fake-port tests.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 17:19:08 +02:00
jgrusewski
5f292deb45
docs(b2): spec — equity-factor sleeve (value+quality+momentum, 3 construction variants)
...
Cross-sectional multi-factor book on broad liquid US universe (Tiingo fundamentals + 30yr EOD); long-only /
long-short / long-tilt as 3 ForwardStrategy paper-tracks through the gate. Deterministic domain+fake-port
tests. Backtest/DSR layer = separate increment.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 10:32:00 +02:00
jgrusewski
98ce7b3c2b
merge: B1 — 6 paper-track strategies as Dagster assets + Tiingo equity data
...
Faithful ports (sixtyforty/multistrat/gd/funding/crossvenue/poc incl. torch), generic ForwardTracker,
6 assets wired into cockpit_forward, equity sleeves on Tiingo native adjClose (33yr total-return).
327 tests green, mypy clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 08:59:39 +02:00
jgrusewski
c192010c36
deploy(b1): wire TIINGO_API_KEY into the Dagster pod (equity sleeves)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 08:59:34 +02:00
jgrusewski
10c0c4a59f
feat(b1): TiingoDailyClient (native adjClose, 33yr); swap equity sleeves Massive->Tiingo
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 08:50:25 +02:00
jgrusewski
17eca26bb3
test(b1): lock multi-dividend back-adjustment compounding in MassiveDailyClient
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 08:38:29 +02:00
jgrusewski
6e547dad80
feat(b1): MassiveDailyClient total-return adapter; swap equity sleeves Yahoo->Massive
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 08:32:51 +02:00
jgrusewski
e100502c17
refactor(b1): paper-track assets swallow only transient errors, not real bugs
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 08:22:17 +02:00
jgrusewski
2e391489bf
feat(b1): wire 6 paper-track assets into the Dagster graph
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 08:18:12 +02:00
jgrusewski
6468b756ba
feat(b1): surfer poc paper-forward strategy — faithful port with torch + real signal_sweep/pit_sweep
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 08:03:10 +02:00
jgrusewski
559795b3fd
refactor(b1): crossvenue single venue snapshot per run (funding+volume one fetch)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 07:22:25 +02:00
jgrusewski
3a0e6cf06e
feat(b1): cross-venue funding paper-forward strategy (faithful port)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 07:16:13 +02:00
jgrusewski
e2168ee0ef
fix(b1): funding port faithful — qualify on tf30 (30d mean), crypto-native+hedgeable universe
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 07:08:39 +02:00
jgrusewski
84bfb2110e
feat(b1): crypto funding-harvest paper-forward strategy (Binance, faithful port)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 07:02:48 +02:00
jgrusewski
a2d7bfe512
docs(b1): note gd QQQ-alignment choice vs foxhunt original
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 06:58:10 +02:00
jgrusewski
6e004f1749
feat(b1): growth-discipline paper-forward blend (composes multistrat, faithful)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 06:54:27 +02:00
jgrusewski
f2aade706a
feat(b1): multistrat adaptive paper-forward book (Yahoo, faithful port)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 06:48:53 +02:00
jgrusewski
4cf5733591
refactor(b1): tz-aware fromtimestamp + zip strict in Yahoo template
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 06:44:37 +02:00
jgrusewski
2e7ba4764c
feat(b1): sixtyforty paper-forward strategy (Yahoo) — template
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 06:40:41 +02:00
jgrusewski
94dbf79133
feat(b1): market-data client ports
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 06:36:46 +02:00
jgrusewski
f6aecfece4
refactor(b1): tidy ForwardTracker imports + module docstring
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 06:35:31 +02:00
jgrusewski
4f9b6fcc0f
feat(b1): generic ForwardTracker over a ForwardStrategy port
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 06:31:10 +02:00
jgrusewski
5da77b6959
docs(b1): poc ported faithfully WITH torch (real signal_sweep/pit_sweep) — no algo changes to dodge a dep
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 06:27:45 +02:00
jgrusewski
3e57f2db01
docs(b1): implementation plan — 6 paper-track strategies as Dagster assets
...
10 tasks: generic ForwardTracker + ForwardStrategy port; 5 market-data ports; sixtyforty (template),
multistrat, gd, funding, crossvenue, poc (numpy, no torch); orchestration wiring; deploy + cron retirement.
TDD per task, fakes (no live network), strict-mypy, days-list round-trip through state_reader.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 00:13:50 +02:00
jgrusewski
544e47b04d
docs(b1): fold poc into scope — paper path is numpy-only (no torch/pit_sweep)
...
All 6 remaining strategies in one increment. poc's paper(cfg) path uses numpy xs_weights (residual momentum
top-30 market-neutral) + a Deribit-DVOL VRP sleeve, VRP sizing calibrated from the live lookback window instead
of pit_sweep — so no torch, no warehouse PIT dep, no new state_reader case (emits days-list). Added two data
ports (CryptoPerpBarClient, VolIndexClient) + a poc detail section.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 00:04:44 +02:00
jgrusewski
bff1fe2dee
docs(b1): spec — 5 paper-track strategies as clean Dagster assets
...
Port funding/crossvenue/multistrat/sixtyforty/gd to hexagonal fxhnt services + assets feeding the existing
cockpit_forward ingest; generic ForwardTracker over a ForwardStrategy port (recomputable-series + live-booking
patterns); unify on days-list state shape; retire foxhunt surfer crons. poc deferred to B1b.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-15 23:59:31 +02:00
jgrusewski
860f7a6325
infra(rbac): drop duplicate ci-deploy Role — canonical home is foxhunt repo
...
The deploy SA's RBAC is cluster-bootstrap and already lives + is kustomize-applied in the foxhunt repo
(infra/k8s/argo/ci-deploy-rbac.yaml). Keeping a second copy here would drift. Single source of truth.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-15 22:36:10 +02:00
jgrusewski
e9acfed8d9
infra(rbac): version-control the ci-deploy Role+RoleBinding (was live-only)
...
The deploy SA's Role existed only in the cluster — a rebuild would silently lose it and break the cockpit
deploy at the RBAC step. Captures current live state (incl. the serviceaccounts/pvc/cronjobs/deployments-watch
grants added 2026-06-15) as bootstrap IaC. Apply with an admin kubeconfig, not from the deploy step.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-15 22:23:53 +02:00
jgrusewski
7f54941ca4
fix(ci): deploy uses alpine/k8s (has /bin/sh); registry.k8s.io/kubectl is distroless
...
registry.k8s.io/kubectl is distroless — no /bin/sh — so the multi-command deploy script failed with
exit 64 (no such file /bin/sh). alpine/k8s bundles kubectl on an Alpine base with a shell.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-15 22:14:07 +02:00
jgrusewski
aef1412f66
fix(ci): deploy step uses official registry.k8s.io/kubectl (bitnami image removed from Docker Hub)
...
The deploy node hit ImagePullBackOff: bitnami/kubectl:1.31 no longer resolves on docker.io (Bitnami
retired their free Docker Hub catalog in 2025). Switch to the maintained official k8s kubectl image.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-15 22:11:27 +02:00