v0.2 — CLI backend, Allium dual-tier, pipeline resilience
v0.2 — CLI backend, Allium dual-tier, pipeline resilience
Second milestone release of E2ER v3. The big themes:
Zero-cost LLM backend
A third LLM backend, claude_code, shells out to the claude CLI subprocess and runs at $0/token under a Max plan. Eight live runs were used to flush out CLI-mode-specific bugs (tool-name translation between SDK and CLI, workspace-as-cwd, subprocess env injection, tool-call counting). All three backends — anthropic, openrouter, claude_code — now go through the same tool_loop() interface.
Allium data layer: two providers
-
AlliumProvider(src/modules/data/allium.py): SQL Explorer client using Allium's 4-step async API (/explorer/queries→run-async→query-runs/{rid}/status→query-runs/{rid}/results). 429 retries on every step. INFORMATION_SCHEMA-basedlist_tables,describe_table,distinct_valuesdiscovery primitives. -
AlliumDeveloperProvider(src/modules/data/allium_developer.py, new this release): REST client for Allium's Developer-tier endpoints —/tokens/transfers,/wallet/transactions,/wallet/balances/history,/prices/history,/prices. Works on accounts that don't have Explorer SQL access. Module-level request pacing (0.5s minimum spacing) plus 60s 429-retry budget per call.
Same e2er-allium-query bash wrapper exposes both providers as subcommands, and the same Bash(e2er-allium-query:*) allow-list pattern governs CLI access. No bare Bash is allowed.
Pipeline resilience
- Cascade detection: if a specialist "succeeds" but doesn't write its canonical artifact, the pipeline halts before downstream specialists run on missing inputs.
- Atomic state save with
.bakfallback. - Transient Anthropic API errors (429/500/502/503/504/529 inside CLI subprocess output) now retry with 5s + 15s backoff instead of failing the pipeline.
- 221 tests passing, including 18+ resilience tests.
Specialist system
- New
theory_specialistported from v2 with amethodologyselector (empirical/theoretical/mixed). _MAX_TURNSbumped to 80 for data-heavy phases.- Review aggregator parser handles four reviewer output formats, reads scores from disk first (not chat summary).
GitHub adoption polish
- CI on Python 3.11 and 3.12 (ruff, mypy, pytest) with branch protection.
- Bearer-token auth on write endpoints, restricted CORS, scrubbed errors.
- First-run cost guardrail ($1 cap unless
acknowledge_unproven_tuple=true). - mypy in CI, pre-commit hooks, CHANGELOG, SECURITY.md, troubleshooting docs.
Acknowledgments
Built and live-validated through ~17 paper runs covering theoretical and empirical research designs. The Allium Developer-tier provider was added after a real research session where the SQL Explorer tier turned out to be unavailable on the test key; the pipeline now demonstrably runs end-to-end on either tier.