export type ReleaseNoteRetrievalStatus = 'not_requested' | 'success' | 'empty' | 'shell' | 'http_error' | 'timeout' | 'browser_error' | 'parse_error'; export type ReleaseNoteLifecycle = 'beta' | 'pilot' | 'developer_preview' | 'retirement' | 'ga'; export type ReleaseNoteLifecycleEvidence = { lifecycle: ReleaseNoteLifecycle; confidence: 'high' | 'medium'; excerpt: string; }; export type ReleaseNoteInventoryItem = { id: string; title: string; level: number; hierarchy: string[]; helpUrl: string; developerUrl: string; retrieval: { status: ReleaseNoteRetrievalStatus; httpStatus?: number; releaseVersion?: string; contentId?: string; contentType?: string; bodyBytes?: number; bodyHash?: string; lifecycle?: ReleaseNoteLifecycleEvidence[]; preservedFromBaseline?: boolean; error?: string; }; }; export type ReleaseNoteCollection = { release: string; indexUrl: string; status: 'complete' | 'partial' | 'failed'; inventoryStatus: 'success' | 'empty' | 'timeout' | 'browser_error'; articleCount: number; retrievedCount: number; failedCount: number; errors: string[]; articles: ReleaseNoteInventoryItem[]; comparison?: ReleaseNoteBaselineComparison; }; export type ReleaseNoteDelta = { type: 'added' | 'removed' | 'content_changed' | 'lifecycle_transition' | 'retrieval_failed' | 'inventory_failed'; articleId: string; before?: string; after?: string; preservedEvidence?: boolean; }; export type ReleaseNoteReviewItem = { articleId: string; reasons: Array; }; export type ReleaseNoteBaselineComparison = { status: 'pass' | 'review'; baselineArticleCount: number; currentArticleCount: number; addedIds: string[]; removedIds: string[]; deltas: ReleaseNoteDelta[]; reviewQueue: ReleaseNoteReviewItem[]; }; export type RawInventoryItem = { id?: string | null; title?: string | null; level?: number | null; hierarchy?: Array; helpUrl?: string | null; }; export type ReleaseNoteCollectorOptions = { release: string; includeContent?: boolean; articleIds?: string[]; concurrency?: number; timeoutMs?: number; baseline?: ReleaseNoteCollection; }; export type ReleaseNoteBrowserAdapter = { collectInventory(url: string, timeoutMs: number, signal?: AbortSignal): Promise; collectArticle(url: string, timeoutMs: number, signal?: AbortSignal): Promise; close(): Promise; }; export type ObservedAuraResponse = { status: number; body: string; }; type AuraContent = { title?: string; contentId?: string; releaseVersion?: string; contentType?: string; body: string; }; export declare function validateReleaseNumber(value: string): string; export declare function normalizeInventory(releaseValue: string, raw: RawInventoryItem[]): ReleaseNoteInventoryItem[]; export declare function parseAuraContent(response: ObservedAuraResponse): AuraContent; export declare function isApplicationShell(body: string): boolean; export declare function classifyLifecycle(body: string): ReleaseNoteLifecycleEvidence[]; export declare function validateReleaseNoteBaseline(value: unknown): ReleaseNoteCollection; export declare function compareReleaseNoteBaseline(baseline: ReleaseNoteCollection, current: ReleaseNoteCollection): ReleaseNoteBaselineComparison; export declare function collectReleaseNotes(options: ReleaseNoteCollectorOptions, adapter?: ReleaseNoteBrowserAdapter): Promise; export declare function mapBounded(items: T[], concurrency: number, work: (item: T) => Promise): Promise; export {};