/**
 * Repo test manifest — `.trellis/tests.json`
 *
 * Suites define shell commands; issues reference suite ids on criteria.
 * Promote gates read `promote.require`.
 */
export interface TestSuiteDef {
    description?: string;
    command: string;
    timeoutMs?: number;
    /** When `browser`, runs via desk relay + extension instead of shell exec. */
    kind?: 'shell' | 'browser';
    /** Path relative to repo root for browser verify steps JSON. */
    stepsFile?: string;
}
/** Template for auto-attached acceptance criteria on `issue start`. */
export interface CriterionTemplate {
    description: string;
    command?: string;
    suite?: string;
}
/** Reviewer / QA ladder — suite ids for static check then e2e. */
export interface ReviewLadderConfig {
    check?: string;
    e2e?: string;
}
export interface TestManifest {
    version: number;
    defaultSuite?: string;
    suites: Record<string, TestSuiteDef>;
    promote?: {
        require?: string[];
    };
    /** Reviewer ladder: check suite then e2e suite (see resolveReviewLadder). */
    review?: ReviewLadderConfig;
    /** Base criteria added on `issue start` when the issue has none yet. */
    issueStart?: {
        default?: CriterionTemplate[];
    };
    /** Extra criteria per issue label (e.g. needs-e2e → e2e suite). */
    issueLabels?: Record<string, CriterionTemplate[]>;
}
export interface ResolvedReviewLadder {
    checkSuiteId: string;
    e2eSuiteId: string;
    check: TestSuiteDef;
    e2e: TestSuiteDef;
}
export declare function testManifestPath(rootPath: string): string;
export declare function loadTestManifest(rootPath: string): TestManifest | null;
export declare function requireTestManifest(rootPath: string): TestManifest;
export declare function resolveSuite(manifest: TestManifest, suiteId: string): TestSuiteDef;
export declare function suiteTimeoutMs(suite: TestSuiteDef): number;
export declare function listSuiteIds(manifest: TestManifest): string[];
/** Suites required before lane promote when --require-test is set. */
export declare function getPromoteRequiredSuites(manifest: TestManifest): string[];
/**
 * Resolve reviewer ladder suite ids from manifest.review or command heuristics.
 */
export declare function resolveReviewLadder(manifest: TestManifest): ResolvedReviewLadder;
export declare function resolveCriterionCommand(manifest: TestManifest | null, criterion: {
    command?: string;
    suite?: string;
}): string | undefined;
/** Deduped criteria templates for a new issue from manifest defaults + labels. */
export declare function resolveIssueStartCriteria(manifest: TestManifest | null, labels: string[]): CriterionTemplate[];
export declare const DEFAULT_TEST_MANIFEST: TestManifest;
/** Write `.trellis/tests.json` when missing (e.g. on `trellis init`). */
export declare function ensureDefaultTestManifest(rootPath: string, template?: TestManifest): boolean;
//# sourceMappingURL=test-manifest.d.ts.map