2026-04-23 - 2026-10-23

Overview

158 Active Pull Requests
180 Active Issues
Excluding merges, 2 authors have pushed 55 commits to main and 245 commits to all branches. On main, 174 files have changed and there have been 18200 additions and 7977 deletions.

3 Releases published by 1 user

Published v1.0.0-rc3 2026-10-15 08:42:47 +02:00

Published v1.0.0-rc2 2026-10-14 13:17:15 +02:00

Published v1.0.0-rc1 2026-10-14 09:27:04 +02:00

157 Pull requests merged by 1 user

Merged #396 Do not prune when a backup misses an earlier mount point (closes #395) 2026-10-15 08:32:29 +02:00

Merged #393 Delete metadata directories a backup left without a manifest (closes #390) 2026-10-15 03:49:19 +02:00

Merged #394 Do not prune after a backup that found a configured path empty (closes #388) 2026-10-15 02:49:22 +02:00

Merged #392 Go on with a backup when the destination marker cannot be checked (closes #389) 2026-10-15 02:02:35 +02:00

Merged #391 Keep unreferenced blobs newer than prune_grace_period 2026-10-14 13:06:36 +02:00

Merged #386 Record the defect-hunt fixes in TODO.md Completed Steps 2026-10-14 09:18:10 +02:00

Merged #385 Do not prune after a backup that skipped unreadable files 2026-10-14 07:44:51 +02:00

Merged #381 Exit non-zero when snapshot create --skip-errors skips anything 2026-10-14 07:13:50 +02:00

Merged #384 Keep the local index when remote nuke cannot list or find the destination 2026-10-14 06:47:40 +02:00

Merged #383 Stop counting directories and unchanged symlinks as files to back up 2026-10-14 06:46:48 +02:00

Merged #349 Refuse a backup destination an unplugged volume left empty 2026-10-14 05:46:43 +02:00

Merged #378 Warn about restored ownership only when an entry's owner or group differs 2026-10-14 05:39:28 +02:00

Merged #375 Make snapshot list report a changed destination instead of advising prune 2026-10-14 04:29:38 +02:00

Merged #342 Count a file as deleted only if the previous snapshot of its name had it 2026-10-14 04:24:31 +02:00

Merged #377 Name each prefix once in restore, verify and purge errors 2026-10-14 04:04:15 +02:00

Merged #352 Refuse credentials in a storage URL's endpoint or rclone remote name 2026-10-14 03:26:03 +02:00

Merged #380 Run $EDITOR through the shell in config edit 2026-10-14 03:06:58 +02:00

Merged #370 Fail snapshot remove when a destination-only snapshot's metadata cannot be deleted 2026-10-14 02:20:02 +02:00

Merged #379 Label the index cleanup totals as totals 2026-10-14 02:03:52 +02:00

Merged #372 Free a cached blob once no file still to restore needs it 2026-10-14 01:47:50 +02:00

Merged #376 Keep the whole startup error when it contains "): " 2026-10-14 01:34:39 +02:00

Merged #369 Silence prune and snapshot removal status under --cron and --quiet 2026-10-14 01:10:43 +02:00

Merged #374 Read the rclone config file named by RCLONE_CONFIG 2026-10-14 00:39:33 +02:00

Merged #367 Make **/ in an exclude pattern match zero directories 2026-10-14 00:13:28 +02:00

Merged #373 Make the size defaults and the chunk_size minimum 1000-based 2026-10-13 23:56:22 +02:00

Merged #371 Keep remote metadata when purge cannot remove a snapshot locally 2026-10-13 23:36:23 +02:00

Merged #365 Fail restore for a requested path that matches nothing 2026-10-13 23:14:24 +02:00

Merged #368 Make remote nuke delete every object under metadata/ and blobs/ 2026-10-13 22:50:11 +02:00

Merged #357 Make config set create a list for an index under a missing key 2026-10-13 22:43:42 +02:00

Merged #331 List a file:// destination through a symlinked directory 2026-10-13 21:36:24 +02:00

Merged #362 Report blob counts from snapshot verify --deep --json 2026-10-13 21:26:56 +02:00

Merged #354 Limit and retry the module download in the Docker build 2026-10-13 21:11:12 +02:00

Merged #366 Record each snapshot's uncompressed size when its backup runs 2026-10-13 20:43:19 +02:00

Merged #353 Stop restore --verify re-reporting files that failed to restore 2026-10-13 20:12:49 +02:00

Merged #341 Record the stored size of a blob a backup finds already stored 2026-10-13 20:01:43 +02:00

Merged #364 Return errors instead of exiting on rollback, rows close and blob temp file cleanup 2026-10-13 19:46:49 +02:00

Merged #363 Stop a stalled snapshot database read when restore or deep verify is interrupted 2026-10-13 19:36:44 +02:00

Merged #336 Make prune and remote nuke fail when a delete fails 2026-10-13 19:29:53 +02:00

Merged #333 Make an S3 listing the server cuts short an error 2026-10-13 19:25:50 +02:00

Merged #348 Report blobs shallow verify could not check apart from missing ones 2026-10-13 18:50:49 +02:00

Merged #361 Restore the other files when a chunk is in no blob under --skip-errors 2026-10-13 16:53:06 +02:00

Merged #359 Record each snapshot's new chunk size when its backup runs 2026-10-13 16:44:15 +02:00

Merged #343 Exit as interrupted when Ctrl-C lands during a local index write 2026-10-13 16:29:00 +02:00

Merged #358 Print snapshot list and purge sizes like every other command 2026-10-13 16:22:04 +02:00

Merged #355 Stop a stalled blob read when restore or deep verify is interrupted 2026-10-13 15:48:02 +02:00

Merged #350 Make a mistyped subcommand under a group command an error 2026-10-13 14:14:41 +02:00

Merged #335 Make a leading **/ in an exclude pattern match at the top level 2026-10-13 13:50:12 +02:00

Merged #330 Refuse a relative file:// storage_url and decode its escapes 2026-10-13 11:28:00 +02:00

Merged #347 Remove the blob temp file when a backup stops part-way 2026-10-13 11:14:57 +02:00

Merged #346 Check --keep-newer-than before the backup starts 2026-10-13 09:44:44 +02:00

Merged #344 Stop remote info counting a non-blob file under blobs/ 2026-10-13 08:33:28 +02:00

Merged #339 Make snapshot remove fail for an unknown snapshot ID 2026-10-13 05:55:23 +02:00

Merged #329 Bind the local index to the s3.* destination too 2026-10-13 03:48:37 +02:00

Merged #328 Reject a retention duration longer than about 292 years 2026-10-13 01:51:25 +02:00

Merged #287 Stop a cancelled backup at once under --skip-errors 2026-10-08 15:12:07 +02:00

Merged #283 Make remote nuke delete leftover .partial uploads 2026-10-08 14:17:21 +02:00

Merged #285 Never skip a local index error for a directory or symlink 2026-10-08 12:59:27 +02:00

Merged #282 Count a file a backup could not store as failed 2026-10-08 10:12:11 +02:00

Merged #279 Report unknown blob figures for a snapshot whose manifest cannot be read 2026-10-08 08:46:12 +02:00

Merged #278 Keep the progress line of a multi-path snapshot within 100% 2026-10-08 07:29:12 +02:00

Merged #276 Document that --json skips the confirmation prompt of snapshot remove and prune 2026-10-08 04:59:31 +02:00

Merged #277 Give a second snapshot create in the same second its own ID 2026-10-08 03:29:08 +02:00

Merged #275 Stop a backup on a symlink whose target cannot be read 2026-10-08 00:12:14 +02:00

Merged #274 Write rclone uploads under a temporary name and move them into place 2026-10-07 22:59:27 +02:00

Merged #273 Exit 130 and say so when a command is interrupted 2026-10-07 21:59:28 +02:00

Merged #264 Correct doc and help sentences that are false about the code 2026-10-07 17:59:27 +02:00

Merged #265 Speed up the vaultik and database package tests 2026-10-07 17:12:07 +02:00

Merged #263 Fix two misleading messages: the readable-config warning and the purge listing error 2026-10-07 15:29:08 +02:00

Merged #262 Pass s3.part_size to the multipart uploader 2026-10-07 14:29:11 +02:00

