Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
44 changes: 29 additions & 15 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,35 +35,49 @@ jobs:
- name: cargo clippy --workspace --all-targets
run: cargo clippy --workspace --all-targets -- -D warnings

# SRS §2.2 (as amended): Windows is a supported platform — the full test
# suite runs on {ubuntu, macos, windows} × {stable, MSRV}. On the MSRV
# toolchain the check is build-only (the MSRV promise is "compiles on
# exactly rust-version"; the behavioral suite runs on stable), pinned to
# the workspace `rust-version` so the two cannot drift apart silently.
test:
name: test (${{ matrix.os }})
name: ${{ matrix.rust == 'stable' && 'test' || 'build (MSRV)' }} (${{ matrix.os }}, ${{ matrix.rust }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
os: [ubuntu-latest, macos-latest, windows-latest]
rust: [stable, "1.75"]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: cargo test --workspace
- name: Check MSRV pin matches Cargo.toml rust-version
if: matrix.rust != 'stable'
shell: bash
run: |
msrv=$(sed -n 's/^rust-version *= *"\(.*\)"/\1/p' Cargo.toml)
if [ "$msrv" != "${{ matrix.rust }}" ]; then
echo "CI matrix pins MSRV ${{ matrix.rust }} but Cargo.toml declares rust-version $msrv" >&2
exit 1
fi
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- name: cargo test --workspace (stable)
if: matrix.rust == 'stable'
run: cargo test --workspace --locked
- name: cargo build --workspace (MSRV, build-only)
if: matrix.rust != 'stable'
run: cargo build --workspace --locked
# NFR-2 enforcement: the binary must link no HTTP client crate. We list
# the tree and grep for known offenders; failure here means someone added
# a network dependency.
# a network dependency. One OS is enough — the resolved graph is the
# same lockfile everywhere.
- name: no-network-crate check
if: matrix.rust == 'stable' && matrix.os == 'ubuntu-latest'
run: |
cargo tree --workspace -e features --depth 1 > tree.txt
! grep -Ei '^(ureq|reqwest|hyper|isahc|attohttpc|minreq|surf) ' tree.txt

build-windows:
name: build (windows, build-only per SRS §2.2)
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: cargo build --workspace
run: cargo build --workspace --locked

deny:
name: cargo-deny
runs-on: ubuntu-latest
Expand All @@ -80,4 +94,4 @@ jobs:
- uses: EmbarkStudios/cargo-deny-action@v2
with:
command: check
command-arguments: advisories licenses bans sources
command-arguments: advisories licenses bans sources
30 changes: 30 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,36 @@ in CI rather than tracking `latest` until 1.0.

## [Unreleased]

### Added
- Windows is a supported platform (amends SRS §2.2's build-only status): the
full test suite runs on `windows-latest` in CI, exercising portable-pty's
ConPTY backend end-to-end with Python and PowerShell fixture-agent
variants. Platform behavior, permission semantics (Windows ACL note), and
honest limitations are documented in `docs/platforms.md`; genuinely missing
pieces are tracked in issues #11 (resize forwarding) and #12 (interactive
stdin CI coverage).
- CI matrix is now `{ubuntu, macos, windows} × {stable, MSRV}`; the MSRV leg
builds `--locked` on exactly the `rust-version` toolchain (1.75) declared
in `Cargo.toml`, with a guard that the pin cannot drift from the manifest.

### Changed
- Recorded relative paths (`file_changes.path`, event summaries) are now
always `/`-separated on every platform (previously platform-native, which
would have stored `sub\file.txt` on Windows). Recordings made on one OS
now query and render identically on another (DR-2).
- The Claude Code adapter's project-dir slug also maps `:` to `-`, so a
Windows cwd like `C:\Users\me\proj` resolves to `C--Users-me-proj` before
falling back to the cwd scan.
- `hh` enables Windows virtual terminal processing via crossterm at startup;
when the console cannot support ANSI, colored output degrades to plain
text instead of escape garbage.
- `Cargo.lock` is kept MSRV(1.75)-compatible; `lru` is held on the 0.16 line
(0.17+ needs edition-2024 tooling) and several transitive deps resolved to
MSRV-compatible releases. `time` is held at 0.3.41 (the fix for
RUSTSEC-2026-0009 requires rustc 1.88); the advisory is ignored in
`deny.toml` with a written exposure justification and a revisit note tied
to the next MSRV bump.

## [0.1.0-beta.1] — 2026-07-07

First public beta. Local-first CLI flight recorder for AI agents: records an
Expand Down
Loading