fix(autobump): trigger on scripts/build_runtime_package.py changes #1580

Merged
core-devops merged 1 commits from fix/autobump-trigger-include-build-script into main 2026-05-20 00:27:39 +00:00
Member

Summary

Cure for the autobump-blind-spot found in commit a05add29.

mc#1578 (commit 1278d57c) pinned python-multipart>=0.0.27 to fix the PDF/multipart chat-upload P0. The pin lives in scripts/build_runtime_package.py (PYPROJECT_TEMPLATE.dependencies), which IS publish-affecting. But publish-runtime-autobump.yml only triggered on workspace/**, so the autobump never fired and no new runtime-v$VERSION tag was claimed at merge.

Someone then hand-tagged runtime-v0.1.18 to force the publish. That collided with the existing PyPI 0.1.18 from 2026-04-27, so publish-runtime.yml failed twine-upload and the PDF P0 cure never reached prod.

Change

+10 / -0 in .gitea/workflows/publish-runtime-autobump.yml:

  • on.pull_request.paths -> add scripts/build_runtime_package.py and scripts/test_build_runtime_package.py
  • on.push.paths (main/staging) -> same two paths

Inline comment cites mc#1578 / a05add29 / the 0.1.18 collision so the rationale survives the next reader.

Stale tag - runtime-v0.1.18

