/** * The REGISTRY-DIFF lint (Plan 1 Phase 4 / W6; inv.17 soundness-monotonicity) — * the mechanical guard that distinguishes an ADDITIVE catalog extension from a * RELAXATION. A registry/table change is SAFE (additive) only if it moves the * catalog toward MORE-restrictive (or is a pure addition that can only SHRINK what * renders); any change that LOOSENS a gate is a RELAXATION and must be rejected by * the build unless explicitly waived. This is the artifact the round-2 review named * as missing — without it, "additive extension" and "silent relaxation" are * indistinguishable. * * The safety DIRECTION is encoded PER FIELD (each `classify*` below). The lint * returns one `DiffFinding` per detected change, tagged `ADDITIVE` or `RELAXATION`; * `assertNoRelaxation` throws on any `RELAXATION` (the build failure). * * DISCLAIM (liveness-monotonicity): every hardening can only REDUCE what renders, * so there is deliberately NO check asserting that the renderable set does not * shrink. The lint guards SOUNDNESS-monotonicity (a change can only make the system * say LESS), never liveness. A removal is treated as a RELAXATION-class change * requiring a waiver (a dropped constraint is a catalog regression to review), even * though default-deny would render it safe — the conservative posture. * * PURE & self-contained — no clock/RNG/IO, no kernel-downstream import (SDD §R * kernel purity: `adjudicate → claustrum → ibatexas`, never backward). */ import type { ConsistencyConstraint } from "./consistency.js"; import type { EvidenceRequirement, FalsifierDeclaration } from "./evidence-requirement.js"; /** A catalog change is either an ADDITIVE (safe) extension or a RELAXATION. */ export type DiffClassification = "ADDITIVE" | "RELAXATION"; /** One detected catalog change, classified with a legible, non-propositional detail. */ export interface DiffFinding { readonly kind: DiffClassification; readonly detail: string; } /** * Throw if ANY finding is a `RELAXATION` (the build failure; W6). The message * lists every relaxation so a catalog regression is legible. ADDITIVE findings * pass silently. Pure: deterministic over the findings. */ export declare function assertNoRelaxation(findings: readonly DiffFinding[]): void; /** * Classify a CONSISTENCY-TABLE diff (W6). Safety direction: * - Add a NEW pair → ADDITIVE iff `MUTUAL_EXCLUSION` (more-restrictive); adding * it as `COMPATIBLE`/`IMPLICATION` newly PERMITS a co-render that was * default-deny ESCALATE → RELAXATION. * - Change an existing pair `MUTUAL_EXCLUSION → COMPATIBLE/IMPLICATION` → * RELAXATION; the reverse (→ `MUTUAL_EXCLUSION`) → ADDITIVE. * - REMOVE a pair → RELAXATION (a dropped constraint needs a waiver). * Pure. */ export declare function classifyConsistencyTableDiff(before: readonly ConsistencyConstraint[], after: readonly ConsistencyConstraint[]): readonly DiffFinding[]; /** * Classify an EVIDENCE-REQUIREMENT diff (W6) for ONE requirement (same key). * Safety direction (each may only TIGHTEN): * - `minSourceIntegrity` (read via `sourceIntegrityRank`) may only RISE. * - `ownershipPolicy` may only go `not_applicable → required`. * - freshness may only tighten (`static → cacheable → must_read_this_turn`); * a `cacheable` ttl may only SHRINK. * - `provenancePolicy` may only go `preserve → first_party_only`. * Any loosening → `RELAXATION`. NOTE `sourceIntegrity` here is the requirement's * declared CHANNEL — compared as part of the C2 floor via the claim's * `minSourceIntegrity`; a requirement whose declared channel WEAKENS is flagged. * Pure. */ export declare function classifyEvidenceRequirementDiff(before: EvidenceRequirement, after: EvidenceRequirement): readonly DiffFinding[]; /** * Classify a FALSIFIER-DECLARATION diff (W6). Safety direction: * - `falsifierComplete` may only go `false → true`; `true → false` → RELAXATION. * - a falsifier may only be ADDED; REMOVING one → RELAXATION (the type can now * VALIDATE in a state a dropped falsifier would have contradicted). * Pure. */ export declare function classifyFalsifierDiff(before: FalsifierDeclaration, after: FalsifierDeclaration): readonly DiffFinding[]; //# sourceMappingURL=registry-diff.d.ts.map