From 69fa0268a44a9859c4db98a6692369c0e8719146 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 1 Jan 2024 00:59:55 +0000
Subject: [PATCH 01/41] chore(deps): update actions/setup-python action to v5

---
 .github/workflows/pre-commit.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
index 804475078..955140759 100644
--- a/.github/workflows/pre-commit.yml
+++ b/.github/workflows/pre-commit.yml
@@ -19,5 +19,5 @@ jobs:
     runs-on: ubuntu-latest
     steps:
     - uses: actions/checkout@v4
-    - uses: actions/setup-python@v4
+    - uses: actions/setup-python@v5
     - uses: pre-commit/action@v3.0.0

From 82c9aa7bddef20e9705d3d404403e59b2cd7e8e1 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 1 Jan 2024 00:59:58 +0000
Subject: [PATCH 02/41] chore(deps): update github/codeql-action action to v3

---
 .github/workflows/ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 19efcf9f0..1b09d2174 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -134,7 +134,7 @@ jobs:
         | sarif-fmt
       continue-on-error: true
     - name: Upload
-      uses: github/codeql-action/upload-sarif@v2
+      uses: github/codeql-action/upload-sarif@v3
       with:
         sarif_file: clippy-results.sarif
         wait-for-processing: true

From a4c062667d3b0c94928d285052795637de0a7227 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Tue, 2 Jan 2024 09:56:35 -0600
Subject: [PATCH 03/41] chore: Make renovate commits to match

---
 .github/renovate.json5 | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.github/renovate.json5 b/.github/renovate.json5
index 3119c425d..e5a5de0f1 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -3,6 +3,7 @@
     'before 5am on the first day of the month',
   ],
   semanticCommits: 'enabled',
+  commitMessageLowerCase: 'never',
   configMigration: true,
   dependencyDashboard: true,
   customManagers: [

From 61250a36135d0032ceda4316b43d3a62d8b07643 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Wed, 3 Jan 2024 08:27:59 -0600
Subject: [PATCH 04/41] chore(ci): Optimize CI runs

---
 .github/workflows/ci.yml        |  2 +-
 .github/workflows/rust-next.yml | 10 +++++++---
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1b09d2174..943becfb5 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -41,7 +41,7 @@ jobs:
         toolchain: ${{ matrix.rust }}
     - uses: Swatinem/rust-cache@v2
     - name: Build
-      run: cargo test --no-run --workspace --all-features
+      run: cargo test --workspace --no-run
     - name: Default features
       run: cargo test --workspace
     - name: All features
diff --git a/.github/workflows/rust-next.yml b/.github/workflows/rust-next.yml
index d8c2d257d..43b4ec8fc 100644
--- a/.github/workflows/rust-next.yml
+++ b/.github/workflows/rust-next.yml
@@ -32,6 +32,8 @@ jobs:
       with:
         toolchain: ${{ matrix.rust }}
     - uses: Swatinem/rust-cache@v2
+    - name: Build
+      run: cargo test --workspace --no-run
     - name: Default features
       run: cargo test --workspace
     - name: All features
@@ -51,9 +53,11 @@ jobs:
     - uses: Swatinem/rust-cache@v2
     - name: Update dependencues
       run: cargo update
+    - name: Build
+      run: cargo test --workspace --no-run
     - name: Default features
-      run: cargo test --workspace --all-targets
+      run: cargo test --workspace
     - name: All features
-      run: cargo test --workspace --all-targets --all-features
+      run: cargo test --workspace --all-features
     - name: No-default features
-      run: cargo test --workspace --all-targets --no-default-features
+      run: cargo test --workspace --no-default-features

From e819db4af62e231bcedd976faa488b4e6f46f312 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 18 Jan 2024 09:22:25 -0600
Subject: [PATCH 05/41] chore(ci): Cancel prior CI runs

---
 .github/workflows/audit.yml      | 4 ++++
 .github/workflows/ci.yml         | 4 ++++
 .github/workflows/committed.yml  | 4 ++++
 .github/workflows/pre-commit.yml | 4 ++++
 .github/workflows/rust-next.yml  | 4 ++++
 .github/workflows/spelling.yml   | 4 ++++
 6 files changed, 24 insertions(+)

diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml
index ccee1fef6..07c70eeba 100644
--- a/.github/workflows/audit.yml
+++ b/.github/workflows/audit.yml
@@ -17,6 +17,10 @@ env:
   CARGO_TERM_COLOR: always
   CLICOLOR: 1
 
+concurrency:
+  group: "${{ github.workflow }}-${{ github.ref }}"
+  cancel-in-progress: true
+
 jobs:
   security_audit:
     permissions:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 943becfb5..2bbd5a576 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -14,6 +14,10 @@ env:
   CARGO_TERM_COLOR: always
   CLICOLOR: 1
 
+concurrency:
+  group: "${{ github.workflow }}-${{ github.ref }}"
+  cancel-in-progress: true
+
 jobs:
   ci:
     permissions:
diff --git a/.github/workflows/committed.yml b/.github/workflows/committed.yml
index 046255845..e7a50fbb3 100644
--- a/.github/workflows/committed.yml
+++ b/.github/workflows/committed.yml
@@ -11,6 +11,10 @@ env:
   CARGO_TERM_COLOR: always
   CLICOLOR: 1
 
+concurrency:
+  group: "${{ github.workflow }}-${{ github.ref }}"
+  cancel-in-progress: true
+
 jobs:
   committed:
     name: Lint Commits
diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
index 955140759..7d773285a 100644
--- a/.github/workflows/pre-commit.yml
+++ b/.github/workflows/pre-commit.yml
@@ -12,6 +12,10 @@ env:
   CARGO_TERM_COLOR: always
   CLICOLOR: 1
 
+concurrency:
+  group: "${{ github.workflow }}-${{ github.ref }}"
+  cancel-in-progress: true
+
 jobs:
   pre-commit:
     permissions:
diff --git a/.github/workflows/rust-next.yml b/.github/workflows/rust-next.yml
index 43b4ec8fc..f0febc9f3 100644
--- a/.github/workflows/rust-next.yml
+++ b/.github/workflows/rust-next.yml
@@ -12,6 +12,10 @@ env:
   CARGO_TERM_COLOR: always
   CLICOLOR: 1
 
+concurrency:
+  group: "${{ github.workflow }}-${{ github.ref }}"
+  cancel-in-progress: true
+
 jobs:
   test:
     name: Test
diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml
index 12f75859f..8e58d9ec0 100644
--- a/.github/workflows/spelling.yml
+++ b/.github/workflows/spelling.yml
@@ -10,6 +10,10 @@ env:
   CARGO_TERM_COLOR: always
   CLICOLOR: 1
 
+concurrency:
+  group: "${{ github.workflow }}-${{ github.ref }}"
+  cancel-in-progress: true
+
 jobs:
   spelling:
     name: Spell Check with Typos

From 0b029063fe83d818e3a79819b88bee8b8314f752 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Wed, 24 Jan 2024 08:40:56 -0600
Subject: [PATCH 06/41] chore(ci): Be explicit in renovate updates

---
 .github/renovate.json5 | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.github/renovate.json5 b/.github/renovate.json5
index e5a5de0f1..32d3628d4 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -73,6 +73,7 @@
       matchCurrentVersion: '>=1.0.0',
       matchUpdateTypes: [
         'minor',
+        'patch',
       ],
       enabled: false,
     },