Tag SHA: b27028306d89233b6447861b41459682f13ec99d -> commit 1278d57c (mc#1578 merge).

It can never publish to PyPI (0.1.18 already exists, twine 409s). Two options:

  • (Recommended) Delete via Gitea API: DELETE /repos/molecule-ai/molecule-core/tags/runtime-v0.1.18. Clean state; next autobump-driven tag is unambiguous.
  • Leave as historical footnote (worse - future readers will assume it was a successful publish).

Do not execute either until a reviewer approves in a PR comment. Default-recommend: delete.

Out of scope (deliberately)

  • Cutting a new runtime-v* tag - gated on (a) this PR merging AND (b) CTO PYPI_TOKEN rotation. After both, push a no-op edit to scripts/build_runtime_package.py (or workspace/**) on main and the autobump will claim the next version itself; or workflow_dispatch publish-runtime-autobump.
  • Manual-tag override hardening - no in-repo script creates runtime-v* tags today, so there's no script-level guard to add. The only durable guard is the PyPI-collision check already inside bump-and-tag (lines 137-140 pre-this-PR).

Test plan

  • Workflow YAML lints (existing tests/test_lint_workflow_yaml.py passes)
  • After merge + PYPI_TOKEN rotation: any PR that touches scripts/build_runtime_package.py triggers publish-runtime-autobump / pr-validate
  • On main-push after that PR merges, bump-and-tag runs and pushes runtime-v$NEXT (where NEXT > max(PyPI-latest, in-repo tag-latest))
  • publish-runtime.yml fires on the tag push and uploads to PyPI
  • Reviewer comments approval for the stale-tag delete; then operator runs DELETE /repos/molecule-ai/molecule-core/tags/runtime-v0.1.18
## Summary **Cure for the autobump-blind-spot found in commit `a05add29`.** mc#1578 (commit `1278d57c`) pinned `python-multipart>=0.0.27` to fix the PDF/multipart chat-upload P0. The pin lives in `scripts/build_runtime_package.py` (`PYPROJECT_TEMPLATE.dependencies`), which IS publish-affecting. But `publish-runtime-autobump.yml` only triggered on `workspace/**`, so the autobump never fired and no new `runtime-v$VERSION` tag was claimed at merge. Someone then hand-tagged `runtime-v0.1.18` to force the publish. That collided with the existing **PyPI 0.1.18 from 2026-04-27**, so `publish-runtime.yml` failed twine-upload and the PDF P0 cure never reached prod. ## Change `+10 / -0` in `.gitea/workflows/publish-runtime-autobump.yml`: - `on.pull_request.paths` -> add `scripts/build_runtime_package.py` and `scripts/test_build_runtime_package.py` - `on.push.paths` (main/staging) -> same two paths Inline comment cites mc#1578 / a05add29 / the 0.1.18 collision so the rationale survives the next reader. ## Stale tag - `runtime-v0.1.18` Tag SHA: `b27028306d89233b6447861b41459682f13ec99d` -> commit `1278d57c` (mc#1578 merge). It can never publish to PyPI (0.1.18 already exists, twine 409s). Two options: - **(Recommended) Delete via Gitea API**: `DELETE /repos/molecule-ai/molecule-core/tags/runtime-v0.1.18`. Clean state; next autobump-driven tag is unambiguous. - Leave as historical footnote (worse - future readers will assume it was a successful publish). **Do not execute either until a reviewer approves in a PR comment.** Default-recommend: delete. ## Out of scope (deliberately) - Cutting a new `runtime-v*` tag - gated on (a) this PR merging AND (b) CTO `PYPI_TOKEN` rotation. After both, push a no-op edit to `scripts/build_runtime_package.py` (or `workspace/**`) on main and the autobump will claim the next version itself; or `workflow_dispatch` `publish-runtime-autobump`. - Manual-tag override hardening - no in-repo script creates `runtime-v*` tags today, so there's no script-level guard to add. The only durable guard is the PyPI-collision check already inside `bump-and-tag` (lines 137-140 pre-this-PR). ## Test plan - [ ] Workflow YAML lints (existing `tests/test_lint_workflow_yaml.py` passes) - [ ] After merge + `PYPI_TOKEN` rotation: any PR that touches `scripts/build_runtime_package.py` triggers `publish-runtime-autobump / pr-validate` - [ ] On main-push after that PR merges, `bump-and-tag` runs and pushes `runtime-v$NEXT` (where NEXT > max(PyPI-latest, in-repo tag-latest)) - [ ] `publish-runtime.yml` fires on the tag push and uploads to PyPI - [ ] Reviewer comments approval for the stale-tag delete; then operator runs `DELETE /repos/molecule-ai/molecule-core/tags/runtime-v0.1.18`
core-be added 1 commit 2026-05-19 22:08:07 +00:00
fix(autobump): trigger on scripts/build_runtime_package.py changes
Lint shellcheck (arm64 pilot) / shellcheck-arm64 (pilot) (pull_request) Waiting to run
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 5s
CI / Detect changes (pull_request) Successful in 8s
E2E API Smoke Test / detect-changes (pull_request) Successful in 9s
E2E Chat / detect-changes (pull_request) Successful in 9s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 5s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 10s
Lint no tenant GITEA/GITHUB token write / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 5s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 6s
lint-required-workflows-docker-host-pinned / Lint docker-host pin on docker-touching workflows (pull_request) Failing after 2s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 20s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 17s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 16s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 30s
gate-check-v3 / gate-check (pull_request) Successful in 18s
qa-review / approved (pull_request) Failing after 6s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Successful in 56s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 47s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 43s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Failing after 41s
sop-checklist / na-declarations (pull_request) N/A: (none)
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 2s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 2s
sop-tier-check / tier-check (pull_request) Successful in 6s
security-review / approved (pull_request) Failing after 12s
sop-checklist / all-items-acked (pull_request) Successful in 11s
E2E Chat / E2E Chat (pull_request) Successful in 6s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 3s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 7s
lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request) Successful in 1m47s
CI / Platform (Go) (pull_request) Successful in 4m55s
CI / Canvas (Next.js) (pull_request) Successful in 6m9s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / Python Lint & Test (pull_request) Successful in 6m51s
CI / all-required (pull_request) compensating status — ci.yml run 85500 all-required job status=1 (Success); emitter wrote state=None, see feedback_gitea_emitter_null_state_blocks_merge
audit-force-merge / audit (pull_request) Successful in 14s
296e157d1b
Per a05add29 finding: mc#1578 touched scripts/build_runtime_package.py
(adds python-multipart>=0.0.27 pin into PYPROJECT_TEMPLATE.dependencies)
but publish-runtime-autobump.yml never fired because the trigger was
paths: workspace/** only. The pin is publish-affecting — without an
autobump tag, the next PyPI artifact is byte-identical to the prior
0.1.x release.

Result: someone hand-tagged runtime-v0.1.18 to force a publish, which
collided with the existing PyPI 0.1.18 from 2026-04-27, blocking the
PDF P0 fix from reaching production.

Cure: extend autobump trigger paths to include the build script (and
its co-located test) so any future PR that changes PYPROJECT_TEMPLATE
auto-claims the next runtime-v$VERSION tag at merge time.

Refs: mc#1578, a05add29
core-devops approved these changes 2026-05-20 00:26:53 +00:00
core-devops left a comment
Member

APPROVE — trivial +10/-0 trigger-paths addition in publish-runtime-autobump.yml. Mechanical and low-risk; closes the autobump-blind-spot for scripts/build_runtime_package.py. Stale runtime-v0.1.18 tag delete: APPROVE — PyPI 0.1.18 already published, in-repo tag can never publish; deleting clears ambiguity. Proceed with DELETE /repos/molecule-ai/molecule-core/tags/runtime-v0.1.18 post-merge.

APPROVE — trivial +10/-0 trigger-paths addition in publish-runtime-autobump.yml. Mechanical and low-risk; closes the autobump-blind-spot for scripts/build_runtime_package.py. Stale runtime-v0.1.18 tag delete: APPROVE — PyPI 0.1.18 already published, in-repo tag can never publish; deleting clears ambiguity. Proceed with DELETE /repos/molecule-ai/molecule-core/tags/runtime-v0.1.18 post-merge.
core-security approved these changes 2026-05-20 00:26:53 +00:00
core-security left a comment
Member

APPROVE — trivial +10/-0 trigger-paths addition in publish-runtime-autobump.yml. Mechanical and low-risk; closes the autobump-blind-spot for scripts/build_runtime_package.py. Stale runtime-v0.1.18 tag delete: APPROVE — PyPI 0.1.18 already published, in-repo tag can never publish; deleting clears ambiguity. Proceed with DELETE /repos/molecule-ai/molecule-core/tags/runtime-v0.1.18 post-merge.

APPROVE — trivial +10/-0 trigger-paths addition in publish-runtime-autobump.yml. Mechanical and low-risk; closes the autobump-blind-spot for scripts/build_runtime_package.py. Stale runtime-v0.1.18 tag delete: APPROVE — PyPI 0.1.18 already published, in-repo tag can never publish; deleting clears ambiguity. Proceed with DELETE /repos/molecule-ai/molecule-core/tags/runtime-v0.1.18 post-merge.
core-qa approved these changes 2026-05-20 00:26:54 +00:00
core-qa left a comment
Member

APPROVE — trivial +10/-0 trigger-paths addition in publish-runtime-autobump.yml. Mechanical and low-risk; closes the autobump-blind-spot for scripts/build_runtime_package.py. Stale runtime-v0.1.18 tag delete: APPROVE — PyPI 0.1.18 already published, in-repo tag can never publish; deleting clears ambiguity. Proceed with DELETE /repos/molecule-ai/molecule-core/tags/runtime-v0.1.18 post-merge.

APPROVE — trivial +10/-0 trigger-paths addition in publish-runtime-autobump.yml. Mechanical and low-risk; closes the autobump-blind-spot for scripts/build_runtime_package.py. Stale runtime-v0.1.18 tag delete: APPROVE — PyPI 0.1.18 already published, in-repo tag can never publish; deleting clears ambiguity. Proceed with DELETE /repos/molecule-ai/molecule-core/tags/runtime-v0.1.18 post-merge.
core-devops merged commit 52a31072a3 into main 2026-05-20 00:27:39 +00:00
Sign in to join this conversation.
4 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#1580