code wiki / (root) / nx_project.nx

nx_project.nx

buildroot/runtime/nx_project.nx

128039 B3026 linesdepth 6pulls 7 transitivereach 4 importersview sourcekind librarytopic project
docsdependenciesstructsconstsfunctions

about

nx_project.nx -- NISHI PROJECT: the team + contractor project layer for nishifamily.com/project. Operator 2026-07-09: "get beyond microsoft project and leantime ... work with my team and contractors". COMPOSES the existing substrate rather than re-implementing it: tasks/deps/completions live in the nx_vizsla_plan record plane (tsk:/don: records; plan field == project id). This organ adds the layer the projectmgmt census measured ABSENT: prj: PROJECT meta (pid, owner, title) mem: MEMBERSHIP with roles (owner|team|contractor) + data-driven capacity (cap = minutes, or -) fail-closed ROLE-SCOPED VIEW: owner/team see all tasks; contractor sees ONLY own tasks; a non-member is DENIED (deny by default -- access is granted by a record, never assumed) WORKLOAD rollup: per-member open effort vs recorded capacity (over-flag only when cap is data) Task state derives from the plan records: DONE (don: exists) / BLOCKED (a dep lacks don:) / READY. Records (load <file> <prefix> [segid], additive + CID-idempotent): PROJ <pid> <owner> <title> MEMBER <pid> <person> <role> <cap|-> Commands (pj_cli; built via the _hdl_build wrapper; ARGLESS = selftest gate incl a fork of the REAL blessed nx_vizsla_plan.elf as the independent tsk:/don: writer -- cross-organ compose proof): load <file> <prefix> [segid] | view <prefix> <pid> <person> | workload <prefix> <pid> expect_exit: 0 license_tier: ORIGINAL

dependencies 3 imports · 2 importers

nx_syscalls.nx nx_canon_cid.nx nx_seg_store.nx nx_project.nx nx_project_gate.nx nx_project_serve.nx

imports: nx_syscalls.nxnx_canon_cid.nxnx_seg_store.nx

imported by: nx_project_gate.nxnx_project_serve.nx

structs

none

consts

22const K_MAGIC_1970: i64 = 1970
23const K_MAGIC_146097: i64 = 146097
24const K_MAGIC_719468: i64 = 719468
25const K_MAGIC_2048: i64 = 2048
26const K_MAGIC_1024: i64 = 1024
27const K_MAGIC_65536: i64 = 65536
28const K_MAGIC_146096: i64 = 146096
29const K_MAGIC_1460: i64 = 1460
30const K_MAGIC_36524: i64 = 36524

functions

