code wiki / (root) / nx_crew_contract_audit.nx

nx_crew_contract_audit.nx source

↩ module page · 131 lines · 6880 B

1// Original Nishi: read-only crew admission evidence. Never dispatches an organ. 2// File inventory proves presence only; it does not attest a binary or authorize execution. 3import "nx_crew_serve.nx" 4import "nx_tool_exec_allow.nx" 5import "nx_tool_http_backend.nx" 6// Count declarations only. Reachability and contract validity require separate probes. 7func cra_http_rows(buf: *u8, n: i64, name: *u8, nlen: i64) -> i64 { 8 if (buf as i64) == 0 { return 0 - 1 } 9 let field: *i64 = sys_mmap(16) as *i64 10 var matches: i64 = 0; var start: i64 = 0; var i: i64 = 0 11 while i <= n { 12 var end: i64 = 0 13 if i == n { end = 1 } else { if buf[i] == (10 as u8) { end = 1 } } 14 if end == 1 { 15 if i > start { if buf[start] != (35 as u8) { 16 if thb_field(buf, start, i, 0, field) == 1 { 17 if tea_field_eq_n(buf, field[0], field[0] + field[1], name, nlen) == 1 { matches = matches + 1 } 18 } 19 } } 20 start = i + 1 21 } 22 i = i + 1 23 } 24 sys_munmap(field, 16); return matches 25} 26func main(argc: i64, argv: *i64) -> i64 { 27 let buf: *u8 = sys_mmap(CS_CAP) 28 let n: i64 = cs_read("knowledge/registry/crew_capabilities.data", buf, CS_CAP) 29 if n <= 0 { cs_raw("CREW-CONTRACT status=UNAVAILABLE reason=registry-unreadable\n"); return 2 } 30 if n >= CS_CAP { cs_raw("CREW-CONTRACT status=INCOMPLETE reason=registry-capacity-reached\n"); return 2 } 31 let role: *u8 = sys_mmap(CS_CAP) 32 let activity: *u8 = sys_mmap(CS_CAP) 33 let organ: *u8 = sys_mmap(CS_CAP) 34 let status: *u8 = sys_mmap(CS_CAP) 35 let path: *u8 = sys_mmap(CS_CAP + CS_CAP) 36 let mcp: *u8 = sys_mmap(CS_CAP) 37 let pin: *u8 = sys_mmap(CS_CAP) 38 let haspin: *i64 = sys_mmap(8) as *i64 39 let http_len: *i64 = sys_mmap(8) as *i64 40 let http_conf: *u8 = tea_read_conf(TB_CONF, http_len) 41 var registered_http: i64 = 0 42 var registered_files: i64 = 0 43 var claimed_mcp_unresolved: i64 = 0 44 var rows: i64 = 0 45 var missing_owner: i64 = 0 46 var missing_organ: i64 = 0 47 var malformed: i64 = 0 48 var humans: i64 = 0 49 var ls: i64 = 0 50 var i: i64 = 0 51 cs_raw("CREW-CONTRACT observation_sec="); cs_wn(sys_now_realtime_sec()); cs_raw(" scope=executing-host read_only=1\n") 52 while i <= n { 53 var nl: i64 = 0 54 if i == n { nl = 1 } else { if buf[i] == (10 as u8) { nl = 1 } } 55 if nl == 1 { 56 let len: i64 = i - ls 57 if len > 0 { let line: *u8 = buf + ls 58 if line[0] != (35 as u8) { 59 rows = rows + 1 60 cs_field_cp(line, len, 0, 124, role, CS_CAP) 61 cs_field_cp(line, len, 1, 124, activity, CS_CAP) 62 cs_field_cp(line, len, 2, 124, organ, CS_CAP) 63 cs_field_cp(line, len, 4, 124, status, CS_CAP) 64 cs_field_cp(line, len, 3, 124, mcp, CS_CAP) 65 cs_raw("role="); cs_raw(role); cs_raw(" activity="); cs_raw(activity) 66 var valid: i64 = 1 67 if role[0] == (0 as u8) { valid = 0 } 68 if activity[0] == (0 as u8) { valid = 0 } 69 if organ[0] == (0 as u8) { valid = 0 } 70 if status[0] == (0 as u8) { valid = 0 } 71 if valid == 0 { malformed = malformed + 1; cs_raw(" status=MALFORMED") } 72 else { 73 let owner: i64 = cs_is_accountable(role, activity) 74 cs_raw(" accountable="); cs_wn(owner) 75 if owner == 0 { if cs_streq(status, "human") != 1 { missing_owner = missing_owner + 1 } } 76 if cs_streq(status, "human") == 1 { humans = humans + 1; cs_raw(" implementation=HUMAN") } 77 else { 78 let present: i64 = cs_organ_resolve(organ, path) 79 cs_raw(" file_present="); cs_wn(present) 80 if present == 0 { missing_organ = missing_organ + 1 } 81 var registered_present: i64 = 0 82 var http_rows: i64 = 0 83 if cs_streq(mcp, "-") != 1 { 84 var mlen: i64 = 0 85 while mcp[mlen] != (0 as u8) { mlen = mlen + 1 } 86 let resolved: i64 = tea_resolve_pinned_from(TEA_CONF, mcp, mlen, path, CS_CAP + CS_CAP, pin, CS_CAP, haspin) 87 cs_raw(" advertised_tool="); cs_raw(mcp) 88 cs_raw(" registry_resolve="); cs_wn(resolved) 89 if resolved == TEA_OK { 90 let fd: i64 = sys_openat_rd(path) 91 if fd >= 0 { registered_present = 1; sys_close(fd); registered_files = registered_files + 1 } 92 cs_raw(" registered_file_present="); cs_wn(registered_present) 93 cs_raw(" arguments_pinned="); cs_wn(haspin[0]) 94 } 95 http_rows = cra_http_rows(http_conf, http_len[0], mcp, mlen) 96 cs_raw(" http_declarations="); cs_wn(http_rows) 97 if http_rows == 1 { registered_http = registered_http + 1; cs_raw(" http_liveness=UNMEASURED") } 98 cs_raw(" activity_equivalence=UNMEASURED") 99 } 100 if cs_streq(status, "mcp") == 1 { 101 if registered_present == 0 { if http_rows != 1 { claimed_mcp_unresolved = claimed_mcp_unresolved + 1 } } 102 } 103 } 104 } 105 cs_raw("\n") 106 } 107 } 108 ls = i + 1 109 } 110 i = i + 1 111 } 112 cs_raw("CREW-CONTRACT rows="); cs_wn(rows) 113 cs_raw(" missing_accountability="); cs_wn(missing_owner) 114 cs_raw(" unresolved_organ_file="); cs_wn(missing_organ) 115 cs_raw(" advertised_registered_files="); cs_wn(registered_files) 116 cs_raw(" advertised_http_declarations="); cs_wn(registered_http) 117 cs_raw(" mcp_claim_unresolved="); cs_wn(claimed_mcp_unresolved) 118 cs_raw(" malformed="); cs_wn(malformed) 119 cs_raw(" human="); cs_wn(humans) 120 cs_raw(" artifact_admission=UNMEASURED remote_parity=UNMEASURED\n") 121 return cra_inventory_verdict(rows, missing_owner, missing_organ, malformed, claimed_mcp_unresolved) 122} 123// Inventory success does not establish invocation, artifact admission or remote parity. 124func cra_inventory_verdict(rows: i64, owners: i64, organs: i64, malformed: i64, mcp: i64) -> i64 { 125 if rows <= 0 { return 2 } 126 if owners != 0 { return 1 } 127 if organs != 0 { return 1 } 128 if malformed != 0 { return 1 } 129 if mcp != 0 { return 1 } 130 return 0 131}