/** * Decision-bound architecture constraints and their eligibility ledger * (change: add-decision-bound-code-constraints). * * Classification is author-declared only. This module parses persisted bytes, * joins them to the decision lifecycle, and lowers valid rules into the existing * architecture vocabulary. It never calls an LLM, an embedder, or the network. */ import type { DecisionConstraintBlock, DecisionConstraintEligibility, PendingDecision } from '../../types/index.js'; import type { GovernanceFinding } from '../services/mcp-handlers/enforcement-policy.js'; import { type ArchitectureRules } from '../architecture/rules.js'; import type { DependencyGraphResult } from '../analyzer/dependency-graph.js'; export interface PersistedConstraintPayload { decisionId: string; title: string; rationale: string; supersedes?: string; constraints: DecisionConstraintBlock; } export interface RetiredDecisionRule { decisionId: string; decisionTitle: string; ruleId: string; status: PendingDecision['status'] | 'superseded'; } export interface EligibilityDecisionReceipt { decisionId: string; title: string; status: DecisionConstraintEligibility['status']; constrained: boolean; reason?: string; enforcedBoundary?: string; humanReviewRemainder?: string; servedContentMetadata: { provenance: 'reviewed-corpus' | 'local-unreviewed'; }; } export interface EnforcementEligibilityLedger { adoption: { constrained: number; authoritative: number; ratio: number | null; }; coverage: { constrainedEligible: number; eligible: number; ratio: number | null; }; unclassifiedCount: number; activeRuleCount: number; coverageGaps: Array<{ decisionId: string; title: string; }>; decisions: EligibilityDecisionReceipt[]; } export interface DecisionConstraintState extends ArchitectureRules { malformedFindings: GovernanceFinding[]; retiredRules: RetiredDecisionRule[]; ledger: EnforcementEligibilityLedger; violationAssessmentComplete: boolean; } /** Machine-readable, deterministic durable projection used by specs and ADRs. */ export declare function renderDecisionConstraintMarker(decision: PendingDecision): string; /** Parse only explicitly-labelled markers; malformed JSON remains caller-visible. */ export declare function parseDecisionConstraintMarkers(text: string): Array<{ payload?: PersistedConstraintPayload; error?: string; }>; export declare function loadDecisionConstraintState(rootPath: string, openspecPath?: string): Promise; /** Input-boundary validation used by record_decision before persisting bytes. */ export declare function validateDecisionConstraintBlock(decision: Pick, block: unknown): GovernanceFinding[]; /** Structural guard anchor: decision eligibility is parsed, never inferred. */ export declare const DECISION_ELIGIBILITY_IS_DECLARED_ONLY = true; export declare function decisionConstraintViolationFindings(graph: DependencyGraphResult, state: DecisionConstraintState): GovernanceFinding[]; //# sourceMappingURL=constraint-ledger.d.ts.map