Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
185 commits
Select commit Hold shift + click to select a range
7620a72
fix(release): qualify default SDK and extension compositions
oli-release[bot] Oct 10, 2026
a43b107
test(react-native): keep iOS qualification regression portable
oli-release[bot] Oct 10, 2026
3e8cff5
build: establish native Bazel construction and qualification
oli-release[bot] Oct 11, 2026
93bf3a2
build: align Bazel migration with merged release fixes
oli-release[bot] Oct 11, 2026
3ab52ee
refactor(build): qualify native package and platform inputs
oli-release[bot] Oct 11, 2026
bcda2e6
fix(build): preserve declared inputs and installed package provenance
oli-release[bot] Oct 11, 2026
4aabb6a
fix(build): qualify WASIX carriers and preserve release evidence boun…
oli-release[bot] Oct 11, 2026
c931488
fix(build): correct Windows debug and Android release contracts
oli-release[bot] Oct 11, 2026
6a19366
refactor(build): qualify native construction and host handoffs
oli-release[bot] Oct 11, 2026
a221430
refactor(build): construct final carriers and qualify installed tools
oli-release[bot] Oct 11, 2026
93c8079
refactor(build): bind native shipping and validate complete product f…
oli-release[bot] Oct 11, 2026
7528e6c
fix(ci): isolate native and Moon conformance fixtures
oli-release[bot] Oct 11, 2026
0a3dfd6
fix(packaging): normalize generated WASIX Cargo archive modes
oli-release[bot] Oct 11, 2026
f61d102
refactor(release): unify pre-version delivery comparisons
oli-release[bot] Oct 11, 2026
1a51811
perf(ci): reuse bounded Bazel disk cache for WASIX builds
oli-release[bot] Oct 11, 2026
8833a12
refactor(release): define reviewed native producer assurance
oli-release[bot] Oct 11, 2026
23add25
fix(wasix): detect linked unwinder and qualify native postmaster life…
oli-release[bot] Oct 11, 2026
3b7718a
refactor(extensions): qualify desktop construction and native final c…
oli-release[bot] Oct 11, 2026
f174405
fix(build): match Cargo private build-script identity
oli-release[bot] Oct 11, 2026
45d7da9
feat(packaging): construct and qualify native postmaster release archive
oli-release[bot] Oct 11, 2026
c7fa375
fix(ci): qualify native desktop and postmaster cohorts efficiently
oli-release[bot] Oct 11, 2026
302c90e
fix(test): exclude Cargo manifest template from package discovery
oli-release[bot] Oct 11, 2026
bfe07ab
feat(build): qualify native desktop carriers against published runtimes
oli-release[bot] Oct 11, 2026
ef43b75
feat(build): construct and transport declared final package envelopes
oli-release[bot] Oct 11, 2026
5d9d24f
fix(release): reject unreviewed producer roles in retained evidence
oli-release[bot] Oct 11, 2026
7846f95
fix(build): shorten Cargo repository paths for Windows compilation
oli-release[bot] Oct 11, 2026
4acb65d
feat(build): qualify declared package and source targets
oli-release[bot] Oct 11, 2026
c037dea
refactor(build): bind release selection to qualified package delivery
oli-release[bot] Oct 12, 2026
957db54
fix(build): qualify complete native package construction
oli-release[bot] Oct 12, 2026
54403de
fix(build): preserve module repository identities before CI fanout
oli-release[bot] Oct 12, 2026
ad0eddc
fix(build): qualify native dependencies and publication paths
oli-release[bot] Oct 12, 2026
03907a6
fix(build): complete native release qualification contracts
oli-release[bot] Oct 13, 2026
3cc0656
fix(build): scope evidence and validate compiler capabilities
oli-release[bot] Oct 13, 2026
fb76847
fix(build): qualify source packages against complete original carriers
oli-release[bot] Oct 13, 2026
c6c8450
fix(build): isolate source checks and match MSVC preprocessing
oli-release[bot] Oct 13, 2026
7715c88
perf(ci): qualify WASIX probes with the shipping cohort
oli-release[bot] Oct 13, 2026
7545598
fix(release): scope action capture to the qualified closure
oli-release[bot] Oct 13, 2026
b4d19a5
fix(release): retain Bazel query option literals
oli-release[bot] Oct 13, 2026
5922eae
fix(build): propagate Android minimum SDK and Windows stack policy
oli-release[bot] Oct 13, 2026
b583a88
fix(build): stream qualified graphs and isolate AOT module inputs
oli-release[bot] Oct 13, 2026
127d119
fix(build): reuse isolated compiler cache and await generators
oli-release[bot] Oct 13, 2026
aa6db9d
fix(ci): retain bounded WASIX cache snapshots
oli-release[bot] Oct 13, 2026
ba29d63
fix(ci): bound graph capture and preserve useful caches
oli-release[bot] Oct 14, 2026
1585bb5
fix(ci): use upstream source-change guard defaults
oli-release[bot] Oct 14, 2026
4fac15d
fix(ci): avoid waiting for daemon output pipes
oli-release[bot] Oct 14, 2026
c3cc784
fix(android): propagate minimum SDK through dex pipelines
oli-release[bot] Oct 14, 2026
067472f
fix(ci): collect oversized action caches before saving
oli-release[bot] Oct 14, 2026
57290a6
test(wasix): qualify extensions and split tools on native AOT hosts
oli-release[bot] Oct 14, 2026
1758b3c
perf(build): preserve shared probe tools in Bazel evidence
oli-release[bot] Oct 14, 2026
32ae2c2
fix(wasix): select typed addon library on Windows
oli-release[bot] Oct 14, 2026
78aad16
fix(ci): use sequential Bazel shipping graph output
oli-release[bot] Oct 14, 2026
0216a69
perf(release): reuse configured metadata output validation
oli-release[bot] Oct 14, 2026
3bd6de9
fix(android): preserve Expo module resolution in staged app
oli-release[bot] Oct 14, 2026
b6b1e51
ci: retain existing WASIX build and query profiles
oli-release[bot] Oct 14, 2026
399e3b2
fix(wasix): resolve imported smoke archives through runfiles
oli-release[bot] Oct 14, 2026
aa67001
ci: remove repeated installed consumer requests
oli-release[bot] Oct 14, 2026
a369359
test(swift): qualify default bundled runtime discovery
oli-release[bot] Oct 14, 2026
f57823a
fix(mobile): require observed background and resume qualification
oli-release[bot] Oct 14, 2026
7f73398
fix(wasix): derive Windows CRT staging receipt from SDK files
f0rr0 Oct 14, 2026
60fe549
ci: profile existing macOS construction capture
f0rr0 Oct 14, 2026
c4b50f5
fix(apple): preserve Bazel ownership of Xcode environment
f0rr0 Oct 14, 2026
1799d94
ci: let Bazel schedule WASIX with stock host resources
f0rr0 Oct 14, 2026
02b1b26
fix(android): finalize and admit staged runtime manifests
f0rr0 Oct 14, 2026
1ec4553
fix(swift): bind stock compiler plugin paths to declared SDK
f0rr0 Oct 14, 2026
4d83f7e
fix(ci): normalize native output containment on Windows
f0rr0 Oct 14, 2026
cce3d11
feat(ci): select checks from recorded Bazel inputs
f0rr0 Oct 14, 2026
d680658
perf(release): bound native file hashing buffers
f0rr0 Oct 14, 2026
ba3885a
fix(release): resume preparation after native qualification
f0rr0 Oct 14, 2026
e534def
fix(android): restore full SQL and ICU device coverage
f0rr0 Oct 14, 2026
019c72f
fix(ci): provision locked release controller dependencies
f0rr0 Oct 14, 2026
f653c0c
fix(ci): record actual Bazel configured request inputs
f0rr0 Oct 14, 2026
9823c65
fix(build): handle full Android symbol tables and Windows source paths
f0rr0 Oct 14, 2026
55b7ca8
fix(build): declare forced extension headers for compile flags
f0rr0 Oct 14, 2026
8b7c568
fix(packaging): admit exact pgcrypto construction notices
f0rr0 Oct 14, 2026
2f73d7b
fix(ci): qualify Apple inputs before desktop capture
f0rr0 Oct 14, 2026
ef36069
perf(release): validate captured qualification once
f0rr0 Oct 14, 2026
0bfbd14
fix(ci): retain terminal caches and report evidence capture phases
f0rr0 Oct 14, 2026
6294c1f
fix(build): configure GPP version through its upstream header
f0rr0 Oct 15, 2026
93d07d8
fix(build): keep ordinary extension headers discoverable
f0rr0 Oct 15, 2026
1283e1e
perf(release): normalize shared direct input IDs once
f0rr0 Oct 15, 2026
67a6770
fix(packaging): preserve canonical PostGIS dependency modules
f0rr0 Oct 15, 2026
212a79e
fix(quality): include authored bazel-prefixed sources
f0rr0 Oct 15, 2026
d9d98d0
fix(build): expose fatal compiler constant diagnostics
f0rr0 Oct 15, 2026
4f3710d
fix(build): avoid duplicate Windows SQL newline conversion
f0rr0 Oct 15, 2026
9fdc885
fix(build): retain declared Clang path for child processes
f0rr0 Oct 15, 2026
55f7a78
fix(test): read the declared query crate without recopying
f0rr0 Oct 15, 2026
297531d
fix(build): resolve SDK builtin includes from the workspace
f0rr0 Oct 15, 2026
8fc6e86
fix(ci): retain action analysis after failed configured requests
f0rr0 Oct 15, 2026
0b3939f
fix(ci): allow cold Linux qualification to finish capture
f0rr0 Oct 15, 2026
4937ca5
fix(apple): preserve weak Mach-O archive symbol bindings
f0rr0 Oct 15, 2026
0644e78
fix(build): enable native Windows file runfiles
f0rr0 Oct 15, 2026
6a0bf9a
test(postmaster): preserve concurrent writes and durable recovery
f0rr0 Oct 15, 2026
d59178a
fix(release): retain exact WASIX SDK supplier packages
f0rr0 Oct 15, 2026
4050508
fix(build): preserve installed SDK qualification contracts
f0rr0 Oct 15, 2026
a37c583
fix(build): pin extension acquisition to verified source archives
f0rr0 Oct 15, 2026
56a93d7
fix(build): preserve Apple compiler runtime lookup when linking
f0rr0 Oct 15, 2026
c91a5eb
fix(build): declare SQLite generator invocation contracts
f0rr0 Oct 15, 2026
74c33f3
fix(build): enforce Apple locality on action owners
f0rr0 Oct 15, 2026
0a22484
test(build): keep dependency conformance fixture pinned
f0rr0 Oct 15, 2026
78b120a
fix(build): honor native archive and Swift toolchain contracts
f0rr0 Oct 15, 2026
2de104a
fix(packaging): declare modes for generated Cargo data archives
f0rr0 Oct 15, 2026
33e0df1
fix(build): retain upstream C++17 default for Apple execution tools
f0rr0 Oct 15, 2026
5362666
fix(build): match Swift binary entrypoint conventions
f0rr0 Oct 15, 2026
461fc6e
ci: qualify Apple packages before separate ABI construction
f0rr0 Oct 15, 2026
e127827
fix(build): copy Swift seed inputs before adding notices
f0rr0 Oct 15, 2026
bb84166
fix(build): retain numeric libiconv visibility for foreign compilers
f0rr0 Oct 15, 2026
0d21994
fix(build): hash Bazel bytes independently of cache path spelling
f0rr0 Oct 15, 2026
ab981d2
fix(build): preserve textsearch version string on Windows
f0rr0 Oct 15, 2026
98590ee
fix(build): use declared Swift for native macOS tools
f0rr0 Oct 16, 2026
61210ba
fix(build): probe Windows socket types through SDK headers
f0rr0 Oct 16, 2026
47027be
fix(build): resolve declared Apple paths across working directories
f0rr0 Oct 16, 2026
50fcea8
fix(build): declare Apple archivers for Cargo and native actions
f0rr0 Oct 16, 2026
bb70fa0
fix(build): preserve relative Apple compiler dependency paths
f0rr0 Oct 16, 2026
b717767
fix(packaging): apply Windows runtime profiles consistently
f0rr0 Oct 16, 2026
41e7f8f
fix(bazel): use stock Windows extension shared-library exports
f0rr0 Oct 16, 2026
1dd5025
fix(postgis): preserve Windows C linkage and await scanner output
f0rr0 Oct 16, 2026
2291012
fix(build): propagate OpenSSL Windows system dependencies
f0rr0 Oct 16, 2026
caf1819
ci: allow two Apple build actions while serializing device tests
f0rr0 Oct 16, 2026
43764f9
test(build): respect Windows paths and Bun loader exit status
f0rr0 Oct 16, 2026
92c963f
fix(test): respect Windows paths and ICU data loading
f0rr0 Oct 16, 2026
61d6829
fix(ts): flush Windows files through writable handles
f0rr0 Oct 16, 2026
4882b81
fix(extensions): incorporate private PostGIS dependencies on Windows
f0rr0 Oct 16, 2026
65c0291
fix(extensions): declare libxml2 static mode for Windows consumers
f0rr0 Oct 16, 2026
67b5278
fix(ci): run Windows server SQL with restricted user privileges
f0rr0 Oct 16, 2026
53f13aa
test(sdk): qualify installed native server lifecycle
f0rr0 Oct 16, 2026
315e52a
test(sdk): preserve native Node modules and resolve declared runfiles
f0rr0 Oct 16, 2026
8be842d
perf(bazel): omit Swift module payload from C compile inputs
f0rr0 Oct 16, 2026
2ac4e62
fix(test): isolate Windows restricted launcher from embedded runtime
f0rr0 Oct 16, 2026
8b1bb48
fix(ci): capture configured query output through files
f0rr0 Oct 17, 2026
715c421
perf(ci): schedule exact Apple package slices by SDK
f0rr0 Oct 17, 2026
30f2664
fix(native): resolve builtin libraries within each configured wrapper
f0rr0 Oct 17, 2026
4c027e6
fix(build): retain desktop profile in iOS extension envelopes
f0rr0 Oct 17, 2026
b6d6067
fix(packaging): share typed Apple archive validation
f0rr0 Oct 17, 2026
7653539
fix(build): preserve desktop profiles in Apple packages
f0rr0 Oct 17, 2026
f8284cf
fix(build): declare ICU input for iOS seed carriers
f0rr0 Oct 17, 2026
f1a33ee
fix(build): declare Swift envelope modules and qualify once
f0rr0 Oct 18, 2026
31c83fe
fix(build): bind Swift test adapters to declared inputs
f0rr0 Oct 18, 2026
cfd3f3d
fix(build): qualify pinned Swift bundles with declared compiler behavior
f0rr0 Oct 18, 2026
da749f1
fix(release): retain producer identity across partial CI retries
f0rr0 Oct 18, 2026
d2b1a8c
fix(build): declare installed Swift consumer signing tools
f0rr0 Oct 18, 2026
0b5dc98
fix: isolate Foundation home in installed Swift tests
f0rr0 Oct 18, 2026
1d5b153
fix(ci): locate Swift test resources and retain Apple cache
f0rr0 Oct 19, 2026
c4904b1
fix(ci): authenticate retained executions and reduce capture overhead
f0rr0 Oct 19, 2026
c1771f1
fix(release): preserve Swift publication modes and reuse input graphs
f0rr0 Oct 19, 2026
5d952f2
fix(build): preserve main regression coverage in Bazel
f0rr0 Oct 19, 2026
28997a8
fix(build): centralize construction license expectations
f0rr0 Oct 19, 2026
a8efb5b
fix(build): qualify WASIX consumers from shared current outputs
f0rr0 Oct 19, 2026
d3fbd32
fix(release): synchronize the shared Cargo workspace lock
f0rr0 Oct 19, 2026
8f29d1d
fix(release): preserve paginated GitHub response contracts
f0rr0 Oct 19, 2026
9210a67
fix(ci): declare artifact runtime and skip empty caches
f0rr0 Oct 19, 2026
15ef6c5
fix(ci): allow empty companion output directories
f0rr0 Oct 19, 2026
575012e
fix(release): identify Cargo inputs by archive manifests
f0rr0 Oct 20, 2026
f4f77d9
fix(ci): collect disk cache after final qualification
f0rr0 Oct 20, 2026
8a56cff
fix(release): select declared assets from shared outputs
f0rr0 Oct 20, 2026
88ede3e
fix(build): construct Apple prerequisites in SDK phases
f0rr0 Oct 20, 2026
c737fe4
fix(release): bind whole imported supplier archives
f0rr0 Oct 20, 2026
b13b13d
fix(build): bound Windows Rust dependency search paths
f0rr0 Oct 20, 2026
d2a44ec
fix(test): keep Swift callbacks off cooperative workers
f0rr0 Oct 20, 2026
0945060
fix(test): compare canonical installed Swift runtime paths
f0rr0 Oct 20, 2026
58a349d
fix(ci): finish independent macOS qualification requests
f0rr0 Oct 20, 2026
582ac49
perf(release): sort shared artifact paths once
f0rr0 Oct 20, 2026
0d9813a
fix(ci): respect scoped native imports during package loading
f0rr0 Oct 20, 2026
da1eb2e
fix(ios): select the configured Icon Composer assets
f0rr0 Oct 20, 2026
b7c4d73
perf(release): validate shared evidence once per artifact
f0rr0 Oct 20, 2026
62fc0b6
fix(release): preserve declared Android target identities
f0rr0 Oct 20, 2026
9a683bd
fix(packaging): complete merged extension release metadata
f0rr0 Oct 20, 2026
a87e4ab
fix(ios): preserve imported Swift package identity
f0rr0 Oct 21, 2026
239d926
fix(ci): correct extension family carrier contracts
f0rr0 Oct 21, 2026
188755e
fix(release): preserve all public archive producer identities
f0rr0 Oct 21, 2026
b7ad06e
fix(ci): bind checksum inputs and preserve iOS diagnostics
f0rr0 Oct 21, 2026
011d3a8
fix(ci): consume final iOS inputs and cancel owned Bazel work
f0rr0 Oct 21, 2026
fd7cd2b
fix(build): share Android final carrier inputs with producers
f0rr0 Oct 21, 2026
5efd58a
fix(build): exclude credentials from Bazel invocations
f0rr0 Oct 21, 2026
0e44f40
fix(test): check Bazel shell state on Bash 3.2
f0rr0 Oct 21, 2026
76cd799
docs: remove stale SDK version recommendations
f0rr0 Oct 21, 2026
0757274
fix(ci): await exact producer metadata convergence
f0rr0 Oct 21, 2026
423f698
fix(build): declare selected iOS resource license inputs
f0rr0 Oct 21, 2026
94cd488
fix(release): await completed Prepare metadata visibility
f0rr0 Oct 21, 2026
af81d11
fix(build): honor C++ profiles for Objective-C++
f0rr0 Oct 21, 2026
40e256c
perf(release): reuse shared action inputs and digest prefixes
f0rr0 Oct 21, 2026
7c3286a
fix(ci): stage completed archives before Cargo qualification
f0rr0 Oct 21, 2026
bbe8b93
fix(build): preserve React Swift interface import context
f0rr0 Oct 22, 2026
d500d8d
fix(build): preserve Expo Apple modules and installed lifecycle
f0rr0 Oct 22, 2026
aeb46ce
fix(release): retain and stage complete qualified families
f0rr0 Oct 22, 2026
9848893
fix(release): isolate final extension document envelopes
f0rr0 Oct 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .bazelignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.git
target
.moon
.proto
.venv
33 changes: 33 additions & 0 deletions .bazelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Keep local executions independent from hosted cache or execution configuration.
startup --max_idle_secs=300
startup --shutdown_on_low_sys_mem
startup --host_jvm_args=-Xmx2048m
common --repo_env=DO_NOT_TRACK=1
common --lockfile_mode=error
build --incompatible_strict_action_env
build --verbose_failures
# Compiler and quality tools use the runtime acquired by pinned rules_java.
build --java_runtime_version=remotejdk_17
build --tool_java_runtime_version=remotejdk_17
test --test_output=errors

