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}