@@ -100,6 +101,7 @@
       matchCurrentVersion: '>=1.0.0',
       matchUpdateTypes: [
         'minor',
+        'patch',
       ],
       automerge: true,
       groupName: 'compatible (dev)',

From 131de55d50284af7a54287d34699347b74d75709 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Wed, 31 Jan 2024 12:07:12 -0600
Subject: [PATCH 07/41] chore(ci): Add m1 runners

See https://github.blog/changelog/2024-01-30-github-actions-introducing-the-new-m1-macos-runner-available-to-open-source/
---
 .github/workflows/ci.yml        | 2 +-
 .github/workflows/rust-next.yml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2bbd5a576..a8826b056 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -32,7 +32,7 @@ jobs:
     name: Test
     strategy:
       matrix:
-        os: ["ubuntu-latest", "windows-latest", "macos-latest"]
+        os: ["ubuntu-latest", "windows-latest", "macos-latest", "macos-14"]
         rust: ["stable"]
     continue-on-error: ${{ matrix.rust != 'stable' }}
     runs-on: ${{ matrix.os }}
diff --git a/.github/workflows/rust-next.yml b/.github/workflows/rust-next.yml
index f0febc9f3..49e5d8c3b 100644
--- a/.github/workflows/rust-next.yml
+++ b/.github/workflows/rust-next.yml
@@ -21,7 +21,7 @@ jobs:
     name: Test
     strategy:
       matrix:
-        os: ["ubuntu-latest", "windows-latest", "macos-latest"]
+        os: ["ubuntu-latest", "windows-latest", "macos-latest", "macos-14"]
         rust: ["stable", "beta"]
         include:
         - os: ubuntu-latest

From 9a5af5c8d21d549a7eb785343ae055d931952075 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 8 Feb 2024 07:45:48 -0600
Subject: [PATCH 08/41] chore(ci): Only check intel mac on schedule

---
 .github/workflows/ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a8826b056..af065d568 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -32,7 +32,7 @@ jobs:
     name: Test
     strategy:
       matrix:
-        os: ["ubuntu-latest", "windows-latest", "macos-latest", "macos-14"]
+        os: ["ubuntu-latest", "windows-latest", "macos-14"]
         rust: ["stable"]
     continue-on-error: ${{ matrix.rust != 'stable' }}
     runs-on: ${{ matrix.os }}

From da56001fd6cabdb744f25b021c9efd230472f671 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 8 Feb 2024 07:48:29 -0600
Subject: [PATCH 09/41] chore(ci): Gather coverage

---
 .github/workflows/ci.yml | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index af065d568..7849a7350 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -144,3 +144,22 @@ jobs:
         wait-for-processing: true
     - name: Report status
       run: cargo clippy --workspace --all-features --all-targets -- -D warnings --allow deprecated
+  coverage:
+    name: Coverage
+    runs-on: ubuntu-latest
+    steps:
+    - name: Checkout repository
+      uses: actions/checkout@v4
+    - name: Install Rust
+      uses: dtolnay/rust-toolchain@stable
+      with:
+        toolchain: "1.75"  # STABLE
+    - uses: Swatinem/rust-cache@v2
+    - name: Install cargo-tarpaulin
+      run: cargo install cargo-tarpaulin
+    - name: Gather coverage
+      run: cargo tarpaulin --output-dir coverage --out lcov
+    - name: Publish to Coveralls
+      uses: coverallsapp/github-action@master
+      with:
+        github-token: ${{ secrets.GITHUB_TOKEN }}

From 1313256db3e9a31a3e0647abaacc9a8e4edb51b1 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 8 Feb 2024 09:07:52 -0600
Subject: [PATCH 10/41] chore(ci): Use latest for coverage

---
 .github/workflows/ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7849a7350..2e6597e9c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -153,7 +153,7 @@ jobs:
     - name: Install Rust
       uses: dtolnay/rust-toolchain@stable
       with:
-        toolchain: "1.75"  # STABLE
+        toolchain: stable
     - uses: Swatinem/rust-cache@v2
     - name: Install cargo-tarpaulin
       run: cargo install cargo-tarpaulin

From 51a98a25b6c30dd2fbdd74795432006525d1d84a Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 15 Feb 2024 09:57:26 -0600
Subject: [PATCH 11/41] chore(ci): Defer to package.rust-version for clippy

---
 .clippy.toml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.clippy.toml b/.clippy.toml
