docs(research): Phase 0 convergence — settle OQs, add decision table + ADR backlog

- phase-0.md: fold chronological accretion into a settled posture;
  status -> converged; OQ-BL-01..06 restated as settled-base +
  named residuals; new Convergence section (recommended approach,
  decision table, Phase 1 ADR backlog); plan section marked complete
- iroh-blobs-eval.md: fix crossover numbers (64-128 -> 128-256 KiB,
  matching POC #3 finding A4) and B-finding -> finding-A4 reference
- poc-largeblob-findings.md: summary-table label fix (B-finding ->
  finding A4); align small-blob multiplier with measured 9-10x

Verification: cargo test / clippy -D warnings / fmt --check clean
This commit is contained in:
glm-5.3-flash committed 2026-10-01 13:01:59 +00:00
1 parent 6b278fb490
commit 1f905003d0
3 files changed
+458 -536

No files matched your search

+3 -3
View File
@@ -69,8 +69,8 @@ temp/<uuid>.temp staging (must be same-device as data/)
all (`fs/import.rs:160-221`, `DESIGN.md:71`). iroh couples "hash
overhead" and "storage tier" at the same boundary; under our git-oid
derivation there is no outboard to elide (whole-blob digest only) and
the tier boundary is a pure dispatch choice — POC #3's benchmark says
~64-128 KiB, not 16 KiB (see `poc-largeblob-findings.md`, B-finding).
the tier boundary is a pure dispatch choice — POC #3's benchmark says
~128-256 KiB, not 16 KiB (see `poc-largeblob-findings.md`, finding A4).
- **Crash-consistency story, borrowed as a conclusion** (`DESIGN.md:
126-142`, "files are hard"): persist data+outboard+sizes *first*, the
checksummed bitfield *last*, with truncate-to-zero-on-read marking a
@@ -195,4 +195,4 @@ findings (first-party, measured).
6. Crash-consistency ordering (data first, coverage/index last, with
dirty-marking) — only if partial entries ever exist.
7. The inline threshold concept, re-sized by our own benchmark
(~64-128 KiB crossover, git-blob workload) instead of their 16 KiB.
(~128-256 KiB crossover, git-blob workload) instead of their 16 KiB.
+454 -532
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -48,7 +48,7 @@ rides is alkcall (like alkhttp/alksocks/alktty/alktunnels).
| Streaming get without whole-blob load | **Yes** — fs arm streams a file handle; kv arm one bounded read |
| Fanout (serve while persisting) | **Yes** — one reader task, broadcast channel, store arm + N subscriber arms (finding A3) |
| Range reads on fs | **Yes** — pread-window only; **verification has a real gap** (finding A2) |
| sqlite faster than fs for small blobs | **Confirmed and measured** — ~10× below 16 KiB; crossover ~128-256 KiB (B-finding) |
| sqlite faster than fs for small blobs | **Confirmed and measured** — ~9-10× at 1-16 KiB; crossover ~128-256 KiB (finding A4) |
| Digest = git oid on streaming paths | **Byte-exact vs `git hash-object`** for both put paths |
| Stage-file hygiene | **Verified** — failures (stream error, overflow, early-EOF) leave zero stage files (finding A5) |