Merged #261 Read the snapshot name using the stored hostname 2026-10-07 12:12:09 +02:00

Merged #259 Leave remote info orphan figures unknown when a manifest is unreadable 2026-10-07 10:59:27 +02:00

Merged #260 Quote a string setting that YAML would read as a number 2026-10-07 09:29:21 +02:00

Merged #257 Store and compare file mtimes to the nanosecond 2026-10-07 07:12:13 +02:00

Merged #258 Make the process-wide lock atomic with flock 2026-10-07 06:12:11 +02:00

Merged #256 Write only the document to stdout from snapshot remove --json 2026-10-07 04:46:14 +02:00

Merged #254 Count each file, byte and upload once in backup statistics 2026-10-07 02:59:28 +02:00

Merged #252 Keep command output to the README's stdout and stderr rules 2026-10-07 01:12:15 +02:00

Merged #255 Start the progress reporter once per snapshot, not once per path 2026-10-07 00:12:11 +02:00

Merged #250 List the files under a path by path, not by string prefix 2026-10-06 22:12:17 +02:00

Merged #249 Return an error, not a panic, on a malformed snapshot database 2026-10-06 21:16:29 +02:00

Merged #248 Join the S3 prefix to every key with one slash 2026-10-06 19:46:10 +02:00

Merged #245 Apply restored owners, modes and times in an order that keeps them 2026-10-06 18:29:10 +02:00

Merged #247 Mark github.com/spf13/pflag as a direct dependency in go.mod 2026-10-06 16:59:27 +02:00

Merged #244 Load a config that has no age recipient 2026-10-06 15:46:14 +02:00

Merged #243 Skip files of an unreadable blob under restore --skip-errors 2026-10-06 14:46:06 +02:00

Merged #236 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 12:46:14 +02:00

Merged #242 Run the local index in WAL mode with a busy timeout 2026-10-06 11:29:19 +02:00

Merged #241 Record the real uid and gid of backed-up files 2026-10-06 09:46:18 +02:00

Merged #238 List a missing file:// destination directory as an error 2026-10-06 08:46:18 +02:00

Merged #237 Reject a retention duration with characters outside its number-and-unit parts 2026-10-06 06:12:08 +02:00

Merged #234 Re-chunk a known file whose chunks no uploaded blob holds 2026-10-06 04:46:18 +02:00

Merged #212 Stamp the tag or short commit in a plain docker build (closes #211) 2026-10-02 10:04:15 +02:00

Merged #209 List only after-1.0 work in the README roadmap 2026-10-01 21:41:42 +02:00

Merged #210 Run the disk-full restore test again 2026-10-01 20:24:30 +02:00

Merged #205 Document that migrations are supported and none are added before 1.0 (closes #68) 2026-09-28 20:21:39 +02:00

Merged #114 next: integrate accumulated work into main 2026-09-23 13:03:03 +02:00

Merged #202 Vendor the canonical .golangci.yml (gomodguard_v2) 2026-09-23 02:14:41 +02:00

Merged #201 Route direct-stdout command output through internal/ui (closes #149) 2026-09-22 20:28:51 +02:00

Merged #200 Mark a snapshot complete only after its metadata export succeeds 2026-09-22 20:00:41 +02:00

Merged #199 Correct the security claims in docs and comments, and record the accepted risks 2026-09-22 19:28:32 +02:00

Merged #198 Reject a metadata database truncated to the age header and nonce 2026-09-22 18:11:58 +02:00

Merged #197 Bound download expansion and escape control chars on the terminal (closes #164) 2026-09-22 17:00:36 +02:00

Merged #195 Validate blob hashes, offsets and lengths read from the destination 2026-09-22 16:11:29 +02:00

Merged #196 Parse the age identity key once and accept every identity in it 2026-09-22 15:45:28 +02:00

Merged #194 Reject a decrypted snapshot database that is not the requested one 2026-09-22 15:01:02 +02:00

Merged #193 Check blob sizes and the database in shallow verify 2026-09-22 14:28:45 +02:00

Merged #192 Add negative and boundary tests for blobgen and types (closes #170) 2026-09-22 14:28:35 +02:00

Merged #189 Wait for the interrupted operation to clean up before exit 2026-09-22 14:00:50 +02:00

Merged #191 Remove the unused crypto path and write the blob-ID hash step once 2026-09-22 13:46:02 +02:00

Merged #190 Scrub example config of real credentials and internal hosts 2026-09-22 13:45:52 +02:00

Merged #188 Give the local index and its export copy an explicit 0600 mode 2026-09-22 13:12:07 +02:00

Merged #187 Parse age_recipients at config load and never echo the entry 2026-09-22 13:01:01 +02:00

Merged #186 Open the downloaded snapshot database read-only, on a private temp dir 2026-09-22 12:45:54 +02:00

Merged #185 Abort the run when packing fails, even under --skip-errors 2026-09-22 12:28:44 +02:00

Merged #184 Stop config set echoing secrets; reject credential-bearing storage URLs 2026-09-22 12:28:32 +02:00

Merged #183 Reconcile purge against remote by hashed key, not human ID 2026-09-22 12:11:49 +02:00

Merged #182 Restore files at 0600 and make the blob hash check unskippable (closes #163) 2026-09-22 11:45:53 +02:00

Merged #181 Reject a blob_size_limit below the largest possible chunk (closes #167) 2026-09-22 11:45:41 +02:00

Merged #180 Fail closed on unreadable manifests instead of losing blobs 2026-09-22 11:45:30 +02:00

Merged #178 Default a scheme-less s3.* endpoint to TLS 2026-09-22 11:11:34 +02:00

Merged #179 Scope the PID lock to mutating commands 2026-09-22 11:01:29 +02:00

Merged #176 Keep restore writes inside the target directory 2026-09-22 11:01:02 +02:00

Merged #175 Trust only uploaded blobs for deduplication (closes #148) 2026-09-22 10:29:22 +02:00

Merged #173 Add fault-injection tests for interruption and corruption (closes #72) 2026-09-22 09:46:47 +02:00

Merged #145 Quiet only the stdout UI under --json, not the log level (closes #112) 2026-09-22 09:05:53 +02:00

Merged #174 Reconcile docs with code across the accuracy-sweep items (closes #74) 2026-09-22 09:05:37 +02:00

Merged #147 Accept a remote key for restore and verify, and document it (closes #124) 2026-09-22 01:01:27 +02:00

Merged #144 Add tests for internal/storage URL parsing and the file backend (closes #66) 2026-09-22 00:58:27 +02:00

Merged #141 Stamp Docker image version from the host; flush profiles on error exit (closes #75) 2026-09-21 22:01:06 +02:00

Merged #146 Reconcile the schema/migration docs with the code (closes #68) 2026-09-21 21:58:37 +02:00

Merged #139 Report a prune count that could not be read as unknown, not 0 (closes #96) 2026-09-21 21:41:58 +02:00

Merged #143 Write file:// blobs atomically via temp file and rename (closes #130) 2026-09-21 21:24:42 +02:00

Merged #142 Map s3 not-found to storage.ErrNotFound in Get and Stat (closes #129) 2026-09-21 21:07:36 +02:00

Merged #140 Use one duration parser and fix the --older-than months example (closes #123) 2026-09-21 20:58:31 +02:00

Merged #135 Drop the lint-guard shell scanner, keep the Dockerfile.lint checks (closes #121) 2026-09-21 20:41:34 +02:00

Merged #138 Hash the plaintext, not the encrypted bytes, in verify --deep (closes #131) 2026-09-21 20:24:37 +02:00

Merged #132 Hash-verify the Go toolchain in the release workflow (closes #105) 2026-09-21 19:48:53 +02:00

Merged #136 VACUUM snapshot metadata through the sqlite driver, not a CLI (closes #120) 2026-09-21 19:41:29 +02:00

Merged #134 Delete dead code and stale fixtures, fix config set reindent 2026-09-21 19:25:01 +02:00

Merged #128 Correct remote layout and privacy docs for hashed snapshot keys (closes #67) 2026-09-21 19:24:45 +02:00

Merged #127 Trigger CI on next, not only main 2026-09-21 14:56:00 +02:00

Merged #126 Correct --cron flag help to name warnings as unsuppressed (closes #87) 2026-09-21 14:55:46 +02:00

