import type { DigestAction } from "../internals/plan.js"; export interface V4Radar { labels: string[]; values: number[]; } export interface V4Maturity { overall: number; grade: string; } /** A bound LIVE section: real header text + the `.grid` inner HTML, server-rendered. */ export interface V4Section { title: string; /** sec-insight inner HTML (may contain ``/``). */ insight: string; /** sec-count chip text (optional). */ count?: string; /** `.grid` inner HTML — the section's cards. */ grid: string; } export interface AihDataV4 { /** Maturity radar (5 axes 0–100) — present only when the scorecard ran (on-canon). */ radar?: V4Radar; /** Overall harness-health score + tier — present only when the scorecard ran. */ maturity?: V4Maturity; /** sectionId → bound live content (absent → the section is hidden in the live view). */ sections: Record; /** sectionId → is this LIVE panel backed by real data yet. */ gates: Record; } export interface ReportHtmlV4Options { /** Seconds for a meta-refresh (live mode). Absent → the page does not auto-refresh. */ refresh?: number; /** Open with the embedded DEMO dataset shown by default. */ demo?: boolean; } /** * Build the v4 view-model from the report's digests. Pure + deterministic: the only * inputs are the digest `.data` bags (no wall-clock, no IO), so the same report * renders byte-identically across runs. */ export declare function buildAihDataV4(digests: DigestAction[]): AihDataV4; /** * Post-render hydration injected after the prototype's own script (so it runs after * `initAll()`): binds the hero + every bound section from real data, hides the * not-yet-wired sections, and adds one honest banner. The DEMO subtree is untouched. */ /** * The hydration logic as a `function(doc, d)` source string, so it runs both in the * page (wrapped in a `