Conversation
…n-state fix & RPC E2E proof) (#624) Co-authored-by: Antriksh Gwal <antrikshgwal@gmail.com> Co-authored-by: Will Zimmerman <will@avaprotocol.org>
…dler URLs resolve
The renamed config/test.yaml references the bundler endpoints via
${SEPOLIA_BUNDLER_URL} / ${BASE_SEPOLIA_BUNDLER_URL}, which the config
loader expands from the process environment. testutil only loaded .env,
and both dotenv files are gitignored — so in a fresh git worktree the vars
were unset, expanded to empty, and bundler-dependent tests panicked with
"BundlerURL is empty in test.yaml config".
LoadDotEnv now loads .env.local then .env (local overrides, real env wins
over both), logs when neither is present so a missing dotenv in a worktree
is no longer a silent mystery, and factors single-file parsing into
loadDotEnvFile.
…th B) (#626) Co-authored-by: Will Zimmerman <will@avaprotocol.org>
…th (Path B only) (#628) Co-authored-by: Will Zimmerman <will@avaprotocol.org>
…er/node chains (#630) Co-authored-by: Will Zimmerman <will@avaprotocol.org>
…required per part (#631) Co-authored-by: Will Zimmerman <will@avaprotocol.org> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Chris Li <chris@avaprotocol.org> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#633) Co-authored-by: Chris Li <chris@avaprotocol.org> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…unblocks SDK regen) (#634) Co-authored-by: Chris Li <chris@avaprotocol.org> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Backend chain decoupling is fully merged (#630–#634): per-part chain flow + G5 (task chain removed, chain-agnostic storage, wipe migration), strict reject-0, create-path verification, and the OpenAPI renovation (workflow-level chainId removed, per-part chainId required). Updated the checklist: SDK Track-B is handed off to the SDK project (the renovated staging spec unblocks their regen), and the only remaining backend item is the staging→main promotion. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…) before promotion main carried an unsynced release (#627 Path B /api/notify + erc20_overrides, plus version bumps v3.11.0 / v3.12.0) that never came back to staging, so the staging→main PR (#636) conflicted. Back-merge main into staging to realign. Conflict resolutions: - summarizer_deterministic.go, summarizer_run_node_test.go: kept DELETED — staging removed the deterministic summarizer in #628; main only modified them. - vm_runner_rest.go, summarizer_context_memory.go: kept STAGING's Path-B-only notify rewrite (#628/#629) — it supersedes main's older #627 notify code (removed the duplicate BuildNotifyPayload, legacy telegram branch, summaryForClient). - run_node_immediately_rpc_test.go: kept staging's explicit per-node ChainId (G5 strict). Net effect on staging: brings in main's version bump (3.10.4 → 3.12.0); everything else from #627 was already present (#624/#626) or superseded. Build + affected suites green.
|
@claude, eye on this PR. |
|
Claude finished @chrisli30's task in 5m 3s —— View job PR Review — feat!: per-part chain decouplingTodo list:
Overall AssessmentThis is a large, well-planned breaking change. The architecture is sound, the migration is correct, and the test coverage for the new behaviors is good. A few concrete issues worth addressing before merge, plus some observability notes. Migration (
|
#637) Co-authored-by: Chris Li <chris@avaprotocol.org> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Release bundle (staging → main)
Headline — chain decoupling (BREAKING): a workflow no longer belongs to a chain. Chain lives only on each chain-aware trigger/node (
event/blocktriggers;contractRead/contractWrite/ethTransfernodes), wherechain_idis now required. (#630–#634)Task.chain_id/CreateWorkflowRequest.chainIdremoved; task storage is chain-agnostic (t:<status>:<id>)chain_id <= 0rejected at create and run (no aggregator-default fallback)chainIdremoved, per-partchainIdrequired, list/count/executions are chain-agnosticAlso bundled:
feat:user-facingerc20_overridesfor RunNodeImmediately (feat: user-facing erc20_overrides for RunNodeImmediately (+ simulation-state fix & RPC E2E proof) #624)feat:gateway forwards Email-node summaries to Studio/api/notify(feat: gateway forwards Email-node summaries to Studio /api/notify (Path B) #626)refactor:remove deterministic summarizer + legacy telegram-direct path (refactor: remove deterministic summarizer + legacy telegram-direct path (Path B only) #628); notify observability + dead-code sweep (refactor: notify observability warns + dead-code sweep (carry-over from #628) #629)Storage migration (required, automatic)
The storage key template changed (
t:<chain>:…/u:<chain>:…/history:<chain>:…→ chain-agnostic).make storage-checkintentionally exits 1 flagging the removedu:%d:%stemplates — that is expected; the migration is the handler:20260626-wipe-chain-bucketed-task-keys(registered inmigrations/migrations.go) runs at boot viaagg.migrator.Run()after a full DB backup, deleting orphaned old-schema rows (anyt:/u:/history:key with a numeric chain segment). Idempotent; recorded so it runs once. Tested.Pre-merge checklist
make storage-checkreviewed (breaking flag expected; migration covers it)ava-sdk-js) shipped sending per-part chains (regen off this spec)BREAKING CHANGE: chain_id is now required on every chain-aware trigger/node; the workflow-level chainId (Task.chain_id, CreateWorkflowRequest.chainId) is removed and task storage is chain-agnostic. Clients must send explicit per-part chains. A boot migration deletes pre-existing chain-bucketed tasks.
🤖 Generated with Claude Code