# Cross-platform runtime tests need manifest or directory runfiles.
# Windows native file symlinks require Developer Mode or administrator privileges.
startup --windows_enable_symlinks
build --enable_runfiles

# Native C++ links need the allocator ABI generated by the selected Rust compiler.
build --@rules_rust//rust/settings:experimental_use_allocator_libraries_with_mangled_symbols=true

# Native Clippy checks use the same configuration as conventional Cargo checks.
build --@rules_rust//rust/settings:clippy.toml=//:clippy.toml
build --@rules_rust//rust/settings:clippy_flags=-Dwarnings

# Darwin sandbox reuse otherwise traverses the complete SDK forest per action.
build:macos-sandbox --experimental_inmemory_sandbox_stashes

# The LLVM serializer runs on Linux; serialized product targets remain separate.
build:wasix-aot --extra_execution_platforms=//build_defs/wasix:llvm_serializer_linux_x86_64

# Optional CI disk cache: callers supply an absolute --disk_cache path.
build:ci-cache --experimental_remote_merkle_tree_cache
1 change: 1 addition & 0 deletions .bazelversion
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
8.8.1
339 changes: 150 additions & 189 deletions .codex/skills/qualify-oliphaunt-change/SKILL.md

Large diffs are not rendered by default.

60 changes: 31 additions & 29 deletions .codex/skills/release-oliphaunt/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,17 @@ The `publish` operation prepares the complete candidate once, conditionally
runs frozen installed consumers, requires Publication ready, bootstraps missing names, and publishes it. Dependent jobs install the same
immutable candidate and verify its complete contents against the lock.

