Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
6c248e8
test(parity): let harness classify stalled gap fixtures (#10720)
Sep 22, 2026
ee2956b
docs: add PR 10985 changelog fragment
Sep 22, 2026
c29bd7d
fix(buffer): align both write entry points on encoding tags (#10645)
Sep 22, 2026
471b73f
docs: add PR 10987 changelog fragment
Sep 22, 2026
f26f4cc
fix(string): index WTF-8 positions without unchecked UTF-8 (#10725)
Sep 22, 2026
66abfeb
docs: add PR 10989 changelog fragment
Sep 22, 2026
a9bf8dc
fix(size-report): count linker-folded symbol addresses once
Sep 22, 2026
f6eb6b4
docs: note folded symbol size report fix
Sep 22, 2026
6bbb34e
gate: the asserted-global rule could not see `static mut`
Sep 22, 2026
0f7c0e6
fix(cli): diagnose missing extension archives before linking
Sep 22, 2026
fbc12b5
docs: add changelog entry for extension archive diagnostics
Sep 22, 2026
26835fa
fix: preserve names of interpreted functions and classes
Sep 22, 2026
7f02a61
docs: add changelog for dynamic function names
Sep 22, 2026
648628d
fix: suppress deferred CJS cycle property warnings
Sep 22, 2026
6e61a08
docs: note CJS circular warning fix
Sep 22, 2026
46f97d8
docs: describe circular warning scan scope precisely
Sep 22, 2026
01e35a5
ci: type-check Windows runtime on every PR
Sep 22, 2026
ad42865
ci: install cargo-xwin from verified release asset
Sep 22, 2026
d4c96df
ci: allow cold Windows type-check to finish
Sep 22, 2026
9bd6f66
test(gc): run remembered coverage sabotage in release
Sep 22, 2026
003724c
docs: note release GC sabotage coverage
Sep 22, 2026
9c54174
fix(crypto): preserve bytes in latin1 digests
Sep 22, 2026
eaf5147
docs: add changelog for #11029
Sep 22, 2026
f8db436
fix(crypto): honor Sign and Verify encodings
Sep 22, 2026
b37cef5
docs: note crypto signature encoding fix
Sep 22, 2026
2ab6db8
ci: run lock downgrade gate on pull requests
Sep 22, 2026
ccff0d8
docs: note pull request lock downgrade gate
Sep 22, 2026
ea7faa2
fix(fs): defer read stream open errors
Sep 22, 2026
25e0268
chore: add changelog for #11033
Sep 22, 2026
4d235ed
fix(stream): flush piped transforms before end
Sep 22, 2026
8c0e409
docs(changelog): note piped transform flush fix
Sep 22, 2026
e186556
chore: release merge train 257 as v0.5.1640
Sep 22, 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
79 changes: 68 additions & 11 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -160,19 +160,20 @@ jobs:


# ---------------------------------------------------------------------------
# Lint: cargo fmt --check + every no-compile audit script. Runs in EVERY
# tier, including docs-only PRs (it is the one job the plan never turns
# off). ~4 min. Add the ci_plan self-test here too so a policy edit that
# Lint: cargo fmt --check, no-compile audits, and a Windows type-check.
# Runs in EVERY tier, including docs-only PRs (it is the one job the plan
# never turns off). Add the ci_plan self-test here too so a policy edit that
# breaks its own invariants is red before it can plan anything.
# ---------------------------------------------------------------------------
lint:
needs: plan
if: fromJSON(needs.plan.outputs.plan).jobs.lint
# Was macos-14 — moved to ubuntu-latest in v0.5.428 since `cargo fmt
# --check` is portable. The 6 multiplier-min cut is small in absolute
# terms (lint runs in ~30s) but it's free.
# terms on a warm cache. #10986's first cargo-xwin run spends ~15 minutes
# downloading the MSVC sysroot and checking cold; main caches the sysroot.
runs-on: ubuntu-latest
timeout-minutes: 20
timeout-minutes: 30
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

Expand Down Expand Up @@ -233,6 +234,46 @@ jobs:
# Avoids cache thrash from short-lived branches.
save-if: ${{ github.ref == 'refs/heads/main' }}

# #10986: native Windows builds run in sweep/full tiers, so PRs had no
# required signal for cfg(windows) type errors. Bare cargo check on a
# Linux host stops in the mimalloc/zstd C build scripts before checking
# Perry source; cargo-xwin supplies the MSVC CRT and headers.
- name: Install cargo-xwin for Windows type-check
if: ${{ !cancelled() }}
run: |
asset=cargo-xwin-v0.23.0.x86_64-unknown-linux-musl.tar.gz
url="https://github.com/rust-cross/cargo-xwin/releases/download/v0.23.0/$asset"
curl --fail --location --retry 3 "$url" --output "$RUNNER_TEMP/$asset"
echo "74a216f64f10ea81c909f02d6b1a84cd0fda8de4c87ee52fe63ba76ab2392b75 $RUNNER_TEMP/$asset" \
| sha256sum --check --strict
mkdir -p "$RUNNER_TEMP/cargo-xwin-bin"
tar -xzf "$RUNNER_TEMP/$asset" -C "$RUNNER_TEMP/cargo-xwin-bin"
echo "$RUNNER_TEMP/cargo-xwin-bin" >> "$GITHUB_PATH"

- name: Restore cargo-xwin MSVC sysroot
if: ${{ !cancelled() }}
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6
with:
path: ~/.cache/cargo-xwin
key: cargo-xwin-${{ runner.os }}-0.23.0

- name: Type-check Windows runtime and stdlib
if: ${{ !cancelled() }}
env:
# Keep cross-target objects out of lint's shared Linux Rust cache.
CARGO_TARGET_DIR: /tmp/perry-windows-typecheck
run: |
rustup target add x86_64-pc-windows-msvc
export PATH="$LLVM_SYS_221_PREFIX/bin:$PATH"
cargo xwin check -p perry-runtime -p perry-stdlib --target x86_64-pc-windows-msvc

- name: Save cargo-xwin MSVC sysroot (main-line runs only)
if: always() && github.event_name != 'pull_request'
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6
with:
path: ~/.cache/cargo-xwin
key: cargo-xwin-${{ runner.os }}-0.23.0

- name: Check formatting
if: ${{ !cancelled() }}
run: cargo fmt --all -- --check
Expand Down Expand Up @@ -836,14 +877,30 @@ jobs:
if: ${{ !cancelled() }}
run: |
python3 scripts/global_sink_isolation.py --self-test
# #10980: the lock-downgrade gate runs at MERGE time, not per-PR
# (a branch that merely predates a bump is not at fault, and failing
# those trains people to bypass it). Only its self-test belongs here
# -- it proves the detector still catches a downgrade and still
# passes every legitimate move.
python3 scripts/lock_no_downgrade.py --self-test
python3 scripts/global_sink_isolation.py

# #10980/#11025: Cargo.lock is a shipping input, and a regenerated lock
# can lower one consumer's resolved dependency while a newer version of
# that dependency remains elsewhere in the graph. Keep the detector's
# proof independent from unrelated lint steps so it always reports.
- name: Lockfile downgrade detector self-test
if: ${{ !cancelled() }}
run: python3 scripts/lock_no_downgrade.py --self-test

# actions/checkout checks out the synthetic merge commit for a
# pull_request event. Comparing that tree with the event's base SHA asks
# the useful question: would THIS merge move any shared consumer's pin
# backwards? A branch that merely predates a bump inherits the base's
# lock in the merge result and stays green.
- name: Cargo.lock may not downgrade vs. pull request base
if: ${{ !cancelled() && github.event_name == 'pull_request' }}
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
run: |
git cat-file -e "$BASE_SHA^{commit}" 2>/dev/null \
|| git fetch --no-tags --depth=1 origin "$BASE_SHA"
python3 scripts/lock_no_downgrade.py --vs "$BASE_SHA"

# #10944's asserted-global ratchet, merge-base half. The gate above
# fails on a NEW bare process-global that a test asserts on; this
# rejects the other way round it -- a diff that adds one and records it
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

Perry is a native TypeScript compiler written in Rust that compiles TypeScript source code directly to native executables. It uses SWC for TypeScript parsing and LLVM for code generation.

**Current Version:** 0.5.1639
**Current Version:** 0.5.1640


## TypeScript Parity Status
Expand Down
Loading
Loading