/** * Projection: per-file provenance → typed `authored_by` / `changed_in_pr` graph * edges (spec-18). The decisions/IaC analogue: git history is the authored source; * this projection is derived and regenerable. Edges hang off existing file nodes — * no person/PR nodes are added to the call graph, keeping it un-bloated (the cap is * applied upstream in the extractor). * * Edge direction is code → context: a file is `authored_by` a person and * `changed_in_pr` a pull request. */ import type { FileProvenance } from './git-provenance.js'; /** file → person. `role: 'last'` marks the last-touch author. */ export interface AuthoredByEdge { kind: 'authored_by'; filePath: string; name: string; email: string; /** Author date of the last-touch commit (only meaningful for role 'last'). */ lastDate?: string; role: 'last' | 'recent'; } /** file → pull request. `title`/`state` present only when `gh` enrichment succeeded. */ export interface ChangedInPrEdge { kind: 'changed_in_pr'; filePath: string; pr: number; title?: string; state?: string; } export interface ProjectedProvenance { authoredBy: AuthoredByEdge[]; changedInPr: ChangedInPrEdge[]; } /** "Name " display key for a person (stable identity). */ export declare function personKey(name: string, email: string): string; export declare function projectProvenance(records: FileProvenance[]): ProjectedProvenance; //# sourceMappingURL=project.d.ts.map