Merged #111 Gate prune's local-cleanup prose on --json, and give make build a rule 2026-08-09 19:53:47 +02:00

Merged #109 Suppress the startup banner under --json (closes #106) 2026-08-09 19:18:36 +02:00

Merged #107 Send diagnostics to stderr and stop dropping log attributes (closes #82, closes #97) 2026-08-09 18:43:56 +02:00

Merged #104 Make the tagged-release path work on Gitea (closes #65) 2026-08-09 18:03:18 +02:00

Merged #102 Isolate the lint cache per worktree and context-gate the native lint path 2026-08-09 17:15:07 +02:00

Merged #98 Make the test gate unfakeable and stop test-integration lying (closes #93) 2026-08-09 16:29:27 +02:00

Merged #95 Record the stale-branch triage and advance TODO.md (closes #71) 2026-08-09 10:23:30 +02:00

Merged #92 Make a missing CHECK_EPOCH fail the build instead of faking it (closes #91) 2026-08-09 10:09:27 +02:00

Merged #89 Make script/cibuild unable to report an unearned green (closes #85) 2026-08-09 09:37:55 +02:00

Merged #86 Correct the Vaultik.UI doc comment about --cron (closes #84) 2026-08-09 07:43:46 +02:00

Merged #83 List remote snapshots without requiring the private key (closes #64) 2026-08-09 07:34:15 +02:00

Merged #79 Run the linter at the pinned version locally too (closes #78) 2026-08-09 04:52:22 +02:00

Merged #77 Finish the lint remediation: script/cibuild exits 0 (closes #61) 2026-08-09 04:25:11 +02:00

Merged #62 Update golangci-lint to v2.12.2 with canonical config 2026-08-07 23:22:49 +02:00

Merged #60 Add .editorconfig (refs #59) 2026-08-07 17:46:19 +02:00

1 Pull request proposed by 1 user

Proposed #203 next: integrate accumulated work into main 2026-09-23 13:17:16 +02:00

179 Issues closed from 1 user

Closed #395 A backup while a volume mounted below a configured path is not mounted deletes the older snapshots holding its files under --prune 2026-10-15 08:32:29 +02:00

Closed #390 prune never removes the encrypted database a backup left on the destination when its manifest upload failed 2026-10-15 03:49:19 +02:00

Closed #388 A backup of a source directory left empty by an unmounted volume deletes every older snapshot under --prune 2026-10-15 02:49:22 +02:00

Closed #389 The documented PUT-only source host fails every backup after its first: the destination marker check needs HEAD permission on S3 2026-10-15 02:02:36 +02:00

Closed #387 A prune on one host deletes blobs of another host's backup in progress; that backup reports success and cannot be restored 2026-10-14 13:06:36 +02:00

Closed #334 Record the defect-hunt fixes in TODO.md Completed Steps 2026-10-14 09:18:11 +02:00

Closed #382 snapshot create --skip-errors --prune deletes the previous snapshot, the only one holding the skipped files 2026-10-14 07:44:51 +02:00

Closed #310 snapshot create --skip-errors exits 0 and prints "Finished successfully." after skipping files 2026-10-14 07:13:50 +02:00

Closed #292 remote nuke against a destination it cannot list deletes the local index first 2026-10-14 06:47:41 +02:00

Closed #305 Directories and symlinks are counted as files to back up on every run, so an unchanged tree reports data backed up 2026-10-14 06:46:48 +02:00

Closed #239 How should vaultik tell an unplugged file:// volume from a new, empty destination? 2026-10-14 05:46:44 +02:00

Closed #316 Every restore by a non-root user warns that ownership was not preserved, even when it was 2026-10-14 05:39:29 +02:00

Closed #317 After storage_url changes, snapshot list advises prune, which then refuses 2026-10-14 04:29:39 +02:00

Closed #304 The "deleted" figure of a backup counts files that were not deleted since the previous snapshot of that name 2026-10-14 04:24:31 +02:00

Closed #327 Restore and verify error lines repeat a prefix, and deep verify names S3 for any destination 2026-10-14 04:04:15 +02:00

Closed #322 Credentials can still be put in storage_url, inside the endpoint or an rclone remote's parameters, and are then printed 2026-10-14 03:26:04 +02:00

Closed #315 config edit fails when $EDITOR carries arguments 2026-10-14 03:06:58 +02:00

Closed #340 snapshot remove exits 0 when deleting a destination-only snapshot's metadata fails, and its README promise of a prune command is false on several paths 2026-10-14 02:20:02 +02:00

Closed #306 The index cleanup before each backup reports total rows as "remain" 2026-10-14 02:03:52 +02:00

Closed #324 A restore of selected paths keeps decrypted blobs in the temporary cache until it ends 2026-10-14 01:47:50 +02:00

Closed #320 A config error that contains "): " loses its start, including which setting is wrong 2026-10-14 01:34:40 +02:00

Closed #294 --cron and --quiet do not silence the status lines of prune 2026-10-14 01:10:43 +02:00

Closed #321 RCLONE_CONFIG is ignored, so an rclone destination configured there is not found 2026-10-14 00:39:34 +02:00

Closed #338 Exclude patterns /**/x and a/**/b do not match as in gitignore 2026-10-14 00:13:28 +02:00

Closed #313 Byte-size settings: the defaults and the chunk-size minimum are 1024-based while the docs, the parser and the messages are 1000-based 2026-10-13 23:56:22 +02:00

Closed #337 snapshot purge exits 0 and still deletes the remote metadata when it cannot remove a snapshot from the local index 2026-10-13 23:36:24 +02:00

Closed #309 snapshot restore ignores a requested path that matches nothing, and exits 0 2026-10-13 23:14:24 +02:00

Closed #291 remote nuke leaves a snapshot database without a manifest, and non-blob files under blobs/, and says the store is empty 2026-10-13 22:50:11 +02:00

Closed #308 config set with a list index on a key that does not exist writes a map, and then no command can load the config 2026-10-13 22:43:42 +02:00

Closed #296 A symlinked metadata/ or blobs/ directory in a file:// destination lists as empty, and prune then deletes every blob 2026-10-13 21:36:24 +02:00

Closed #314 snapshot verify --deep --json reports "missing": 0 and "verified": 0 when it fails 2026-10-13 21:26:57 +02:00

Closed #351 The Docker build hangs for as long as a stalled connection to the Go module proxy lasts 2026-10-13 21:11:12 +02:00

Closed #360 snapshot list's UNCOMPRESSED SIZE of an older snapshot changes after a later backup 2026-10-13 20:43:20 +02:00

Closed #323 restore --skip-errors --verify reports a file that failed to restore again as a checksum failure 2026-10-13 20:12:49 +02:00

Closed #300 A reused blob is recorded with the size of a local copy that was never stored, so snapshot verify fails on a good snapshot 2026-10-13 20:01:43 +02:00

Closed #345 internal/database and the blob upload step still end the process on a rollback after Ctrl-C, a failed close of query results, or a failed temp file cleanup 2026-10-13 19:46:49 +02:00

Closed #356 Interrupting a stalled read of the snapshot database leaves decrypted data in the temp directory 2026-10-13 19:36:44 +02:00

Closed #290 prune and remote nuke exit 0 when a delete fails, and nuke still says the store is empty 2026-10-13 19:29:53 +02:00

Closed #297 An S3 listing the server marks truncated without a continuation token is taken as complete, so prune can delete blobs still in use 2026-10-13 19:25:50 +02:00

Closed #318 Shallow snapshot verify reports any error reading a blob's size as "Missing", and drops the error 2026-10-13 18:50:50 +02:00

Closed #326 Under --skip-errors, one file whose chunk is in no blob aborts the whole restore before anything is restored 2026-10-13 16:53:06 +02:00

Closed #311 snapshot list shows a NEW CHUNK SIZE of 0 B for a snapshot whose change is a modified file 2026-10-13 16:44:15 +02:00

Closed #301 Ctrl-C during a backup can end with "FATAL: failed to rollback transaction" and exit 1 instead of the interrupted exit 2026-10-13 16:29:00 +02:00

Closed #312 snapshot list and the snapshot purge listing print 1024-based sizes labelled MB, unlike every other command 2026-10-13 16:22:04 +02:00

