v0.1.2 — first matrix-tested release
0.1.2 — 2026-05-04
Second public release. Hardens the dependency-injection contract, trims the
CLI surface, fixes a backlog of path-resolution bugs surfaced by host-app
integration, and ships llms.txt directly into scaffolded workspaces.
Breaking changes
PathsConfigis now required everywhere. Every library entry point
(run_data_pipeline,run_backtest,run_best_trial,
run_indicator_calculation,WFARunner,PortfolioBacktestRunner, …)
takespaths: PathsConfigas a kwarg-only required parameter. Library
code no longer falls back toPathsConfig.from_env(); the strategy
bridge raisesCFG-003if path strategy params aren't injected.
Construct onePathsConfigat startup (via
PathsConfig.from_project_root(<root>)orfrom_platformdirs) and
thread it through.echolon runremoved. Useecholon backtest single <strategy_dir>—
it walks up to the workspace marker and recovers ctx, so no flags are
required.echolon init-strategyback-compat alias removed. Useecholon init.- Default workspace layout flattened:
workspace/strategy/baseline/+
workspace/backtest/(wasworkspace/current/...). Host apps with
iteration-loop layouts override via the workspace marker'spathsfield. - Legacy strategy imports:
from ...core.base.Xno longer resolves.
Runecholon migrate <strategy_dir>to rewrite to the current absolute
paths (echolon.strategy.X). Positionfield cleanup:entry_price,side,is_short,
is_flatremoved; onlyis_longsurvives. Useposition.avg_price
for the entry price; check direction viaposition.direction
("LONG"/"SHORT"/"FLAT").- Pydantic v2 idioms: strategy output schemas use
model_config = ConfigDict(extra="allow")instead of the deprecated
class Config:block.
New
llms.txtshipped into every workspace.echolon init/
echolon hellodrop the agent orientation manual at the workspace
root, so an LLM agent walking into the project finds it without
needing the MCP server up.- Data pipeline auto-populates
main_contract.csv. Step 6 of
run_data_pipelineeither copies a curatedmain_contract.csvfrom
the raw data tree or derives it via the max-volume rule. Previously a
separate scaffolding step.
Fixed
- WFA OOS replay: paths threaded through
BacktestRunner.best_trial,
get_trading_calendar_instance,load_indicator_metadata, and the
SHFE adapter'smarket_data_dir. Resolves a chain ofCFG-003
errors that fired on every per-window backtest. - Contract-aware broker now probes slot-style indicator dir first and
falls back to instrument-style
({indicator_dir}/{slot}/by_contract/or
{indicator_dir}/{instrument}/by_contract/) — supports both
echolon backtest single(slot layout) and host-app iteration-loop
pipelines (instrument layout). - SHFE day-data extractor default subdir aligned with the natural
convention:{raw_data_dir}/SHFE/day_data/(was the misleading
raw_data/). - README runtime-registration table: corrected OpenAI Agents SDK row
(previous form raisedTypeError; now uses the requiredparams
dict), added the missing outer-wrapper note for Cursor'smcpServers
config, replaced the vague Codex CLI pointer with the documented
codex mcp addcommand, replaced the LangChain pointer with a
copy-pasteableMultiServerMCPClientsnippet.
Internal cleanup
- Removed
validation-backup/skill tree from echolon (relocated to
qorka — the KEEP/REVERT workflow is qorka-internal, not generic
backtest infra). - Renamed test fixture
al_v6_1_migrated/→aluminum_baseline/and
scrubbed qorka-specific path references from fixture file headers. - Skill-doc audit pass: removed qorka-internal class names
(ExplorationOrchestrator/ExploitationOrchestrator),
internal-task-tracker references ("Task 6 audit"), and outdated
migration framing. - README rewrite (EN + zh-CN): trimmed from ~265 lines to ~104,
restructured around the two journeys readers actually have (try via
CLI in 30 seconds; drive from an LLM agent). Native-Chinese tone
pass to drop translation-shaped phrasings.