DIS-009: detached checkout does not make POST/PATCH refuse

GET promises be get ?abc1234 is a detached checkout where "POST and PATCH refuse until you re-attach to a branch", but the detached-wt detector matches the opposite row shape from the one GET actually writes, so neither verb refuses — a user can silently graft commits onto trunk/empty branch from a detached checkout. The goal is to enforce the documented no-commit-while-detached safety invariant. See GET, PATCH, POST.

Issues

GET writes one row shape; the guard checks another; POST has no guard at all.

Blockers

None; the canonical detached row shape needs to be pinned (get #<sha> vs get ?<sha>) and the detector aligned to it.

Planned

Make repro first (CLAUDE.md rule 17), then align detector to GET's emitted shape and add a POST gate.