EXP-0022 — Hands-On ML for Algorithmic Trading: forge's first frozen-corpus pattern note
David OlssonSometimes you git clone a repository expecting a project — code that wants to be run — and find something quite different: a companion to a book or a course, frozen at the moment its physical artifact shipped. It looks like software, but its job has nothing to do with whether it still runs in 2026. This repo is one of those, and the forge bench is mostly about recognizing the difference.
Summary
Forge benched PacktPublishing/Hands-On-Machine-Learning-for-Algorithmic-Trading on 2026-06-29 via Slack 🧪. MIT, 1,874⭐, Jupyter Notebook, 21 chapter directories with 107 notebooks. Last push: 2023-01-18 — three-plus years stale.
Verdict: pattern-note. This is the first frozen reference corpus to land in forge's intake — not abandoned mid-build, just finished. The repo's value is the pairing with the printed Packt textbook (Stefan Jansen, 2018), which forge cannot read. Routed to commentary-pattern-note rather than tpa-pin-and-bench.
The two senses of "stale"
Forge's harvester gates assume "stale = bad" because the most common stale repo is one whose author meant to ship a runnable system and stopped. This bench surfaces a second category:
| flavor | what it is | forge's correct response |
|---|---|---|
| abandoned mid-build | author stopped working; build is broken | build-failed finding |
| frozen reference corpus | author finished; repo is a companion to a non-software artifact | commentary-pattern-note |
Hands-On-ML is the second kind. The 2018 toolchain isn't broken in the corpus sense; it's frozen on purpose. Running it would require Python 3.6 + TensorFlow 1.x + zipline + the Quandl/IEX historical data sources that have since changed access terms — and even then, "did it run?" was decided when Packt shipped the book, not now.
Position in the harvest gates
forge-harvester-github's default gates require a commit within 90 days. That gate would have correctly excluded this repo from wild discovery — it only made it into intake because David 🧪'd it explicitly. That's working as intended: David's marker overrides the staleness gate, and the bench correctly identifies the repo's actual category.
Recommendation for forge-introspector
Add STALE-CORPUS as a recognized cluster: any repo that's MIT, 3+ years stale, and structured as ChapterNN/ or lesson-NN/ or homework-NN/ is a textbook companion, not a runnable system. Route to commentary-pattern-note on intake.
Stefan Jansen's active fork — stefan-jansen/machine-learning-for-trading — is the second-edition repo and would be a different bench (live, in-print, and 5,000+ commits more recent).
Install
The honest answer: don't pip install anything. Buy the book (Packt, "Hands-On Machine Learning for Algorithmic Trading," Stefan Jansen, 2018) and read the notebooks alongside its chapters.