index 090e2bec0..293c14f35 100644
--- a/.clippy.toml
+++ b/.clippy.toml
@@ -1,4 +1,3 @@
-msrv = "1.65.0"  # MSRV
 warn-on-all-wildcard-imports = true
 allow-expect-in-tests = true
 allow-unwrap-in-tests = true

From 4db293d99b81e9c7da8fb030b1471e4e96dc91ef Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 15 Feb 2024 09:58:01 -0600
Subject: [PATCH 12/41] chore(ci): Only verify MSRV for published packages

---
 .github/workflows/ci.yml | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2e6597e9c..03a4fc0b7 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -53,7 +53,7 @@ jobs:
     - name: No-default features
       run: cargo test --workspace --no-default-features
   msrv:
-    name: "Check MSRV: 1.65.0"
+    name: "Check MSRV"
     runs-on: ubuntu-latest
     steps:
     - name: Checkout repository
@@ -61,14 +61,15 @@ jobs:
     - name: Install Rust
       uses: dtolnay/rust-toolchain@stable
       with:
-        toolchain: "1.65.0"  # MSRV
+        toolchain: stable
     - uses: Swatinem/rust-cache@v2
+    - uses: taiki-e/install-action@cargo-hack
     - name: Default features
-      run: cargo check --workspace --all-targets
+      run: cargo hack check --rust-version --ignore-private --workspace --all-targets
     - name: All features
-      run: cargo check --workspace --all-targets --all-features
+      run: cargo hack check --rust-version --ignore-private --workspace --all-targets --all-features
     - name: No-default features
-      run: cargo check --workspace --all-targets --no-default-features
+      run: cargo hack check --rust-version --ignore-private --workspace --all-targets --no-default-features
   lockfile:
     runs-on: ubuntu-latest
     steps:

From 779496bb002837bf4e115ae3a33e7c819abdf293 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 15 Feb 2024 10:03:14 -0600
Subject: [PATCH 13/41] chore(ci): Run the latest clippy

---
 .github/renovate.json5   | 37 +++++++++++++++++++++++++++++++++++--
 .github/workflows/ci.yml |  2 +-
 2 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/.github/renovate.json5 b/.github/renovate.json5
index 32d3628d4..06c1d6394 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -21,7 +21,25 @@
         'MSRV.*?(?<currentValue>\\d+\\.\\d+(\\.\\d+)?)',
         '(?<currentValue>\\d+\\.\\d+(\\.\\d+)?).*?MSRV',
       ],
-      depNameTemplate: 'rust',
+      depNameTemplate: 'MSRV',
+      packageNameTemplate: 'rust-lang/rust',
+      datasourceTemplate: 'github-releases',
+    },
+    {
+      customType: 'regex',
+      fileMatch: [
+        '^rust-toolchain\\.toml$',
+        'Cargo.toml$',
+        'clippy.toml$',
+        '\\.clippy.toml$',
+        '^\\.github/workflows/ci.yml$',
+        '^\\.github/workflows/rust-next.yml$',
+      ],
+      matchStrings: [
+        'STABLE.*?(?<currentValue>\\d+\\.\\d+(\\.\\d+)?)',
+        '(?<currentValue>\\d+\\.\\d+(\\.\\d+)?).*?STABLE',
+      ],
+      depNameTemplate: 'STABLE',
       packageNameTemplate: 'rust-lang/rust',
       datasourceTemplate: 'github-releases',
     },
@@ -33,7 +51,7 @@
         'custom.regex',
       ],
       matchPackageNames: [
-        'rust',
+        'MSRV',
       ],
       minimumReleaseAge: '336 days',  // 8 releases * 6 weeks per release * 7 days per week
       internalChecksFilter: 'strict',
@@ -41,6 +59,21 @@
       schedule: [
         '* * * * *',
       ],
+      groupName: 'rust-version',
+    },
+    {
+      commitMessageTopic: 'STABLE',
+      matchManagers: [
+        'custom.regex',
+      ],
+      matchPackageNames: [
+        'STABLE',
+      ],
+      extractVersion: '^(?<version>\\d+\\.\\d+)',  // Drop the patch version
+      schedule: [
+        '* * * * *',
+      ],
+      groupName: 'rust-version',
     },
     // Goals:
     // - Keep version reqs low, ignoring compatible normal/build dependencies
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 03a4fc0b7..1c18ca65f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -124,7 +124,7 @@ jobs:
     - name: Install Rust
       uses: dtolnay/rust-toolchain@stable
       with:
-        toolchain: "1.65.0"  # MSRV
+        toolchain: "1.76"  # STABLE
         components: clippy
     - uses: Swatinem/rust-cache@v2
     - name: Install SARIF tools

From c977df514987a625772ca04df9fc100ba8b7576f Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Tue, 20 Feb 2024 20:22:05 -0600
Subject: [PATCH 14/41] chore(ci): Prevent cargo-hack from blowing away our
 lockfile

See taiki-e/cargo-hack#234
---
 .github/workflows/ci.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1c18ca65f..12d398cde 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -65,11 +65,11 @@ jobs:
     - uses: Swatinem/rust-cache@v2
     - uses: taiki-e/install-action@cargo-hack
     - name: Default features
-      run: cargo hack check --rust-version --ignore-private --workspace --all-targets
+      run: cargo hack check --locked --rust-version --ignore-private --workspace --all-targets
     - name: All features
-      run: cargo hack check --rust-version --ignore-private --workspace --all-targets --all-features
+      run: cargo hack check --locked --rust-version --ignore-private --workspace --all-targets --all-features
     - name: No-default features
-      run: cargo hack check --rust-version --ignore-private --workspace --all-targets --no-default-features
+      run: cargo hack check --locked --rust-version --ignore-private --workspace --all-targets --no-default-features
   lockfile:
     runs-on: ubuntu-latest
     steps:

From 7846c5130e5459ce452bd4fdb17373d83f45dff3 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 1 Mar 2024 00:30:14 +0000
Subject: [PATCH 15/41] chore(deps): Update pre-commit/action action to v3.0.1

