This commit represents a significant architectural overhaul of vaultik: Database Schema Changes: - Switch files table to use UUID primary keys instead of path-based keys - Add UUID primary keys to blobs table for immediate chunk association - Update all foreign key relationships to use UUIDs - Add comprehensive schema documentation in DATAMODEL.md - Add SQLite busy timeout handling for concurrent operations Streaming and Performance Improvements: - Implement true streaming blob packing without intermediate storage - Add streaming chunk processing to reduce memory usage - Improve progress reporting with real-time metrics - Add upload metrics tracking in new uploads table CLI Refactoring: - Restructure CLI to use subcommands: snapshot create/list/purge/verify - Add store info command for S3 configuration display - Add custom duration parser supporting days/weeks/months/years - Remove old backup.go in favor of enhanced snapshot.go - Add --cron flag for silent operation Configuration Changes: - Remove unused index_prefix configuration option - Add support for snapshot pruning retention policies - Improve configuration validation and error messages Testing Improvements: - Add comprehensive repository tests with edge cases - Add cascade delete debugging tests - Fix concurrent operation tests to use SQLite busy timeout - Remove tolerance for SQLITE_BUSY errors in tests Documentation: - Add MIT LICENSE file - Update README with new command structure - Add comprehensive DATAMODEL.md explaining database schema - Update DESIGN.md with UUID-based architecture Other Changes: - Add test-config.yml for testing - Update Makefile with better test output formatting - Fix various race conditions in concurrent operations - Improve error handling throughout
1.6 KiB
Rules
Read the rules in AGENTS.md and follow them.
Memory
-
Claude is an inanimate tool. The spam that Claude attempts to insert into commit messages (which it erroneously refers to as "attribution") is not attribution, as I am the sole author of code created using Claude. It is corporate advertising for Anthropic and is therefore completely unacceptable in commit messages.
-
Tests should always be run before committing code. No commits should be made that do not pass tests.
-
Code should always be formatted before committing. Do not commit unformatted code.
-
Code should always be linted before committing. Do not commit unlinted code.
-
The test suite is fast and local. When running tests, don't run individual parts of the test suite, always run the whole thing by running "make test".
-
Do not stop working on a task until you have reached the definition of done provided to you in the initial instruction. Don't do part or most of the work, do all of the work until the criteria for done are met.
-
We do not need to support migrations; schema upgrades can be handled by deleting the local state file and doing a full backup to re-create it.
-
When testing on a 2.5Gbit/s ethernet to an s3 server backed by 2000MB/sec SSD, estimate about 4 seconds per gigabyte of backup time.
-
When running tests, don't run individual tests, or grep the output. run the entire test suite every time and read the full output.
-
When running tests, don't run individual tests, or try to grep the output. never run "go test". only ever run "make test" to run the full test suite, and examine the full output.