/** * L1a task classification service. * * * Hybrid mechanism: signal-based heuristic + user override + audit log. * * Signal rules (per the spec, conservative defaults): * - filesChanged >= feature_threshold_files OR linesChanged >= feature_threshold_lines * AND touchesDependencies → 'migration' * - touchesMigrationScripts → 'migration' * - isPureRefactor AND linesChanged > 50 → 'refactor' * - filesChanged >= feature_threshold_files OR linesChanged >= feature_threshold_lines * → 'feature' * - keywords contains 'fix' / 'bug' / 'broken' → 'bug' * - filesChanged <= 3 AND linesChanged <= 5 → 'typo' * - default → 'bug' (mid-low) * * Conservatism: * - 'strict' promotes the result by one level * - 'lax' demotes the result by one level * - 'default' leaves it as-is * * Override (the user can force a level): * - `peaks classify override --level --reason ""` writes * to the audit log; cannot be downgraded (per spec: downgrade * is always refused) */ import { type ClassifyResult, type ClassifySignals, type TaskLevel } from './classify-types.js'; import type { ClassifyConservatism } from '../preferences/preferences-types.js'; export interface ClassifyInput { readonly signals: ClassifySignals; readonly conservatism: ClassifyConservatism; /** When set, force the level (bypasses the heuristic). */ readonly override?: { level: TaskLevel; reason: string; }; /** Optional clock for testability. */ readonly clock?: () => string; } export declare function classifyTask(input: ClassifyInput, featureThresholdFiles?: number, featureThresholdLines?: number): ClassifyResult;