/** * @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. The corpus has no generator. * 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 source (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 "#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 recipe-output 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