icp-dag-crystallizer / src /prolog /kernels /fail_closed_gate.pl
SNAPKITTYWEST's picture
Relicense under the Sovereign Leviathan covenant; remove MIT and Apache
055a27e verified
Raw History Blame Contribute Delete
3.05 kB
%% SPDX-License-Identifier: LicenseRef-Sovereign-Leviathan-SL-AGPL3-001
%% Copyright (C) 2026 SNAPKITTYWEST / Sovereign Kernel Project
%% CLONE_GATE: icp-dag-crystallizer::prolog::kernels::fail_closed_gate
%%
%% K3: Fail-closed admission gate β€” 12-condition kernel validation
%% Domain: admission-control | Purity: pure
%%
%% Every kernel must pass all 12 conditions or be rejected with the
%% first failure reason. The cut ordering ensures determinism.
:- module(fail_closed_gate, [
admissible/1,
decide/2,
first_failure/2
]).
:- use_module(reachability_closure).
:- use_module(cycle_rejector).
:- use_module('../icp_dag').
%% ── Admission ────────────────────────────────────────────────────────────────
admissible(K) :-
kernel_candidate(_, K, Domain, _),
domain_constraints(Domain, Constraints),
maplist(satisfied(K), Constraints),
required_proofs(K, Proofs),
maplist(discharged, Proofs),
\+ cyclic(K),
deterministic(K).
cyclic(K) :- cycle_through(K).
%% ── Decision (deterministic via cut) ─────────────────────────────────────────
decide(K, admit(K)) :-
admissible(K), !.
decide(K, reject(K, Reason)) :-
first_failure(K, Reason).
%% ── 12 fail-closed conditions ────────────────────────────────────────────────
first_failure(K, schema_invalid) :-
\+ schema_valid(K), !.
first_failure(K, unknown_dependency) :-
undeclared_dependency(K, _), !.
first_failure(K, dependency_cycle) :-
cyclic(K), !.
first_failure(K, missing_symbol) :-
missing_symbol(K, _), !.
first_failure(K, unresolved_constraint) :-
kernel_candidate(_, K, Domain, _),
domain_constraints(Domain, Constraints),
member(C, Constraints),
\+ satisfied(K, C), !.
first_failure(K, failed_proof) :-
required_proofs(K, Proofs),
member(P, Proofs),
\+ discharged(P), !.
first_failure(K, ambiguous_binding) :-
ambiguous_binding(K, _), !.
first_failure(K, nondeterministic_output) :-
\+ deterministic(K), !.
first_failure(K, digest_mismatch) :-
\+ digest_consistent(K), !.
first_failure(K, undeclared_side_effect) :-
undeclared_side_effect(K, _), !.
first_failure(K, duplicate_semantics) :-
semantic_duplicate(K, _), !.
first_failure(K, broken_provenance) :-
broken_provenance(K), !.
%% ── Stub predicates (to be provided by external modules) ─────────────────────
:- discontiguous schema_valid/1, undeclared_dependency/2, missing_symbol/2.
:- discontiguous satisfied/2, discharged/1, deterministic/1.
:- discontiguous ambiguous_binding/2, digest_consistent/1.
:- discontiguous undeclared_side_effect/2, semantic_duplicate/2.
:- discontiguous broken_provenance/1, domain_constraints/2, required_proofs/2.