Closed #325 Interrupting a restore during a slow blob read leaves the decrypted snapshot database and decrypted file data in the temp directory 2026-10-13 15:48:03 +02:00

Closed #319 A mistyped subcommand under snapshot, config, remote, database or completion exits 0 and does nothing 2026-10-13 14:14:42 +02:00

Closed #303 Exclude patterns starting with **/ miss a match directly under the source path 2026-10-13 13:50:12 +02:00

Closed #299 A relative file:// path is accepted, so the destination moves with the working directory and a backup can exit 0 and be unrestorable 2026-10-13 11:28:01 +02:00

Closed #302 A failed or interrupted backup leaves its half-written blob in the temp directory 2026-10-13 11:14:57 +02:00

Closed #307 An invalid --keep-newer-than is checked only after the backup, which is then reported as failed and retention never runs 2026-10-13 09:44:44 +02:00

Closed #295 remote info counts a file under blobs/ that is not a blob as an orphaned blob 2026-10-13 08:33:28 +02:00

Closed #293 snapshot remove reports success for a snapshot that does not exist 2026-10-13 05:55:25 +02:00

Closed #332 A file:// destination whose metadata/ or blobs/ is a symlink to a missing target lists as empty, so prune deletes every blob 2026-10-13 04:59:53 +02:00

Closed #298 With the s3.* configuration, a changed bucket or prefix is not detected, and the next backup reports success but cannot be restored 2026-10-13 03:48:37 +02:00

Closed #289 A retention duration of 293 years or more deletes every snapshot 2026-10-13 01:51:25 +02:00

Closed #288 Defect hunt on next before the release candidate 2026-10-13 00:53:53 +02:00

Closed #204 Daemon mode after 1.0: watch for file changes so frequent backups skip the full scan 2026-10-13 00:25:57 +02:00

Closed #286 An interrupted --skip-errors backup keeps opening every remaining file and logs each one as failed 2026-10-08 15:12:07 +02:00

Closed #281 remote nuke reports the destination store empty while a leftover .partial upload remains 2026-10-08 14:17:21 +02:00

Closed #284 Under --skip-errors, a local index error while recording a directory or symlink is skipped instead of stopping the backup 2026-10-08 12:59:27 +02:00

Closed #280 A file skipped while a backup is processed is reported as "unchanged" and its bytes as "backed up" 2026-10-08 10:12:11 +02:00

Closed #272 remote info shows 0 blobs and 0 B for a snapshot whose manifest cannot be read 2026-10-08 08:46:13 +02:00

Closed #271 Progress lines over-report on the second and later paths of a multi-path snapshot 2026-10-08 07:29:13 +02:00

Closed #268 The help and README do not say that --json skips the confirmation prompt of snapshot remove and prune 2026-10-08 04:59:31 +02:00

Closed #270 Two snapshot create runs of one name within the same second fail on the snapshot ID 2026-10-08 03:29:08 +02:00

Closed #269 A symlink whose target cannot be read is left out of the snapshot silently, even without --skip-errors 2026-10-08 00:12:15 +02:00

Closed #266 A blob upload to an rclone destination cut off by a hard kill leaves a partial object that the next backup trusts 2026-10-07 22:59:37 +02:00

Closed #267 An interrupted snapshot create, restore or verify exits 0 and prints nothing 2026-10-07 21:59:28 +02:00

Closed #233 Doc and help sentences that are false about the current tree 2026-10-07 17:59:27 +02:00

Closed #235 The internal/vaultik and internal/database tests take longer than the 20-second target 2026-10-07 17:12:07 +02:00

Closed #240 Two misleading messages: a credentials warning for a config with no credentials, and a doubled error prefix 2026-10-07 15:29:08 +02:00

Closed #232 s3.part_size is documented and accepted but has no effect 2026-10-07 14:29:11 +02:00

Closed #230 A hostname containing _ makes per-name retention silently do nothing 2026-10-07 12:12:09 +02:00

Closed #228 remote info counts a live snapshot's blobs as orphaned when a manifest cannot be read, and prints store names unescaped 2026-10-07 10:59:28 +02:00

Closed #229 config set cannot store a string that looks like a number 2026-10-07 09:29:22 +02:00

Closed #226 A file rewritten within the same second as its recorded mtime is never backed up again 2026-10-07 07:12:13 +02:00

Closed #227 The process lock is check-then-write, so two writers started together can both acquire it 2026-10-07 06:12:11 +02:00

Closed #251 snapshot remove --json prints its remote-cleanup warning on stdout, ahead of the document 2026-10-07 04:46:14 +02:00

Closed #225 Backup statistics are wrong in the printed summary and in the snapshots table 2026-10-07 02:59:28 +02:00

Closed #224 Command output breaks the README's stdout and stderr rules in three places 2026-10-07 01:12:32 +02:00

Closed #253 A backup without --cron panics when a snapshot has more than one path 2026-10-07 00:12:11 +02:00

Closed #223 Path filters match by case-insensitive string prefix: restoring /home/u/doc also restores doc2, Doc3 and doc.txt.bak 2026-10-06 22:12:17 +02:00

Closed #231 A malformed snapshot database crashes restore with a Go panic instead of an error 2026-10-06 21:16:29 +02:00

Closed #222 With an s3://bucket/prefix URL, objects are stored as prefixblobs/... instead of prefix/blobs/... 2026-10-06 19:46:11 +02:00

Closed #219 Restore applies directory modes and times before writing the contents, and file modes before ownership 2026-10-06 18:29:10 +02:00

Closed #246 The pre-commit hook fails on every commit: go.mod marks a directly imported module as indirect 2026-10-06 16:59:27 +02:00

Closed #221 The documented "restoring on another machine" steps fail at the first command 2026-10-06 15:46:14 +02:00

Closed #218 snapshot restore --skip-errors aborts on a missing or damaged blob instead of skipping the files that need it 2026-10-06 14:46:06 +02:00

Closed #213 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 12:46:14 +02:00

Closed #217 The local index ignores its WAL and busy-timeout settings, so a read-only command can abort a running backup 2026-10-06 11:29:19 +02:00

Closed #216 File ownership is never recorded, so a restore as root makes every file root:root 2026-10-06 09:46:19 +02:00

Closed #220 A file:// destination that is missing (an unmounted volume) is treated as present and empty 2026-10-06 08:46:19 +02:00

Closed #215 A retention duration with unparsed characters is misread: --keep-newer-than 1.0y deletes every snapshot 2026-10-06 06:12:08 +02:00

Closed #214 A backup reports success but cannot restore a changed file after the snapshot holding its current version is dropped 2026-10-06 04:46:18 +02:00

Closed #211 docker build . stamps dev, not the git tag or short commit 2026-10-02 10:04:15 +02:00

Closed #125 Work remaining before vaultik 1.0 2026-10-01 22:10:08 +02:00

Closed #208 README roadmap and TODO.md still list finished 1.0 work as remaining 2026-10-01 21:41:42 +02:00

Closed #207 The disk-full restore test is still skipped although the fix it waited for has landed 2026-10-01 20:24:40 +02:00

Closed #206 Run every build, test and lint step in the Dockerfiles at nice -n 19 2026-09-29 13:12:09 +02:00

Closed #68 Reconcile the schema/migration story across code and four documents 2026-09-28 20:21:39 +02:00

Closed #94 Decide whether feature/daemon-mode is 1.0 scope 2026-09-28 20:01:26 +02:00

Closed #133 CI runner mac-studio fails every job before the first step (docker network pools exhausted, disk full) 2026-09-25 11:33:38 +02:00

Closed #113 Run all linting in Docker via Dockerfile.lint + script/lint 2026-09-23 13:03:03 +02:00

Closed #155 Check blob hashes, offsets and lengths read from the destination before using them 2026-09-23 13:03:03 +02:00

Closed #156 Restore and deep verify must check the decrypted database is the snapshot that was asked for 2026-09-23 13:03:03 +02:00

Closed #159 Ctrl-C during restore exits before cleanup, leaving decrypted data in the temp directory 2026-09-23 13:03:03 +02:00

Closed #177 Interrupted metadata export leaves a snapshot silently treated as complete but unrestorable 2026-09-23 13:03:03 +02:00

