/** * @copyright Sister Software * @license AGPL-3.0 * @author Teffen Ellis, et al. * * Intersection synthesizer — v0.7 coverage fix (night-3, DeepSeek-decided). * * The 2026-05-29 harness diagnostic found the neural model emits `intersection_a`/`intersection_b` * with ~0.0001 probability on canonical intersections ("Broadway & W 42nd St") — it never learned * the tags, because the corpus has NO intersection training signal (no generator, and real-data * adapters don't emit intersection-formatted rows). Intersections are 65 of the 376 harness * assertions (17%), all 0% neural. This generator produces the missing signal as a small targeted * supplement shard (synthesis-as-supplement discipline: weight < 0.25, one-and-done). * * Output is a `CanonicalRow` ({raw, components}); the corpus aligner turns it into BIO labels * (B-/I-intersection_a, O on the connector, B-/I-intersection_b). Surface forms of both streets * MUST occur verbatim in `raw` so alignment lands. * * US-idiomatic only (the harness intersection cases are US: "X & Y, City, ST ZIP"). */ import type { CanonicalRow } from "@mailwoman/corpus/types"; export interface IntersectionBaseTuple { locality: string; region: string; /** * ZIP — optional; ~30% of synthetic intersections omit it (idiomatic). */ postcode?: string; country: string; } export interface SynthesizedIntersectionRow { raw: string; components: CanonicalRow["components"]; locale: string; } export interface IntersectionSynthesisOpts { random?: () => number; } /** * Synthesize one US intersection row. Returns null on the rare degenerate case where the two streets collide (so * alignment never has two identical surface forms to disambiguate). */ export declare function synthesizeIntersectionRow(base: IntersectionBaseTuple, opts?: IntersectionSynthesisOpts): SynthesizedIntersectionRow | null; /** * A small built-in US city/region/zip pool for standalone shard generation + tests. */ export declare const DEFAULT_US_BASES: ReadonlyArray; /** * Generate `count` intersection rows over the provided bases (round-robin). */ export declare function generateIntersectionRows(count: number, bases?: ReadonlyArray, opts?: IntersectionSynthesisOpts): SynthesizedIntersectionRow[]; //# sourceMappingURL=intersection.d.ts.map