% Sovereign Node Key — SnapKitty execution gate (Prolog) % Without a valid key, agent routing refuses to compute. % % Get your key: licensing@snapkittywest.dev % Copyright (C) 2026 Bel Esprit D'Accord Irrevocable Trust :- module(sovereign_node_key, [ require_node_key/0, verify_node_key/1 ]). :- use_module(library(process)). :- use_module(library(lists)). sovereign_wall(' +==================================================+ | SOVEREIGN NODE KEY REQUIRED | | | | This software requires a valid SnapKitty | | node key to activate agent routing. | | | | Get your key: | | licensing@snapkittywest.dev | | https://github.com/SNAPKITTYWEST | | | | Copyright (C) 2026 Bel Esprit D Accord | | Irrevocable Trust (EIN 42-697643) | +==================================================+ '). % Verify key format: SNK-{payload}-{signature} verify_node_key(Key) :- atom(Key), atom_string(Key, KeyStr), string_concat("SNK-", Rest, KeyStr), getenv('SNAPKITTY_NODE_SECRET', Secret), Secret \= '', split_string(Rest, "-", "", Parts), length(Parts, Len), Len >= 2, !. verify_node_key(_) :- fail. % Require valid key or throw require_node_key :- ( getenv('SNAPKITTY_NODE_KEY', Key) -> true ; Key = '' ), ( verify_node_key(Key) -> true ; sovereign_wall(Wall), format(atom(Msg), '~w', [Wall]), throw(error(permission_error(node_key, sovereign, routing), Msg)) ).