Files
vaultik/TODO.md
sneak ebd6619638
All checks were successful
check / check (push) Successful in 2m38s
Route scanner output through writer, fix S3 error handling, improve error messages
Scanner now writes all user-facing output to an io.Writer (os.Stdout
when progress is enabled, io.Discard in --cron mode). This fixes the
long-standing issue where --cron still printed progress lines.

S3 HeadObject now properly distinguishes not-found from other errors
instead of swallowing all errors as not-found.

Config/CLI error messages include actionable hints (where to find the
config, how to generate keys, what storage options exist).
2026-06-09 12:31:50 -04:00

1.8 KiB

Vaultik 1.0 TODO

Remaining tasks before 1.0 release.

Must-fix

  1. Scanner uses bare fmt.Printf (bypasses --cron silence)

    • Route all user-facing output through a writer gated by progress/cron flags
    • Affects internal/snapshot/scanner.go (~24 bare print calls)
  2. S3 client error type checking

    • internal/s3/client.go:207 has a TODO for proper error type checking
  3. Error message polish

    • Add actionable suggestions for common failures (missing config, bad storage URL, failed S3 auth, missing age key on restore/verify)
    • Only restore.go currently has the "did you set VAULTIK_AGE_SECRET_KEY?" hint

Done

  • Rclone storage backend
  • Release process (goreleaser, CGO-free cross-compile, checksums)
  • End-to-end integration test (backup → restore → verify → byte-compare)
  • Restore integration tests
  • --prune flag on snapshot create (per-name retention + orphan blob cleanup)
  • Per-name purge retention (--keep-latest per snapshot name, --snapshot filter)
  • CLI surface dedup (removed top-level purge and verify duplicates)
  • Exit codes (create/restore now exit non-zero on failure)
  • Deep verify implemented and wired up
  • Shallow verify timestamp parsing fixed
  • Daemon mode removed
  • Makefile targets separated (lint/test/fmt/check)
  • CGO eliminated (pure-Go SQLite via modernc.org/sqlite)
  • Version set correctly in releases via goreleaser ldflags

Post-1.0

  1. Edge-case tests (empty dirs, symlinks, special chars, multi-GB files, 100k+ small files)
  2. Error-condition tests (network failures, disk full, corrupted/missing blobs)
  3. Parallel blob downloads during restore
  4. Bandwidth limiting (--bwlimit)
  5. Security audit of encryption (verify no plaintext leaks, correct hash computation)
  6. Man pages / richer --help examples
  7. Tag and release v1.0.0