Qualification may be exhaustive or selected through CI's
`release_products_json` input with every platform selector at `all`. The
existing candidate record binds product scope, required tasks and exact SHA;
publication rejects a product outside that scope. Generated release PRs and
their main merge derive scope automatically from the actual manifest transition;
only main push or eligible main dispatch can produce publishable evidence.
Publication first reuses covering completed CI or awaits an active main/requested
run. If none exists, a separate dispatch-only job requests CI for the selected
products, provided main still equals the exact candidate SHA. Failed causal
runs stop with their URL; resume by rerunning that run. An ambiguous dispatch
is never retried automatically. Pre-publication recovery may reuse an explicit
exact-source CI run after allowlisted release-control fixes; source and binary
identities remain unchanged.
Native qualification records configured shipping roots, required tests and
original final archives for the exact source SHA/tree and producing Actions
run. Preparation requires complete product/platform coverage before choosing
release scope. Generated release PR qualification imports its source-bound
Prepare inputs; an ordinary source run imports one immutable public-input pool.
Only exact-main qualification can admit publication. PR evidence remains
construction evidence. Publication reuses authenticated original files and
rejects missing, failed or wrong-source coverage. Pre-publication recovery may
reuse an explicit exact-source run after allowlisted release-control fixes;
source and binary identities remain unchanged. During migration, legacy CI is
retained for parity until the complete native run and seed adoption anchor pass.

Local checks use `bash tools/release/release-check.sh` for source
metadata/release-tool tests and `bash tools/release/release-check-registries.sh
Expand Down Expand Up @@ -72,11 +70,12 @@ and do not treat target/ecosystem carriers as additional products.
solo-release blocker. The bootstrap job still checks required credentials
against the approved lock immediately before it publishes.
7. Generate trusted-publisher work from the approved publication lock with `bash tools/release/trusted-publisher-config.sh`. Its default mode is offline/read-only. Use authenticated `--audit` before considering `--apply`; mutation additionally requires the exact printed lock digest. Run npm audit and apply directly in a terminal because each classification pass starts with a discarded read-only TTY authentication warm-up before the bounded captured reads, and supply a fresh `--output` path for the atomically created mode-`0600` JSON evidence. Configure the direct workflow `release.yml` and `release-publish` environment. Keep release credentials only in their protected environments; do not add repository-level copies or a reusable-workflow secret bridge.
8. On a generated release PR, treat Release Please as the candidate authority
and `sync-release-pr.mts` as the deterministic selected-candidate metadata
closer. The pinned Release Please library selects shared-contrib candidates
through the declared release-ownership graph; sync chooses no new versions
or changelogs. Ordinary task dependencies are not automatic release bumps.
8. On a generated release PR, native preparation supplies delivery and necessary
compatibility-adoption selection. Pinned Release Please owns version and
changelog calculation; `sync-release-pr.mts` closes the selected candidate's
metadata and chooses no new versions or changelogs. Contrib follows its
actual native/WASIX shipping owners. Ordinary build or test dependencies are
not automatic release bumps.
In an isolated clean checkout, `bash tools/release/prepare-release-pr.sh OUTPUT_DIR`
generates locally. If `OUTPUT_DIR/required` is `true`,
`bash tools/release/close-release-candidate.sh OUTPUT_DIR` commits locally,
Expand Down Expand Up @@ -125,8 +124,10 @@ another repository mutation.
- Prepare: synchronize release-owned files, run release checks, create the generated release PR, and stop for review.
- Bootstrap: use the dedicated bootstrap environment only for identities that cannot use trusted publishing until their first package exists, including generated part identities introduced by a future lock. For npm, require a short-lived granular token with explicit `@oliphaunt` scope selection, Packages and scopes `Read and write`, and 2FA bypass, owned by a 2FA-enabled actor with scope write access; an ordinary token can authenticate yet fail the noninteractive publish with `EOTP`. The `publish` operation prepares `oliphaunt-publication-lock` and `oliphaunt-publication-candidate` first, then passes immutable artifact IDs to this conditional job. Publish only those frozen Cargo/npm bytes without rebuilding. Inventory the exact lock first and freeze only wholly absent names into the carrier-level bootstrap ledger; leave existing names awaiting the locked version for normal trusted publication. Provision only the registry token required by that scope. On rerun, a scoped name that exists without the exact version is a conflict. Model crates.io's documented token bucket; never accept an unverifiable numeric capacity assertion. Execute one sequential Cargo lane and one sequential npm lane, overlap only independent carriers, and preserve dependencies within the absent-name scope. A scoped npm package may leave an optional dependency on an existing name to the normal trusted-publication graph; other unavailable locked dependencies fail closed. If one hosted job cannot finish, drain in-flight uploads, reconcile receipts, upload the canonical hash-chained checkpoint, and fail as incomplete with the exact manual rerun command and not-before time. The maintainer reruns the failed job of that original workflow run; the rerun restores only the same release/lock/candidate identity and skips byte-matching public versions. A valid `429 Retry-After` may defer; ambiguous uploads, timeouts, integrity mismatches, malformed responses, and checkpoint failures remain hard failures. After every scoped identity has a receipt, use that exact lock with `tools/release/trusted-publisher-config.sh`: its default plan has no network access, `--audit` is read-only, and mutation requires both `--apply` and the exact `--confirm-lock-digest`. Run npm audit/apply in a real TTY and retain each fresh `--output` JSON report, never the discarded authentication warm-up display. Require workflow `release.yml`, environment `release-publish`, and npm publish-only permission; reject extra or mismatched configurations. Publication continues automatically. Configure trusted publishers and revoke bootstrap credentials before the next release.
- Publish: prepare the frozen candidate, bootstrap absent Cargo/npm names if
needed, then publish in the same run. Require a successful exact-SHA `Qualified` gate, complete artifact
set, frozen publication lock, and exact Release Please PR markability proof.
needed, then publish in the same run. Require the exact-source
`Native Bazel qualification` workflow with its successful `Required` gate,
complete artifacts, frozen publication lock and exact Release Please PR
markability proof.
Pin the immutable transport, stage GitHub drafts/assets/attestations, attempt
the complete dependency-ordered registry plan once, verify public consumers,
and promote last in one protected job. Do not predict registry capacity or
Expand Down Expand Up @@ -168,15 +169,16 @@ bash tools/release/release-check.sh
bash src/extensions/tools/check-extension-model.sh --check
```

