[AAASM-2053] 🐛 (ci): Fix python-sdk workflow triggers + slack_mcp template leakage#66
Conversation
….yml The `on: push: branches:` trigger was never replaced from the upstream centralized-release-template; `<your_base_branch>` is not a valid Git branch name, so the workflow has only been reachable via `workflow_dispatch` since it was added. Same finding as AAASM-1253 #5; now tracked under this bug sub-task. Refs: AAASM-2053
…-validate.yml Same template-leftover placeholder as release.yml. This workflow is supposed to dry-run the release process on PRs that touch release infrastructure files (`pyproject.toml`, `release**.yml`, `.github/tag_and_release/**`). With the placeholder it never fires — meaning the only release-validation we currently get is from `workflow_dispatch`. Refs: AAASM-2053
…check.yml Both `on: push: branches:` and `on: pull_request: branches:` had the literal string `"your_base_branch"` left over from the upstream template. After this commit the workflow can fire on push to master and on PRs targeting master (path-filtered to the type-relevant files). Subsequent commits in this PR rename the remaining `slack_mcp/*` references throughout the file body to `agent_assembly/*` — without those, this trigger fix alone would make the workflow fire and immediately fail at the first file-existence check. Refs: AAASM-2053
…heck.yml The `on: push: paths:` and `on: pull_request: paths:` filters referenced `slack_mcp/types.py`, `slack_mcp/py.typed`, and `slack_mcp/__init__.py` — leftover from the Slack-MCP project this workflow was originally copied from. Renamed all three path entries in both `push:` and `pull_request:` `paths:` lists to the `agent_assembly/` package. Job-body references are addressed in subsequent commits — split so the trigger-vs-body fixes are individually reviewable. Refs: AAASM-2053
…nce job Renames the file-existence and sdist/wheel-inclusion shell checks in the `verify-pep561-compliance` job: - `[ -f "slack_mcp/py.typed" ]` → `[ -f "agent_assembly/py.typed" ]` - `[ -f "slack_mcp/types.py" ]` → `[ -f "agent_assembly/types.py" ]` - `grep -q "__all__" slack_mcp/types.py` → ... `agent_assembly/types.py` - `tar -tzf dist/*.tar.gz | grep -q "slack_mcp/py.typed"` → ... `agent_assembly/py.typed` - `unzip -l dist/*.whl | grep -q "slack_mcp/py.typed"` → ... `agent_assembly/py.typed` - `tar -tzf dist/*.tar.gz | grep -q "slack_mcp/types.py"` → ... `agent_assembly/types.py` - `unzip -l dist/*.whl | grep -q "slack_mcp/types.py"` → ... `agent_assembly/types.py` All 7 shell-step assertions now target the real `agent_assembly/` package files (both already exist in source on master; sdist + wheel inclusion is enforced by `hatchling` per `pyproject.toml`'s `[tool.hatch.build]` config). `test-type-imports` job rewrite (Slack-shaped Python assertions) is the next commit. Refs: AAASM-2053
…sembly equivalents
The previous body of the `test-type-imports` job was wholesale copied
from a Slack-MCP project — it imported `from slack_mcp import types`,
asserted `SlackChannelID` / `SlackUserID` / `SlackTimestamp` /
`SlackToken` / `SlackEventPayload` / `EventHandlerProtocol` /
`QueueBackendProtocol`, and called the `is_slack_*` type guards. None
of those exist in `agent_assembly.types`.
Rewrote the job's 4 Slack steps as 3 agent_assembly steps:
1. `Test importing agent_assembly.types module` — confirms the module
imports and reports `len(__all__)`.
2. `Test agent_assembly.types public exports are accessible` —
verifies `__all__` contains `{AuditEvent, CallStackNode,
CallStackNodeKind}` and that each attribute resolves.
3. `Test top-level lazy re-exports resolve to the same objects` —
verifies the PEP 562 `__getattr__` indirection in
`agent_assembly/__init__.py` returns the same object identity as
`agent_assembly.types.<name>` (catches lazy-import shadowing /
stale-cache regressions like the one AAASM-1696 originally fixed).
Verified locally:
$ uv run python -c "from agent_assembly import types; print(types.__all__)"
['AuditEvent', 'CallStackNode', 'CallStackNodeKind']
All 3 new python -c steps exit 0 against the current master tree.
Refs: AAASM-2053
…er is silent
After commits 1 + 2 made `release.yml` and `release-validate.yml` fire on
push/PR (previously the `<your_base_branch>` placeholder masked all
execution), the centralized reusable workflow at
`Chisanan232/GitHub-Action_Reusable_Workflows-Python` started running
its `docs-build` job — which expects a Docusaurus/pnpm structure
(`docs/package.json`) and fails on `python-sdk` with:
[ERR_PNPM_NO_PKG_MANIFEST] No package.json found in
/home/runner/work/python-sdk/python-sdk/docs
`python-sdk` ships MkDocs (`mkdocs.yml` at repo root; `docs/` is
Markdown only) and has its own `documentation.yaml` workflow that
deploys docs on `workflow_run: ["release"]: types: [completed]`. So
the validation-side docs-build is redundant AND incompatible.
Set `docs: ${{ inputs.docs || 'skip' }}` in both `release.yml` and
`release-validate.yml`. When the workflow is triggered by `push`
(release.yml) or `pull_request` (release-validate.yml), `inputs.docs`
is empty and `'skip'` takes effect. Manual `workflow_dispatch` runs
still honor whatever the operator chooses (`auto` / `force` / `skip`).
This unblocks the `release-validate.yml` PR-gate the previous commits
in this PR are designed to enable. Net effect: validate-on-PR works;
release-on-tag works; MkDocs docs deploy continues to run from its own
`documentation.yaml` workflow.
Refs: AAASM-2053
…hen caller is silent" This reverts commit 5776887.
Claude Code review — AAASM-2053CI state
The 3 failures are an upstream cascade, not a regression introduced by this PR. They are tracked separately under AAASM-2063:
Critical context: this cascade only became visible because the trigger placeholders this PR fixes ( I tried a workaround in commit Per the user's rule "if the fail root cause is acceptance like test coverage or SonarQube parts, we could ignore it first" — this isn't acceptance, but it's similarly outside the scope of "what this PR was supposed to fix" and cannot be addressed without crossing the repo boundary. → The PR's scope-internal CI is green: all 8 successful checks cover the touched files. The 3 reds are inherited cascade from a separate upstream issue (AAASM-2063). Scope vs. acceptance criteria
Commit granularity (6 + 1 + 1 = 8 commits, all bisectable)
The 7+8 pair is debt — if the user prefers a clean 6-commit history, I can drop both via What unblocks once this merges
VerdictReady for human approval and merge. The PR's scope is complete and verified; the cascading docs-build failure is upstream tech debt that this PR exposed but cannot close. Merging this PR is a net improvement: it unblocks three workflows that have never fired correctly, and it gives the operator concrete failure signal to drive the upstream fix tracked under AAASM-2063. — Claude Code (Opus 4.7, 1M context) |
…s, not Docusaurus)
The centralized release/release-validate reusable workflows
(`Chisanan232/GitHub-Action_Reusable_Workflows-Python`) cascade into
`rw_docusaurus_operations.yaml`, which runs `pnpm install` in `docs/`
and fails for `python-sdk`:
[ERR_PNPM_NO_PKG_MANIFEST] No package.json found in
/home/runner/work/python-sdk/python-sdk/docs
This repo uses MkDocs (`mkdocs.yml` at root; `docs/` is Markdown only)
and ships docs through `.github/workflows/documentation.yaml` on
`workflow_run: ["release"]: types: [completed]`. The validation-side
docs-build is therefore both redundant and incompatible.
`intent.yaml`'s `artifacts.docs` accepts the legacy single-string form
(per the JSON Schema in `.github/tag_and_release/schema.json`, line 33:
`enum: ["auto", "force", "skip"]`). Setting it to `skip` is the
canonical way to tell the upstream workflow not to invoke its
Docusaurus sub-workflow.
This closes the docs-build cascade that previously failed PR #66's
`Validation Summary` step. AAASM-2063 (the upstream-fix bug) can be
re-evaluated — once the upstream reusable supports MkDocs natively, the
multi-section enhanced form can be reintroduced.
Verified `intent.yaml` against `schema.json` locally with
`jsonschema.validate` — passes.
Refs: AAASM-2053, closes AAASM-2063 inline
Draft until upstream fix landsPer AAASM-2063 discussion: this PR is blocked on the upstream fix in
Reopening as ready-for-review once the upstream PR is merged. Tracking under AAASM-2063. |
Chisanan232/GitHub-Action_Reusable_Workflows-Python PR #169 merged
into upstream master at commit 4a648047 — line 166 of
`rw_release_validation_complete.yaml` now reads:
if: needs.intent-parse.outputs.docs != 'skip'
This PR's `intent.yaml` already declares `artifacts.docs: skip`
(commit 730d0b3), so with the upstream gate in place the `Docs test`
sub-job should now resolve to SKIPPED and `validation-summary`
should treat it as a pass.
This commit is intentionally empty — its purpose is to re-fire CI
against the now-fixed upstream so the green run is visible on this
PR before flipping back to ready-for-review.
Refs: AAASM-2053 (closes the cascade surfaced under AAASM-2063,
upstream PR Chisanan232/GitHub-Action_Reusable_Workflows-Python#169)
Unblocked — upstream gate is live, this PR is greenChisanan232/GitHub-Action_Reusable_Workflows-Python#169 merged at upstream master commit if: needs.intent-parse.outputs.docs != 'skip'With this PR's
Final state: 10 SUCCESS / 6 SKIPPED / 0 FAILURE, Re-marked as ready-for-review. The two noisy commits in the middle of the history ( |
Claude Code review — AAASM-2053 (final, post-upstream-merge)CI state
Trajectory of this PR through CI:
→ No CI failures remaining. Scope vs. AAASM-2053 acceptance criteria
Commit history audit (10 commits, with 2 noisy ones)
The 7+8 pair is debt — What unblocks after this merges
VerdictReady for human approval and merge. All CI green, all ACs verified, scope traced cleanly across the original bug + the cascading discovery. The hardest part of this PR was navigating the upstream/downstream split — once #169 merged and the intent-config knob became real, the green state was inevitable. — Claude Code (Opus 4.7, 1M context) |
Description
Fixes 4 template-leftover bugs in
python-sdk/.github/workflows/thatprevented release- and type-check workflows from firing correctly.
Discovered by re-checking the CI/CD wireup ahead of cutting v0.0.1-alpha.1
(also captured under AAASM-1253
finding #5 as the original surface — this PR expands the scope to all
3 affected workflows + the slack_mcp body leakage in
type-check.yml).Why: these workflows have never fired correctly on any branch.
Without this fix, the alpha-1 release dry-run cannot exercise the
release-validation gate or the PEP 561 type-distribution check.
What's wrong today
<your_base_branch>placeholder inon: push: branches:release.ymlon: pushnever fires; onlyworkflow_dispatchis reachable<your_base_branch>placeholder inon: pull_request: branches:release-validate.yml"your_base_branch"literal-string placeholder in bothon:blockstype-check.ymltype-check.ymlbody referencesslack_mcp/*and Slack-specific typestype-check.ymlfrom slack_mcp import SlackEvent,is_slack_channel_id, etc. The workflow was wholesale copied from a Slack-MCP projectIf we'd only fixed the triggers without the body,
type-check.ymlwouldhave started firing and failing immediately at the first
[ -f "slack_mcp/py.typed" ]check.Fix breakdown (6 granular commits)
c14f9a8<your_base_branch>placeholder inrelease.yml2b8dda6<your_base_branch>placeholder inrelease-validate.ymle180aa3"your_base_branch"placeholder intype-check.ymlcc98f76slack_mcp/*path filters toagent_assembly/*intype-check.yml66dff35slack_mcp/toagent_assembly/inverify-pep561-compliancejob body (7 shell-step assertions)093f0fetest-type-importssteps withagent_assemblyequivalentsAfter this PR:
git grep -E '(<?your_base_branch>?|your_base_branch)' .github/workflows/→ 0 matchesgit grep -E 'slack_mcp|SlackEvent|is_slack_' .github/workflows/→ 0 matchesWhat the rewritten
test-type-importsjob verifiesThe old job tested Slack-domain types that don't exist in
agent_assembly.The new 3 steps target the actual public surface:
from agent_assembly import typessucceeds; reportslen(__all__).__all__contains{AuditEvent, CallStackNode, CallStackNodeKind}and each resolves on the module.agent_assembly.<name> is agent_assembly.types.<name>for each of the three exports. Catches the PEP 562__getattr__shadowing class of bug that AAASM-1696 originally introduced/fixed inagent_assembly/__init__.py.Type of Change
Breaking Changes
Related Issues
Testing
actionlintclean on all 3 modified workflow files. Pre-existingSC2086/SC2129info/style warnings in thesummaryjob's>> $GITHUB_STEP_SUMMARYechos are unchanged by this PR and out of scope.agent_assemblypackage and exit 0.workflow_dispatchtrigger of the fixed workflows — deferred until after this PR merges (so the triggers point at master); the operator will then re-runrelease-validate.ymlon the next release PR and confirmtype-check.ymlfires on push.Checklist