Changelog¶
Everything that changed about the app but not about the agent. Deployment, setup, guards, infrastructure, the site, the docs and dependencies. The Claude Code tooling in .claude/, such as hooks, skills and the usage bar, is not the app, and its changes are not recorded here.
Changes to what the agent does, what it is shown, or what its record contains go in the journey instead, and that page states the test. The split exists because the journey answers one question — when did the experiment's question change — and it can only answer it if the reader is not wading through image builds and CSS.
Entries are one or two lines: what changed, and why. Newest first.
Everything before experiment 2 is on the experiment 1 changelog.
2026-10-10¶
- Deployment —
compose.experiment2.example.yamltells you to build the experiment 2 image frommain, not from theexperiment-2branch. The branch is merged. The image keeps its own tagten-acre:exp2, so a rebuild does not change experiment 1. - Dependencies — The TradingAgents fork is rebased onto upstream v0.6.0, and the pin moves to
6cb8d7b. The lock addsmarkdown-it-py4.0 or later, which the fork needs for its HTML report.create_tier_clientkeeps the request-label callbacks beside the caller's callbacks. What changes in an analysis is in the journey.
2026-10-04¶
- Tooling —
agent._invokeandprobe_prompt.pyalso read the thinking fromreasoning_content, the namellama-serveruses. Ollama sendsreasoning, so nothing changes on a deployed model. Without the second read, a run served byllama-serverdirectly would lose its thinking from the record without an error. A test covers it.
2026-10-03¶
- Analysis — Each analysis gets the agent's book (
analysis.portfolio_context(): holdings with quantity and average cost, and the free cash) throughpropagate(portfolio=...). The yfinance override for statements is gone, so they come from SEC EDGAR as filed, and the fundamentals analyst also fetches insider transactions. - Dependencies — The TradingAgents fork is rebased onto upstream v0.5.2, and the pin moves to
d1f1f78.yf_retrynow lives intradingagents.dataflows.vendors.yahoo.common, sobars,fundamentals,positions,regimeandwatchdogimport it from there. The lock moves many packages, and the fork needs Python 3.11 or later and pandas 3.
2026-10-02¶
- Deployment — A market container: the same image with
MARKET_MODE=1. It holds the Webull keys, runs no agent and no scheduler, and answers/api/market/*. A book withMARKET_DATA_URLasks it first.compose.experiment2.example.yamladds the serviceten-acre-market(port 8130). A migration (c4f2a8e9d613) adds the tablemarketfetch. No existing row changes. See the journal for the reason. - Data — A new hourly job,
corporate_actions, reads splits and spin-offs and applies them to the stored data. Two new tables,corporateactionandsystemprompt, come with one migration (b6e1c4d8f372). No existing row changes. The Alpaca broker reads the feed from its data host with keys and no account number. See the journal for what the agent sees. - Broker — A third broker,
BROKER=sim, runs inside the process. It has no host, no SDK and no credential, so no setting can point it at real money. It fills market orders at the price the agent was shown plusSIM_SLIPPAGE_BPS(default 5), and fills limits, stops and targets from the 1-minute bars after the order. Its orders are in the newsimordertable.webullstays the default, and nothing changes for a deployment that does not set it. The setup page shows "Simulated trading" as ready for it. This is the first step of experiment 2 in the plan; no deployment uses it yet. - Data — Each candidate screen now writes the names it returned to a new table,
candidatescreen(ticker, source, price, volume, time), before the agent's watchlist is taken out. Experiment 2's random control books draw their tickers from it, so every book of one day uses one list. A migration adds the table. No existing row changes. - Scripts —
backend/scripts/experiment2_report.pyreads the databases of all books of experiment 2, builds the random control books from the bar cache and the stored screens, and applies the success test. - Deployment —
compose.experiment2.example.yamlruns four books from one image,ten-acre:exp2, each withBROKER=sim, its own data volume and one pinned model. It is an example, and no running deployment uses it. - Scripts —
backend/scripts/replay.pyandbackend/services/replay.pysend a recorded turn to the model again. They are not wired into the app. - Docs — The journal and the changelog of experiment 1 moved, unchanged, to
docs/experiment-1-journey.mdanddocs/experiment-1-changelog.md.JOURNEY.mdand this page now start with experiment 2, so each stays readable from end to end. A code comment that cites an old date means an entry on the archive page. Both archive pages are in the site navigation.