Skip to content

[ABI] Publish exact immutable staging requests - #1261

Merged
brandonpayton merged 2 commits into
mainfrom
emdash/fix-abi-request-sysroot
Aug 13, 2026
Merged

[ABI] Publish exact immutable staging requests#1261
brandonpayton merged 2 commits into
mainfrom
emdash/fix-abi-request-sysroot

Conversation

@brandonpayton

@brandonpayton brandonpayton commented Aug 13, 2026

Copy link
Copy Markdown
Member

Why

The exact-head request feed is the first handoff from a Kandelo pull
request to staged Homebrew bottle builds. ABI 43 could not reach that
handoff for two independent reasons.

First, the clean exact-head classifier ran the ABI check before its SDK
sysroots existed. Second, GitHub release immutability prevented the
active publisher from appending request bytes to an already-public
prerelease. The latter left an empty immutable release for the first
canary and stopped tap reconciliation before any bottle build began.

This change makes request publication compatible with immutable GitHub
releases while keeping candidate execution and all registry writes out
of Automattic/kandelo.

What changed

  • Fetch the exact musl gitlink and build both wasm32 and wasm64 SDK
    sysroots before structural ABI classification.
  • Give every canonical request its own digest-addressed prerelease and
    direct protected-commit tag.
  • Create the prerelease as a draft, upload and authenticate exactly one
    request, publish it once, then require immutable state and anonymous
    byte-for-byte readback.
  • Bind the request issuer workflow, direct tag, release target, and
    freshly recaptured protected main commit.
  • Rotate request policy through versions 14 and 15 and bind the
    classifier and publisher implementation.
  • Retain no GHCR publication path in Automattic/kandelo.

Validation

  • scripts/dev-shell.sh bash scripts/test-abi-staging-request-feed.sh
    passed, including 25 focused Rust tests.
  • The publisher lifecycle regression passed for fresh, interrupted,
    idempotent, collision, moved-main, and hostile-tag cases.
  • actionlint .github/workflows/abi-staging-request-feed.yml passed.
  • The exact ABI 43 head 5669d27fa171ad1bccf50031914dc6d997666276
    previously passed the clean structural classifier once both exact
    sysroots were built.
  • Hosted publication will be re-proven after merge because
    pull_request_target intentionally executes the protected main
    workflow, not this pull request's publisher bytes.

Rollout

Merge this PR first. A protected-main request-feed run will then publish
the current ABI 43 request. The tap activation PR can anonymously read
that exact immutable request and start Kandelo-dev candidate bottle work.

Clean exact-head request classification ran the candidate ABI check
before either SDK sysroot existed. ABI 43 therefore produced an invalid
structural report even though its snapshot was consistent.

Materialize the exact pinned musl source, build both SDK sysroots inside
the stripped candidate environment, and keep the classifier fail-closed.
Bind the workflow change in request policy v14 and extend the mutation
coverage.
@brandonpayton brandonpayton changed the title [ABI] Prepare exact sysroots before request classification [ABI] Publish exact immutable staging requests Aug 13, 2026
GitHub immutable releases reject assets appended after publication, so
the active request feed could create an empty public prerelease but could
not publish its request bytes. That stopped tap reconciliation before any
staged bottle build could begin.

Give each canonical request a digest-addressed tag and prerelease. Create
the release as a draft, upload and authenticate the one exact request,
publish it once, then require immutable state plus anonymous byte-for-byte
readback. Bind the direct tag, release target, issuer workflow, and
protected main commit together, and rotate request policy to version 15.
@brandonpayton
brandonpayton force-pushed the emdash/fix-abi-request-sysroot branch from bbf388a to 3a1bae5 Compare August 13, 2026 07:29
@brandonpayton
brandonpayton enabled auto-merge (squash) August 13, 2026 07:34
@brandonpayton
brandonpayton merged commit a1ff930 into main Aug 13, 2026
35 of 36 checks passed
@brandonpayton
brandonpayton deleted the emdash/fix-abi-request-sysroot branch August 13, 2026 08:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant