Files
amethyst/commons
Claude 70252ea08a fix: kind-38000 audit findings
- Unrecognised 38000s fell back to a plain Event, which stores do not key
  by `d` (they test `is AddressableEvent`): a spam bot republishing one
  address kept every copy, an `a`-tag deletion missed them, and a newer
  junk version never replaced an older recommendation. They are now
  UnrecognizedKind38000Event — addressable, never indexed, no card — and
  EventCache files them as addressables instead of logging each one's
  JSON at WARN.
- The card's blank-line regex rescanned long whitespace runs from every
  position: a crafted ~64 KB description froze the main thread for
  seconds. Collapsed line by line instead.
- The fee printed Double.toString ("4.21%" beside German "100.000 sats",
  "NaN%" for junk). New locale-aware formatDecimal (expect/actual);
  non-finite or negative fees are dropped.
- The status badge and the closing-time line read the clock at different
  moments, and a market declared closed before its end read "Closed <a
  future date>". Both now read the same moment; a closed-early market
  states no closing time.
- Outcomes are (id, label): `resolution` names the id, the card shows
  the label — `["outcome","opt1","Foundry USA"]` and `{"id":"A",
  "label":"Foundry"}` resolved to "A" now mark their winner. Deduped by
  set and capped at 64 against crafted floods.
- isMintRecommendation accepts any `k` naming a mint kind (not only the
  first) and a recommendation that names its mint only by `a`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CsFEX4ZT8mL1r8h2M6qfH
2026-10-01 13:02:32 +00:00
..
2026-10-01 13:02:32 +00:00