[AAASM-2336] ♻️ (release): Add notify-downstream — repository_dispatch to node-sdk + python-sdk after Release publishes#842
Conversation
…ter Release publishes
Supersedes the AAASM-2328 retry-with-backoff workaround in node-sdk's
release-node.yml. Replaces the cross-repo race with explicit
event-driven coordination:
1. agent-assembly's `release.yml` push:tags → `build` → `publish`
2. `publish` job creates the GitHub Release with aasm-*.tar.gz assets
3. NEW `notify-downstream` job fires repository_dispatch to node-sdk
4. node-sdk's `release-node.yml` listens for that event and runs
`gh release download` knowing the assets are already published
Before this: node-sdk fires on its OWN tag push, races with agent-
assembly's release, downloads fail with "release not found", retries
for up to 20 min hoping agent-assembly catches up.
After this: node-sdk only fires when agent-assembly's Release is
actually ready. No race, no retry.
OPERATOR PREREQUISITE — PAT SETUP:
Before merging this PR, configure the secret `CROSS_REPO_DISPATCH_PAT`
in `ai-agent-assembly/agent-assembly` repo settings. The PAT needs:
* Scope: `repo` access on `ai-agent-assembly/node-sdk`
* Or fine-grained: Contents:Read, Metadata:Read, Actions:R/W,
Dispatches permission on node-sdk repo
Cannot be automated — operator must create the PAT and add as a
secret.
Companion PR on node-sdk: release-node.yml gains repository_dispatch
trigger + drops the retry loop. Both PRs must merge for the new flow
to work — but they're independent (this PR's notify-downstream job
just no-ops on PAT absence by failing with a clear error).
Tracked: AAASM-2336 (supersedes AAASM-2328 workaround)
Claude Code review — AAASM-2336 (agent-assembly side)CI state
The actual verification happens on the next release-tag push: the new Scope vs. AC
🚨 Operator prerequisite (called out in PR body + commit message)Before this PR can functionally work end-to-end, the operator must configure secret
Without this secret, the Companion PRnode-sdk#66 listens for the dispatch event + removes the AAASM-2328 retry loop. Both PRs must be in master for the new flow to work end-to-end. Merging this one first is safe — if node-sdk hasn't merged its side yet, the VerdictReady for human approval and merge AFTER the operator confirms the The SHA-pinned action call ( — Claude Code (Opus 4.7, 1M context) |
python-sdk's `release-python.yml` consumes the same `aasm-*` binaries from agent-assembly's GH Release that node-sdk consumes — across four runners (linux x86_64, linux aarch64, macos arm64, macos x86_64). Its current workaround is worse than node-sdk's: `gh release download … 2>/dev/null` followed by an `else: echo "::warning::not yet published — wheel will ship without bundled binary"`. So a race ships a binary-less wheel silently. This commit adds a second `peter-evans/repository-dispatch` step firing `agent-assembly-release-published` at `ai-agent-assembly/ python-sdk` with the same payload. The companion change on python-sdk (switch trigger to `on: repository_dispatch` + drop the silent swallow) will be tracked in a separate ticket. go-sdk intentionally not dispatched — pure-Go module, no aasm binary consumption in its release pipeline; rationale documented inline below the dispatch steps. Operator note: `CROSS_REPO_DISPATCH_PAT` secret now also needs `Actions: R/W` + `Dispatches` permission on python-sdk (or classic `repo` scope covering both repos). Refs AAASM-2336.
Claude Code review — AAASM-2336CI state — green for merge
The diff is scoped to The branch is behind master because PR #843 (AAASM-2340) merged a substantial Scope vs. acceptance criteria
Operator prerequisite
Scope extensions during review (commit
|
Description
Replaces the AAASM-2328 retry-with-backoff workaround in node-sdk (and the silent
2>/dev/nullswallow in python-sdk) with explicit event-driven cross-repo coordination. After agent-assembly'spublishjob creates the GitHub Release, this newnotify-downstreamjob fires arepository_dispatchevent to the SDK repos so their consume-the-binaries workflows only run once the binaries are actually available on the GH Release.Dispatch targets
ai-agent-assembly/node-sdkrelease-node.ymldoesgh release downloadonaasm-*.tar.gz. Was retry-with-backoff per AAASM-2328ai-agent-assembly/python-sdkrelease-python.ymldoesgh release download --pattern 'aasm-*'across four runners (linux x86_64, linux aarch64, macos arm64, macos x86_64). Current workaround swallows the failure with2>/dev/nulland silently ships a wheel without the bundled aasm binary on race. Adding the dispatch is more urgent here than for node-sdk.ai-agent-assembly/go-sdkgoreleaser.yamlis a check-only workflow; Go module proxy auto-indexes from git tags. If go-sdk ever starts consuming agent-assembly binaries, add a third dispatch step.🚨 OPERATOR PREREQUISITE
Before merging, configure secret
CROSS_REPO_DISPATCH_PATinai-agent-assembly/agent-assemblyrepo settings with EITHER:reposcope covering bothai-agent-assembly/node-sdkANDai-agent-assembly/python-sdkCannot be automated — needs operator to create the PAT.
Companion PRs
release-python.yml's trigger frompush: tagstoon: repository_dispatch: { types: [agent-assembly-release-published] }and dropping the silent2>/dev/nullswallow. Until that lands, python-sdk continues firing on tag-push as today; the new dispatch is harmless on python-sdk side becauserelease-python.ymldoesn't yet listen for it.Related
— Claude Code