export interface CandidateResult { ref: string; applied: number[]; rejected: number[]; /** Squash-merged cleanly but staged nothing — the diff is already on the base. */ alreadyApplied: number[]; } export interface GitOps { primaryRoot(): string; defaultBranch(): string; fetchOrigin(): void; originHeadSha(branch: string): string; treeOf(ref: string): string; ensureGateWorktree(): string; /** Detached checkout of an exact SHA in the gate worktree (bootstrap * preflight runs the full gate there). Clears crashed-merge leftovers * first, fetches the object when absent locally. Returns the gate dir. */ checkoutDetachedInGate(sha: string): string; /** Fast-forward the PRIMARY worktree to the bootstrap merge commit. `gh pr * merge` updates only the remote, so the local primary tree lacks the * just-landed queue files (poller script, config) until this fetch + * fast-forward — without it the post-merge scheduler arm * (`buildPostMergePollerJob(primary)`) throws on the missing script. Fetches * origin, then `merge --ff-only` primary to the exact merge SHA. */ syncPrimaryToMerge(mergeSha: string): void; constructCandidate(batchId: string, prs: { pr: number; headSha: string; }[], base: string): CandidateResult; deleteCandidate(batchId: string): void; listCandidateRefs(): string[]; } export declare function createGitOps(repoRoot: string): GitOps; //# sourceMappingURL=git.d.ts.map