3fba933741
Closes F5/F6. The NC PUT handler now evaluates conditional preconditions before body ingestion and returns 412 Precondition Failed when they fail: - If-None-Match: * on an existing target → 412 (create-if-absent) - If-None-Match with matching ETag → 412 (weak compare) - If-Match: * with no current representation → 412 - If-Match with no listed ETag strong-matching the current → 412 The lookup that drives the precondition reuses the same query the handler already needed for the 201-vs-204 distinction, so this adds no extra DB round-trip. Rejected requests skip body ingestion entirely so a 412 doesn't waste megabytes of bandwidth + disk I/O. Test F5/F6 flipped from 'pinned current 204' to assert 412, plus mirror cases F5b/F6b/F6c/F6d covering the legitimate-success paths so logical-operator regressions can't slip past silently.