next: - file check in/out - drive: deletion - drive: think through child index creation - drive+network sync - drive+network broadcast - bitfield stuff (un-indexed) https://docs.rs/bit_field/0.8.0/bit_field/trait.BitArray - secret_key-in-home helpers (read/write) - 'geniza clone' command - 'geniza checkout' command - 'geniza init', 'geniza commit' commands - 'geniza broadcast' command - API to link and run from, eg, python meta: - travis tests (linux, osx) misc: specific tests: - sleep info a variety of bad sleep files, should error - sleep create a known file, should be same as empty (also a "Rot13" algo file) - create a register, binary compare against known-good - test vectors of leaf, parent, and root hashes - test vectors of signatures - cloning with metadata pointing to relative or absolute paths ("dir/../../../../etc/passwd") APIs: - trait: register - trait: drive - SLEEP file - SLEEP register - SLEEP drive - peer (multiple transit types) - synchronizer (register, peers, discovery) Old API: sleep: SLEEP file I/O register: hypercore registers/journal streams, signing drive: hyperdrive sync: dat network protocol, discover geniza: command line, swarm Backburner: - benchmarks! syscall counts (strace), timing, etc - test fault injection... with strace? - consider kafka (append performance) and sqlite (robustness) file I/O patterns - manpage - slog for logging - lru caches - disable sodiumoxide serde feature - sodiumoxide static link https://safenetforum.org/t/building-a-non-dynamically-linked-executable-of-safe-vault/9811/6 - SLEEP API: should just be empty string for algo-name, not Option<> - I have the SLEEP/register naming wrong... sleep refers to the directory? - portable positional file I/O https://github.com/vasi/positioned-io - mmap https://docs.rs/scroll/0.7.0/scroll/ - switch to byteorder for endian reads/writes - --json args to most CLI commands - ruthlessly simplify APIs - SleepFile from existing File (api) - refactor key generation into generic/re-usable function - turn magic numbers in tree nodes into declared (public?) constants - root_nodes as an iterator? (vs returning a Vec) - pretty terminal output: https://crates.io/crates/colored