Files
pad/web/src/lib
xarmian 83e5958161 fix(web): classify three more guaranteed pre-write refusals (TASK-2355)
Final review round 2. PRE_WRITE_CODES whitelisted only the copy
handler's own business refusals, so csrf_error, email_not_verified and
a structured internal_error fell through to the outcome-unknown
fallback — telling the user their copy may have committed, sending
them to inspect the destination, and forbidding a retry that is in
fact safe. That is the inverse of the DR-13 hazard and just as wrong:
it sends someone hunting for an item that was never created.

All three are provably pre-write on this route:

  - csrf_error and email_not_verified are rejected by the middleware
    stack before handleCopyItem runs at all.
  - internal_error is emitted here only by resolveAuthorizedCopy
    (handlers_items_copy_resolve.go:128,184), both before the store
    call. A post-commit panic deliberately does NOT emit it —
    afterCopyCommit logs and lets the response stand — and chi's
    Recoverer returns a bodiless 500, which carries no code and so
    still lands in outcome-unknown, which is correct for it.

The ambiguous fallback is unchanged and still catches copy_failed, an
unstructured non-JSON response, a rejected fetch, a timeout, and any
code this list does not name.
2026-07-31 20:09:25 +00:00
..
2026-03-26 01:52:36 +00:00