/** * Deterministic "no test coverage" signal for PR reviews (issue #288). * * `ComplexityReport.files[path].testAssociations` already carries which test * files map to each changed source file, but nothing surfaces it in the * architectural prompt — the agent can't say "you added 3 files with no * tests" without seeing this data. This module serializes it as a * `` block, mirroring the `` / * `` precedents: pre-compute the deterministic fact, * inject it, and let the agent decide whether it matters for this PR. * * `testAssociations` is a required `string[]` that defaults to `[]` in TWO * situations the type can't distinguish: enrichment ran and genuinely found * no test file, OR enrichment never ran (the PR review engine wraps it in * try/catch in `packages/review/src/review-pr.ts` and silently no-ops when the * repo has no test files at all — see `enrichWithTestAssociations` in * `packages/review/src/analysis.ts`). There is no separate flag * for "did enrichment run." To avoid manufacturing gaps out of missing data, * this module keys off PER-FILE entry presence in `complexityReport.files` * rather than trusting every empty array: a changed file with NO entry at all * has no complexity data one way or the other and is skipped, not flagged. An * empty `testAssociations` is only treated as a real gap on a file that DOES * have a report entry. Practically, this also covers "enrichment never ran * for any file" — every lookup misses, so the gap list ends up empty and the * block renders nothing, matching the "absence of data is not evidence of a * gap" principle. */ import type { SignalContext } from './signal-context.js'; /** * Changed files that have a complexity-report entry but no associated test * file. Files with no entry in `complexityReport.files` (not analyzed, or * enrichment never ran) are skipped — absence of data is not evidence of a * gap. Exposed for testing. */ export declare function computeTestCoverageGaps(context: SignalContext): string[]; /** * Render the gap list as a `` block for the agent's initial * message. Returns '' when there are no gaps, so callers can append * unconditionally. Caps at MAX_FILES with an explicit omission note — no * silent truncation. Exposed for testing. */ export declare function renderTestCoverageGaps(gaps: string[]): string; /** * Build the `` section from the review context. Returns '' * when every changed file with complexity data has test associations, or when * no changed file has complexity data at all. */ export declare function renderTestCoverageSection(context: SignalContext): string; //# sourceMappingURL=test-coverage-signals.d.ts.map