Skip to content

Derive one release-platform allowlist and keep Intel refused - #399

Draft
SashaMIT wants to merge 10 commits into
cursor/intel-install-gate-1297from
cursor/intel-signer-admit-1297
Draft

SashaMIT wants to merge 10 commits into
cursor/intel-install-gate-1297from
cursor/intel-signer-admit-1297

Conversation

@SashaMIT

@SashaMIT SashaMIT commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Stack: #395 ← #397 ← #398 (cursor/intel-install-gate-1297, this PR's base) ← #399 (this).

Head: 39f53389. Draft. Do not merge.

prepare() and the release artifact prefix use one platform set, RELEASE_PLATFORMS, captured from COMPONENT_KEYS at import (scripts/release-signer.py:456). That set is x86_64-linux, aarch64-linux, and aarch64-darwin. x86_64-darwin stays outside it. prepare() checks it before verify_release_provenance (:1074-1077) and again on the parsed release (:1097).

A test adds x86_64-darwin to COMPONENT_KEYS after import. prepare() still raises release platforms refused before it fetches artifacts. The prefix release-x86_64-darwin is refused.

This pull request does not widen the production signer. A signed Intel download waits for a producer, a darwin-amd64 payload set, and a Home journey in one later change.

What this PR carries against its base: only b51bda59 (scripts/release-signer.py, scripts/release-signer-test.py, scripts/package-release-binaries-test.py; 3 files). Everything else comes from merges, never a rebase:

Tests

On 42b91fd8:

$ env -i PATH=$PATH HOME=$HOME python3 -I -S scripts/release-signer-test.py
Ran 88 tests in 2.479s
OK
$ env -i PATH=$PATH HOME=$HOME python3 scripts/release-platform-input-test.py
Ran 164 tests in 96.823s
OK
$ python3 scripts/package-release-binaries-test.py
Ran 9 tests in 5.787s
OK
$ python3 scripts/publish-platform-artifacts-test.py
Ran 18 tests in 45.579s
OK
$ python3 scripts/install-bootstrap-test.py
Ran 95 tests in 75.667s
OK (skipped=4)
$ python3 scripts/gateway-healthz-smoke-test.py
Ran 24 tests in 42.246s
OK (skipped=3)

On c647ecf7 (the merge above):

$ env -i PATH=/usr/local/bin:/usr/bin:/bin HOME=$HOME python3 -I -S scripts/release-signer-test.py
Ran 88 tests in 2.799s
OK
$ python3 scripts/install-bootstrap-test.py
Ran 98 tests in 70.132s
OK (skipped=4)
$ python3 scripts/package-release-binaries-test.py
OK

