docs: backfill commit hash for Phase 2.4 row

ober

1108c0281dd268c98ee33a4f09aaa4976a2a9a17

diff --git a/plan.md b/plan.md
index c3fb441..09e15a8 100644
--- a/plan.md
+++ b/plan.md
@@ -74,7 +74,7 @@ sorted (e,a,v,tx) order and keeping only the highest-tx datom per
 | 2.1 | Batched VALUES INSERT for analytics-sync | `cad68b5` | sync 124s → 11.7s (later superseded by 2.4) |
 | 2.2 | `:in` input substitution + `SELECT DISTINCT` | `0417ea6` | Datalog→SQL parity for non-trivial queries |
 | 2.3 | Auto-route eligible queries via `current-analytics-engine` | `66ba53c` | transparent 5× on Q4, 88× on Q8 |
-| 2.4 | COPY-FROM-CSV bulk sync (replaces batched INSERT VALUES) | (this commit) | sync 127s → 2.6s at 10% scale (49×) |
+| 2.4 | COPY-FROM-CSV bulk sync (replaces batched INSERT VALUES) | `1eaca41` | sync 127s → 2.6s at 10% scale (49×) |
 | 3 | LSM staging buffer + tempid hashtable + fulltext O(n²) fix | `6207c2d` | 47× ingest (the discovery: not RB-tree depth, but fulltext word-list `(member ...)` per insert) |
 | 4 | `defquery` macro | — | **deferred** — auto-routing already covers the win |
 | 5 | Final benchmark + writeup | `bdb00d5` + this | parity story below |