/** * The commit-leg gate for back-compat windows that have CLOSED. * * `peaks request transition` stays soft on purpose: `missingPrerequisiteWarning` * reports a closed window as a warning so the workflow can still reach * `qa-handoff` and record the skip. This module is the other boundary. It * refuses a closed, missing window unless the tracked acceptance list carries a * current entry for that exact `path` + `until` pair. * * A MISSING LIST IS A FAILURE, NOT AN OPT-OUT. The commit leg is the hard * boundary the product asked for, so absence is reported like any other * malformed list. The remediation names the seeding path — `peaks workspace * init` writes the tracked list — and the LLM performs it; the user speaks or * picks, and never hand-authors JSON. * * WHO EDITS THE LIST. The LLM does, on the user's behalf: the user speaks or * picks, and the tracked JSON is a reviewed diff the LLM authors. No message * here asks a human to hand-author JSON. * * WHY THE GATE LIVES HERE AND NOT IN `artifact-prerequisites.ts`. That file is * over the file-size cap and a change may only shrink it, so this is the same * split its `prerequisite-checks.ts` sibling took. The public name is still * exported from `artifact-prerequisites.ts`; that module re-exports it, so * every caller keeps one import site. * * ONE RESOLVER, ONE COMPARATOR. Path resolution and the session-root tiers are * the ones the transition uses, and window comparison is * `compareReleaseVersions`, so the two legs cannot disagree about whether an * artifact exists or where a boundary sits. */ import type { RequestType } from './artifact-prerequisites.js'; /** The seeded list a new project receives, and the reason each window is * accepted. `reviewBy` is DERIVED at seed time from the installed release, so a * project initialized on a release boundary receives a current list rather * than an already-expired one; it is bounded by the same two-minor cap the gate * enforces. * * THE `mut/mut-report.json` WINDOW IS NOT SEEDED (retired 2026-10-24). Its * stated reason was FALSE — `peaks tact read` is a registered command and * `peaks mut run` produces a real mutation report — so accepting the absence * would hand every new project a debt that does not exist. The WINDOW is * untouched (`artifact-prerequisites.ts` still carries `backCompat: true`, so a * missing report is still a soft pass); only the ACCEPTANCE of it is retired. */ export declare function backcompatAcceptanceSeed(installedVersion?: string): string; /** * Seed the tracked acceptance list for a project that has none. Idempotent: an * existing file is never overwritten, so a project's reviewed entries survive * every `peaks workspace init`. Called by `initWorkspace`. */ export declare function seedBackCompatAcceptance(projectRoot: string): void; export type ExpiredBackCompatCommitGateOptions = { projectRoot: string; /** The evidence scope. Without one no artifact resolves, so every closed * window is judged missing — the fail-closed answer. */ sessionId?: string | undefined; requestType: RequestType; requestId: string; /** Injected so a caller can drive both sides of a window boundary; defaults * to the release this build ships. */ installedVersion?: string | undefined; }; /** * The COMMIT-LEG verdict on back-compat windows that have closed. * * The table is read through the same accessor the transition uses, and the * import is dynamic because `artifact-prerequisites.ts` re-exports this module: * a static edge back would close a runtime import cycle. Same idiom, same * reason, as the lazy producer imports in `request-commands.ts`. */ export declare function checkExpiredBackCompatCommitGate(options: ExpiredBackCompatCommitGateOptions): Promise<{ violations: string[]; warnings: string[]; }>;