code wiki / _hdl_build / nx_vizsla_tenant.nx

nx_vizsla_tenant.nx

buildroot/runtime/_hdl_build/nx_vizsla_tenant.nx

8817 B180 linesdepth 2pulls 2 transitivereach 0 importersview sourcekind tooltopic vizsla
docsdependenciesstructsconstsfunctions

about

nx_vizsla_tenant.nx -- NISHI VIZSLA: the UNIVERSAL (multi-tenant) relationship manager. Operator 2026-06-22: "i want these capabilities that can be universal also available to others on our other nishi systems so the same thing giving me s class relationship management can help them achieve s class." The gated relate engine (nx_vizsla_relate: cadence/ledger/thanks/brief) is ALREADY tenant-isolated BY CONSTRUCTION -- the seg_store CID data plane separates each tenant by store PREFIX. This is the thin tenancy layer (rule 22: COMPOSES the blessed _offc/nx_vizsla_relate.elf, re-implements NOTHING): it maps a <tenant-id> to that tenant's private files+store and forks the engine. Every person gets the SAME S-class engine over THEIR OWN data, with no cross-tenant bleed (proven by nx_vizsla_tenant_gate). Sovereign: no third-party, no shared cloud = per-tenant isolation WITHOUT the snooping every cloud PRM does. <base><tid>.contacts.txt the tenant's people (TIER/CONTACT rows) <base><tid>.relate_log.txt the tenant's interaction journal (TOUCH/OBLIGATION/THANKS/...) <base><tid>.relate- the tenant's private seg_store prefix (isolated CID records) Commands (argv): all forward to the engine over the tenant's resolved paths -- load <base> <tid> [segid] ingest the tenant's journal into their store brief <base> <tid> <today> the tenant's daily counsel (followups/birthdays/thankyous/obligations) cadence|thanks <base> <tid> <today> ; ledger <base> <tid> SECURITY (law 12 -- defensive at the boundary): tenant-id is validated [A-Za-z0-9_-] only -- a '.' or '/' is REJECTED so no tenant can path-traverse into another's files. expect_exit: 1 (no args) license_tier: ORIGINAL

dependencies 1 imports · 0 importers

nx_syscalls.nx nx_vizsla_tenant.nx

imports: nx_syscalls.nx

imported by: nobody (leaf or entry point)

call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown

main vt_p sys_write vt_slen vt_valid_tid sys_mmap vt_path vt_cat vt_eq vt_run sys_fork sys_mmap ↻ sys_execve sys_exit sys_wait4 vt_exists sys_openat_rd sys_close vt_writefile sys_openat_wr sys_write ↻ vt_slen ↻ sys_close ↻ vt_append5 sys_mmap ↻ vt_cat ↻ sys_openat_append sys_write ↻ sys_close ↻

structs

none

consts

22const K_MAGIC_2048: i64 = 2048
23const K_MAGIC_1024: i64 = 1024

functions

25func vt_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
called by 2: vt_pvt_writefile
26func vt_p(s: *u8) -> i64 { sys_write(1, s, vt_slen(s)); return 0 }
called by 1: main calls 2: sys_writevt_slen
28func vt_eq(a: *u8, b: *u8) -> i64
called by 1: main
39func vt_cat(dst: *u8, off: i64, s: *u8) -> i64
called by 2: vt_pathvt_append5
46func vt_valid_tid(s: *u8) -> i64
called by 1: main
63func vt_path(out: *u8, base: *u8, tid: *u8, suffix: *u8) -> i64
called by 1: main calls 1: vt_cat
73func vt_run(a1: *u8, a2: *u8, a3: *u8, a4: *u8) -> i64
96func vt_exists(path: *u8) -> i64 { let fd: i64 = sys_openat_rd(path); if fd < 0 { return 0 } sys_close(fd); return 1 }
called by 1: main calls 2: sys_openat_rdsys_close
98func vt_writefile(path: *u8, content: *u8) -> i64
107func vt_append5(path: *u8, a0: *u8, a1: *u8, a2: *u8, a3: *u8, a4: *u8) -> i64
123func main(argc: i64, argv: *i64) -> i64