Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
886f882
[Packaging/Homebrew] Publish guest Homebrew as a dedicated package
brandonpayton Jul 23, 2026
55ee5f3
[Packaging/Homebrew] Correct bootstrap identity and provenance
brandonpayton Jul 23, 2026
868f2c3
[Homebrew/Build] Refuse incomplete product VFS images
brandonpayton Jul 22, 2026
3796d9a
[Homebrew/Build] Reject incomplete VFS artifacts before publication
brandonpayton Jul 23, 2026
b49249c
[Homebrew/Build] Close remaining VFS publication gaps
brandonpayton Jul 23, 2026
f9fb807
[Homebrew] Model publisher-only tools as native Requirements
brandonpayton Jul 22, 2026
7099ae4
[Homebrew] Seal native Requirement publisher inputs
brandonpayton Jul 22, 2026
c50cfb0
[Homebrew/Test] Enforce an offline publisher lifecycle
brandonpayton Jul 22, 2026
006cba2
[Homebrew/Test] Preserve publisher tools in offline CI
brandonpayton Jul 22, 2026
c49e210
[Homebrew/Docs] Separate publisher tools from guest bootstrap rollout
brandonpayton Jul 23, 2026
92dc65f
[Homebrew/Test] Prove the complete native Requirement publisher path
brandonpayton Jul 23, 2026
2b741b7
[Homebrew/Build] Keep local WordPress aliases out of product images
brandonpayton Jul 23, 2026
0ce55e8
[Homebrew/Plan] Batch the remaining migration gates
brandonpayton Jul 23, 2026
a6cf74b
[VFS] Derive package trees once for lazy and eager images
brandonpayton Jul 23, 2026
1ae728a
[VFS] Keep failed package-tree fetches retryable
brandonpayton Jul 23, 2026
200321d
[VFS] Apply portable package modes during eager materialization
brandonpayton Jul 23, 2026
16e0489
[VFS/Docs] Document portable package mode normalization
brandonpayton Jul 23, 2026
570fec2
[VFS/Test] Preserve package-tree freshness and browser parity
brandonpayton Jul 23, 2026
b55672e
[VFS] Verify closed package sources before binding URLs
brandonpayton Jul 23, 2026
3205b7d
[VFS] Close failed lazy source downloads before returning
brandonpayton Jul 23, 2026
385b110
[VFS/Security] Restrict prepublication asset transports
brandonpayton Jul 23, 2026
a72d48e
[Homebrew/VFS] Define bottle-owned VFS layer contract
brandonpayton Jul 23, 2026
7c06f71
[Homebrew/VFS] Bound composed layer resources
brandonpayton Jul 23, 2026
8cbcff9
[Packaging/VFS] Refresh identities for the combined package graph
brandonpayton Jul 23, 2026
47323db
[Kernel/ABI] Make ProcessTable the sole task identity authority
brandonpayton Jul 18, 2026
756b965
[Fork/ABI] Grow fork continuation storage dynamically
brandonpayton Jul 21, 2026
bab9732
[Fork/POSIX] Return continuation allocation failures to the parent
brandonpayton Jul 21, 2026
e767c45
[Host/ABI] Pass fork continuation addresses at guest width
brandonpayton Jul 23, 2026
fc167f9
[Kernel/Test] Exercise kernel-owned task allocation in inherited-dire…
brandonpayton Jul 23, 2026
b46b9f9
[Kernel/Test] Remove obsolete host fixtures from local signal tests
brandonpayton Jul 23, 2026
a4f6cdc
[Host/Test] Mark the fixed fork buffer as retired
brandonpayton Jul 23, 2026
1839292
[ABI/Packaging] Reject incomplete ABI 42 fork artifacts
brandonpayton Jul 23, 2026
dad6206
[Browser/ABI] Prove fork continuation growth and recovery
brandonpayton Jul 23, 2026
6cb7c99
[ABI/Packaging] Enforce the generated fork artifact contract
brandonpayton Jul 23, 2026
361e25f
[ABI/Packaging] Bind resolver projections to ABI 42
brandonpayton Jul 23, 2026
a3fcf34
[Homebrew/Plan] Publish one final ABI generation
brandonpayton Jul 23, 2026
69df195
[ABI/Test] Follow generated resolver ownership
brandonpayton Jul 23, 2026
6ab8a5c
[VFS/Security] Fail closed during artifact inspection
brandonpayton Jul 23, 2026
50671a6
[Fork/POSIX] Prove root allocation ENOMEM preserves the parent
brandonpayton Jul 23, 2026
63d2110
[Packaging/VFS] Bind the combined graph to atomic resolution
brandonpayton Jul 23, 2026
edb5531
[ABI/Test] Generate valid fork fixtures with production instrumentation
brandonpayton Jul 23, 2026
513bd59
[Agent/Docs] Preserve non-obvious design rationale in code
brandonpayton Jul 23, 2026
87acad1
[Packaging] Refresh shell identities after VFS rationale changes
brandonpayton Jul 23, 2026
fccb430
[Homebrew/Plan] Preserve staging throughput follow-ups
brandonpayton Jul 23, 2026
099603a
[Packaging/CI] Reuse complete PR package generations
brandonpayton Jul 23, 2026
640dca6
[Packaging] Keep ncurses source builds on GNU's origin
brandonpayton Jul 23, 2026
92ad2e3
[Homebrew/Plan] Track resilient GNU source retrieval
brandonpayton Jul 23, 2026
d7d09d4
[Homebrew/ABI] Preserve bottle provenance across ABI cutovers
brandonpayton Jul 23, 2026
56c95e1
[Homebrew/Plan] Record the dependency-ready ABI 42 rollout
brandonpayton Jul 23, 2026
6af083a
[Homebrew/Plan] Make the ABI tap cutover atomic
brandonpayton Jul 24, 2026
82c51f8
[Homebrew/VFS] Explain lazy layer link and activation boundaries
brandonpayton Jul 24, 2026
0d72e02
[Homebrew/VFS] Apply ownership before exposing lazy packages
brandonpayton Jul 24, 2026
8c38cb3
[ABI/Host] Bound and index linked continuation replay
brandonpayton Jul 24, 2026
9441265
[ABI/Host] Reject ambiguous continuation ownership
brandonpayton Jul 24, 2026
358654c
[ABI/Host] Validate guest pointer and replay boundaries
brandonpayton Jul 24, 2026
0a176f3
[Packaging] Refresh ABI 42 package identities
brandonpayton Jul 24, 2026
000e0f1
[Homebrew/Plan] Check publishable OCI refs correctly
brandonpayton Jul 24, 2026
860fb29
[Homebrew/Docs] Describe the active lazy shell
brandonpayton Jul 24, 2026
7b1004e
[Packaging/Homebrew] Enable Bash builtins required by brew
brandonpayton Jul 24, 2026
d2b4dd5
[VFS/Host] Retry transient lazy-tree transport failures
brandonpayton Jul 24, 2026
74ded46
[Packaging] Refresh VFS identities after retry hardening
brandonpayton Jul 24, 2026
437fde2
[Packaging] Ship the verified binary resolver bundle
brandonpayton Jul 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/browser-demos-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jobs:
run: |
npx playwright test \
test/coi.spec.ts \
test/browser-kernel-lazy-registration.spec.ts \
test/package-deferred-tree-browser.spec.ts \
test/wasm-trap-signal.spec.ts \
--project=chromium \
--project=firefox \
Expand Down
83 changes: 81 additions & 2 deletions .github/workflows/homebrew-main-shell-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -217,12 +217,91 @@ jobs:
npx playwright install chromium --with-deps
)

