Skip to content

v0.1.2 — first matrix-tested release

Choose a tag to compare

@YuanZongjian YuanZongjian released this 04 May 16:03
· 61 commits to master since this 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

  • PathsConfig is now required everywhere. Every library entry point
    (run_data_pipeline, run_backtest, run_best_trial,
    run_indicator_calculation, WFARunner, PortfolioBacktestRunner, …)
    takes paths: PathsConfig as a kwarg-only required parameter. Library
    code no longer falls back to PathsConfig.from_env(); the strategy
    bridge raises CFG-003 if path strategy params aren't injected.
    Construct one PathsConfig at startup (via
    PathsConfig.from_project_root(<root>) or from_platformdirs) and
    thread it through.
  • echolon run removed. Use echolon backtest single <strategy_dir>
    it walks up to the workspace marker and recovers ctx, so no flags are
    required.
  • echolon init-strategy back-compat alias removed. Use echolon init.
  • Default workspace layout flattened: workspace/strategy/baseline/ +
    workspace/backtest/ (was workspace/current/...). Host apps with
    iteration-loop layouts override via the workspace marker's paths field.
  • Legacy strategy imports: from ...core.base.X no longer resolves.
    Run echolon migrate <strategy_dir> to rewrite to the current absolute
    paths (echolon.strategy.X).
  • Position field cleanup: entry_price, side, is_short,
    is_flat removed; only is_long survives. Use position.avg_price
    for the entry price; check direction via position.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.txt shipped into every workspace. echolon init /
    echolon hello drop 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_pipeline either copies a curated main_contract.csv from
    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's market_data_dir. Resolves a chain of CFG-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 raised TypeError; now uses the required params
    dict), added the missing outer-wrapper note for Cursor's mcpServers
    config, replaced the vague Codex CLI pointer with the documented
    codex mcp add command, replaced the LangChain pointer with a
    copy-pasteable MultiServerMCPClient snippet.

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.