Skip to content

lethen 3.8.1

Choose a tag to compare

@albovsky albovsky released this 25 Sep 22:15
· 92 commits to master since this release
2188620

lethen 3.8.1

The first lethen release. Lethen is an independent, MIT-licensed fork of Periphery 3.8.0. Distribution is source-only. Tags through 3.8.0 retain upstream Periphery history and attribution; they are not lethen releases.

This is the last release that supports Swift 6.1 and 6.2. Lethen supports the current Xcode major and the final release of the previous major, the Swift toolchains they ship, the same Swift minors on Linux through the official containers, and the current and previous Bazel LTS; 3.9.0 applies that policy and requires Swift 6.3 (Xcode 26.4).

Changes since 3.8.0

  • Reliable scanning on Swift 6.4 / Xcode 27: managed SwiftPM scans resolve the active binary directory and enable indexing explicitly, including release builds; a missing store fails with an actionable error; existing products are rebuilt to rule out a stale index. Use --skip-build with --index-store-path for an index you know is current.
  • Analysis fixes reproduced during a private-project audit: generated SwiftUI state projections are connected to their source property, and properties read only by synthesized Equatable and Hashable conformances are no longer reported as assign-only when a value reaches a comparison. Top-level code in main.swift no longer attributes its references to a nearby declaration.
  • Crash paths are reported errors: the guided setup with no detectable project or with input that ends, --project on Linux, a missing or unparseable Swift toolchain, and errors from concurrent indexing jobs. The Linux update-check teardown crash is fixed.
  • Lethen naming in user-facing text, the guided setup, the bug report template, and the mise tasks; the historical upstream guide is stripped of commercial and sponsor material. Existing .periphery.yml files, // periphery: comment commands, the PeripheryKit library, and the periphery Bazel module remain supported.
  • The update checker reads lethen's releases. Bazel mode warns when MODULE.bazel has no source override for periphery, and lethen scan --setup prints the snippet for the installed version.

The full list is in CHANGELOG.md.

Verification and limits

The release commit must pass the Required checks gate, which includes the Swift 6.4 / Xcode 27 baseline (.github/scripts/verify-swift-6.4.sh: the full suite, clean, warm, and native fixture scan comparisons, and a strict self-scan), the macOS 6.3 / Xcode 26.4 job, Linux 6.1 to 6.3, and Bazel 9.x. The GitHub release records the final commit and its CI run.

The private-project audit reviewed a deterministic sample of 30 findings, fixed seven false positives, and verified 11 retained controls. It does not establish that every finding is correct or every unused declaration is found. Assign-only storage may intentionally control object lifetime; package APIs may have consumers outside the scanned scheme. Synthesized-equality modeling is conservative.

The verified combinations separate toolchain, project type, host, and evidence. Intel macOS, universal or signed binaries, and running a Swift 6.4-built binary on macOS 15 are unverified.

Source installation

Select a full Xcode installation on macOS, for example sudo xcode-select -s /Applications/Xcode.app/Contents/Developer, then:

git clone --branch 3.8.1 --depth 1 https://github.com/albovsky/lethen.git
cd lethen
swift build -c release --product lethen
lethen_bin_dir="$(swift build -c release --show-bin-path)"
"$lethen_bin_dir/lethen" version
mkdir -p "$HOME/.local/bin"
install -m 755 "$lethen_bin_dir/lethen" "$HOME/.local/bin/lethen"
export PATH="$HOME/.local/bin:$PATH"
lethen scan --project-root /path/to/your/project --disable-update-check

Keep the PATH export in your shell profile. Stable builds are offered stable releases by the optional update checker. Binary signing and publishing automation remains disabled.

Release evidence

  • Tag 3.8.1 points at commit 218862090084e7c6f34939c92f2221d23fd89a2d (the squash merge of #17 on master, after #16).
  • CI on that commit: run 36193249308, master profile (Swift 6.4 / Xcode 27 baseline script, macOS 6.3, 6.2 and 6.1, Linux 6.1 to 6.3, Bazel 8.x and 9.x, Lint, Required checks), all successful.
  • Fresh public-tag gates on Apple Swift 6.4 (swiftlang-6.4.0.34.1) / Xcode 27.0, arm64 macOS 27.0: git clone --branch 3.8.1 --depth 1, swift build -c release --product lethen succeeded, lethen version printed 3.8.1, a scan of Tests/Fixtures with the release binary completed with 435 findings, and the binary installed to a separate directory runs lethen scan --help.