Wire the v5 store helpers from slice 1 onto net/http routes:
GET /api/projects/:pid/clamps
POST /api/projects/:pid/clamps
PATCH /api/projects/:pid/clamps/:id
DELETE /api/projects/:pid/clamps/:id
POST /api/projects/:pid/cables/:cid/clamps — attach
PUT /api/projects/:pid/cables/:cid/clamps — reorder
DELETE /api/projects/:pid/cables/:cid/clamps/:cmid — detach
frame_id uses the same json.RawMessage tri-state as device/io patches
(absent / null / int) via the existing parseFrameRef helper.
Snapshot endpoint (GET /api/projects/:id) now carries the clamps[] +
cable_clamps[] arrays surfaced by ListClamps + ListCableClamps in
slice 1, so the frontend gets everything in one round-trip.