Release Please selects direct candidates from configured product paths. The
ownership plugin also supplies commits affecting declared shared shipped sources,
bounded by each product's published history. Review that selection against the
actual changed behavior; correct missing ownership in the graph rather than
copying source or adding repository-meta fingerprints to force a candidate.
Native preparation compares configured production observations and delivered
payloads with each product's authenticated completed publication. It selects
changed owners and necessary compatibility adoption, then passes bounded commit
intent to pinned Release Please for version calculation. Unknown history or
incomplete carrier coverage blocks preparation. Review the decision against
actual delivery changes; fix missing production inputs instead of copying source
or adding repository fingerprints to force a candidate.

For a normalized generated release PR, ordinary Moon task dependencies affect
qualification; declared release ownership controls shared-source candidate
selection. Native, WASIX, SDKs, bindings, resources, tools and external extensions are
For a normalized generated release PR, Bazel dependencies determine construction
and verification. A dependency edge alone does not select another release. Native, WASIX, SDKs, bindings, resources, tools and external extensions are
independently versioned. Sync preserves authored requirements and projects the actual input versions for
selected compiled payloads. Release Please ecosystem updates remain authoritative;
unselected consumers retain their older published pins. A selected
Expand Down Expand Up @@ -220,7 +222,7 @@ External extension host references declare `public_support = true`; private
references declare `false`. Public host removal requires breaking intent before
version selection and verification against the previous immutable product tag.

