/**
 * `GET /api/gate-report` — the Doctor tab's data, composed at serve time.
 *
 * The tab's markup is composed HERE rather than living inside
 * `ui/index.html`, and that is the point of the route. That file is a single
 * 13,000-line zero-build document with a known concurrent-edit hazard where
 * union merges lose braces; a section of this size pasted into it would make a
 * bad merge materially worse, and would put a second copy of the report's
 * markup somewhere no test renders. The console instead gains a small block
 * that asks this route for the fragment.
 *
 * The standalone property `ui/README.md` advertises survives untouched:
 * opening `ui/index.html` from disk still works, and the tab then says — in
 * the report's own three-state vocabulary — that the report could not be
 * derived without a server. That is an honest `unknown`, not an empty panel.
 *
 * Lazy and single-flight, following `/api/setup-readiness`. Tier 2 shells out
 * to `gh`, so building the report at server start would delay the console for
 * a section the operator may never open, and two tabs opened at once must not
 * become two `gh` invocations.
 * @module cli/ui-gate-report
 */
import type * as http from "node:http";
import type { GateReport } from "./gate-report-types.js";
/** What the route returns. */
export interface GateReportResponse {
    /** The scoped fragment the console injects into the Doctor tab. */
    readonly html: string;
    /**
     * The payload the fragment was rendered from.
     *
     * Served alongside the markup so an agent or a script can consume the same
     * verdicts the operator is looking at, without a second derivation that
     * could disagree with the first.
     */
    readonly report: GateReport;
}
/** Injectable boundaries, so tests never shell out or read a real project. */
export interface GateReportDependencies {
    /** Build the report. Defaults to the real emitter. */
    readonly build?: (projectRoot: string) => Promise<GateReport>;
}
/**
 * Build the response for one project.
 * @param projectRoot - Project root served by this UI process
 * @param dependencies - Injectable boundaries
 * @returns The fragment and the payload it came from
 */
export declare function readGateReport(projectRoot: string, dependencies?: GateReportDependencies): Promise<GateReportResponse>;
/**
 * Create the `/api/gate-report` handler for one project.
 * @param projectRoot - Project root served by this UI process
 * @param dependencies - Injectable boundaries
 * @returns A request handler
 */
export declare function createGateReportHandler(projectRoot: string, dependencies?: GateReportDependencies): (request: http.IncomingMessage, response: http.ServerResponse) => void;
//# sourceMappingURL=ui-gate-report.d.ts.map