/** * What the framework counts as a complete executive summary on a roadmap item * (inbox-intake-bar/AC-3). * * The six labels are the whole contract. They exist so a triage decision can be made * from the top of the file: of the 18 items sitting in one external project's `inbox/` * on 2026-09-23, 13 had no summary at all, so every one of them needed its case * re-derived before anybody could decide anything. That, and not discipline, is why an * inbox only grows. * * Kept apart from `paths.ts` on purpose. That module is *layout* — where items live and * how their frontmatter is edited as text. The six labels are body *shape*, a different * fact with a different reason to change, and a reader looking for "what counts as a * complete summary" should find one file rather than a constant buried in a migration. * * **Deliberately lexical and forgiving.** It finds the heading, then looks for each * label's bolded text anywhere inside that section. Order, line count and contents are * not checked. A stricter parser would flag honest items over formatting, and a report * that cries wolf is one people learn to scroll past — while the condition actually worth * reporting is an *absent* summary, not a differently-shaped one. `Not yet decided.` is a * valid value for any label, so nothing here reads what follows the label. * * @module */ /** The heading every item's body opens with. */ export declare const SUMMARY_HEADING = "## Executive Summary"; /** * The six labels, in the order the skills print them. * * Order is for the message, not for the check — a reported list that matched the * documented order is easier to act on than one in discovery order. */ export declare const SUMMARY_LABELS: readonly string[]; /** * The text of the `## Executive Summary` section, or null when there is no such heading. * * The section ends at the next `## ` heading at the same level, or at the end of the * body. A `###` subheading inside the summary does not end it — not that a summary should * have one, but ending early would report labels that are present. */ export declare function summarySection(body: string): string | null; /** * The body after the executive summary — every section from the next `## ` heading on — or * the whole body when it has no summary, without a leading `# ` title (the page names the item * already). Null when nothing is left (roadmap-view-readability/AC-12, AC-13, AC-15). */ export declare function restOfBody(body: string): string | null; /** The heading of the plain-language summary capture writes after the executive summary (roadmap-cards-revamp/AC-4). */ export declare const PLAIN_HEADING = "## In plain words"; /** The trimmed text of the `## In plain words` section, or null when it is absent or empty. */ export declare function plainSection(body: string): string | null; /** An item's plain summary; `draft` when it was built from the executive summary. */ export interface PlainSummary { text: string; draft: boolean; } /** * The `## In plain words` text, or — when an item has none — a draft of "What it is" and * "Customer value" (roadmap-cards-revamp/AC-1, AC-2). Missing is never an error: the page * shows the draft, and nothing reports the absence (AC-5). */ export declare function plainSummary(body: string): PlainSummary | null; /** Why an item's summary is incomplete. */ export type SummaryGap = /** No `## Executive Summary` heading anywhere in the body. */ { kind: 'absent'; } /** The heading is there; these labels are not. */ | { kind: 'incomplete'; missing: string[]; }; /** * The gap in one item's executive summary, or null when it is complete. * * @param body - The item body, i.e. everything after the frontmatter (`itemBody`). */ export declare function summaryGaps(body: string): SummaryGap | null; /** One line naming what an item's summary is missing, for a report. */ export declare function describeGap(gap: SummaryGap): string; //# sourceMappingURL=summary.d.ts.map