import type { AlignmentContract } from "../alignment-contract.js"; export type ProposalFeature = { kind: "boolean"; name: string; value: boolean; } | { kind: "string"; name: string; value: string; } | { kind: "string[]"; name: string; value: string[]; } | { kind: "number"; name: string; value: number; }; export type FeatureListProposal = { kind: "feature-list"; features: ProposalFeature[]; metadata?: Record; }; export type ArtifactReferenceProposal = { kind: "artifact-reference"; path: string; extractorId: string; metadata?: Record; }; export type Proposal = FeatureListProposal | ArtifactReferenceProposal; export type RuleSeverity = "blocking" | "warning"; export type RuleOutcome = "pass" | "fail"; export type EvaluationRule = { id: string; name: string; description: string; severity: RuleSeverity; contractClauses: { field: "requiredProperties" | "forbiddenProperties" | "requiredBehaviors" | "forbiddenInterpretation" | "forbiddenDrift" | "allowedInterpretation" | "allowedVariation" | "successCriteria"; values: string[]; }; featureNames: string[]; evaluate: (features: ProposalFeature[]) => RuleOutcome; }; export type RuleResult = { ruleId: string; ruleName: string; outcome: RuleOutcome; severity: RuleSeverity; contractClauses: EvaluationRule["contractClauses"]; observedFeatures: ProposalFeature[]; rationale: string; }; export type DriftClassAdapter = { driftClassId: string; name: string; description: string; ruleIds: string[]; }; export type EvidenceTrace = { summary: string; ruleResults: RuleResult[]; matchedDriftClasses: string[]; violatedContractFields: string[]; violatedIntentClauses: string[]; }; export type AlignmentDecision = "aligned" | "revision_required" | "rejected" | "superseded"; export type EvaluationResult = { decision: AlignmentDecision; confidence: number; matchedRules: RuleResult[]; violatedRules: RuleResult[]; matchedDriftClasses: string[]; evidence: EvidenceTrace; reasoning: string[]; deterministic: true; }; export type ProposalEvaluationRuleSet = { id: string; version: number; rules: EvaluationRule[]; driftClassAdapters: DriftClassAdapter[]; }; export type EvaluateProposal = (proposal: Proposal, contract: AlignmentContract, ruleSet: ProposalEvaluationRuleSet) => EvaluationResult; export type ProposalExtractor = { id: string; supports: (proposal: Proposal) => boolean; extract: (proposal: ArtifactReferenceProposal) => FeatureListProposal; };