- name: Resolve current direct browser bundling inputs and build the exact candidate kernel
- name: Select one verified package generation
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
abi=$(sed -nE 's/^pub const ABI_VERSION: u32 = ([0-9]+);$/\1/p' \
crates/shared/src/lib.rs)
export WASM_POSIX_BINARY_INDEX_URL="https://github.com/Automattic/kandelo/releases/download/binaries-abi-v${abi}/index.toml"
[[ "$abi" =~ ^[0-9]+$ ]]
canonical_url="https://github.com/${GITHUB_REPOSITORY}/releases/download/binaries-abi-v${abi}/index.toml"
selected_url="$canonical_url"

if [ "$GITHUB_EVENT_NAME" = pull_request ]; then
pr_number=$(jq -er '.pull_request.number' "$GITHUB_EVENT_PATH")
[[ "$pr_number" =~ ^[1-9][0-9]*$ ]]
target_tag="pr-${pr_number}-staging"
expected="$RUNNER_TEMP/homebrew-main-shell-staging-expected.json"
snapshot="$RUNNER_TEMP/homebrew-main-shell-staging-snapshot"

# WHY: an ABI bump has no canonical package release yet. Reuse the
# parallel staging build only after proving it is a complete,
# exact-current generation; accepting a partial mutable index would
# mix packages from different builds or silently source-build gaps.
if bash scripts/dev-shell.sh env \
EXPECTED="$expected" \
SNAPSHOT="$snapshot" \
TARGET_TAG="$target_tag" \
ABI="$abi" \
bash -c '
set -euo pipefail
host_target=$(rustc -vV | awk "/^host/ {print \$2}")
cargo build --release -p xtask --target "$host_target"
xtask="target/$host_target/release/xtask"
"$xtask" staging-reuse expected \
--registry packages/registry \
--expected-abi "$ABI" \
--exclude erlang-vfs,perl,perl-vfs,python-vfs,redis,texlive \
--output "$EXPECTED"
bash .github/scripts/validate-staging-release.sh \
--tag "$TARGET_TAG" \
--expected-ledger "$EXPECTED" \
--mode current \
--output-dir "$SNAPSHOT" \
--xtask "$xtask"
'; then
frozen_index="$snapshot/frozen-index.toml"
target_index_url="https://github.com/${GITHUB_REPOSITORY}/releases/download/${target_tag}/index.toml"
# WHY: index freezing consumes only the bytes already validated
# above. Remove network credentials so this pure transformation
# cannot accidentally grow an authenticated code path.
env -u GH_TOKEN -u GITHUB_TOKEN \
-u HOMEBREW_GITHUB_API_TOKEN \
-u HOMEBREW_GITHUB_PACKAGES_TOKEN \
bash scripts/dev-shell.sh env \
SOURCE_INDEX="$snapshot/source-index.toml" \
FROZEN_INDEX="$frozen_index" \
TARGET_INDEX_URL="$target_index_url" \
ABI="$abi" \
bash -c '
set -euo pipefail
host_target=$(rustc -vV | awk "/^host/ {print \$2}")
xtask="target/$host_target/release/xtask"
# WHY: the PR release tag remains mutable. Keep the validated
# index bytes local while rewriting relative archive names to
# their exact release URLs; archive hashes still fail closed.
"$xtask" index-candidate seed \
--canonical-index "$SOURCE_INDEX" \
--candidate-index "$FROZEN_INDEX" \
--canonical-index-url "$TARGET_INDEX_URL" \
--expected-abi "$ABI" \
--generated-at "1970-01-01T00:00:00Z" \
--generator "Homebrew main-shell frozen staging generation"
'
selected_url="file://${frozen_index}"
echo "Using complete verified package generation from $target_tag"
else
echo "Complete current $target_tag generation is unavailable; using canonical/source fallback"
fi
fi

