Skip to content

feat(errors): fingerprint v3 grouping with a version-salted hash - #1466

Merged
Makisuo merged 8 commits into
mainfrom
feat/error-fingerprint-v3
Oct 14, 2026
Merged

Makisuo merged 8 commits into
mainfrom
feat/error-fingerprint-v3

test(errors): run the errors tick over the v3 fingerprint in real Cli…

f68d27e
Select commit
Loading
Failed to load commit list.
Maple Review Bot / Maple / review succeeded Oct 14, 2026 in 6m 53s

Confidence 8/10 · No issues found

🟢 Confidence 8/10 · likely safe to merge
The risky part — hash rotation, archiving and restore — is pinned end to end by two ClickHouse e2e suites; the 2,148-line v30 snapshot SQL went unread.
quality 100/100 · no findings · tests covered · risk high

Fingerprint v3: version-salted hashes, new frame and message-signature rules, a ClickHouse MV recreation (0039), local schema v30, and restore of archived error issues on recurrence. The MV SQL and its TS mirror apply the same chain, and the parity is pinned by ClickHouse e2e tests.

  • FINGERPRINT_VERSION is 3 and 'fp3' is hashed into FingerprintHash, so every issue hash rotates
  • Namespaced exception types keep one frame; Effect span and schema key-path lines are not frames
  • ERROR_MSG_REDACTIONS cuts ClickHouse query echoes and redacts FS paths, prefixed ids and ULIDs
  • The errors tick restores an archived, non-done issue on its next occurrence

Before merge

  • Migration · Check it is safe on production data and with the code still deployed · packages/domain/src/clickhouse/migrations/0039_error_fingerprint_v3.ts
  • Manual · Warn users before cutover: every open error issue is archived and returns as a new triage issue without assignee, priority, notes or snooze
  • Manual · Self-hosted ClickHouse orgs must apply schema migration 0039, or they keep producing v2 hashes that reopen archived issues
What was checked
  • MV SQL and TS mirror apply the same redaction order (materializations.ts:828, fingerprint.ts:202, 0039_error_fingerprint_v3.ts:23)
  • Both error_events MVs carry the salt and v3 frame rules (local-schema.sql:1091, :1161, :1259)
  • Frame selector matches in RE2 and JS: position(line,'(definition)') = 0 vs !line.includes(...)

f68d27e · Updated on every push. Reply "won't fix" to dismiss a finding, or mention @maple-review-bot to ask about one.