Closed #90 golangci-lint deprecation: gomodguard replaced by gomodguard_v2 2026-09-23 02:14:47 +02:00

Closed #119 Review toward 1.0: identify and file all next steps 2026-09-23 01:49:09 +02:00

Closed #73 Security review of the crypto and blob-generation seams 2026-09-23 01:49:08 +02:00

Closed #76 Decide on renaming internal/log, internal/crypto and internal/types (revive var-naming) 2026-09-23 01:43:48 +02:00

Closed #101 REPO_POLICIES.md mandates a 30s test timeout that is too tight to be safe 2026-09-23 01:43:48 +02:00

Closed #149 Route direct-stdout command output through internal/ui 2026-09-22 20:28:51 +02:00

Closed #171 Correct the security claims in the docs and comments, and write down the accepted risks 2026-09-22 19:28:32 +02:00

Closed #152 A stream cut right after the age header reads as valid and empty, and restore then reports success 2026-09-22 18:11:58 +02:00

Closed #164 Bound what a downloaded object may expand to, and escape control characters from the destination before printing 2026-09-22 17:00:36 +02:00

Closed #165 Parse the age private key once, accept every identity in it, and stop showing it typed on the command line 2026-09-22 15:45:28 +02:00

Closed #169 Shallow snapshot verify ignores object sizes and reports more than it checked 2026-09-22 14:28:45 +02:00

Closed #170 Negative and boundary tests for internal/blobgen and internal/types (and internal/crypto if it survives) 2026-09-22 14:28:35 +02:00

Closed #151 Remove the unused second encryption path and unused secret types; write the blob-ID hash step once 2026-09-22 13:46:02 +02:00

Closed #172 config.example.yml carries a real-looking S3 key pair and internal host names 2026-09-22 13:45:52 +02:00

Closed #168 Give the local index and its export copy an explicit 0600 mode 2026-09-22 13:12:07 +02:00

Closed #153 Parse age_recipients when the config loads, and never print the entry in an error 2026-09-22 13:01:02 +02:00

Closed #162 Open the downloaded snapshot database read-only, keep it in a private temp directory, remove it on every path 2026-09-22 12:45:54 +02:00

Closed #161 Under --skip-errors a packing failure can record a file that cannot be restored 2026-09-22 12:28:44 +02:00

Closed #166 config set echoes secrets and keeps a loose file mode; a storage_url carrying credentials is accepted and echoed 2026-09-22 12:28:32 +02:00

Closed #160 snapshot purge deletes every local snapshot record and then purges nothing 2026-09-22 12:11:49 +02:00

Closed #163 Restore: create files 0600, remove partial files, and make the blob hash check impossible to skip 2026-09-22 11:45:53 +02:00

Closed #167 Reject a blob_size_limit below the largest possible chunk 2026-09-22 11:45:42 +02:00

Closed #157 Prune must delete nothing when a manifest cannot be read, and a manifest must never omit a blob 2026-09-22 11:45:30 +02:00

Closed #158 s3.use_ssl is documented as defaulting to true but the code defaults to plain HTTP 2026-09-22 11:11:34 +02:00

Closed #150 Scope the process-wide PID lock to mutating commands 2026-09-22 11:01:30 +02:00

Closed #154 Restore must keep every write inside the target directory 2026-09-22 11:01:02 +02:00

Closed #148 Interrupted blob upload leaves committed chunk rows; a retry silently produces an unrestorable snapshot 2026-09-22 10:29:22 +02:00

Closed #72 Fault-injection tests: prove backups survive interruption and corruption 2026-09-22 09:46:47 +02:00

Closed #112 Under --json, prune deletes local index rows with no signal in either stream 2026-09-22 09:05:53 +02:00

Closed #74 Documentation accuracy sweep: undocumented behavior and stale claims 2026-09-22 09:05:37 +02:00

Closed #137 S3 test credentials for ber1app1 remain in git history after the fixture was deleted 2026-09-22 08:39:46 +02:00

Closed #124 Document and test restoring on another machine 2026-09-22 01:01:27 +02:00

Closed #66 Add tests for internal/storage — the backend abstraction has zero coverage 2026-09-22 00:58:27 +02:00

Closed #75 Docker builds report unknown version, and profiling output is truncated on error 2026-09-21 22:01:06 +02:00

Closed #96 getTableCount errors are discarded, so a failed query reports as a count of zero 2026-09-21 21:41:58 +02:00

Closed #130 Interrupted blob upload leaves a partial object the next run trusts as complete (file:// backend) 2026-09-21 21:24:43 +02:00

Closed #129 S3Storer.Get/Stat return the raw SDK error, not storage.ErrNotFound 2026-09-21 21:07:36 +02:00

Closed #123 Two duration parsers, and the documented --older-than example deletes almost every snapshot 2026-09-21 20:58:31 +02:00

Closed #121 Rework the lint-guard shell scanner in cmd/vaultik/lintdocker_test.go (second-review findings on the milestone PR) 2026-09-21 20:41:34 +02:00

Closed #131 verify --deep hashes encrypted bytes but compares to the plaintext blob ID, so it fails on healthy snapshots 2026-09-21 20:24:37 +02:00

Closed #105 The Go toolchain in the release workflow is version-pinned but not hash-verified 2026-09-21 19:48:53 +02:00

Closed #120 snapshot create fails on any host without the sqlite3 CLI: VACUUM shells out instead of using the driver 2026-09-21 19:41:29 +02:00

Closed #70 Delete dead code and stale fixtures before tagging 2026-09-21 19:25:01 +02:00

Closed #67 Docs misstate the remote layout and understate the privacy guarantee 2026-09-21 19:24:45 +02:00

Closed #122 CI never runs on next or on PRs targeting it 2026-09-21 14:56:00 +02:00

Closed #87 --cron flag help text misstates what it suppresses 2026-09-21 14:55:46 +02:00

Closed #116 Guard scanner: shellCode silently discards the rest of a file on an unterminated here-document 2026-09-05 11:32:57 +02:00

Closed #117 Guard scanner: assertLinterIsContainerised accepts a || host-linter fallback 2026-09-05 11:32:57 +02:00

Closed #118 Dockerfile.lint citation names an lll finding where the PR records revive 2026-09-05 11:32:57 +02:00

Closed #115 Host-lint guard scanner goes blind on a phantom heredoc and accepts a || host fallback 2026-09-03 23:56:36 +02:00

Closed #103 Two fail-closed defects in the new lint isolation 2026-08-11 13:55:41 +02:00

Closed #88 golangci-lint cache is shared across worktrees, so lint results can come from another tree 2026-08-11 13:55:40 +02:00

Closed #108 pruneLocalSnapshots writes prose to stdout unconditionally, so prune --json | jq still fails after the banner fix 2026-08-09 19:53:48 +02:00

Closed #110 make build exits 0 without building anything 2026-08-09 19:53:48 +02:00

Closed #106 Startup banner goes to stdout and --json does not suppress it, so every --json document is preceded by three lines of prose 2026-08-09 19:18:37 +02:00

Closed #82 Logger writes to stdout, so any warning corrupts --json output 2026-08-09 18:43:56 +02:00

Closed #97 TTYHandler silently discards log.With attributes, so diagnostics differ between terminal and CI 2026-08-09 18:43:56 +02:00

Closed #65 Make the tagged-release path actually work on Gitea 2026-08-09 18:03:18 +02:00

Closed #80 Harden the pinned-linter gate: context-gate the native path, and make bootstrap yield a working machine 2026-08-09 17:15:07 +02:00

Closed #99 script/lint shares one golangci-lint cache across worktrees, so one tree's findings are served for another 2026-08-09 17:15:07 +02:00

Closed #69 make test-integration is a silent no-op — no file carries the integration build tag 2026-08-09 16:29:27 +02:00

Closed #93 script/test omits -count=1, so Go's test cache can satisfy the gate without running tests 2026-08-09 16:29:27 +02:00

Closed #81 The unencrypted manifest publishes backup timestamps and a per-blob size profile 2026-08-09 16:10:17 +02:00

Closed #100 golangci-lint warns on every run: gomodguard is deprecated, replaced by gomodguard_v2 2026-08-09 12:13:33 +02:00

Closed #71 Triage the 15 stale remote branches; two may contain unlanded fixes 2026-08-09 10:23:30 +02:00