Source `Qualified` and capsule preparation precede final installed consumer
Source qualification and capsule preparation precede final installed consumer
checks. Require `Frozen consumers` and `Publication ready` before bootstrap or
normal mutation. The immutable consumer proof binds the lock, expected cases,
test configuration, producing run/attempt and resolver/log evidence. Recovery
Expand Down
11 changes: 6 additions & 5 deletions .codex/skills/release-oliphaunt/references/invariants.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@
record that publishing identity separately.
- Extension evidence runs are immutable observations. Claim regeneration never changes them, and current WASIX support is qualified only by the full lifecycle collector running against same-workflow exact-SHA artifacts and recording that commit/tree/run identity.
- The publication lock is exhaustive: reject undeclared and missing packages/assets as well as hash, size, dependency, target, or version drift.
- Release Please selects direct candidates from configured product paths and
receives shared shipped-source commits from the declared release-ownership
graph, bounded by each product's published history. Ordinary task dependency
edges alone do not bump consumers. Correct missing ownership instead of copying
source or creating repository-meta fingerprints to force selection.
- Native preparation selects delivery changes against each product's authenticated
completed publication, then closes necessary compatibility adoption. Release
Please alone calculates the selected owners' versions from bounded commit
intent. A build or test dependency alone does not require a release. Source,
tool and recipe ownership comes from configured production actions; do not
copy source or add repository fingerprints to force selection.
- The preparation job generates the lock after artifact assembly and freezes
every locked file in one candidate. Installed consumer cases must prove that
candidate and Publication ready must succeed before any bootstrap or normal
Expand Down
150 changes: 150 additions & 0 deletions .github/actions/bazel-cache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
name: Transport bounded Bazel action cache
description: Restore or save the standard Bazel action cache for one qualification cohort.

