diff --git a/.dockerignore b/.dockerignore index 4137355cec..f63645e591 100644 --- a/.dockerignore +++ b/.dockerignore @@ -10,7 +10,7 @@ /target/ /zerocopy/target/ /anneal/target/ -/anneal/v2/target/ +/anneal/v1/target/ /tools/target/ /exocrate/target/ /hermes/target/ diff --git a/.github/workflows/anneal-release.yml b/.github/workflows/anneal-release.yml index a3deaadd0c..7ac6077ffd 100644 --- a/.github/workflows/anneal-release.yml +++ b/.github/workflows/anneal-release.yml @@ -13,7 +13,7 @@ on: branches: - main paths: - - 'anneal/Cargo.toml' + - 'anneal/v1/Cargo.toml' workflow_dispatch: inputs: version: @@ -54,7 +54,7 @@ jobs: id: check run: | set -eo pipefail - cd anneal + cd anneal/v1 CUR_VER=$(cargo metadata -q --format-version 1 | jq -r '.packages[] | select(.name == "cargo-anneal").version') @@ -96,7 +96,7 @@ jobs: CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }} run: | set -eo pipefail - cd anneal + cd anneal/v1 ./tools/pre-publish.sh cargo publish --allow-dirty --registry crates-io @@ -150,13 +150,13 @@ jobs: ./ci/release_anneal_version.sh "$VERSION" - python3 anneal/tools/check-release-pr-files.py \ + python3 anneal/v1/tools/check-release-pr-files.py \ --context "Release version bump" \ --include-untracked \ - --allowed anneal/Cargo.lock \ - --allowed anneal/Cargo.toml \ - --allowed anneal/README.md \ - --required anneal/Cargo.toml + --allowed anneal/v1/Cargo.lock \ + --allowed anneal/v1/Cargo.toml \ + --allowed anneal/v1/README.md \ + --required anneal/v1/Cargo.toml git diff --binary > anneal-release-source.patch if [ ! -s anneal-release-source.patch ]; then @@ -284,33 +284,33 @@ jobs: set -eo pipefail ARCHIVE_NAME="anneal-toolchain-${TARGET}.tar.zst" MAX_GITHUB_RELEASE_ASSET_SIZE=2147483647 - mkdir -p anneal/v2/target anneal/release-download-check anneal/release-metadata + mkdir -p anneal/target anneal/v1/release-download-check anneal/v1/release-metadata - nix build ./anneal/v2#omnibus-archive-ci --out-link "anneal/v2/target/${ARCHIVE_NAME}" - cp -L "anneal/v2/target/${ARCHIVE_NAME}" "anneal/${ARCHIVE_NAME}" - ARCHIVE_SIZE="$(python3 -c 'import os, sys; print(os.path.getsize(sys.argv[1]))' "anneal/${ARCHIVE_NAME}")" + nix build ./anneal#omnibus-archive-ci --out-link "anneal/target/${ARCHIVE_NAME}" + cp -L "anneal/target/${ARCHIVE_NAME}" "anneal/v1/${ARCHIVE_NAME}" + ARCHIVE_SIZE="$(python3 -c 'import os, sys; print(os.path.getsize(sys.argv[1]))' "anneal/v1/${ARCHIVE_NAME}")" printf 'Built %s (%s bytes)\n' "$ARCHIVE_NAME" "$ARCHIVE_SIZE" if [ "$ARCHIVE_SIZE" -gt "$MAX_GITHUB_RELEASE_ASSET_SIZE" ]; then echo "::error::${ARCHIVE_NAME} is ${ARCHIVE_SIZE} bytes, which exceeds GitHub's ${MAX_GITHUB_RELEASE_ASSET_SIZE}-byte release asset limit." exit 1 fi - gh release upload "$TAG_NAME" "anneal/${ARCHIVE_NAME}" --repo "$GH_REPO" --clobber + gh release upload "$TAG_NAME" "anneal/v1/${ARCHIVE_NAME}" --repo "$GH_REPO" --clobber gh release download "$TAG_NAME" \ --repo "$GH_REPO" \ --pattern "$ARCHIVE_NAME" \ - --dir anneal/release-download-check \ + --dir anneal/v1/release-download-check \ --clobber - cmp "anneal/${ARCHIVE_NAME}" "anneal/release-download-check/${ARCHIVE_NAME}" + cmp "anneal/v1/${ARCHIVE_NAME}" "anneal/v1/release-download-check/${ARCHIVE_NAME}" url="https://github.com/${GH_REPO}/releases/download/${TAG_NAME}/${ARCHIVE_NAME}" - python3 anneal/tools/collect-release-archive-metadata.py \ - --archive "anneal/release-download-check/${ARCHIVE_NAME}" \ + python3 anneal/v1/tools/collect-release-archive-metadata.py \ + --archive "anneal/v1/release-download-check/${ARCHIVE_NAME}" \ --target "$TARGET" \ --os "$CARGO_OS" \ --arch "$CARGO_ARCH" \ --url "$url" \ - --out "anneal/release-metadata/${TARGET}.json" + --out "anneal/v1/release-metadata/${TARGET}.json" - name: Restore AppArmor restriction if: always() && runner.os == 'Linux' @@ -320,7 +320,7 @@ jobs: uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: anneal-toolchain-metadata-${{ matrix.target }} - path: anneal/release-metadata/${{ matrix.target }}.json + path: anneal/v1/release-metadata/${{ matrix.target }}.json if-no-files-found: error retention-days: 1 @@ -359,7 +359,7 @@ jobs: uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: pattern: anneal-toolchain-metadata-* - path: anneal/release-metadata + path: anneal/v1/release-metadata merge-multiple: true - name: Update Anneal archive metadata @@ -367,22 +367,22 @@ jobs: TAG_NAME: ${{ needs.create-release.outputs.tag_name }} run: | set -eo pipefail - python3 anneal/tools/update-exocrate-metadata.py \ - --cargo-toml anneal/Cargo.toml \ - --metadata-dir anneal/release-metadata \ + python3 anneal/v1/tools/update-exocrate-metadata.py \ + --cargo-toml anneal/v1/Cargo.toml \ + --metadata-dir anneal/v1/release-metadata \ --expected-release-tag "$TAG_NAME" \ --require-all rm -f anneal-release-source.patch - rm -rf anneal/release-metadata + rm -rf anneal/v1/release-metadata - python3 anneal/tools/check-release-pr-files.py \ + python3 anneal/v1/tools/check-release-pr-files.py \ --context "Release workflow" \ --include-untracked \ - --allowed anneal/Cargo.lock \ - --allowed anneal/Cargo.toml \ - --allowed anneal/README.md \ - --required anneal/Cargo.toml + --allowed anneal/v1/Cargo.lock \ + --allowed anneal/v1/Cargo.toml \ + --allowed anneal/v1/README.md \ + --required anneal/v1/Cargo.toml - name: Submit PR id: submit-pr-upstream @@ -396,9 +396,9 @@ jobs: base: ${{ github.event.inputs.branch }} branch: anneal-release-${{ github.event.inputs.version }} add-paths: | - anneal/Cargo.lock - anneal/Cargo.toml - anneal/README.md + anneal/v1/Cargo.lock + anneal/v1/Cargo.toml + anneal/v1/README.md push-to-fork: google-pr-creation-bot/zerocopy token: ${{ secrets.GOOGLE_PR_CREATION_BOT_TOKEN }} # zizmor: ignore[secrets-outside-env] @@ -414,9 +414,9 @@ jobs: base: ${{ github.event.inputs.branch }} branch: anneal-release-${{ github.event.inputs.version }} add-paths: | - anneal/Cargo.lock - anneal/Cargo.toml - anneal/README.md + anneal/v1/Cargo.lock + anneal/v1/Cargo.toml + anneal/v1/README.md token: ${{ github.token }} - name: Add labels diff --git a/.github/workflows/anneal.yml b/.github/workflows/anneal.yml index 479c4f586a..6b3e7ccb8a 100644 --- a/.github/workflows/anneal.yml +++ b/.github/workflows/anneal.yml @@ -50,33 +50,33 @@ jobs: set -euo pipefail export PYTHONDONTWRITEBYTECODE=1 python3 -m py_compile \ - anneal/tools/check-release-pr-files.py \ - anneal/tools/test_exocrate_metadata_helpers.py \ - anneal/tools/test_release_pr_files.py \ - anneal/tools/collect-release-archive-metadata.py \ - anneal/tools/update-exocrate-metadata.py \ - anneal/v2/tests/test_prune_lake_cache.py \ - anneal/v2/prune-lake-cache.py \ - anneal/v2/rewrite-lake-vendor.py - python3 -m unittest discover -s anneal/tools -p 'test_*.py' - python3 -m unittest discover -s anneal/v2/tests -p 'test_*.py' - bash anneal/tools/check-release-flow-dry-run.sh + anneal/v1/tools/check-release-pr-files.py \ + anneal/v1/tools/test_exocrate_metadata_helpers.py \ + anneal/v1/tools/test_release_pr_files.py \ + anneal/v1/tools/collect-release-archive-metadata.py \ + anneal/v1/tools/update-exocrate-metadata.py \ + anneal/tests/test_prune_lake_cache.py \ + anneal/prune-lake-cache.py \ + anneal/rewrite-lake-vendor.py + python3 -m unittest discover -s anneal/v1/tools -p 'test_*.py' + python3 -m unittest discover -s anneal/tests -p 'test_*.py' + bash anneal/v1/tools/check-release-flow-dry-run.sh - name: Install Nix uses: DeterminateSystems/determinate-nix-action@c70cb8ae92d68c66953db28a26a63db1665bc837 # v3.21.5 - name: Check V2 flake evaluation - run: bash anneal/v2/check-flake-eval.sh + run: bash anneal/check-flake-eval.sh anneal_tests: - name: Anneal Tests + name: Anneal V1 Tests runs-on: ubuntu-latest needs: v2_nix_cache permissions: actions: read # Required to download the toolchain artifact. contents: write # Required to push benchmark data to the storage branch env: - ANNEAL_TOOLCHAIN_DIR: ${{ github.workspace }}/anneal/target/anneal-toolchain + ANNEAL_TOOLCHAIN_DIR: ${{ github.workspace }}/anneal/v1/target/anneal-toolchain __ZEROCOPY_LOCAL_DEV: 1 RUSTFLAGS: "" RUSTDOCFLAGS: "" @@ -99,16 +99,16 @@ jobs: uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: anneal-exocrate.tar.zst - path: anneal/v2/target + path: anneal/target # Ensure `llms-full.txt` file is up-to-date. - name: Check doc generation run: cargo run -p doc_gen -- --check - working-directory: anneal + working-directory: anneal/v1 - name: Install Anneal toolchain archive - run: cargo run setup --local-archive v2/target/anneal-exocrate.tar.zst - working-directory: anneal + run: cargo run setup --local-archive ../target/anneal-exocrate.tar.zst + working-directory: anneal/v1 # Run unit tests separately, as they're much less likely to have bugs # during local development, and this makes the GitHub Actions output @@ -116,7 +116,7 @@ jobs: # is due to unit or integration tests). - name: Run unit tests run: cargo test --verbose --bin cargo-anneal - working-directory: anneal + working-directory: anneal/v1 # We duplicate running unit tests since they're very cheap compared to # integration tests, and this way it's easier to be sure that we run all @@ -130,7 +130,7 @@ jobs: duration=$((end - start)) echo "Test Time: $duration seconds" echo "[{\"name\": \"Test Time\", \"unit\": \"seconds\", \"value\": $duration}]" > test_time.json - working-directory: anneal + working-directory: anneal/v1 - name: Combine benchmarks env: @@ -141,7 +141,7 @@ jobs: echo "[{\"name\": \"Total CI Duration (All Steps)\", \"unit\": \"seconds\", \"value\": $total_duration}]" > total_time.json jq -n \ - --slurpfile test anneal/test_time.json \ + --slurpfile test anneal/v1/test_time.json \ --slurpfile total total_time.json \ '[ $test[0][0], @@ -167,14 +167,14 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} verify_examples: - name: Verify example (${{ matrix.example }}) + name: Verify V1 example (${{ matrix.example }}) runs-on: ubuntu-latest needs: v2_nix_cache permissions: actions: read # Required to download the toolchain artifact. contents: read env: - ANNEAL_TOOLCHAIN_DIR: ${{ github.workspace }}/anneal/target/anneal-toolchain + ANNEAL_TOOLCHAIN_DIR: ${{ github.workspace }}/anneal/v1/target/anneal-toolchain __ZEROCOPY_LOCAL_DEV: 1 RUSTFLAGS: "" RUSTDOCFLAGS: "" @@ -215,11 +215,11 @@ jobs: uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: anneal-exocrate.tar.zst - path: anneal/v2/target + path: anneal/target - name: Install Anneal toolchain archive - run: cargo run setup --local-archive v2/target/anneal-exocrate.tar.zst - working-directory: anneal + run: cargo run setup --local-archive ../target/anneal-exocrate.tar.zst + working-directory: anneal/v1 - name: Verify example env: @@ -253,7 +253,7 @@ jobs: exit 1 fi fi - working-directory: anneal + working-directory: anneal/v1 # Build the Nix-produced toolchain archive once and fan out the exact archive # as a workflow artifact. This avoids forcing every downstream matrix runner @@ -283,8 +283,8 @@ jobs: id: restore_anneal_main_nix_cache uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: - path: anneal/v2/target/nix-cache-main - key: anneal-v2-main-nix-cache-v2-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('anneal/v2/flake.nix', 'anneal/v2/flake.lock', 'anneal/v2/rewrite-lake-vendor.py', 'anneal/v2/prune-lake-cache.py') }} + path: anneal/target/nix-cache-main + key: anneal-v2-main-nix-cache-v2-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('anneal/flake.nix', 'anneal/flake.lock', 'anneal/rewrite-lake-vendor.py', 'anneal/prune-lake-cache.py') }} # Pull request caches are scoped by GitHub to the PR merge ref, so they # can speed up repeated pushes to the same PR without becoming visible to @@ -295,8 +295,8 @@ jobs: if: github.event_name == 'pull_request' uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: - path: anneal/v2/target/nix-cache-pr - key: anneal-v2-pr-nix-cache-v1-${{ runner.os }}-${{ runner.arch }}-pr-${{ github.event.pull_request.number }}-${{ hashFiles('anneal/v2/flake.nix', 'anneal/v2/flake.lock', 'anneal/v2/rewrite-lake-vendor.py', 'anneal/v2/prune-lake-cache.py') }} + path: anneal/target/nix-cache-pr + key: anneal-v2-pr-nix-cache-v1-${{ runner.os }}-${{ runner.arch }}-pr-${{ github.event.pull_request.number }}-${{ hashFiles('anneal/flake.nix', 'anneal/flake.lock', 'anneal/rewrite-lake-vendor.py', 'anneal/prune-lake-cache.py') }} - name: Install Nix uses: DeterminateSystems/determinate-nix-action@c70cb8ae92d68c66953db28a26a63db1665bc837 # v3.21.5 @@ -336,7 +336,7 @@ jobs: exit 1 fi nix build "${nix_args[@]}" .#omnibus-archive-layout-check --no-link - working-directory: anneal/v2 + working-directory: anneal # Re-enable the AppArmor namespace restriction to restore the runner host's default security posture. # `if: always()` ensures this cleanup step runs even if the Nix build fails. @@ -358,13 +358,13 @@ jobs: # wrapper cheap; higher levels add CPU time for negligible size wins. nix copy .#omnibus-archive-ci \ --to "file://$PWD/target/nix-cache-main/?compression=zstd&compression-level=1&trusted=1" - working-directory: anneal/v2 + working-directory: anneal - name: Save Anneal Nix binary cache if: github.event_name == 'push' && github.ref == 'refs/heads/main' && steps.restore_anneal_main_nix_cache.outputs.cache-hit != 'true' uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: - path: anneal/v2/target/nix-cache-main + path: anneal/target/nix-cache-main key: ${{ steps.restore_anneal_main_nix_cache.outputs.cache-primary-key }} - name: Populate Anneal PR Nix binary cache @@ -376,20 +376,20 @@ jobs: # archive itself uses zstd level 6; keep this wrapper at level 1. nix copy .#omnibus-archive-ci \ --to "file://$PWD/target/nix-cache-pr/?compression=zstd&compression-level=1&trusted=1" - working-directory: anneal/v2 + working-directory: anneal - name: Save Anneal PR Nix binary cache if: github.event_name == 'pull_request' && steps.restore_anneal_pr_nix_cache.outputs.cache-hit != 'true' uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: - path: anneal/v2/target/nix-cache-pr + path: anneal/target/nix-cache-pr key: ${{ steps.restore_anneal_pr_nix_cache.outputs.cache-primary-key }} - name: Upload Anneal toolchain archive uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: anneal-exocrate.tar.zst - path: anneal/v2/target/anneal-exocrate.tar.zst + path: anneal/target/anneal-exocrate.tar.zst if-no-files-found: error retention-days: 1 compression-level: 0 @@ -412,10 +412,10 @@ jobs: uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: anneal-exocrate.tar.zst - path: anneal/v2/target + path: anneal/target # FIXME: Pin this nightly to the same Rust date encoded in - # anneal/v2/flake.nix, or derive it from the archive metadata, so v2 CI is + # anneal/flake.nix, or derive it from the archive metadata, so v2 CI is # reproducible instead of following whatever nightly happens to be latest. - name: Install latest nightly Rust uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # zizmor: ignore[superfluous-actions] @@ -424,7 +424,7 @@ jobs: - name: Run V2 tests run: cargo test --workspace --all-features # include, e.g., tests that assume exocrate prebuilt - working-directory: anneal/v2 + working-directory: anneal # Used to signal to branch protections that all other jobs have succeeded. all-jobs-succeed: diff --git a/.vscode/settings.json b/.vscode/settings.json index ed16c0a374..37e5bf41f8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,7 +11,7 @@ "zerocopy/Cargo.toml", "tools/Cargo.toml", "anneal/Cargo.toml", - "anneal/v2/Cargo.toml", + "anneal/v1/Cargo.toml", "exocrate/Cargo.toml" ], // Extra cfgs added to rust-analyzer. diff --git a/anneal/Cargo.lock b/anneal/Cargo.lock index 04bcfa1bdb..b2001ee37e 100644 --- a/anneal/Cargo.lock +++ b/anneal/Cargo.lock @@ -26,16 +26,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "annotate-snippets" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "710e8eae58854cdc1790fcb56cca04d712a17be849eeb81da2a724bf4bae2bc4" -dependencies = [ - "anstyle", - "unicode-width 0.2.2", -] - [[package]] name = "anstream" version = "1.0.0" @@ -92,27 +82,6 @@ version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" -[[package]] -name = "assert_cmd" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a686bbee5efb88a82df0621b236e74d925f470e5445d3220a5648b892ec99c9" -dependencies = [ - "anstyle", - "bstr", - "libc", - "predicates", - "predicates-core", - "predicates-tree", - "wait-timeout", -] - -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - [[package]] name = "backtrace" version = "0.3.76" @@ -143,26 +112,11 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - [[package]] name = "bitflags" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" [[package]] name = "block-buffer" @@ -173,22 +127,11 @@ dependencies = [ "generic-array", ] -[[package]] -name = "bstr" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" -dependencies = [ - "memchr", - "regex-automata", - "serde", -] - [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytes" @@ -207,16 +150,12 @@ dependencies = [ [[package]] name = "cargo-anneal" -version = "0.1.0-alpha.24" +version = "0.1.0-alpha.22" dependencies = [ "anyhow", - "assert_cmd", - "cargo_metadata 0.23.1", + "cargo_metadata", "clap", "clap-cargo", - "console", - "dashmap", - "datatest-stable", "env_logger", "exocrate", "fs2", @@ -224,57 +163,26 @@ dependencies = [ "log", "miette", "pathdiff", - "predicates", - "proc-macro2", - "quote", "rayon", - "regex", "serde", "serde_json", "sha2", - "similar", - "strip-ansi-escapes", - "syn", "tempfile", - "thiserror 2.0.18", - "toml", - "ui_test", + "thiserror", + "toml_const", "walkdir", ] [[package]] name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87a0c0e6148f11f01f32650a2ea02d532b2ad4e81d8bd41e6e565b5adc5e6082" +checksum = "dd0061da739915fae12ea00e16397555ed4371a6bb285431aab930f61b0aa4ba" dependencies = [ "serde", "serde_core", ] -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform 0.1.9", - "semver", - "serde", - "serde_json", - "thiserror 1.0.69", -] - [[package]] name = "cargo_metadata" version = "0.23.1" @@ -282,18 +190,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef987d17b0a113becdd19d3d0022d04d7ef41f9efe4f3fb63ac44ba61df3ade9" dependencies = [ "camino", - "cargo-platform 0.3.2", + "cargo-platform", "semver", "serde", "serde_json", - "thiserror 2.0.18", + "thiserror", ] [[package]] name = "cc" -version = "1.2.59" +version = "1.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" dependencies = [ "find-msvc-tools", "jobserver", @@ -309,9 +217,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "clap" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", "clap_derive", @@ -324,7 +232,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "936551935c8258754bb8216aec040957d261f977303754b9bf1a213518388006" dependencies = [ "anstyle", - "cargo_metadata 0.23.1", + "cargo_metadata", "clap", "serde", "serde_json", @@ -344,9 +252,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" dependencies = [ "heck", "proc-macro2", @@ -360,54 +268,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" -[[package]] -name = "color-eyre" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5920befb47832a6d61ee3a3a846565cfa39b331331e68a3b1d1116630f2f26d" -dependencies = [ - "backtrace", - "color-spantrace", - "eyre", - "indenter", - "once_cell", - "owo-colors", - "tracing-error", -] - -[[package]] -name = "color-spantrace" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8b88ea9df13354b55bc7234ebcce36e6ef896aca2e42a15de9e10edce01b427" -dependencies = [ - "once_cell", - "owo-colors", - "tracing-core", - "tracing-error", -] - [[package]] name = "colorchoice" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" -[[package]] -name = "colored" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "comma" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55b672471b4e9f9e95499ea597ff64941a309b2cdbffcc46f2cc5e2d971fd335" - [[package]] name = "console" version = "0.16.3" @@ -438,15 +304,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -482,38 +339,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "dashmap" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - -[[package]] -name = "datatest-stable" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a867d7322eb69cf3a68a5426387a25b45cb3b9c5ee41023ee6cea92e2afadd82" -dependencies = [ - "camino", - "fancy-regex", - "libtest-mimic", - "walkdir", -] - -[[package]] -name = "difflib" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" - [[package]] name = "digest" version = "0.10.7" @@ -545,19 +370,11 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "doc_gen" -version = "0.1.0" -dependencies = [ - "tree-sitter", - "tree-sitter-lean4", -] - [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "encode_unicode" @@ -604,12 +421,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "escape8259" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5692dd7b5a1978a5aeb0ce83b7655c58ca8efdcb79d21036ea249da95afec2c6" - [[package]] name = "exocrate" version = "0.1.0" @@ -625,42 +436,20 @@ dependencies = [ "zstd", ] -[[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fancy-regex" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298" -dependencies = [ - "bit-set", - "regex-automata", - "regex-syntax", -] - [[package]] name = "fastrand" -version = "2.3.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "filetime" -version = "0.2.27" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" dependencies = [ "cfg-if", "libc", - "libredox", ] [[package]] @@ -679,15 +468,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "float-cmp" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" -dependencies = [ - "num-traits", -] - [[package]] name = "foldhash" version = "0.1.5" @@ -704,6 +484,30 @@ dependencies = [ "winapi", ] +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -756,12 +560,6 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - [[package]] name = "hashbrown" version = "0.15.5" @@ -773,9 +571,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "heck" @@ -785,9 +583,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "http" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" dependencies = [ "bytes", "itoa", @@ -805,20 +603,14 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" -[[package]] -name = "indenter" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" - [[package]] name = "indexmap" -version = "2.13.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "serde", "serde_core", ] @@ -857,9 +649,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.23" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" +checksum = "392c70591e8749fe235ddaf513e6f58b26bce3dcc16524cecc8936f75afa161e" dependencies = [ "jiff-static", "log", @@ -870,9 +662,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.23" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" +checksum = "47b605b0c050d845fc355bb11eb3f9a8deddc218ea60c76e61aa1f2adfb2c96a" dependencies = [ "proc-macro2", "quote", @@ -891,60 +683,35 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.94" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - [[package]] name = "leb128fmt" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" -[[package]] -name = "levenshtein" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" - [[package]] name = "libc" -version = "0.2.184" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libredox" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" +checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ - "bitflags", "libc", - "plain", - "redox_syscall 0.7.3", -] - -[[package]] -name = "libtest-mimic" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14e6ba06f0ade6e504aff834d7c34298e5155c6baca353cc6a4aaff2f9fd7f33" -dependencies = [ - "anstream", - "anstyle", - "clap", - "escape8259", ] [[package]] @@ -953,26 +720,17 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - [[package]] name = "log" -version = "0.4.29" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "miette" @@ -1014,21 +772,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - [[package]] name = "object" version = "0.37.3" @@ -1062,19 +805,6 @@ version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.5.18", - "smallvec", - "windows-link", -] - [[package]] name = "pathdiff" version = "0.2.3" @@ -1088,75 +818,73 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] -name = "pin-project-lite" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" - -[[package]] -name = "pkg-config" -version = "0.3.32" +name = "phf" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros", + "phf_shared", + "serde", +] [[package]] -name = "plain" -version = "0.2.3" +name = "phf_generator" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared", +] [[package]] -name = "portable-atomic" -version = "1.13.1" +name = "phf_macros" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "portable-atomic-util" -version = "0.2.6" +name = "phf_shared" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" dependencies = [ - "portable-atomic", + "siphasher", ] [[package]] -name = "predicates" -version = "3.1.4" +name = "pin-project-lite" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" -dependencies = [ - "anstyle", - "difflib", - "float-cmp", - "normalize-line-endings", - "predicates-core", - "regex", -] +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] -name = "predicates-core" -version = "1.0.10" +name = "pkg-config" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] -name = "predicates-tree" -version = "1.0.13" +name = "portable-atomic" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" -dependencies = [ - "predicates-core", - "termtree", -] +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] -name = "prettydiff" -version = "0.9.0" +name = "portable-atomic-util" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac17546d82912e64874e3d5b40681ce32eac4e5834344f51efcf689ff1550a65" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" dependencies = [ - "owo-colors", + "portable-atomic", ] [[package]] @@ -1201,9 +929,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rayon" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" dependencies = [ "either", "rayon-core", @@ -1219,24 +947,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" -dependencies = [ - "bitflags", -] - [[package]] name = "redox_users" version = "0.5.2" @@ -1245,7 +955,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", - "thiserror 2.0.18", + "thiserror", ] [[package]] @@ -1297,27 +1007,6 @@ version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rustfix" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82fa69b198d894d84e23afde8e9ab2af4400b2cba20d6bf2b428a8b01c222c5a" -dependencies = [ - "serde", - "serde_json", - "thiserror 1.0.69", - "tracing", -] - [[package]] name = "rustix" version = "1.1.4" @@ -1333,9 +1022,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.37" +version = "0.23.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ "log", "once_cell", @@ -1348,9 +1037,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" dependencies = [ "zeroize", ] @@ -1381,17 +1070,11 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" dependencies = [ "serde", "serde_core", @@ -1429,11 +1112,10 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ - "indexmap", "itoa", "memchr", "serde", @@ -1443,11 +1125,11 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.9" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -1467,15 +1149,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbb83f144cbda94be5d2278400eee9e0a03eb68b5504349943655b7b1603c4af" -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - [[package]] name = "shlex" version = "1.3.0" @@ -1489,42 +1162,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" [[package]] -name = "similar" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "spanned" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4b0c055fde758f086eb4a6e73410247df8a3837fd606d2caeeaf72aa566d" -dependencies = [ - "anyhow", - "bstr", - "color-eyre", -] - -[[package]] -name = "streaming-iterator" -version = "0.1.9" +name = "siphasher" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] -name = "strip-ansi-escapes" -version = "0.2.1" +name = "slab" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025" -dependencies = [ - "vte", -] +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "strsim" @@ -1604,12 +1251,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "termtree" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" - [[package]] name = "textwrap" version = "0.16.2" @@ -1620,33 +1261,13 @@ dependencies = [ "unicode-width 0.2.2", ] -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - [[package]] name = "thiserror" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.18", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "thiserror-impl", ] [[package]] @@ -1660,158 +1281,74 @@ dependencies = [ "syn", ] -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - [[package]] name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.22.27" +version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ "indexmap", - "serde", + "serde_core", "serde_spanned", "toml_datetime", - "toml_write", - "winnow", -] - -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - -[[package]] -name = "tracing" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" -dependencies = [ - "pin-project-lite", - "tracing-core", + "toml_parser", + "toml_writer", + "winnow 0.7.15", ] [[package]] -name = "tracing-core" -version = "0.1.36" +name = "toml_const" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +checksum = "389864cf501669b741746e9bc35e66c67f2b80266482ad04c452e2410433f205" dependencies = [ - "once_cell", - "valuable", + "phf", + "toml", + "toml_const_macros", ] [[package]] -name = "tracing-error" -version = "0.2.1" +name = "toml_const_macros" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" +checksum = "e3e0f202adfb96027640ad9786a0657775414482cfd840c19e9957ada8cfbbfd" dependencies = [ - "tracing", - "tracing-subscriber", + "indexmap", + "proc-macro2", + "quote", + "syn", + "toml", ] [[package]] -name = "tracing-subscriber" -version = "0.3.23" +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ - "sharded-slab", - "thread_local", - "tracing-core", + "serde_core", ] [[package]] -name = "tree-sitter" -version = "0.25.10" +name = "toml_parser" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78f873475d258561b06f1c595d93308a7ed124d9977cb26b148c2084a4a3cc87" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "cc", - "regex", - "regex-syntax", - "serde_json", - "streaming-iterator", - "tree-sitter-language", + "winnow 1.0.3", ] [[package]] -name = "tree-sitter-language" -version = "0.1.7" +name = "toml_writer" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009994f150cc0cd50ff54917d5bc8bffe8cad10ca10d81c34da2ec421ae61782" - -[[package]] -name = "tree-sitter-lean4" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d274c5b559d3a46a0d5d200fc0593fa3fda035304fa794d5d4a760fbf69c2a5e" -dependencies = [ - "cc", - "tree-sitter", -] +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - -[[package]] -name = "ui_test" -version = "0.30.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ada249620d81f010b9a1472b63a5077ac7c722dd0f4bacf6528b313d0b8c15d8" -dependencies = [ - "annotate-snippets", - "anyhow", - "bstr", - "cargo-platform 0.1.9", - "cargo_metadata 0.18.1", - "color-eyre", - "colored", - "comma", - "crossbeam-channel", - "indicatif", - "levenshtein", - "prettydiff", - "regex", - "rustc_version", - "rustfix", - "serde", - "serde_json", - "spanned", -] +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "unicode-ident" @@ -1902,36 +1439,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "vte" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077" -dependencies = [ - "memchr", -] - -[[package]] -name = "wait-timeout" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" -dependencies = [ - "libc", -] - [[package]] name = "walkdir" version = "2.5.0" @@ -1950,11 +1463,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.2+wasi-0.2.9" +version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.57.1", ] [[package]] @@ -1963,14 +1476,14 @@ version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.51.0", ] [[package]] name = "wasm-bindgen" -version = "0.2.117" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" +checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" dependencies = [ "cfg-if", "once_cell", @@ -1981,9 +1494,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.117" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" +checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1991,9 +1504,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.117" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" +checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" dependencies = [ "bumpalo", "proc-macro2", @@ -2004,9 +1517,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.117" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" +checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" dependencies = [ "unicode-ident", ] @@ -2057,9 +1570,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" +checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" dependencies = [ "rustls-pki-types", ] @@ -2188,9 +1701,12 @@ name = "winnow" version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" -dependencies = [ - "memchr", -] + +[[package]] +name = "winnow" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" [[package]] name = "wit-bindgen" @@ -2201,6 +1717,12 @@ dependencies = [ "wit-bindgen-rust-macro", ] +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + [[package]] name = "wit-bindgen-core" version = "0.51.0" diff --git a/anneal/Cargo.toml b/anneal/Cargo.toml index 8abf3e3391..54e6a1a92f 100644 --- a/anneal/Cargo.toml +++ b/anneal/Cargo.toml @@ -1,10 +1,14 @@ [workspace] -members = [".", "tools/doc_gen"] +members = ["."] + +[features] +# Enables tests that assume a prebuilt exocrate archive. +exocrate_tests = [] [package] name = "cargo-anneal" edition = "2024" -version = "0.1.0-alpha.24" +version = "0.1.0-alpha.22" description = "Formally verify that your safety comments are correct." categories = [ "development-tools::cargo-plugins", @@ -25,89 +29,40 @@ exclude = [".*", "testdata"] # this crate; `cargo anneal setup` uses this metadata by default when callers # do not provide a local archive. [package.metadata.exocrate.linux.x86_64] -sha256 = "d3d7bbcdfd2645f10e3e64a85b3e848197033992337c969a45576a3d0ec517d9" -url = "https://github.com/google/zerocopy/releases/download/anneal-toolchains-v0.1.0-alpha.24-27079750833-09497849a10d/anneal-toolchain-linux-x86_64.tar.zst" +sha256 = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" +url = "https://example.com/linux-x86_64.tar.zst" [package.metadata.exocrate.macos.x86_64] -sha256 = "1252f15262d11f49795c8ed182a8b47f2ae4e627d90babb2f10636349f686438" -url = "https://github.com/google/zerocopy/releases/download/anneal-toolchains-v0.1.0-alpha.24-27079750833-09497849a10d/anneal-toolchain-macos-x86_64.tar.zst" +sha256 = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" +url = "https://example.com/macos-x86_64.tar.zst" [package.metadata.exocrate.linux.aarch64] -sha256 = "a9c496fcf21670b2306d02722b9afcf375149315e929d53b6a7585d4daa19710" -url = "https://github.com/google/zerocopy/releases/download/anneal-toolchains-v0.1.0-alpha.24-27079750833-09497849a10d/anneal-toolchain-linux-aarch64.tar.zst" +sha256 = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" +url = "https://example.com/linux-aarch64.tar.zst" [package.metadata.exocrate.macos.aarch64] -sha256 = "b4e0a5b420eb441e37564c365f06c215f61a3b825fc3df37293da7c3010d2b81" -url = "https://github.com/google/zerocopy/releases/download/anneal-toolchains-v0.1.0-alpha.24-27079750833-09497849a10d/anneal-toolchain-macos-aarch64.tar.zst" +sha256 = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" +url = "https://example.com/macos-aarch64.tar.zst" [dependencies] +exocrate = { path = "../exocrate" } +toml_const = "1.3.0" +clap = { version = "4.5", features = ["derive"] } +clap-cargo = { version = "0.18.3", features = ["cargo_metadata"] } +env_logger = "0.11" +log = "0.4" anyhow = "1.0.102" cargo_metadata = "0.23.1" -clap = { version = "4.6.0", features = ["derive"] } -clap-cargo = { version = "0.18.3", features = ["cargo_metadata"] } -dashmap = "6.1.0" -env_logger = "0.11.10" -log = "0.4.29" miette = { version = "7.6.0", features = ["derive", "fancy"] } -proc-macro2 = { version = "1.0.106", features = ["span-locations"] } -rayon = "1.11.0" -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.149" -syn = { version = "2.0.117", features = [ - "full", - "visit", - "extra-traits", - "parsing", - "printing", -] } -quote = "1.0" thiserror = "2.0.18" -walkdir = "2.5.0" +serde_json = "1.0.149" +serde = { version = "1.0.228", features = ["derive"] } indicatif = { version = "0.18.4", features = ["improved_unicode"] } -console = "0.16.3" -exocrate = { path = "../exocrate" } -sha2 = "0.10" fs2 = "0.4" -pathdiff = "0.2.3" -toml = "0.8" -tempfile = "3.27.0" - -[build-dependencies] +walkdir = "2.5.0" sha2 = "0.10" -toml = "0.8" +tempfile = "3.27.0" +rayon = "1.11.0" [dev-dependencies] -syn = { version = "2.0.117", features = [ - "printing", - "full", - "visit", - "extra-traits", - "parsing", -] } -proc-macro2 = { version = "1.0.106", features = ["span-locations"] } -ui_test = "0.30.4" -assert_cmd = "2.2.0" - -predicates = "3.1.4" - -datatest-stable = "0.3.3" -serde = { version = "1.0", features = ["derive"] } -toml = "0.8" -regex = "1.0" -strip-ansi-escapes = "0.2.1" -similar = "2.7.0" - -[package.metadata.build_rs] - -# The commit hash of the Aeneas repository to use. -# -# FIXME: Add a CI step to verify that this commit exists and matches the -# toolchain version. -aeneas_rev = "42c0e90dacf486f7d3ed5b6cde3a9a81f04915a4" - -# The Lean toolchain version to use. This must match the version of Lean used -# by Aeneas in the `lean-toolchain` file in the commit above. -lean_toolchain = "leanprover/lean4:v4.30.0-rc2" -[[test]] -name = "integration" -harness = false +pathdiff = "0.2" diff --git a/anneal/LICENSE-APACHE b/anneal/LICENSE-APACHE deleted file mode 120000 index 965b606f33..0000000000 --- a/anneal/LICENSE-APACHE +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-APACHE \ No newline at end of file diff --git a/anneal/LICENSE-BSD b/anneal/LICENSE-BSD deleted file mode 120000 index d37ba4277e..0000000000 --- a/anneal/LICENSE-BSD +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-BSD \ No newline at end of file diff --git a/anneal/LICENSE-MIT b/anneal/LICENSE-MIT deleted file mode 120000 index 76219eb72e..0000000000 --- a/anneal/LICENSE-MIT +++ /dev/null @@ -1 +0,0 @@ -../LICENSE-MIT \ No newline at end of file diff --git a/anneal/v2/chase-aeneas-versions.sh b/anneal/chase-aeneas-versions.sh similarity index 100% rename from anneal/v2/chase-aeneas-versions.sh rename to anneal/chase-aeneas-versions.sh diff --git a/anneal/v2/check-flake-eval.sh b/anneal/check-flake-eval.sh similarity index 98% rename from anneal/v2/check-flake-eval.sh rename to anneal/check-flake-eval.sh index 22d71f04dd..5deef6e2ae 100644 --- a/anneal/v2/check-flake-eval.sh +++ b/anneal/check-flake-eval.sh @@ -11,7 +11,7 @@ set -euo pipefail ROOT="$(git rev-parse --show-toplevel)" -FLAKE="$ROOT/anneal/v2" +FLAKE="$ROOT/anneal" systems=( aarch64-darwin diff --git a/anneal/v2/flake.lock b/anneal/flake.lock similarity index 100% rename from anneal/v2/flake.lock rename to anneal/flake.lock diff --git a/anneal/v2/flake.nix b/anneal/flake.nix similarity index 100% rename from anneal/v2/flake.nix rename to anneal/flake.nix diff --git a/anneal/v2/prune-lake-cache.py b/anneal/prune-lake-cache.py similarity index 100% rename from anneal/v2/prune-lake-cache.py rename to anneal/prune-lake-cache.py diff --git a/anneal/v2/rewrite-lake-vendor.py b/anneal/rewrite-lake-vendor.py similarity index 100% rename from anneal/v2/rewrite-lake-vendor.py rename to anneal/rewrite-lake-vendor.py diff --git a/anneal/src/main.rs b/anneal/src/main.rs index 3d363b977d..0cb74addc8 100644 --- a/anneal/src/main.rs +++ b/anneal/src/main.rs @@ -1,21 +1,16 @@ -mod aeneas; -mod charon; -mod diagnostics; -mod errors; -mod generate; -mod parse; -mod resolve; -mod scanner; -mod validate; - -mod setup; -mod ui_test_shim; -mod util; - -use clap::Parser; - -/// Anneal: A Literate Verification Toolchain -#[derive(Parser, Debug)] +// Copyright 2026 The Fuchsia Authors +// +// Licensed under the 2-Clause BSD License , Apache License, Version 2.0 +// , or the MIT +// license , at your option. +// This file may not be copied, modified, or distributed except according to +// those terms. + +use clap::Parser as _; + +/// Anneal +#[derive(clap::Parser, Debug)] #[command(name = "cargo-anneal", version, about, long_about = None)] struct Cli { #[command(subcommand)] @@ -24,46 +19,60 @@ struct Cli { #[derive(clap::Subcommand, Debug)] enum Commands { - /// Verify a crate - Verify(resolve::Args), /// Setup Anneal dependencies - Setup(resolve::SetupArgs), - /// Expand a crate's Lean output - Expand(ExpandArgs), - /// Generate Lean workspace and print paths without building - Generate(resolve::Args), - #[command(hide = true)] - ToolchainPath, + Setup(SetupArgs), } -#[derive(clap::ValueEnum, Clone, Debug, Default, PartialEq)] -pub enum EmitFormat { - #[default] - All, - Anneal, - Aeneas, +#[derive(clap::Parser, Debug)] +pub struct SetupArgs { + /// Path to a local dependency archive to use instead of downloading. + #[arg(long, value_name = "path-to-local-archive")] + pub local_archive: Option, } -#[derive(Parser, Debug)] -pub struct ExpandArgs { - #[command(flatten)] - pub resolve_args: resolve::Args, +exocrate::config! { + const CONFIG: Config = Config { + rel_dir_path: [".anneal", "toolchain"], + versioned_files: &["../Cargo.toml", "../Cargo.lock"], + }; +} - /// Which tool's generated Lean code to output - #[arg(long, default_value_t, value_enum)] - pub emit: EmitFormat, +exocrate::parse_remote_archive! { + const REMOTE: RemoteArchive = "Cargo.toml" [ + (linux, x86_64), + (macos, x86_64), + (linux, aarch64), + (macos, aarch64), + ]; } -fn main() -> anyhow::Result<()> { +fn setup_installation_dir(args: SetupArgs) -> std::path::PathBuf { + let location = if std::env::var("__ANNEAL_LOCAL_DEV").is_ok() { + exocrate::Location::LocalDev + } else { + exocrate::Location::UserGlobal + }; + let source = match args.local_archive { + Some(local_archive) => exocrate::Source::Local(local_archive), + None => exocrate::Source::Remote(REMOTE), + }; + + CONFIG + .resolve_installation_dir_or_install(location, source) + // FIXME: Implement unified error reporting (e.g., via `anyhow`). + .expect("failed to resolve-or-install dependencies") +} + +fn setup(args: SetupArgs) { + let installation_dir = setup_installation_dir(args); + log::info!("anneal toolchain is installed at {:?}", installation_dir); +} + +fn main() { // Suppressing timestamps removes a source of nondeterminism that is // difficult to work around in integration tests. env_logger::builder().format_timestamp(None).init(); - if std::env::var("ANNEAL_UI_TEST_MODE").is_ok() { - ui_test_shim::run(); - return Ok(()); - } - let mut args_iter = std::env::args_os().peekable(); let bin_name = args_iter.next().unwrap_or_else(|| "cargo-anneal".into()); // If we're being run as a cargo plugin, the second argument will be "anneal". @@ -73,112 +82,251 @@ fn main() -> anyhow::Result<()> { let args = Cli::parse_from(std::iter::once(bin_name).chain(args_iter)); match args.command { - Commands::Verify(resolve_args) => { - prepare_and_run(&resolve_args, |locked_roots, packages| { - aeneas::verify_lean_workspace(locked_roots, packages) - })?; + Commands::Setup(args) => setup(args), + } +} + +#[cfg(test)] +mod tests { + #[cfg(feature = "exocrate_tests")] + mod exocrate_tests { + use std::{ + fs, io, + path::{Path, PathBuf}, + process::Command, + sync::OnceLock, + }; + + use serde_json::{Value, json}; + + const LOCAL_ARCHIVE: &str = "target/anneal-exocrate.tar.zst"; + static INSTALLATION_DIR: OnceLock = OnceLock::new(); + + #[test] + fn test_setup() { + install_local_archive(); } - Commands::Generate(resolve_args) => { - prepare_and_run(&resolve_args, |locked_roots, packages| { - aeneas::generate_lean_workspace(locked_roots, packages)?; - let lean_root = locked_roots.lean_root(); - let toolchain = setup::Toolchain::resolve()?; - println!("Lean workspace generated at: {}", lean_root.display()); - println!(); - println!("To manually build and experiment:"); - println!(" 1. cd {}", lean_root.display()); - println!( - " 2. LAKE_CACHE_DIR={} {} --keep-toolchain build", - toolchain.cache_dir().display(), - toolchain.lean_bin().join("lake").display() - ); - Ok(()) - })?; + + #[test] + fn test_archive_lake_cache_reuse() { + let installation_dir = install_local_archive(); + let temp = tempfile::Builder::new() + .prefix("anneal-v2-archive-cache-reuse-") + .tempdir() + .expect("failed to create archive cache reuse tempdir"); + assert_archive_lake_cache_reuse(&installation_dir, temp.path()) + .expect("archive Lake cache reuse test failed"); + } + + fn install_local_archive() -> PathBuf { + // ASSUMPTION: The CI dependency builder downloads the Nix-built + // archive artifact to this path before running v2 tests. + INSTALLATION_DIR + .get_or_init(|| { + super::super::setup_installation_dir(super::super::SetupArgs { + local_archive: Some(LOCAL_ARCHIVE.into()), + }) + }) + .clone() + } + + fn assert_archive_lake_cache_reuse( + toolchain_root: &Path, + temp_root: &Path, + ) -> Result<(), Box> { + let aeneas_root = toolchain_root.join("aeneas"); + let aeneas_lean = aeneas_root.join("backends/lean"); + let lean_root = toolchain_root.join("lean"); + let workspace = temp_root.join("generated-workspace"); + + assert_no_write_bits(&aeneas_root)?; + + fs::create_dir_all(workspace.join("generated"))?; + fs::copy(aeneas_lean.join("lean-toolchain"), workspace.join("lean-toolchain"))?; + fs::write(workspace.join("generated/Generated.lean"), "import Aeneas\n")?; + fs::write( + workspace.join("lakefile.lean"), + format!( + r#"import Lake +open Lake DSL + +require aeneas from "{}" + +package anneal_verification + +@[default_target] +lean_lib Generated where + srcDir := "generated" + roots := #[`Generated] +"#, + lake_string(&aeneas_lean) + ), + )?; + write_relative_archive_manifest(&workspace, &aeneas_lean)?; + + // The Nix archive must support fresh generated workspaces without + // reconfiguring packages or rebuilding read-only Lake artifacts. + run_lake_archive_command( + &workspace, + &lean_root, + &["--keep-toolchain", "--old", "build", "Generated"], + )?; + run_lake_archive_command( + &workspace, + &lean_root, + &["--keep-toolchain", "env", "lean", "--json", "generated/Generated.lean"], + )?; + + Ok(()) } - Commands::Setup(args) => { - setup::run_setup(setup::SetupArgs { local_archive: args.local_archive })?; + + fn assert_no_write_bits(root: &Path) -> Result<(), Box> { + let metadata = fs::symlink_metadata(root)?; + if metadata.file_type().is_symlink() { + return Ok(()); + } + if has_write_bits(&metadata.permissions()) { + panic!("archive path should be read-only: {}", root.display()); + } + if metadata.is_dir() { + for entry in fs::read_dir(root)? { + assert_no_write_bits(&entry?.path())?; + } + } + Ok(()) + } + + #[cfg(unix)] + fn has_write_bits(permissions: &fs::Permissions) -> bool { + use std::os::unix::fs::PermissionsExt as _; + permissions.mode() & 0o222 != 0 } - Commands::ToolchainPath => { - let toolchain = setup::Toolchain::resolve()?; - println!("{}", toolchain.bin_dir().display()); + + #[cfg(not(unix))] + fn has_write_bits(permissions: &fs::Permissions) -> bool { + !permissions.readonly() } - Commands::Expand(expand_args) => { - prepare_and_run(&expand_args.resolve_args, |locked_roots, packages| { - let lean_generated_root = locked_roots.lean_generated_root(); - - for artifact in packages { - if artifact.start_from.is_empty() { - continue; - } - - let slug = artifact.artifact_slug(); - let output_dir = lean_generated_root.join(&slug); - - let emit_all = expand_args.emit == EmitFormat::All; - let emit_anneal = emit_all || expand_args.emit == EmitFormat::Anneal; - let emit_aeneas = emit_all || expand_args.emit == EmitFormat::Aeneas; - - println!("=== Lean expansion for: {} ===", artifact.name.target_name); - - if emit_aeneas { - println!("--- Aeneas ---"); - // Read Aeneas outputs from disk - let types_path = output_dir.join("Types.lean"); - let types_ext_path = output_dir.join("TypesExternal.lean"); - let funs_path = output_dir.join("Funs.lean"); - let funs_ext_path = output_dir.join("FunsExternal.lean"); - - if types_path.exists() { - println!("{}", std::fs::read_to_string(&types_path)?); - } - if types_ext_path.exists() { - println!("{}", std::fs::read_to_string(&types_ext_path)?); - } - if funs_path.exists() { - println!("{}", std::fs::read_to_string(&funs_path)?); - } - if funs_ext_path.exists() { - println!("{}", std::fs::read_to_string(&funs_ext_path)?); - } - } - - if emit_anneal { - println!("--- Anneal ---"); - let generated = generate::generate_artifact(artifact); - println!("{}", generated.code); - } + + fn write_relative_archive_manifest( + workspace: &Path, + aeneas_lean: &Path, + ) -> Result<(), Box> { + let aeneas_lean = fs::canonicalize(aeneas_lean)?; + let workspace = fs::canonicalize(workspace)?; + let manifest_path = aeneas_lean.join("lake-manifest.json"); + let manifest: Value = serde_json::from_reader(fs::File::open(&manifest_path)?)?; + let aeneas_packages = + manifest.get("packages").and_then(Value::as_array).ok_or_else(|| { + invalid_data(format!( + "Aeneas Lake manifest {} is missing packages", + manifest_path.display() + )) + })?; + + let aeneas_dir = relative_manifest_string(&aeneas_lean, &workspace)?; + let mut packages = vec![json!({ + "type": "path", + "name": "aeneas", + "dir": aeneas_dir, + "inherited": false, + })]; + + for entry in aeneas_packages { + let mut entry = entry.as_object().cloned().ok_or_else(|| { + invalid_data("Aeneas Lake manifest package entry is not an object") + })?; + let package_type = entry.get("type").and_then(Value::as_str).ok_or_else(|| { + invalid_data("Aeneas Lake manifest package entry is missing type") + })?; + if package_type != "path" { + return Err(invalid_data(format!( + "Aeneas Lake manifest package entry is {package_type:?}, not a path dependency" + )) + .into()); } + let package_dir = entry.get("dir").and_then(Value::as_str).ok_or_else(|| { + invalid_data("Aeneas Lake manifest package entry is missing dir") + })?; + let package_dir = Path::new(package_dir); + let package_dir = if package_dir.is_absolute() { + package_dir.to_path_buf() + } else { + aeneas_lean.join(package_dir) + }; + let package_dir = fs::canonicalize(package_dir)?; + entry.insert( + "dir".to_string(), + json!(relative_manifest_string(&package_dir, &workspace)?), + ); + entry.insert("inherited".to_string(), json!(true)); + packages.push(Value::Object(entry)); + } + + let manifest = json!({ + "version": "1.2.0", + "packagesDir": ".lake/packages", + "packages": packages, + "name": "anneal_verification", + "lakeDir": ".lake", + "fixedToolchain": false, + }); + fs::write( + workspace.join("lake-manifest.json"), + format!("{}\n", serde_json::to_string_pretty(&manifest)?), + )?; + Ok(()) + } - Ok(()) + fn relative_manifest_string( + path: &Path, + base: &Path, + ) -> Result> { + let path = pathdiff::diff_paths(path, base).ok_or_else(|| { + invalid_data(format!( + "failed to compute relative path from {} to {}", + base.display(), + path.display() + )) })?; + Ok(path.to_string_lossy().into_owned()) } - } - Ok(()) -} + fn lake_string(path: &Path) -> String { + path.to_string_lossy().replace('\\', "\\\\").replace('"', "\\\"") + } -fn prepare_and_run(resolve_args: &resolve::Args, f: F) -> anyhow::Result> -where - F: FnOnce(&resolve::LockedRoots, &[scanner::AnnealArtifact]) -> anyhow::Result, -{ - let roots = resolve::resolve_roots(resolve_args)?; - - let packages = scanner::scan_workspace(&roots)?; - if packages.is_empty() { - log::warn!( - "No Anneal annotations (/// ```lean ...) found in the selected targets. Nothing to verify." - ); - return Ok(None); - } + fn run_lake_archive_command( + workspace: &Path, + lean_root: &Path, + args: &[&str], + ) -> Result<(), Box> { + let lean_bin = lean_root.join("bin"); + let mut cmd = Command::new(lean_bin.join("lake")); + cmd.args(args).current_dir(workspace).env_clear(); + + let lib_var = + if cfg!(target_os = "macos") { "DYLD_LIBRARY_PATH" } else { "LD_LIBRARY_PATH" }; + cmd.env( + lib_var, + std::env::join_paths([lean_root.join("lib"), lean_root.join("lib/lean")])?, + ); - let locked_roots = roots.lock_run_root()?; - validate::validate_artifacts( - &packages, - resolve_args.allow_sorry, - resolve_args.unsound_allow_is_valid, - )?; - charon::run_charon(resolve_args, &locked_roots, &packages)?; - aeneas::run_aeneas(&locked_roots, &packages, resolve_args)?; + let output = cmd.output()?; + if !output.status.success() { + return Err(io::Error::other(format!( + "lake {:?} failed with status {}\nstdout:\n{}\nstderr:\n{}", + args, + output.status, + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + )) + .into()); + } + Ok(()) + } - Ok(Some(f(&locked_roots, &packages)?)) + fn invalid_data(message: impl Into) -> io::Error { + io::Error::new(io::ErrorKind::InvalidData, message.into()) + } + } } diff --git a/anneal/src/util.rs b/anneal/src/util.rs index fe085b37dc..602e1585d1 100644 --- a/anneal/src/util.rs +++ b/anneal/src/util.rs @@ -1,16 +1,25 @@ -use std::path::PathBuf; +// Copyright 2026 The Fuchsia Authors +// +// Licensed under the 2-Clause BSD License , Apache License, Version 2.0 +// , or the MIT +// license , at your option. +// This file may not be copied, modified, or distributed except according to +// those terms. -use anyhow::{Context, Result}; -use fs2::FileExt; +use std::io::BufRead as _; + +use anyhow::Context as _; +use fs2::FileExt as _; /// Represents an active, exclusive lock on a directory. /// /// This struct guarantees that the process holds an OS-level file lock /// guarding the specified directory. -pub struct DirLock { +pub(crate) struct DirLock { /// The path to the directory being guarded. - pub path: PathBuf, - // Kept alive to hold the flock + pub(crate) path: std::path::PathBuf, + // Kept alive to hold the flock. _file: std::fs::File, } @@ -22,17 +31,29 @@ impl DirLock { /// the directory itself to avoid platform-specific issues with /// directory locking and to ensure the lock file persists even if /// the directory is cleaned. - pub fn lock_exclusive(path: PathBuf) -> Result { + pub(crate) fn lock_exclusive(path: std::path::PathBuf) -> anyhow::Result { let file = Self::open_lock_file(&path)?; file.lock_exclusive() .with_context(|| format!("Failed to acquire exclusive lock on {:?}", path))?; Ok(Self { path, _file: file }) } - fn open_lock_file(path: &std::path::Path) -> Result { + /// Acquires a shared lock on the specified directory. + /// + /// Multiple processes can hold shared locks simultaneously, but an + /// exclusive lock will block until all shared locks are released. + #[cfg(any(test, feature = "exocrate_tests"))] + pub(crate) fn lock_shared(path: std::path::PathBuf) -> anyhow::Result { + let file = Self::open_lock_file(&path)?; + file.lock_shared() + .with_context(|| format!("Failed to acquire shared lock on {:?}", path))?; + Ok(Self { path, _file: file }) + } + + fn open_lock_file(path: &std::path::Path) -> anyhow::Result { let lock_path = path.join(".lock"); - // Ensure the directory exists + // Ensure the directory exists. if let Some(parent) = lock_path.parent() { std::fs::create_dir_all(parent).with_context(|| { format!("Failed to create directory for lock file: {:?}", parent) @@ -57,3 +78,206 @@ impl DirLock { } } } + +pub(crate) struct ProcessOutput { + pub status: std::process::ExitStatus, + pub stderr_lines: Vec, +} + +/// Spawns a child process, drains its stderr in a background thread, and processes +/// its stdout line-by-line in the main thread while showing a progress spinner. +pub(crate) fn run_command_with_progress( + mut cmd: std::process::Command, + pb: Option, + mut process_stdout_line: F, +) -> anyhow::Result +where + F: FnMut(&str, Option<&indicatif::ProgressBar>) -> anyhow::Result<()>, +{ + cmd.stdout(std::process::Stdio::piped()); + cmd.stderr(std::process::Stdio::piped()); + + let mut child = cmd.spawn().context("Failed to spawn child process")?; + + let stderr_buffer = std::sync::Arc::new(std::sync::Mutex::new(Vec::new())); + let stderr_buffer_clone = std::sync::Arc::clone(&stderr_buffer); + + let mut stderr_thread = None; + if let Some(stderr) = child.stderr.take() { + stderr_thread = Some(std::thread::spawn(move || { + let reader = std::io::BufReader::new(stderr); + for line in reader.lines().map_while(Result::ok) { + stderr_buffer_clone.lock().unwrap().push(line); + } + })); + } + + if let Some(ref p) = pb { + p.enable_steady_tick(std::time::Duration::from_millis(100)); + } + + if let Some(stdout) = child.stdout.take() { + let reader = std::io::BufReader::new(stdout); + for line in reader.lines().map_while(Result::ok) { + process_stdout_line(&line, pb.as_ref())?; + if let Some(ref p) = pb { + p.tick(); + } + } + } + + if let Some(ref p) = pb { + p.finish_and_clear(); + } + + let status = child.wait().context("Failed to wait for child process")?; + + if let Some(thread) = stderr_thread { + let _ = thread.join(); + } + + let stderr_lines = std::sync::Arc::try_unwrap(stderr_buffer).unwrap().into_inner().unwrap(); + + Ok(ProcessOutput { status, stderr_lines }) +} + +/// Performs a lock test action according to the `role` of the current actor. Actors may: +/// +/// - Obtain an exclusive or shared lock for `lock_dir`, +/// - Log actions in `log_file`, +/// - Wait for a signal from `sig_file`. +/// +/// Individual tests compose multiple role-based actions and verify the resulting action log. +#[cfg(feature = "exocrate_tests")] +pub(crate) fn run_test_lock_helper( + role: &str, + lock_dir: &std::path::Path, + log_file: &std::path::Path, + sig_file: &std::path::Path, +) -> anyhow::Result<()> { + use std::io::Write as _; + + let append_log = |msg: &str| -> anyhow::Result<()> { + let mut file = std::fs::OpenOptions::new().create(true).append(true).open(log_file)?; + writeln!(file, "{}", msg)?; + Ok(()) + }; + + let wait_for_sig = || -> anyhow::Result<()> { + let start = std::time::Instant::now(); + while !sig_file.exists() { + if start.elapsed() > std::time::Duration::from_secs(3) { + anyhow::bail!("Timeout waiting for signal file {:?}", sig_file); + } + std::thread::sleep(std::time::Duration::from_millis(50)); + } + Ok(()) + }; + + match role { + "reader-a" => { + let _lock = DirLock::lock_shared(lock_dir.to_path_buf())?; + append_log("SHARED_START_A")?; + wait_for_sig()?; + append_log("SHARED_END_A")?; + } + "reader-b" => { + let _lock = DirLock::lock_shared(lock_dir.to_path_buf())?; + append_log("SHARED_START_B")?; + std::fs::write(sig_file, "")?; + append_log("SHARED_END_B")?; + } + "writer-a" => { + let _lock = DirLock::lock_exclusive(lock_dir.to_path_buf())?; + append_log("EXCLUSIVE_START_A")?; + wait_for_sig()?; + append_log("EXCLUSIVE_END_A")?; + } + "reader-exclusion" => { + std::fs::write(sig_file, "")?; + let _lock = DirLock::lock_shared(lock_dir.to_path_buf())?; + append_log("SHARED_START_B")?; + append_log("SHARED_END_B")?; + } + _ => anyhow::bail!("Unknown test-lock-helper role: {}", role), + } + + Ok(()) +} + +#[cfg(test)] +#[macro_export] +macro_rules! workspace_fixture { + ($dir:expr, { $($path:expr => $content:expr),* $(,)? }) => {{ + let root = $dir.path(); + $( + let file_path = root.join($path); + if let Some(parent) = file_path.parent() { + std::fs::create_dir_all(parent).unwrap(); + } + std::fs::write(&file_path, $content).unwrap(); + )* + }}; +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_dir_lock_exclusive_mutual_exclusion() { + let temp_dir = tempfile::tempdir().unwrap(); + let lock_path = temp_dir.path().to_path_buf(); + + let barrier = std::sync::Arc::new(std::sync::Barrier::new(2)); + let barrier_clone = std::sync::Arc::clone(&barrier); + let lock_path_clone = lock_path.clone(); + + let lock_released = std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)); + let lock_released_clone = std::sync::Arc::clone(&lock_released); + + // Thread A acquires the lock. + let thread_a = std::thread::spawn(move || { + let _lock = DirLock::lock_exclusive(lock_path_clone).expect("Failed to lock exclusive"); + barrier_clone.wait(); // Signal Thread B that A holds the lock. + + // Simulate brief work holding the lock. + std::thread::sleep(std::time::Duration::from_millis(100)); + lock_released_clone.store(true, std::sync::atomic::Ordering::Relaxed); + // _lock drops here, releasing the lock. + }); + + // Thread B waits for Thread A to acquire the lock, then tries to acquire it itself. + let thread_b = std::thread::spawn(move || { + barrier.wait(); // Wait for Thread A to acquire lock. + + // Attempt to acquire lock. This should block until Thread A releases it. + let _lock = DirLock::lock_exclusive(lock_path).expect("Failed to lock exclusive in B"); + + // Assert that B only successfully locked the directory AFTER A released it. + assert!( + lock_released.load(std::sync::atomic::Ordering::Relaxed), + "Thread B acquired lock before Thread A released it!" + ); + }); + + thread_a.join().unwrap(); + thread_b.join().unwrap(); + } + + #[test] + fn test_dir_lock_shared_coexistence() { + let temp_dir = tempfile::tempdir().unwrap(); + let lock_path = temp_dir.path().to_path_buf(); + + // Thread A acquires shared lock. + let lock_a = DirLock::lock_shared(lock_path.clone()).expect("Failed to lock shared"); + + // Thread B should be able to acquire shared lock immediately without blocking. + let lock_b = DirLock::lock_shared(lock_path).expect("Failed to lock shared concurrently"); + + // Both locks are held. + drop(lock_a); + drop(lock_b); + } +} diff --git a/anneal/v2/tests/test_prune_lake_cache.py b/anneal/tests/test_prune_lake_cache.py similarity index 100% rename from anneal/v2/tests/test_prune_lake_cache.py rename to anneal/tests/test_prune_lake_cache.py diff --git a/anneal/v2/tests/test_rewrite_lake_vendor.py b/anneal/tests/test_rewrite_lake_vendor.py similarity index 100% rename from anneal/v2/tests/test_rewrite_lake_vendor.py rename to anneal/tests/test_rewrite_lake_vendor.py diff --git a/anneal/.gitattributes b/anneal/v1/.gitattributes similarity index 100% rename from anneal/.gitattributes rename to anneal/v1/.gitattributes diff --git a/anneal/.gitignore b/anneal/v1/.gitignore similarity index 100% rename from anneal/.gitignore rename to anneal/v1/.gitignore diff --git a/anneal/AGENTS.md b/anneal/v1/AGENTS.md similarity index 100% rename from anneal/AGENTS.md rename to anneal/v1/AGENTS.md diff --git a/anneal/v2/Cargo.lock b/anneal/v1/Cargo.lock similarity index 70% rename from anneal/v2/Cargo.lock rename to anneal/v1/Cargo.lock index b2001ee37e..04bcfa1bdb 100644 --- a/anneal/v2/Cargo.lock +++ b/anneal/v1/Cargo.lock @@ -26,6 +26,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "annotate-snippets" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "710e8eae58854cdc1790fcb56cca04d712a17be849eeb81da2a724bf4bae2bc4" +dependencies = [ + "anstyle", + "unicode-width 0.2.2", +] + [[package]] name = "anstream" version = "1.0.0" @@ -82,6 +92,27 @@ version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +[[package]] +name = "assert_cmd" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a686bbee5efb88a82df0621b236e74d925f470e5445d3220a5648b892ec99c9" +dependencies = [ + "anstyle", + "bstr", + "libc", + "predicates", + "predicates-core", + "predicates-tree", + "wait-timeout", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + [[package]] name = "backtrace" version = "0.3.76" @@ -112,11 +143,26 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bitflags" -version = "2.11.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "block-buffer" @@ -127,11 +173,22 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bstr" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + [[package]] name = "bumpalo" -version = "3.20.3" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytes" @@ -150,12 +207,16 @@ dependencies = [ [[package]] name = "cargo-anneal" -version = "0.1.0-alpha.22" +version = "0.1.0-alpha.24" dependencies = [ "anyhow", - "cargo_metadata", + "assert_cmd", + "cargo_metadata 0.23.1", "clap", "clap-cargo", + "console", + "dashmap", + "datatest-stable", "env_logger", "exocrate", "fs2", @@ -163,26 +224,57 @@ dependencies = [ "log", "miette", "pathdiff", + "predicates", + "proc-macro2", + "quote", "rayon", + "regex", "serde", "serde_json", "sha2", + "similar", + "strip-ansi-escapes", + "syn", "tempfile", - "thiserror", - "toml_const", + "thiserror 2.0.18", + "toml", + "ui_test", "walkdir", ] [[package]] name = "cargo-platform" -version = "0.3.3" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0061da739915fae12ea00e16397555ed4371a6bb285431aab930f61b0aa4ba" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87a0c0e6148f11f01f32650a2ea02d532b2ad4e81d8bd41e6e565b5adc5e6082" dependencies = [ "serde", "serde_core", ] +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform 0.1.9", + "semver", + "serde", + "serde_json", + "thiserror 1.0.69", +] + [[package]] name = "cargo_metadata" version = "0.23.1" @@ -190,18 +282,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef987d17b0a113becdd19d3d0022d04d7ef41f9efe4f3fb63ac44ba61df3ade9" dependencies = [ "camino", - "cargo-platform", + "cargo-platform 0.3.2", "semver", "serde", "serde_json", - "thiserror", + "thiserror 2.0.18", ] [[package]] name = "cc" -version = "1.2.62" +version = "1.2.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283" dependencies = [ "find-msvc-tools", "jobserver", @@ -217,9 +309,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "clap" -version = "4.6.1" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" dependencies = [ "clap_builder", "clap_derive", @@ -232,7 +324,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "936551935c8258754bb8216aec040957d261f977303754b9bf1a213518388006" dependencies = [ "anstyle", - "cargo_metadata", + "cargo_metadata 0.23.1", "clap", "serde", "serde_json", @@ -252,9 +344,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.1" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" dependencies = [ "heck", "proc-macro2", @@ -268,12 +360,54 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +[[package]] +name = "color-eyre" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5920befb47832a6d61ee3a3a846565cfa39b331331e68a3b1d1116630f2f26d" +dependencies = [ + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", +] + +[[package]] +name = "color-spantrace" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8b88ea9df13354b55bc7234ebcce36e6ef896aca2e42a15de9e10edce01b427" +dependencies = [ + "once_cell", + "owo-colors", + "tracing-core", + "tracing-error", +] + [[package]] name = "colorchoice" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" +[[package]] +name = "colored" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "comma" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55b672471b4e9f9e95499ea597ff64941a309b2cdbffcc46f2cc5e2d971fd335" + [[package]] name = "console" version = "0.16.3" @@ -304,6 +438,15 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -339,6 +482,38 @@ dependencies = [ "typenum", ] +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "datatest-stable" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a867d7322eb69cf3a68a5426387a25b45cb3b9c5ee41023ee6cea92e2afadd82" +dependencies = [ + "camino", + "fancy-regex", + "libtest-mimic", + "walkdir", +] + +[[package]] +name = "difflib" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" + [[package]] name = "digest" version = "0.10.7" @@ -370,11 +545,19 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "doc_gen" +version = "0.1.0" +dependencies = [ + "tree-sitter", + "tree-sitter-lean4", +] + [[package]] name = "either" -version = "1.16.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "encode_unicode" @@ -421,6 +604,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "escape8259" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5692dd7b5a1978a5aeb0ce83b7655c58ca8efdcb79d21036ea249da95afec2c6" + [[package]] name = "exocrate" version = "0.1.0" @@ -436,20 +625,42 @@ dependencies = [ "zstd", ] +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fancy-regex" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298" +dependencies = [ + "bit-set", + "regex-automata", + "regex-syntax", +] + [[package]] name = "fastrand" -version = "2.4.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "filetime" -version = "0.2.29" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" +checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" dependencies = [ "cfg-if", "libc", + "libredox", ] [[package]] @@ -468,6 +679,15 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "float-cmp" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" +dependencies = [ + "num-traits", +] + [[package]] name = "foldhash" version = "0.1.5" @@ -484,30 +704,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "futures-core" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - -[[package]] -name = "futures-task" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" - -[[package]] -name = "futures-util" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" -dependencies = [ - "futures-core", - "futures-task", - "pin-project-lite", - "slab", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -560,6 +756,12 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + [[package]] name = "hashbrown" version = "0.15.5" @@ -571,9 +773,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.17.1" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" [[package]] name = "heck" @@ -583,9 +785,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "http" -version = "1.4.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", "itoa", @@ -603,14 +805,20 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" +[[package]] +name = "indenter" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" + [[package]] name = "indexmap" -version = "2.14.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff" dependencies = [ "equivalent", - "hashbrown 0.17.1", + "hashbrown 0.16.1", "serde", "serde_core", ] @@ -649,9 +857,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.27" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "392c70591e8749fe235ddaf513e6f58b26bce3dcc16524cecc8936f75afa161e" +checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" dependencies = [ "jiff-static", "log", @@ -662,9 +870,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.27" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b605b0c050d845fc355bb11eb3f9a8deddc218ea60c76e61aa1f2adfb2c96a" +checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" dependencies = [ "proc-macro2", "quote", @@ -683,35 +891,60 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.99" +version = "0.3.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" dependencies = [ - "cfg-if", - "futures-util", "once_cell", "wasm-bindgen", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "leb128fmt" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" +[[package]] +name = "levenshtein" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" + [[package]] name = "libc" -version = "0.2.186" +version = "0.2.184" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" [[package]] name = "libredox" -version = "0.1.17" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" +checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" dependencies = [ + "bitflags", "libc", + "plain", + "redox_syscall 0.7.3", +] + +[[package]] +name = "libtest-mimic" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e6ba06f0ade6e504aff834d7c34298e5155c6baca353cc6a4aaff2f9fd7f33" +dependencies = [ + "anstream", + "anstyle", + "clap", + "escape8259", ] [[package]] @@ -720,17 +953,26 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + [[package]] name = "log" -version = "0.4.30" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "miette" @@ -772,6 +1014,21 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "normalize-line-endings" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + [[package]] name = "object" version = "0.37.3" @@ -805,6 +1062,19 @@ version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.18", + "smallvec", + "windows-link", +] + [[package]] name = "pathdiff" version = "0.2.3" @@ -818,73 +1088,75 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] -name = "phf" -version = "0.13.1" +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkg-config" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" -dependencies = [ - "phf_macros", - "phf_shared", - "serde", -] +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] -name = "phf_generator" -version = "0.13.1" +name = "plain" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" -dependencies = [ - "fastrand", - "phf_shared", -] +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] -name = "phf_macros" -version = "0.13.1" +name = "portable-atomic" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn", -] +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] -name = "phf_shared" -version = "0.13.1" +name = "portable-atomic-util" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" dependencies = [ - "siphasher", + "portable-atomic", ] [[package]] -name = "pin-project-lite" -version = "0.2.17" +name = "predicates" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" +checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" +dependencies = [ + "anstyle", + "difflib", + "float-cmp", + "normalize-line-endings", + "predicates-core", + "regex", +] [[package]] -name = "pkg-config" -version = "0.3.33" +name = "predicates-core" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" [[package]] -name = "portable-atomic" -version = "1.13.1" +name = "predicates-tree" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" +dependencies = [ + "predicates-core", + "termtree", +] [[package]] -name = "portable-atomic-util" -version = "0.2.7" +name = "prettydiff" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +checksum = "ac17546d82912e64874e3d5b40681ce32eac4e5834344f51efcf689ff1550a65" dependencies = [ - "portable-atomic", + "owo-colors", ] [[package]] @@ -929,9 +1201,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rayon" -version = "1.12.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -947,6 +1219,24 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_syscall" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_users" version = "0.5.2" @@ -955,7 +1245,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", - "thiserror", + "thiserror 2.0.18", ] [[package]] @@ -1007,6 +1297,27 @@ version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustfix" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fa69b198d894d84e23afde8e9ab2af4400b2cba20d6bf2b428a8b01c222c5a" +dependencies = [ + "serde", + "serde_json", + "thiserror 1.0.69", + "tracing", +] + [[package]] name = "rustix" version = "1.1.4" @@ -1022,9 +1333,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.40" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "log", "once_cell", @@ -1037,9 +1348,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "zeroize", ] @@ -1070,11 +1381,17 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "semver" -version = "1.0.28" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" dependencies = [ "serde", "serde_core", @@ -1112,10 +1429,11 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ + "indexmap", "itoa", "memchr", "serde", @@ -1125,11 +1443,11 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.1.1" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ - "serde_core", + "serde", ] [[package]] @@ -1149,6 +1467,15 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbb83f144cbda94be5d2278400eee9e0a03eb68b5504349943655b7b1603c4af" +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "shlex" version = "1.3.0" @@ -1162,16 +1489,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" [[package]] -name = "siphasher" -version = "1.0.3" +name = "similar" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "spanned" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4b0c055fde758f086eb4a6e73410247df8a3837fd606d2caeeaf72aa566d" +dependencies = [ + "anyhow", + "bstr", + "color-eyre", +] + +[[package]] +name = "streaming-iterator" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" +checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" [[package]] -name = "slab" -version = "0.4.12" +name = "strip-ansi-escapes" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" +checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025" +dependencies = [ + "vte", +] [[package]] name = "strsim" @@ -1251,6 +1604,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "termtree" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" + [[package]] name = "textwrap" version = "0.16.2" @@ -1261,13 +1620,33 @@ dependencies = [ "unicode-width 0.2.2", ] +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + [[package]] name = "thiserror" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.18", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1281,74 +1660,158 @@ dependencies = [ "syn", ] +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + [[package]] name = "toml" -version = "0.9.12+spec-1.1.0" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ - "indexmap", - "serde_core", + "serde", "serde_spanned", "toml_datetime", - "toml_parser", - "toml_writer", - "winnow 0.7.15", + "toml_edit", ] [[package]] -name = "toml_const" -version = "1.3.0" +name = "toml_datetime" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389864cf501669b741746e9bc35e66c67f2b80266482ad04c452e2410433f205" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ - "phf", - "toml", - "toml_const_macros", + "serde", ] [[package]] -name = "toml_const_macros" -version = "1.3.0" +name = "toml_edit" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3e0f202adfb96027640ad9786a0657775414482cfd840c19e9957ada8cfbbfd" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap", - "proc-macro2", - "quote", - "syn", - "toml", + "serde", + "serde_spanned", + "toml_datetime", + "toml_write", + "winnow", ] [[package]] -name = "toml_datetime" -version = "0.7.5+spec-1.1.0" +name = "toml_write" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ - "serde_core", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-error" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" +dependencies = [ + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +dependencies = [ + "sharded-slab", + "thread_local", + "tracing-core", ] [[package]] -name = "toml_parser" -version = "1.1.2+spec-1.1.0" +name = "tree-sitter" +version = "0.25.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "78f873475d258561b06f1c595d93308a7ed124d9977cb26b148c2084a4a3cc87" dependencies = [ - "winnow 1.0.3", + "cc", + "regex", + "regex-syntax", + "serde_json", + "streaming-iterator", + "tree-sitter-language", ] [[package]] -name = "toml_writer" -version = "1.1.1+spec-1.1.0" +name = "tree-sitter-language" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "009994f150cc0cd50ff54917d5bc8bffe8cad10ca10d81c34da2ec421ae61782" + +[[package]] +name = "tree-sitter-lean4" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d274c5b559d3a46a0d5d200fc0593fa3fda035304fa794d5d4a760fbf69c2a5e" +dependencies = [ + "cc", + "tree-sitter", +] [[package]] name = "typenum" -version = "1.20.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "ui_test" +version = "0.30.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ada249620d81f010b9a1472b63a5077ac7c722dd0f4bacf6528b313d0b8c15d8" +dependencies = [ + "annotate-snippets", + "anyhow", + "bstr", + "cargo-platform 0.1.9", + "cargo_metadata 0.18.1", + "color-eyre", + "colored", + "comma", + "crossbeam-channel", + "indicatif", + "levenshtein", + "prettydiff", + "regex", + "rustc_version", + "rustfix", + "serde", + "serde_json", + "spanned", +] [[package]] name = "unicode-ident" @@ -1439,12 +1902,36 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vte" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077" +dependencies = [ + "memchr", +] + +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + [[package]] name = "walkdir" version = "2.5.0" @@ -1463,11 +1950,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ - "wit-bindgen 0.57.1", + "wit-bindgen", ] [[package]] @@ -1476,14 +1963,14 @@ version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.122" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" +checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" dependencies = [ "cfg-if", "once_cell", @@ -1494,9 +1981,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.122" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" +checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1504,9 +1991,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.122" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" +checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" dependencies = [ "bumpalo", "proc-macro2", @@ -1517,9 +2004,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.122" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" +checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" dependencies = [ "unicode-ident", ] @@ -1570,9 +2057,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "1.0.7" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" dependencies = [ "rustls-pki-types", ] @@ -1701,12 +2188,9 @@ name = "winnow" version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" - -[[package]] -name = "winnow" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +dependencies = [ + "memchr", +] [[package]] name = "wit-bindgen" @@ -1717,12 +2201,6 @@ dependencies = [ "wit-bindgen-rust-macro", ] -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - [[package]] name = "wit-bindgen-core" version = "0.51.0" diff --git a/anneal/v1/Cargo.toml b/anneal/v1/Cargo.toml new file mode 100644 index 0000000000..c56b451beb --- /dev/null +++ b/anneal/v1/Cargo.toml @@ -0,0 +1,113 @@ +[workspace] +members = [".", "tools/doc_gen"] + +[package] +name = "cargo-anneal" +edition = "2024" +version = "0.1.0-alpha.24" +description = "Formally verify that your safety comments are correct." +categories = [ + "development-tools::cargo-plugins", + "development-tools::testing", + "compilers", + "mathematics", + "security", +] +keywords = ["verification", "cargo", "plugin", "unsafe", "lean"] +authors = ["Joshua Liebow-Feeser "] +license = "BSD-2-Clause OR Apache-2.0 OR MIT" +repository = "https://github.com/google/zerocopy/tree/main/anneal/v1" +publish = true + +exclude = [".*", "testdata"] + +# FIXME: Replace these placeholder archive URLs and hashes before publishing +# this crate; `cargo anneal setup` uses this metadata by default when callers +# do not provide a local archive. +[package.metadata.exocrate.linux.x86_64] +sha256 = "d3d7bbcdfd2645f10e3e64a85b3e848197033992337c969a45576a3d0ec517d9" +url = "https://github.com/google/zerocopy/releases/download/anneal-toolchains-v0.1.0-alpha.24-27079750833-09497849a10d/anneal-toolchain-linux-x86_64.tar.zst" + +[package.metadata.exocrate.macos.x86_64] +sha256 = "1252f15262d11f49795c8ed182a8b47f2ae4e627d90babb2f10636349f686438" +url = "https://github.com/google/zerocopy/releases/download/anneal-toolchains-v0.1.0-alpha.24-27079750833-09497849a10d/anneal-toolchain-macos-x86_64.tar.zst" + +[package.metadata.exocrate.linux.aarch64] +sha256 = "a9c496fcf21670b2306d02722b9afcf375149315e929d53b6a7585d4daa19710" +url = "https://github.com/google/zerocopy/releases/download/anneal-toolchains-v0.1.0-alpha.24-27079750833-09497849a10d/anneal-toolchain-linux-aarch64.tar.zst" + +[package.metadata.exocrate.macos.aarch64] +sha256 = "b4e0a5b420eb441e37564c365f06c215f61a3b825fc3df37293da7c3010d2b81" +url = "https://github.com/google/zerocopy/releases/download/anneal-toolchains-v0.1.0-alpha.24-27079750833-09497849a10d/anneal-toolchain-macos-aarch64.tar.zst" + +[dependencies] +anyhow = "1.0.102" +cargo_metadata = "0.23.1" +clap = { version = "4.6.0", features = ["derive"] } +clap-cargo = { version = "0.18.3", features = ["cargo_metadata"] } +dashmap = "6.1.0" +env_logger = "0.11.10" +log = "0.4.29" +miette = { version = "7.6.0", features = ["derive", "fancy"] } +proc-macro2 = { version = "1.0.106", features = ["span-locations"] } +rayon = "1.11.0" +serde = { version = "1.0.228", features = ["derive"] } +serde_json = "1.0.149" +syn = { version = "2.0.117", features = [ + "full", + "visit", + "extra-traits", + "parsing", + "printing", +] } +quote = "1.0" +thiserror = "2.0.18" +walkdir = "2.5.0" +indicatif = { version = "0.18.4", features = ["improved_unicode"] } +console = "0.16.3" +exocrate = { path = "../../exocrate" } +sha2 = "0.10" +fs2 = "0.4" +pathdiff = "0.2.3" +toml = "0.8" +tempfile = "3.27.0" + +[build-dependencies] +sha2 = "0.10" +toml = "0.8" + +[dev-dependencies] +syn = { version = "2.0.117", features = [ + "printing", + "full", + "visit", + "extra-traits", + "parsing", +] } +proc-macro2 = { version = "1.0.106", features = ["span-locations"] } +ui_test = "0.30.4" +assert_cmd = "2.2.0" + +predicates = "3.1.4" + +datatest-stable = "0.3.3" +serde = { version = "1.0", features = ["derive"] } +toml = "0.8" +regex = "1.0" +strip-ansi-escapes = "0.2.1" +similar = "2.7.0" + +[package.metadata.build_rs] + +# The commit hash of the Aeneas repository to use. +# +# FIXME: Add a CI step to verify that this commit exists and matches the +# toolchain version. +aeneas_rev = "42c0e90dacf486f7d3ed5b6cde3a9a81f04915a4" + +# The Lean toolchain version to use. This must match the version of Lean used +# by Aeneas in the `lean-toolchain` file in the commit above. +lean_toolchain = "leanprover/lean4:v4.30.0-rc2" +[[test]] +name = "integration" +harness = false diff --git a/anneal/Dockerfile b/anneal/v1/Dockerfile similarity index 94% rename from anneal/Dockerfile rename to anneal/v1/Dockerfile index 37a9a03d84..6a0c6482c9 100644 --- a/anneal/Dockerfile +++ b/anneal/v1/Dockerfile @@ -1,6 +1,6 @@ FROM python:3.11-slim AS extractor WORKDIR /app -COPY anneal/Cargo.toml ./ +COPY anneal/v1/Cargo.toml ./ # Remove the [workspace] section so it can be built as a standalone package. # Also inject tree-sitter dependencies used by doc_gen to cache them too. RUN sed '1,2d' Cargo.toml > Cargo.toml.no_workspace && \ @@ -51,17 +51,17 @@ ENV ANNEAL_INTEGRATION_TARGET_DIR=/cache/anneal_target # via a volume mount, causing dependencies to be rebuilt once in the volume. # This double-build is intentional to support both environments efficiently. ENV CARGO_TARGET_DIR=/opt/anneal_target -WORKDIR /workspace/anneal +WORKDIR /workspace/anneal/v1 # Copy the workspace configuration (without workspace section) and lockfile. COPY --from=extractor --chown=anneal:anneal /app/Cargo.toml.no_workspace ./Cargo.toml -COPY --chown=anneal:anneal anneal/Cargo.lock ./ +COPY --chown=anneal:anneal anneal/v1/Cargo.lock ./ # Copy source files needed to compile dependency-heavy modules. -COPY --chown=anneal:anneal anneal/src/setup.rs ./src/ +COPY --chown=anneal:anneal anneal/v1/src/setup.rs ./src/ COPY --chown=anneal:anneal exocrate/Cargo.toml /workspace/exocrate/Cargo.toml COPY --chown=anneal:anneal exocrate/src /workspace/exocrate/src -COPY --chown=anneal:anneal anneal/build.rs ./ +COPY --chown=anneal:anneal anneal/v1/build.rs ./ # Create a minimal `main.rs` and a dummy test file. # This allows us to build dependencies in the image without copying the full diff --git a/anneal/v1/LICENSE-APACHE b/anneal/v1/LICENSE-APACHE new file mode 120000 index 0000000000..1cd601d0a3 --- /dev/null +++ b/anneal/v1/LICENSE-APACHE @@ -0,0 +1 @@ +../../LICENSE-APACHE \ No newline at end of file diff --git a/anneal/v1/LICENSE-BSD b/anneal/v1/LICENSE-BSD new file mode 120000 index 0000000000..0af6dcc0d3 --- /dev/null +++ b/anneal/v1/LICENSE-BSD @@ -0,0 +1 @@ +../../LICENSE-BSD \ No newline at end of file diff --git a/anneal/v1/LICENSE-MIT b/anneal/v1/LICENSE-MIT new file mode 120000 index 0000000000..b2cfbdc7b0 --- /dev/null +++ b/anneal/v1/LICENSE-MIT @@ -0,0 +1 @@ +../../LICENSE-MIT \ No newline at end of file diff --git a/anneal/README.md b/anneal/v1/README.md similarity index 100% rename from anneal/README.md rename to anneal/v1/README.md diff --git a/anneal/build.rs b/anneal/v1/build.rs similarity index 100% rename from anneal/build.rs rename to anneal/v1/build.rs diff --git a/anneal/docker.sh b/anneal/v1/docker.sh similarity index 97% rename from anneal/docker.sh rename to anneal/v1/docker.sh index d0d9ae3085..740f788df6 100755 --- a/anneal/docker.sh +++ b/anneal/v1/docker.sh @@ -36,10 +36,10 @@ fi # Resolve the directory paths required to build the image and mount the # workspace volume into the container. The Docker build context is the repo -# worktree root so the Dockerfile can copy both `anneal/` and the root-level +# worktree root so the Dockerfile can copy both `anneal/v1/` and the root-level # `exocrate/` crate. ANNEAL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" -WORKTREE_DIR="$(cd "$ANNEAL_DIR/.." >/dev/null 2>&1 && pwd)" +WORKTREE_DIR="$(cd "$ANNEAL_DIR/../.." >/dev/null 2>&1 && pwd)" # To avoid pollution between different git worktrees, we generate a unique # worktree ID and store it in a file. This ensures each worktree gets its own # isolated cache volume and Docker image tag. @@ -187,7 +187,7 @@ done # Determine the user's current working directory relative to the repository. # This path is passed to Docker so that the container executes the requested # command in the same relative directory as the caller. -REL_PATH=$(realpath --relative-to="$WORKTREE_DIR" "$(pwd)" 2>/dev/null || echo "anneal") +REL_PATH=$(realpath --relative-to="$WORKTREE_DIR" "$(pwd)" 2>/dev/null || echo "anneal/v1") WORKDIR="/workspace/$REL_PATH" exec "${DOCKER_CMD[@]}" run "${DOCKER_FLAGS[@]}" \ diff --git a/anneal/docs/agent/01_philosophy_and_pipeline.md b/anneal/v1/docs/agent/01_philosophy_and_pipeline.md similarity index 100% rename from anneal/docs/agent/01_philosophy_and_pipeline.md rename to anneal/v1/docs/agent/01_philosophy_and_pipeline.md diff --git a/anneal/docs/agent/02_rust_to_lean_mapping.md b/anneal/v1/docs/agent/02_rust_to_lean_mapping.md similarity index 100% rename from anneal/docs/agent/02_rust_to_lean_mapping.md rename to anneal/v1/docs/agent/02_rust_to_lean_mapping.md diff --git a/anneal/docs/agent/03_memory_model.md b/anneal/v1/docs/agent/03_memory_model.md similarity index 100% rename from anneal/docs/agent/03_memory_model.md rename to anneal/v1/docs/agent/03_memory_model.md diff --git a/anneal/docs/agent/04_specifications_and_syntax.md b/anneal/v1/docs/agent/04_specifications_and_syntax.md similarity index 100% rename from anneal/docs/agent/04_specifications_and_syntax.md rename to anneal/v1/docs/agent/04_specifications_and_syntax.md diff --git a/anneal/docs/agent/05_proof_architecture.md b/anneal/v1/docs/agent/05_proof_architecture.md similarity index 100% rename from anneal/docs/agent/05_proof_architecture.md rename to anneal/v1/docs/agent/05_proof_architecture.md diff --git a/anneal/docs/agent/06_tactics_and_tooling.md b/anneal/v1/docs/agent/06_tactics_and_tooling.md similarity index 100% rename from anneal/docs/agent/06_tactics_and_tooling.md rename to anneal/v1/docs/agent/06_tactics_and_tooling.md diff --git a/anneal/docs/agent/07_workflow.md b/anneal/v1/docs/agent/07_workflow.md similarity index 100% rename from anneal/docs/agent/07_workflow.md rename to anneal/v1/docs/agent/07_workflow.md diff --git a/anneal/docs/design/design.md b/anneal/v1/docs/design/design.md similarity index 100% rename from anneal/docs/design/design.md rename to anneal/v1/docs/design/design.md diff --git a/anneal/docs/design/named_bounds.md b/anneal/v1/docs/design/named_bounds.md similarity index 100% rename from anneal/docs/design/named_bounds.md rename to anneal/v1/docs/design/named_bounds.md diff --git a/anneal/docs/images/logo.svg b/anneal/v1/docs/images/logo.svg similarity index 100% rename from anneal/docs/images/logo.svg rename to anneal/v1/docs/images/logo.svg diff --git a/anneal/examples/abs.rs b/anneal/v1/examples/abs.rs similarity index 100% rename from anneal/examples/abs.rs rename to anneal/v1/examples/abs.rs diff --git a/anneal/examples/anatomy.rs b/anneal/v1/examples/anatomy.rs similarity index 100% rename from anneal/examples/anatomy.rs rename to anneal/v1/examples/anatomy.rs diff --git a/anneal/examples/checked_add.rs b/anneal/v1/examples/checked_add.rs similarity index 100% rename from anneal/examples/checked_add.rs rename to anneal/v1/examples/checked_add.rs diff --git a/anneal/examples/const_generics.rs b/anneal/v1/examples/const_generics.rs similarity index 100% rename from anneal/examples/const_generics.rs rename to anneal/v1/examples/const_generics.rs diff --git a/anneal/examples/design_doc.rs b/anneal/v1/examples/design_doc.rs similarity index 100% rename from anneal/examples/design_doc.rs rename to anneal/v1/examples/design_doc.rs diff --git a/anneal/examples/linked_list.rs b/anneal/v1/examples/linked_list.rs similarity index 100% rename from anneal/examples/linked_list.rs rename to anneal/v1/examples/linked_list.rs diff --git a/anneal/examples/namespaces.rs b/anneal/v1/examples/namespaces.rs similarity index 100% rename from anneal/examples/namespaces.rs rename to anneal/v1/examples/namespaces.rs diff --git a/anneal/examples/never_type.rs b/anneal/v1/examples/never_type.rs similarity index 100% rename from anneal/examples/never_type.rs rename to anneal/v1/examples/never_type.rs diff --git a/anneal/examples/nopanic.rs b/anneal/v1/examples/nopanic.rs similarity index 100% rename from anneal/examples/nopanic.rs rename to anneal/v1/examples/nopanic.rs diff --git a/anneal/examples/positive_usize.rs b/anneal/v1/examples/positive_usize.rs similarity index 100% rename from anneal/examples/positive_usize.rs rename to anneal/v1/examples/positive_usize.rs diff --git a/anneal/examples/ptr_concat.rs b/anneal/v1/examples/ptr_concat.rs similarity index 100% rename from anneal/examples/ptr_concat.rs rename to anneal/v1/examples/ptr_concat.rs diff --git a/anneal/examples/size_of_align_of.rs b/anneal/v1/examples/size_of_align_of.rs similarity index 100% rename from anneal/examples/size_of_align_of.rs rename to anneal/v1/examples/size_of_align_of.rs diff --git a/anneal/examples/swap.rs b/anneal/v1/examples/swap.rs similarity index 100% rename from anneal/examples/swap.rs rename to anneal/v1/examples/swap.rs diff --git a/anneal/examples/unchecked_get.rs b/anneal/v1/examples/unchecked_get.rs similarity index 100% rename from anneal/examples/unchecked_get.rs rename to anneal/v1/examples/unchecked_get.rs diff --git a/anneal/examples/update_max.rs b/anneal/v1/examples/update_max.rs similarity index 100% rename from anneal/examples/update_max.rs rename to anneal/v1/examples/update_max.rs diff --git a/anneal/llms-full.txt b/anneal/v1/llms-full.txt similarity index 100% rename from anneal/llms-full.txt rename to anneal/v1/llms-full.txt diff --git a/anneal/llms.txt b/anneal/v1/llms.txt similarity index 100% rename from anneal/llms.txt rename to anneal/v1/llms.txt diff --git a/anneal/src/Anneal.lean b/anneal/v1/src/Anneal.lean similarity index 100% rename from anneal/src/Anneal.lean rename to anneal/v1/src/Anneal.lean diff --git a/anneal/src/aeneas.rs b/anneal/v1/src/aeneas.rs similarity index 100% rename from anneal/src/aeneas.rs rename to anneal/v1/src/aeneas.rs diff --git a/anneal/src/charon.rs b/anneal/v1/src/charon.rs similarity index 100% rename from anneal/src/charon.rs rename to anneal/v1/src/charon.rs diff --git a/anneal/src/diagnostics.rs b/anneal/v1/src/diagnostics.rs similarity index 100% rename from anneal/src/diagnostics.rs rename to anneal/v1/src/diagnostics.rs diff --git a/anneal/src/errors.rs b/anneal/v1/src/errors.rs similarity index 100% rename from anneal/src/errors.rs rename to anneal/v1/src/errors.rs diff --git a/anneal/src/generate.rs b/anneal/v1/src/generate.rs similarity index 100% rename from anneal/src/generate.rs rename to anneal/v1/src/generate.rs diff --git a/anneal/v1/src/main.rs b/anneal/v1/src/main.rs new file mode 100644 index 0000000000..3d363b977d --- /dev/null +++ b/anneal/v1/src/main.rs @@ -0,0 +1,184 @@ +mod aeneas; +mod charon; +mod diagnostics; +mod errors; +mod generate; +mod parse; +mod resolve; +mod scanner; +mod validate; + +mod setup; +mod ui_test_shim; +mod util; + +use clap::Parser; + +/// Anneal: A Literate Verification Toolchain +#[derive(Parser, Debug)] +#[command(name = "cargo-anneal", version, about, long_about = None)] +struct Cli { + #[command(subcommand)] + command: Commands, +} + +#[derive(clap::Subcommand, Debug)] +enum Commands { + /// Verify a crate + Verify(resolve::Args), + /// Setup Anneal dependencies + Setup(resolve::SetupArgs), + /// Expand a crate's Lean output + Expand(ExpandArgs), + /// Generate Lean workspace and print paths without building + Generate(resolve::Args), + #[command(hide = true)] + ToolchainPath, +} + +#[derive(clap::ValueEnum, Clone, Debug, Default, PartialEq)] +pub enum EmitFormat { + #[default] + All, + Anneal, + Aeneas, +} + +#[derive(Parser, Debug)] +pub struct ExpandArgs { + #[command(flatten)] + pub resolve_args: resolve::Args, + + /// Which tool's generated Lean code to output + #[arg(long, default_value_t, value_enum)] + pub emit: EmitFormat, +} + +fn main() -> anyhow::Result<()> { + // Suppressing timestamps removes a source of nondeterminism that is + // difficult to work around in integration tests. + env_logger::builder().format_timestamp(None).init(); + + if std::env::var("ANNEAL_UI_TEST_MODE").is_ok() { + ui_test_shim::run(); + return Ok(()); + } + + let mut args_iter = std::env::args_os().peekable(); + let bin_name = args_iter.next().unwrap_or_else(|| "cargo-anneal".into()); + // If we're being run as a cargo plugin, the second argument will be "anneal". + if args_iter.peek().is_some_and(|arg| arg == "anneal") { + args_iter.next(); + } + let args = Cli::parse_from(std::iter::once(bin_name).chain(args_iter)); + + match args.command { + Commands::Verify(resolve_args) => { + prepare_and_run(&resolve_args, |locked_roots, packages| { + aeneas::verify_lean_workspace(locked_roots, packages) + })?; + } + Commands::Generate(resolve_args) => { + prepare_and_run(&resolve_args, |locked_roots, packages| { + aeneas::generate_lean_workspace(locked_roots, packages)?; + let lean_root = locked_roots.lean_root(); + let toolchain = setup::Toolchain::resolve()?; + println!("Lean workspace generated at: {}", lean_root.display()); + println!(); + println!("To manually build and experiment:"); + println!(" 1. cd {}", lean_root.display()); + println!( + " 2. LAKE_CACHE_DIR={} {} --keep-toolchain build", + toolchain.cache_dir().display(), + toolchain.lean_bin().join("lake").display() + ); + Ok(()) + })?; + } + Commands::Setup(args) => { + setup::run_setup(setup::SetupArgs { local_archive: args.local_archive })?; + } + Commands::ToolchainPath => { + let toolchain = setup::Toolchain::resolve()?; + println!("{}", toolchain.bin_dir().display()); + } + Commands::Expand(expand_args) => { + prepare_and_run(&expand_args.resolve_args, |locked_roots, packages| { + let lean_generated_root = locked_roots.lean_generated_root(); + + for artifact in packages { + if artifact.start_from.is_empty() { + continue; + } + + let slug = artifact.artifact_slug(); + let output_dir = lean_generated_root.join(&slug); + + let emit_all = expand_args.emit == EmitFormat::All; + let emit_anneal = emit_all || expand_args.emit == EmitFormat::Anneal; + let emit_aeneas = emit_all || expand_args.emit == EmitFormat::Aeneas; + + println!("=== Lean expansion for: {} ===", artifact.name.target_name); + + if emit_aeneas { + println!("--- Aeneas ---"); + // Read Aeneas outputs from disk + let types_path = output_dir.join("Types.lean"); + let types_ext_path = output_dir.join("TypesExternal.lean"); + let funs_path = output_dir.join("Funs.lean"); + let funs_ext_path = output_dir.join("FunsExternal.lean"); + + if types_path.exists() { + println!("{}", std::fs::read_to_string(&types_path)?); + } + if types_ext_path.exists() { + println!("{}", std::fs::read_to_string(&types_ext_path)?); + } + if funs_path.exists() { + println!("{}", std::fs::read_to_string(&funs_path)?); + } + if funs_ext_path.exists() { + println!("{}", std::fs::read_to_string(&funs_ext_path)?); + } + } + + if emit_anneal { + println!("--- Anneal ---"); + let generated = generate::generate_artifact(artifact); + println!("{}", generated.code); + } + } + + Ok(()) + })?; + } + } + + Ok(()) +} + +fn prepare_and_run(resolve_args: &resolve::Args, f: F) -> anyhow::Result> +where + F: FnOnce(&resolve::LockedRoots, &[scanner::AnnealArtifact]) -> anyhow::Result, +{ + let roots = resolve::resolve_roots(resolve_args)?; + + let packages = scanner::scan_workspace(&roots)?; + if packages.is_empty() { + log::warn!( + "No Anneal annotations (/// ```lean ...) found in the selected targets. Nothing to verify." + ); + return Ok(None); + } + + let locked_roots = roots.lock_run_root()?; + validate::validate_artifacts( + &packages, + resolve_args.allow_sorry, + resolve_args.unsound_allow_is_valid, + )?; + charon::run_charon(resolve_args, &locked_roots, &packages)?; + aeneas::run_aeneas(&locked_roots, &packages, resolve_args)?; + + Ok(Some(f(&locked_roots, &packages)?)) +} diff --git a/anneal/src/parse/attr.rs b/anneal/v1/src/parse/attr.rs similarity index 100% rename from anneal/src/parse/attr.rs rename to anneal/v1/src/parse/attr.rs diff --git a/anneal/src/parse/hkd.rs b/anneal/v1/src/parse/hkd.rs similarity index 100% rename from anneal/src/parse/hkd.rs rename to anneal/v1/src/parse/hkd.rs diff --git a/anneal/src/parse/mod.rs b/anneal/v1/src/parse/mod.rs similarity index 100% rename from anneal/src/parse/mod.rs rename to anneal/v1/src/parse/mod.rs diff --git a/anneal/src/resolve.rs b/anneal/v1/src/resolve.rs similarity index 100% rename from anneal/src/resolve.rs rename to anneal/v1/src/resolve.rs diff --git a/anneal/src/scanner.rs b/anneal/v1/src/scanner.rs similarity index 100% rename from anneal/src/scanner.rs rename to anneal/v1/src/scanner.rs diff --git a/anneal/src/setup.rs b/anneal/v1/src/setup.rs similarity index 100% rename from anneal/src/setup.rs rename to anneal/v1/src/setup.rs diff --git a/anneal/src/ui_test_shim.rs b/anneal/v1/src/ui_test_shim.rs similarity index 100% rename from anneal/src/ui_test_shim.rs rename to anneal/v1/src/ui_test_shim.rs diff --git a/anneal/v1/src/util.rs b/anneal/v1/src/util.rs new file mode 100644 index 0000000000..fe085b37dc --- /dev/null +++ b/anneal/v1/src/util.rs @@ -0,0 +1,59 @@ +use std::path::PathBuf; + +use anyhow::{Context, Result}; +use fs2::FileExt; + +/// Represents an active, exclusive lock on a directory. +/// +/// This struct guarantees that the process holds an OS-level file lock +/// guarding the specified directory. +pub struct DirLock { + /// The path to the directory being guarded. + pub path: PathBuf, + // Kept alive to hold the flock + _file: std::fs::File, +} + +impl DirLock { + /// Acquires an exclusive lock on the specified directory. + /// + /// This function blocks until the lock can be acquired. We use a + /// separate `.lock` file within the directory rather than locking + /// the directory itself to avoid platform-specific issues with + /// directory locking and to ensure the lock file persists even if + /// the directory is cleaned. + pub fn lock_exclusive(path: PathBuf) -> Result { + let file = Self::open_lock_file(&path)?; + file.lock_exclusive() + .with_context(|| format!("Failed to acquire exclusive lock on {:?}", path))?; + Ok(Self { path, _file: file }) + } + + fn open_lock_file(path: &std::path::Path) -> Result { + let lock_path = path.join(".lock"); + + // Ensure the directory exists + if let Some(parent) = lock_path.parent() { + std::fs::create_dir_all(parent).with_context(|| { + format!("Failed to create directory for lock file: {:?}", parent) + })?; + } + // If the lock file already exists, we open it in read-only mode. + // This prevents failures if the file is read-only (e.g., after + // making the toolchain directory read-only), while still allowing + // us to acquire shared and exclusive locks on the file descriptor. + if lock_path.exists() { + std::fs::OpenOptions::new() + .read(true) + .open(&lock_path) + .with_context(|| format!("Failed to open lock file at {:?}", lock_path)) + } else { + std::fs::OpenOptions::new() + .read(true) + .write(true) + .create(true) + .open(&lock_path) + .with_context(|| format!("Failed to create lock file at {:?}", lock_path)) + } + } +} diff --git a/anneal/src/validate.rs b/anneal/v1/src/validate.rs similarity index 100% rename from anneal/src/validate.rs rename to anneal/v1/src/validate.rs diff --git a/anneal/testdata/setup/aeneas-linux-aarch64.tar.gz b/anneal/v1/testdata/setup/aeneas-linux-aarch64.tar.gz similarity index 100% rename from anneal/testdata/setup/aeneas-linux-aarch64.tar.gz rename to anneal/v1/testdata/setup/aeneas-linux-aarch64.tar.gz diff --git a/anneal/testdata/setup/aeneas-linux-x86_64.tar.gz b/anneal/v1/testdata/setup/aeneas-linux-x86_64.tar.gz similarity index 100% rename from anneal/testdata/setup/aeneas-linux-x86_64.tar.gz rename to anneal/v1/testdata/setup/aeneas-linux-x86_64.tar.gz diff --git a/anneal/testdata/setup/aeneas-macos-aarch64.tar.gz b/anneal/v1/testdata/setup/aeneas-macos-aarch64.tar.gz similarity index 100% rename from anneal/testdata/setup/aeneas-macos-aarch64.tar.gz rename to anneal/v1/testdata/setup/aeneas-macos-aarch64.tar.gz diff --git a/anneal/testdata/setup/aeneas-macos-x86_64.tar.gz b/anneal/v1/testdata/setup/aeneas-macos-x86_64.tar.gz similarity index 100% rename from anneal/testdata/setup/aeneas-macos-x86_64.tar.gz rename to anneal/v1/testdata/setup/aeneas-macos-x86_64.tar.gz diff --git a/anneal/testdata/setup/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz b/anneal/v1/testdata/setup/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz similarity index 100% rename from anneal/testdata/setup/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz rename to anneal/v1/testdata/setup/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz diff --git a/anneal/testdata/setup/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz b/anneal/v1/testdata/setup/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz similarity index 100% rename from anneal/testdata/setup/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz rename to anneal/v1/testdata/setup/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz diff --git a/anneal/testdata/setup/miri-nightly-x86_64-unknown-linux-gnu.tar.gz b/anneal/v1/testdata/setup/miri-nightly-x86_64-unknown-linux-gnu.tar.gz similarity index 100% rename from anneal/testdata/setup/miri-nightly-x86_64-unknown-linux-gnu.tar.gz rename to anneal/v1/testdata/setup/miri-nightly-x86_64-unknown-linux-gnu.tar.gz diff --git a/anneal/testdata/setup/miri-nightly-x86_64-unknown-linux-gnu.tar.xz b/anneal/v1/testdata/setup/miri-nightly-x86_64-unknown-linux-gnu.tar.xz similarity index 100% rename from anneal/testdata/setup/miri-nightly-x86_64-unknown-linux-gnu.tar.xz rename to anneal/v1/testdata/setup/miri-nightly-x86_64-unknown-linux-gnu.tar.xz diff --git a/anneal/testdata/setup/rust-src-nightly.tar.gz b/anneal/v1/testdata/setup/rust-src-nightly.tar.gz similarity index 100% rename from anneal/testdata/setup/rust-src-nightly.tar.gz rename to anneal/v1/testdata/setup/rust-src-nightly.tar.gz diff --git a/anneal/testdata/setup/rust-src-nightly.tar.xz b/anneal/v1/testdata/setup/rust-src-nightly.tar.xz similarity index 100% rename from anneal/testdata/setup/rust-src-nightly.tar.xz rename to anneal/v1/testdata/setup/rust-src-nightly.tar.xz diff --git a/anneal/testdata/setup/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz b/anneal/v1/testdata/setup/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz similarity index 100% rename from anneal/testdata/setup/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz rename to anneal/v1/testdata/setup/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz diff --git a/anneal/testdata/setup/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz b/anneal/v1/testdata/setup/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz similarity index 100% rename from anneal/testdata/setup/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz rename to anneal/v1/testdata/setup/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz diff --git a/anneal/testdata/setup/rustc-dev-nightly-x86_64-unknown-linux-gnu.tar.gz b/anneal/v1/testdata/setup/rustc-dev-nightly-x86_64-unknown-linux-gnu.tar.gz similarity index 100% rename from anneal/testdata/setup/rustc-dev-nightly-x86_64-unknown-linux-gnu.tar.gz rename to anneal/v1/testdata/setup/rustc-dev-nightly-x86_64-unknown-linux-gnu.tar.gz diff --git a/anneal/testdata/setup/rustc-dev-nightly-x86_64-unknown-linux-gnu.tar.xz b/anneal/v1/testdata/setup/rustc-dev-nightly-x86_64-unknown-linux-gnu.tar.xz similarity index 100% rename from anneal/testdata/setup/rustc-dev-nightly-x86_64-unknown-linux-gnu.tar.xz rename to anneal/v1/testdata/setup/rustc-dev-nightly-x86_64-unknown-linux-gnu.tar.xz diff --git a/anneal/testdata/setup/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz b/anneal/v1/testdata/setup/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz similarity index 100% rename from anneal/testdata/setup/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz rename to anneal/v1/testdata/setup/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz diff --git a/anneal/testdata/setup/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz b/anneal/v1/testdata/setup/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz similarity index 100% rename from anneal/testdata/setup/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz rename to anneal/v1/testdata/setup/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz diff --git a/anneal/tests/.gitignore b/anneal/v1/tests/.gitignore similarity index 100% rename from anneal/tests/.gitignore rename to anneal/v1/tests/.gitignore diff --git a/anneal/tests/fixtures/allow_sorry_fallbacks/anneal.toml b/anneal/v1/tests/fixtures/allow_sorry_fallbacks/anneal.toml similarity index 100% rename from anneal/tests/fixtures/allow_sorry_fallbacks/anneal.toml rename to anneal/v1/tests/fixtures/allow_sorry_fallbacks/anneal.toml diff --git a/anneal/tests/fixtures/allow_sorry_fallbacks/expected.stderr b/anneal/v1/tests/fixtures/allow_sorry_fallbacks/expected.stderr similarity index 100% rename from anneal/tests/fixtures/allow_sorry_fallbacks/expected.stderr rename to anneal/v1/tests/fixtures/allow_sorry_fallbacks/expected.stderr diff --git a/anneal/tests/fixtures/allow_sorry_fallbacks/source/Cargo.toml b/anneal/v1/tests/fixtures/allow_sorry_fallbacks/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/allow_sorry_fallbacks/source/Cargo.toml rename to anneal/v1/tests/fixtures/allow_sorry_fallbacks/source/Cargo.toml diff --git a/anneal/tests/fixtures/allow_sorry_fallbacks/source/src/lib.rs b/anneal/v1/tests/fixtures/allow_sorry_fallbacks/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/allow_sorry_fallbacks/source/src/lib.rs rename to anneal/v1/tests/fixtures/allow_sorry_fallbacks/source/src/lib.rs diff --git a/anneal/tests/fixtures/anneal_multiple_targets/anneal.toml b/anneal/v1/tests/fixtures/anneal_multiple_targets/anneal.toml similarity index 100% rename from anneal/tests/fixtures/anneal_multiple_targets/anneal.toml rename to anneal/v1/tests/fixtures/anneal_multiple_targets/anneal.toml diff --git a/anneal/tests/fixtures/anneal_multiple_targets/source/Cargo.toml b/anneal/v1/tests/fixtures/anneal_multiple_targets/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/anneal_multiple_targets/source/Cargo.toml rename to anneal/v1/tests/fixtures/anneal_multiple_targets/source/Cargo.toml diff --git a/anneal/tests/fixtures/anneal_multiple_targets/source/src/bin/my_bin.rs b/anneal/v1/tests/fixtures/anneal_multiple_targets/source/src/bin/my_bin.rs similarity index 100% rename from anneal/tests/fixtures/anneal_multiple_targets/source/src/bin/my_bin.rs rename to anneal/v1/tests/fixtures/anneal_multiple_targets/source/src/bin/my_bin.rs diff --git a/anneal/tests/fixtures/anneal_multiple_targets/source/src/lib.rs b/anneal/v1/tests/fixtures/anneal_multiple_targets/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/anneal_multiple_targets/source/src/lib.rs rename to anneal/v1/tests/fixtures/anneal_multiple_targets/source/src/lib.rs diff --git a/anneal/tests/fixtures/anneal_shim_syntax_error/anneal.toml b/anneal/v1/tests/fixtures/anneal_shim_syntax_error/anneal.toml similarity index 100% rename from anneal/tests/fixtures/anneal_shim_syntax_error/anneal.toml rename to anneal/v1/tests/fixtures/anneal_shim_syntax_error/anneal.toml diff --git a/anneal/tests/fixtures/anneal_shim_syntax_error/expected.stderr b/anneal/v1/tests/fixtures/anneal_shim_syntax_error/expected.stderr similarity index 100% rename from anneal/tests/fixtures/anneal_shim_syntax_error/expected.stderr rename to anneal/v1/tests/fixtures/anneal_shim_syntax_error/expected.stderr diff --git a/anneal/tests/fixtures/anneal_shim_syntax_error/mock_charon_output.json b/anneal/v1/tests/fixtures/anneal_shim_syntax_error/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/anneal_shim_syntax_error/mock_charon_output.json rename to anneal/v1/tests/fixtures/anneal_shim_syntax_error/mock_charon_output.json diff --git a/anneal/tests/fixtures/anneal_shim_syntax_error/source/Cargo.toml b/anneal/v1/tests/fixtures/anneal_shim_syntax_error/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/anneal_shim_syntax_error/source/Cargo.toml rename to anneal/v1/tests/fixtures/anneal_shim_syntax_error/source/Cargo.toml diff --git a/anneal/tests/fixtures/anneal_shim_syntax_error/source/src/lib.rs b/anneal/v1/tests/fixtures/anneal_shim_syntax_error/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/anneal_shim_syntax_error/source/src/lib.rs rename to anneal/v1/tests/fixtures/anneal_shim_syntax_error/source/src/lib.rs diff --git a/anneal/tests/fixtures/archive_lake_cache_reuse/anneal.toml b/anneal/v1/tests/fixtures/archive_lake_cache_reuse/anneal.toml similarity index 100% rename from anneal/tests/fixtures/archive_lake_cache_reuse/anneal.toml rename to anneal/v1/tests/fixtures/archive_lake_cache_reuse/anneal.toml diff --git a/anneal/tests/fixtures/associated_types/anneal.toml b/anneal/v1/tests/fixtures/associated_types/anneal.toml similarity index 100% rename from anneal/tests/fixtures/associated_types/anneal.toml rename to anneal/v1/tests/fixtures/associated_types/anneal.toml diff --git a/anneal/tests/fixtures/associated_types/expected.stderr b/anneal/v1/tests/fixtures/associated_types/expected.stderr similarity index 100% rename from anneal/tests/fixtures/associated_types/expected.stderr rename to anneal/v1/tests/fixtures/associated_types/expected.stderr diff --git a/anneal/tests/fixtures/associated_types/source/Cargo.toml b/anneal/v1/tests/fixtures/associated_types/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/associated_types/source/Cargo.toml rename to anneal/v1/tests/fixtures/associated_types/source/Cargo.toml diff --git a/anneal/tests/fixtures/associated_types/source/src/lib.rs b/anneal/v1/tests/fixtures/associated_types/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/associated_types/source/src/lib.rs rename to anneal/v1/tests/fixtures/associated_types/source/src/lib.rs diff --git a/anneal/tests/fixtures/broken_doc_block/anneal.toml b/anneal/v1/tests/fixtures/broken_doc_block/anneal.toml similarity index 100% rename from anneal/tests/fixtures/broken_doc_block/anneal.toml rename to anneal/v1/tests/fixtures/broken_doc_block/anneal.toml diff --git a/anneal/tests/fixtures/broken_doc_block/expected.stderr b/anneal/v1/tests/fixtures/broken_doc_block/expected.stderr similarity index 100% rename from anneal/tests/fixtures/broken_doc_block/expected.stderr rename to anneal/v1/tests/fixtures/broken_doc_block/expected.stderr diff --git a/anneal/tests/fixtures/broken_doc_block/source/Cargo.toml b/anneal/v1/tests/fixtures/broken_doc_block/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/broken_doc_block/source/Cargo.toml rename to anneal/v1/tests/fixtures/broken_doc_block/source/Cargo.toml diff --git a/anneal/tests/fixtures/broken_doc_block/source/src/lib.rs b/anneal/v1/tests/fixtures/broken_doc_block/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/broken_doc_block/source/src/lib.rs rename to anneal/v1/tests/fixtures/broken_doc_block/source/src/lib.rs diff --git a/anneal/tests/fixtures/canonicalized_workspace/anneal.toml b/anneal/v1/tests/fixtures/canonicalized_workspace/anneal.toml similarity index 100% rename from anneal/tests/fixtures/canonicalized_workspace/anneal.toml rename to anneal/v1/tests/fixtures/canonicalized_workspace/anneal.toml diff --git a/anneal/tests/fixtures/canonicalized_workspace/source/Cargo.toml b/anneal/v1/tests/fixtures/canonicalized_workspace/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/canonicalized_workspace/source/Cargo.toml rename to anneal/v1/tests/fixtures/canonicalized_workspace/source/Cargo.toml diff --git a/anneal/tests/fixtures/canonicalized_workspace/source/crates/app/Cargo.toml b/anneal/v1/tests/fixtures/canonicalized_workspace/source/crates/app/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/canonicalized_workspace/source/crates/app/Cargo.toml rename to anneal/v1/tests/fixtures/canonicalized_workspace/source/crates/app/Cargo.toml diff --git a/anneal/tests/fixtures/canonicalized_workspace/source/crates/app/src/lib.rs b/anneal/v1/tests/fixtures/canonicalized_workspace/source/crates/app/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/canonicalized_workspace/source/crates/app/src/lib.rs rename to anneal/v1/tests/fixtures/canonicalized_workspace/source/crates/app/src/lib.rs diff --git a/anneal/tests/fixtures/canonicalized_workspace/source/crates/lib/Cargo.toml b/anneal/v1/tests/fixtures/canonicalized_workspace/source/crates/lib/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/canonicalized_workspace/source/crates/lib/Cargo.toml rename to anneal/v1/tests/fixtures/canonicalized_workspace/source/crates/lib/Cargo.toml diff --git a/anneal/tests/fixtures/canonicalized_workspace/source/crates/lib/src/lib.rs b/anneal/v1/tests/fixtures/canonicalized_workspace/source/crates/lib/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/canonicalized_workspace/source/crates/lib/src/lib.rs rename to anneal/v1/tests/fixtures/canonicalized_workspace/source/crates/lib/src/lib.rs diff --git a/anneal/tests/fixtures/cfg_blind_spot/anneal.toml b/anneal/v1/tests/fixtures/cfg_blind_spot/anneal.toml similarity index 100% rename from anneal/tests/fixtures/cfg_blind_spot/anneal.toml rename to anneal/v1/tests/fixtures/cfg_blind_spot/anneal.toml diff --git a/anneal/tests/fixtures/cfg_blind_spot/expected.stderr b/anneal/v1/tests/fixtures/cfg_blind_spot/expected.stderr similarity index 100% rename from anneal/tests/fixtures/cfg_blind_spot/expected.stderr rename to anneal/v1/tests/fixtures/cfg_blind_spot/expected.stderr diff --git a/anneal/tests/fixtures/cfg_blind_spot/source/Cargo.toml b/anneal/v1/tests/fixtures/cfg_blind_spot/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/cfg_blind_spot/source/Cargo.toml rename to anneal/v1/tests/fixtures/cfg_blind_spot/source/Cargo.toml diff --git a/anneal/tests/fixtures/cfg_blind_spot/source/src/lib.rs b/anneal/v1/tests/fixtures/cfg_blind_spot/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/cfg_blind_spot/source/src/lib.rs rename to anneal/v1/tests/fixtures/cfg_blind_spot/source/src/lib.rs diff --git a/anneal/tests/fixtures/charon_version_match/anneal.toml b/anneal/v1/tests/fixtures/charon_version_match/anneal.toml similarity index 100% rename from anneal/tests/fixtures/charon_version_match/anneal.toml rename to anneal/v1/tests/fixtures/charon_version_match/anneal.toml diff --git a/anneal/tests/fixtures/charon_version_match/expected.stderr b/anneal/v1/tests/fixtures/charon_version_match/expected.stderr similarity index 100% rename from anneal/tests/fixtures/charon_version_match/expected.stderr rename to anneal/v1/tests/fixtures/charon_version_match/expected.stderr diff --git a/anneal/tests/fixtures/charon_version_match/mock_charon.sh b/anneal/v1/tests/fixtures/charon_version_match/mock_charon.sh similarity index 100% rename from anneal/tests/fixtures/charon_version_match/mock_charon.sh rename to anneal/v1/tests/fixtures/charon_version_match/mock_charon.sh diff --git a/anneal/tests/fixtures/charon_version_match/source/Cargo.toml b/anneal/v1/tests/fixtures/charon_version_match/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/charon_version_match/source/Cargo.toml rename to anneal/v1/tests/fixtures/charon_version_match/source/Cargo.toml diff --git a/anneal/tests/fixtures/charon_version_match/source/src/lib.rs b/anneal/v1/tests/fixtures/charon_version_match/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/charon_version_match/source/src/lib.rs rename to anneal/v1/tests/fixtures/charon_version_match/source/src/lib.rs diff --git a/anneal/tests/fixtures/collision/anneal.toml b/anneal/v1/tests/fixtures/collision/anneal.toml similarity index 100% rename from anneal/tests/fixtures/collision/anneal.toml rename to anneal/v1/tests/fixtures/collision/anneal.toml diff --git a/anneal/tests/fixtures/collision/source/Cargo.toml b/anneal/v1/tests/fixtures/collision/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/collision/source/Cargo.toml rename to anneal/v1/tests/fixtures/collision/source/Cargo.toml diff --git a/anneal/tests/fixtures/collision/source/crates/a/Cargo.toml b/anneal/v1/tests/fixtures/collision/source/crates/a/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/collision/source/crates/a/Cargo.toml rename to anneal/v1/tests/fixtures/collision/source/crates/a/Cargo.toml diff --git a/anneal/tests/fixtures/collision/source/crates/a/src/lib.rs b/anneal/v1/tests/fixtures/collision/source/crates/a/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/collision/source/crates/a/src/lib.rs rename to anneal/v1/tests/fixtures/collision/source/crates/a/src/lib.rs diff --git a/anneal/tests/fixtures/collision/source/crates/b/Cargo.toml b/anneal/v1/tests/fixtures/collision/source/crates/b/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/collision/source/crates/b/Cargo.toml rename to anneal/v1/tests/fixtures/collision/source/crates/b/Cargo.toml diff --git a/anneal/tests/fixtures/collision/source/crates/b/src/lib.rs b/anneal/v1/tests/fixtures/collision/source/crates/b/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/collision/source/crates/b/src/lib.rs rename to anneal/v1/tests/fixtures/collision/source/crates/b/src/lib.rs diff --git a/anneal/tests/fixtures/const_block_blind_spot/anneal.toml b/anneal/v1/tests/fixtures/const_block_blind_spot/anneal.toml similarity index 100% rename from anneal/tests/fixtures/const_block_blind_spot/anneal.toml rename to anneal/v1/tests/fixtures/const_block_blind_spot/anneal.toml diff --git a/anneal/tests/fixtures/const_block_blind_spot/expected.stderr b/anneal/v1/tests/fixtures/const_block_blind_spot/expected.stderr similarity index 100% rename from anneal/tests/fixtures/const_block_blind_spot/expected.stderr rename to anneal/v1/tests/fixtures/const_block_blind_spot/expected.stderr diff --git a/anneal/tests/fixtures/const_block_blind_spot/source/Cargo.toml b/anneal/v1/tests/fixtures/const_block_blind_spot/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/const_block_blind_spot/source/Cargo.toml rename to anneal/v1/tests/fixtures/const_block_blind_spot/source/Cargo.toml diff --git a/anneal/tests/fixtures/const_block_blind_spot/source/src/lib.rs b/anneal/v1/tests/fixtures/const_block_blind_spot/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/const_block_blind_spot/source/src/lib.rs rename to anneal/v1/tests/fixtures/const_block_blind_spot/source/src/lib.rs diff --git a/anneal/tests/fixtures/const_generics/anneal.toml b/anneal/v1/tests/fixtures/const_generics/anneal.toml similarity index 100% rename from anneal/tests/fixtures/const_generics/anneal.toml rename to anneal/v1/tests/fixtures/const_generics/anneal.toml diff --git a/anneal/tests/fixtures/const_generics/expected.stderr b/anneal/v1/tests/fixtures/const_generics/expected.stderr similarity index 100% rename from anneal/tests/fixtures/const_generics/expected.stderr rename to anneal/v1/tests/fixtures/const_generics/expected.stderr diff --git a/anneal/tests/fixtures/const_generics/source/Cargo.toml b/anneal/v1/tests/fixtures/const_generics/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/const_generics/source/Cargo.toml rename to anneal/v1/tests/fixtures/const_generics/source/Cargo.toml diff --git a/anneal/tests/fixtures/const_generics/source/src/lib.rs b/anneal/v1/tests/fixtures/const_generics/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/const_generics/source/src/lib.rs rename to anneal/v1/tests/fixtures/const_generics/source/src/lib.rs diff --git a/anneal/tests/fixtures/cyclic_paths/anneal.toml b/anneal/v1/tests/fixtures/cyclic_paths/anneal.toml similarity index 100% rename from anneal/tests/fixtures/cyclic_paths/anneal.toml rename to anneal/v1/tests/fixtures/cyclic_paths/anneal.toml diff --git a/anneal/tests/fixtures/cyclic_paths/expected.stderr b/anneal/v1/tests/fixtures/cyclic_paths/expected.stderr similarity index 100% rename from anneal/tests/fixtures/cyclic_paths/expected.stderr rename to anneal/v1/tests/fixtures/cyclic_paths/expected.stderr diff --git a/anneal/tests/fixtures/cyclic_paths/source/Cargo.toml b/anneal/v1/tests/fixtures/cyclic_paths/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/cyclic_paths/source/Cargo.toml rename to anneal/v1/tests/fixtures/cyclic_paths/source/Cargo.toml diff --git a/anneal/tests/fixtures/cyclic_paths/source/src/lib.rs b/anneal/v1/tests/fixtures/cyclic_paths/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/cyclic_paths/source/src/lib.rs rename to anneal/v1/tests/fixtures/cyclic_paths/source/src/lib.rs diff --git a/anneal/tests/fixtures/diagnostic_mapping/anneal.toml b/anneal/v1/tests/fixtures/diagnostic_mapping/anneal.toml similarity index 100% rename from anneal/tests/fixtures/diagnostic_mapping/anneal.toml rename to anneal/v1/tests/fixtures/diagnostic_mapping/anneal.toml diff --git a/anneal/tests/fixtures/diagnostic_mapping/expected.stderr b/anneal/v1/tests/fixtures/diagnostic_mapping/expected.stderr similarity index 100% rename from anneal/tests/fixtures/diagnostic_mapping/expected.stderr rename to anneal/v1/tests/fixtures/diagnostic_mapping/expected.stderr diff --git a/anneal/tests/fixtures/diagnostic_mapping/source/Cargo.toml b/anneal/v1/tests/fixtures/diagnostic_mapping/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/diagnostic_mapping/source/Cargo.toml rename to anneal/v1/tests/fixtures/diagnostic_mapping/source/Cargo.toml diff --git a/anneal/tests/fixtures/diagnostic_mapping/source/src/lib.rs b/anneal/v1/tests/fixtures/diagnostic_mapping/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/diagnostic_mapping/source/src/lib.rs rename to anneal/v1/tests/fixtures/diagnostic_mapping/source/src/lib.rs diff --git a/anneal/tests/fixtures/dirty_sandbox/anneal.toml b/anneal/v1/tests/fixtures/dirty_sandbox/anneal.toml similarity index 100% rename from anneal/tests/fixtures/dirty_sandbox/anneal.toml rename to anneal/v1/tests/fixtures/dirty_sandbox/anneal.toml diff --git a/anneal/tests/fixtures/dirty_sandbox/source/main.rs b/anneal/v1/tests/fixtures/dirty_sandbox/source/main.rs similarity index 100% rename from anneal/tests/fixtures/dirty_sandbox/source/main.rs rename to anneal/v1/tests/fixtures/dirty_sandbox/source/main.rs diff --git a/anneal/tests/fixtures/dirty_sandbox/source/target/file b/anneal/v1/tests/fixtures/dirty_sandbox/source/target/file similarity index 100% rename from anneal/tests/fixtures/dirty_sandbox/source/target/file rename to anneal/v1/tests/fixtures/dirty_sandbox/source/target/file diff --git a/anneal/tests/fixtures/dst_layout/anneal.toml b/anneal/v1/tests/fixtures/dst_layout/anneal.toml similarity index 100% rename from anneal/tests/fixtures/dst_layout/anneal.toml rename to anneal/v1/tests/fixtures/dst_layout/anneal.toml diff --git a/anneal/tests/fixtures/dst_layout/expected.stderr b/anneal/v1/tests/fixtures/dst_layout/expected.stderr similarity index 100% rename from anneal/tests/fixtures/dst_layout/expected.stderr rename to anneal/v1/tests/fixtures/dst_layout/expected.stderr diff --git a/anneal/tests/fixtures/dst_layout/source/Cargo.toml b/anneal/v1/tests/fixtures/dst_layout/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/dst_layout/source/Cargo.toml rename to anneal/v1/tests/fixtures/dst_layout/source/Cargo.toml diff --git a/anneal/tests/fixtures/dst_layout/source/src/FunsExternal.lean b/anneal/v1/tests/fixtures/dst_layout/source/src/FunsExternal.lean similarity index 100% rename from anneal/tests/fixtures/dst_layout/source/src/FunsExternal.lean rename to anneal/v1/tests/fixtures/dst_layout/source/src/FunsExternal.lean diff --git a/anneal/tests/fixtures/dst_layout/source/src/lib.rs b/anneal/v1/tests/fixtures/dst_layout/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/dst_layout/source/src/lib.rs rename to anneal/v1/tests/fixtures/dst_layout/source/src/lib.rs diff --git a/anneal/tests/fixtures/duplicate_blocks/anneal.toml b/anneal/v1/tests/fixtures/duplicate_blocks/anneal.toml similarity index 100% rename from anneal/tests/fixtures/duplicate_blocks/anneal.toml rename to anneal/v1/tests/fixtures/duplicate_blocks/anneal.toml diff --git a/anneal/tests/fixtures/duplicate_blocks/expected.stderr b/anneal/v1/tests/fixtures/duplicate_blocks/expected.stderr similarity index 100% rename from anneal/tests/fixtures/duplicate_blocks/expected.stderr rename to anneal/v1/tests/fixtures/duplicate_blocks/expected.stderr diff --git a/anneal/tests/fixtures/duplicate_blocks/source/Cargo.toml b/anneal/v1/tests/fixtures/duplicate_blocks/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/duplicate_blocks/source/Cargo.toml rename to anneal/v1/tests/fixtures/duplicate_blocks/source/Cargo.toml diff --git a/anneal/tests/fixtures/duplicate_blocks/source/src/lib.rs b/anneal/v1/tests/fixtures/duplicate_blocks/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/duplicate_blocks/source/src/lib.rs rename to anneal/v1/tests/fixtures/duplicate_blocks/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_cfg/args.txt b/anneal/v1/tests/fixtures/edge_cases_cfg/args.txt similarity index 100% rename from anneal/tests/fixtures/edge_cases_cfg/args.txt rename to anneal/v1/tests/fixtures/edge_cases_cfg/args.txt diff --git a/anneal/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_cfg/test_7_1_phantom_fn/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_cfg/test_7_3_ghost_spec/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_charon/args.txt b/anneal/v1/tests/fixtures/edge_cases_charon/args.txt similarity index 100% rename from anneal/tests/fixtures/edge_cases_charon/args.txt rename to anneal/v1/tests/fixtures/edge_cases_charon/args.txt diff --git a/anneal/tests/fixtures/edge_cases_charon/test_8_2_unions/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_charon/test_8_2_unions/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_charon/test_8_2_unions/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_charon/test_8_2_unions/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_charon/test_8_2_unions/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_charon/test_8_2_unions/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_charon/test_8_2_unions/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_charon/test_8_2_unions/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_charon/test_8_2_unions/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_charon/test_8_2_unions/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_charon/test_8_2_unions/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_charon/test_8_2_unions/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_charon/test_8_2_unions/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_charon/test_8_2_unions/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_charon/test_8_2_unions/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_charon/test_8_2_unions/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_control/args.txt b/anneal/v1/tests/fixtures/edge_cases_control/args.txt similarity index 100% rename from anneal/tests/fixtures/edge_cases_control/args.txt rename to anneal/v1/tests/fixtures/edge_cases_control/args.txt diff --git a/anneal/tests/fixtures/edge_cases_invariants/args.txt b/anneal/v1/tests/fixtures/edge_cases_invariants/args.txt similarity index 100% rename from anneal/tests/fixtures/edge_cases_invariants/args.txt rename to anneal/v1/tests/fixtures/edge_cases_invariants/args.txt diff --git a/anneal/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_invariants/test_4_6_assoc_types/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_logic/args.txt b/anneal/v1/tests/fixtures/edge_cases_logic/args.txt similarity index 100% rename from anneal/tests/fixtures/edge_cases_logic/args.txt rename to anneal/v1/tests/fixtures/edge_cases_logic/args.txt diff --git a/anneal/tests/fixtures/edge_cases_logic/test_5_4_std_types/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_logic/test_5_4_std_types/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_logic/test_5_4_std_types/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_logic/test_5_4_std_types/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_logic/test_5_4_std_types/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_logic/test_5_4_std_types/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_logic/test_5_4_std_types/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_logic/test_5_4_std_types/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_logic/test_5_4_std_types/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_logic/test_5_4_std_types/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_logic/test_5_4_std_types/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_logic/test_5_4_std_types/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_logic/test_5_4_std_types/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_logic/test_5_4_std_types/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_logic/test_5_4_std_types/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_logic/test_5_4_std_types/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_macros/args.txt b/anneal/v1/tests/fixtures/edge_cases_macros/args.txt similarity index 100% rename from anneal/tests/fixtures/edge_cases_macros/args.txt rename to anneal/v1/tests/fixtures/edge_cases_macros/args.txt diff --git a/anneal/tests/fixtures/edge_cases_modules/args.txt b/anneal/v1/tests/fixtures/edge_cases_modules/args.txt similarity index 100% rename from anneal/tests/fixtures/edge_cases_modules/args.txt rename to anneal/v1/tests/fixtures/edge_cases_modules/args.txt diff --git a/anneal/tests/fixtures/edge_cases_modules/test_6_1_external_crate/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_modules/test_6_1_external_crate/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_modules/test_6_1_external_crate/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_modules/test_6_1_external_crate/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_modules/test_6_1_external_crate/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_modules/test_6_1_external_crate/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_modules/test_6_1_external_crate/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_modules/test_6_1_external_crate/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_modules/test_6_1_external_crate/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_modules/test_6_1_external_crate/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_modules/test_6_1_external_crate/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_modules/test_6_1_external_crate/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_modules/test_6_1_external_crate/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_modules/test_6_1_external_crate/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_modules/test_6_1_external_crate/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_modules/test_6_1_external_crate/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_modules/test_6_3_renaming/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_modules/test_6_3_renaming/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_modules/test_6_3_renaming/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_modules/test_6_3_renaming/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_modules/test_6_3_renaming/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_modules/test_6_3_renaming/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_modules/test_6_3_renaming/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_modules/test_6_3_renaming/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_modules/test_6_3_renaming/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_modules/test_6_3_renaming/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_modules/test_6_3_renaming/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_modules/test_6_3_renaming/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_modules/test_6_3_renaming/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_modules/test_6_3_renaming/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_modules/test_6_3_renaming/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_modules/test_6_3_renaming/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_mut_refs/args.txt b/anneal/v1/tests/fixtures/edge_cases_mut_refs/args.txt similarity index 100% rename from anneal/tests/fixtures/edge_cases_mut_refs/args.txt rename to anneal/v1/tests/fixtures/edge_cases_mut_refs/args.txt diff --git a/anneal/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_mut_refs/test_3_3_ret_mut/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_naming/args.txt b/anneal/v1/tests/fixtures/edge_cases_naming/args.txt similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/args.txt rename to anneal/v1/tests/fixtures/edge_cases_naming/args.txt diff --git a/anneal/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_naming/test_1_1_lean_keywords_fns/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_naming/test_1_2_lean_keywords_args/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_naming/test_1_3_rust_keywords_idents/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_stress/args.txt b/anneal/v1/tests/fixtures/edge_cases_stress/args.txt similarity index 100% rename from anneal/tests/fixtures/edge_cases_stress/args.txt rename to anneal/v1/tests/fixtures/edge_cases_stress/args.txt diff --git a/anneal/tests/fixtures/edge_cases_stress/test_11_2_monolith/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_stress/test_11_2_monolith/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_stress/test_11_2_monolith/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_stress/test_11_2_monolith/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_stress/test_11_2_monolith/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_stress/test_11_2_monolith/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_stress/test_11_2_monolith/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_stress/test_11_2_monolith/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_stress/test_11_2_monolith/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_stress/test_11_2_monolith/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_stress/test_11_2_monolith/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_stress/test_11_2_monolith/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_stress/test_11_2_monolith/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_stress/test_11_2_monolith/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_stress/test_11_2_monolith/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_stress/test_11_2_monolith/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_types/args.txt b/anneal/v1/tests/fixtures/edge_cases_types/args.txt similarity index 100% rename from anneal/tests/fixtures/edge_cases_types/args.txt rename to anneal/v1/tests/fixtures/edge_cases_types/args.txt diff --git a/anneal/tests/fixtures/edge_cases_types/test_2_3_zst/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_types/test_2_3_zst/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_types/test_2_3_zst/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_types/test_2_3_zst/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_types/test_2_3_zst/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_types/test_2_3_zst/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_types/test_2_3_zst/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_types/test_2_3_zst/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_types/test_2_3_zst/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_types/test_2_3_zst/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_types/test_2_3_zst/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_types/test_2_3_zst/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_types/test_2_3_zst/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_types/test_2_3_zst/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_types/test_2_3_zst/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_types/test_2_3_zst/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_types/test_2_6_nested_refs/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_types/test_2_6_nested_refs/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_types/test_2_6_nested_refs/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_types/test_2_6_nested_refs/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_types/test_2_6_nested_refs/expected.stderr b/anneal/v1/tests/fixtures/edge_cases_types/test_2_6_nested_refs/expected.stderr similarity index 100% rename from anneal/tests/fixtures/edge_cases_types/test_2_6_nested_refs/expected.stderr rename to anneal/v1/tests/fixtures/edge_cases_types/test_2_6_nested_refs/expected.stderr diff --git a/anneal/tests/fixtures/edge_cases_types/test_2_6_nested_refs/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_types/test_2_6_nested_refs/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_types/test_2_6_nested_refs/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_types/test_2_6_nested_refs/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_types/test_2_6_nested_refs/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_types/test_2_6_nested_refs/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_types/test_2_6_nested_refs/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_types/test_2_6_nested_refs/source/src/lib.rs diff --git a/anneal/tests/fixtures/edge_cases_types/test_2_7_arrays/anneal.toml b/anneal/v1/tests/fixtures/edge_cases_types/test_2_7_arrays/anneal.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_types/test_2_7_arrays/anneal.toml rename to anneal/v1/tests/fixtures/edge_cases_types/test_2_7_arrays/anneal.toml diff --git a/anneal/tests/fixtures/edge_cases_types/test_2_7_arrays/source/Cargo.toml b/anneal/v1/tests/fixtures/edge_cases_types/test_2_7_arrays/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/edge_cases_types/test_2_7_arrays/source/Cargo.toml rename to anneal/v1/tests/fixtures/edge_cases_types/test_2_7_arrays/source/Cargo.toml diff --git a/anneal/tests/fixtures/edge_cases_types/test_2_7_arrays/source/src/lib.rs b/anneal/v1/tests/fixtures/edge_cases_types/test_2_7_arrays/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/edge_cases_types/test_2_7_arrays/source/src/lib.rs rename to anneal/v1/tests/fixtures/edge_cases_types/test_2_7_arrays/source/src/lib.rs diff --git a/anneal/tests/fixtures/enums_pattern_matching/anneal.toml b/anneal/v1/tests/fixtures/enums_pattern_matching/anneal.toml similarity index 100% rename from anneal/tests/fixtures/enums_pattern_matching/anneal.toml rename to anneal/v1/tests/fixtures/enums_pattern_matching/anneal.toml diff --git a/anneal/tests/fixtures/enums_pattern_matching/expected.stderr b/anneal/v1/tests/fixtures/enums_pattern_matching/expected.stderr similarity index 100% rename from anneal/tests/fixtures/enums_pattern_matching/expected.stderr rename to anneal/v1/tests/fixtures/enums_pattern_matching/expected.stderr diff --git a/anneal/tests/fixtures/enums_pattern_matching/source/Cargo.toml b/anneal/v1/tests/fixtures/enums_pattern_matching/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/enums_pattern_matching/source/Cargo.toml rename to anneal/v1/tests/fixtures/enums_pattern_matching/source/Cargo.toml diff --git a/anneal/tests/fixtures/enums_pattern_matching/source/src/lib.rs b/anneal/v1/tests/fixtures/enums_pattern_matching/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/enums_pattern_matching/source/src/lib.rs rename to anneal/v1/tests/fixtures/enums_pattern_matching/source/src/lib.rs diff --git a/anneal/tests/fixtures/env_interleaved_stdout/anneal.toml b/anneal/v1/tests/fixtures/env_interleaved_stdout/anneal.toml similarity index 100% rename from anneal/tests/fixtures/env_interleaved_stdout/anneal.toml rename to anneal/v1/tests/fixtures/env_interleaved_stdout/anneal.toml diff --git a/anneal/tests/fixtures/env_interleaved_stdout/expected.stderr b/anneal/v1/tests/fixtures/env_interleaved_stdout/expected.stderr similarity index 100% rename from anneal/tests/fixtures/env_interleaved_stdout/expected.stderr rename to anneal/v1/tests/fixtures/env_interleaved_stdout/expected.stderr diff --git a/anneal/tests/fixtures/env_interleaved_stdout/mock_charon.sh b/anneal/v1/tests/fixtures/env_interleaved_stdout/mock_charon.sh similarity index 100% rename from anneal/tests/fixtures/env_interleaved_stdout/mock_charon.sh rename to anneal/v1/tests/fixtures/env_interleaved_stdout/mock_charon.sh diff --git a/anneal/tests/fixtures/env_interleaved_stdout/mock_charon_output.json b/anneal/v1/tests/fixtures/env_interleaved_stdout/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/env_interleaved_stdout/mock_charon_output.json rename to anneal/v1/tests/fixtures/env_interleaved_stdout/mock_charon_output.json diff --git a/anneal/tests/fixtures/env_interleaved_stdout/source/Cargo.toml b/anneal/v1/tests/fixtures/env_interleaved_stdout/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/env_interleaved_stdout/source/Cargo.toml rename to anneal/v1/tests/fixtures/env_interleaved_stdout/source/Cargo.toml diff --git a/anneal/tests/fixtures/env_interleaved_stdout/source/src/lib.rs b/anneal/v1/tests/fixtures/env_interleaved_stdout/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/env_interleaved_stdout/source/src/lib.rs rename to anneal/v1/tests/fixtures/env_interleaved_stdout/source/src/lib.rs diff --git a/anneal/tests/fixtures/expand_output/anneal.toml b/anneal/v1/tests/fixtures/expand_output/anneal.toml similarity index 100% rename from anneal/tests/fixtures/expand_output/anneal.toml rename to anneal/v1/tests/fixtures/expand_output/anneal.toml diff --git a/anneal/tests/fixtures/expand_output/expected-aeneas.stdout b/anneal/v1/tests/fixtures/expand_output/expected-aeneas.stdout similarity index 100% rename from anneal/tests/fixtures/expand_output/expected-aeneas.stdout rename to anneal/v1/tests/fixtures/expand_output/expected-aeneas.stdout diff --git a/anneal/tests/fixtures/expand_output/expected-all.stdout b/anneal/v1/tests/fixtures/expand_output/expected-all.stdout similarity index 100% rename from anneal/tests/fixtures/expand_output/expected-all.stdout rename to anneal/v1/tests/fixtures/expand_output/expected-all.stdout diff --git a/anneal/tests/fixtures/expand_output/expected-anneal.stdout b/anneal/v1/tests/fixtures/expand_output/expected-anneal.stdout similarity index 100% rename from anneal/tests/fixtures/expand_output/expected-anneal.stdout rename to anneal/v1/tests/fixtures/expand_output/expected-anneal.stdout diff --git a/anneal/tests/fixtures/expand_output/source/Cargo.toml b/anneal/v1/tests/fixtures/expand_output/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/expand_output/source/Cargo.toml rename to anneal/v1/tests/fixtures/expand_output/source/Cargo.toml diff --git a/anneal/tests/fixtures/expand_output/source/src/lib.rs b/anneal/v1/tests/fixtures/expand_output/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/expand_output/source/src/lib.rs rename to anneal/v1/tests/fixtures/expand_output/source/src/lib.rs diff --git a/anneal/tests/fixtures/extern_never_verified/anneal.toml b/anneal/v1/tests/fixtures/extern_never_verified/anneal.toml similarity index 100% rename from anneal/tests/fixtures/extern_never_verified/anneal.toml rename to anneal/v1/tests/fixtures/extern_never_verified/anneal.toml diff --git a/anneal/tests/fixtures/extern_never_verified/out.txt b/anneal/v1/tests/fixtures/extern_never_verified/out.txt similarity index 100% rename from anneal/tests/fixtures/extern_never_verified/out.txt rename to anneal/v1/tests/fixtures/extern_never_verified/out.txt diff --git a/anneal/tests/fixtures/extern_never_verified/source/Cargo.toml b/anneal/v1/tests/fixtures/extern_never_verified/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/extern_never_verified/source/Cargo.toml rename to anneal/v1/tests/fixtures/extern_never_verified/source/Cargo.toml diff --git a/anneal/tests/fixtures/extern_never_verified/source/src/lib.rs b/anneal/v1/tests/fixtures/extern_never_verified/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/extern_never_verified/source/src/lib.rs rename to anneal/v1/tests/fixtures/extern_never_verified/source/src/lib.rs diff --git a/anneal/tests/fixtures/external_dep_failure/anneal.toml b/anneal/v1/tests/fixtures/external_dep_failure/anneal.toml similarity index 100% rename from anneal/tests/fixtures/external_dep_failure/anneal.toml rename to anneal/v1/tests/fixtures/external_dep_failure/anneal.toml diff --git a/anneal/tests/fixtures/external_dep_failure/source/Cargo.toml b/anneal/v1/tests/fixtures/external_dep_failure/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/external_dep_failure/source/Cargo.toml rename to anneal/v1/tests/fixtures/external_dep_failure/source/Cargo.toml diff --git a/anneal/tests/fixtures/external_dep_failure/source/app/Cargo.toml b/anneal/v1/tests/fixtures/external_dep_failure/source/app/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/external_dep_failure/source/app/Cargo.toml rename to anneal/v1/tests/fixtures/external_dep_failure/source/app/Cargo.toml diff --git a/anneal/tests/fixtures/external_dep_failure/source/app/src/lib.rs b/anneal/v1/tests/fixtures/external_dep_failure/source/app/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/external_dep_failure/source/app/src/lib.rs rename to anneal/v1/tests/fixtures/external_dep_failure/source/app/src/lib.rs diff --git a/anneal/tests/fixtures/external_dep_failure/source/utils/Cargo.toml b/anneal/v1/tests/fixtures/external_dep_failure/source/utils/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/external_dep_failure/source/utils/Cargo.toml rename to anneal/v1/tests/fixtures/external_dep_failure/source/utils/Cargo.toml diff --git a/anneal/tests/fixtures/external_dep_failure/source/utils/src/lib.rs b/anneal/v1/tests/fixtures/external_dep_failure/source/utils/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/external_dep_failure/source/utils/src/lib.rs rename to anneal/v1/tests/fixtures/external_dep_failure/source/utils/src/lib.rs diff --git a/anneal/tests/fixtures/external_path_dependency/anneal.toml b/anneal/v1/tests/fixtures/external_path_dependency/anneal.toml similarity index 100% rename from anneal/tests/fixtures/external_path_dependency/anneal.toml rename to anneal/v1/tests/fixtures/external_path_dependency/anneal.toml diff --git a/anneal/tests/fixtures/external_path_dependency/source/external_dep/Cargo.toml b/anneal/v1/tests/fixtures/external_path_dependency/source/external_dep/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/external_path_dependency/source/external_dep/Cargo.toml rename to anneal/v1/tests/fixtures/external_path_dependency/source/external_dep/Cargo.toml diff --git a/anneal/tests/fixtures/external_path_dependency/source/external_dep/src/lib.rs b/anneal/v1/tests/fixtures/external_path_dependency/source/external_dep/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/external_path_dependency/source/external_dep/src/lib.rs rename to anneal/v1/tests/fixtures/external_path_dependency/source/external_dep/src/lib.rs diff --git a/anneal/tests/fixtures/external_path_dependency/source/workspace/Cargo.toml b/anneal/v1/tests/fixtures/external_path_dependency/source/workspace/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/external_path_dependency/source/workspace/Cargo.toml rename to anneal/v1/tests/fixtures/external_path_dependency/source/workspace/Cargo.toml diff --git a/anneal/tests/fixtures/external_path_dependency/source/workspace/app/Cargo.toml b/anneal/v1/tests/fixtures/external_path_dependency/source/workspace/app/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/external_path_dependency/source/workspace/app/Cargo.toml rename to anneal/v1/tests/fixtures/external_path_dependency/source/workspace/app/Cargo.toml diff --git a/anneal/tests/fixtures/external_path_dependency/source/workspace/app/src/lib.rs b/anneal/v1/tests/fixtures/external_path_dependency/source/workspace/app/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/external_path_dependency/source/workspace/app/src/lib.rs rename to anneal/v1/tests/fixtures/external_path_dependency/source/workspace/app/src/lib.rs diff --git a/anneal/tests/fixtures/fs_missing_source/anneal.toml b/anneal/v1/tests/fixtures/fs_missing_source/anneal.toml similarity index 100% rename from anneal/tests/fixtures/fs_missing_source/anneal.toml rename to anneal/v1/tests/fixtures/fs_missing_source/anneal.toml diff --git a/anneal/tests/fixtures/fs_missing_source/expected.stderr b/anneal/v1/tests/fixtures/fs_missing_source/expected.stderr similarity index 100% rename from anneal/tests/fixtures/fs_missing_source/expected.stderr rename to anneal/v1/tests/fixtures/fs_missing_source/expected.stderr diff --git a/anneal/tests/fixtures/fs_missing_source/mock_charon_output.json b/anneal/v1/tests/fixtures/fs_missing_source/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/fs_missing_source/mock_charon_output.json rename to anneal/v1/tests/fixtures/fs_missing_source/mock_charon_output.json diff --git a/anneal/tests/fixtures/fs_missing_source/source/Cargo.toml b/anneal/v1/tests/fixtures/fs_missing_source/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/fs_missing_source/source/Cargo.toml rename to anneal/v1/tests/fixtures/fs_missing_source/source/Cargo.toml diff --git a/anneal/tests/fixtures/fs_missing_source/source/src/lib.rs b/anneal/v1/tests/fixtures/fs_missing_source/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/fs_missing_source/source/src/lib.rs rename to anneal/v1/tests/fixtures/fs_missing_source/source/src/lib.rs diff --git a/anneal/tests/fixtures/generate_output/anneal.toml b/anneal/v1/tests/fixtures/generate_output/anneal.toml similarity index 100% rename from anneal/tests/fixtures/generate_output/anneal.toml rename to anneal/v1/tests/fixtures/generate_output/anneal.toml diff --git a/anneal/tests/fixtures/generate_output/expected-generate.stdout b/anneal/v1/tests/fixtures/generate_output/expected-generate.stdout similarity index 100% rename from anneal/tests/fixtures/generate_output/expected-generate.stdout rename to anneal/v1/tests/fixtures/generate_output/expected-generate.stdout diff --git a/anneal/tests/fixtures/generate_output/source/Cargo.toml b/anneal/v1/tests/fixtures/generate_output/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/generate_output/source/Cargo.toml rename to anneal/v1/tests/fixtures/generate_output/source/Cargo.toml diff --git a/anneal/tests/fixtures/generate_output/source/src/lib.rs b/anneal/v1/tests/fixtures/generate_output/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/generate_output/source/src/lib.rs rename to anneal/v1/tests/fixtures/generate_output/source/src/lib.rs diff --git a/anneal/tests/fixtures/hidden_syntax_error/anneal.toml b/anneal/v1/tests/fixtures/hidden_syntax_error/anneal.toml similarity index 100% rename from anneal/tests/fixtures/hidden_syntax_error/anneal.toml rename to anneal/v1/tests/fixtures/hidden_syntax_error/anneal.toml diff --git a/anneal/tests/fixtures/hidden_syntax_error/expected.stderr b/anneal/v1/tests/fixtures/hidden_syntax_error/expected.stderr similarity index 100% rename from anneal/tests/fixtures/hidden_syntax_error/expected.stderr rename to anneal/v1/tests/fixtures/hidden_syntax_error/expected.stderr diff --git a/anneal/tests/fixtures/hidden_syntax_error/source/Cargo.toml b/anneal/v1/tests/fixtures/hidden_syntax_error/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/hidden_syntax_error/source/Cargo.toml rename to anneal/v1/tests/fixtures/hidden_syntax_error/source/Cargo.toml diff --git a/anneal/tests/fixtures/hidden_syntax_error/source/src/lib.rs b/anneal/v1/tests/fixtures/hidden_syntax_error/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/hidden_syntax_error/source/src/lib.rs rename to anneal/v1/tests/fixtures/hidden_syntax_error/source/src/lib.rs diff --git a/anneal/tests/fixtures/idempotency/anneal.toml b/anneal/v1/tests/fixtures/idempotency/anneal.toml similarity index 100% rename from anneal/tests/fixtures/idempotency/anneal.toml rename to anneal/v1/tests/fixtures/idempotency/anneal.toml diff --git a/anneal/tests/fixtures/idempotency/source/Cargo.toml b/anneal/v1/tests/fixtures/idempotency/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/idempotency/source/Cargo.toml rename to anneal/v1/tests/fixtures/idempotency/source/Cargo.toml diff --git a/anneal/tests/fixtures/idempotency/source/src/lib.rs b/anneal/v1/tests/fixtures/idempotency/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/idempotency/source/src/lib.rs rename to anneal/v1/tests/fixtures/idempotency/source/src/lib.rs diff --git a/anneal/tests/fixtures/is_valid_verification/anneal.toml b/anneal/v1/tests/fixtures/is_valid_verification/anneal.toml similarity index 100% rename from anneal/tests/fixtures/is_valid_verification/anneal.toml rename to anneal/v1/tests/fixtures/is_valid_verification/anneal.toml diff --git a/anneal/tests/fixtures/is_valid_verification/expected.stderr b/anneal/v1/tests/fixtures/is_valid_verification/expected.stderr similarity index 100% rename from anneal/tests/fixtures/is_valid_verification/expected.stderr rename to anneal/v1/tests/fixtures/is_valid_verification/expected.stderr diff --git a/anneal/tests/fixtures/is_valid_verification/source/Cargo.toml b/anneal/v1/tests/fixtures/is_valid_verification/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/is_valid_verification/source/Cargo.toml rename to anneal/v1/tests/fixtures/is_valid_verification/source/Cargo.toml diff --git a/anneal/tests/fixtures/is_valid_verification/source/src/lib.rs b/anneal/v1/tests/fixtures/is_valid_verification/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/is_valid_verification/source/src/lib.rs rename to anneal/v1/tests/fixtures/is_valid_verification/source/src/lib.rs diff --git a/anneal/tests/fixtures/json_code_suggestions/anneal.toml b/anneal/v1/tests/fixtures/json_code_suggestions/anneal.toml similarity index 100% rename from anneal/tests/fixtures/json_code_suggestions/anneal.toml rename to anneal/v1/tests/fixtures/json_code_suggestions/anneal.toml diff --git a/anneal/tests/fixtures/json_code_suggestions/expected.stderr b/anneal/v1/tests/fixtures/json_code_suggestions/expected.stderr similarity index 100% rename from anneal/tests/fixtures/json_code_suggestions/expected.stderr rename to anneal/v1/tests/fixtures/json_code_suggestions/expected.stderr diff --git a/anneal/tests/fixtures/json_code_suggestions/mock_charon_output.json b/anneal/v1/tests/fixtures/json_code_suggestions/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/json_code_suggestions/mock_charon_output.json rename to anneal/v1/tests/fixtures/json_code_suggestions/mock_charon_output.json diff --git a/anneal/tests/fixtures/json_code_suggestions/source/Cargo.toml b/anneal/v1/tests/fixtures/json_code_suggestions/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/json_code_suggestions/source/Cargo.toml rename to anneal/v1/tests/fixtures/json_code_suggestions/source/Cargo.toml diff --git a/anneal/tests/fixtures/json_code_suggestions/source/src/lib.rs b/anneal/v1/tests/fixtures/json_code_suggestions/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/json_code_suggestions/source/src/lib.rs rename to anneal/v1/tests/fixtures/json_code_suggestions/source/src/lib.rs diff --git a/anneal/tests/fixtures/json_linker_error/anneal.toml b/anneal/v1/tests/fixtures/json_linker_error/anneal.toml similarity index 100% rename from anneal/tests/fixtures/json_linker_error/anneal.toml rename to anneal/v1/tests/fixtures/json_linker_error/anneal.toml diff --git a/anneal/tests/fixtures/json_linker_error/expected.stderr b/anneal/v1/tests/fixtures/json_linker_error/expected.stderr similarity index 100% rename from anneal/tests/fixtures/json_linker_error/expected.stderr rename to anneal/v1/tests/fixtures/json_linker_error/expected.stderr diff --git a/anneal/tests/fixtures/json_linker_error/mock_charon_output.json b/anneal/v1/tests/fixtures/json_linker_error/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/json_linker_error/mock_charon_output.json rename to anneal/v1/tests/fixtures/json_linker_error/mock_charon_output.json diff --git a/anneal/tests/fixtures/json_linker_error/source/Cargo.toml b/anneal/v1/tests/fixtures/json_linker_error/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/json_linker_error/source/Cargo.toml rename to anneal/v1/tests/fixtures/json_linker_error/source/Cargo.toml diff --git a/anneal/tests/fixtures/json_linker_error/source/src/lib.rs b/anneal/v1/tests/fixtures/json_linker_error/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/json_linker_error/source/src/lib.rs rename to anneal/v1/tests/fixtures/json_linker_error/source/src/lib.rs diff --git a/anneal/tests/fixtures/json_nested_children/anneal.toml b/anneal/v1/tests/fixtures/json_nested_children/anneal.toml similarity index 100% rename from anneal/tests/fixtures/json_nested_children/anneal.toml rename to anneal/v1/tests/fixtures/json_nested_children/anneal.toml diff --git a/anneal/tests/fixtures/json_nested_children/expected.stderr b/anneal/v1/tests/fixtures/json_nested_children/expected.stderr similarity index 100% rename from anneal/tests/fixtures/json_nested_children/expected.stderr rename to anneal/v1/tests/fixtures/json_nested_children/expected.stderr diff --git a/anneal/tests/fixtures/json_nested_children/mock_charon_output.json b/anneal/v1/tests/fixtures/json_nested_children/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/json_nested_children/mock_charon_output.json rename to anneal/v1/tests/fixtures/json_nested_children/mock_charon_output.json diff --git a/anneal/tests/fixtures/json_nested_children/source/Cargo.toml b/anneal/v1/tests/fixtures/json_nested_children/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/json_nested_children/source/Cargo.toml rename to anneal/v1/tests/fixtures/json_nested_children/source/Cargo.toml diff --git a/anneal/tests/fixtures/json_nested_children/source/src/lib.rs b/anneal/v1/tests/fixtures/json_nested_children/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/json_nested_children/source/src/lib.rs rename to anneal/v1/tests/fixtures/json_nested_children/source/src/lib.rs diff --git a/anneal/tests/fixtures/lean_edge_cases/anneal.toml b/anneal/v1/tests/fixtures/lean_edge_cases/anneal.toml similarity index 100% rename from anneal/tests/fixtures/lean_edge_cases/anneal.toml rename to anneal/v1/tests/fixtures/lean_edge_cases/anneal.toml diff --git a/anneal/tests/fixtures/lean_edge_cases/source/Cargo.toml b/anneal/v1/tests/fixtures/lean_edge_cases/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/lean_edge_cases/source/Cargo.toml rename to anneal/v1/tests/fixtures/lean_edge_cases/source/Cargo.toml diff --git a/anneal/tests/fixtures/lean_edge_cases/source/src/lib.rs b/anneal/v1/tests/fixtures/lean_edge_cases/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/lean_edge_cases/source/src/lib.rs rename to anneal/v1/tests/fixtures/lean_edge_cases/source/src/lib.rs diff --git a/anneal/tests/fixtures/lean_generation/anneal.toml b/anneal/v1/tests/fixtures/lean_generation/anneal.toml similarity index 100% rename from anneal/tests/fixtures/lean_generation/anneal.toml rename to anneal/v1/tests/fixtures/lean_generation/anneal.toml diff --git a/anneal/tests/fixtures/lean_generation/expected.stderr b/anneal/v1/tests/fixtures/lean_generation/expected.stderr similarity index 100% rename from anneal/tests/fixtures/lean_generation/expected.stderr rename to anneal/v1/tests/fixtures/lean_generation/expected.stderr diff --git a/anneal/tests/fixtures/lean_generation/source/Cargo.lock b/anneal/v1/tests/fixtures/lean_generation/source/Cargo.lock similarity index 100% rename from anneal/tests/fixtures/lean_generation/source/Cargo.lock rename to anneal/v1/tests/fixtures/lean_generation/source/Cargo.lock diff --git a/anneal/tests/fixtures/lean_generation/source/Cargo.toml b/anneal/v1/tests/fixtures/lean_generation/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/lean_generation/source/Cargo.toml rename to anneal/v1/tests/fixtures/lean_generation/source/Cargo.toml diff --git a/anneal/tests/fixtures/lean_generation/source/src/lib.rs b/anneal/v1/tests/fixtures/lean_generation/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/lean_generation/source/src/lib.rs rename to anneal/v1/tests/fixtures/lean_generation/source/src/lib.rs diff --git a/anneal/tests/fixtures/libtest_ptr.rlib b/anneal/v1/tests/fixtures/libtest_ptr.rlib similarity index 100% rename from anneal/tests/fixtures/libtest_ptr.rlib rename to anneal/v1/tests/fixtures/libtest_ptr.rlib diff --git a/anneal/tests/fixtures/map_canonical_mismatch/anneal.toml b/anneal/v1/tests/fixtures/map_canonical_mismatch/anneal.toml similarity index 100% rename from anneal/tests/fixtures/map_canonical_mismatch/anneal.toml rename to anneal/v1/tests/fixtures/map_canonical_mismatch/anneal.toml diff --git a/anneal/tests/fixtures/map_canonical_mismatch/expected.stderr b/anneal/v1/tests/fixtures/map_canonical_mismatch/expected.stderr similarity index 100% rename from anneal/tests/fixtures/map_canonical_mismatch/expected.stderr rename to anneal/v1/tests/fixtures/map_canonical_mismatch/expected.stderr diff --git a/anneal/tests/fixtures/map_canonical_mismatch/mock_charon_output.json b/anneal/v1/tests/fixtures/map_canonical_mismatch/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/map_canonical_mismatch/mock_charon_output.json rename to anneal/v1/tests/fixtures/map_canonical_mismatch/mock_charon_output.json diff --git a/anneal/tests/fixtures/map_canonical_mismatch/source/Cargo.toml b/anneal/v1/tests/fixtures/map_canonical_mismatch/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/map_canonical_mismatch/source/Cargo.toml rename to anneal/v1/tests/fixtures/map_canonical_mismatch/source/Cargo.toml diff --git a/anneal/tests/fixtures/map_canonical_mismatch/source/crates/utils/src/lib.rs b/anneal/v1/tests/fixtures/map_canonical_mismatch/source/crates/utils/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_canonical_mismatch/source/crates/utils/src/lib.rs rename to anneal/v1/tests/fixtures/map_canonical_mismatch/source/crates/utils/src/lib.rs diff --git a/anneal/tests/fixtures/map_canonical_mismatch/source/src/lib.rs b/anneal/v1/tests/fixtures/map_canonical_mismatch/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_canonical_mismatch/source/src/lib.rs rename to anneal/v1/tests/fixtures/map_canonical_mismatch/source/src/lib.rs diff --git a/anneal/tests/fixtures/map_canonical_mismatch/source/src/macros.rs b/anneal/v1/tests/fixtures/map_canonical_mismatch/source/src/macros.rs similarity index 100% rename from anneal/tests/fixtures/map_canonical_mismatch/source/src/macros.rs rename to anneal/v1/tests/fixtures/map_canonical_mismatch/source/src/macros.rs diff --git a/anneal/tests/fixtures/map_canonical_mismatch/source/src/rewritten.rs b/anneal/v1/tests/fixtures/map_canonical_mismatch/source/src/rewritten.rs similarity index 100% rename from anneal/tests/fixtures/map_canonical_mismatch/source/src/rewritten.rs rename to anneal/v1/tests/fixtures/map_canonical_mismatch/source/src/rewritten.rs diff --git a/anneal/tests/fixtures/map_canonical_mismatch/source/src/symlinked.rs b/anneal/v1/tests/fixtures/map_canonical_mismatch/source/src/symlinked.rs similarity index 100% rename from anneal/tests/fixtures/map_canonical_mismatch/source/src/symlinked.rs rename to anneal/v1/tests/fixtures/map_canonical_mismatch/source/src/symlinked.rs diff --git a/anneal/tests/fixtures/map_external_dep/anneal.toml b/anneal/v1/tests/fixtures/map_external_dep/anneal.toml similarity index 100% rename from anneal/tests/fixtures/map_external_dep/anneal.toml rename to anneal/v1/tests/fixtures/map_external_dep/anneal.toml diff --git a/anneal/tests/fixtures/map_external_dep/expected.stderr b/anneal/v1/tests/fixtures/map_external_dep/expected.stderr similarity index 100% rename from anneal/tests/fixtures/map_external_dep/expected.stderr rename to anneal/v1/tests/fixtures/map_external_dep/expected.stderr diff --git a/anneal/tests/fixtures/map_external_dep/mock_charon_output.json b/anneal/v1/tests/fixtures/map_external_dep/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/map_external_dep/mock_charon_output.json rename to anneal/v1/tests/fixtures/map_external_dep/mock_charon_output.json diff --git a/anneal/tests/fixtures/map_external_dep/source/Cargo.toml b/anneal/v1/tests/fixtures/map_external_dep/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/map_external_dep/source/Cargo.toml rename to anneal/v1/tests/fixtures/map_external_dep/source/Cargo.toml diff --git a/anneal/tests/fixtures/map_external_dep/source/src/lib.rs b/anneal/v1/tests/fixtures/map_external_dep/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_external_dep/source/src/lib.rs rename to anneal/v1/tests/fixtures/map_external_dep/source/src/lib.rs diff --git a/anneal/tests/fixtures/map_macro_expansion/anneal.toml b/anneal/v1/tests/fixtures/map_macro_expansion/anneal.toml similarity index 100% rename from anneal/tests/fixtures/map_macro_expansion/anneal.toml rename to anneal/v1/tests/fixtures/map_macro_expansion/anneal.toml diff --git a/anneal/tests/fixtures/map_macro_expansion/expected.stderr b/anneal/v1/tests/fixtures/map_macro_expansion/expected.stderr similarity index 100% rename from anneal/tests/fixtures/map_macro_expansion/expected.stderr rename to anneal/v1/tests/fixtures/map_macro_expansion/expected.stderr diff --git a/anneal/tests/fixtures/map_macro_expansion/mock_charon_output.json b/anneal/v1/tests/fixtures/map_macro_expansion/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/map_macro_expansion/mock_charon_output.json rename to anneal/v1/tests/fixtures/map_macro_expansion/mock_charon_output.json diff --git a/anneal/tests/fixtures/map_macro_expansion/source/Cargo.toml b/anneal/v1/tests/fixtures/map_macro_expansion/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/map_macro_expansion/source/Cargo.toml rename to anneal/v1/tests/fixtures/map_macro_expansion/source/Cargo.toml diff --git a/anneal/tests/fixtures/map_macro_expansion/source/crates/utils/src/lib.rs b/anneal/v1/tests/fixtures/map_macro_expansion/source/crates/utils/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_macro_expansion/source/crates/utils/src/lib.rs rename to anneal/v1/tests/fixtures/map_macro_expansion/source/crates/utils/src/lib.rs diff --git a/anneal/tests/fixtures/map_macro_expansion/source/src/lib.rs b/anneal/v1/tests/fixtures/map_macro_expansion/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_macro_expansion/source/src/lib.rs rename to anneal/v1/tests/fixtures/map_macro_expansion/source/src/lib.rs diff --git a/anneal/tests/fixtures/map_macro_expansion/source/src/macros.rs b/anneal/v1/tests/fixtures/map_macro_expansion/source/src/macros.rs similarity index 100% rename from anneal/tests/fixtures/map_macro_expansion/source/src/macros.rs rename to anneal/v1/tests/fixtures/map_macro_expansion/source/src/macros.rs diff --git a/anneal/tests/fixtures/map_macro_expansion/source/src/rewritten.rs b/anneal/v1/tests/fixtures/map_macro_expansion/source/src/rewritten.rs similarity index 100% rename from anneal/tests/fixtures/map_macro_expansion/source/src/rewritten.rs rename to anneal/v1/tests/fixtures/map_macro_expansion/source/src/rewritten.rs diff --git a/anneal/tests/fixtures/map_macro_expansion/source/src/symlinked.rs b/anneal/v1/tests/fixtures/map_macro_expansion/source/src/symlinked.rs similarity index 100% rename from anneal/tests/fixtures/map_macro_expansion/source/src/symlinked.rs rename to anneal/v1/tests/fixtures/map_macro_expansion/source/src/symlinked.rs diff --git a/anneal/tests/fixtures/map_mixed_diagnostics/anneal.toml b/anneal/v1/tests/fixtures/map_mixed_diagnostics/anneal.toml similarity index 100% rename from anneal/tests/fixtures/map_mixed_diagnostics/anneal.toml rename to anneal/v1/tests/fixtures/map_mixed_diagnostics/anneal.toml diff --git a/anneal/tests/fixtures/map_mixed_diagnostics/expected.stderr b/anneal/v1/tests/fixtures/map_mixed_diagnostics/expected.stderr similarity index 100% rename from anneal/tests/fixtures/map_mixed_diagnostics/expected.stderr rename to anneal/v1/tests/fixtures/map_mixed_diagnostics/expected.stderr diff --git a/anneal/tests/fixtures/map_mixed_diagnostics/mock_charon_output.json b/anneal/v1/tests/fixtures/map_mixed_diagnostics/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/map_mixed_diagnostics/mock_charon_output.json rename to anneal/v1/tests/fixtures/map_mixed_diagnostics/mock_charon_output.json diff --git a/anneal/tests/fixtures/map_mixed_diagnostics/source/Cargo.toml b/anneal/v1/tests/fixtures/map_mixed_diagnostics/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/map_mixed_diagnostics/source/Cargo.toml rename to anneal/v1/tests/fixtures/map_mixed_diagnostics/source/Cargo.toml diff --git a/anneal/tests/fixtures/map_mixed_diagnostics/source/crates/utils/src/lib.rs b/anneal/v1/tests/fixtures/map_mixed_diagnostics/source/crates/utils/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_mixed_diagnostics/source/crates/utils/src/lib.rs rename to anneal/v1/tests/fixtures/map_mixed_diagnostics/source/crates/utils/src/lib.rs diff --git a/anneal/tests/fixtures/map_mixed_diagnostics/source/src/lib.rs b/anneal/v1/tests/fixtures/map_mixed_diagnostics/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_mixed_diagnostics/source/src/lib.rs rename to anneal/v1/tests/fixtures/map_mixed_diagnostics/source/src/lib.rs diff --git a/anneal/tests/fixtures/map_mixed_diagnostics/source/src/macros.rs b/anneal/v1/tests/fixtures/map_mixed_diagnostics/source/src/macros.rs similarity index 100% rename from anneal/tests/fixtures/map_mixed_diagnostics/source/src/macros.rs rename to anneal/v1/tests/fixtures/map_mixed_diagnostics/source/src/macros.rs diff --git a/anneal/tests/fixtures/map_mixed_diagnostics/source/src/rewritten.rs b/anneal/v1/tests/fixtures/map_mixed_diagnostics/source/src/rewritten.rs similarity index 100% rename from anneal/tests/fixtures/map_mixed_diagnostics/source/src/rewritten.rs rename to anneal/v1/tests/fixtures/map_mixed_diagnostics/source/src/rewritten.rs diff --git a/anneal/tests/fixtures/map_mixed_diagnostics/source/src/symlinked.rs b/anneal/v1/tests/fixtures/map_mixed_diagnostics/source/src/symlinked.rs similarity index 100% rename from anneal/tests/fixtures/map_mixed_diagnostics/source/src/symlinked.rs rename to anneal/v1/tests/fixtures/map_mixed_diagnostics/source/src/symlinked.rs diff --git a/anneal/tests/fixtures/map_path_traversal/anneal.toml b/anneal/v1/tests/fixtures/map_path_traversal/anneal.toml similarity index 100% rename from anneal/tests/fixtures/map_path_traversal/anneal.toml rename to anneal/v1/tests/fixtures/map_path_traversal/anneal.toml diff --git a/anneal/tests/fixtures/map_path_traversal/expected.stderr b/anneal/v1/tests/fixtures/map_path_traversal/expected.stderr similarity index 100% rename from anneal/tests/fixtures/map_path_traversal/expected.stderr rename to anneal/v1/tests/fixtures/map_path_traversal/expected.stderr diff --git a/anneal/tests/fixtures/map_path_traversal/mock_charon_output.json b/anneal/v1/tests/fixtures/map_path_traversal/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/map_path_traversal/mock_charon_output.json rename to anneal/v1/tests/fixtures/map_path_traversal/mock_charon_output.json diff --git a/anneal/tests/fixtures/map_path_traversal/source/Cargo.toml b/anneal/v1/tests/fixtures/map_path_traversal/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/map_path_traversal/source/Cargo.toml rename to anneal/v1/tests/fixtures/map_path_traversal/source/Cargo.toml diff --git a/anneal/tests/fixtures/map_path_traversal/source/src/lib.rs b/anneal/v1/tests/fixtures/map_path_traversal/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_path_traversal/source/src/lib.rs rename to anneal/v1/tests/fixtures/map_path_traversal/source/src/lib.rs diff --git a/anneal/tests/fixtures/map_relative_path/anneal.toml b/anneal/v1/tests/fixtures/map_relative_path/anneal.toml similarity index 100% rename from anneal/tests/fixtures/map_relative_path/anneal.toml rename to anneal/v1/tests/fixtures/map_relative_path/anneal.toml diff --git a/anneal/tests/fixtures/map_relative_path/expected.stderr b/anneal/v1/tests/fixtures/map_relative_path/expected.stderr similarity index 100% rename from anneal/tests/fixtures/map_relative_path/expected.stderr rename to anneal/v1/tests/fixtures/map_relative_path/expected.stderr diff --git a/anneal/tests/fixtures/map_relative_path/mock_charon_output.json b/anneal/v1/tests/fixtures/map_relative_path/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/map_relative_path/mock_charon_output.json rename to anneal/v1/tests/fixtures/map_relative_path/mock_charon_output.json diff --git a/anneal/tests/fixtures/map_relative_path/source/Cargo.toml b/anneal/v1/tests/fixtures/map_relative_path/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/map_relative_path/source/Cargo.toml rename to anneal/v1/tests/fixtures/map_relative_path/source/Cargo.toml diff --git a/anneal/tests/fixtures/map_relative_path/source/crates/utils/src/lib.rs b/anneal/v1/tests/fixtures/map_relative_path/source/crates/utils/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_relative_path/source/crates/utils/src/lib.rs rename to anneal/v1/tests/fixtures/map_relative_path/source/crates/utils/src/lib.rs diff --git a/anneal/tests/fixtures/map_relative_path/source/src/lib.rs b/anneal/v1/tests/fixtures/map_relative_path/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_relative_path/source/src/lib.rs rename to anneal/v1/tests/fixtures/map_relative_path/source/src/lib.rs diff --git a/anneal/tests/fixtures/map_relative_path/source/src/macros.rs b/anneal/v1/tests/fixtures/map_relative_path/source/src/macros.rs similarity index 100% rename from anneal/tests/fixtures/map_relative_path/source/src/macros.rs rename to anneal/v1/tests/fixtures/map_relative_path/source/src/macros.rs diff --git a/anneal/tests/fixtures/map_relative_path/source/src/rewritten.rs b/anneal/v1/tests/fixtures/map_relative_path/source/src/rewritten.rs similarity index 100% rename from anneal/tests/fixtures/map_relative_path/source/src/rewritten.rs rename to anneal/v1/tests/fixtures/map_relative_path/source/src/rewritten.rs diff --git a/anneal/tests/fixtures/map_relative_path/source/src/symlinked.rs b/anneal/v1/tests/fixtures/map_relative_path/source/src/symlinked.rs similarity index 100% rename from anneal/tests/fixtures/map_relative_path/source/src/symlinked.rs rename to anneal/v1/tests/fixtures/map_relative_path/source/src/symlinked.rs diff --git a/anneal/tests/fixtures/map_std_lib/anneal.toml b/anneal/v1/tests/fixtures/map_std_lib/anneal.toml similarity index 100% rename from anneal/tests/fixtures/map_std_lib/anneal.toml rename to anneal/v1/tests/fixtures/map_std_lib/anneal.toml diff --git a/anneal/tests/fixtures/map_std_lib/expected.stderr b/anneal/v1/tests/fixtures/map_std_lib/expected.stderr similarity index 100% rename from anneal/tests/fixtures/map_std_lib/expected.stderr rename to anneal/v1/tests/fixtures/map_std_lib/expected.stderr diff --git a/anneal/tests/fixtures/map_std_lib/mock_charon_output.json b/anneal/v1/tests/fixtures/map_std_lib/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/map_std_lib/mock_charon_output.json rename to anneal/v1/tests/fixtures/map_std_lib/mock_charon_output.json diff --git a/anneal/tests/fixtures/map_std_lib/source/Cargo.toml b/anneal/v1/tests/fixtures/map_std_lib/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/map_std_lib/source/Cargo.toml rename to anneal/v1/tests/fixtures/map_std_lib/source/Cargo.toml diff --git a/anneal/tests/fixtures/map_std_lib/source/crates/utils/src/lib.rs b/anneal/v1/tests/fixtures/map_std_lib/source/crates/utils/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_std_lib/source/crates/utils/src/lib.rs rename to anneal/v1/tests/fixtures/map_std_lib/source/crates/utils/src/lib.rs diff --git a/anneal/tests/fixtures/map_std_lib/source/src/lib.rs b/anneal/v1/tests/fixtures/map_std_lib/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_std_lib/source/src/lib.rs rename to anneal/v1/tests/fixtures/map_std_lib/source/src/lib.rs diff --git a/anneal/tests/fixtures/map_std_lib/source/src/macros.rs b/anneal/v1/tests/fixtures/map_std_lib/source/src/macros.rs similarity index 100% rename from anneal/tests/fixtures/map_std_lib/source/src/macros.rs rename to anneal/v1/tests/fixtures/map_std_lib/source/src/macros.rs diff --git a/anneal/tests/fixtures/map_std_lib/source/src/rewritten.rs b/anneal/v1/tests/fixtures/map_std_lib/source/src/rewritten.rs similarity index 100% rename from anneal/tests/fixtures/map_std_lib/source/src/rewritten.rs rename to anneal/v1/tests/fixtures/map_std_lib/source/src/rewritten.rs diff --git a/anneal/tests/fixtures/map_std_lib/source/src/symlinked.rs b/anneal/v1/tests/fixtures/map_std_lib/source/src/symlinked.rs similarity index 100% rename from anneal/tests/fixtures/map_std_lib/source/src/symlinked.rs rename to anneal/v1/tests/fixtures/map_std_lib/source/src/symlinked.rs diff --git a/anneal/tests/fixtures/map_std_library/anneal.toml b/anneal/v1/tests/fixtures/map_std_library/anneal.toml similarity index 100% rename from anneal/tests/fixtures/map_std_library/anneal.toml rename to anneal/v1/tests/fixtures/map_std_library/anneal.toml diff --git a/anneal/tests/fixtures/map_std_library/expected.stderr b/anneal/v1/tests/fixtures/map_std_library/expected.stderr similarity index 100% rename from anneal/tests/fixtures/map_std_library/expected.stderr rename to anneal/v1/tests/fixtures/map_std_library/expected.stderr diff --git a/anneal/tests/fixtures/map_std_library/mock_charon_output.json b/anneal/v1/tests/fixtures/map_std_library/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/map_std_library/mock_charon_output.json rename to anneal/v1/tests/fixtures/map_std_library/mock_charon_output.json diff --git a/anneal/tests/fixtures/map_std_library/source/Cargo.toml b/anneal/v1/tests/fixtures/map_std_library/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/map_std_library/source/Cargo.toml rename to anneal/v1/tests/fixtures/map_std_library/source/Cargo.toml diff --git a/anneal/tests/fixtures/map_std_library/source/src/lib.rs b/anneal/v1/tests/fixtures/map_std_library/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_std_library/source/src/lib.rs rename to anneal/v1/tests/fixtures/map_std_library/source/src/lib.rs diff --git a/anneal/tests/fixtures/map_symlinked_file/anneal.toml b/anneal/v1/tests/fixtures/map_symlinked_file/anneal.toml similarity index 100% rename from anneal/tests/fixtures/map_symlinked_file/anneal.toml rename to anneal/v1/tests/fixtures/map_symlinked_file/anneal.toml diff --git a/anneal/tests/fixtures/map_symlinked_file/expected.stderr b/anneal/v1/tests/fixtures/map_symlinked_file/expected.stderr similarity index 100% rename from anneal/tests/fixtures/map_symlinked_file/expected.stderr rename to anneal/v1/tests/fixtures/map_symlinked_file/expected.stderr diff --git a/anneal/tests/fixtures/map_symlinked_file/mock_charon_output.json b/anneal/v1/tests/fixtures/map_symlinked_file/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/map_symlinked_file/mock_charon_output.json rename to anneal/v1/tests/fixtures/map_symlinked_file/mock_charon_output.json diff --git a/anneal/tests/fixtures/map_symlinked_file/source/Cargo.toml b/anneal/v1/tests/fixtures/map_symlinked_file/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/map_symlinked_file/source/Cargo.toml rename to anneal/v1/tests/fixtures/map_symlinked_file/source/Cargo.toml diff --git a/anneal/tests/fixtures/map_symlinked_file/source/src/lib.rs b/anneal/v1/tests/fixtures/map_symlinked_file/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_symlinked_file/source/src/lib.rs rename to anneal/v1/tests/fixtures/map_symlinked_file/source/src/lib.rs diff --git a/anneal/tests/fixtures/map_symlinked_file/source/src/untransformed.rs b/anneal/v1/tests/fixtures/map_symlinked_file/source/src/untransformed.rs similarity index 100% rename from anneal/tests/fixtures/map_symlinked_file/source/src/untransformed.rs rename to anneal/v1/tests/fixtures/map_symlinked_file/source/src/untransformed.rs diff --git a/anneal/tests/fixtures/map_workspace_path_dep/anneal.toml b/anneal/v1/tests/fixtures/map_workspace_path_dep/anneal.toml similarity index 100% rename from anneal/tests/fixtures/map_workspace_path_dep/anneal.toml rename to anneal/v1/tests/fixtures/map_workspace_path_dep/anneal.toml diff --git a/anneal/tests/fixtures/map_workspace_path_dep/expected.stderr b/anneal/v1/tests/fixtures/map_workspace_path_dep/expected.stderr similarity index 100% rename from anneal/tests/fixtures/map_workspace_path_dep/expected.stderr rename to anneal/v1/tests/fixtures/map_workspace_path_dep/expected.stderr diff --git a/anneal/tests/fixtures/map_workspace_path_dep/mock_charon_output.json b/anneal/v1/tests/fixtures/map_workspace_path_dep/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/map_workspace_path_dep/mock_charon_output.json rename to anneal/v1/tests/fixtures/map_workspace_path_dep/mock_charon_output.json diff --git a/anneal/tests/fixtures/map_workspace_path_dep/source/Cargo.toml b/anneal/v1/tests/fixtures/map_workspace_path_dep/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/map_workspace_path_dep/source/Cargo.toml rename to anneal/v1/tests/fixtures/map_workspace_path_dep/source/Cargo.toml diff --git a/anneal/tests/fixtures/map_workspace_path_dep/source/crates/utils/src/lib.rs b/anneal/v1/tests/fixtures/map_workspace_path_dep/source/crates/utils/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_workspace_path_dep/source/crates/utils/src/lib.rs rename to anneal/v1/tests/fixtures/map_workspace_path_dep/source/crates/utils/src/lib.rs diff --git a/anneal/tests/fixtures/map_workspace_path_dep/source/src/lib.rs b/anneal/v1/tests/fixtures/map_workspace_path_dep/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/map_workspace_path_dep/source/src/lib.rs rename to anneal/v1/tests/fixtures/map_workspace_path_dep/source/src/lib.rs diff --git a/anneal/tests/fixtures/map_workspace_path_dep/source/src/macros.rs b/anneal/v1/tests/fixtures/map_workspace_path_dep/source/src/macros.rs similarity index 100% rename from anneal/tests/fixtures/map_workspace_path_dep/source/src/macros.rs rename to anneal/v1/tests/fixtures/map_workspace_path_dep/source/src/macros.rs diff --git a/anneal/tests/fixtures/map_workspace_path_dep/source/src/rewritten.rs b/anneal/v1/tests/fixtures/map_workspace_path_dep/source/src/rewritten.rs similarity index 100% rename from anneal/tests/fixtures/map_workspace_path_dep/source/src/rewritten.rs rename to anneal/v1/tests/fixtures/map_workspace_path_dep/source/src/rewritten.rs diff --git a/anneal/tests/fixtures/map_workspace_path_dep/source/src/symlinked.rs b/anneal/v1/tests/fixtures/map_workspace_path_dep/source/src/symlinked.rs similarity index 100% rename from anneal/tests/fixtures/map_workspace_path_dep/source/src/symlinked.rs rename to anneal/v1/tests/fixtures/map_workspace_path_dep/source/src/symlinked.rs diff --git a/anneal/tests/fixtures/missing_output/anneal.toml b/anneal/v1/tests/fixtures/missing_output/anneal.toml similarity index 100% rename from anneal/tests/fixtures/missing_output/anneal.toml rename to anneal/v1/tests/fixtures/missing_output/anneal.toml diff --git a/anneal/tests/fixtures/missing_output/expected.stderr b/anneal/v1/tests/fixtures/missing_output/expected.stderr similarity index 100% rename from anneal/tests/fixtures/missing_output/expected.stderr rename to anneal/v1/tests/fixtures/missing_output/expected.stderr diff --git a/anneal/tests/fixtures/missing_output/mock_aeneas.sh b/anneal/v1/tests/fixtures/missing_output/mock_aeneas.sh similarity index 100% rename from anneal/tests/fixtures/missing_output/mock_aeneas.sh rename to anneal/v1/tests/fixtures/missing_output/mock_aeneas.sh diff --git a/anneal/tests/fixtures/missing_output/source/Cargo.toml b/anneal/v1/tests/fixtures/missing_output/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/missing_output/source/Cargo.toml rename to anneal/v1/tests/fixtures/missing_output/source/Cargo.toml diff --git a/anneal/tests/fixtures/missing_output/source/src/lib.rs b/anneal/v1/tests/fixtures/missing_output/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/missing_output/source/src/lib.rs rename to anneal/v1/tests/fixtures/missing_output/source/src/lib.rs diff --git a/anneal/tests/fixtures/mixed_workspace/anneal.toml b/anneal/v1/tests/fixtures/mixed_workspace/anneal.toml similarity index 100% rename from anneal/tests/fixtures/mixed_workspace/anneal.toml rename to anneal/v1/tests/fixtures/mixed_workspace/anneal.toml diff --git a/anneal/tests/fixtures/mixed_workspace/source/Cargo.toml b/anneal/v1/tests/fixtures/mixed_workspace/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/mixed_workspace/source/Cargo.toml rename to anneal/v1/tests/fixtures/mixed_workspace/source/Cargo.toml diff --git a/anneal/tests/fixtures/mixed_workspace/source/crates/app/Cargo.toml b/anneal/v1/tests/fixtures/mixed_workspace/source/crates/app/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/mixed_workspace/source/crates/app/Cargo.toml rename to anneal/v1/tests/fixtures/mixed_workspace/source/crates/app/Cargo.toml diff --git a/anneal/tests/fixtures/mixed_workspace/source/crates/app/src/lib.rs b/anneal/v1/tests/fixtures/mixed_workspace/source/crates/app/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/mixed_workspace/source/crates/app/src/lib.rs rename to anneal/v1/tests/fixtures/mixed_workspace/source/crates/app/src/lib.rs diff --git a/anneal/tests/fixtures/mixed_workspace/source/crates/dep/Cargo.toml b/anneal/v1/tests/fixtures/mixed_workspace/source/crates/dep/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/mixed_workspace/source/crates/dep/Cargo.toml rename to anneal/v1/tests/fixtures/mixed_workspace/source/crates/dep/Cargo.toml diff --git a/anneal/tests/fixtures/mixed_workspace/source/crates/dep/src/lib.rs b/anneal/v1/tests/fixtures/mixed_workspace/source/crates/dep/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/mixed_workspace/source/crates/dep/src/lib.rs rename to anneal/v1/tests/fixtures/mixed_workspace/source/crates/dep/src/lib.rs diff --git a/anneal/tests/fixtures/module_resolution/anneal.toml b/anneal/v1/tests/fixtures/module_resolution/anneal.toml similarity index 100% rename from anneal/tests/fixtures/module_resolution/anneal.toml rename to anneal/v1/tests/fixtures/module_resolution/anneal.toml diff --git a/anneal/tests/fixtures/module_resolution/extra.rs b/anneal/v1/tests/fixtures/module_resolution/extra.rs similarity index 100% rename from anneal/tests/fixtures/module_resolution/extra.rs rename to anneal/v1/tests/fixtures/module_resolution/extra.rs diff --git a/anneal/tests/fixtures/module_resolution/source/Cargo.toml b/anneal/v1/tests/fixtures/module_resolution/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/module_resolution/source/Cargo.toml rename to anneal/v1/tests/fixtures/module_resolution/source/Cargo.toml diff --git a/anneal/tests/fixtures/module_resolution/source/src/a.rs b/anneal/v1/tests/fixtures/module_resolution/source/src/a.rs similarity index 100% rename from anneal/tests/fixtures/module_resolution/source/src/a.rs rename to anneal/v1/tests/fixtures/module_resolution/source/src/a.rs diff --git a/anneal/tests/fixtures/module_resolution/source/src/a/b.rs b/anneal/v1/tests/fixtures/module_resolution/source/src/a/b.rs similarity index 100% rename from anneal/tests/fixtures/module_resolution/source/src/a/b.rs rename to anneal/v1/tests/fixtures/module_resolution/source/src/a/b.rs diff --git a/anneal/tests/fixtures/module_resolution/source/src/bar/mod.rs b/anneal/v1/tests/fixtures/module_resolution/source/src/bar/mod.rs similarity index 100% rename from anneal/tests/fixtures/module_resolution/source/src/bar/mod.rs rename to anneal/v1/tests/fixtures/module_resolution/source/src/bar/mod.rs diff --git a/anneal/tests/fixtures/module_resolution/source/src/c.rs b/anneal/v1/tests/fixtures/module_resolution/source/src/c.rs similarity index 100% rename from anneal/tests/fixtures/module_resolution/source/src/c.rs rename to anneal/v1/tests/fixtures/module_resolution/source/src/c.rs diff --git a/anneal/tests/fixtures/module_resolution/source/src/foo.rs b/anneal/v1/tests/fixtures/module_resolution/source/src/foo.rs similarity index 100% rename from anneal/tests/fixtures/module_resolution/source/src/foo.rs rename to anneal/v1/tests/fixtures/module_resolution/source/src/foo.rs diff --git a/anneal/tests/fixtures/module_resolution/source/src/lib.rs b/anneal/v1/tests/fixtures/module_resolution/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/module_resolution/source/src/lib.rs rename to anneal/v1/tests/fixtures/module_resolution/source/src/lib.rs diff --git a/anneal/tests/fixtures/module_resolution/source/src/sys/unix.rs b/anneal/v1/tests/fixtures/module_resolution/source/src/sys/unix.rs similarity index 100% rename from anneal/tests/fixtures/module_resolution/source/src/sys/unix.rs rename to anneal/v1/tests/fixtures/module_resolution/source/src/sys/unix.rs diff --git a/anneal/tests/fixtures/multi_artifact/anneal.toml b/anneal/v1/tests/fixtures/multi_artifact/anneal.toml similarity index 100% rename from anneal/tests/fixtures/multi_artifact/anneal.toml rename to anneal/v1/tests/fixtures/multi_artifact/anneal.toml diff --git a/anneal/tests/fixtures/multi_artifact/expected b/anneal/v1/tests/fixtures/multi_artifact/expected similarity index 100% rename from anneal/tests/fixtures/multi_artifact/expected rename to anneal/v1/tests/fixtures/multi_artifact/expected diff --git a/anneal/tests/fixtures/multi_artifact/expected.stderr b/anneal/v1/tests/fixtures/multi_artifact/expected.stderr similarity index 100% rename from anneal/tests/fixtures/multi_artifact/expected.stderr rename to anneal/v1/tests/fixtures/multi_artifact/expected.stderr diff --git a/anneal/tests/fixtures/multi_artifact/source/Cargo.toml b/anneal/v1/tests/fixtures/multi_artifact/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/multi_artifact/source/Cargo.toml rename to anneal/v1/tests/fixtures/multi_artifact/source/Cargo.toml diff --git a/anneal/tests/fixtures/multi_artifact/source/src/lib.rs b/anneal/v1/tests/fixtures/multi_artifact/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/multi_artifact/source/src/lib.rs rename to anneal/v1/tests/fixtures/multi_artifact/source/src/lib.rs diff --git a/anneal/tests/fixtures/multiple_errors/anneal.toml b/anneal/v1/tests/fixtures/multiple_errors/anneal.toml similarity index 100% rename from anneal/tests/fixtures/multiple_errors/anneal.toml rename to anneal/v1/tests/fixtures/multiple_errors/anneal.toml diff --git a/anneal/tests/fixtures/multiple_errors/expected.stderr b/anneal/v1/tests/fixtures/multiple_errors/expected.stderr similarity index 100% rename from anneal/tests/fixtures/multiple_errors/expected.stderr rename to anneal/v1/tests/fixtures/multiple_errors/expected.stderr diff --git a/anneal/tests/fixtures/multiple_errors/source/Cargo.toml b/anneal/v1/tests/fixtures/multiple_errors/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/multiple_errors/source/Cargo.toml rename to anneal/v1/tests/fixtures/multiple_errors/source/Cargo.toml diff --git a/anneal/tests/fixtures/multiple_errors/source/src/a.rs b/anneal/v1/tests/fixtures/multiple_errors/source/src/a.rs similarity index 100% rename from anneal/tests/fixtures/multiple_errors/source/src/a.rs rename to anneal/v1/tests/fixtures/multiple_errors/source/src/a.rs diff --git a/anneal/tests/fixtures/multiple_errors/source/src/b.rs b/anneal/v1/tests/fixtures/multiple_errors/source/src/b.rs similarity index 100% rename from anneal/tests/fixtures/multiple_errors/source/src/b.rs rename to anneal/v1/tests/fixtures/multiple_errors/source/src/b.rs diff --git a/anneal/tests/fixtures/multiple_errors/source/src/lib.rs b/anneal/v1/tests/fixtures/multiple_errors/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/multiple_errors/source/src/lib.rs rename to anneal/v1/tests/fixtures/multiple_errors/source/src/lib.rs diff --git a/anneal/tests/fixtures/named_bounds_failures/anneal.toml b/anneal/v1/tests/fixtures/named_bounds_failures/anneal.toml similarity index 100% rename from anneal/tests/fixtures/named_bounds_failures/anneal.toml rename to anneal/v1/tests/fixtures/named_bounds_failures/anneal.toml diff --git a/anneal/tests/fixtures/named_bounds_failures/expected.stderr b/anneal/v1/tests/fixtures/named_bounds_failures/expected.stderr similarity index 100% rename from anneal/tests/fixtures/named_bounds_failures/expected.stderr rename to anneal/v1/tests/fixtures/named_bounds_failures/expected.stderr diff --git a/anneal/tests/fixtures/named_bounds_failures/source/Cargo.toml b/anneal/v1/tests/fixtures/named_bounds_failures/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/named_bounds_failures/source/Cargo.toml rename to anneal/v1/tests/fixtures/named_bounds_failures/source/Cargo.toml diff --git a/anneal/tests/fixtures/named_bounds_failures/source/src/lib.rs b/anneal/v1/tests/fixtures/named_bounds_failures/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/named_bounds_failures/source/src/lib.rs rename to anneal/v1/tests/fixtures/named_bounds_failures/source/src/lib.rs diff --git a/anneal/tests/fixtures/named_bounds_lean_failures/anneal.toml b/anneal/v1/tests/fixtures/named_bounds_lean_failures/anneal.toml similarity index 100% rename from anneal/tests/fixtures/named_bounds_lean_failures/anneal.toml rename to anneal/v1/tests/fixtures/named_bounds_lean_failures/anneal.toml diff --git a/anneal/tests/fixtures/named_bounds_lean_failures/expected.stderr b/anneal/v1/tests/fixtures/named_bounds_lean_failures/expected.stderr similarity index 100% rename from anneal/tests/fixtures/named_bounds_lean_failures/expected.stderr rename to anneal/v1/tests/fixtures/named_bounds_lean_failures/expected.stderr diff --git a/anneal/tests/fixtures/named_bounds_lean_failures/source/Cargo.toml b/anneal/v1/tests/fixtures/named_bounds_lean_failures/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/named_bounds_lean_failures/source/Cargo.toml rename to anneal/v1/tests/fixtures/named_bounds_lean_failures/source/Cargo.toml diff --git a/anneal/tests/fixtures/named_bounds_lean_failures/source/src/lib.rs b/anneal/v1/tests/fixtures/named_bounds_lean_failures/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/named_bounds_lean_failures/source/src/lib.rs rename to anneal/v1/tests/fixtures/named_bounds_lean_failures/source/src/lib.rs diff --git a/anneal/tests/fixtures/named_bounds_validation_failures/anneal.toml b/anneal/v1/tests/fixtures/named_bounds_validation_failures/anneal.toml similarity index 100% rename from anneal/tests/fixtures/named_bounds_validation_failures/anneal.toml rename to anneal/v1/tests/fixtures/named_bounds_validation_failures/anneal.toml diff --git a/anneal/tests/fixtures/named_bounds_validation_failures/expected.stderr b/anneal/v1/tests/fixtures/named_bounds_validation_failures/expected.stderr similarity index 100% rename from anneal/tests/fixtures/named_bounds_validation_failures/expected.stderr rename to anneal/v1/tests/fixtures/named_bounds_validation_failures/expected.stderr diff --git a/anneal/tests/fixtures/named_bounds_validation_failures/source/Cargo.toml b/anneal/v1/tests/fixtures/named_bounds_validation_failures/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/named_bounds_validation_failures/source/Cargo.toml rename to anneal/v1/tests/fixtures/named_bounds_validation_failures/source/Cargo.toml diff --git a/anneal/tests/fixtures/named_bounds_validation_failures/source/src/lib.rs b/anneal/v1/tests/fixtures/named_bounds_validation_failures/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/named_bounds_validation_failures/source/src/lib.rs rename to anneal/v1/tests/fixtures/named_bounds_validation_failures/source/src/lib.rs diff --git a/anneal/tests/fixtures/nested_item_error/anneal.toml b/anneal/v1/tests/fixtures/nested_item_error/anneal.toml similarity index 100% rename from anneal/tests/fixtures/nested_item_error/anneal.toml rename to anneal/v1/tests/fixtures/nested_item_error/anneal.toml diff --git a/anneal/tests/fixtures/nested_item_error/expected.stderr b/anneal/v1/tests/fixtures/nested_item_error/expected.stderr similarity index 100% rename from anneal/tests/fixtures/nested_item_error/expected.stderr rename to anneal/v1/tests/fixtures/nested_item_error/expected.stderr diff --git a/anneal/tests/fixtures/nested_item_error/source/Cargo.toml b/anneal/v1/tests/fixtures/nested_item_error/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/nested_item_error/source/Cargo.toml rename to anneal/v1/tests/fixtures/nested_item_error/source/Cargo.toml diff --git a/anneal/tests/fixtures/nested_item_error/source/src/lib.rs b/anneal/v1/tests/fixtures/nested_item_error/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/nested_item_error/source/src/lib.rs rename to anneal/v1/tests/fixtures/nested_item_error/source/src/lib.rs diff --git a/anneal/tests/fixtures/nested_out_of_line_mod/anneal.toml b/anneal/v1/tests/fixtures/nested_out_of_line_mod/anneal.toml similarity index 100% rename from anneal/tests/fixtures/nested_out_of_line_mod/anneal.toml rename to anneal/v1/tests/fixtures/nested_out_of_line_mod/anneal.toml diff --git a/anneal/tests/fixtures/nested_out_of_line_mod/expected.stderr b/anneal/v1/tests/fixtures/nested_out_of_line_mod/expected.stderr similarity index 100% rename from anneal/tests/fixtures/nested_out_of_line_mod/expected.stderr rename to anneal/v1/tests/fixtures/nested_out_of_line_mod/expected.stderr diff --git a/anneal/tests/fixtures/nested_out_of_line_mod/source/Cargo.toml b/anneal/v1/tests/fixtures/nested_out_of_line_mod/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/nested_out_of_line_mod/source/Cargo.toml rename to anneal/v1/tests/fixtures/nested_out_of_line_mod/source/Cargo.toml diff --git a/anneal/tests/fixtures/nested_out_of_line_mod/source/src/hidden.rs b/anneal/v1/tests/fixtures/nested_out_of_line_mod/source/src/hidden.rs similarity index 100% rename from anneal/tests/fixtures/nested_out_of_line_mod/source/src/hidden.rs rename to anneal/v1/tests/fixtures/nested_out_of_line_mod/source/src/hidden.rs diff --git a/anneal/tests/fixtures/nested_out_of_line_mod/source/src/lib.rs b/anneal/v1/tests/fixtures/nested_out_of_line_mod/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/nested_out_of_line_mod/source/src/lib.rs rename to anneal/v1/tests/fixtures/nested_out_of_line_mod/source/src/lib.rs diff --git a/anneal/tests/fixtures/os_arg_limit_exceeded/anneal.toml b/anneal/v1/tests/fixtures/os_arg_limit_exceeded/anneal.toml similarity index 100% rename from anneal/tests/fixtures/os_arg_limit_exceeded/anneal.toml rename to anneal/v1/tests/fixtures/os_arg_limit_exceeded/anneal.toml diff --git a/anneal/tests/fixtures/os_arg_limit_exceeded/expected.stderr b/anneal/v1/tests/fixtures/os_arg_limit_exceeded/expected.stderr similarity index 100% rename from anneal/tests/fixtures/os_arg_limit_exceeded/expected.stderr rename to anneal/v1/tests/fixtures/os_arg_limit_exceeded/expected.stderr diff --git a/anneal/tests/fixtures/os_arg_limit_exceeded/source/Cargo.toml b/anneal/v1/tests/fixtures/os_arg_limit_exceeded/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/os_arg_limit_exceeded/source/Cargo.toml rename to anneal/v1/tests/fixtures/os_arg_limit_exceeded/source/Cargo.toml diff --git a/anneal/tests/fixtures/os_arg_limit_exceeded/source/src/lib.rs b/anneal/v1/tests/fixtures/os_arg_limit_exceeded/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/os_arg_limit_exceeded/source/src/lib.rs rename to anneal/v1/tests/fixtures/os_arg_limit_exceeded/source/src/lib.rs diff --git a/anneal/tests/fixtures/raw_ptr_dst_layout/anneal.toml b/anneal/v1/tests/fixtures/raw_ptr_dst_layout/anneal.toml similarity index 100% rename from anneal/tests/fixtures/raw_ptr_dst_layout/anneal.toml rename to anneal/v1/tests/fixtures/raw_ptr_dst_layout/anneal.toml diff --git a/anneal/tests/fixtures/raw_ptr_dst_layout/expected.stderr b/anneal/v1/tests/fixtures/raw_ptr_dst_layout/expected.stderr similarity index 100% rename from anneal/tests/fixtures/raw_ptr_dst_layout/expected.stderr rename to anneal/v1/tests/fixtures/raw_ptr_dst_layout/expected.stderr diff --git a/anneal/tests/fixtures/raw_ptr_dst_layout/source/Cargo.toml b/anneal/v1/tests/fixtures/raw_ptr_dst_layout/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/raw_ptr_dst_layout/source/Cargo.toml rename to anneal/v1/tests/fixtures/raw_ptr_dst_layout/source/Cargo.toml diff --git a/anneal/tests/fixtures/raw_ptr_dst_layout/source/out.log b/anneal/v1/tests/fixtures/raw_ptr_dst_layout/source/out.log similarity index 100% rename from anneal/tests/fixtures/raw_ptr_dst_layout/source/out.log rename to anneal/v1/tests/fixtures/raw_ptr_dst_layout/source/out.log diff --git a/anneal/tests/fixtures/raw_ptr_dst_layout/source/src/lib.rs b/anneal/v1/tests/fixtures/raw_ptr_dst_layout/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/raw_ptr_dst_layout/source/src/lib.rs rename to anneal/v1/tests/fixtures/raw_ptr_dst_layout/source/src/lib.rs diff --git a/anneal/tests/fixtures/reject_safe_is_safe/anneal.toml b/anneal/v1/tests/fixtures/reject_safe_is_safe/anneal.toml similarity index 100% rename from anneal/tests/fixtures/reject_safe_is_safe/anneal.toml rename to anneal/v1/tests/fixtures/reject_safe_is_safe/anneal.toml diff --git a/anneal/tests/fixtures/reject_safe_is_safe/expected.stderr b/anneal/v1/tests/fixtures/reject_safe_is_safe/expected.stderr similarity index 100% rename from anneal/tests/fixtures/reject_safe_is_safe/expected.stderr rename to anneal/v1/tests/fixtures/reject_safe_is_safe/expected.stderr diff --git a/anneal/tests/fixtures/reject_safe_is_safe/source/Cargo.toml b/anneal/v1/tests/fixtures/reject_safe_is_safe/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/reject_safe_is_safe/source/Cargo.toml rename to anneal/v1/tests/fixtures/reject_safe_is_safe/source/Cargo.toml diff --git a/anneal/tests/fixtures/reject_safe_is_safe/source/src/lib.rs b/anneal/v1/tests/fixtures/reject_safe_is_safe/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/reject_safe_is_safe/source/src/lib.rs rename to anneal/v1/tests/fixtures/reject_safe_is_safe/source/src/lib.rs diff --git a/anneal/tests/fixtures/reject_safe_requires/anneal.toml b/anneal/v1/tests/fixtures/reject_safe_requires/anneal.toml similarity index 100% rename from anneal/tests/fixtures/reject_safe_requires/anneal.toml rename to anneal/v1/tests/fixtures/reject_safe_requires/anneal.toml diff --git a/anneal/tests/fixtures/reject_safe_requires/expected.stderr b/anneal/v1/tests/fixtures/reject_safe_requires/expected.stderr similarity index 100% rename from anneal/tests/fixtures/reject_safe_requires/expected.stderr rename to anneal/v1/tests/fixtures/reject_safe_requires/expected.stderr diff --git a/anneal/tests/fixtures/reject_safe_requires/source/Cargo.toml b/anneal/v1/tests/fixtures/reject_safe_requires/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/reject_safe_requires/source/Cargo.toml rename to anneal/v1/tests/fixtures/reject_safe_requires/source/Cargo.toml diff --git a/anneal/tests/fixtures/reject_safe_requires/source/src/lib.rs b/anneal/v1/tests/fixtures/reject_safe_requires/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/reject_safe_requires/source/src/lib.rs rename to anneal/v1/tests/fixtures/reject_safe_requires/source/src/lib.rs diff --git a/anneal/tests/fixtures/select_bin/anneal.toml b/anneal/v1/tests/fixtures/select_bin/anneal.toml similarity index 100% rename from anneal/tests/fixtures/select_bin/anneal.toml rename to anneal/v1/tests/fixtures/select_bin/anneal.toml diff --git a/anneal/tests/fixtures/select_bin/source/Cargo.toml b/anneal/v1/tests/fixtures/select_bin/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/select_bin/source/Cargo.toml rename to anneal/v1/tests/fixtures/select_bin/source/Cargo.toml diff --git a/anneal/tests/fixtures/select_bin/source/src/lib.rs b/anneal/v1/tests/fixtures/select_bin/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/select_bin/source/src/lib.rs rename to anneal/v1/tests/fixtures/select_bin/source/src/lib.rs diff --git a/anneal/tests/fixtures/select_bin/source/src/main.rs b/anneal/v1/tests/fixtures/select_bin/source/src/main.rs similarity index 100% rename from anneal/tests/fixtures/select_bin/source/src/main.rs rename to anneal/v1/tests/fixtures/select_bin/source/src/main.rs diff --git a/anneal/tests/fixtures/select_lib/anneal.toml b/anneal/v1/tests/fixtures/select_lib/anneal.toml similarity index 100% rename from anneal/tests/fixtures/select_lib/anneal.toml rename to anneal/v1/tests/fixtures/select_lib/anneal.toml diff --git a/anneal/tests/fixtures/select_lib/source/Cargo.toml b/anneal/v1/tests/fixtures/select_lib/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/select_lib/source/Cargo.toml rename to anneal/v1/tests/fixtures/select_lib/source/Cargo.toml diff --git a/anneal/tests/fixtures/select_lib/source/src/lib.rs b/anneal/v1/tests/fixtures/select_lib/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/select_lib/source/src/lib.rs rename to anneal/v1/tests/fixtures/select_lib/source/src/lib.rs diff --git a/anneal/tests/fixtures/select_lib/source/src/main.rs b/anneal/v1/tests/fixtures/select_lib/source/src/main.rs similarity index 100% rename from anneal/tests/fixtures/select_lib/source/src/main.rs rename to anneal/v1/tests/fixtures/select_lib/source/src/main.rs diff --git a/anneal/tests/fixtures/size_of_align_of/anneal.toml b/anneal/v1/tests/fixtures/size_of_align_of/anneal.toml similarity index 100% rename from anneal/tests/fixtures/size_of_align_of/anneal.toml rename to anneal/v1/tests/fixtures/size_of_align_of/anneal.toml diff --git a/anneal/tests/fixtures/size_of_align_of/source/Cargo.toml b/anneal/v1/tests/fixtures/size_of_align_of/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/size_of_align_of/source/Cargo.toml rename to anneal/v1/tests/fixtures/size_of_align_of/source/Cargo.toml diff --git a/anneal/tests/fixtures/size_of_align_of/source/src/lib.rs b/anneal/v1/tests/fixtures/size_of_align_of/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/size_of_align_of/source/src/lib.rs rename to anneal/v1/tests/fixtures/size_of_align_of/source/src/lib.rs diff --git a/anneal/tests/fixtures/sizedness/anneal.toml b/anneal/v1/tests/fixtures/sizedness/anneal.toml similarity index 100% rename from anneal/tests/fixtures/sizedness/anneal.toml rename to anneal/v1/tests/fixtures/sizedness/anneal.toml diff --git a/anneal/tests/fixtures/sizedness/expected.stderr b/anneal/v1/tests/fixtures/sizedness/expected.stderr similarity index 100% rename from anneal/tests/fixtures/sizedness/expected.stderr rename to anneal/v1/tests/fixtures/sizedness/expected.stderr diff --git a/anneal/tests/fixtures/sizedness/source/Cargo.toml b/anneal/v1/tests/fixtures/sizedness/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/sizedness/source/Cargo.toml rename to anneal/v1/tests/fixtures/sizedness/source/Cargo.toml diff --git a/anneal/tests/fixtures/sizedness/source/out.txt b/anneal/v1/tests/fixtures/sizedness/source/out.txt similarity index 100% rename from anneal/tests/fixtures/sizedness/source/out.txt rename to anneal/v1/tests/fixtures/sizedness/source/out.txt diff --git a/anneal/tests/fixtures/sizedness/source/pass/Cargo.toml b/anneal/v1/tests/fixtures/sizedness/source/pass/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/sizedness/source/pass/Cargo.toml rename to anneal/v1/tests/fixtures/sizedness/source/pass/Cargo.toml diff --git a/anneal/tests/fixtures/sizedness/source/pass/src/lib.rs b/anneal/v1/tests/fixtures/sizedness/source/pass/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/sizedness/source/pass/src/lib.rs rename to anneal/v1/tests/fixtures/sizedness/source/pass/src/lib.rs diff --git a/anneal/tests/fixtures/sizedness/source/reject/Cargo.toml b/anneal/v1/tests/fixtures/sizedness/source/reject/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/sizedness/source/reject/Cargo.toml rename to anneal/v1/tests/fixtures/sizedness/source/reject/Cargo.toml diff --git a/anneal/tests/fixtures/sizedness/source/reject/src/lib.rs b/anneal/v1/tests/fixtures/sizedness/source/reject/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/sizedness/source/reject/src/lib.rs rename to anneal/v1/tests/fixtures/sizedness/source/reject/src/lib.rs diff --git a/anneal/tests/fixtures/span_empty_unsafe_block/anneal.toml b/anneal/v1/tests/fixtures/span_empty_unsafe_block/anneal.toml similarity index 100% rename from anneal/tests/fixtures/span_empty_unsafe_block/anneal.toml rename to anneal/v1/tests/fixtures/span_empty_unsafe_block/anneal.toml diff --git a/anneal/tests/fixtures/span_empty_unsafe_block/expected.stderr b/anneal/v1/tests/fixtures/span_empty_unsafe_block/expected.stderr similarity index 100% rename from anneal/tests/fixtures/span_empty_unsafe_block/expected.stderr rename to anneal/v1/tests/fixtures/span_empty_unsafe_block/expected.stderr diff --git a/anneal/tests/fixtures/span_empty_unsafe_block/mock_charon_output.json b/anneal/v1/tests/fixtures/span_empty_unsafe_block/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/span_empty_unsafe_block/mock_charon_output.json rename to anneal/v1/tests/fixtures/span_empty_unsafe_block/mock_charon_output.json diff --git a/anneal/tests/fixtures/span_empty_unsafe_block/source/Cargo.toml b/anneal/v1/tests/fixtures/span_empty_unsafe_block/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/span_empty_unsafe_block/source/Cargo.toml rename to anneal/v1/tests/fixtures/span_empty_unsafe_block/source/Cargo.toml diff --git a/anneal/tests/fixtures/span_empty_unsafe_block/source/src/lib.rs b/anneal/v1/tests/fixtures/span_empty_unsafe_block/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/span_empty_unsafe_block/source/src/lib.rs rename to anneal/v1/tests/fixtures/span_empty_unsafe_block/source/src/lib.rs diff --git a/anneal/tests/fixtures/span_empty_unsafe_block/source/src/untransformed.rs b/anneal/v1/tests/fixtures/span_empty_unsafe_block/source/src/untransformed.rs similarity index 100% rename from anneal/tests/fixtures/span_empty_unsafe_block/source/src/untransformed.rs rename to anneal/v1/tests/fixtures/span_empty_unsafe_block/source/src/untransformed.rs diff --git a/anneal/tests/fixtures/span_macro_expansion/anneal.toml b/anneal/v1/tests/fixtures/span_macro_expansion/anneal.toml similarity index 100% rename from anneal/tests/fixtures/span_macro_expansion/anneal.toml rename to anneal/v1/tests/fixtures/span_macro_expansion/anneal.toml diff --git a/anneal/tests/fixtures/span_macro_expansion/expected.stderr b/anneal/v1/tests/fixtures/span_macro_expansion/expected.stderr similarity index 100% rename from anneal/tests/fixtures/span_macro_expansion/expected.stderr rename to anneal/v1/tests/fixtures/span_macro_expansion/expected.stderr diff --git a/anneal/tests/fixtures/span_macro_expansion/mock_charon_output.json b/anneal/v1/tests/fixtures/span_macro_expansion/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/span_macro_expansion/mock_charon_output.json rename to anneal/v1/tests/fixtures/span_macro_expansion/mock_charon_output.json diff --git a/anneal/tests/fixtures/span_macro_expansion/source/Cargo.toml b/anneal/v1/tests/fixtures/span_macro_expansion/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/span_macro_expansion/source/Cargo.toml rename to anneal/v1/tests/fixtures/span_macro_expansion/source/Cargo.toml diff --git a/anneal/tests/fixtures/span_macro_expansion/source/src/lib.rs b/anneal/v1/tests/fixtures/span_macro_expansion/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/span_macro_expansion/source/src/lib.rs rename to anneal/v1/tests/fixtures/span_macro_expansion/source/src/lib.rs diff --git a/anneal/tests/fixtures/span_macro_expansion/source/src/untransformed.rs b/anneal/v1/tests/fixtures/span_macro_expansion/source/src/untransformed.rs similarity index 100% rename from anneal/tests/fixtures/span_macro_expansion/source/src/untransformed.rs rename to anneal/v1/tests/fixtures/span_macro_expansion/source/src/untransformed.rs diff --git a/anneal/tests/fixtures/span_mapping_basic/anneal.toml b/anneal/v1/tests/fixtures/span_mapping_basic/anneal.toml similarity index 100% rename from anneal/tests/fixtures/span_mapping_basic/anneal.toml rename to anneal/v1/tests/fixtures/span_mapping_basic/anneal.toml diff --git a/anneal/tests/fixtures/span_mapping_basic/expected.stderr b/anneal/v1/tests/fixtures/span_mapping_basic/expected.stderr similarity index 100% rename from anneal/tests/fixtures/span_mapping_basic/expected.stderr rename to anneal/v1/tests/fixtures/span_mapping_basic/expected.stderr diff --git a/anneal/tests/fixtures/span_mapping_basic/mock_charon_output.json b/anneal/v1/tests/fixtures/span_mapping_basic/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/span_mapping_basic/mock_charon_output.json rename to anneal/v1/tests/fixtures/span_mapping_basic/mock_charon_output.json diff --git a/anneal/tests/fixtures/span_mapping_basic/source/Cargo.toml b/anneal/v1/tests/fixtures/span_mapping_basic/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/span_mapping_basic/source/Cargo.toml rename to anneal/v1/tests/fixtures/span_mapping_basic/source/Cargo.toml diff --git a/anneal/tests/fixtures/span_mapping_basic/source/src/lib.rs b/anneal/v1/tests/fixtures/span_mapping_basic/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/span_mapping_basic/source/src/lib.rs rename to anneal/v1/tests/fixtures/span_mapping_basic/source/src/lib.rs diff --git a/anneal/tests/fixtures/span_multibyte_offsets/anneal.toml b/anneal/v1/tests/fixtures/span_multibyte_offsets/anneal.toml similarity index 100% rename from anneal/tests/fixtures/span_multibyte_offsets/anneal.toml rename to anneal/v1/tests/fixtures/span_multibyte_offsets/anneal.toml diff --git a/anneal/tests/fixtures/span_multibyte_offsets/expected.stderr b/anneal/v1/tests/fixtures/span_multibyte_offsets/expected.stderr similarity index 100% rename from anneal/tests/fixtures/span_multibyte_offsets/expected.stderr rename to anneal/v1/tests/fixtures/span_multibyte_offsets/expected.stderr diff --git a/anneal/tests/fixtures/span_multibyte_offsets/mock_charon_output.json b/anneal/v1/tests/fixtures/span_multibyte_offsets/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/span_multibyte_offsets/mock_charon_output.json rename to anneal/v1/tests/fixtures/span_multibyte_offsets/mock_charon_output.json diff --git a/anneal/tests/fixtures/span_multibyte_offsets/source/Cargo.toml b/anneal/v1/tests/fixtures/span_multibyte_offsets/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/span_multibyte_offsets/source/Cargo.toml rename to anneal/v1/tests/fixtures/span_multibyte_offsets/source/Cargo.toml diff --git a/anneal/tests/fixtures/span_multibyte_offsets/source/src/lib.rs b/anneal/v1/tests/fixtures/span_multibyte_offsets/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/span_multibyte_offsets/source/src/lib.rs rename to anneal/v1/tests/fixtures/span_multibyte_offsets/source/src/lib.rs diff --git a/anneal/tests/fixtures/span_multibyte_offsets/source/src/untransformed.rs b/anneal/v1/tests/fixtures/span_multibyte_offsets/source/src/untransformed.rs similarity index 100% rename from anneal/tests/fixtures/span_multibyte_offsets/source/src/untransformed.rs rename to anneal/v1/tests/fixtures/span_multibyte_offsets/source/src/untransformed.rs diff --git a/anneal/tests/fixtures/split_artifact/anneal.toml b/anneal/v1/tests/fixtures/split_artifact/anneal.toml similarity index 100% rename from anneal/tests/fixtures/split_artifact/anneal.toml rename to anneal/v1/tests/fixtures/split_artifact/anneal.toml diff --git a/anneal/tests/fixtures/split_artifact/expected.stderr b/anneal/v1/tests/fixtures/split_artifact/expected.stderr similarity index 100% rename from anneal/tests/fixtures/split_artifact/expected.stderr rename to anneal/v1/tests/fixtures/split_artifact/expected.stderr diff --git a/anneal/tests/fixtures/split_artifact/source/Cargo.toml b/anneal/v1/tests/fixtures/split_artifact/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/split_artifact/source/Cargo.toml rename to anneal/v1/tests/fixtures/split_artifact/source/Cargo.toml diff --git a/anneal/tests/fixtures/split_artifact/source/src/lib.rs b/anneal/v1/tests/fixtures/split_artifact/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/split_artifact/source/src/lib.rs rename to anneal/v1/tests/fixtures/split_artifact/source/src/lib.rs diff --git a/anneal/tests/fixtures/split_artifact/source/src/main.rs b/anneal/v1/tests/fixtures/split_artifact/source/src/main.rs similarity index 100% rename from anneal/tests/fixtures/split_artifact/source/src/main.rs rename to anneal/v1/tests/fixtures/split_artifact/source/src/main.rs diff --git a/anneal/tests/fixtures/stale_output/anneal.toml b/anneal/v1/tests/fixtures/stale_output/anneal.toml similarity index 100% rename from anneal/tests/fixtures/stale_output/anneal.toml rename to anneal/v1/tests/fixtures/stale_output/anneal.toml diff --git a/anneal/tests/fixtures/stale_output/source/Cargo.toml b/anneal/v1/tests/fixtures/stale_output/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/stale_output/source/Cargo.toml rename to anneal/v1/tests/fixtures/stale_output/source/Cargo.toml diff --git a/anneal/tests/fixtures/stale_output/source/src/lib.rs b/anneal/v1/tests/fixtures/stale_output/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/stale_output/source/src/lib.rs rename to anneal/v1/tests/fixtures/stale_output/source/src/lib.rs diff --git a/anneal/tests/fixtures/stuck_wps/anneal.toml b/anneal/v1/tests/fixtures/stuck_wps/anneal.toml similarity index 100% rename from anneal/tests/fixtures/stuck_wps/anneal.toml rename to anneal/v1/tests/fixtures/stuck_wps/anneal.toml diff --git a/anneal/tests/fixtures/stuck_wps/expected.stderr b/anneal/v1/tests/fixtures/stuck_wps/expected.stderr similarity index 100% rename from anneal/tests/fixtures/stuck_wps/expected.stderr rename to anneal/v1/tests/fixtures/stuck_wps/expected.stderr diff --git a/anneal/tests/fixtures/stuck_wps/source/Cargo.toml b/anneal/v1/tests/fixtures/stuck_wps/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/stuck_wps/source/Cargo.toml rename to anneal/v1/tests/fixtures/stuck_wps/source/Cargo.toml diff --git a/anneal/tests/fixtures/stuck_wps/source/crates/app/Cargo.toml b/anneal/v1/tests/fixtures/stuck_wps/source/crates/app/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/stuck_wps/source/crates/app/Cargo.toml rename to anneal/v1/tests/fixtures/stuck_wps/source/crates/app/Cargo.toml diff --git a/anneal/tests/fixtures/stuck_wps/source/crates/app/src/lib.rs b/anneal/v1/tests/fixtures/stuck_wps/source/crates/app/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/stuck_wps/source/crates/app/src/lib.rs rename to anneal/v1/tests/fixtures/stuck_wps/source/crates/app/src/lib.rs diff --git a/anneal/tests/fixtures/stuck_wps/source/crates/dep/Cargo.toml b/anneal/v1/tests/fixtures/stuck_wps/source/crates/dep/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/stuck_wps/source/crates/dep/Cargo.toml rename to anneal/v1/tests/fixtures/stuck_wps/source/crates/dep/Cargo.toml diff --git a/anneal/tests/fixtures/stuck_wps/source/crates/dep/src/lib.rs b/anneal/v1/tests/fixtures/stuck_wps/source/crates/dep/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/stuck_wps/source/crates/dep/src/lib.rs rename to anneal/v1/tests/fixtures/stuck_wps/source/crates/dep/src/lib.rs diff --git a/anneal/tests/fixtures/success_allow_sorry/anneal.toml b/anneal/v1/tests/fixtures/success_allow_sorry/anneal.toml similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry/anneal.toml rename to anneal/v1/tests/fixtures/success_allow_sorry/anneal.toml diff --git a/anneal/tests/fixtures/success_allow_sorry/source/Cargo.toml b/anneal/v1/tests/fixtures/success_allow_sorry/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry/source/Cargo.toml rename to anneal/v1/tests/fixtures/success_allow_sorry/source/Cargo.toml diff --git a/anneal/tests/fixtures/success_allow_sorry/source/src/cfg_and_macros.rs b/anneal/v1/tests/fixtures/success_allow_sorry/source/src/cfg_and_macros.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry/source/src/cfg_and_macros.rs rename to anneal/v1/tests/fixtures/success_allow_sorry/source/src/cfg_and_macros.rs diff --git a/anneal/tests/fixtures/success_allow_sorry/source/src/cfg_and_macros/macro_blind_spot/hidden.rs b/anneal/v1/tests/fixtures/success_allow_sorry/source/src/cfg_and_macros/macro_blind_spot/hidden.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry/source/src/cfg_and_macros/macro_blind_spot/hidden.rs rename to anneal/v1/tests/fixtures/success_allow_sorry/source/src/cfg_and_macros/macro_blind_spot/hidden.rs diff --git a/anneal/tests/fixtures/success_allow_sorry/source/src/cfg_and_macros/warn_cfg_attr_path/sys_unix.rs b/anneal/v1/tests/fixtures/success_allow_sorry/source/src/cfg_and_macros/warn_cfg_attr_path/sys_unix.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry/source/src/cfg_and_macros/warn_cfg_attr_path/sys_unix.rs rename to anneal/v1/tests/fixtures/success_allow_sorry/source/src/cfg_and_macros/warn_cfg_attr_path/sys_unix.rs diff --git a/anneal/tests/fixtures/success_allow_sorry/source/src/hierarchy_and_stress.rs b/anneal/v1/tests/fixtures/success_allow_sorry/source/src/hierarchy_and_stress.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry/source/src/hierarchy_and_stress.rs rename to anneal/v1/tests/fixtures/success_allow_sorry/source/src/hierarchy_and_stress.rs diff --git a/anneal/tests/fixtures/success_allow_sorry/source/src/hierarchy_and_stress/deep_invocation/nested.rs b/anneal/v1/tests/fixtures/success_allow_sorry/source/src/hierarchy_and_stress/deep_invocation/nested.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry/source/src/hierarchy_and_stress/deep_invocation/nested.rs rename to anneal/v1/tests/fixtures/success_allow_sorry/source/src/hierarchy_and_stress/deep_invocation/nested.rs diff --git a/anneal/tests/fixtures/success_allow_sorry/source/src/lib.rs b/anneal/v1/tests/fixtures/success_allow_sorry/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry/source/src/lib.rs rename to anneal/v1/tests/fixtures/success_allow_sorry/source/src/lib.rs diff --git a/anneal/tests/fixtures/success_allow_sorry/source/src/logic_and_patterns.rs b/anneal/v1/tests/fixtures/success_allow_sorry/source/src/logic_and_patterns.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry/source/src/logic_and_patterns.rs rename to anneal/v1/tests/fixtures/success_allow_sorry/source/src/logic_and_patterns.rs diff --git a/anneal/tests/fixtures/success_allow_sorry/source/src/naming_and_imports.rs b/anneal/v1/tests/fixtures/success_allow_sorry/source/src/naming_and_imports.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry/source/src/naming_and_imports.rs rename to anneal/v1/tests/fixtures/success_allow_sorry/source/src/naming_and_imports.rs diff --git a/anneal/tests/fixtures/success_allow_sorry/source/src/primitives.rs b/anneal/v1/tests/fixtures/success_allow_sorry/source/src/primitives.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry/source/src/primitives.rs rename to anneal/v1/tests/fixtures/success_allow_sorry/source/src/primitives.rs diff --git a/anneal/tests/fixtures/success_allow_sorry/source/src/types.rs b/anneal/v1/tests/fixtures/success_allow_sorry/source/src/types.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry/source/src/types.rs rename to anneal/v1/tests/fixtures/success_allow_sorry/source/src/types.rs diff --git a/anneal/tests/fixtures/success_allow_sorry_is_valid/anneal.toml b/anneal/v1/tests/fixtures/success_allow_sorry_is_valid/anneal.toml similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry_is_valid/anneal.toml rename to anneal/v1/tests/fixtures/success_allow_sorry_is_valid/anneal.toml diff --git a/anneal/tests/fixtures/success_allow_sorry_is_valid/source/Cargo.toml b/anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry_is_valid/source/Cargo.toml rename to anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/Cargo.toml diff --git a/anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/framework.rs b/anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/framework.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/framework.rs rename to anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/framework.rs diff --git a/anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/lib.rs b/anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/lib.rs rename to anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/lib.rs diff --git a/anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/logic_and_control.rs b/anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/logic_and_control.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/logic_and_control.rs rename to anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/logic_and_control.rs diff --git a/anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/macro_checks.rs b/anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/macro_checks.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/macro_checks.rs rename to anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/macro_checks.rs diff --git a/anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/memory_and_borrows.rs b/anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/memory_and_borrows.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/memory_and_borrows.rs rename to anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/memory_and_borrows.rs diff --git a/anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/spec_syntax.rs b/anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/spec_syntax.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/spec_syntax.rs rename to anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/spec_syntax.rs diff --git a/anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/traits_and_impls.rs b/anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/traits_and_impls.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/traits_and_impls.rs rename to anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/traits_and_impls.rs diff --git a/anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/types_and_data.rs b/anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/types_and_data.rs similarity index 100% rename from anneal/tests/fixtures/success_allow_sorry_is_valid/source/src/types_and_data.rs rename to anneal/v1/tests/fixtures/success_allow_sorry_is_valid/source/src/types_and_data.rs diff --git a/anneal/tests/fixtures/syntax_error/anneal.toml b/anneal/v1/tests/fixtures/syntax_error/anneal.toml similarity index 100% rename from anneal/tests/fixtures/syntax_error/anneal.toml rename to anneal/v1/tests/fixtures/syntax_error/anneal.toml diff --git a/anneal/tests/fixtures/syntax_error/expected.stderr b/anneal/v1/tests/fixtures/syntax_error/expected.stderr similarity index 100% rename from anneal/tests/fixtures/syntax_error/expected.stderr rename to anneal/v1/tests/fixtures/syntax_error/expected.stderr diff --git a/anneal/tests/fixtures/syntax_error/source/Cargo.toml b/anneal/v1/tests/fixtures/syntax_error/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/syntax_error/source/Cargo.toml rename to anneal/v1/tests/fixtures/syntax_error/source/Cargo.toml diff --git a/anneal/tests/fixtures/syntax_error/source/src/lib.rs b/anneal/v1/tests/fixtures/syntax_error/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/syntax_error/source/src/lib.rs rename to anneal/v1/tests/fixtures/syntax_error/source/src/lib.rs diff --git a/anneal/tests/fixtures/target_selection/anneal.toml b/anneal/v1/tests/fixtures/target_selection/anneal.toml similarity index 100% rename from anneal/tests/fixtures/target_selection/anneal.toml rename to anneal/v1/tests/fixtures/target_selection/anneal.toml diff --git a/anneal/tests/fixtures/target_selection/expected.stderr b/anneal/v1/tests/fixtures/target_selection/expected.stderr similarity index 100% rename from anneal/tests/fixtures/target_selection/expected.stderr rename to anneal/v1/tests/fixtures/target_selection/expected.stderr diff --git a/anneal/tests/fixtures/target_selection/source/Cargo.toml b/anneal/v1/tests/fixtures/target_selection/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/target_selection/source/Cargo.toml rename to anneal/v1/tests/fixtures/target_selection/source/Cargo.toml diff --git a/anneal/tests/fixtures/target_selection/source/src/lib.rs b/anneal/v1/tests/fixtures/target_selection/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/target_selection/source/src/lib.rs rename to anneal/v1/tests/fixtures/target_selection/source/src/lib.rs diff --git a/anneal/tests/fixtures/target_selection/source/src/main.rs b/anneal/v1/tests/fixtures/target_selection/source/src/main.rs similarity index 100% rename from anneal/tests/fixtures/target_selection/source/src/main.rs rename to anneal/v1/tests/fixtures/target_selection/source/src/main.rs diff --git a/anneal/tests/fixtures/test_ptr_crate/Cargo.toml b/anneal/v1/tests/fixtures/test_ptr_crate/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/test_ptr_crate/Cargo.toml rename to anneal/v1/tests/fixtures/test_ptr_crate/Cargo.toml diff --git a/anneal/tests/fixtures/test_ptr_crate/src/lib.rs b/anneal/v1/tests/fixtures/test_ptr_crate/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/test_ptr_crate/src/lib.rs rename to anneal/v1/tests/fixtures/test_ptr_crate/src/lib.rs diff --git a/anneal/tests/fixtures/type_features/anneal.toml b/anneal/v1/tests/fixtures/type_features/anneal.toml similarity index 100% rename from anneal/tests/fixtures/type_features/anneal.toml rename to anneal/v1/tests/fixtures/type_features/anneal.toml diff --git a/anneal/tests/fixtures/type_features/expected.stderr b/anneal/v1/tests/fixtures/type_features/expected.stderr similarity index 100% rename from anneal/tests/fixtures/type_features/expected.stderr rename to anneal/v1/tests/fixtures/type_features/expected.stderr diff --git a/anneal/tests/fixtures/type_features/source/Cargo.toml b/anneal/v1/tests/fixtures/type_features/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/type_features/source/Cargo.toml rename to anneal/v1/tests/fixtures/type_features/source/Cargo.toml diff --git a/anneal/tests/fixtures/type_features/source/src/lib.rs b/anneal/v1/tests/fixtures/type_features/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/type_features/source/src/lib.rs rename to anneal/v1/tests/fixtures/type_features/source/src/lib.rs diff --git a/anneal/tests/fixtures/ui_build_script_noise/anneal.toml b/anneal/v1/tests/fixtures/ui_build_script_noise/anneal.toml similarity index 100% rename from anneal/tests/fixtures/ui_build_script_noise/anneal.toml rename to anneal/v1/tests/fixtures/ui_build_script_noise/anneal.toml diff --git a/anneal/tests/fixtures/ui_build_script_noise/expected.stderr b/anneal/v1/tests/fixtures/ui_build_script_noise/expected.stderr similarity index 100% rename from anneal/tests/fixtures/ui_build_script_noise/expected.stderr rename to anneal/v1/tests/fixtures/ui_build_script_noise/expected.stderr diff --git a/anneal/tests/fixtures/ui_build_script_noise/mock_charon_output.json b/anneal/v1/tests/fixtures/ui_build_script_noise/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/ui_build_script_noise/mock_charon_output.json rename to anneal/v1/tests/fixtures/ui_build_script_noise/mock_charon_output.json diff --git a/anneal/tests/fixtures/ui_build_script_noise/source/Cargo.toml b/anneal/v1/tests/fixtures/ui_build_script_noise/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/ui_build_script_noise/source/Cargo.toml rename to anneal/v1/tests/fixtures/ui_build_script_noise/source/Cargo.toml diff --git a/anneal/tests/fixtures/ui_build_script_noise/source/src/lib.rs b/anneal/v1/tests/fixtures/ui_build_script_noise/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/ui_build_script_noise/source/src/lib.rs rename to anneal/v1/tests/fixtures/ui_build_script_noise/source/src/lib.rs diff --git a/anneal/tests/fixtures/ui_hanging_build/anneal.toml b/anneal/v1/tests/fixtures/ui_hanging_build/anneal.toml similarity index 100% rename from anneal/tests/fixtures/ui_hanging_build/anneal.toml rename to anneal/v1/tests/fixtures/ui_hanging_build/anneal.toml diff --git a/anneal/tests/fixtures/ui_hanging_build/expected.stderr b/anneal/v1/tests/fixtures/ui_hanging_build/expected.stderr similarity index 100% rename from anneal/tests/fixtures/ui_hanging_build/expected.stderr rename to anneal/v1/tests/fixtures/ui_hanging_build/expected.stderr diff --git a/anneal/tests/fixtures/ui_hanging_build/source/Cargo.toml b/anneal/v1/tests/fixtures/ui_hanging_build/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/ui_hanging_build/source/Cargo.toml rename to anneal/v1/tests/fixtures/ui_hanging_build/source/Cargo.toml diff --git a/anneal/tests/fixtures/ui_hanging_build/source/build.rs b/anneal/v1/tests/fixtures/ui_hanging_build/source/build.rs similarity index 100% rename from anneal/tests/fixtures/ui_hanging_build/source/build.rs rename to anneal/v1/tests/fixtures/ui_hanging_build/source/build.rs diff --git a/anneal/tests/fixtures/ui_hanging_build/source/src/lib.rs b/anneal/v1/tests/fixtures/ui_hanging_build/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/ui_hanging_build/source/src/lib.rs rename to anneal/v1/tests/fixtures/ui_hanging_build/source/src/lib.rs diff --git a/anneal/tests/fixtures/ui_silent_panic/anneal.toml b/anneal/v1/tests/fixtures/ui_silent_panic/anneal.toml similarity index 100% rename from anneal/tests/fixtures/ui_silent_panic/anneal.toml rename to anneal/v1/tests/fixtures/ui_silent_panic/anneal.toml diff --git a/anneal/tests/fixtures/ui_silent_panic/expected.stderr b/anneal/v1/tests/fixtures/ui_silent_panic/expected.stderr similarity index 100% rename from anneal/tests/fixtures/ui_silent_panic/expected.stderr rename to anneal/v1/tests/fixtures/ui_silent_panic/expected.stderr diff --git a/anneal/tests/fixtures/ui_silent_panic/source/Cargo.toml b/anneal/v1/tests/fixtures/ui_silent_panic/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/ui_silent_panic/source/Cargo.toml rename to anneal/v1/tests/fixtures/ui_silent_panic/source/Cargo.toml diff --git a/anneal/tests/fixtures/ui_silent_panic/source/build.rs b/anneal/v1/tests/fixtures/ui_silent_panic/source/build.rs similarity index 100% rename from anneal/tests/fixtures/ui_silent_panic/source/build.rs rename to anneal/v1/tests/fixtures/ui_silent_panic/source/build.rs diff --git a/anneal/tests/fixtures/ui_silent_panic/source/src/lib.rs b/anneal/v1/tests/fixtures/ui_silent_panic/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/ui_silent_panic/source/src/lib.rs rename to anneal/v1/tests/fixtures/ui_silent_panic/source/src/lib.rs diff --git a/anneal/tests/fixtures/ui_the_flood/anneal.toml b/anneal/v1/tests/fixtures/ui_the_flood/anneal.toml similarity index 100% rename from anneal/tests/fixtures/ui_the_flood/anneal.toml rename to anneal/v1/tests/fixtures/ui_the_flood/anneal.toml diff --git a/anneal/tests/fixtures/ui_the_flood/expected.stderr b/anneal/v1/tests/fixtures/ui_the_flood/expected.stderr similarity index 100% rename from anneal/tests/fixtures/ui_the_flood/expected.stderr rename to anneal/v1/tests/fixtures/ui_the_flood/expected.stderr diff --git a/anneal/tests/fixtures/ui_the_flood/mock_charon_output.json b/anneal/v1/tests/fixtures/ui_the_flood/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/ui_the_flood/mock_charon_output.json rename to anneal/v1/tests/fixtures/ui_the_flood/mock_charon_output.json diff --git a/anneal/tests/fixtures/ui_the_flood/source/Cargo.toml b/anneal/v1/tests/fixtures/ui_the_flood/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/ui_the_flood/source/Cargo.toml rename to anneal/v1/tests/fixtures/ui_the_flood/source/Cargo.toml diff --git a/anneal/tests/fixtures/ui_the_flood/source/src/lib.rs b/anneal/v1/tests/fixtures/ui_the_flood/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/ui_the_flood/source/src/lib.rs rename to anneal/v1/tests/fixtures/ui_the_flood/source/src/lib.rs diff --git a/anneal/tests/fixtures/ui_visual_ghosting/anneal.toml b/anneal/v1/tests/fixtures/ui_visual_ghosting/anneal.toml similarity index 100% rename from anneal/tests/fixtures/ui_visual_ghosting/anneal.toml rename to anneal/v1/tests/fixtures/ui_visual_ghosting/anneal.toml diff --git a/anneal/tests/fixtures/ui_visual_ghosting/expected.stderr b/anneal/v1/tests/fixtures/ui_visual_ghosting/expected.stderr similarity index 100% rename from anneal/tests/fixtures/ui_visual_ghosting/expected.stderr rename to anneal/v1/tests/fixtures/ui_visual_ghosting/expected.stderr diff --git a/anneal/tests/fixtures/ui_visual_ghosting/mock_charon_output.json b/anneal/v1/tests/fixtures/ui_visual_ghosting/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/ui_visual_ghosting/mock_charon_output.json rename to anneal/v1/tests/fixtures/ui_visual_ghosting/mock_charon_output.json diff --git a/anneal/tests/fixtures/ui_visual_ghosting/source/Cargo.toml b/anneal/v1/tests/fixtures/ui_visual_ghosting/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/ui_visual_ghosting/source/Cargo.toml rename to anneal/v1/tests/fixtures/ui_visual_ghosting/source/Cargo.toml diff --git a/anneal/tests/fixtures/ui_visual_ghosting/source/src/lib.rs b/anneal/v1/tests/fixtures/ui_visual_ghosting/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/ui_visual_ghosting/source/src/lib.rs rename to anneal/v1/tests/fixtures/ui_visual_ghosting/source/src/lib.rs diff --git a/anneal/tests/fixtures/unions/anneal.toml b/anneal/v1/tests/fixtures/unions/anneal.toml similarity index 100% rename from anneal/tests/fixtures/unions/anneal.toml rename to anneal/v1/tests/fixtures/unions/anneal.toml diff --git a/anneal/tests/fixtures/unions/expected.stderr b/anneal/v1/tests/fixtures/unions/expected.stderr similarity index 100% rename from anneal/tests/fixtures/unions/expected.stderr rename to anneal/v1/tests/fixtures/unions/expected.stderr diff --git a/anneal/tests/fixtures/unions/source/Cargo.toml b/anneal/v1/tests/fixtures/unions/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/unions/source/Cargo.toml rename to anneal/v1/tests/fixtures/unions/source/Cargo.toml diff --git a/anneal/tests/fixtures/unions/source/src/lib.rs b/anneal/v1/tests/fixtures/unions/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/unions/source/src/lib.rs rename to anneal/v1/tests/fixtures/unions/source/src/lib.rs diff --git a/anneal/tests/fixtures/unsound_is_valid_error/anneal.toml b/anneal/v1/tests/fixtures/unsound_is_valid_error/anneal.toml similarity index 100% rename from anneal/tests/fixtures/unsound_is_valid_error/anneal.toml rename to anneal/v1/tests/fixtures/unsound_is_valid_error/anneal.toml diff --git a/anneal/tests/fixtures/unsound_is_valid_error/expected.stderr b/anneal/v1/tests/fixtures/unsound_is_valid_error/expected.stderr similarity index 100% rename from anneal/tests/fixtures/unsound_is_valid_error/expected.stderr rename to anneal/v1/tests/fixtures/unsound_is_valid_error/expected.stderr diff --git a/anneal/tests/fixtures/unsound_is_valid_error/source/Cargo.toml b/anneal/v1/tests/fixtures/unsound_is_valid_error/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/unsound_is_valid_error/source/Cargo.toml rename to anneal/v1/tests/fixtures/unsound_is_valid_error/source/Cargo.toml diff --git a/anneal/tests/fixtures/unsound_is_valid_error/source/src/lib.rs b/anneal/v1/tests/fixtures/unsound_is_valid_error/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/unsound_is_valid_error/source/src/lib.rs rename to anneal/v1/tests/fixtures/unsound_is_valid_error/source/src/lib.rs diff --git a/anneal/tests/fixtures/verify_is_valid_macro/anneal.toml b/anneal/v1/tests/fixtures/verify_is_valid_macro/anneal.toml similarity index 100% rename from anneal/tests/fixtures/verify_is_valid_macro/anneal.toml rename to anneal/v1/tests/fixtures/verify_is_valid_macro/anneal.toml diff --git a/anneal/tests/fixtures/verify_is_valid_macro/source/Cargo.toml b/anneal/v1/tests/fixtures/verify_is_valid_macro/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/verify_is_valid_macro/source/Cargo.toml rename to anneal/v1/tests/fixtures/verify_is_valid_macro/source/Cargo.toml diff --git a/anneal/tests/fixtures/verify_is_valid_macro/source/src/lib.rs b/anneal/v1/tests/fixtures/verify_is_valid_macro/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/verify_is_valid_macro/source/src/lib.rs rename to anneal/v1/tests/fixtures/verify_is_valid_macro/source/src/lib.rs diff --git a/anneal/tests/fixtures/warnings_vs_errors/anneal.toml b/anneal/v1/tests/fixtures/warnings_vs_errors/anneal.toml similarity index 100% rename from anneal/tests/fixtures/warnings_vs_errors/anneal.toml rename to anneal/v1/tests/fixtures/warnings_vs_errors/anneal.toml diff --git a/anneal/tests/fixtures/warnings_vs_errors/expected.stderr b/anneal/v1/tests/fixtures/warnings_vs_errors/expected.stderr similarity index 100% rename from anneal/tests/fixtures/warnings_vs_errors/expected.stderr rename to anneal/v1/tests/fixtures/warnings_vs_errors/expected.stderr diff --git a/anneal/tests/fixtures/warnings_vs_errors/mock_charon_output.json b/anneal/v1/tests/fixtures/warnings_vs_errors/mock_charon_output.json similarity index 100% rename from anneal/tests/fixtures/warnings_vs_errors/mock_charon_output.json rename to anneal/v1/tests/fixtures/warnings_vs_errors/mock_charon_output.json diff --git a/anneal/tests/fixtures/warnings_vs_errors/source/Cargo.toml b/anneal/v1/tests/fixtures/warnings_vs_errors/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/warnings_vs_errors/source/Cargo.toml rename to anneal/v1/tests/fixtures/warnings_vs_errors/source/Cargo.toml diff --git a/anneal/tests/fixtures/warnings_vs_errors/source/crates/utils/src/lib.rs b/anneal/v1/tests/fixtures/warnings_vs_errors/source/crates/utils/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/warnings_vs_errors/source/crates/utils/src/lib.rs rename to anneal/v1/tests/fixtures/warnings_vs_errors/source/crates/utils/src/lib.rs diff --git a/anneal/tests/fixtures/warnings_vs_errors/source/src/lib.rs b/anneal/v1/tests/fixtures/warnings_vs_errors/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/warnings_vs_errors/source/src/lib.rs rename to anneal/v1/tests/fixtures/warnings_vs_errors/source/src/lib.rs diff --git a/anneal/tests/fixtures/warnings_vs_errors/source/src/macros.rs b/anneal/v1/tests/fixtures/warnings_vs_errors/source/src/macros.rs similarity index 100% rename from anneal/tests/fixtures/warnings_vs_errors/source/src/macros.rs rename to anneal/v1/tests/fixtures/warnings_vs_errors/source/src/macros.rs diff --git a/anneal/tests/fixtures/warnings_vs_errors/source/src/rewritten.rs b/anneal/v1/tests/fixtures/warnings_vs_errors/source/src/rewritten.rs similarity index 100% rename from anneal/tests/fixtures/warnings_vs_errors/source/src/rewritten.rs rename to anneal/v1/tests/fixtures/warnings_vs_errors/source/src/rewritten.rs diff --git a/anneal/tests/fixtures/warnings_vs_errors/source/src/symlinked.rs b/anneal/v1/tests/fixtures/warnings_vs_errors/source/src/symlinked.rs similarity index 100% rename from anneal/tests/fixtures/warnings_vs_errors/source/src/symlinked.rs rename to anneal/v1/tests/fixtures/warnings_vs_errors/source/src/symlinked.rs diff --git a/anneal/tests/fixtures/weird_functions/anneal.toml b/anneal/v1/tests/fixtures/weird_functions/anneal.toml similarity index 100% rename from anneal/tests/fixtures/weird_functions/anneal.toml rename to anneal/v1/tests/fixtures/weird_functions/anneal.toml diff --git a/anneal/tests/fixtures/weird_functions/expected.stderr b/anneal/v1/tests/fixtures/weird_functions/expected.stderr similarity index 100% rename from anneal/tests/fixtures/weird_functions/expected.stderr rename to anneal/v1/tests/fixtures/weird_functions/expected.stderr diff --git a/anneal/tests/fixtures/weird_functions/source/Cargo.toml b/anneal/v1/tests/fixtures/weird_functions/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/weird_functions/source/Cargo.toml rename to anneal/v1/tests/fixtures/weird_functions/source/Cargo.toml diff --git a/anneal/tests/fixtures/weird_functions/source/src/lib.rs b/anneal/v1/tests/fixtures/weird_functions/source/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/weird_functions/source/src/lib.rs rename to anneal/v1/tests/fixtures/weird_functions/source/src/lib.rs diff --git a/anneal/tests/fixtures/workspace_path_dep/args.txt b/anneal/v1/tests/fixtures/workspace_path_dep/args.txt similarity index 100% rename from anneal/tests/fixtures/workspace_path_dep/args.txt rename to anneal/v1/tests/fixtures/workspace_path_dep/args.txt diff --git a/anneal/tests/fixtures/workspace_path_dep/source/Cargo.toml b/anneal/v1/tests/fixtures/workspace_path_dep/source/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/workspace_path_dep/source/Cargo.toml rename to anneal/v1/tests/fixtures/workspace_path_dep/source/Cargo.toml diff --git a/anneal/tests/fixtures/workspace_path_dep/source/crates/app/Cargo.toml b/anneal/v1/tests/fixtures/workspace_path_dep/source/crates/app/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/workspace_path_dep/source/crates/app/Cargo.toml rename to anneal/v1/tests/fixtures/workspace_path_dep/source/crates/app/Cargo.toml diff --git a/anneal/tests/fixtures/workspace_path_dep/source/crates/app/src/lib.rs b/anneal/v1/tests/fixtures/workspace_path_dep/source/crates/app/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/workspace_path_dep/source/crates/app/src/lib.rs rename to anneal/v1/tests/fixtures/workspace_path_dep/source/crates/app/src/lib.rs diff --git a/anneal/tests/fixtures/workspace_path_dep/source/crates/utils/Cargo.toml b/anneal/v1/tests/fixtures/workspace_path_dep/source/crates/utils/Cargo.toml similarity index 100% rename from anneal/tests/fixtures/workspace_path_dep/source/crates/utils/Cargo.toml rename to anneal/v1/tests/fixtures/workspace_path_dep/source/crates/utils/Cargo.toml diff --git a/anneal/tests/fixtures/workspace_path_dep/source/crates/utils/src/lib.rs b/anneal/v1/tests/fixtures/workspace_path_dep/source/crates/utils/src/lib.rs similarity index 100% rename from anneal/tests/fixtures/workspace_path_dep/source/crates/utils/src/lib.rs rename to anneal/v1/tests/fixtures/workspace_path_dep/source/crates/utils/src/lib.rs diff --git a/anneal/tests/integration.rs b/anneal/v1/tests/integration.rs similarity index 100% rename from anneal/tests/integration.rs rename to anneal/v1/tests/integration.rs diff --git a/anneal/tests/ui.rs b/anneal/v1/tests/ui.rs similarity index 100% rename from anneal/tests/ui.rs rename to anneal/v1/tests/ui.rs diff --git a/anneal/tests/ui/fail_precondition.rs b/anneal/v1/tests/ui/fail_precondition.rs similarity index 100% rename from anneal/tests/ui/fail_precondition.rs rename to anneal/v1/tests/ui/fail_precondition.rs diff --git a/anneal/tests/ui/fail_precondition.stderr b/anneal/v1/tests/ui/fail_precondition.stderr similarity index 100% rename from anneal/tests/ui/fail_precondition.stderr rename to anneal/v1/tests/ui/fail_precondition.stderr diff --git a/anneal/tests/ui/fail_syntax.rs b/anneal/v1/tests/ui/fail_syntax.rs similarity index 100% rename from anneal/tests/ui/fail_syntax.rs rename to anneal/v1/tests/ui/fail_syntax.rs diff --git a/anneal/tests/ui/fail_syntax.stderr b/anneal/v1/tests/ui/fail_syntax.stderr similarity index 100% rename from anneal/tests/ui/fail_syntax.stderr rename to anneal/v1/tests/ui/fail_syntax.stderr diff --git a/anneal/tests/ui/pass_simple.rs b/anneal/v1/tests/ui/pass_simple.rs similarity index 100% rename from anneal/tests/ui/pass_simple.rs rename to anneal/v1/tests/ui/pass_simple.rs diff --git a/anneal/tools/check-release-flow-dry-run.sh b/anneal/v1/tools/check-release-flow-dry-run.sh similarity index 83% rename from anneal/tools/check-release-flow-dry-run.sh rename to anneal/v1/tools/check-release-flow-dry-run.sh index bab19fee67..5a26e47b10 100644 --- a/anneal/tools/check-release-flow-dry-run.sh +++ b/anneal/v1/tools/check-release-flow-dry-run.sh @@ -28,13 +28,13 @@ cd "$WORKTREE" ./ci/release_anneal_version.sh "$VERSION" -python3 anneal/tools/check-release-pr-files.py \ +python3 anneal/v1/tools/check-release-pr-files.py \ --context "Release dry-run version bump" \ --include-untracked \ - --allowed anneal/Cargo.lock \ - --allowed anneal/Cargo.toml \ - --allowed anneal/README.md \ - --required anneal/Cargo.toml + --allowed anneal/v1/Cargo.lock \ + --allowed anneal/v1/Cargo.toml \ + --allowed anneal/v1/README.md \ + --required anneal/v1/Cargo.toml git diff --binary > "$PATCH" if [ ! -s "$PATCH" ]; then @@ -47,15 +47,15 @@ git clean -fdx >/dev/null git apply --check "$PATCH" git apply "$PATCH" -python3 anneal/tools/check-release-pr-files.py \ +python3 anneal/v1/tools/check-release-pr-files.py \ --context "Release dry-run applied source patch" \ --include-untracked \ - --allowed anneal/Cargo.lock \ - --allowed anneal/Cargo.toml \ - --allowed anneal/README.md \ - --required anneal/Cargo.toml + --allowed anneal/v1/Cargo.lock \ + --allowed anneal/v1/Cargo.toml \ + --allowed anneal/v1/README.md \ + --required anneal/v1/Cargo.toml -mkdir -p anneal/release-metadata +mkdir -p anneal/v1/release-metadata for target in linux-x86_64 linux-aarch64 macos-x86_64 macos-aarch64; do case "$target" in linux-x86_64) @@ -82,7 +82,7 @@ for target in linux-x86_64 linux-aarch64 macos-x86_64 macos-aarch64; do sha256="$(python3 -c 'import hashlib, sys; print(hashlib.sha256(sys.argv[1].encode()).hexdigest())' "$target")" url="https://github.com/google/zerocopy/releases/download/${TAG_NAME}/anneal-toolchain-${target}.tar.zst" - cat > "anneal/release-metadata/${target}.json" < "anneal/v1/release-metadata/${target}.json" < None: - status = " M anneal/Cargo.toml\n?? anneal/release-metadata/linux.json\nR old/path -> anneal/README.md\n" + status = " M anneal/v1/Cargo.toml\n?? anneal/v1/release-metadata/linux.json\nR old/path -> anneal/v1/README.md\n" self.assertEqual( check_release_pr_files.parse_porcelain_status_paths(status), - ["anneal/Cargo.toml", "anneal/release-metadata/linux.json", "old/path", "anneal/README.md"], + ["anneal/v1/Cargo.toml", "anneal/v1/release-metadata/linux.json", "old/path", "anneal/v1/README.md"], ) def test_validation_catches_unexpected_and_missing_files(self) -> None: errors = check_release_pr_files.validation_errors( - ["anneal/Cargo.toml", "anneal/release-metadata/linux.json"], - ["anneal/Cargo.toml", "anneal/Cargo.lock", "anneal/README.md"], - ["anneal/Cargo.toml", "anneal/README.md"], + ["anneal/v1/Cargo.toml", "anneal/v1/release-metadata/linux.json"], + ["anneal/v1/Cargo.toml", "anneal/v1/Cargo.lock", "anneal/v1/README.md"], + ["anneal/v1/Cargo.toml", "anneal/v1/README.md"], ) self.assertEqual(len(errors), 2) - self.assertIn("anneal/release-metadata/linux.json", errors[0]) - self.assertIn("anneal/README.md", errors[1]) + self.assertIn("anneal/v1/release-metadata/linux.json", errors[0]) + self.assertIn("anneal/v1/README.md", errors[1]) if __name__ == "__main__": diff --git a/anneal/tools/update-exocrate-metadata.py b/anneal/v1/tools/update-exocrate-metadata.py similarity index 97% rename from anneal/tools/update-exocrate-metadata.py rename to anneal/v1/tools/update-exocrate-metadata.py index f8e2fc4516..96c4cdde80 100755 --- a/anneal/tools/update-exocrate-metadata.py +++ b/anneal/v1/tools/update-exocrate-metadata.py @@ -8,7 +8,7 @@ # This file may not be copied, modified, or distributed except according to # those terms. -"""Update anneal/Cargo.toml's exocrate archive URLs and hashes.""" +"""Update anneal/v1/Cargo.toml's exocrate archive URLs and hashes.""" import argparse import json @@ -124,7 +124,7 @@ def update_manifest(cargo_toml: Path, metadata: dict[tuple[str, str], dict[str, def main() -> None: parser = argparse.ArgumentParser() - parser.add_argument("--cargo-toml", default="anneal/Cargo.toml", type=Path) + parser.add_argument("--cargo-toml", default="anneal/v1/Cargo.toml", type=Path) parser.add_argument("--metadata-dir", type=Path) parser.add_argument("--metadata", action="append", default=[], type=Path) parser.add_argument("--expected-release-tag") diff --git a/anneal/v2/Cargo.toml b/anneal/v2/Cargo.toml deleted file mode 100644 index 06ccc47b25..0000000000 --- a/anneal/v2/Cargo.toml +++ /dev/null @@ -1,68 +0,0 @@ -[workspace] -members = ["."] - -[features] -# Enables tests that assume a prebuilt exocrate archive. -exocrate_tests = [] - -[package] -name = "cargo-anneal" -edition = "2024" -version = "0.1.0-alpha.22" -description = "Formally verify that your safety comments are correct." -categories = [ - "development-tools::cargo-plugins", - "development-tools::testing", - "compilers", - "mathematics", - "security", -] -keywords = ["verification", "cargo", "plugin", "unsafe", "lean"] -authors = ["Joshua Liebow-Feeser "] -license = "BSD-2-Clause OR Apache-2.0 OR MIT" -repository = "https://github.com/google/zerocopy/tree/main/anneal" -publish = true - -exclude = [".*", "testdata"] - -# FIXME: Replace these placeholder archive URLs and hashes before publishing -# this crate; `cargo anneal setup` uses this metadata by default when callers -# do not provide a local archive. -[package.metadata.exocrate.linux.x86_64] -sha256 = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" -url = "https://example.com/linux-x86_64.tar.zst" - -[package.metadata.exocrate.macos.x86_64] -sha256 = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" -url = "https://example.com/macos-x86_64.tar.zst" - -[package.metadata.exocrate.linux.aarch64] -sha256 = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" -url = "https://example.com/linux-aarch64.tar.zst" - -[package.metadata.exocrate.macos.aarch64] -sha256 = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" -url = "https://example.com/macos-aarch64.tar.zst" - -[dependencies] -exocrate = { path = "../../exocrate" } -toml_const = "1.3.0" -clap = { version = "4.5", features = ["derive"] } -clap-cargo = { version = "0.18.3", features = ["cargo_metadata"] } -env_logger = "0.11" -log = "0.4" -anyhow = "1.0.102" -cargo_metadata = "0.23.1" -miette = { version = "7.6.0", features = ["derive", "fancy"] } -thiserror = "2.0.18" -serde_json = "1.0.149" -serde = { version = "1.0.228", features = ["derive"] } -indicatif = { version = "0.18.4", features = ["improved_unicode"] } -fs2 = "0.4" -walkdir = "2.5.0" -sha2 = "0.10" -tempfile = "3.27.0" -rayon = "1.11.0" - -[dev-dependencies] -pathdiff = "0.2" diff --git a/anneal/v2/src/main.rs b/anneal/v2/src/main.rs deleted file mode 100644 index 0cb74addc8..0000000000 --- a/anneal/v2/src/main.rs +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright 2026 The Fuchsia Authors -// -// Licensed under the 2-Clause BSD License , Apache License, Version 2.0 -// , or the MIT -// license , at your option. -// This file may not be copied, modified, or distributed except according to -// those terms. - -use clap::Parser as _; - -/// Anneal -#[derive(clap::Parser, Debug)] -#[command(name = "cargo-anneal", version, about, long_about = None)] -struct Cli { - #[command(subcommand)] - command: Commands, -} - -#[derive(clap::Subcommand, Debug)] -enum Commands { - /// Setup Anneal dependencies - Setup(SetupArgs), -} - -#[derive(clap::Parser, Debug)] -pub struct SetupArgs { - /// Path to a local dependency archive to use instead of downloading. - #[arg(long, value_name = "path-to-local-archive")] - pub local_archive: Option, -} - -exocrate::config! { - const CONFIG: Config = Config { - rel_dir_path: [".anneal", "toolchain"], - versioned_files: &["../Cargo.toml", "../Cargo.lock"], - }; -} - -exocrate::parse_remote_archive! { - const REMOTE: RemoteArchive = "Cargo.toml" [ - (linux, x86_64), - (macos, x86_64), - (linux, aarch64), - (macos, aarch64), - ]; -} - -fn setup_installation_dir(args: SetupArgs) -> std::path::PathBuf { - let location = if std::env::var("__ANNEAL_LOCAL_DEV").is_ok() { - exocrate::Location::LocalDev - } else { - exocrate::Location::UserGlobal - }; - let source = match args.local_archive { - Some(local_archive) => exocrate::Source::Local(local_archive), - None => exocrate::Source::Remote(REMOTE), - }; - - CONFIG - .resolve_installation_dir_or_install(location, source) - // FIXME: Implement unified error reporting (e.g., via `anyhow`). - .expect("failed to resolve-or-install dependencies") -} - -fn setup(args: SetupArgs) { - let installation_dir = setup_installation_dir(args); - log::info!("anneal toolchain is installed at {:?}", installation_dir); -} - -fn main() { - // Suppressing timestamps removes a source of nondeterminism that is - // difficult to work around in integration tests. - env_logger::builder().format_timestamp(None).init(); - - let mut args_iter = std::env::args_os().peekable(); - let bin_name = args_iter.next().unwrap_or_else(|| "cargo-anneal".into()); - // If we're being run as a cargo plugin, the second argument will be "anneal". - if args_iter.peek().is_some_and(|arg| arg == "anneal") { - args_iter.next(); - } - let args = Cli::parse_from(std::iter::once(bin_name).chain(args_iter)); - - match args.command { - Commands::Setup(args) => setup(args), - } -} - -#[cfg(test)] -mod tests { - #[cfg(feature = "exocrate_tests")] - mod exocrate_tests { - use std::{ - fs, io, - path::{Path, PathBuf}, - process::Command, - sync::OnceLock, - }; - - use serde_json::{Value, json}; - - const LOCAL_ARCHIVE: &str = "target/anneal-exocrate.tar.zst"; - static INSTALLATION_DIR: OnceLock = OnceLock::new(); - - #[test] - fn test_setup() { - install_local_archive(); - } - - #[test] - fn test_archive_lake_cache_reuse() { - let installation_dir = install_local_archive(); - let temp = tempfile::Builder::new() - .prefix("anneal-v2-archive-cache-reuse-") - .tempdir() - .expect("failed to create archive cache reuse tempdir"); - assert_archive_lake_cache_reuse(&installation_dir, temp.path()) - .expect("archive Lake cache reuse test failed"); - } - - fn install_local_archive() -> PathBuf { - // ASSUMPTION: The CI dependency builder downloads the Nix-built - // archive artifact to this path before running v2 tests. - INSTALLATION_DIR - .get_or_init(|| { - super::super::setup_installation_dir(super::super::SetupArgs { - local_archive: Some(LOCAL_ARCHIVE.into()), - }) - }) - .clone() - } - - fn assert_archive_lake_cache_reuse( - toolchain_root: &Path, - temp_root: &Path, - ) -> Result<(), Box> { - let aeneas_root = toolchain_root.join("aeneas"); - let aeneas_lean = aeneas_root.join("backends/lean"); - let lean_root = toolchain_root.join("lean"); - let workspace = temp_root.join("generated-workspace"); - - assert_no_write_bits(&aeneas_root)?; - - fs::create_dir_all(workspace.join("generated"))?; - fs::copy(aeneas_lean.join("lean-toolchain"), workspace.join("lean-toolchain"))?; - fs::write(workspace.join("generated/Generated.lean"), "import Aeneas\n")?; - fs::write( - workspace.join("lakefile.lean"), - format!( - r#"import Lake -open Lake DSL - -require aeneas from "{}" - -package anneal_verification - -@[default_target] -lean_lib Generated where - srcDir := "generated" - roots := #[`Generated] -"#, - lake_string(&aeneas_lean) - ), - )?; - write_relative_archive_manifest(&workspace, &aeneas_lean)?; - - // The Nix archive must support fresh generated workspaces without - // reconfiguring packages or rebuilding read-only Lake artifacts. - run_lake_archive_command( - &workspace, - &lean_root, - &["--keep-toolchain", "--old", "build", "Generated"], - )?; - run_lake_archive_command( - &workspace, - &lean_root, - &["--keep-toolchain", "env", "lean", "--json", "generated/Generated.lean"], - )?; - - Ok(()) - } - - fn assert_no_write_bits(root: &Path) -> Result<(), Box> { - let metadata = fs::symlink_metadata(root)?; - if metadata.file_type().is_symlink() { - return Ok(()); - } - if has_write_bits(&metadata.permissions()) { - panic!("archive path should be read-only: {}", root.display()); - } - if metadata.is_dir() { - for entry in fs::read_dir(root)? { - assert_no_write_bits(&entry?.path())?; - } - } - Ok(()) - } - - #[cfg(unix)] - fn has_write_bits(permissions: &fs::Permissions) -> bool { - use std::os::unix::fs::PermissionsExt as _; - permissions.mode() & 0o222 != 0 - } - - #[cfg(not(unix))] - fn has_write_bits(permissions: &fs::Permissions) -> bool { - !permissions.readonly() - } - - fn write_relative_archive_manifest( - workspace: &Path, - aeneas_lean: &Path, - ) -> Result<(), Box> { - let aeneas_lean = fs::canonicalize(aeneas_lean)?; - let workspace = fs::canonicalize(workspace)?; - let manifest_path = aeneas_lean.join("lake-manifest.json"); - let manifest: Value = serde_json::from_reader(fs::File::open(&manifest_path)?)?; - let aeneas_packages = - manifest.get("packages").and_then(Value::as_array).ok_or_else(|| { - invalid_data(format!( - "Aeneas Lake manifest {} is missing packages", - manifest_path.display() - )) - })?; - - let aeneas_dir = relative_manifest_string(&aeneas_lean, &workspace)?; - let mut packages = vec![json!({ - "type": "path", - "name": "aeneas", - "dir": aeneas_dir, - "inherited": false, - })]; - - for entry in aeneas_packages { - let mut entry = entry.as_object().cloned().ok_or_else(|| { - invalid_data("Aeneas Lake manifest package entry is not an object") - })?; - let package_type = entry.get("type").and_then(Value::as_str).ok_or_else(|| { - invalid_data("Aeneas Lake manifest package entry is missing type") - })?; - if package_type != "path" { - return Err(invalid_data(format!( - "Aeneas Lake manifest package entry is {package_type:?}, not a path dependency" - )) - .into()); - } - let package_dir = entry.get("dir").and_then(Value::as_str).ok_or_else(|| { - invalid_data("Aeneas Lake manifest package entry is missing dir") - })?; - let package_dir = Path::new(package_dir); - let package_dir = if package_dir.is_absolute() { - package_dir.to_path_buf() - } else { - aeneas_lean.join(package_dir) - }; - let package_dir = fs::canonicalize(package_dir)?; - entry.insert( - "dir".to_string(), - json!(relative_manifest_string(&package_dir, &workspace)?), - ); - entry.insert("inherited".to_string(), json!(true)); - packages.push(Value::Object(entry)); - } - - let manifest = json!({ - "version": "1.2.0", - "packagesDir": ".lake/packages", - "packages": packages, - "name": "anneal_verification", - "lakeDir": ".lake", - "fixedToolchain": false, - }); - fs::write( - workspace.join("lake-manifest.json"), - format!("{}\n", serde_json::to_string_pretty(&manifest)?), - )?; - Ok(()) - } - - fn relative_manifest_string( - path: &Path, - base: &Path, - ) -> Result> { - let path = pathdiff::diff_paths(path, base).ok_or_else(|| { - invalid_data(format!( - "failed to compute relative path from {} to {}", - base.display(), - path.display() - )) - })?; - Ok(path.to_string_lossy().into_owned()) - } - - fn lake_string(path: &Path) -> String { - path.to_string_lossy().replace('\\', "\\\\").replace('"', "\\\"") - } - - fn run_lake_archive_command( - workspace: &Path, - lean_root: &Path, - args: &[&str], - ) -> Result<(), Box> { - let lean_bin = lean_root.join("bin"); - let mut cmd = Command::new(lean_bin.join("lake")); - cmd.args(args).current_dir(workspace).env_clear(); - - let lib_var = - if cfg!(target_os = "macos") { "DYLD_LIBRARY_PATH" } else { "LD_LIBRARY_PATH" }; - cmd.env( - lib_var, - std::env::join_paths([lean_root.join("lib"), lean_root.join("lib/lean")])?, - ); - - let output = cmd.output()?; - if !output.status.success() { - return Err(io::Error::other(format!( - "lake {:?} failed with status {}\nstdout:\n{}\nstderr:\n{}", - args, - output.status, - String::from_utf8_lossy(&output.stdout), - String::from_utf8_lossy(&output.stderr) - )) - .into()); - } - Ok(()) - } - - fn invalid_data(message: impl Into) -> io::Error { - io::Error::new(io::ErrorKind::InvalidData, message.into()) - } - } -} diff --git a/anneal/v2/src/util.rs b/anneal/v2/src/util.rs deleted file mode 100644 index 602e1585d1..0000000000 --- a/anneal/v2/src/util.rs +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright 2026 The Fuchsia Authors -// -// Licensed under the 2-Clause BSD License , Apache License, Version 2.0 -// , or the MIT -// license , at your option. -// This file may not be copied, modified, or distributed except according to -// those terms. - -use std::io::BufRead as _; - -use anyhow::Context as _; -use fs2::FileExt as _; - -/// Represents an active, exclusive lock on a directory. -/// -/// This struct guarantees that the process holds an OS-level file lock -/// guarding the specified directory. -pub(crate) struct DirLock { - /// The path to the directory being guarded. - pub(crate) path: std::path::PathBuf, - // Kept alive to hold the flock. - _file: std::fs::File, -} - -impl DirLock { - /// Acquires an exclusive lock on the specified directory. - /// - /// This function blocks until the lock can be acquired. We use a - /// separate `.lock` file within the directory rather than locking - /// the directory itself to avoid platform-specific issues with - /// directory locking and to ensure the lock file persists even if - /// the directory is cleaned. - pub(crate) fn lock_exclusive(path: std::path::PathBuf) -> anyhow::Result { - let file = Self::open_lock_file(&path)?; - file.lock_exclusive() - .with_context(|| format!("Failed to acquire exclusive lock on {:?}", path))?; - Ok(Self { path, _file: file }) - } - - /// Acquires a shared lock on the specified directory. - /// - /// Multiple processes can hold shared locks simultaneously, but an - /// exclusive lock will block until all shared locks are released. - #[cfg(any(test, feature = "exocrate_tests"))] - pub(crate) fn lock_shared(path: std::path::PathBuf) -> anyhow::Result { - let file = Self::open_lock_file(&path)?; - file.lock_shared() - .with_context(|| format!("Failed to acquire shared lock on {:?}", path))?; - Ok(Self { path, _file: file }) - } - - fn open_lock_file(path: &std::path::Path) -> anyhow::Result { - let lock_path = path.join(".lock"); - - // Ensure the directory exists. - if let Some(parent) = lock_path.parent() { - std::fs::create_dir_all(parent).with_context(|| { - format!("Failed to create directory for lock file: {:?}", parent) - })?; - } - // If the lock file already exists, we open it in read-only mode. - // This prevents failures if the file is read-only (e.g., after - // making the toolchain directory read-only), while still allowing - // us to acquire shared and exclusive locks on the file descriptor. - if lock_path.exists() { - std::fs::OpenOptions::new() - .read(true) - .open(&lock_path) - .with_context(|| format!("Failed to open lock file at {:?}", lock_path)) - } else { - std::fs::OpenOptions::new() - .read(true) - .write(true) - .create(true) - .open(&lock_path) - .with_context(|| format!("Failed to create lock file at {:?}", lock_path)) - } - } -} - -pub(crate) struct ProcessOutput { - pub status: std::process::ExitStatus, - pub stderr_lines: Vec, -} - -/// Spawns a child process, drains its stderr in a background thread, and processes -/// its stdout line-by-line in the main thread while showing a progress spinner. -pub(crate) fn run_command_with_progress( - mut cmd: std::process::Command, - pb: Option, - mut process_stdout_line: F, -) -> anyhow::Result -where - F: FnMut(&str, Option<&indicatif::ProgressBar>) -> anyhow::Result<()>, -{ - cmd.stdout(std::process::Stdio::piped()); - cmd.stderr(std::process::Stdio::piped()); - - let mut child = cmd.spawn().context("Failed to spawn child process")?; - - let stderr_buffer = std::sync::Arc::new(std::sync::Mutex::new(Vec::new())); - let stderr_buffer_clone = std::sync::Arc::clone(&stderr_buffer); - - let mut stderr_thread = None; - if let Some(stderr) = child.stderr.take() { - stderr_thread = Some(std::thread::spawn(move || { - let reader = std::io::BufReader::new(stderr); - for line in reader.lines().map_while(Result::ok) { - stderr_buffer_clone.lock().unwrap().push(line); - } - })); - } - - if let Some(ref p) = pb { - p.enable_steady_tick(std::time::Duration::from_millis(100)); - } - - if let Some(stdout) = child.stdout.take() { - let reader = std::io::BufReader::new(stdout); - for line in reader.lines().map_while(Result::ok) { - process_stdout_line(&line, pb.as_ref())?; - if let Some(ref p) = pb { - p.tick(); - } - } - } - - if let Some(ref p) = pb { - p.finish_and_clear(); - } - - let status = child.wait().context("Failed to wait for child process")?; - - if let Some(thread) = stderr_thread { - let _ = thread.join(); - } - - let stderr_lines = std::sync::Arc::try_unwrap(stderr_buffer).unwrap().into_inner().unwrap(); - - Ok(ProcessOutput { status, stderr_lines }) -} - -/// Performs a lock test action according to the `role` of the current actor. Actors may: -/// -/// - Obtain an exclusive or shared lock for `lock_dir`, -/// - Log actions in `log_file`, -/// - Wait for a signal from `sig_file`. -/// -/// Individual tests compose multiple role-based actions and verify the resulting action log. -#[cfg(feature = "exocrate_tests")] -pub(crate) fn run_test_lock_helper( - role: &str, - lock_dir: &std::path::Path, - log_file: &std::path::Path, - sig_file: &std::path::Path, -) -> anyhow::Result<()> { - use std::io::Write as _; - - let append_log = |msg: &str| -> anyhow::Result<()> { - let mut file = std::fs::OpenOptions::new().create(true).append(true).open(log_file)?; - writeln!(file, "{}", msg)?; - Ok(()) - }; - - let wait_for_sig = || -> anyhow::Result<()> { - let start = std::time::Instant::now(); - while !sig_file.exists() { - if start.elapsed() > std::time::Duration::from_secs(3) { - anyhow::bail!("Timeout waiting for signal file {:?}", sig_file); - } - std::thread::sleep(std::time::Duration::from_millis(50)); - } - Ok(()) - }; - - match role { - "reader-a" => { - let _lock = DirLock::lock_shared(lock_dir.to_path_buf())?; - append_log("SHARED_START_A")?; - wait_for_sig()?; - append_log("SHARED_END_A")?; - } - "reader-b" => { - let _lock = DirLock::lock_shared(lock_dir.to_path_buf())?; - append_log("SHARED_START_B")?; - std::fs::write(sig_file, "")?; - append_log("SHARED_END_B")?; - } - "writer-a" => { - let _lock = DirLock::lock_exclusive(lock_dir.to_path_buf())?; - append_log("EXCLUSIVE_START_A")?; - wait_for_sig()?; - append_log("EXCLUSIVE_END_A")?; - } - "reader-exclusion" => { - std::fs::write(sig_file, "")?; - let _lock = DirLock::lock_shared(lock_dir.to_path_buf())?; - append_log("SHARED_START_B")?; - append_log("SHARED_END_B")?; - } - _ => anyhow::bail!("Unknown test-lock-helper role: {}", role), - } - - Ok(()) -} - -#[cfg(test)] -#[macro_export] -macro_rules! workspace_fixture { - ($dir:expr, { $($path:expr => $content:expr),* $(,)? }) => {{ - let root = $dir.path(); - $( - let file_path = root.join($path); - if let Some(parent) = file_path.parent() { - std::fs::create_dir_all(parent).unwrap(); - } - std::fs::write(&file_path, $content).unwrap(); - )* - }}; -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_dir_lock_exclusive_mutual_exclusion() { - let temp_dir = tempfile::tempdir().unwrap(); - let lock_path = temp_dir.path().to_path_buf(); - - let barrier = std::sync::Arc::new(std::sync::Barrier::new(2)); - let barrier_clone = std::sync::Arc::clone(&barrier); - let lock_path_clone = lock_path.clone(); - - let lock_released = std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)); - let lock_released_clone = std::sync::Arc::clone(&lock_released); - - // Thread A acquires the lock. - let thread_a = std::thread::spawn(move || { - let _lock = DirLock::lock_exclusive(lock_path_clone).expect("Failed to lock exclusive"); - barrier_clone.wait(); // Signal Thread B that A holds the lock. - - // Simulate brief work holding the lock. - std::thread::sleep(std::time::Duration::from_millis(100)); - lock_released_clone.store(true, std::sync::atomic::Ordering::Relaxed); - // _lock drops here, releasing the lock. - }); - - // Thread B waits for Thread A to acquire the lock, then tries to acquire it itself. - let thread_b = std::thread::spawn(move || { - barrier.wait(); // Wait for Thread A to acquire lock. - - // Attempt to acquire lock. This should block until Thread A releases it. - let _lock = DirLock::lock_exclusive(lock_path).expect("Failed to lock exclusive in B"); - - // Assert that B only successfully locked the directory AFTER A released it. - assert!( - lock_released.load(std::sync::atomic::Ordering::Relaxed), - "Thread B acquired lock before Thread A released it!" - ); - }); - - thread_a.join().unwrap(); - thread_b.join().unwrap(); - } - - #[test] - fn test_dir_lock_shared_coexistence() { - let temp_dir = tempfile::tempdir().unwrap(); - let lock_path = temp_dir.path().to_path_buf(); - - // Thread A acquires shared lock. - let lock_a = DirLock::lock_shared(lock_path.clone()).expect("Failed to lock shared"); - - // Thread B should be able to acquire shared lock immediately without blocking. - let lock_b = DirLock::lock_shared(lock_path).expect("Failed to lock shared concurrently"); - - // Both locks are held. - drop(lock_a); - drop(lock_b); - } -} diff --git a/ci/check_fmt.sh b/ci/check_fmt.sh index 1e17b4e468..c9ea6b63d2 100755 --- a/ci/check_fmt.sh +++ b/ci/check_fmt.sh @@ -23,5 +23,5 @@ zerocopy/ci/check_fmt.sh "$@" cargo +"$NIGHTLY" fmt --manifest-path tools/Cargo.toml --all "${FMT_FLAGS[@]}" >&2 cargo +"$NIGHTLY" fmt --manifest-path anneal/Cargo.toml --all "${FMT_FLAGS[@]}" >&2 -cargo +"$NIGHTLY" fmt --manifest-path anneal/v2/Cargo.toml --all "${FMT_FLAGS[@]}" >&2 +cargo +"$NIGHTLY" fmt --manifest-path anneal/v1/Cargo.toml --all "${FMT_FLAGS[@]}" >&2 cargo +"$NIGHTLY" fmt --manifest-path exocrate/Cargo.toml "${FMT_FLAGS[@]}" >&2 diff --git a/ci/release_anneal_version.sh b/ci/release_anneal_version.sh index f28d0ef285..d66cce51fd 100755 --- a/ci/release_anneal_version.sh +++ b/ci/release_anneal_version.sh @@ -20,16 +20,16 @@ VERSION="$1" # Update the package version in the Anneal crate's manifest. This is the # authoritative version for the crate. -sed -i -e "s/^version = \"[0-9a-zA-Z\.-]*\"/version = \"$VERSION\"/" anneal/Cargo.toml +sed -i -e "s/^version = \"[0-9a-zA-Z\.-]*\"/version = \"$VERSION\"/" anneal/v1/Cargo.toml # Update the installation instructions in the README to reflect the new version. # This ensures that users copying instructions get the latest version. -sed -i -e "s/cargo install cargo-anneal@[0-9a-zA-Z\.-]*/cargo install cargo-anneal@$VERSION/" anneal/README.md +sed -i -e "s/cargo install cargo-anneal@[0-9a-zA-Z\.-]*/cargo install cargo-anneal@$VERSION/" anneal/v1/README.md # Update Cargo.lock to reflect the version change in Cargo.toml. We must run -# this in the anneal subdirectory because it is a separate workspace with its +# this in the anneal/v1 subdirectory because it is a separate workspace with its # own lockfile. Use `cargo update` on the local package itself instead of # regenerating the entire lockfile; the release version bump should not also # roll dependency versions. -cd anneal +cd anneal/v1 cargo update -p cargo-anneal --precise "$VERSION" diff --git a/hermes b/hermes index 103b3362a1..76e9261845 120000 --- a/hermes +++ b/hermes @@ -1 +1 @@ -anneal/ \ No newline at end of file +anneal/v1/ \ No newline at end of file diff --git a/tools/hermes b/tools/hermes index e567b44430..9833c976ef 120000 --- a/tools/hermes +++ b/tools/hermes @@ -1 +1 @@ -../anneal/ \ No newline at end of file +../anneal/v1/ \ No newline at end of file