Closed #91 Adopt the remaining upstream CHECK_EPOCH hardening (expanded form, unset guard, unique epoch, script/docker) 2026-08-09 10:09:27 +02:00

Closed #85 script/cibuild reports a green it did not earn when the tree is unchanged 2026-08-09 09:37:55 +02:00

Closed #84 Vaultik.UI doc comment misdescribes how --cron suppresses output 2026-08-09 07:43:46 +02:00

Closed #64 snapshot list must list remote snapshots without requiring the private key 2026-08-09 07:34:15 +02:00

Closed #78 make lint does not use the pinned linter version, so local green does not mean CI green 2026-08-09 04:52:22 +02:00

Closed #59 Add .editorconfig and the standard .golangci.yml 2026-08-09 04:25:13 +02:00

Closed #61 Remediate lint findings surfaced by the standard .golangci.yml 2026-08-09 04:25:11 +02:00

180 Issues created by 1 user

Opened #59 Add .editorconfig and the standard .golangci.yml 2026-07-26 20:12:23 +02:00

Opened #61 Remediate lint findings surfaced by the standard .golangci.yml 2026-08-07 18:29:24 +02:00

Opened #64 snapshot list must list remote snapshots without requiring the private key 2026-08-09 03:41:14 +02:00

Opened #65 Make the tagged-release path actually work on Gitea 2026-08-09 03:41:28 +02:00

Opened #66 Add tests for internal/storage — the backend abstraction has zero coverage 2026-08-09 03:41:40 +02:00

Opened #67 Docs misstate the remote layout and understate the privacy guarantee 2026-08-09 03:41:53 +02:00

Opened #68 Reconcile the schema/migration story across code and four documents 2026-08-09 03:42:24 +02:00

Opened #69 make test-integration is a silent no-op — no file carries the integration build tag 2026-08-09 03:42:34 +02:00

Opened #70 Delete dead code and stale fixtures before tagging 2026-08-09 03:42:52 +02:00

Opened #71 Triage the 15 stale remote branches; two may contain unlanded fixes 2026-08-09 03:43:10 +02:00

Opened #72 Fault-injection tests: prove backups survive interruption and corruption 2026-08-09 03:43:30 +02:00

Opened #73 Security review of the crypto and blob-generation seams 2026-08-09 03:43:47 +02:00

Opened #74 Documentation accuracy sweep: undocumented behavior and stale claims 2026-08-09 03:44:09 +02:00

Opened #75 Docker builds report unknown version, and profiling output is truncated on error 2026-08-09 03:44:22 +02:00

Opened #76 Decide on renaming internal/log, internal/crypto and internal/types (revive var-naming) 2026-08-09 03:45:00 +02:00

Opened #78 make lint does not use the pinned linter version, so local green does not mean CI green 2026-08-09 03:59:06 +02:00

Opened #80 Harden the pinned-linter gate: context-gate the native path, and make bootstrap yield a working machine 2026-08-09 04:52:49 +02:00

Opened #81 The unencrypted manifest publishes backup timestamps and a per-blob size profile 2026-08-09 04:57:02 +02:00

Opened #82 Logger writes to stdout, so any warning corrupts --json output 2026-08-09 05:16:09 +02:00

Opened #84 Vaultik.UI doc comment misdescribes how --cron suppresses output 2026-08-09 07:25:17 +02:00

Opened #85 script/cibuild reports a green it did not earn when the tree is unchanged 2026-08-09 07:41:30 +02:00

Opened #87 --cron flag help text misstates what it suppresses 2026-08-09 07:44:02 +02:00

Opened #88 golangci-lint cache is shared across worktrees, so lint results can come from another tree 2026-08-09 08:04:05 +02:00

Opened #90 golangci-lint deprecation: gomodguard replaced by gomodguard_v2 2026-08-09 08:17:48 +02:00

Opened #91 Adopt the remaining upstream CHECK_EPOCH hardening (expanded form, unset guard, unique epoch, script/docker) 2026-08-09 08:45:51 +02:00

Opened #93 script/test omits -count=1, so Go's test cache can satisfy the gate without running tests 2026-08-09 10:09:55 +02:00

Opened #94 Decide whether feature/daemon-mode is 1.0 scope 2026-08-09 10:13:00 +02:00

Opened #96 getTableCount errors are discarded, so a failed query reports as a count of zero 2026-08-09 10:23:50 +02:00

Opened #97 TTYHandler silently discards log.With attributes, so diagnostics differ between terminal and CI 2026-08-09 11:55:49 +02:00

Opened #99 script/lint shares one golangci-lint cache across worktrees, so one tree's findings are served for another 2026-08-09 12:12:09 +02:00

Opened #100 golangci-lint warns on every run: gomodguard is deprecated, replaced by gomodguard_v2 2026-08-09 12:12:16 +02:00

Opened #101 REPO_POLICIES.md mandates a 30s test timeout that is too tight to be safe 2026-08-09 16:13:06 +02:00

Opened #103 Two fail-closed defects in the new lint isolation 2026-08-09 17:15:23 +02:00

Opened #105 The Go toolchain in the release workflow is version-pinned but not hash-verified 2026-08-09 18:03:39 +02:00

Opened #106 Startup banner goes to stdout and --json does not suppress it, so every --json document is preceded by three lines of prose 2026-08-09 18:20:13 +02:00

Opened #108 pruneLocalSnapshots writes prose to stdout unconditionally, so prune --json | jq still fails after the banner fix 2026-08-09 19:03:16 +02:00

Opened #110 make build exits 0 without building anything 2026-08-09 19:19:10 +02:00

Opened #112 Under --json, prune deletes local index rows with no signal in either stream 2026-08-09 19:54:26 +02:00

Opened #113 Run all linting in Docker via Dockerfile.lint + script/lint 2026-08-10 13:14:26 +02:00

Opened #115 Host-lint guard scanner goes blind on a phantom heredoc and accepts a || host fallback 2026-08-11 13:54:29 +02:00

Opened #116 Guard scanner: shellCode silently discards the rest of a file on an unterminated here-document 2026-09-03 23:54:56 +02:00

Opened #117 Guard scanner: assertLinterIsContainerised accepts a || host-linter fallback 2026-09-03 23:55:18 +02:00

Opened #118 Dockerfile.lint citation names an lll finding where the PR records revive 2026-09-03 23:55:19 +02:00

Opened #119 Review toward 1.0: identify and file all next steps 2026-09-21 09:13:40 +02:00

Opened #120 snapshot create fails on any host without the sqlite3 CLI: VACUUM shells out instead of using the driver 2026-09-21 09:19:43 +02:00

Opened #121 Rework the lint-guard shell scanner in cmd/vaultik/lintdocker_test.go (second-review findings on the milestone PR) 2026-09-21 09:19:43 +02:00

Opened #122 CI never runs on next or on PRs targeting it 2026-09-21 09:19:43 +02:00

Opened #123 Two duration parsers, and the documented --older-than example deletes almost every snapshot 2026-09-21 09:19:44 +02:00

Opened #124 Document and test restoring on another machine 2026-09-21 09:19:44 +02:00

Opened #125 Work remaining before vaultik 1.0 2026-09-21 09:19:44 +02:00

Opened #129 S3Storer.Get/Stat return the raw SDK error, not storage.ErrNotFound 2026-09-21 09:41:28 +02:00

Opened #130 Interrupted blob upload leaves a partial object the next run trusts as complete (file:// backend) 2026-09-21 09:43:56 +02:00

Opened #131 verify --deep hashes encrypted bytes but compares to the plaintext blob ID, so it fails on healthy snapshots 2026-09-21 09:44:04 +02:00

Opened #133 CI runner mac-studio fails every job before the first step (docker network pools exhausted, disk full) 2026-09-21 14:58:26 +02:00

Opened #137 S3 test credentials for ber1app1 remain in git history after the fixture was deleted 2026-09-21 19:25:41 +02:00

Opened #148 Interrupted blob upload leaves committed chunk rows; a retry silently produces an unrestorable snapshot 2026-09-21 22:02:05 +02:00

Opened #149 Route direct-stdout command output through internal/ui 2026-09-21 22:03:28 +02:00

Opened #150 Scope the process-wide PID lock to mutating commands 2026-09-21 22:03:35 +02:00

