aboutsummaryrefslogtreecommitdiffstats
path: root/TODO
blob: 7663eb34026a5c4267fc907dd50d5b0ae2260388 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

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