2025-08-12 - 2026-08-12
Overview
36 Pull requests merged by 1 user
Merged
#111 Gate prune's local-cleanup prose on --json, and give make build a rule
Merged
#109 Suppress the startup banner under --json (closes #106)
Merged
#107 Send diagnostics to stderr and stop dropping log attributes (closes #82, closes #97)
Merged
#104 Make the tagged-release path work on Gitea (closes #65)
Merged
#102 Isolate the lint cache per worktree and context-gate the native lint path
Merged
#98 Make the test gate unfakeable and stop test-integration lying (closes #93)
Merged
#95 Record the stale-branch triage and advance TODO.md (closes #71)
Merged
#92 Make a missing CHECK_EPOCH fail the build instead of faking it (closes #91)
Merged
#89 Make script/cibuild unable to report an unearned green (closes #85)
Merged
#86 Correct the Vaultik.UI doc comment about --cron (closes #84)
Merged
#83 List remote snapshots without requiring the private key (closes #64)
Merged
#79 Run the linter at the pinned version locally too (closes #78)
Merged
#77 Finish the lint remediation: script/cibuild exits 0 (closes #61)
Merged
#62 Update golangci-lint to v2.12.2 with canonical config
Merged
#60 Add .editorconfig (refs #59)
Merged
#58 Move schema_migrations table creation into 000.sql with INTEGER version column
Merged
#51 feat: per-name purge filtering for snapshot purge
Merged
#50 feat: concurrent manifest downloads in ListSnapshots
Merged
#45 fix: replace O(n²) duplicate detection with map-based O(1) lookups
Merged
#55 Remove all ctime usage and storage
Merged
#46 schema: add ON DELETE CASCADE to snapshot_files.file_id and snapshot_blobs.blob_id FKs
Merged
#44 fix: add ON DELETE CASCADE to uploads FK on snapshot_id
Merged
#53 Rename blob_fetch_stub.go to blob_fetch.go
Merged
#49 fix: remove destructive sync from ListSnapshots
Merged
#41 Refactor: break up oversized methods into smaller descriptive helpers
Merged
#39 fix: verify blob hash after download and decryption (closes #5)
Merged
#42 Add make check target and CI workflow
Merged
#23 feat: add progress bar to restore operation
Merged
#37 feat: implement --prune flag on snapshot create (closes #4)
Merged
#22 fix: track and report file restore failures
Merged
#30 Return errors from deleteSnapshotFromLocalDB instead of swallowing them (closes #25)
Merged
#34 Disk-based blob cache with LRU eviction during restore (closes #29)
Merged
#36 Add CompressStream double-close regression test (closes #35)
Merged
#31 Use v.Stdout/v.Stdin instead of os.Stdout for all user-facing output (closes #26)
Merged
#32 Validate table name against allowlist in getTableCount (closes #27)
Merged
#33 Prevent double-close of blobgen.Writer in CompressStream (closes #28)
1 Pull request proposed by 1 user
Proposed
#114 next: accumulated work for the upcoming release
54 Issues closed from 2 users
Closed
#103 Two fail-closed defects in the new lint isolation
Closed
#88 golangci-lint cache is shared across worktrees, so lint results can come from another tree
Closed
#110 make build exits 0 without building anything
Closed
#108 pruneLocalSnapshots writes prose to stdout unconditionally, so prune --json | jq still fails after the banner fix
Closed
#106 Startup banner goes to stdout and --json does not suppress it, so every --json document is preceded by three lines of prose
Closed
#82 Logger writes to stdout, so any warning corrupts --json output
Closed
#97 TTYHandler silently discards log.With attributes, so diagnostics differ between terminal and CI
Closed
#65 Make the tagged-release path actually work on Gitea
Closed
#80 Harden the pinned-linter gate: context-gate the native path, and make bootstrap yield a working machine
Closed
#99 script/lint shares one golangci-lint cache across worktrees, so one tree's findings are served for another
Closed
#93 script/test omits -count=1, so Go's test cache can satisfy the gate without running tests
Closed
#69 make test-integration is a silent no-op — no file carries the integration build tag
Closed
#81 The unencrypted manifest publishes backup timestamps and a per-blob size profile
Closed
#100 golangci-lint warns on every run: gomodguard is deprecated, replaced by gomodguard_v2
Closed
#71 Triage the 15 stale remote branches; two may contain unlanded fixes
Closed
#91 Adopt the remaining upstream CHECK_EPOCH hardening (expanded form, unset guard, unique epoch, script/docker)
Closed
#85 script/cibuild reports a green it did not earn when the tree is unchanged
Closed
#84 Vaultik.UI doc comment misdescribes how --cron suppresses output
Closed
#64 snapshot list must list remote snapshots without requiring the private key
Closed
#78 make lint does not use the pinned linter version, so local green does not mean CI green
Closed
#59 Add .editorconfig and the standard .golangci.yml
Closed
#61 Remediate lint findings surfaced by the standard .golangci.yml
Closed
#57 Move schema_migrations table creation into 000.sql with INTEGER version column
Closed
#3 Daemon mode not implemented
Closed
#9 PurgeSnapshots operates across all snapshot names, no per-name filtering
Closed
#14 Manifest is unencrypted — leaks blob count and sizes
Closed
#17 No database migration support — schema changes require full re-backup
Closed
#43 Add branch protection to main branch
Closed
#8 ListSnapshots downloads manifests synchronously for unknown remote snapshots
Closed
#12 RemoveAllSnapshots has O(n²) duplicate detection for snapshot IDs
Closed
#10 syncWithRemote deletes snapshot records without cleaning up related tables
Closed
#54 Remove all ctime usage and storage
Closed
#19 snapshot_files FK on file_id lacks ON DELETE CASCADE
Closed
#18 uploads table FK on snapshot_id lacks ON DELETE CASCADE
Closed
#13 ctime is in schema and model but verify scanner populates it correctly
Closed
#52 Rename blob_fetch_stub.go to blob_fetch.go
Closed
#15 ListSnapshots has destructive side effect: deletes local snapshots not in remote
Closed
#40 Refactor: break up oversized methods (>100-150 lines)
Closed
#1 find bugs or incomplete functionality for 1.0
Closed
#5 Restore: downloaded blob hash is not verified
Closed
#16 PruneBlobs has O(n²) duplicate snapshot ID detection
Closed
#11 Restore: blobCache grows unboundedly, will OOM with large backups
Closed
#20 Restore has no progress bar for file restoration
Closed
#6 deleteSnapshotFromLocalDB silently ignores all errors
Closed
#4 --prune flag on snapshot create is a TODO
Closed
#21 Restore silently continues when individual file restoration fails
Closed
#25 deleteSnapshotFromLocalDB silently swallows all errors and always returns nil
Closed
#7 getTableCount uses fmt.Sprintf for SQL table name — potential SQL injection
Closed
#35 Add regression test for CompressStream double-close fix (#28)
Closed
#26 Multiple methods write to os.Stdout instead of v.Stdout, breaking testability
Closed
#29 Unbounded blob cache during restore can exhaust memory
Closed
#27 SQL injection risk in getTableCount via fmt.Sprintf table name interpolation
Closed
#28 CompressStream double-closes the blobgen.Writer causing potential errors
Closed
#2 Shallow verify path: deep verification is a TODO stub
72 Issues created by 1 user
Opened
#1 find bugs or incomplete functionality for 1.0
Opened
#2 Shallow verify path: deep verification is a TODO stub
Opened
#3 Daemon mode not implemented
Opened
#4 --prune flag on snapshot create is a TODO
Opened
#5 Restore: downloaded blob hash is not verified
Opened
#6 deleteSnapshotFromLocalDB silently ignores all errors
Opened
#7 getTableCount uses fmt.Sprintf for SQL table name — potential SQL injection
Opened
#8 ListSnapshots downloads manifests synchronously for unknown remote snapshots
Opened
#9 PurgeSnapshots operates across all snapshot names, no per-name filtering
Opened
#10 syncWithRemote deletes snapshot records without cleaning up related tables
Opened
#11 Restore: blobCache grows unboundedly, will OOM with large backups
Opened
#12 RemoveAllSnapshots has O(n²) duplicate detection for snapshot IDs
Opened
#13 ctime is in schema and model but verify scanner populates it correctly
Opened
#14 Manifest is unencrypted — leaks blob count and sizes
Opened
#15 ListSnapshots has destructive side effect: deletes local snapshots not in remote
Opened
#16 PruneBlobs has O(n²) duplicate snapshot ID detection
Opened
#17 No database migration support — schema changes require full re-backup
Opened
#18 uploads table FK on snapshot_id lacks ON DELETE CASCADE
Opened
#19 snapshot_files FK on file_id lacks ON DELETE CASCADE
Opened
#20 Restore has no progress bar for file restoration
Opened
#21 Restore silently continues when individual file restoration fails
Opened
#25 deleteSnapshotFromLocalDB silently swallows all errors and always returns nil
Opened
#26 Multiple methods write to os.Stdout instead of v.Stdout, breaking testability
Opened
#27 SQL injection risk in getTableCount via fmt.Sprintf table name interpolation
Opened
#28 CompressStream double-closes the blobgen.Writer causing potential errors
Opened
#29 Unbounded blob cache during restore can exhaust memory
Opened
#35 Add regression test for CompressStream double-close fix (#28)
Opened
#40 Refactor: break up oversized methods (>100-150 lines)
Opened
#43 Add branch protection to main branch
Opened
#52 Rename blob_fetch_stub.go to blob_fetch.go
Opened
#54 Remove all ctime usage and storage
Opened
#57 Move schema_migrations table creation into 000.sql with INTEGER version column
Opened
#59 Add .editorconfig and the standard .golangci.yml
Opened
#61 Remediate lint findings surfaced by the standard .golangci.yml
Opened
#64 snapshot list must list remote snapshots without requiring the private key
Opened
#65 Make the tagged-release path actually work on Gitea
Opened
#66 Add tests for internal/storage — the backend abstraction has zero coverage
Opened
#67 Docs misstate the remote layout and understate the privacy guarantee
Opened
#68 Reconcile the schema/migration story across code and four documents
Opened
#69 make test-integration is a silent no-op — no file carries the integration build tag
Opened
#70 Delete dead code and stale fixtures before tagging
Opened
#71 Triage the 15 stale remote branches; two may contain unlanded fixes
Opened
#72 Fault-injection tests: prove backups survive interruption and corruption
Opened
#73 Security review of the crypto and blob-generation seams
Opened
#74 Documentation accuracy sweep: undocumented behavior and stale claims
Opened
#75 Docker builds report unknown version, and profiling output is truncated on error
Opened
#76 Decide on renaming internal/log, internal/crypto and internal/types (revive var-naming)
Opened
#78 make lint does not use the pinned linter version, so local green does not mean CI green
Opened
#80 Harden the pinned-linter gate: context-gate the native path, and make bootstrap yield a working machine
Opened
#81 The unencrypted manifest publishes backup timestamps and a per-blob size profile
Opened
#82 Logger writes to stdout, so any warning corrupts --json output
Opened
#84 Vaultik.UI doc comment misdescribes how --cron suppresses output
Opened
#85 script/cibuild reports a green it did not earn when the tree is unchanged
Opened
#87 --cron flag help text misstates what it suppresses
Opened
#88 golangci-lint cache is shared across worktrees, so lint results can come from another tree
Opened
#90 golangci-lint deprecation: gomodguard replaced by gomodguard_v2
Opened
#91 Adopt the remaining upstream CHECK_EPOCH hardening (expanded form, unset guard, unique epoch, script/docker)
Opened
#93 script/test omits -count=1, so Go's test cache can satisfy the gate without running tests
Opened
#94 Decide whether feature/daemon-mode is 1.0 scope
Opened
#96 getTableCount errors are discarded, so a failed query reports as a count of zero
Opened
#97 TTYHandler silently discards log.With attributes, so diagnostics differ between terminal and CI
Opened
#99 script/lint shares one golangci-lint cache across worktrees, so one tree's findings are served for another
Opened
#100 golangci-lint warns on every run: gomodguard is deprecated, replaced by gomodguard_v2
Opened
#101 REPO_POLICIES.md mandates a 30s test timeout that is too tight to be safe
Opened
#103 Two fail-closed defects in the new lint isolation
Opened
#105 The Go toolchain in the release workflow is version-pinned but not hash-verified
Opened
#106 Startup banner goes to stdout and --json does not suppress it, so every --json document is preceded by three lines of prose
Opened
#108 pruneLocalSnapshots writes prose to stdout unconditionally, so prune --json | jq still fails after the banner fix
Opened
#110 make build exits 0 without building anything
Opened
#112 Under --json, prune deletes local index rows with no signal in either stream
Opened
#113 Run all linting in Docker via Dockerfile.lint + script/lint
Opened
#115 Host-lint guard scanner goes blind on a phantom heredoc and accepts a || host fallback