Opened #151 Remove the unused second encryption path and unused secret types; write the blob-ID hash step once 2026-09-22 00:54:59 +02:00

Opened #152 A stream cut right after the age header reads as valid and empty, and restore then reports success 2026-09-22 00:54:59 +02:00

Opened #153 Parse age_recipients when the config loads, and never print the entry in an error 2026-09-22 00:54:59 +02:00

Opened #154 Restore must keep every write inside the target directory 2026-09-22 00:55:13 +02:00

Opened #155 Check blob hashes, offsets and lengths read from the destination before using them 2026-09-22 00:55:13 +02:00

Opened #156 Restore and deep verify must check the decrypted database is the snapshot that was asked for 2026-09-22 00:55:13 +02:00

Opened #157 Prune must delete nothing when a manifest cannot be read, and a manifest must never omit a blob 2026-09-22 00:55:13 +02:00

Opened #158 s3.use_ssl is documented as defaulting to true but the code defaults to plain HTTP 2026-09-22 00:55:14 +02:00

Opened #159 Ctrl-C during restore exits before cleanup, leaving decrypted data in the temp directory 2026-09-22 00:55:14 +02:00

Opened #160 snapshot purge deletes every local snapshot record and then purges nothing 2026-09-22 00:55:14 +02:00

Opened #161 Under --skip-errors a packing failure can record a file that cannot be restored 2026-09-22 00:55:14 +02:00

Opened #162 Open the downloaded snapshot database read-only, keep it in a private temp directory, remove it on every path 2026-09-22 00:55:14 +02:00

Opened #163 Restore: create files 0600, remove partial files, and make the blob hash check impossible to skip 2026-09-22 00:55:14 +02:00

Opened #164 Bound what a downloaded object may expand to, and escape control characters from the destination before printing 2026-09-22 00:55:14 +02:00

Opened #165 Parse the age private key once, accept every identity in it, and stop showing it typed on the command line 2026-09-22 00:55:14 +02:00

Opened #166 config set echoes secrets and keeps a loose file mode; a storage_url carrying credentials is accepted and echoed 2026-09-22 00:55:14 +02:00

Opened #167 Reject a blob_size_limit below the largest possible chunk 2026-09-22 00:55:14 +02:00

Opened #168 Give the local index and its export copy an explicit 0600 mode 2026-09-22 00:55:14 +02:00

Opened #169 Shallow snapshot verify ignores object sizes and reports more than it checked 2026-09-22 00:55:14 +02:00

Opened #170 Negative and boundary tests for internal/blobgen and internal/types (and internal/crypto if it survives) 2026-09-22 00:55:14 +02:00

Opened #171 Correct the security claims in the docs and comments, and write down the accepted risks 2026-09-22 00:55:14 +02:00

Opened #172 config.example.yml carries a real-looking S3 key pair and internal host names 2026-09-22 00:55:14 +02:00

Opened #177 Interrupted metadata export leaves a snapshot silently treated as complete but unrestorable 2026-09-22 09:37:46 +02:00

Opened #204 Daemon mode after 1.0: watch for file changes so frequent backups skip the full scan 2026-09-25 11:54:33 +02:00

Opened #206 Run every build, test and lint step in the Dockerfiles at nice -n 19 2026-09-29 13:02:20 +02:00

Opened #207 The disk-full restore test is still skipped although the fix it waited for has landed 2026-10-01 19:54:22 +02:00

Opened #208 README roadmap and TODO.md still list finished 1.0 work as remaining 2026-10-01 19:54:31 +02:00

Opened #211 docker build . stamps dev, not the git tag or short commit 2026-10-02 02:21:47 +02:00

Opened #213 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 01:31:03 +02:00

Opened #214 A backup reports success but cannot restore a changed file after the snapshot holding its current version is dropped 2026-10-06 01:49:40 +02:00

Opened #215 A retention duration with unparsed characters is misread: --keep-newer-than 1.0y deletes every snapshot 2026-10-06 01:49:40 +02:00

Opened #216 File ownership is never recorded, so a restore as root makes every file root:root 2026-10-06 01:49:41 +02:00

Opened #217 The local index ignores its WAL and busy-timeout settings, so a read-only command can abort a running backup 2026-10-06 01:49:41 +02:00

Opened #218 snapshot restore --skip-errors aborts on a missing or damaged blob instead of skipping the files that need it 2026-10-06 01:49:42 +02:00

Opened #219 Restore applies directory modes and times before writing the contents, and file modes before ownership 2026-10-06 01:49:42 +02:00

Opened #220 A file:// destination that is missing (an unmounted volume) is treated as present and empty 2026-10-06 01:49:43 +02:00

Opened #221 The documented "restoring on another machine" steps fail at the first command 2026-10-06 01:49:43 +02:00

Opened #222 With an s3://bucket/prefix URL, objects are stored as prefixblobs/... instead of prefix/blobs/... 2026-10-06 01:49:44 +02:00

Opened #223 Path filters match by case-insensitive string prefix: restoring /home/u/doc also restores doc2, Doc3 and doc.txt.bak 2026-10-06 01:49:44 +02:00

Opened #224 Command output breaks the README's stdout and stderr rules in three places 2026-10-06 01:49:45 +02:00

Opened #225 Backup statistics are wrong in the printed summary and in the snapshots table 2026-10-06 01:49:45 +02:00

Opened #226 A file rewritten within the same second as its recorded mtime is never backed up again 2026-10-06 01:49:45 +02:00

Opened #227 The process lock is check-then-write, so two writers started together can both acquire it 2026-10-06 01:49:46 +02:00

Opened #228 remote info counts a live snapshot's blobs as orphaned when a manifest cannot be read, and prints store names unescaped 2026-10-06 01:49:46 +02:00

Opened #229 config set cannot store a string that looks like a number 2026-10-06 01:49:47 +02:00

Opened #230 A hostname containing _ makes per-name retention silently do nothing 2026-10-06 01:49:47 +02:00

Opened #231 A malformed snapshot database crashes restore with a Go panic instead of an error 2026-10-06 01:49:47 +02:00

Opened #232 s3.part_size is documented and accepted but has no effect 2026-10-06 01:49:48 +02:00

Opened #233 Doc and help sentences that are false about the current tree 2026-10-06 01:49:48 +02:00

Opened #235 The internal/vaultik and internal/database tests take longer than the 20-second target 2026-10-06 03:22:37 +02:00

Opened #239 How should vaultik tell an unplugged file:// volume from a new, empty destination? 2026-10-06 08:46:47 +02:00

Opened #240 Two misleading messages: a credentials warning for a config with no credentials, and a doubled error prefix 2026-10-06 08:47:06 +02:00

Opened #246 The pre-commit hook fails on every commit: go.mod marks a directly imported module as indirect 2026-10-06 15:46:34 +02:00

Opened #251 snapshot remove --json prints its remote-cleanup warning on stdout, ahead of the document 2026-10-06 21:54:53 +02:00

Opened #253 A backup without --cron panics when a snapshot has more than one path 2026-10-06 22:31:20 +02:00

Opened #266 A blob upload to an rclone destination cut off by a hard kill leaves a partial object that the next backup trusts 2026-10-07 18:00:19 +02:00

Opened #267 An interrupted snapshot create, restore or verify exits 0 and prints nothing 2026-10-07 18:00:19 +02:00

Opened #268 The help and README do not say that --json skips the confirmation prompt of snapshot remove and prune 2026-10-07 18:00:19 +02:00

Opened #269 A symlink whose target cannot be read is left out of the snapshot silently, even without --skip-errors 2026-10-07 18:00:20 +02:00

Opened #270 Two snapshot create runs of one name within the same second fail on the snapshot ID 2026-10-07 18:00:20 +02:00

Opened #271 Progress lines over-report on the second and later paths of a multi-path snapshot 2026-10-07 18:00:20 +02:00

Opened #272 remote info shows 0 blobs and 0 B for a snapshot whose manifest cannot be read 2026-10-07 18:00:20 +02:00

Opened #280 A file skipped while a backup is processed is reported as "unchanged" and its bytes as "backed up" 2026-10-08 08:12:28 +02:00

Opened #281 remote nuke reports the destination store empty while a leftover .partial upload remains 2026-10-08 08:12:28 +02:00