---
 .github/workflows/pre-commit.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
index 7d773285a..1b000abfa 100644
--- a/.github/workflows/pre-commit.yml
+++ b/.github/workflows/pre-commit.yml
@@ -24,4 +24,4 @@ jobs:
     steps:
     - uses: actions/checkout@v4
     - uses: actions/setup-python@v5
-    - uses: pre-commit/action@v3.0.0
+    - uses: pre-commit/action@v3.0.1

From 3d5ead81cf3962997045915cd9b137086d35d1a9 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 21 Mar 2024 10:46:56 -0500
Subject: [PATCH 16/41] chore(ci): Configure standard lints

---
 Cargo.toml | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/lib.rs |  2 ++
 2 files changed, 86 insertions(+)

diff --git a/Cargo.toml b/Cargo.toml
index b8ecde11f..e51c5ddda 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,6 +16,87 @@ include = [
   "examples/**/*"
 ]
 
+[workspace.lints.rust]
+missing_docs = "warn"
+rust_2018_idioms = "warn"
+unreachable_pub = "warn"
+unsafe-op-in-unsafe-fn = "warn"
+unsafe_code = "warn"
+unused-crate-dependencies = "warn"
+unused-lifetimes = "warn"
+unused-macro-rules = "warn"
+unused-qualifications = "warn"
+
+[workspace.lints.clippy]
+bool_assert_comparison = "allow"
+branches_sharing_code = "allow"
+checked_conversions = "warn"
+collapsible_else_if = "allow"
+create_dir = "warn"
+dbg_macro = "warn"
+debug_assert_with_mut_call = "warn"
+doc_markdown = "warn"
+empty_enum = "warn"
+enum_glob_use = "warn"
+exhaustive_enums = "warn"
+exhaustive_structs = "warn"
+exit = "warn"
+expl_impl_clone_on_copy = "warn"
+explicit_deref_methods = "warn"
+explicit_into_iter_loop = "warn"
+fallible_impl_from = "warn"
+filter_map_next = "warn"
+flat_map_option = "warn"
+float_cmp_const = "warn"
+fn_params_excessive_bools = "warn"
+from_iter_instead_of_collect = "warn"
+if_same_then_else = "allow"
+implicit_clone = "warn"
+imprecise_flops = "warn"
+inconsistent_struct_constructor = "warn"
+inefficient_to_string = "warn"
+infinite_loop = "warn"
+invalid_upcast_comparisons = "warn"
+items_after_statements = "warn"
+large_digit_groups = "warn"
+large_stack_arrays = "warn"
+large_types_passed_by_value = "warn"
+let_and_return = "allow"  # sometimes good to name what you are returning
+linkedlist = "warn"
+lossy_float_literal = "warn"
+macro_use_imports = "warn"
+match_wildcard_for_single_variants = "warn"
+mem_forget = "warn"
+mutex_integer = "warn"
+needless_continue = "warn"
+needless_for_each = "warn"
+negative_feature_names = "warn"
+path_buf_push_overwrite = "warn"
+print_stderr = "warn"
+print_stdout = "warn"
+ptr_as_ptr = "warn"
+rc_mutex = "warn"
+redundant_feature_names = "warn"
+ref_option_ref = "warn"
+rest_pat_in_fully_bound_structs = "warn"
+return_self_not_must_use = "warn"
+same_functions_in_if_condition = "warn"
+self_named_module_files = "warn"
+semicolon_if_nothing_returned = "warn"
+single_match_else = "warn"
+str_to_string = "warn"
+string_add = "warn"
+string_add_assign = "warn"
+string_lit_as_bytes = "warn"
+string_to_string = "warn"
+tests_outside_test_module = "warn"
+todo = "warn"
+trait_duplication_in_bounds = "warn"
+unwrap_used = "warn"
+verbose_file_reads = "warn"
+wildcard_imports = "warn"
+zero_sized_map_values = "warn"
+
 [package]
 name = "PROJECT"
 version = "0.0.1"
@@ -46,3 +127,6 @@ default = []
 [dependencies]
 
 [dev-dependencies]
+
+[lints]
+workspace = true
diff --git a/src/lib.rs b/src/lib.rs
index 45bf577cb..8ce46b57d 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,2 +1,4 @@
+//! > DESCRIPTION
+
 #![cfg_attr(docsrs, feature(doc_auto_cfg))]
 #![allow(non_snake_case)] // TODO: Delete me

From ace6e07683db64f05a237d8c833e2320a951b5d4 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 21 Mar 2024 12:20:47 -0500
Subject: [PATCH 17/41] chore(ci): Don't update stable and MSRV together

We might want to hold one or the other back
---
 .github/renovate.json5 | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/.github/renovate.json5 b/.github/renovate.json5
index 06c1d6394..373fc0e54 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -59,10 +59,9 @@
       schedule: [
         '* * * * *',
       ],
-      groupName: 'rust-version',
     },
     {
-      commitMessageTopic: 'STABLE',
+      commitMessageTopic: 'Rust Stable',
       matchManagers: [
         'custom.regex',
       ],
@@ -73,7 +72,6 @@
       schedule: [
         '* * * * *',
       ],
-      groupName: 'rust-version',
     },
     // Goals:
     // - Keep version reqs low, ignoring compatible normal/build dependencies

From 8ec86ab9a22aa7333af26113d8b725333966635f Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Mon, 25 Mar 2024 12:33:58 -0500
Subject: [PATCH 18/41] chore: Normalize clippy lint names