inputs:
phase:
description: restore before qualification or save after its final Bazel invocation.
required: true
cohort:
description: Stable qualification job identity; operating system and architecture remain separate.
required: true
output-base:
description: Exact output base used by this cohort, if explicitly selected.
default: ""
jvm-args:
description: Exact host JVM argument used by this cohort, if explicitly selected.
default: ""
server-log:
description: Exact server JVM output path used by this cohort, if explicitly selected.
default: ""
disk-cache-hit:
description: Primary action cache hit returned by the restore phase.
default: "false"

outputs:
disk-cache-hit:
description: Whether the immutable action cache key already exists.
value: ${{ steps.disk-restore.outputs.cache-hit }}

runs:
using: composite
steps:
- name: Select canonical cache identity
id: identity
if: ${{ inputs.phase == 'save' || !cancelled() }}
shell: bash
env:
PHASE: ${{ inputs.phase }}
COHORT: ${{ inputs.cohort }}
run: |
set -euo pipefail
case "$PHASE" in restore|save) ;; *) exit 1 ;; esac
[[ "$COHORT" =~ ^[a-z0-9][a-z0-9-]*$ ]]
version="$(tr -d '\r' < .bazelversion)"
[[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]
source_commit="$(git rev-parse HEAD)"
[[ "$source_commit" =~ ^[0-9a-f]{40}$ ]]
gc_max_size=2G
cache_limit_kib=3145728
# These three observed cache populations reached 3.4 to 3.6 GiB before collection.
case "$RUNNER_OS/$RUNNER_ARCH/$COHORT" in
macOS/ARM64/portable|Linux/X64/linux|Linux/X64/portable) gc_max_size=4G; cache_limit_kib=5242880 ;;
esac
printf 'prefix=bazel-ci-v1-%s-%s-%s-%s\nsource=%s\n' \
"$RUNNER_OS" "$RUNNER_ARCH" "$COHORT" "$version" "$source_commit" >> "$GITHUB_OUTPUT"
printf 'gc_max_size=%s\ncache_limit_kib=%s\n' \
"$gc_max_size" "$cache_limit_kib" >> "$GITHUB_OUTPUT"

