Skip to content

fix: batch of six open-issue fixes (#248 #238 #245 #196 #237 #250) - #252

Merged
perfectra1n merged 7 commits into
mainfrom
fix/open-issues-2026-07
Jul 15, 2026
Merged

perfectra1n merged 7 commits into
mainfrom
fix/open-issues-2026-07

Conversation

@perfectra1n

Copy link
Copy Markdown
Collaborator

Fixes a batch of six open issues, one commit per issue. Every fix ships with a regression test that fails without it; the whole branch is green on cargo test/clippy -D warnings/fmt/gen-check and the cognitive-complexity ratchet.

Fixes

Noted follow-ups (out of each issue's core scope)

Closes #248, closes #238, closes #245, closes #196, closes #237, closes #250.

backend_target_key dropped the endpoint+region (S3), storage_account (Azure),
and backing volume (Filesystem), so two distinct backends sharing a bucket/
container/path name collided to one key and replication_destination_differs
wrongly reported a self-replication — the webhook then rejected a valid
RepositoryReplication between two different S3 providers. Fold every
storage-identifying field (never credentials) into the key.

Fixes #248
…duled Snapshots (#238)

create_scheduled_backup hardcoded deletion_policy: None, so the mutating
webhook always stamped its origin default (Delete) and the recipe's
defaultDeletionPolicy was write-only. Resolve the policy and thread its
default into the child Snapshot before admission (degrades to None on a GET
failure, preserving today's behavior).

Fixes #238
…#245)

Repository/ClusterRepository called io::set_ready only in the suspend branch,
so a healthy resume left Ready/Reconciling/Stalled frozen at the suspend
generation (Flux wait: true hangs), and a never-suspended repo never got them.
New io::ready_outcome_for_phase, layered onto every terminal status write in
both reconcilers (on the existing conditions vec, since a merge-patch replaces
the whole array).

Fixes #245
The 'Backups OK' panel summed a durable per-run counter over 24h (23 policies
x N runs = 115), with no per-policy health signal. Add kopiur_snapshotpolicy_
last_backup_success (0/1, latest terminal backup per policy) and retarget the
panel to count(... == 1) -> 'Policies Healthy'.

Fixes #196
MAX_RETURNED_SNAPSHOTS caps entry COUNT, not size; a full SnapshotListEntry is
~2KB (unbounded rootEntry.summ.errors + retentionReason + description), so ~500
entries exceeded etcd's 1MiB ConfigMap limit. The mover's best-effort write then
422'd, the Job still exited 0, and the controller looped ResultPending forever
at Bootstrapped: False. Strip the three controller-unused heavy fields (~400B/
entry) inside prepare_catalog_entries, add a size-budget backstop that trims
trailing entries, and log the write failure loudly.

Fixes #237
kopia snapshot verify ran with no --sources, so a per-SnapshotPolicy quick verify
verified every snapshot in the (shared) repository and verifyFilesPercent sampled
the whole repo — a 1GB cache PVC filled verifying a 19MB snapshot. Add
VerifyOptions.sources and scope the quick tier to the run's resolved identity
(username@hostname:path). The deep tier was already identity-scoped.

Fixes #250
@greptile-apps

greptile-apps Bot commented Jul 15, 2026 •

Copy link
Copy Markdown

Greptile Summary

This PR fixes several backup operator regressions across validation, scheduling, repository status, mover jobs, verification, and observability. The main changes are:

  • More precise backend identity keys for replication validation.
  • Scheduled Snapshots inherit SnapshotPolicy.spec.defaultDeletionPolicy before admission.
  • Repository and ClusterRepository status writes refresh kstatus Ready, Reconciling, and Stalled conditions.
  • Quick verification runs are scoped to the policy’s resolved kopia source.
  • Bootstrap catalog results are slimmed and size-guarded before writing to the result ConfigMap.
  • Policy health dashboards now use a per-policy last-backup-success gauge.

Confidence Score: 5/5

Safe to merge with low risk.

The changes are targeted fixes with tests covering the affected validation, controller, mover, kopia argument, metrics, and dashboard paths. No blocking correctness or security issues were identified. The previous defaultDeletionPolicy fallback issue is addressed by propagating policy read errors instead of creating a Snapshot with None.

No files require special attention.

T-Rex T-Rex Logs

What T-Rex did

  • Executed the cargo test for the changed crates and produced a proof log that records the command, working directory, cargo test output, EXIT_CODE: 0, and ELAPSED_SECONDS: 11.
  • Validated that no narrowed retry was needed because the highest-value requested command passed.

View all artifacts

T-Rex Ran code and verified through T-Rex

Important Files Changed

Filename Overview
crates/api/src/validate/repository.rs Expands replication backend identity keys to include storage-target discriminators for S3, Azure, filesystem, and SFTP.
crates/controller/src/snapshot_schedule.rs Resolves SnapshotPolicy.defaultDeletionPolicy before creating scheduled Snapshots and propagates read errors.
crates/controller/src/repository.rs Adds kstatus condition updates to namespaced repository terminal status paths.
crates/controller/src/cluster_repository.rs Adds matching kstatus condition updates to cluster repository success, failure, and probe paths.
crates/controller/src/metrics.rs Adds a per-policy 0/1 gauge for latest terminal backup success.
crates/kopia/src/client/mod.rs Adds VerifyOptions.sources and emits --sources for scoped kopia snapshot verify calls.
crates/mover/src/bootstrap.rs Slims bootstrap catalog entries and adds a serialized-result size budget.
crates/mover/src/main.rs Applies the bootstrap result size guard and scopes quick verification to the resolved identity.
deploy/dashboards/kopiur.json Updates the policy-health dashboard panel to use the new last-backup-success gauge.

Reviews (2): Last reviewed commit: "fix(controller): fail the fire on a poli..." | Re-trigger Greptile

…t deletionPolicy (#238)

Review follow-up to the #238 fix: policy_default_deletion_policy degraded a
read failure/missing policy to None, and admission then stamps the origin
default Delete — so a transient apiserver blip against a policy whose
defaultDeletionPolicy is Retain/Orphan silently downgraded the produced
snapshot's retention to destructive Delete.

Return Result and propagate (mirroring policy_repo_timezone_default and the
existing target-resolution failures in fire_for_targets), so the fire is
skipped and retried idempotently instead of persisting the wrong semantics. A
genuine None now means only 'the policy sets no default' (webhook Delete is
then correct), never 'we could not read it'. Refactored to take &Client so the
propagation is unit-tested with a mock kube client (5xx and 404 both error).
@perfectra1n
perfectra1n merged commit 045a5a5 into main Jul 15, 2026
28 of 29 checks passed
@perfectra1n
perfectra1n deleted the fix/open-issues-2026-07 branch July 15, 2026 05:12
doonga pushed a commit to greyrock-labs/home-ops that referenced this pull request Jul 15, 2026
….7.3 ➔ 0.7.4) (#74)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/home-operations/charts/kopiur](https://github.com/home-operations/kopiur) | patch | `0.7.3` → `0.7.4` |

---

### Release Notes

<details>
<summary>home-operations/kopiur (ghcr.io/home-operations/charts/kopiur)</summary>

### [`v0.7.4`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#074-2026-07-15)

[Compare Source](home-operations/kopiur@0.7.3...0.7.4)

##### Features

- bound Snapshot CR reconcile cost at scale ([#&#8203;249](home-operations/kopiur#249)) ([#&#8203;253](home-operations/kopiur#253)) ([3697aa9](home-operations/kopiur@3697aa9))
- **docs:** clean up admonitions in docs ([71c5d85](home-operations/kopiur@71c5d85))
- multi-cluster shared repository support — cluster identity, foreign-aware discovery, collision-free maintenance leases ([#&#8203;251](home-operations/kopiur#251)) ([a4593d8](home-operations/kopiur@a4593d8))

##### Bug Fixes

- batch of six open-issue fixes ([#&#8203;248](home-operations/kopiur#248) [#&#8203;238](home-operations/kopiur#238) [#&#8203;245](home-operations/kopiur#245) [#&#8203;196](home-operations/kopiur#196) [#&#8203;237](home-operations/kopiur#237) [#&#8203;250](home-operations/kopiur#250)) ([#&#8203;252](home-operations/kopiur#252)) ([045a5a5](home-operations/kopiur@045a5a5))
- **deps:** update rust crate http-body-util (0.1.3 → 0.1.4) ([#&#8203;244](home-operations/kopiur#244)) ([4878006](home-operations/kopiur@4878006))
- **deps:** update rust crate rustls (0.23.41 → 0.23.42) ([#&#8203;243](home-operations/kopiur#243)) ([13b1dc4](home-operations/kopiur@13b1dc4))

##### Miscellaneous Chores

- **krew:** kopiur 0.7.3 manifest ([d521675](home-operations/kopiur@d521675))
- **mise:** Update tool aqua:EmbarkStudios/cargo-deny (0.19.9 → 0.20.2) ([#&#8203;226](home-operations/kopiur#226)) ([9c109b4](home-operations/kopiur@9c109b4))
- **mise:** Update tool oxfmt (0.58.0 → 0.59.0) ([#&#8203;246](home-operations/kopiur#246)) ([41625e9](home-operations/kopiur@41625e9))
- **mise:** Update tool zizmor (1.26.1 → 1.27.0) ([#&#8203;247](home-operations/kopiur#247)) ([fe10a6a](home-operations/kopiur@fe10a6a))

</details>

---

### Configuration

📅 **Schedule**: (in timezone America/New_York)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNjAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI2MC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.greyrock.io/greyrock-labs/home-ops/pulls/74
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Jul 16, 2026
….7.3 ➔ 0.7.4) (#1607)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/home-operations/charts/kopiur](https://github.com/home-operations/kopiur) | patch | `0.7.3` → `0.7.4` |

---

### Release Notes

<details>
<summary>home-operations/kopiur (ghcr.io/home-operations/charts/kopiur)</summary>

### [`v0.7.4`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#074-2026-07-15)

[Compare Source](home-operations/kopiur@0.7.3...0.7.4)

##### Features

- bound Snapshot CR reconcile cost at scale ([#&#8203;249](home-operations/kopiur#249)) ([#&#8203;253](home-operations/kopiur#253)) ([3697aa9](home-operations/kopiur@3697aa9))
- **docs:** clean up admonitions in docs ([71c5d85](home-operations/kopiur@71c5d85))
- multi-cluster shared repository support — cluster identity, foreign-aware discovery, collision-free maintenance leases ([#&#8203;251](home-operations/kopiur#251)) ([a4593d8](home-operations/kopiur@a4593d8))

##### Bug Fixes

- batch of six open-issue fixes ([#&#8203;248](home-operations/kopiur#248) [#&#8203;238](home-operations/kopiur#238) [#&#8203;245](home-operations/kopiur#245) [#&#8203;196](home-operations/kopiur#196) [#&#8203;237](home-operations/kopiur#237) [#&#8203;250](home-operations/kopiur#250)) ([#&#8203;252](home-operations/kopiur#252)) ([045a5a5](home-operations/kopiur@045a5a5))
- **deps:** update rust crate http-body-util (0.1.3 → 0.1.4) ([#&#8203;244](home-operations/kopiur#244)) ([4878006](home-operations/kopiur@4878006))
- **deps:** update rust crate rustls (0.23.41 → 0.23.42) ([#&#8203;243](home-operations/kopiur#243)) ([13b1dc4](home-operations/kopiur@13b1dc4))

##### Miscellaneous Chores

- **krew:** kopiur 0.7.3 manifest ([d521675](home-operations/kopiur@d521675))
- **mise:** Update tool aqua:EmbarkStudios/cargo-deny (0.19.9 → 0.20.2) ([#&#8203;226](home-operations/kopiur#226)) ([9c109b4](home-operations/kopiur@9c109b4))
- **mise:** Update tool oxfmt (0.58.0 → 0.59.0) ([#&#8203;246](home-operations/kopiur#246)) ([41625e9](home-operations/kopiur@41625e9))
- **mise:** Update tool zizmor (1.26.1 → 1.27.0) ([#&#8203;247](home-operations/kopiur#247)) ([fe10a6a](home-operations/kopiur@fe10a6a))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/1607
hbjydev pushed a commit to hbjydev/phoebe that referenced this pull request Aug 27, 2026
…0.7.3 → 0.10.4) (#273)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/home-operations/charts/kopiur](https://github.com/home-operations/kopiur) | minor | `0.7.3` → `0.10.4` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/141) for more information.

---

### Release Notes

<details>
<summary>home-operations/kopiur (ghcr.io/home-operations/charts/kopiur)</summary>

### [`v0.10.4`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#0104-2026-08-24)

[Compare Source](home-operations/kopiur@0.10.3...0.10.4)

##### Bug Fixes

- **chart:** give flowSchema its doc comment and timings a clean schema entry ([#&#8203;397](home-operations/kopiur#397)) ([7c8dd3f](home-operations/kopiur@7c8dd3f))
- **mover:** read status.resolved via the /status subresource ([#&#8203;408](home-operations/kopiur#408)) ([06fc2f9](home-operations/kopiur@06fc2f9))

##### Miscellaneous Chores

- **github-action:** update action docker/github-builder (v1.16.0 → v1.17.0) ([#&#8203;407](home-operations/kopiur#407)) ([b6d7d04](home-operations/kopiur@b6d7d04))
- **mise:** update mise tools ([#&#8203;400](home-operations/kopiur#400)) ([b1a83f8](home-operations/kopiur@b1a83f8))
- **mise:** update tool kubectl (1.36.3 → 1.36.4) ([#&#8203;405](home-operations/kopiur#405)) ([274e3d6](home-operations/kopiur@274e3d6))
- **mise:** update tool lefthook (2.1.10 → 2.1.11) ([#&#8203;406](home-operations/kopiur#406)) ([2ba700d](home-operations/kopiur@2ba700d))
- **mise:** update tool rust (1.97.1 → 1.98.0) ([#&#8203;403](home-operations/kopiur#403)) ([c655005](home-operations/kopiur@c655005))
- **mise:** update tool yq (4.53.3 → 4.53.4) ([#&#8203;402](home-operations/kopiur#402)) ([d1ed8a7](home-operations/kopiur@d1ed8a7))
- **mise:** update tool yq (4.53.4 → 4.53.6) ([#&#8203;404](home-operations/kopiur#404)) ([dd5878c](home-operations/kopiur@dd5878c))

### [`v0.10.3`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#0103-2026-08-18)

[Compare Source](home-operations/kopiur@0.10.2...0.10.3)

##### Features

- **repository:** seed a fresh repository from its replica — DR for replicated repositories ([#&#8203;380](home-operations/kopiur#380)) ([#&#8203;396](home-operations/kopiur#396)) ([74665dc](home-operations/kopiur@74665dc))

##### Bug Fixes

- **rust:** update crate cel (0.14.2 → 0.14.3) ([#&#8203;387](home-operations/kopiur#387)) ([bf9aa0c](home-operations/kopiur@bf9aa0c))
- **rust:** update crate http-body-util (0.1.4 → 0.1.5) ([#&#8203;381](home-operations/kopiur#381)) ([6354e17](home-operations/kopiur@6354e17))

##### Miscellaneous Chores

- **github-action:** update action jdx/mise-action (v4.2.4 → v4.2.5) ([#&#8203;388](home-operations/kopiur#388)) ([1040c9e](home-operations/kopiur@1040c9e))
- **mise:** update tool aqua:astral-sh/uv (0.12.3 → 0.12.4) ([#&#8203;390](home-operations/kopiur#390)) ([bf3916c](home-operations/kopiur@bf3916c))
- **mise:** update tool aqua:astral-sh/uv (0.12.4 → 0.12.5) ([#&#8203;395](home-operations/kopiur#395)) ([b919878](home-operations/kopiur@b919878))
- **mise:** update tool helm (4.2.3 → 4.2.4) ([#&#8203;389](home-operations/kopiur#389)) ([5b134fa](home-operations/kopiur@5b134fa))
- **mise:** Update tool oxfmt (0.62.0 → 0.63.0) ([#&#8203;386](home-operations/kopiur#386)) ([65db237](home-operations/kopiur@65db237))

### [`v0.10.2`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#0102-2026-08-13)

[Compare Source](home-operations/kopiur@0.10.1...0.10.2)

##### Performance Improvements

- **controller:** store-backed reads, LIST dedup, bounded PVC retries, client-side request metrics ([#&#8203;382](home-operations/kopiur#382)) ([#&#8203;383](home-operations/kopiur#383)) ([2b07022](home-operations/kopiur@2b07022))

### [`v0.10.1`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#0101-2026-08-11)

[Compare Source](home-operations/kopiur@0.10.0...0.10.1)

##### Bug Fixes

- **mise:** something about mise warnings ([#&#8203;373](home-operations/kopiur#373)) ([fde8073](home-operations/kopiur@fde8073))
- **rust:** update crate cel (0.14.1 → 0.14.2) ([#&#8203;379](home-operations/kopiur#379)) ([4a60221](home-operations/kopiur@4a60221))
- **rust:** update crate futures (0.3.33 → 0.3.34) ([#&#8203;378](home-operations/kopiur#378)) ([ff657b8](home-operations/kopiur@ff657b8))
- **rust:** update crate rcgen (0.14.8 → 0.14.9) ([#&#8203;377](home-operations/kopiur#377)) ([e3b3b3f](home-operations/kopiur@e3b3b3f))

##### Miscellaneous Chores

- **mise:** Update tool aqua:astral-sh/uv (0.12.2 → 0.12.3) ([#&#8203;375](home-operations/kopiur#375)) ([952af6d](home-operations/kopiur@952af6d))

### [`v0.10.0`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#0100-2026-08-09)

[Compare Source](home-operations/kopiur@0.9.5...0.10.0)

##### ⚠ BREAKING CHANGES

- **rust:** Update crate base64 (0.22.1 → 0.23.1) ([#&#8203;366](home-operations/kopiur#366))

##### Features

- **rust:** Update crate base64 (0.22.1 → 0.23.1) ([#&#8203;366](home-operations/kopiur#366)) ([2c6e3e7](home-operations/kopiur@2c6e3e7))
- SnapshotReplication (logical snapshot-level replication) + SnapshotPolicy multi-repository fan-out ([#&#8203;370](home-operations/kopiur#370)) ([4e06e42](home-operations/kopiur@4e06e42))

##### Continuous Integration

- **github-action:** Update action Swatinem/rust-cache (v2.9.1 → v2.9.2) ([#&#8203;372](home-operations/kopiur#372)) ([e4ce173](home-operations/kopiur@e4ce173))

##### Miscellaneous Chores

- **mise:** Update mise tools ([#&#8203;367](home-operations/kopiur#367)) ([d6f82f4](home-operations/kopiur@d6f82f4))
- **mise:** Update tool cosign (3.1.2 → 3.1.3) ([#&#8203;371](home-operations/kopiur#371)) ([558b9f4](home-operations/kopiur@558b9f4))

### [`v0.9.5`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#095-2026-08-08)

[Compare Source](home-operations/kopiur@0.9.4...0.9.5)

##### Bug Fixes

- deliver s3 tls.caBundleRef to every kopia invocation ([#&#8203;365](home-operations/kopiur#365)) ([cda0237](home-operations/kopiur@cda0237))
- doctor misses structurally-blocked work ([#&#8203;359](home-operations/kopiur#359)) + phase/gate exhaustiveness ratchet ([#&#8203;363](home-operations/kopiur#363)) ([b844974](home-operations/kopiur@b844974))
- **rust:** update crate thiserror (2.0.19 → 2.0.20) ([#&#8203;360](home-operations/kopiur#360)) ([4aa646d](home-operations/kopiur@4aa646d))

##### Continuous Integration

- **github-action:** Update action docker/github-builder (v1.15.0 → v1.16.0) ([#&#8203;362](home-operations/kopiur#362)) ([db32818](home-operations/kopiur@db32818))

### [`v0.9.4`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#094-2026-08-08)

[Compare Source](home-operations/kopiur@0.9.3...0.9.4)

##### Features

- **docs:** Update README.md ([#&#8203;358](home-operations/kopiur#358)) ([05d2506](home-operations/kopiur@05d2506))

##### Bug Fixes

- implement pvcSelector/groupBy ([#&#8203;346](home-operations/kopiur#346)) and model deduped backups as Unchanged ([#&#8203;351](home-operations/kopiur#351)) ([#&#8203;354](home-operations/kopiur#354)) ([a2b9ae6](home-operations/kopiur@a2b9ae6))
- **rust:** update crate clap (4.6.5 → 4.6.6) ([#&#8203;357](home-operations/kopiur#357)) ([e9ca396](home-operations/kopiur@e9ca396))

##### Miscellaneous Chores

- **mise:** Update tool node (24.18.1 → v24.19.0) ([#&#8203;353](home-operations/kopiur#353)) ([2f28c6d](home-operations/kopiur@2f28c6d))
- **mise:** Update tool oxfmt (0.61.0 → 0.62.0) ([#&#8203;356](home-operations/kopiur#356)) ([e95df6b](home-operations/kopiur@e95df6b))

### [`v0.9.3`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#093-2026-08-05)

[Compare Source](home-operations/kopiur@0.9.2...0.9.3)

##### Features

- repository-level circuit breaker — stop fanning out doomed Jobs when the backend is unreachable ([#&#8203;350](home-operations/kopiur#350)) ([5d787b9](home-operations/kopiur@5d787b9))

##### Bug Fixes

- **rust:** update crate base64 (0.23.0 → 0.23.1) ([#&#8203;349](home-operations/kopiur#349)) ([11e7aa8](home-operations/kopiur@11e7aa8))

##### Continuous Integration

- **github-action:** Update action jdx/mise-action (v4.2.3 → v4.2.4) ([#&#8203;347](home-operations/kopiur#347)) ([1c9cf3b](home-operations/kopiur@1c9cf3b))

##### Miscellaneous Chores

- **renovate:** keep 0.x minors out of automerge ([#&#8203;352](home-operations/kopiur#352)) ([95d672a](home-operations/kopiur@95d672a))

### [`v0.9.2`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#092-2026-08-02)

[Compare Source](home-operations/kopiur@0.9.1...0.9.2)

##### Features

- **repository:** object-lock blob retention ([#&#8203;332](home-operations/kopiur#332)); fix blank volumeSnapshotClassName ([#&#8203;344](home-operations/kopiur#344)) ([dab8fdd](home-operations/kopiur@dab8fdd))

##### Bug Fixes

- **ci:** fail the merge gate on cancelled jobs, and cut e2e artifact time ([#&#8203;330](home-operations/kopiur#330)) ([1847a8a](home-operations/kopiur@1847a8a))
- **rust:** update crate time (0.3.54 → 0.3.55) ([#&#8203;337](home-operations/kopiur#337)) ([ee1b951](home-operations/kopiur@ee1b951))

##### Continuous Integration

- **github-action:** Update action docker/github-builder (v1.14.0 → v1.15.0) ([#&#8203;327](home-operations/kopiur#327)) ([f5514fc](home-operations/kopiur@f5514fc))
- **github-action:** Update action docker/login-action (v4.5.1 → v4.5.2) ([#&#8203;331](home-operations/kopiur#331)) ([d90efdf](home-operations/kopiur@d90efdf))
- **github-action:** Update action docker/login-action (v4.5.2 → v4.6.0) ([#&#8203;339](home-operations/kopiur#339)) ([b783bcc](home-operations/kopiur@b783bcc))
- **github-action:** Update action home-operations/.github/actions/workflow-lint (v1.0.2 → v1.0.3) ([#&#8203;343](home-operations/kopiur#343)) ([4af16d5](home-operations/kopiur@4af16d5))
- update shared actions and use self-repository syntax ([#&#8203;341](home-operations/kopiur#341)) ([559e23f](home-operations/kopiur@559e23f))

##### Miscellaneous Chores

- **deps:** lock file maintenance (pep621) ([#&#8203;334](home-operations/kopiur#334)) ([e19ae0e](home-operations/kopiur@e19ae0e))
- **mise:** Lock file maintenance tool (mise) ([#&#8203;335](home-operations/kopiur#335)) ([666afb5](home-operations/kopiur@666afb5))
- **mise:** prune lockfile to used platforms ([#&#8203;342](home-operations/kopiur#342)) ([741d6a4](home-operations/kopiur@741d6a4))
- **mise:** Update tool aqua:astral-sh/uv (0.12.0 → 0.12.1) ([#&#8203;333](home-operations/kopiur#333)) ([3ed2766](home-operations/kopiur@3ed2766))
- **mise:** Update tool promtool (3.13.1 → 3.13.2) ([#&#8203;329](home-operations/kopiur#329)) ([ac1752e](home-operations/kopiur@ac1752e))
- **mise:** Update tool zizmor (1.28.0 → 1.29.0) ([#&#8203;340](home-operations/kopiur#340)) ([410dc26](home-operations/kopiur@410dc26))
- **release-please:** standardize the release pull request title pattern ([#&#8203;338](home-operations/kopiur#338)) ([21013a3](home-operations/kopiur@21013a3))
- **rust:** lock file maintenance crate (cargo) ([#&#8203;336](home-operations/kopiur#336)) ([8606177](home-operations/kopiur@8606177))

### [`v0.9.1`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#091-2026-07-29)

[Compare Source](home-operations/kopiur@0.9.0...0.9.1)

##### Features

- **rust:** update crate http (1.4.2 → 1.5.0) ([#&#8203;323](home-operations/kopiur#323)) ([cf0b149](home-operations/kopiur@cf0b149))

##### Bug Fixes

- **controller:** survive a slow API server instead of abdicating on the first one ([#&#8203;319](home-operations/kopiur#319)) ([#&#8203;324](home-operations/kopiur#324)) ([df7e90c](home-operations/kopiur@df7e90c))
- **rust:** update crate rustls (0.23.42 → 0.23.43) ([#&#8203;326](home-operations/kopiur#326)) ([2f5123e](home-operations/kopiur@2f5123e))

##### Tests

- **e2e:** retry flaky tests with cargo-nextest ([#&#8203;322](home-operations/kopiur#322)) ([558ac85](home-operations/kopiur@558ac85))

##### Miscellaneous Chores

- **mise:** Update tool aqua:astral-sh/uv (0.11.33 → 0.12.0) ([#&#8203;320](home-operations/kopiur#320)) ([66ec350](home-operations/kopiur@66ec350))
- **mise:** Update tool node (24.18.0 → v24.18.1) ([#&#8203;325](home-operations/kopiur#325)) ([1c833a4](home-operations/kopiur@1c833a4))

### [`v0.9.0`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#090-2026-07-28)

[Compare Source](home-operations/kopiur@0.8.1...0.9.0)

##### ⚠ BREAKING CHANGES

- **rust:** Update crate serial\_test (3.5.0 → 4.0.1) ([#&#8203;307](home-operations/kopiur#307))
- **secctx:** identity-aware mover merge, recorded snapshot identity, restore inherit-from-snapshot ([#&#8203;304](home-operations/kopiur#304))

##### Features

- **rust:** Update crate serial\_test (3.5.0 → 4.0.1) ([#&#8203;307](home-operations/kopiur#307)) ([4392e4a](home-operations/kopiur@4392e4a))
- **secctx:** identity-aware mover merge, recorded snapshot identity, restore inherit-from-snapshot ([#&#8203;304](home-operations/kopiur#304)) ([0632a29](home-operations/kopiur@0632a29))

##### Bug Fixes

- **rust:** update crate cel (0.14.0 → 0.14.1) ([#&#8203;317](home-operations/kopiur#317)) ([00cf539](home-operations/kopiur@00cf539))
- **rust:** update crate schemars (1.2.1 → 1.2.2) ([#&#8203;313](home-operations/kopiur#313)) ([b6e6268](home-operations/kopiur@b6e6268))

##### Build System

- **mise:** add actionlint and refresh the lockfile ([#&#8203;309](home-operations/kopiur#309)) ([e74c9b3](home-operations/kopiur@e74c9b3))

##### Continuous Integration

- adopt the shared workflow-lint and docs-build actions ([#&#8203;310](home-operations/kopiur#310)) ([7d4b329](home-operations/kopiur@7d4b329))
- gate pull requests on Build Success and share the docs build ([#&#8203;306](home-operations/kopiur#306)) ([1b693aa](home-operations/kopiur@1b693aa))
- **github-action:** Update action docker/login-action (v4.5.0 → v4.5.1) ([#&#8203;312](home-operations/kopiur#312)) ([29d00b1](home-operations/kopiur@29d00b1))
- **github-action:** Update action jdx/mise-action (v4.2.1 → v4.2.2) ([#&#8203;311](home-operations/kopiur#311)) ([65bbca4](home-operations/kopiur@65bbca4))
- **github-action:** Update action jdx/mise-action (v4.2.2 → v4.2.3) ([#&#8203;315](home-operations/kopiur#315)) ([5f517d4](home-operations/kopiur@5f517d4))
- skip release-please PRs in checks and drop nightly e2e ([#&#8203;305](home-operations/kopiur#305)) ([ee6d4f5](home-operations/kopiur@ee6d4f5))

##### Miscellaneous Chores

- **krew:** kopiur 0.8.1 manifest ([84df757](home-operations/kopiur@84df757))
- **mise:** Update tool aqua:astral-sh/uv (0.11.32 → 0.11.33) ([#&#8203;318](home-operations/kopiur#318)) ([f63bc3a](home-operations/kopiur@f63bc3a))
- **mise:** Update tool oxfmt (0.60.0 → 0.61.0) ([#&#8203;314](home-operations/kopiur#314)) ([bdbf6c6](home-operations/kopiur@bdbf6c6))
- **renovate:** drop the stale automerge overrides ([#&#8203;308](home-operations/kopiur#308)) ([c13a3d5](home-operations/kopiur@c13a3d5))
- standardize release-please changelog sections ([#&#8203;316](home-operations/kopiur#316)) ([273d0f8](home-operations/kopiur@273d0f8))

### [`v0.8.1`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#081-2026-07-24)

[Compare Source](home-operations/kopiur@0.8.0...0.8.1)

##### Features

- **deps:** update rust crate base64 (0.22.1 → 0.23.0) ([#&#8203;293](home-operations/kopiur#293)) ([5ab14d5](home-operations/kopiur@5ab14d5))
- **deps:** update rust crate kube (4.0.0 → 4.2.0) ([#&#8203;288](home-operations/kopiur#288)) ([b067458](home-operations/kopiur@b067458))
- httpRequest hook headers ([#&#8203;290](home-operations/kopiur#290)) + recovery-aware alerts ([#&#8203;280](home-operations/kopiur#280)) ([#&#8203;296](home-operations/kopiur#296)) ([f388a14](home-operations/kopiur@f388a14))
- **renovate:** automerge if it passes CI ([66f243f](home-operations/kopiur@66f243f))

##### Bug Fixes

- **controller:** survive an API-server outage without exhausting file descriptors ([#&#8203;287](home-operations/kopiur#287)) ([ce184b6](home-operations/kopiur@ce184b6))
- **deps:** update rust crate clap (4.6.2 → 4.6.3) ([#&#8203;277](home-operations/kopiur#277)) ([e3d4113](home-operations/kopiur@e3d4113))
- **deps:** update rust crate libc (0.2.186 → 0.2.189) ([#&#8203;283](home-operations/kopiur#283)) ([2b2e636](home-operations/kopiur@2b2e636))
- **deps:** update rust crate serde\_json (1.0.150 → 1.0.151) ([#&#8203;275](home-operations/kopiur#275)) ([1410f42](home-operations/kopiur@1410f42))
- **deps:** update rust crate time (0.3.53 → 0.3.54) ([#&#8203;276](home-operations/kopiur#276)) ([ff250ff](home-operations/kopiur@ff250ff))
- **deps:** update rust crate tokio (1.53.0 → 1.53.1) ([#&#8203;281](home-operations/kopiur#281)) ([82082e9](home-operations/kopiur@82082e9))
- **helm:** stamp Chart.yaml version on release + document image sub-fields ([#&#8203;289](home-operations/kopiur#289)) ([041549a](home-operations/kopiur@041549a))
- **probe:** stamp the health probe at launch so it stops recycling its Job ([#&#8203;273](home-operations/kopiur#273)) ([#&#8203;278](home-operations/kopiur#278)) ([7fa3657](home-operations/kopiur@7fa3657))
- **release:** use the generic updater for Chart.yaml + stamp README badges ([#&#8203;292](home-operations/kopiur#292)) ([f4a3141](home-operations/kopiur@f4a3141))
- retention-aware adoption stops the adopt/prune/rediscover livelock ([#&#8203;299](home-operations/kopiur#299)) ([4093f12](home-operations/kopiur@4093f12))

##### Styles

- indent markdown at 2 to match embedded yaml ([#&#8203;279](home-operations/kopiur#279)) ([06885e0](home-operations/kopiur@06885e0))

##### Miscellaneous Chores

- **github-release:** Update release helm-unittest/helm-unittest (v1.1.1 → v1.1.2) ([#&#8203;301](home-operations/kopiur#301)) ([e62272d](home-operations/kopiur@e62272d))
- **krew:** kopiur 0.8.0 manifest ([2be416f](home-operations/kopiur@2be416f))
- **mise:** Update tool aqua:astral-sh/uv (0.11.29 → 0.11.30) ([#&#8203;282](home-operations/kopiur#282)) ([e12f96c](home-operations/kopiur@e12f96c))
- **mise:** Update tool aqua:astral-sh/uv (0.11.30 → 0.11.31) ([#&#8203;286](home-operations/kopiur#286)) ([a3f31e6](home-operations/kopiur@a3f31e6))
- **mise:** Update tool aqua:astral-sh/uv (0.11.31 → 0.11.32) ([#&#8203;298](home-operations/kopiur#298)) ([9d8c171](home-operations/kopiur@9d8c171))
- **mise:** Update tool kubectl (1.36.2 → 1.36.3) ([#&#8203;291](home-operations/kopiur#291)) ([ef290f8](home-operations/kopiur@ef290f8))
- **mise:** Update tool oxfmt (0.59.0 → 0.60.0) ([#&#8203;284](home-operations/kopiur#284)) ([ad8a18a](home-operations/kopiur@ad8a18a))
- **mise:** Update tool rust (1.96.1 → 1.97.1) ([#&#8203;222](home-operations/kopiur#222)) ([fbeb2fa](home-operations/kopiur@fbeb2fa))
- **mise:** Update tool zizmor (1.27.0 → 1.28.0) ([#&#8203;285](home-operations/kopiur#285)) ([9ef35ce](home-operations/kopiur@9ef35ce))

### [`v0.8.0`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#080-2026-07-19)

[Compare Source](home-operations/kopiur@0.7.5...0.8.0)

##### ⚠ BREAKING CHANGES

- SnapshotPolicy deletion cascade + auto-adoption of discovered snapshots ([#&#8203;272](home-operations/kopiur#272))

##### Features

- **deps:** update rust crate tokio (1.52.4 → 1.53.0) ([#&#8203;264](home-operations/kopiur#264)) ([6cab0c6](home-operations/kopiur@6cab0c6))
- mass-deletion protection (cascade guard, per-repo breaker, batched deletes) ([#&#8203;265](home-operations/kopiur#265)) ([038ea6d](home-operations/kopiur@038ea6d))
- SnapshotPolicy deletion cascade + auto-adoption of discovered snapshots ([#&#8203;272](home-operations/kopiur#272)) ([9da8c26](home-operations/kopiur@9da8c26))

##### Bug Fixes

- **deps:** update rust crate anyhow (1.0.103 → 1.0.104) ([#&#8203;269](home-operations/kopiur#269)) ([4d81496](home-operations/kopiur@4d81496))
- **deps:** update rust crate clap (4.6.1 → 4.6.2) ([#&#8203;257](home-operations/kopiur#257)) ([c238df1](home-operations/kopiur@c238df1))
- **deps:** update rust crate futures (0.3.32 → 0.3.33) ([#&#8203;268](home-operations/kopiur#268)) ([926b52d](home-operations/kopiur@926b52d))
- **deps:** update rust crate serde (1.0.228 → 1.0.229) ([#&#8203;270](home-operations/kopiur#270)) ([5fbd713](home-operations/kopiur@5fbd713))
- **deps:** update rust crate thiserror (2.0.18 → 2.0.19) ([#&#8203;271](home-operations/kopiur#271)) ([d83730f](home-operations/kopiur@d83730f))
- **deps:** update rust crate tokio (1.52.3 → 1.52.4) ([#&#8203;261](home-operations/kopiur#261)) ([accf6ae](home-operations/kopiur@accf6ae))
- writable backup source ([#&#8203;254](home-operations/kopiur#254)), stuck deletion finalizer ([#&#8203;255](home-operations/kopiur#255)), kopia epoch parameters ([#&#8203;258](home-operations/kopiur#258)) ([#&#8203;263](home-operations/kopiur#263)) ([94f9a15](home-operations/kopiur@94f9a15))

##### Miscellaneous Chores

- **krew:** kopiur 0.7.5 manifest ([16d7390](home-operations/kopiur@16d7390))
- **mise:** Update tool aqua:astral-sh/uv (0.11.28 → 0.11.29) ([#&#8203;256](home-operations/kopiur#256)) ([f822335](home-operations/kopiur@f822335))
- **mise:** Update tool cosign (3.1.1 → 3.1.2) ([#&#8203;267](home-operations/kopiur#267)) ([649ba2e](home-operations/kopiur@649ba2e))

### [`v0.7.5`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#075-2026-07-16)

[Compare Source](home-operations/kopiur@0.7.4...0.7.5)

##### Bug Fixes

- **readme:** update readme admonition ([987957c](home-operations/kopiur@987957c))
- **secctx:** SecurityContextCompatible is verified, not asserted; inherit merges with explicit ([#&#8203;259](home-operations/kopiur#259)) ([cbfd97d](home-operations/kopiur@cbfd97d))

### [`v0.7.4`](https://github.com/home-operations/kopiur/blob/HEAD/CHANGELOG.md#074-2026-07-15)

[Compare Source](home-operations/kopiur@0.7.3...0.7.4)

##### Features

- bound Snapshot CR reconcile cost at scale ([#&#8203;249](home-operations/kopiur#249)) ([#&#8203;253](home-operations/kopiur#253)) ([3697aa9](home-operations/kopiur@3697aa9))
- **docs:** clean up admonitions in docs ([71c5d85](home-operations/kopiur@71c5d85))
- multi-cluster shared repository support — cluster identity, foreign-aware discovery, collision-free maintenance leases ([#&#8203;251](home-operations/kopiur#251)) ([a4593d8](home-operations/kopiur@a4593d8))

##### Bug Fixes

- batch of six open-issue fixes ([#&#8203;248](home-operations/kopiur#248) [#&#8203;238](home-operations/kopiur#238) [#&#8203;245](home-operations/kopiur#245) [#&#8203;196](home-operations/kopiur#196) [#&#8203;237](home-operations/kopiur#237) [#&#8203;250](home-operations/kopiur#250)) ([#&#8203;252](home-operations/kopiur#252)) ([045a5a5](home-operations/kopiur@045a5a5))
- **deps:** update rust crate http-body-util (0.1.3 → 0.1.4) ([#&#8203;244](home-operations/kopiur#244)) ([4878006](home-operations/kopiur@4878006))
- **deps:** update rust crate rustls (0.23.41 → 0.23.42) ([#&#8203;243](home-operations/kopiur#243)) ([13b1dc4](home-operations/kopiur@13b1dc4))

##### Miscellaneous Chores

- **krew:** kopiur 0.7.3 manifest ([d521675](home-operations/kopiur@d521675))
- **mise:** Update tool aqua:EmbarkStudios/cargo-deny (0.19.9 → 0.20.2) ([#&#8203;226](home-operations/kopiur#226)) ([9c109b4](home-operations/kopiur@9c109b4))
- **mise:** Update tool oxfmt (0.58.0 → 0.59.0) ([#&#8203;246](home-operations/kopiur#246)) ([41625e9](home-operations/kopiur@41625e9))
- **mise:** Update tool zizmor (1.26.1 → 1.27.0) ([#&#8203;247](home-operations/kopiur#247)) ([fe10a6a](home-operations/kopiur@fe10a6a))

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/London)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNjAuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjQ2LjUiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://forgejo.hayden.moe/hayden/phoebe/pulls/273
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment