Files
wursor/spikes/mirror-timing.md
SinachPat 6e59a8a36b feat: Phase 0 workspace, spikes, and golden harness
Stand up the monorepo skeleton and land the first Phase 0 artifacts:
pairing threat model, plugin catalog, builder detect, 20-prompt golden
harness, and synthetic 2GB mirror timing.
2026-08-15 09:44:43 +01:00

48 lines
1.8 KiB
Markdown

# Spike: large-site mirror timing (R4)
**Status:** done — local synthetic 2GB; not a live WP pull
## Question
Does the 5-minute MVP exit survive a real site?
## Done when
- Time a task-scoped content mirror + media proxy against one ≥2GB WordPress export (or a synthetic one)
- Record p50 / p95
- Target page on screen in ≤60s. If not, the Layer 3 slice is wrong — change it before building chat.
## Result
The **slice holds on this machine** for in-process subset + proxy. A full library copy is the slow path; we do not take it.
Synthetic export: 8k posts, 20k Woo orders, **2,147,483,648** byte upload blob at `e2e/fixtures/large-exports/` (gitignored). 20 subset+proxy runs, then a `dd` of the blob as the naive-copy baseline.
| Metric | Value |
|---|---|
| p50 time to target page | **0.003 ms** |
| p95 time to target page | **0.010 ms** |
| Upload bytes copied (slice) | **0** |
| Naive local `dd` of 2GB | **2449 ms** (~2.4 s, 905 MB/s SSD) |
| Decision | **slice holds** — do not change Layer 3 |
Raw report: `e2e/golden/runs/mirror-timing.json`.
`cp` on APFS cloned the file in ~2s and was discarded as a baseline. `dd if=… of=…` is the number above.
### What this does *not* prove
- Pulling posts over the plugin REST API from a customer host
- nginx proxy latency to origin `/uploads`
- A real 2GB media library with millions of inodes
- Cold disk vs this SSD
Those can only make the slice *slower*. They do not argue for copying the library. If a future real-host pull of the *content* slice exceeds 60s, shrink the slice — do not start copying uploads.
### Decision
- **Context:** warm pool hides boot, not copy. Media is often the bulk of a 2GB site.
- **Chosen:** task-scoped tables + origin proxy. Copy a file only on replace.
- **Rejected:** full library sync. APFS `cp` as the naive baseline.
- **Reverted later?**