---
 Cargo.toml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index e51c5ddda..d03936f44 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -20,12 +20,12 @@ include = [
 missing_docs = "warn"
 rust_2018_idioms = "warn"
 unreachable_pub = "warn"
-unsafe-op-in-unsafe-fn = "warn"
+unsafe_op_in_unsafe_fn = "warn"
 unsafe_code = "warn"
-unused-crate-dependencies = "warn"
-unused-lifetimes = "warn"
-unused-macro-rules = "warn"
-unused-qualifications = "warn"
+unused_crate_dependencies = "warn"
+unused_lifetimes = "warn"
+unused_macro_rules = "warn"
+unused_qualifications = "warn"
 
 [workspace.lints.clippy]
 bool_assert_comparison = "allow"

From 8e647d9cd40a6891d524737d97d93a43a9e7b965 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 28 Mar 2024 09:35:59 -0500
Subject: [PATCH 19/41] chore: Encourage use of workspace.dependencies

---
 Cargo.toml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Cargo.toml b/Cargo.toml
index d03936f44..e07a4738e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,6 +16,8 @@ include = [
   "examples/**/*"
 ]
 
+[workspace.dependencies]
+
 [workspace.lints.rust]
 missing_docs = "warn"
 rust_2018_idioms = "warn"

From 126eb3d4dc4f59bcbee11d9d55545f01f75fb734 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 28 Mar 2024 09:48:35 -0500
Subject: [PATCH 20/41] chore: Encourage a single test binary

---
 Cargo.lock                   | 49 ++++++++++++++++++++++++++++++++++++
 Cargo.toml                   |  2 ++
 tests/testsuite/delete_me.rs |  0
 tests/testsuite/main.rs      |  1 +
 4 files changed, 52 insertions(+)
 create mode 100644 tests/testsuite/delete_me.rs
 create mode 100644 tests/testsuite/main.rs

diff --git a/Cargo.lock b/Cargo.lock
index 49c1f2dc3..e50f2865d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -5,3 +5,52 @@ version = 3
 [[package]]
 name = "PROJECT"
 version = "0.0.1"
+dependencies = [
+ "automod",
+]
+
+[[package]]
+name = "automod"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edf3ee19dbc0a46d740f6f0926bde8c50f02bdbc7b536842da28f6ac56513a8b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "002a1b3dbf967edfafc32655d0f377ab0bb7b994aa1d32c8cc7e9b8bf3ebb8f0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
diff --git a/Cargo.toml b/Cargo.toml
index e07a4738e..d5e3b0146 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -17,6 +17,7 @@ include = [
 ]
 
 [workspace.dependencies]
+automod = "1.0.14"
 
 [workspace.lints.rust]
 missing_docs = "warn"
@@ -129,6 +130,7 @@ default = []
 [dependencies]
 
 [dev-dependencies]
+automod.workspace = true
 
 [lints]
 workspace = true
diff --git a/tests/testsuite/delete_me.rs b/tests/testsuite/delete_me.rs
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/testsuite/main.rs b/tests/testsuite/main.rs
new file mode 100644
index 000000000..444137478
--- /dev/null
+++ b/tests/testsuite/main.rs
@@ -0,0 +1 @@
+automod::dir!("tests/testsuite");

From c8b190be3a7397d63ffb175f8387ef98e7896b5a Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 28 Mar 2024 09:50:22 -0500
Subject: [PATCH 21/41] chore(ci): Use latest SARIF

Now that we run clippy on stable, we can do this
---
 .github/workflows/ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 12d398cde..52ce7f227 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -128,9 +128,9 @@ jobs:
         components: clippy
     - uses: Swatinem/rust-cache@v2
     - name: Install SARIF tools
-      run: cargo install clippy-sarif --version 0.3.4 --locked  # Held back due to msrv
+      run: cargo install clippy-sarif --locked
     - name: Install SARIF tools
-      run: cargo install sarif-fmt --version 0.3.4 --locked # Held back due to msrv
+      run: cargo install sarif-fmt --locked
     - name: Check
       run: >
         cargo clippy --workspace --all-features --all-targets --message-format=json -- -D warnings --allow deprecated

From 9b1b56620156971664aaf0f7a693bf3bc72ca0cb Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 28 Mar 2024 09:51:51 -0500
Subject: [PATCH 22/41] chore(ci): Fix all rust-version-specific checks to
 stable

---
 .github/workflows/ci.yml | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 52ce7f227..42c6be7ea 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -91,7 +91,7 @@ jobs:
     - name: Install Rust
       uses: dtolnay/rust-toolchain@stable
       with:
-        toolchain: stable
+        toolchain: "1.76"  # STABLE
     - uses: Swatinem/rust-cache@v2
     - name: Check documentation
       env:
@@ -106,9 +106,7 @@ jobs:
     - name: Install Rust
       uses: dtolnay/rust-toolchain@stable
       with:
-        # Not MSRV because its harder to jump between versions and people are
-        # more likely to have stable
-        toolchain: stable
+        toolchain: "1.76"  # STABLE
         components: rustfmt
     - uses: Swatinem/rust-cache@v2
     - name: Check formatting

From 92d486c4b03efa984a9d03aa7279a1febe84d816 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 28 Mar 2024 09:53:02 -0500
Subject: [PATCH 23/41] chore(ci): Speed up lockfile check

---
 .github/workflows/ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 42c6be7ea..7a455a4d6 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -81,7 +81,7 @@ jobs:
         toolchain: stable
     - uses: Swatinem/rust-cache@v2
     - name: "Is lockfile updated?"
-      run: cargo fetch --locked
+      run: cargo update --workspace --locked
   docs:
     name: Docs
     runs-on: ubuntu-latest

From 9258d9af7b87bc0394ef09be7e65bf6152d99f4b Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 28 Mar 2024 09:57:23 -0500
Subject: [PATCH 24/41] chore(ci): More exhaustively check features

---
 .github/workflows/ci.yml        | 15 ++++-----------
 .github/workflows/rust-next.yml | 18 ++++++------------
 2 files changed, 10 insertions(+), 23 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7a455a4d6..134c31794 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -44,14 +44,11 @@ jobs:
       with:
         toolchain: ${{ matrix.rust }}
     - uses: Swatinem/rust-cache@v2
+    - uses: taiki-e/install-action@cargo-hack
     - name: Build
       run: cargo test --workspace --no-run
-    - name: Default features
-      run: cargo test --workspace
-    - name: All features
-      run: cargo test --workspace --all-features
-    - name: No-default features
-      run: cargo test --workspace --no-default-features
+    - name: Test
+      run: cargo hack test --feature-powerset --workspace
   msrv:
     name: "Check MSRV"
     runs-on: ubuntu-latest
@@ -65,11 +62,7 @@ jobs:
     - uses: Swatinem/rust-cache@v2
     - uses: taiki-e/install-action@cargo-hack
     - name: Default features
-      run: cargo hack check --locked --rust-version --ignore-private --workspace --all-targets
-    - name: All features
-      run: cargo hack check --locked --rust-version --ignore-private --workspace --all-targets --all-features
-    - name: No-default features
-      run: cargo hack check --locked --rust-version --ignore-private --workspace --all-targets --no-default-features
+      run: cargo hack check --feature-powerset --locked --rust-version --ignore-private --workspace --all-targets
   lockfile:
     runs-on: ubuntu-latest
     steps:
diff --git a/.github/workflows/rust-next.yml b/.github/workflows/rust-next.yml
index 49e5d8c3b..e673b6520 100644
--- a/.github/workflows/rust-next.yml
+++ b/.github/workflows/rust-next.yml
@@ -36,14 +36,11 @@ jobs:
       with:
         toolchain: ${{ matrix.rust }}
     - uses: Swatinem/rust-cache@v2
+    - uses: taiki-e/install-action@cargo-hack
     - name: Build
       run: cargo test --workspace --no-run
-    - name: Default features
-      run: cargo test --workspace
-    - name: All features
-      run: cargo test --workspace --all-features
-    - name: No-default features
-      run: cargo test --workspace --no-default-features
+    - name: Test
+      run: cargo hack test --feature-powerset --workspace
   latest:
     name: "Check latest dependencies"
     runs-on: ubuntu-latest
@@ -55,13 +52,10 @@ jobs:
       with:
         toolchain: stable
     - uses: Swatinem/rust-cache@v2
+    - uses: taiki-e/install-action@cargo-hack
     - name: Update dependencues
       run: cargo update
     - name: Build
       run: cargo test --workspace --no-run
-    - name: Default features
-      run: cargo test --workspace
-    - name: All features
-      run: cargo test --workspace --all-features
-    - name: No-default features
-      run: cargo test --workspace --no-default-features
+    - name: Test
+      run: cargo hack test --feature-powerset --workspace

From 2714cca7c31a9c73716e88a93693c119c527d7f1 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 28 Mar 2024 09:58:31 -0500
Subject: [PATCH 25/41] chore(ci): Don't check for unused crates

---
 Cargo.toml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Cargo.toml b/Cargo.toml
index d5e3b0146..4097fef00 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -25,7 +25,6 @@ rust_2018_idioms = "warn"
 unreachable_pub = "warn"
 unsafe_op_in_unsafe_fn = "warn"
 unsafe_code = "warn"
-unused_crate_dependencies = "warn"
 unused_lifetimes = "warn"
 unused_macro_rules = "warn"
 unused_qualifications = "warn"

From 314eef7f5fb7e415e8cd92887e5e878e9bfa929b Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 28 Mar 2024 10:38:57 -0500
Subject: [PATCH 26/41] chore: Dont check must_use

See https://github.com/rust-lang/rust-clippy/issues/8339
---
 Cargo.toml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Cargo.toml b/Cargo.toml
index 4097fef00..666e6e393 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -81,7 +81,6 @@ rc_mutex = "warn"
 redundant_feature_names = "warn"
 ref_option_ref = "warn"
 rest_pat_in_fully_bound_structs = "warn"
-return_self_not_must_use = "warn"
 same_functions_in_if_condition = "warn"
 self_named_module_files = "warn"
 semicolon_if_nothing_returned = "warn"

From 6a9d2bf50fa78d8f277b77be836b48fad8c7c764 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 28 Mar 2024 12:45:57 -0500
Subject: [PATCH 27/41] chore: Don't warn on unsafe

This works well when a package is a safe abstraction but to universally
apply in a template to all members of a workspace doesn't make sense.
---
 Cargo.toml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Cargo.toml b/Cargo.toml
index 666e6e393..50bfea562 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -24,7 +24,6 @@ missing_docs = "warn"
 rust_2018_idioms = "warn"
 unreachable_pub = "warn"
 unsafe_op_in_unsafe_fn = "warn"
-unsafe_code = "warn"
 unused_lifetimes = "warn"
 unused_macro_rules = "warn"
 unused_qualifications = "warn"

From 8d4b1b6c8daf3c32828bf92725811cf433917081 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 28 Mar 2024 13:24:28 -0500
Subject: [PATCH 28/41] chore: Remove clippy::tests_outside_test_module

See https://github.com/rust-lang/rust-clippy/issues/11024
---
 Cargo.toml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Cargo.toml b/Cargo.toml
index 50bfea562..ed593eba7 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -89,7 +89,6 @@ string_add = "warn"
 string_add_assign = "warn"
 string_lit_as_bytes = "warn"
 string_to_string = "warn"
-tests_outside_test_module = "warn"
 todo = "warn"
 trait_duplication_in_bounds = "warn"
 unwrap_used = "warn"

From 99e034bbbbae7d60bb68d68c6d0db8338a97b030 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Thu, 28 Mar 2024 15:10:58 -0500
Subject: [PATCH 29/41] chore: Move print lints to lib.rs

While there is a config for ignoring these in tests, it doesn't help
with examples.
---
 Cargo.toml | 2 --
 src/lib.rs | 2 ++
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index ed593eba7..faf1e63ae 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -73,8 +73,6 @@ needless_continue = "warn"
 needless_for_each = "warn"
 negative_feature_names = "warn"
 path_buf_push_overwrite = "warn"
-print_stderr = "warn"
-print_stdout = "warn"
 ptr_as_ptr = "warn"
 rc_mutex = "warn"
 redundant_feature_names = "warn"
diff --git a/src/lib.rs b/src/lib.rs
index 8ce46b57d..2eabbd09e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,4 +1,6 @@
 //! > DESCRIPTION
 
 #![cfg_attr(docsrs, feature(doc_auto_cfg))]
+#![warn(clippy::print_stderr)]
+#![warn(clippy::print_stdout)]
 #![allow(non_snake_case)] // TODO: Delete me

From a516bda4adb0f367da527488697ea308fbe58b38 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Mon, 1 Apr 2024 08:58:36 -0500
Subject: [PATCH 30/41] chore: Drop workspace.dependencies

Without automated checks, this will make it harder to track breaking
changes.
---
 Cargo.toml | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index faf1e63ae..983e0905f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,9 +16,6 @@ include = [
   "examples/**/*"
 ]
 
-[workspace.dependencies]
-automod = "1.0.14"
-
 [workspace.lints.rust]
 missing_docs = "warn"
 rust_2018_idioms = "warn"
@@ -124,7 +121,7 @@ default = []
 [dependencies]
 
 [dev-dependencies]
-automod.workspace = true
+automod = "1.0.14"
 
 [lints]
 workspace = true

From ebc70d00f9259146592b7987bfcb8a0cb6c16661 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Mon, 1 Apr 2024 09:11:24 -0500
Subject: [PATCH 31/41] chore: Only check missing_docs in lib

This also fires in examples and other places.

While docs in examples would be nice,
it isn't universally applicable and `allow`s would undermine the
examples.
---
 Cargo.toml | 1 -
 src/lib.rs | 1 +
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/Cargo.toml b/Cargo.toml
index 983e0905f..715131bb9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -17,7 +17,6 @@ include = [
 ]
 
 [workspace.lints.rust]
-missing_docs = "warn"
 rust_2018_idioms = "warn"
 unreachable_pub = "warn"
 unsafe_op_in_unsafe_fn = "warn"
diff --git a/src/lib.rs b/src/lib.rs
index 2eabbd09e..39877b764 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,6 +1,7 @@
 //! > DESCRIPTION
 
 #![cfg_attr(docsrs, feature(doc_auto_cfg))]
+#![warn(missing_docs)]
 #![warn(clippy::print_stderr)]
 #![warn(clippy::print_stdout)]
 #![allow(non_snake_case)] // TODO: Delete me

From 3278d49444c33ece610de3fb5547bd885124dfe7 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Mon, 1 Apr 2024 10:35:16 -0500
Subject: [PATCH 32/41] chore: Allow print in tests

---
 .clippy.toml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.clippy.toml b/.clippy.toml
index 293c14f35..027eef415 100644
--- a/.clippy.toml
+++ b/.clippy.toml
@@ -1,4 +1,5 @@
 warn-on-all-wildcard-imports = true
+allow-print-in-tests = true
 allow-expect-in-tests = true
 allow-unwrap-in-tests = true
 allow-dbg-in-tests = true

From d634de649f30d5a4deade46333606bc63897d05e Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Mon, 1 Apr 2024 11:36:58 -0500
Subject: [PATCH 33/41] chore(ci): Ensure CI job always runs

---
 .github/workflows/ci.yml | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 134c31794..95b13b4f3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -23,11 +23,13 @@ jobs:
     permissions:
       contents: none
     name: CI
-    needs: [test, msrv, docs, rustfmt, clippy]
+    needs: [test, msrv, lockfile, docs, rustfmt, clippy]
     runs-on: ubuntu-latest
+    if: "always()"
     steps:
-      - name: Done
-        run: exit 0
+      - name: Failed
+        run: exit 1
+        if: "contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') || contains(needs.*.result, 'skipped')"
   test:
     name: Test
     strategy:

From 2570b58a0feaf355dede9080a9f4c98f8ba5580b Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Mon, 1 Apr 2024 12:31:49 -0500
Subject: [PATCH 34/41] chore(ci): Skip branch protections

---
 .github/settings.yml | 26 +++++++++++++++-----------
 1 file changed, 15 insertions(+), 11 deletions(-)

diff --git a/.github/settings.yml b/.github/settings.yml
index 7d5e4fce4..08983ae0a 100644
--- a/.github/settings.yml
+++ b/.github/settings.yml
@@ -42,14 +42,18 @@ labels:
     color: '#c2e0c6'
     description: "Help wanted!"
 
-branches:
-  - name: main
-    protection:
-      required_pull_request_reviews: null
-      required_conversation_resolution: true
-      required_status_checks:
-        # Required. Require branches to be up to date before merging.
-        strict: false
-        contexts: ["CI", "Lint Commits", "Spell Check with Typos"]
-      enforce_admins: false
-      restrictions: null
+# This serves more as documentation.
+# Branch protection API was replaced by rulesets but settings isn't updated.
+# See https://github.com/repository-settings/app/issues/825
+#
+# branches:
+#   - name: main
+#     protection:
+#       required_pull_request_reviews: null
+#       required_conversation_resolution: true
+#       required_status_checks:
+#         # Required. Require branches to be up to date before merging.
+#         strict: false
+#         contexts: ["CI", "Lint Commits", "Spell Check with Typos"]
+#       enforce_admins: false
+#       restrictions: null

From afd275590c5568e8f7ca60abc1f33b20e3679c03 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Mon, 1 Apr 2024 12:36:16 -0500
Subject: [PATCH 35/41] chore(ci): Don't block on Lint Commits

---
 .github/settings.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/settings.yml b/.github/settings.yml
index 08983ae0a..457eed624 100644
--- a/.github/settings.yml
+++ b/.github/settings.yml
@@ -54,6 +54,6 @@ labels:
 #       required_status_checks:
 #         # Required. Require branches to be up to date before merging.
 #         strict: false
-#         contexts: ["CI", "Lint Commits", "Spell Check with Typos"]
+#         contexts: ["CI", "Spell Check with Typos"]
 #       enforce_admins: false
 #       restrictions: null

From 14225df351a4510a6fad72e716b29173347aac84 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Tue, 16 Apr 2024 21:46:56 -0500
Subject: [PATCH 36/41] chore(ci): Auto-merge linter version updates

---
 .github/renovate.json5 | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.github/renovate.json5 b/.github/renovate.json5
index 373fc0e54..62ca46b6d 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -72,6 +72,7 @@
       schedule: [
         '* * * * *',
       ],
+      automerge: true,
     },
     // Goals:
     // - Keep version reqs low, ignoring compatible normal/build dependencies