On f4cf806a (the merge of #398 at 32f4abfd): env -i PATH=/usr/local/bin:/usr/bin:/bin python3 -I -S scripts/release-signer-test.py OK; python3 scripts/install-bootstrap-test.py OK (skipped=4).

On 39f53389 (the merge of #398 at da63c235): install-bootstrap-test.py Ran 98 tests ... OK (skipped=4) with the host's GNU mktemp, and the same with an Apple-like mktemp stub first on PATH (see #398); env -i PATH=/usr/local/bin:/usr/bin:/bin HOME=$HOME python3 -I -S release-signer-test.py 88 OK and release-platform-input-test.py 164 OK; ci-release-policy-test.py 103 OK; package-release-binaries-test.py 9 OK; gateway-healthz-smoke-test.py 26 OK (3 skipped); git diff --check clean.

Nothing is skipped in the signer test now: gh is in /usr/local/bin on this host, and the one skip on bb874fe8 was a run whose PATH left it out. git diff --check clean. The signer test runs with -I -S in a clean environment, as release-platform-input-test.py runs it; release-signer.py refuses the TLS proxy variables this test host sets. The 3 skipped smoke cases are IPv6 (no IPv6 loopback on the test host).

Negative checks from 095084ff (this PR's own change is unchanged since; re-run not repeated on later merges):

  • Both release platforms refused checks turned into assert: test_optimized_cli_refuses_x86_64_darwin_and_signs_nothing fails with 'ValueError: package artifact prefix refused' != 'ValueError: release platforms refused'. The later prefix gate still stops the input, so nothing is signed.
  • x86_64-darwin added to COMPONENT_KEYS: test_intel_package_key_prints_and_packaging_refuses_the_tarball fails with 'x86_64-darwin' unexpectedly found in frozenset(...).

CI

Runs 39018384842 and 39019375337 were cancelled when the next merge was pushed; run 39022807547 (e06de657) is superseded by the push of 42b91fd8. No job failed in them. Run 39033222479 (42b91fd8) was cancelled. Run 39038272177 (bb874fe8) was still in progress when c647ecf7 was pushed. The run for 39f53389 is the one to read.

Principles check

  • P10. One set feeds prepare() and the artifact prefix.
  • P11. An unknown platform is refused before artifact fetch.
  • P12. The signer has one allowlist.
  • P15. No new platform is admitted.

Intel stays C. No grade here is a merge approval. Opening this allowlist is a release decision for the team, and this draft does not make that decision.

Team issues to open

  1. Signed Intel artifact and journey. Title: Signed x86_64-darwin artifact, darwin-amd64 payloads, and Home journey. Admit x86_64-darwin only in the pull request that also adds the producer, the payload set, and the journey.
  2. Adversarial review. Title: Adversarial review for the release signer allowlist. An independent review on the exact SHA, before any later admission.
  3. Maintainer DID override in install.sh is asked on Stop Intel Mac before release lookup and pin the verified head CID #398; it reaches this PR through the merge. The team decided it in Follow-ups from Sasha's 0.8.0 pre-release review (#375) #434; Stamped installer: no environment or flag override of the maintainer DID #435 implements it.

@cursor
cursor Bot force-pushed the cursor/intel-install-gate-1297 branch from 02c09d0 to 3e94f2f Compare October 16, 2026 11:57
@cursor
cursor Bot force-pushed the cursor/intel-signer-admit-1297 branch from 11a7d02 to 9713956 Compare October 16, 2026 11:59
@cursor cursor Bot changed the title Admit x86_64-darwin on the release signer allowlist Derive one release-platform allowlist and keep Intel refused Oct 16, 2026
@cursor
cursor Bot force-pushed the cursor/intel-install-gate-1297 branch from 3e94f2f to 58a76ac Compare October 16, 2026 12:20
@cursor
cursor Bot force-pushed the cursor/intel-signer-admit-1297 branch from 9713956 to 9cce590 Compare October 16, 2026 12:20
prepare() and the artifact prefix now use the platform set captured from
COMPONENT_KEYS at import. x86_64-darwin stays outside that set. A later
mutation of COMPONENT_KEYS does not admit a platform, and prepare()
refuses it with "release platforms refused" before it fetches artifacts.

Co-authored-by: Sash <SashaMIT@users.noreply.github.com>
release-signer.py keeps this branch's RELEASE_PLATFORMS and early check and drops the base's second allowlist; package-release-binaries-test.py keeps the base's test and asserts the darwin-amd64 release id is outside RELEASE_PLATFORMS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W6Qn9RX7LDqrwiAfNC2F2K
zip 9 for RUSTSEC-2026-0367/0368/0369 so cargo-audit passes. The base
already merges fix/zip-9-rustsec; merging the base keeps this PR's diff
against it unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W6Qn9RX7LDqrwiAfNC2F2K
Brings the plain Intel Mac stop message from #398.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W6Qn9RX7LDqrwiAfNC2F2K
Brings in the ported held-lock journal test fix (develop 5051505) so test-capsules stops flaking.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W6Qn9RX7LDqrwiAfNC2F2K
Brings in #398's fixes: the plain Intel Mac stop, Rosetta as Apple
silicon, and the installer using only the bytes it checked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W6Qn9RX7LDqrwiAfNC2F2K

Copy link
Copy Markdown
Contributor Author

42b91fd8 merges #398 at 51404a76 (no conflict): plain Intel stop, Rosetta as Apple silicon, installer uses only checked bytes. This PR's own diff is unchanged.
Re-run on the merge: release-signer-test.py 88 OK (-I -S), release-platform-input-test.py 164 OK, package-release-binaries-test.py 9 OK, install-bootstrap-test.py 95 OK.


Generated by Claude Code

Brings in #394's flock ownership proof (3672007) and #395's macOS smoke test fixes, through #397 and #398.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W6Qn9RX7LDqrwiAfNC2F2K
@SashaMIT

Copy link
Copy Markdown
Contributor Author

Round 3 review: PASS (B). One signer allowlist works. Inherits the #398 decision.

Brings in #398's round-4 commits: the swapped-Runtime test swaps the real
download on macOS too (f8defe8), and the staged Runtime runs from one
held file, not by path (112e168).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W6Qn9RX7LDqrwiAfNC2F2K
Brings in #394's one-step flock ownership proof, the subordinate lane on the same proof, and a held lock with an unreadable record counting as held (4bb19dc), through #398.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W6Qn9RX7LDqrwiAfNC2F2K
@andersalm andersalm mentioned this pull request Oct 17, 2026
9 tasks
@SashaMIT

Copy link
Copy Markdown
Contributor Author

Round 4 at f4cf806: PASS (A). 88/88; genuine merge.

Brings in #398's portable swapped-Runtime test (da63c23: the Linux case
mocks a GNU-like mktemp instead of using the host's), and, through #397
and #395, #394's statement that the host lock proves possession, not
that the holder is the gateway (13cdcad).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W6Qn9RX7LDqrwiAfNC2F2K
@SashaMIT

Copy link
Copy Markdown
Contributor Author

Round 5 at 39f5338: PASS (A). Genuine merge, own diff unchanged; signer suite 88/88.

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.

3 participants