[aside] `post_embeddings` に対する cosine boilerplate(active_model CTE + 0.4 cutoff)が related-posts と tag-suggestions で二重化した。

#296 の `web/src/tag-suggestions.tsx` は、`web/src/related-posts.tsx` の「最高カバレッジ model を active_model CTE で自動選択 → `list_cosine_similarity` → 弱一致を `sim >= 0.4` で捨てる」パターンをほぼ写経した。cutoff 0.4 は「この corpus で cosine が 0.5-0.7 に固まる」= 現 model(model2vec potion)に calibrate された値で、両ファイルが独立にハードコードしている。

触らない判断: #296 は機能追加が本題。共有の cosine-neighbours helper に寄せるのは別軸の小 refactor。

想定インパクト: producer を動的 neural model に差し替える(embedding-axes-spike の次手)と、calibrate された cutoff と active_model 選択を 2 箇所 lockstep で直す要が出る。トリガー = cosine consumer が 3 本目に増えるとき、または embedding model を差し替えるとき(neighbours クエリを 1 helper に抽出)。