From be30b1bba034344c1a7c526b2b1898a8767471c5 Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Fri, 26 Apr 2024 09:20:18 -0500
Subject: [PATCH 37/41] chore(ci): Try again with not auto-updating MSRV

The overhead for MSRV bumping is a lot lower and its annoying merging
all of the PRs (and I don't want these auto-merged)
---
 .github/renovate.json5 | 33 ---------------------------------
 1 file changed, 33 deletions(-)

diff --git a/.github/renovate.json5 b/.github/renovate.json5
index 62ca46b6d..c18442084 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -7,24 +7,6 @@
   configMigration: true,
   dependencyDashboard: true,
   customManagers: [
-    {
-      customType: 'regex',
-      fileMatch: [
-        '^rust-toolchain\\.toml$',
-        'Cargo.toml$',
-        'clippy.toml$',
-        '\\.clippy.toml$',
-        '^\\.github/workflows/ci.yml$',
-        '^\\.github/workflows/rust-next.yml$',
-      ],
-      matchStrings: [
-        'MSRV.*?(?<currentValue>\\d+\\.\\d+(\\.\\d+)?)',
-        '(?<currentValue>\\d+\\.\\d+(\\.\\d+)?).*?MSRV',
-      ],
-      depNameTemplate: 'MSRV',
-      packageNameTemplate: 'rust-lang/rust',
-      datasourceTemplate: 'github-releases',
-    },
     {
       customType: 'regex',
       fileMatch: [
@@ -45,21 +27,6 @@
     },
   ],
   packageRules: [
-    {
-      commitMessageTopic: 'MSRV',
-      matchManagers: [
-        'custom.regex',
-      ],
-      matchPackageNames: [
-        'MSRV',
-      ],
-      minimumReleaseAge: '336 days',  // 8 releases * 6 weeks per release * 7 days per week
-      internalChecksFilter: 'strict',
-      extractVersion: '^(?<version>\\d+\\.\\d+)',  // Drop the patch version
-      schedule: [
-        '* * * * *',
-      ],
-    },
     {
       commitMessageTopic: 'Rust Stable',
       matchManagers: [

From a01f25da96e8bd3e216fbc19ac9883ab3bf969ce Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Fri, 26 Apr 2024 09:23:28 -0500
Subject: [PATCH 38/41] chore(ci): Reduce noisy lints

Want to add this back in later but this is slowing down migration of my
repos.
---
 src/lib.rs | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/lib.rs b/src/lib.rs
index 39877b764..2eabbd09e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,7 +1,6 @@
 //! > DESCRIPTION
 
 #![cfg_attr(docsrs, feature(doc_auto_cfg))]
-#![warn(missing_docs)]
 #![warn(clippy::print_stderr)]
 #![warn(clippy::print_stdout)]
 #![allow(non_snake_case)] // TODO: Delete me

From 82cf9a62b027c10c6fafdcaaee24c4e92d7da61d Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Fri, 26 Apr 2024 09:35:55 -0500
Subject: [PATCH 39/41] chore(ci): Reduce noisy lints

---
 Cargo.toml | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 715131bb9..898251edf 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -35,9 +35,6 @@ debug_assert_with_mut_call = "warn"
 doc_markdown = "warn"
 empty_enum = "warn"
 enum_glob_use = "warn"
-exhaustive_enums = "warn"
-exhaustive_structs = "warn"
-exit = "warn"
 expl_impl_clone_on_copy = "warn"
 explicit_deref_methods = "warn"
 explicit_into_iter_loop = "warn"
@@ -85,7 +82,6 @@ string_lit_as_bytes = "warn"
 string_to_string = "warn"
 todo = "warn"
 trait_duplication_in_bounds = "warn"
-unwrap_used = "warn"
 verbose_file_reads = "warn"
 wildcard_imports = "warn"
 zero_sized_map_values = "warn"

From 181a2cf5e673d0f6f42133a5b30ccafd86b0106d Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Fri, 26 Apr 2024 11:36:19 -0500
Subject: [PATCH 40/41] chore(ci): Allow prelude wildcard imports

---
 .clippy.toml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.clippy.toml b/.clippy.toml
index 027eef415..1d4c5dc66 100644
--- a/.clippy.toml
+++ b/.clippy.toml
@@ -1,4 +1,3 @@
-warn-on-all-wildcard-imports = true
 allow-print-in-tests = true
 allow-expect-in-tests = true
 allow-unwrap-in-tests = true

From 51de731521efb05c5503e05c33036d8fa439bc5a Mon Sep 17 00:00:00 2001
From: Ed Page <eopage@gmail.com>
Date: Fri, 26 Apr 2024 15:59:46 -0500
Subject: [PATCH 41/41] chore(ci): Lint clippy::items_after_statements seems
 too strict

---
 Cargo.toml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Cargo.toml b/Cargo.toml
index 898251edf..5a905800a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -51,7 +51,6 @@ inconsistent_struct_constructor = "warn"
 inefficient_to_string = "warn"
 infinite_loop = "warn"
 invalid_upcast_comparisons = "warn"
-items_after_statements = "warn"
 large_digit_groups = "warn"
 large_stack_arrays = "warn"
 large_types_passed_by_value = "warn"