import type { GolfScorecard } from './types.js'; export interface TrendPoint { sprint: number; handicap: number; fairway_pct: number; gir_pct: number; } /** * Compute per-sprint time-series of handicap, fairway%, and GIR%. * O(n) incremental — maintains running sums, no per-sprint computeHandicapCard() call. */ export declare function computeHandicapTrend(scorecards: GolfScorecard[]): TrendPoint[]; export interface VelocityPoint { sprint: number; tickets: number; par: number; score: number; differential: number; at_or_under_par: boolean; } export interface VelocityReport { points: VelocityPoint[]; avg_tickets: number; par_accuracy_pct: number; avg_differential: number; trend: 'improving' | 'stable' | 'declining'; } /** * Compute sprint velocity metrics from scorecards. * Trend detection: compare last-5 avg differential to all-time avg. * Threshold: 0.3 avoids noise (one bogey in 5 sprints = 0.2 swing). */ export declare function computeVelocity(scorecards: GolfScorecard[]): VelocityReport; export interface GuardMetrics { guard: string; total: number; allow: number; deny: number; ask: number; context: number; silent: number; block_rate: number; reason_counts?: Record; } export interface GuardEffectivenessReport { total_executions: number; by_guard: GuardMetrics[]; most_active: string | null; most_blocking: string | null; } /** Possible decision values in guard metrics JSONL (superset of GuardResult.decision) */ export type GuardDecision = 'allow' | 'deny' | 'ask' | 'context' | 'silent' | 'suppressed'; /** * Compute guard effectiveness metrics from raw JSONL lines. * Pure function — no I/O. Caller reads the file and passes lines. * Malformed lines are skipped gracefully. */ export declare function computeGuardMetrics(lines: string[]): GuardEffectivenessReport; export interface ConvergenceCard { /** Average handicap change per sprint over last 10 (negative = improving) */ improvement_rate: number; /** True if |improvement_rate| < 0.1 for the last 10 sprints */ plateau: boolean; /** True if last_5 handicap > last_10 handicap after prior improvement */ reversion: boolean; /** Consecutive sprints without handicap improvement */ sprints_since_improvement: number; /** Overall prediction */ prediction: 'improving' | 'plateau' | 'reverting' | 'insufficient_data'; } /** * Detect convergence patterns: plateau, reversion, improvement rate. * Requires at least 10 scorecards for meaningful analysis. */ export declare function computeConvergence(scorecards: GolfScorecard[]): ConvergenceCard; //# sourceMappingURL=analytics.d.ts.map