server files before: snapshots=2 keys=1 index=1 data=2 locks=0 
$ c.sh forced spike-repo restore 63a075dc --target /d/restored --include /d/tree/sub/note.txt
restoring <Snapshot 63a075dc of [/d/tree] at 2026-10-03 09:07:50.656818298 +0000 UTC by root@labbox> to /d/restored
[rc=0]

restored bytes: 
$ c.sh forced spike-repo forget 63a075dc --prune
Remove(<snapshot/63a075dc45>) returned error, retrying after 720.254544ms: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 873.42004ms: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 1.054928461s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 1.560325776s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 3.004145903s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 2.147653057s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 3.739082318s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 5.099891944s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 10.263247495s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 19.514091959s: blob not removed, server response: 403 Forbidden (403)
unable to remove <snapshot/63a075dc45> from the repository
[0:48] 0.00%  0 / 1 files deleted

blob not removed, server response: 403 Forbidden (403)
github.com/restic/restic/internal/backend/rest.(*Backend).Remove
	github.com/restic/restic/internal/backend/rest/rest.go:399
github.com/restic/restic/internal/backend.(*RetryBackend).Remove.func1
	github.com/restic/restic/internal/backend/backend_retry.go:108
github.com/cenkalti/backoff.RetryNotifyWithTimer
	github.com/cenkalti/backoff/retry.go:55
github.com/cenkalti/backoff.RetryNotify
	github.com/cenkalti/backoff/retry.go:34
github.com/restic/restic/internal/backend.(*RetryBackend).retry
	github.com/restic/restic/internal/backend/backend_retry.go:46
github.com/restic/restic/internal/backend.(*RetryBackend).Remove
	github.com/restic/restic/internal/backend/backend_retry.go:107
github.com/restic/restic/internal/cache.(*Backend).Remove
	github.com/restic/restic/internal/cache/backend.go:38
main.deleteFiles.func2
	github.com/restic/restic/cmd/restic/delete.go:47
golang.org/x/sync/errgroup.(*Group).Go.func1
	golang.org/x/sync/errgroup/errgroup.go:75
runtime.goexit
	runtime/asm_amd64.s:1594
[rc=1]

$ c.sh forced spike-repo prune
loading indexes...
loading all snapshots...
finding data that is still in use for 2 snapshots
[0:00] 100.00%  2 / 2 snapshots

searching used packs...
collecting packs for deletion and repacking
[0:00] 100.00%  2 / 2 packs processed


to repack:             0 blobs / 0 B
this removes:          0 blobs / 0 B
to delete:             0 blobs / 0 B
total prune:           0 blobs / 0 B
remaining:             8 blobs / 587.247 KiB
unused size after prune: 0 B (0.00% of remaining size)

done
[rc=0]

$ c.sh forced spike-repo forget --keep-last 1
Applying Policy: keep 1 latest snapshots
keep 1 snapshots:
ID        Time                 Host        Tags        Reasons        Paths
-----------------------------------------------------------------------------
066a039d  2026-10-03 09:07:52  labbox      app1        last snapshot  /d/tree
-----------------------------------------------------------------------------
1 snapshots

remove 1 snapshots:
ID        Time                 Host        Tags        Paths
--------------------------------------------------------------
63a075dc  2026-10-03 09:07:50  labbox      app1        /d/tree
--------------------------------------------------------------
1 snapshots

Remove(<snapshot/63a075dc45>) returned error, retrying after 720.254544ms: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 873.42004ms: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 1.054928461s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 1.560325776s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 3.004145903s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 2.147653057s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 3.739082318s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 5.099891944s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 10.263247495s: blob not removed, server response: 403 Forbidden (403)
Remove(<snapshot/63a075dc45>) returned error, retrying after 19.514091959s: blob not removed, server response: 403 Forbidden (403)
unable to remove <snapshot/63a075dc45> from the repository
[0:48] 0.00%  0 / 1 files deleted

blob not removed, server response: 403 Forbidden (403)
github.com/restic/restic/internal/backend/rest.(*Backend).Remove
	github.com/restic/restic/internal/backend/rest/rest.go:399
github.com/restic/restic/internal/backend.(*RetryBackend).Remove.func1
	github.com/restic/restic/internal/backend/backend_retry.go:108
github.com/cenkalti/backoff.RetryNotifyWithTimer
	github.com/cenkalti/backoff/retry.go:55
github.com/cenkalti/backoff.RetryNotify
	github.com/cenkalti/backoff/retry.go:34
github.com/restic/restic/internal/backend.(*RetryBackend).retry
	github.com/restic/restic/internal/backend/backend_retry.go:46
github.com/restic/restic/internal/backend.(*RetryBackend).Remove
	github.com/restic/restic/internal/backend/backend_retry.go:107
github.com/restic/restic/internal/cache.(*Backend).Remove
	github.com/restic/restic/internal/cache/backend.go:38
main.deleteFiles.func2
	github.com/restic/restic/cmd/restic/delete.go:47
golang.org/x/sync/errgroup.(*Group).Go.func1
	golang.org/x/sync/errgroup/errgroup.go:75
runtime.goexit
	runtime/asm_amd64.s:1594
[rc=1]

$ c.sh forced spike-repo snapshots
ID        Time                 Host        Tags        Paths
--------------------------------------------------------------
63a075dc  2026-10-03 09:07:50  labbox      app1        /d/tree
066a039d  2026-10-03 09:07:52  labbox      app1        /d/tree
--------------------------------------------------------------
2 snapshots
[rc=0]

$ c.sh forced spike-repo check
using temporary cache in /tmp/restic-check-cache-3313406781
create exclusive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
[0:00] 100.00%  2 / 2 snapshots

no errors were found
[rc=0]

server files after: snapshots=2 keys=1 index=1 data=2 locks=0 
cmp restored vs source: IDENTICAL (hello-r436)
