Modularity Review
Review Findings
The project previously mixed three concerns:
checked-in raw data and checked-in generated data
copied PPO scripts with hardcoded paths
plotting scripts living beside training logic
That made the MVP work, but it also meant the repository could drift from its source data and training pipeline.
Refactor Decisions
Raw Data Boundary
Only data/raw/prices.csv and data/raw/news.csv are required source data.
Generated artifacts are ignored:
data/processed/data/training/data/agent_outputs/
Preprocessing Boundary
agentic_trading/preprocessing.py now has two responsibilities:
generate visualization-friendly data by joining prices, news summaries, and sentiment fields
organize bot-training data by commodity
The pipeline is configured by configs/preprocessing/default.json.
Agent Boundary
Agent behavior is configured under configs/agents/. Training modules read configs instead of embedding direct data paths.
The single-asset and multi-asset PPO modules both emit the action, probability, entropy, position, reward, and net-worth fields that the dashboard expects. Feature scalers are fit on each training window and then applied to that split’s test and full-dataset diagnostic outputs.
Plotting code was removed from the agent layer. Visualization belongs in the Next.js dashboard or separate analysis notebooks/scripts, not in the training modules.
App Boundary
The Next.js app reads derived files. It does not generate them. The build command runs preprocessing first so deployment is reproducible from raw CSVs.
Agent-output discovery is file-pattern based rather than hardcoded to three splits. This keeps config changes in the training layer from forcing app-loader changes.
Documentation Boundary
Sphinx documentation uses the Read the Docs theme and is built into out/docs by the same GitHub Pages workflow that builds the static demo.
Cleanup Policy
Generated folders such as data/processed/, data/training/, data/agent_outputs/, out/, and .next/ stay ignored. Local cache files such as .DS_Store, __pycache__/, and *.tsbuildinfo should not be committed.