Opened #284 Under --skip-errors, a local index error while recording a directory or symlink is skipped instead of stopping the backup 2026-10-08 10:12:36 +02:00

Opened #286 An interrupted --skip-errors backup keeps opening every remaining file and logs each one as failed 2026-10-08 11:12:28 +02:00

Opened #288 Defect hunt on next before the release candidate 2026-10-13 00:12:58 +02:00

Opened #289 A retention duration of 293 years or more deletes every snapshot 2026-10-13 00:29:18 +02:00

Opened #290 prune and remote nuke exit 0 when a delete fails, and nuke still says the store is empty 2026-10-13 00:29:18 +02:00

Opened #291 remote nuke leaves a snapshot database without a manifest, and non-blob files under blobs/, and says the store is empty 2026-10-13 00:29:19 +02:00

Opened #292 remote nuke against a destination it cannot list deletes the local index first 2026-10-13 00:29:20 +02:00

Opened #293 snapshot remove reports success for a snapshot that does not exist 2026-10-13 00:29:21 +02:00

Opened #294 --cron and --quiet do not silence the status lines of prune 2026-10-13 00:29:21 +02:00

Opened #295 remote info counts a file under blobs/ that is not a blob as an orphaned blob 2026-10-13 00:29:22 +02:00

Opened #296 A symlinked metadata/ or blobs/ directory in a file:// destination lists as empty, and prune then deletes every blob 2026-10-13 00:47:07 +02:00

Opened #297 An S3 listing the server marks truncated without a continuation token is taken as complete, so prune can delete blobs still in use 2026-10-13 00:47:08 +02:00

Opened #298 With the s3.* configuration, a changed bucket or prefix is not detected, and the next backup reports success but cannot be restored 2026-10-13 00:47:08 +02:00

Opened #299 A relative file:// path is accepted, so the destination moves with the working directory and a backup can exit 0 and be unrestorable 2026-10-13 00:47:08 +02:00

Opened #300 A reused blob is recorded with the size of a local copy that was never stored, so snapshot verify fails on a good snapshot 2026-10-13 00:47:09 +02:00

Opened #301 Ctrl-C during a backup can end with "FATAL: failed to rollback transaction" and exit 1 instead of the interrupted exit 2026-10-13 00:47:09 +02:00

Opened #302 A failed or interrupted backup leaves its half-written blob in the temp directory 2026-10-13 00:47:09 +02:00

Opened #303 Exclude patterns starting with **/ miss a match directly under the source path 2026-10-13 00:47:10 +02:00

Opened #304 The "deleted" figure of a backup counts files that were not deleted since the previous snapshot of that name 2026-10-13 00:47:10 +02:00

Opened #305 Directories and symlinks are counted as files to back up on every run, so an unchanged tree reports data backed up 2026-10-13 00:47:11 +02:00

Opened #306 The index cleanup before each backup reports total rows as "remain" 2026-10-13 00:47:12 +02:00

Opened #307 An invalid --keep-newer-than is checked only after the backup, which is then reported as failed and retention never runs 2026-10-13 00:47:12 +02:00

Opened #308 config set with a list index on a key that does not exist writes a map, and then no command can load the config 2026-10-13 00:47:12 +02:00

Opened #309 snapshot restore ignores a requested path that matches nothing, and exits 0 2026-10-13 00:47:13 +02:00

Opened #310 snapshot create --skip-errors exits 0 and prints "Finished successfully." after skipping files 2026-10-13 00:47:14 +02:00

Opened #311 snapshot list shows a NEW CHUNK SIZE of 0 B for a snapshot whose change is a modified file 2026-10-13 00:47:14 +02:00

Opened #312 snapshot list and the snapshot purge listing print 1024-based sizes labelled MB, unlike every other command 2026-10-13 00:47:15 +02:00

Opened #313 Byte-size settings: the defaults and the chunk-size minimum are 1024-based while the docs, the parser and the messages are 1000-based 2026-10-13 00:47:16 +02:00

Opened #314 snapshot verify --deep --json reports "missing": 0 and "verified": 0 when it fails 2026-10-13 00:47:16 +02:00

Opened #315 config edit fails when $EDITOR carries arguments 2026-10-13 00:47:17 +02:00

Opened #316 Every restore by a non-root user warns that ownership was not preserved, even when it was 2026-10-13 00:47:17 +02:00

Opened #317 After storage_url changes, snapshot list advises prune, which then refuses 2026-10-13 00:47:18 +02:00

Opened #318 Shallow snapshot verify reports any error reading a blob's size as "Missing", and drops the error 2026-10-13 00:47:19 +02:00

Opened #319 A mistyped subcommand under snapshot, config, remote, database or completion exits 0 and does nothing 2026-10-13 00:47:19 +02:00

Opened #320 A config error that contains "): " loses its start, including which setting is wrong 2026-10-13 00:47:20 +02:00

Opened #321 RCLONE_CONFIG is ignored, so an rclone destination configured there is not found 2026-10-13 00:47:20 +02:00

Opened #322 Credentials can still be put in storage_url, inside the endpoint or an rclone remote's parameters, and are then printed 2026-10-13 00:47:21 +02:00

Opened #323 restore --skip-errors --verify reports a file that failed to restore again as a checksum failure 2026-10-13 00:53:34 +02:00

Opened #324 A restore of selected paths keeps decrypted blobs in the temporary cache until it ends 2026-10-13 00:53:36 +02:00

Opened #325 Interrupting a restore during a slow blob read leaves the decrypted snapshot database and decrypted file data in the temp directory 2026-10-13 00:53:36 +02:00

Opened #326 Under --skip-errors, one file whose chunk is in no blob aborts the whole restore before anything is restored 2026-10-13 00:53:37 +02:00

Opened #327 Restore and verify error lines repeat a prefix, and deep verify names S3 for any destination 2026-10-13 00:53:37 +02:00

Opened #332 A file:// destination whose metadata/ or blobs/ is a symlink to a missing target lists as empty, so prune deletes every blob 2026-10-13 02:55:52 +02:00

Opened #334 Record the defect-hunt fixes in TODO.md Completed Steps 2026-10-13 03:56:12 +02:00

Opened #337 snapshot purge exits 0 and still deletes the remote metadata when it cannot remove a snapshot from the local index 2026-10-13 04:55:43 +02:00

Opened #338 Exclude patterns /**/x and a/**/b do not match as in gitignore 2026-10-13 04:55:44 +02:00

Opened #340 snapshot remove exits 0 when deleting a destination-only snapshot's metadata fails, and its README promise of a prune command is false on several paths 2026-10-13 05:55:38 +02:00

Opened #345 internal/database and the blob upload step still end the process on a rollback after Ctrl-C, a failed close of query results, or a failed temp file cleanup 2026-10-13 07:59:35 +02:00

Opened #351 The Docker build hangs for as long as a stalled connection to the Go module proxy lasts 2026-10-13 12:44:14 +02:00

Opened #356 Interrupting a stalled read of the snapshot database leaves decrypted data in the temp directory 2026-10-13 13:20:18 +02:00

Opened #360 snapshot list's UNCOMPRESSED SIZE of an older snapshot changes after a later backup 2026-10-13 15:05:04 +02:00

Opened #382 snapshot create --skip-errors --prune deletes the previous snapshot, the only one holding the skipped files 2026-10-14 04:55:43 +02:00

Opened #387 A prune on one host deletes blobs of another host's backup in progress; that backup reports success and cannot be restored 2026-10-14 09:51:59 +02:00

Opened #388 A backup of a source directory left empty by an unmounted volume deletes every older snapshot under --prune 2026-10-14 09:51:59 +02:00

Opened #389 The documented PUT-only source host fails every backup after its first: the destination marker check needs HEAD permission on S3 2026-10-14 09:51:59 +02:00

Opened #390 prune never removes the encrypted database a backup left on the destination when its manifest upload failed 2026-10-14 09:52:33 +02:00

Opened #395 A backup while a volume mounted below a configured path is not mounted deletes the older snapshots holding its files under --prune 2026-10-15 00:17:50 +02:00

Opened #397 Rewrite README.md and the other prose documents sentence by sentence, on Fable 2026-10-22 20:16:28 +02:00