You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .claude/skills/sdk-only-release/EXAMPLES.md
+59Lines changed: 59 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -67,3 +67,62 @@ confirms `0.0.1a9.post1` is the latest.
67
67
on `repository_dispatch` (AAASM-2868), and this run was a
68
68
`workflow_dispatch`. If a documentation refresh is needed it must be
69
69
dispatched separately against the docs pipeline.
70
+
71
+
---
72
+
73
+
## Two cases — when to use this skill
74
+
75
+
The `sdk-only-release` skill's [SKILL.md SOP](SKILL.md#release-coordination-sop--when-agent-assembly-is-also-releasing) defines two release shapes. The worked example above (`0.0.1a9.post1`) is a **Case B** scenario — SDK-only release with the bundled `aasm` binary already published from the previous coordinated cycle. The walkthrough below shows the **Case A** coordinated cycle.
76
+
77
+
## Case A — coordinated cycle (wait for agent-assembly)
78
+
79
+
Worked example for the SOP. **Scenario**: operator wants to publish `agent-assembly==0.0.1b3`**alongside** agent-assembly `v0.0.1-beta.3` — both carry the same content cycle. The SOP requires the SDK dispatch to wait for the upstream tag + the auto-bump PR.
80
+
81
+
**1. Verify the agent-assembly tag exists and `release.yml` finished green.**
If the release is missing or the run is still in progress, STOP — do not dispatch the SDK release yet.
94
+
95
+
**2. Verify the `bot/aa-ffi-pin-v0.0.1-beta.3` PR opened on this repo.**
96
+
97
+
```bash
98
+
$ gh pr list --repo ai-agent-assembly/python-sdk --head bot/aa-ffi-pin-v0.0.1-beta.3 \
99
+
--json number,title,mergedAt
100
+
[{"number":NNN,"title":"🤖 (aa-ffi-python): Bump aa-core/aa-proto/aa-sdk-client pin to v0.0.1-beta.3","mergedAt":null}]
101
+
```
102
+
103
+
If no PR is listed, the upstream `update-python-sdk-ffi-pin` job (AAASM-2883) hasn't run yet. Wait, then re-probe.
104
+
105
+
**3. Review + merge the auto-bump PR.** The PR moves all three shared `git-SHA` pins (`aa-core`, `aa-proto`, `aa-sdk-client`) in `native/aa-ffi-python/Cargo.toml` to the new agent-assembly tag commit (and regenerates `Cargo.lock`). The single-SHA invariant from ADR 0002 / AAASM-2559 is preserved.
106
+
107
+
**4. ONLY NOW dispatch `release-python.yml`.** Same mechanics as the `0.0.1a9.post1` example above — `dry-run=true` first, then `dry-run=false`. Use `binary_source_tag=v0.0.1-beta.3` (NOT the previous tag) so the wheels bundle the new `aasm-*.tar.gz` assets, and `pypi_version=0.0.1b3` (the PEP 440 form of the agent-assembly tag).
108
+
109
+
```bash
110
+
gh workflow run release-python.yml \
111
+
--repo ai-agent-assembly/python-sdk \
112
+
--ref master \
113
+
-f pypi_version=0.0.1b3 \
114
+
-f binary_source_tag=v0.0.1-beta.3 \
115
+
-f dry-run=true
116
+
```
117
+
118
+
**5. Verify on the registry** (same probes as the `0.0.1a9.post1` example: `pip index versions agent-assembly` confirms `0.0.1b3` is the latest; downloading a wheel and inspecting the bundled `aasm` binary should match the new agent-assembly Release artifacts).
119
+
120
+
### Anti-example — what happens if you skip steps 1-3
121
+
122
+
This is the 2026-06-15 foot-gun the SOP prevents:
123
+
124
+
-**02:22 UTC** — operator dispatched `release-python.yml` with `pypi_version=0.0.1b2` while agent-assembly's latest release was still `v0.0.1-beta.1`. `binary_source_tag` resolved to that previous tag. `dry-run` defaulted to false. **PyPI accepted the publish**, bundling wheels with the previous agent-assembly content.
125
+
-**09:36 UTC** — agent-assembly's actual `v0.0.1-beta.2` tag cut (commit `0aa9c945`, AAASM-3004) → `notify-downstream` fired the coordinated republish. `release-python.yml` tried to re-publish `0.0.1b2` with the new content carrying the AAASM-3000 IPC fix. **PyPI 400'd** with `File already exists ('agent_assembly-0.0.1b2-cp312-cp312-macosx_10_12_x86_64.whl'). See https://pypi.org/help/#file-name-reuse`.
126
+
-**Net**: `agent-assembly==0.0.1b2` on PyPI carries the OLD content (no AAASM-3000 fix). The file-name slot is permanently burnt — PyPI explicitly disallows file-name reuse even after yank (see the linked help page). The fix had to ship under a different SDK version cut later.
127
+
128
+
The verification probes in steps 1-3 above make this impossible to repeat: any of them failing forces the operator to stop and resolve before dispatch.
Copy file name to clipboardExpand all lines: .claude/skills/sdk-only-release/SKILL.md
+28Lines changed: 28 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -36,6 +36,34 @@ release path, not an emergency one.
36
36
That is a `binary_source_tag` change — decide which axis is actually changing
37
37
before invoking.
38
38
39
+
## Release-coordination SOP — when agent-assembly is ALSO releasing
40
+
41
+
This is the canonical ordering rule operators MUST follow whenever `agent-assembly` is cutting a release in the same version cycle as this SDK. Codified after the 2026-06-15 incident (AAASM-3007).
42
+
43
+
### Case A — agent-assembly is ALSO releasing this version cycle
44
+
45
+
The SDK release MUST wait. Required order:
46
+
47
+
1. Cut the `agent-assembly` tag (e.g. `v0.0.1-beta.3`) and wait for its `Release` workflow to complete (build → publish → `notify-downstream`).
48
+
2. Wait for the auto-bump PR (`bot/aa-ffi-pin-<tag>`) to open on this repo (AAASM-2883 for node/python; AAASM-3006 extends the same fan-out to go-sdk).
49
+
3. Review + merge the auto-bump PR. This brings `master` in line with the `aa-sdk-client` SHA carried by the new agent-assembly tag.
50
+
4. ONLY THEN cut the SDK tag (matching version) — by tag-push OR `workflow_dispatch` — to fire this skill.
51
+
52
+
Do NOT pre-publish the SDK tag against the previous agent-assembly content. Doing so:
53
+
54
+
- Burns the version slot on the registry (npm / PyPI refuse re-publish).
55
+
- Means users installing that SDK version get content that does NOT carry the agent-assembly fix they expect.
56
+
57
+
### Case B — SDK-only release (no agent-assembly cut in this cycle)
58
+
59
+
This skill may be triggered freely via `workflow_dispatch`. No coordination required, because the existing `aa-sdk-client` SHA pin on `master` is already what we want to ship.
60
+
61
+
### Why this SOP exists (the 2026-06-15 incident)
62
+
63
+
On 2026-06-15 02:21 UTC, `@agent-assembly/sdk@0.0.1-beta.2` was published to npm via `workflow_dispatch` while `agent-assembly`'s latest release was still `v0.0.1-beta.1` (pre-AAASM-3000 IPC fix). The bundle on npm at version `0.0.1-beta.2` therefore does NOT carry the AAASM-3000 fix that users would reasonably expect from that version label. Same incident on PyPI at 02:22 UTC.
64
+
65
+
The fix is operator discipline (this SOP), not a workflow-code restriction — `workflow_dispatch` is kept open for legitimate Case B releases.
66
+
39
67
## How to use
40
68
41
69
Invoke `release-python.yml` via `workflow_dispatch` against `master`, three
0 commit comments