- name: Restore Bazel action cache
id: disk-restore
if: inputs.phase == 'restore'
continue-on-error: true
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9
with:
path: ~/.cache/oliphaunt/bazel-ci/disk
key: ${{ steps.identity.outputs.prefix }}-disk-${{ steps.identity.outputs.source }}
restore-keys: |
${{ steps.identity.outputs.prefix }}-disk-

- name: Configure standard hosted Bazel caches
if: inputs.phase == 'restore'
shell: bash
run: |
set -euo pipefail
cache_root="$HOME/.cache/oliphaunt/bazel-ci"
# Downloads remain a per-job content-addressed cache, not hosted archives.
mkdir -p "$cache_root/disk" "$cache_root/repositories"
if [[ "$RUNNER_OS" == Windows ]]; then
cache_root="$(cygpath -m "$cache_root")"
fi
# Hosted user configuration stays outside source and cache transport.
printf '\nbuild --config=ci-cache\nbuild --disk_cache="%s/disk"\ncommon --repository_cache="%s/repositories"\n' \
"$cache_root" "$cache_root" >> "$HOME/.bazelrc"

- name: Freeze, collect and bound cache transport
id: ready
if: ${{ always() && inputs.phase == 'save' && steps.identity.outcome == 'success' && inputs.disk-cache-hit != 'true' }}
continue-on-error: true
shell: bash
env:
OUTPUT_BASE: ${{ inputs.output-base }}
JVM_ARGS: ${{ inputs.jvm-args }}
SERVER_LOG: ${{ inputs.server-log }}
GC_MAX_SIZE: ${{ steps.identity.outputs.gc_max_size }}
CACHE_LIMIT_KIB: ${{ steps.identity.outputs.cache_limit_kib }}
run: |
set -euo pipefail
startup=(bash tools/dev/bazel.sh)
[[ -z "$OUTPUT_BASE" ]] || startup+=("--output_base=$OUTPUT_BASE")
[[ -z "$JVM_ARGS" ]] || startup+=("--host_jvm_args=$JVM_ARGS")
[[ -z "$SERVER_LOG" ]] || startup+=("--server_jvm_out=$SERVER_LOG")
freeze_writer() {
if ! "${startup[@]}" shutdown; then
printf 'Bazel cache writer shutdown: failure\n' >&2
return 1
fi
printf 'Bazel cache writer shutdown: success\n'
}
# Later commands can need lazy outputs from this cache. Collect only
# after final qualification; snapshots within the budget need no GC.
freeze_writer || exit 0
cache_limit_kib="$CACHE_LIMIT_KIB"
cache_root="$HOME/.cache/oliphaunt/bazel-ci/disk"
if [[ -d "$cache_root" ]]; then
printf 'Bazel cache disk: present=true\n'
cache_kib="$(du -sk "$cache_root" | cut -f1)"
if [[ "$cache_kib" =~ ^[0-9]+$ ]] && (( cache_kib > cache_limit_kib )); then
gc_target=//tools/ci:bazel_disk_cache_gc
"${startup[@]}" build --jobs=2 "$gc_target"
gc_tool="$("${startup[@]}" cquery "config($gc_target, target)" --output=starlark \
'--starlark:expr=providers(target)["DefaultInfo"].files_to_run.executable.path')"
freeze_writer || exit 0
gc_root="$cache_root"
if [[ "$RUNNER_OS" == Windows ]]; then
gc_root="$(cygpath -m "$gc_root")"
fi
# The stock collector returns after collection completes. Its
# logical-byte target does not replace the allocated archive bound.
JAVABIN= "$gc_tool" "--disk_cache=$gc_root" "--max_size=$GC_MAX_SIZE"
cache_kib="$(du -sk "$cache_root" | cut -f1)"
fi
printf 'Bazel cache disk: allocated_kib=%s limit_kib=%s\n' \
"$cache_kib" "$cache_limit_kib"
# An unused directory must not replace a useful fallback snapshot.
if [[ "$cache_kib" =~ ^[0-9]+$ ]] && (( cache_kib <= cache_limit_kib )) &&
[[ -n "$(find "$cache_root" -type f -print -quit)" ]]; then
printf 'disk=true\n' >> "$GITHUB_OUTPUT"
fi
else
printf 'Bazel cache disk: present=false\n'
fi

# GitHub isolates pull_request saves under refs/pull/<number>/merge.
# This optional cache contains action results, never release authority.
- name: Save bounded Bazel action cache
if: ${{ always() && inputs.phase == 'save' && steps.ready.outputs.disk == 'true' }}
continue-on-error: true
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9
with:
path: ~/.cache/oliphaunt/bazel-ci/disk
key: ${{ steps.identity.outputs.prefix }}-disk-${{ steps.identity.outputs.source }}
Loading
Loading