/**
 * Phase 7 — tag deduplication and normalisation (Task 596).
 *
 * Two passes:
 *
 * Pass A — KnowledgeDocument nodes with a `tags` string-array property.
 *   For each node, normalise every tag (lowercase, strip non-alphanumeric
 *   except hyphens/underscores/spaces, trim), deduplicate, and write back
 *   only when the normalised array differs from the original.
 *
 * Pass B — :DefinedTerm {category:'obsidian-tag'} nodes.
 *   Group by normalised name. For each group with more than one variant,
 *   pick the first alphabetically as canonical, retarget all :TAGGED_WITH
 *   edges from non-canonical nodes to the canonical node, then detach-delete
 *   non-canonical nodes that become edge-free.
 *
 * `applied` = number of KD nodes updated + number of DefinedTerm non-canonical
 *   variants whose :TAGGED_WITH edges were retargeted (whether or not the node
 *   was subsequently deleted — deletion is blocked when other edges exist).
 */
import type { PhaseContext, PhaseResult } from "./index.js";
/** Normalise a tag string: lowercase, strip non-alphanumeric-separator chars, trim. */
export declare function normaliseTagStr(tag: string): string;
export declare function phaseTagNormalisation(ctx: PhaseContext): Promise<PhaseResult>;
//# sourceMappingURL=phase-tag-normalisation.d.ts.map