/**
 * Maintainability dimension — declarative scoring spec.
 *
 * Methodology: ISO/IEC 25010 maintainability sub-characteristics
 * (modularity, modifiability, analysability) combined with the
 * SQALE method (Letouzey 2012) for the "technical debt produces
 * downgraded rating" mental model. Step-style penalty thresholds
 * are calibrated so a single major violation drops the rating one
 * tier — matching SQALE rating-band semantics on typical repos
 * without requiring a dynamic per-repo debt-ratio computation.
 *
 * Penalty rules cover the canonical Maintainability violation
 * classes: god files (single largest file), file-size sprawl
 * (count of files past the recommended-extraction line), runtime
 * console/debug residue, outdated language runtimes, AST-derived
 * god-classes (graphify), and low architectural cohesion.
 *
 * No caps in this spec. The full-marks-minus-violations baseline
 * (100, subtractive) plus the calibrated penalty values produce
 * the rating contract by construction: a fully clean repo lands
 * at A, a repo with one major violation lands at B, a deeply
 * troubled repo lands at D or E. The Label Contract emerges from
 * the math; no cap is needed to enforce it externally.
 *
 * Behavior change from pre-2.4.7: the legacy scorer baseline was
 * 70 (with a "small-repo bonus" of +5/+10 to compensate). The new
 * baseline is 100 with no special-case bonus — small-repo bonus
 * was an overfit, removed. Customers with healthy codebases
 * will see Maintainability scores rise by ~30 points; documented
 * in the 2.4.7 CHANGELOG.
 */
import type { DimensionScoringSpec } from '../spec';
export interface MaintainabilityScoreInput {
    /** Total source-file count. Denominator for `godNodeCount` density. */
    sourceFiles: number;
    /** Largest single source file by line count (the "god file" probe). */
    largestFileLines: number;
    /** Count of source files exceeding 500 lines. */
    filesOver500Lines: number;
    /** Console / debugger statement count across source. */
    consoleLogCount: number;
    /** `engines.node` field from package.json, e.g. ">=14.0.0", or null
     *  for non-Node projects. */
    nodeEngineVersion: string | null;
    /** From graphify: count of "god" AST nodes (classes / files with
     *  ≥ N functions or methods). Null when graphify didn't run. */
    godNodeCount: number | null;
    /** From graphify: average inter-module cohesion (0.0–1.0). Null when
     *  graphify didn't run. */
    avgCohesion: number | null;
}
export declare const MAINTAINABILITY_SCORING_SPEC: DimensionScoringSpec<MaintainabilityScoreInput>;
//# sourceMappingURL=maintainability.d.ts.map