/** * Existing-install disclosure gate — ADR-301, amended by ADR-311 to source * the disclosure MESSAGE itself from the remote feed rather than hardcoding * it in the CLI. Everything about WHETHER/WHEN to show a disclosure stays * local (state machine below); everything about WHAT it says comes from * the same remote pool as tips/promos, validated through the identical * ADR-301 content pipeline (isValidMessage in messages.ts). * * Invariants (release-blocking, tested): * - No promotional content before disclosure. * - The manage instruction appears in the disclosure text itself. * - Shown once per user (user-level receipt), not once per project. * - Declining disables all funnel surfaces (enforced in precedence.ts). * - Fail-closed: if the remote feed has never successfully populated a * disclosure-class message, there is nothing to show — no local * fallback text exists (ADR-311 "zero local promo content"). * * The disclosure text stays on the promo row for a grace window after its * first render so a single flash can't count as "the user was told"; only * after the window do promotional messages become eligible. */ import type { DisclosureRecord, FunnelMessage } from './types.js'; /** How long the disclosure text keeps the row before promo becomes eligible. */ export declare const DISCLOSURE_GRACE_MS: number; export declare const DISCLOSURE_ROTATION_SLOT_MS: number; /** * Deterministic slot-based selection over the remote disclosure pool — no * RNG so the choice is reproducible for a given wall-clock instant. Returns * null when the pool is empty (cold start before first fetch, or the remote * feed is unreachable) — the caller must treat null as "show nothing". */ export declare function selectDisclosureMessage(now?: Date): FunnelMessage | null; export declare function getDisclosure(): DisclosureRecord; /** Record that the disclosure text was rendered (idempotent). */ export declare function recordDisclosureShown(now?: Date): DisclosureRecord; /** User explicitly declined (e.g. `ruflo funnel disable`). */ export declare function recordDisclosureDeclined(now?: Date): DisclosureRecord; /** Re-enable after a prior decline (explicit user action only). */ export declare function recordDisclosureReenabled(now?: Date): DisclosureRecord; export declare function recordDisclosureAccepted(now?: Date): DisclosureRecord; /** * Whether promotional/educational messages may render. True only after the * disclosure was shown AND its grace window has elapsed. While the window is * open the row must carry the disclosure text itself. */ export declare function promoEligible(now?: Date): boolean; //# sourceMappingURL=disclosure.d.ts.map