echo "WASM_POSIX_BINARY_INDEX_URL=$selected_url" >> "$GITHUB_ENV"

- name: Resolve current direct browser bundling inputs and build the exact candidate kernel
run: |
set -euo pipefail
test -n "${WASM_POSIX_BINARY_INDEX_URL:-}"
# Vite resolves static @binaries imports across the wider demo app.
# Derive those registry roots from the imports and package manifests
# so adding an import cannot silently leave this browser proof stale.
Expand Down
26 changes: 22 additions & 4 deletions .github/workflows/reusable-homebrew-bottle-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,27 @@ jobs:
return 2
}

normalize_write_kandelo_ref() {
local ref="$1"

if [ "$ref" = "main" ]; then
printf 'refs/heads/main\n'
return 0
fi
if [[ "$ref" =~ ^[0-9a-f]{40}$ ]]; then
# WHY: a new ABI needs bottles before its bottle-backed shell can
# validate and merge. The protected tap caller must hardcode this
# reviewed SHA, and the Kandelo merge must preserve it as an
# ancestor of main; accepting a branch would make executable
# publication input mutable between review and checkout.
printf '%s\n' "$ref"
return 0
fi

echo "::error::write publication requires Kandelo main or an exact reviewed lowercase 40-character commit SHA" >&2
return 2
}

normalized_caller_repository="$(printf '%s' "$CALLER_REPOSITORY" | tr '[:upper:]' '[:lower:]')"
normalized_tap_repository="$(printf '%s' "$TAP_REPOSITORY" | tr '[:upper:]' '[:lower:]')"
normalized_tap_name="$(printf '%s' "$TAP_NAME" | tr '[:upper:]' '[:lower:]')"
Expand Down Expand Up @@ -134,13 +155,10 @@ jobs:
"$CALLER_REPOSITORY/.github/workflows/maintain-bottles.yml@refs/heads/main") ;;
*) echo "::error::publication requires a reviewed tap write workflow"; exit 2 ;;
esac
[ "$KANDELO_REF" = "main" ] || {
echo "::error::write publication requires Kandelo main"; exit 2;
}
[ "$TAP_REF" = "main" ] || {
echo "::error::write publication requires tap main"; exit 2;
}
validated_kandelo_ref="refs/heads/main"
validated_kandelo_ref="$(normalize_write_kandelo_ref "$KANDELO_REF")"
validated_tap_ref="refs/heads/main"
fi
{
Expand Down
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading