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>
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>
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>
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>
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>
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>
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>
spec.archiveLogs:false was the real kill-switch — it disabled archival for the whole workflow regardless
of the per-template MinIO-reachability fix. Flip to true so logs actually land in the argo-logs bucket.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Root cause of months-long missing CI logs: MinIO's ingress netpol allows part-of in {foxhunt,foxhunt-ci,
argo-workflows}; the cockpit build/deploy pods carried neither label → MinIO denied the wait-sidecar's
log upload (i/o timeout) → builds errored. Using 'argo-workflows' (not 'foxhunt') admits them to MinIO
WITHOUT triggering argo-base-egress (which would block registry:5000/git:2222). Reverts the earlier
archiveLogs-disable approach — logs are now SAVED, not skipped.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Both latent bugs: a recreated Dagster instance would silently not arm the nightly schedule; and the
Argo build marked Error on the MinIO log-sink (masking real failures + skipping the auto-deploy step).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
write_features_bulk writes many symbols in a single transaction (one fsync/checkpoint vs one per
symbol); ingest_crypto_pit collects all 155 symbols then one bulk call. Equivalence test proves
identical result. Targets the ~52min nightly crypto ingest in the Dagster combined-book run.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The B0 assets only ingested existing files → forward track froze on stale data. Mirror the retired
cron: crypto_bars fetches crypto_pit (Binance, free, daily, best-effort); futures_bars fetches via
Databento on Sundays (cost-capped, key-gated) before the silver→warehouse ingest.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wire the 4 B0 assets into combined_book_forward_job and a
ScheduleDefinition (cron 30 23 * * *, UTC) via a Dagster Definitions
object; dagster definitions validate passes.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Pins adjusted from >=1.8,<1.9 to >=1.12,<1.13 (dagster-webserver matching)
and >=0.28,<0.29 (dagster-postgres) — the 1.8.x/1.9.x/1.10.x lines cap at
Python <3.13 and the 1.11.x line caps at <=3.13.3; 1.12.x is the nearest line
that supports Python 3.13.6 (the venv runtime).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>