Skip to content

Latest commit

 

History

History
103 lines (80 loc) · 4.02 KB

File metadata and controls

103 lines (80 loc) · 4.02 KB

GitHub Pages Dashboard Deployment

Architecture

The live-forward pipeline keeps research artifacts and the public website separate:

Yahoo Finance and cached inputs
             |
             v
Daily live-forward pipeline
  - refresh official closes for archived cohorts
  - extend frozen Ridge and XGBoost portfolios
  - replay 1-60-session replacement policies
  - calculate returns, costs, and turnover
             |
             +--> reports/live_forward/   private, ignored research evidence
             |
             +--> public sanitizer and validator
                          |
                          v
                       site/               committed static bundle
                          |
                          v
                  GitHub Actions / Pages

reports/live_forward/ remains the full local evidence store. The publisher uses separate explicit field allowlists for model snapshots and frozen-cohort policy paths when it creates site/data/dashboard.json; it does not copy local paths, cached input names, raw price/feature rows, model files, credentials, or candidate-trial details. The public bundle is then validated for required files, snapshot and cohort schemas, duplicate identifiers or holdings, forbidden private strings, and a SHA-256 digest.

Daily publication

The standard daily command now refreshes both the local dashboard and the public bundle:

python -m src.cli run-live-forward-daily --as-of YYYY-MM-DD

This command is monitoring-only by default and reports "new_model_lists": 0. It rebuilds:

  • reports/live_forward/cohort_monitor.json;
  • reports/live_forward/dashboard.html; and
  • the tracked site/ deployment bundle.

The historical one-session retraining path requires the explicit --retrain flag. It should not be used during the frozen-cohort policy experiment.

To rebuild the public bundle without retraining:

python -m src.cli publish-live-dashboard \
  --live-root reports/live_forward \
  --output-dir site

Validate exactly what will be published:

python -m src.cli validate-live-dashboard-site --site-dir site

Commit site/ after reviewing the generated changes. A pull request that changes the public bundle runs the validation and packaging job without deploying. After merge, the resulting push to main runs the same validation, uploads the Pages artifact, and deploys it to the github-pages environment. The deploy job is explicitly restricted to refs/heads/main.

The scheduled public refresh runs at 22:30 UTC on weekdays, after the regular US market close. It reconstructs the frozen-cohort monitor from the sanitized portfolio selections already committed in site/data/dashboard.json, downloads only their adjusted closes and SPY, validates the bundle, commits changed public JSON, and deploys that exact version. It does not access the ignored reports/ directory, model files, news data, API credentials, or local caches. On market holidays, the refresh detects that the latest official close is already published and leaves the site unchanged.

The scheduled workflow is refresh-dashboard.yml. It can also be launched manually from GitHub Actions when a scheduled run needs to be repeated.

One-time repository setting

In the GitHub repository, open Settings > Pages and set Source to GitHub Actions. After the workflow succeeds, the expected project URL is:

https://hansun103.github.io/AI-Driven-Portfolio-Optimization-Backtesting-System/

Deployment intentionally runs from main, so work on the live-forward branch must be reviewed and merged before it becomes public. The browser fetches only static JSON, CSS, and JavaScript; no API server, token, database, or LLM service is required.

Failure behavior

The workflow does not deploy when the sanitizer output is absent, malformed, contains a blocked private marker, contains duplicate selected tickers, or does not match its deployment-manifest hash. A failed deployment leaves the previously successful Pages version online.