aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CLAUDE.md8
-rw-r--r--docs/USERGUIDE.md15
2 files changed, 23 insertions, 0 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index ad215d5..6701d7d 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -254,6 +254,14 @@ keypair bundle, or anything that looks like a user's public key.
`deploy-hub.sh` runs `alembic upgrade head` before restarting the service; a schema
change that skips a migration file will still pass every test you have
+- **Some paths only exist in a browser, and only one browser has them.** The
+ download-to-disk story is three different mechanisms — File System Access
+ (Chrome/Edge), a service worker streaming a response (Firefox/Safari), and a
+ blob as the floor — and no test in this repo exercises any of them.
+ `test_downloads.py` pins the contracts by reading the source; the behaviour
+ needs a person with a large file. Confirmed by the operator on 2026-08-15:
+ Firefox, 180 MB, written to disk. Nothing multi-gigabyte has been measured
+
**Corrections to remember:**
- `punch_nat()` is **not** a NAT traversal stack — one UDP probe, no STUN, no candidate
gathering, one ISP validated. **ICE/STUN (WebRTC) is the traversal path**, for native
diff --git a/docs/USERGUIDE.md b/docs/USERGUIDE.md
index 8a55928..d6ce327 100644
--- a/docs/USERGUIDE.md
+++ b/docs/USERGUIDE.md
@@ -556,6 +556,21 @@ from a page. If even that is unavailable, a download under 512 MB is collected i
memory and handed over; a larger one asks where to put it, because a tab does not
survive a multi-gigabyte blob.
+**What has been exercised**, as of 2026-08-15, so the next person knows which of
+this is measured and which is designed:
+
+| Path | Browser | State |
+|---|---|---|
+| Streamed into a granted folder | Chrome | works |
+| Streamed by the service worker | Firefox | works — 180 MB, written to disk |
+| Collected in memory (no folder, no worker) | any | works, bounded at 512 MB |
+| Save As for a download over 512 MB | Chrome | works |
+| Multi-gigabyte download, any path | — | designed for, not yet measured |
+
+The 180 MB run is the one that matters most, because the service worker is the
+only way Firefox writes a download to disk rather than building it in a tab. It
+has not been tried at the scale it exists for.
+
A finished download offers **Open** in the transfers widget when it went into a
folder you granted: the file is handed to a new tab and the browser decides what
to do with it. That is the whole of what a web page can do here — it cannot start