code wiki / _hdl_build / nx_vizsla_plan.nx
nx_vizsla_plan.nx
buildroot/runtime/_hdl_build/nx_vizsla_plan.nx
about
nx_vizsla_plan.nx -- NISHI VIZSLA PLANNER: PMP-grade mechanics, friend-group simple.
Operator 2026-07-07: "planning with pmp level but simple for a friend group". Closes the last
census-ABSENT planning axes: PA7 PRIORITY (Eisenhower urgency x importance), PA8 DEPENDENCIES
(DAG + cycle detection + critical path), PA13 TIME-BLOCKING (place ready tasks into real
calendar free windows). All integer, NO-FLOAT, deterministic (today/date are argv, never a clock).
Records (load <file> <prefix> [segid], additive + CID-idempotent law 10):
CONF <plan> <u4_days> <u3_days> <u2_days> -> "cnf:" urgency bands (data, not magic numbers;
absent -> bootstrap defaults 2/7/30)
TASK <plan> <tid> <owner> <due> <effort_min> <imp 1-5> <dep[,dep..]|-> <title> -> "tsk:"
MILE <plan> <mid> <date> <title> -> "mil:" milestone
DONE <plan> <tid> <date> -> "don:" completion marker (additive history)
Commands:
board <prefix> <plan> <today>
per task: state READY (deps done) / BLOCKED / DONE; urgency from days-to-due vs the CONF
bands (overdue=5); score = urg*10 + imp*2; late flag. Dependency DAG is Kahn-checked --
a CYCLE or unknown dep names the offenders and fails loud (a plan you cannot execute is a
data error, not a rendering choice). CRITICAL PATH = longest-effort dependency chain
(topo-order DP), named task-by-task. Milestones report done/due_tasks/pct. Verdict rolls up.
timeblock <prefix> <plan> <calprefix> <date> [earliest latest]
READY tasks in priority order first-fit into the calendar's real free windows that day
(composes the R-CAL busy walk: cal: events + rec: occurrences). Too-big tasks are named
UNPLACED -- honesty over silent drop.
Loud-fail: bad dates/imp/effort, unknown dep, cycle, unknown plan, bad bounds.
spec: knowledge/research/2026-06-22-vizsla-sclass-roadmap.md license_tier: ORIGINAL
dependencies 3 imports · 0 importers
imports: nx_syscalls.nxnx_canon_cid.nxnx_seg_store.nx
imported by: nobody (leaf or entry point)
call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown
structs
| none |
consts
| 29 | const K_MAGIC_1970: i64 = 1970 |
| 30 | const K_MAGIC_146097: i64 = 146097 |
| 31 | const K_MAGIC_719468: i64 = 719468 |
| 32 | const K_MAGIC_146096: i64 = 146096 |
| 33 | const K_MAGIC_1460: i64 = 1460 |
| 34 | const K_MAGIC_36524: i64 = 36524 |
| 35 | const K_MAGIC_2048: i64 = 2048 |
| 36 | const K_MAGIC_4096: i64 = 4096 |
| 37 | const K_MAGIC_262144: i64 = 262144 |
| 38 | const K_MAGIC_1440: i64 = 1440 |
| 39 | const K_MAGIC_65536: i64 = 65536 |
functions
| 41 | func vp_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } |
| 42 | func vp_p(s: *u8) -> i64 { sys_write(1, s, vp_slen(s)); return 0 } |
| 44 | func vp_eq(a: *u8, b: *u8) -> i64 |
| 55 | func vp_cmp(a: *u8, b: *u8) -> i64 |
| 69 | func vp_dup(s: *u8) -> *u8 |
| 77 | func vp_atoi(s: *u8) -> i64 |
| 88 | func vp_digits(s: *u8) -> i64 |
| 100 | func vp_isws(c: i64) -> i64 called by 1: vp_tok |
| 107 | func vp_tok(b: *u8, off: i64, lend: i64, dst: *u8, cap: i64) -> i64 |
| 129 | func vp_cat(dst: *u8, off: i64, s: *u8) -> i64 |
| 135 | func vp_catn(dst: *u8, off: i64, v: i64) -> i64 |
| 148 | func vp_hhmm(dst: *u8, off: i64, m: i64) -> i64 |
| 160 | func vp_kmemeq(b: *u8, off: i64, n: i64, s: *u8) -> i64 |
| 170 | func vp_field(rec: *u8, rl: i64, want: *u8, out: *u8, cap: i64) -> i64 |
| 197 | func vp_iskind(b: *u8, koff: i64, kl: i64, pfx: *u8) -> i64 |
| 202 | func vp_datedays(s: *u8) -> i64 |
| 243 | func vp_ymd2days(y0: i64, m: i64, d: i64) -> i64 called by 1: vp_occ |
| 255 | func vp_civil(z0: i64, out: *i64) -> i64 called by 1: vp_busy_day |
| 273 | func vp_dim(y: i64, m: i64) -> i64 called by 1: vp_occ |
| 289 | func vp_occ(freq: *u8, sd0: i64, sy: i64, sm: i64, sd: i64, interval: i64, k: i64) -> i64 |
| 303 | func vp_find(list: *i64, n: i64, s: *u8) -> i64 |
| 312 | func vp_put(keys: *i64, vals: *i64, nf: i64, kp: *u8, st: *i64) -> i64 |
| 345 | func vp_cmd_load(argc: i64, argv: *i64) -> i64 |
| 539 | func vp_gather(prefix: *u8, plan: *u8, st: *i64) -> i64 called by 2: vp_cmd_boardvp_cmd_timeblock calls 12: sys_mmapss_manifestvp_catss_readallss_r32vp_iskind+6 |
| 674 | func vp_urgency(duedays: i64, today: i64, u4: i64, u3: i64, u2: i64) -> i64 |
| 684 | func vp_depidx(depstr: *u8, tids: *i64, n: i64, out: *i64) -> i64 |
| 714 | func vp_alloc_state() -> *i64 |
| 737 | func vp_cmd_board(argc: i64, argv: *i64) -> i64 |
| 1027 | func vp_busy_day(calpfx: *u8, qd: i64, bs: *i64, be: *i64, np: *i64) -> i64 |
| 1108 | func vp_cmd_timeblock(argc: i64, argv: *i64) -> i64 |
| 1301 | func main(argc: i64, argv: *i64) -> i64 |