import { type IntentAcknowledgementArtifact } from "./release-intent-artifact.js"; export type SemverClass = "patch" | "minor" | "major"; export interface MergedPr { number: number; title: string; semverLabels: string[]; milestone: string | undefined; } export interface MilestoneItem { number: number; isPr: boolean; state: "open" | "closed"; merged: boolean; title: string; labels: string[]; } /** Audit record for a commit-subject `(#N)` ref that named an issue, not a PR, and * was substituted with the issue's unique closing merged PR via GitHub evidence. */ export interface ResolvedIssueRef { issue: number; pr: number; evidence: string; } export interface ResolvedCommitRef { sha: string; pr: number; evidence: string; } export interface PreflightData { repository: string; previousTag: string; candidateSha: string; /** Squash-merge subjects since previousTag, e.g. `fix: thing (#123)`. */ commitSubjects: string[]; /** Parallel commit identities for live attribution. Fixture callers may omit them. */ commitShas?: string[]; mergedPrs: MergedPr[]; cutMilestone: string; milestoneItems: MilestoneItem[]; packageVersion: string; versionConstant: string; /** Maintainer-declared scope for this cut; required before a release PR opens. */ declaredIntent?: SemverClass; /** Resolved public escalation acknowledgement, bound to the tracker and release inputs. */ intentAcknowledgementArtifact?: IntentAcknowledgementArtifact; /** Diagnostic from live acknowledgement resolution; never trusted as evidence. */ intentAcknowledgementFailure?: string; /** Commit-subject `(#N)` refs that named an issue, not a PR, resolved to their * unique closing merged PR via GitHub evidence. Recorded for auditability. */ resolvedIssueRefs?: ResolvedIssueRef[]; /** Rebase-merged commits whose subjects omit `(#N)`, attributed by GitHub. */ resolvedCommitRefs?: ResolvedCommitRef[]; /** Diagnostics for commit-subject `(#N)` refs that resolved as neither a PR nor a * unique closing merged PR. Never trusted as evidence; always a named finding. */ unresolvedPrRefFindings?: string[]; } export interface Finding { code: string; detail: string; } export interface Manifest { previousTag: string; candidateSha: string; cutMilestone: string; mergedPrs: MergedPr[]; cancelledPrs: number[]; /** Issue-ref → merged-PR substitutions made during gathering, e.g. a squash title * that cites the tracking issue instead of its own PR number (see #382, #424). */ resolvedIssueRefs: ResolvedIssueRef[]; resolvedCommitRefs: ResolvedCommitRef[]; declaredIntent: SemverClass | undefined; computedBump: SemverClass | undefined; intentEscalation: boolean; intentAcknowledged: boolean; intentAcknowledgementArtifact: IntentAcknowledgementArtifact | undefined; requiredIntentAcknowledgement: string | undefined; nextVersion: string | undefined; findings: Finding[]; ok: boolean; } export declare function nextVersionFrom(tag: string, bump: SemverClass): string | undefined; export declare function intentAcknowledgementToken(candidateSha: string, declaredIntent: SemverClass, computedBump: SemverClass): string; /** `Revert "..."` pairs cancel: neither the revert nor its target counts toward the bump. */ export declare function cancelledReverts(prs: readonly MergedPr[]): Set; export declare function runPreflight(data: PreflightData): Manifest; interface GitCommit { sha: string; subject: string; } /** Parse Git's exact newline-delimited `%H%s` record format without trimming subjects. */ export declare function parseGitLog(raw: string): GitCommit[]; export declare function associatedMergedPrNumber(value: unknown): { kind: "resolved"; number: string; } | { kind: "unresolved"; reason: string; }; export {};