/**
 * fingerprint.ts — TypeScript port of the feedback-factory dedup fingerprinter.
 *
 * Scar (b) of docs/specs/feedback-factory-migration.md. Byte-exact port of
 * `compute_fingerprint` + its `extract_component` dependency from the reference
 * `the-portal/.claude/scripts/feedback-processor.py` (verified against Dawn's
 * line refs 2026-05-26: compute_fingerprint :227, extract_component :191,
 * SEVERITY sets :182/:186). This decides whether two reports are the SAME bug —
 * the single most correctness-critical port in the migration.
 *
 * Equivalence to the Python is proven EMPIRICALLY by the parity harness
 * (scripts/feedback-factory/fingerprint-parity.mjs), not by reasoning alone:
 * Python and JS differ on regex character classes (`\d`/`\w`/`\b` are Unicode
 * in Python without re.ASCII, ASCII in JS), `.lower()` vs `.toLowerCase()`, and
 * whitespace stripping. The port below mirrors Python's Unicode semantics where
 * JS can (`u` flag + Unicode property escapes); the harness's adversarial corpus
 * (non-ASCII digits, em-dash, NBSP, NFC/NFD, Turkish-İ/ß) is the gate that
 * catches any residual divergence. Do NOT "simplify" a regex without re-running
 * the harness — that is exactly how the silent history-fork ships.
 */
/**
 * Port of Python `extract_component(title)` (:191). Strips a leading [TAG] and a
 * whitelisted severity prefix, then returns the first dotted identifier
 * (e.g. "gitsync.pull") or the first word, lowercased; "" if none.
 *
 * Python `\w` is Unicode (no re.ASCII); JS `\w` is ASCII. We use `\p{L}\p{N}_`
 * under the `u` flag to mirror Python's Unicode word-char semantics. `re.match`
 * is start-anchored — the `^` anchors below make `.match()` equivalent.
 */
export declare function extractComponent(title: string): string;
/**
 * Port of Python `compute_fingerprint(type, title, component="")` (:227).
 * Normalizes the title (lowercase; collapse versions / hashes / bare ints /
 * whitespace) and returns the first 32 hex chars of SHA-256 over
 * `type|component|normalized_title`. `v1.1.0` and `v1.1.1` collapse to the same
 * fingerprint → same bug.
 *
 * Python `re.sub` is global → JS needs the `g` flag. Python `\d`/`\w`/`\b` are
 * Unicode (no re.ASCII): `\d`→`\p{Nd}`, `\w`→`[\p{L}\p{N}_]` under `u`. JS has no
 * native Unicode `\b`; the hash/int strips below keep ASCII-hex/`\p{Nd}` content
 * with `\b` — the parity harness verifies the boundary behavior against the
 * Python on the adversarial corpus.
 */
export declare function computeFingerprint(type: string, title: string, component?: string): string;
//# sourceMappingURL=fingerprint.d.ts.map