32func pj_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
33func pj_p(s: *u8) -> i64 { sys_write(1, s, pj_slen(s)); return 0 }
35func pj_eq(a: *u8, b: *u8) -> i64
46func pj_cmpgt(a: *u8, b: *u8) -> i64
called by 1: pj_gather
60func pj_dup(s: *u8) -> *u8
called by 2: pj_putpj_gather calls 2: pj_slensys_mmap
68func pj_atoi(s: *u8) -> i64
79func pj_digits(s: *u8) -> i64
91func pj_isws(c: i64) -> i64
called by 2: pj_tokpj_cmd_load
98func pj_tok(b: *u8, off: i64, lend: i64, dst: *u8, cap: i64) -> i64
120func pj_cat(dst: *u8, off: i64, s: *u8) -> i64
126func pj_catn(dst: *u8, off: i64, v: i64) -> i64
139func pj_kmemeq(b: *u8, off: i64, n: i64, s: *u8) -> i64
called by 2: pj_fieldpj_iskind calls 1: pj_slen
149func pj_field(rec: *u8, rl: i64, want: *u8, out: *u8, cap: i64) -> i64
called by 1: pj_gather calls 2: ss_r32pj_kmemeq
176func pj_iskind(b: *u8, koff: i64, kl: i64, pfx: *u8) -> i64
called by 1: pj_gather calls 1: pj_kmemeq
181func pj_find(list: *i64, n: i64, s: *u8) -> i64
191func pj_datedays(s: *u8) -> i64
232func pj_contains(b: *u8, sz: i64, s: *u8) -> i64
called by 2: pj_selftestpsv_selftest calls 1: pj_slen
248func pj_wfile(path: *u8, s: *u8) -> i64
256func pj_starts(s: *u8, pfx: *u8) -> i64
called by 2: pj_pathokpsv_handle
266func pj_pathok(s: *u8) -> i64
277func pj_pathfail() -> i64
283func pj_put(keys: *i64, vals: *i64, nf: i64, kp: *u8, st: *i64) -> i64
316func pj_cmd_load(argc: i64, argv: *i64) -> i64
638func pj_st_new() -> *i64
683func pj_gather(prefix: *u8, pid: *u8, st: *i64) -> i64
952func pj_depsok(dep: *u8, dt: *i64, nd: i64) -> i64
called by 1: pj_state calls 2: sys_mmappj_find
977func pj_state(st: *i64, idx: i64) -> i64
988func pj_roleof(st: *i64, person: *u8) -> i64
997func pj_statename(v: i64) -> i64
1005func pj_view(prefix: *u8, pid: *u8, person: *u8, out: *i64) -> i64
1087func pj_open_min(prefix: *u8, pid: *u8, person: *u8) -> i64
1106func pj_over(prefix: *u8, pid: *u8, person: *u8) -> i64
1121func pj_visible(prefix: *u8, pid: *u8, person: *u8, tid: *u8) -> i64
1138func pj_task_state(prefix: *u8, pid: *u8, tid: *u8) -> i64
1149func pj_chain_min(st: *i64, idx: i64, depth: i64) -> i64
1192func pj_cmd_level(prefix: *u8, pid: *u8, out: *i64, aply: *u8) -> i64
1364func pj_cmd_risk(prefix: *u8, pid: *u8, today: *u8, out: *i64) -> i64
1455func pj_cmd_evm(prefix: *u8, pid: *u8, out: *i64) -> i64
1517func pj_head(hb: *u8, o0: i64, title: *u8) -> i64
called by 2: pj_html_buildps_picker calls 1: pj_cat
1531func pj_foot(hb: *u8, o0: i64) -> i64
called by 2: pj_html_buildps_picker calls 1: pj_cat
1538func pj_html_build(prefix: *u8, pid: *u8, person: *u8, today: *u8, hb: *u8) -> i64
1839func pj_html(prefix: *u8, pid: *u8, person: *u8, today: *u8, outpath: *u8) -> i64
1861func pj_civil(z0: i64, out: *i64) -> i64
1882func pj_fmtdate(days: i64, out: *u8) -> i64
1900func pj_cmd_timesheet(prefix: *u8, pid: *u8, out: *i64) -> i64
1957func pj_cmd_notes(prefix: *u8, pid: *u8, tid: *u8, out: *i64) -> i64
2003func pj_cmd_template(argc: i64, argv: *i64) -> i64
2120func pj_cmd_snapshot(prefix: *u8, pid: *u8, snapdate: *u8, outfile: *u8) -> i64
2166func pj_cmd_baseline(prefix: *u8, pid: *u8, out: *i64) -> i64
2221func pj_cmd_burndown(prefix: *u8, pid: *u8, out: *i64) -> i64
2301func pj_cmd_workload(prefix: *u8, pid: *u8) -> i64
2383func pj_run(elf: *u8, args: *i64, outpath: *u8) -> i64
2413func pj_check(idx: i64, ok: i64, name: *u8) -> i64
2425func pj_selftest() -> i64
2961func pj_usage() -> i64
called by 1: pj_cli calls 1: pj_p
2966func pj_cli(argc: i64, argv: *i64) -> i64