07e83fe36c
Core removed `POST /matches/result` as an economy path: it had no transaction and no idempotency key, so it re-credited the same match on every call. The two EA result routes and the dashboard now target `POST /matches/complete`. The dashboard mints a fresh `match_identity` per submission — each click is a distinct match — and opts into `expire_loans` / `advance_season`, which the old route used to trigger implicitly. The mapper entries and the endpoint map record that a body must carry `match_identity`; those EA mappings were already marked "Needs capture", so the body shape stays unverified either way.