code wiki / _hdl_build / nx_studio_freeform_ui_gate.nx

nx_studio_freeform_ui_gate.nx source

↩ module page · 83 lines · 6669 B

1// nx_studio_freeform_ui_gate.nx -- gate for the FREE-FORM CANVAS surface (web_assets/_studio/editor_freeform.html), 2// the power-user capability tier. STATIC: the canvas is a THIN SHIM -- it has the element palette, supports free 3// placement (pointer drag), assembles `tier|freeform` + `el|kind|x|y|w|text|href` lines, sets element text via 4// textContent (never innerHTML for user content), POSTs to a path-relative /build, and delegates display via 5// srcdoc with no engine logic of its own. BEHAVIOR: the EXACT payload format the canvas produces, fed to the 6// daemon's path (se_build_tier), yields a governed canvas page with placement honored; a hostile element is 7// escaped. Appends a CMSGATE row to knowledge/status/cms_gate.log on all-pass. license_tier: ORIGINAL 8import "nx_studio_tiers.nx" 9import "nx_syscalls.nx" 10 11func fuw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 12func fun(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 } 13func fucat(dst: *u8, off: i64, s: *u8) -> i64 { var o: i64=off; var k: i64=0; while s[k]!=(0 as u8){dst[o]=s[k];o=o+1;k=k+1} return o } 14func fucatn(dst: *u8, off: i64, v: i64) -> i64 { var o: i64=off; let t: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m}; var k: i64=0; if m==0{t[0]=48 as u8;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{dst[o]=t[k-1-i];o=o+1;i=i+1} return o } 15func furow(id: i64, ok: i64, what: *u8) -> i64 { fuw("FUROW " as *u8); fun(id); fuw(" " as *u8); if ok==1 { fuw("PASS " as *u8) } else { fuw("FAIL " as *u8) } fuw(what); fuw("\n" as *u8); return ok } 16func fulen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 17func fuslurp(path: *u8, buf: *u8, cap: i64) -> i64 { 18 let fd: i64 = sys_openat_rd(path); if fd < 0 { return 0 - 1 } 19 var total: i64 = 0; var go: i64 = 1 20 while go == 1 { let r: i64 = sys_read(fd, buf + total, cap - total); if r <= 0 { go = 0 } if r > 0 { total = total + r } if total >= cap { go = 0 } } 21 sys_close(fd); return total 22} 23func fuhas(hay: *u8, hn: i64, needle: *u8) -> i64 { 24 var nl: i64=0; while needle[nl]!=(0 as u8){nl=nl+1} 25 if nl==0 { return 1 } if nl>hn { return 0 } 26 let last: i64=hn-nl; var i: i64=0 27 while i<=last { var j: i64=0; var hit: i64=1; while j<nl { if (hay[i+j] as i64)!=(needle[j] as i64){hit=0;j=nl} if hit==1{j=j+1} } if hit==1 { return 1 } i=i+1 } 28 return 0 29} 30 31func main() -> i64 { 32 let html: *u8 = sys_mmap(262144) 33 let hn: i64 = fuslurp("web_assets/_studio/editor_freeform.html" as *u8, html, 262143) 34 let out: *u8 = sys_mmap(262144) 35 36 var rows: i64 = 0 37 var pass: i64 = 0 38 var ok: i64 = 0 39 40 // R0 (static): element palette present 41 ok = 0; if hn>0 { if fuhas(html,hn,"data-add=\"heading\"" as *u8)==1 { if fuhas(html,hn,"data-add=\"text\"" as *u8)==1 { if fuhas(html,hn,"data-add=\"button\"" as *u8)==1 { if fuhas(html,hn,"data-add=\"image\"" as *u8)==1 { ok=1 } } } } } 42 rows=rows+1; pass=pass+furow(0, ok, "canvas has the element palette (heading/text/button/image)" as *u8) 43 44 // R1 (static): assembles tier|freeform + el| lines 45 ok = 0; if fuhas(html,hn,"tier|freeform" as *u8)==1 { if fuhas(html,hn,"el|" as *u8)==1 { ok=1 } } 46 rows=rows+1; pass=pass+furow(1, ok, "canvas assembles tier|freeform + el|kind|x|y|w|text|href lines" as *u8) 47 48 // R2 (static): free placement via pointer drag 49 ok = 0; if fuhas(html,hn,"pointerdown" as *u8)==1 { if fuhas(html,hn,"pointermove" as *u8)==1 { ok=1 } } 50 rows=rows+1; pass=pass+furow(2, ok, "free placement: elements draggable via pointer events" as *u8) 51 52 // R3 (static): POSTs to a path-relative /build 53 ok = 0; if fuhas(html,hn,"location.pathname" as *u8)==1 { if fuhas(html,hn,"/build" as *u8)==1 { if fuhas(html,hn,"POST" as *u8)==1 { ok=1 } } } 54 rows=rows+1; pass=pass+furow(3, ok, "canvas POSTs to a path-relative /build (works at /freeform and /webdev)" as *u8) 55 56 // R4 (static): THIN SHIM -- safe text via textContent, delegates via srcdoc, no engine logic 57 ok = 0; if fuhas(html,hn,"textContent" as *u8)==1 { if fuhas(html,hn,"srcdoc" as *u8)==1 { if fuhas(html,hn,"sg_build" as *u8)==0 { ok=1 } } } 58 rows=rows+1; pass=pass+furow(4, ok, "THIN SHIM: user text via textContent, delegates via srcdoc, no engine logic" as *u8) 59 60 // R5 (behavior): the canvas's payload format -> the daemon path (se_build_tier) -> governed canvas, placement honored 61 let l5: i64 = se_build_tier("tier|freeform\ntitle|Free-form page\nel|heading|60|60|360|My Heading|#link\nel|button|60|200|180|Click me|#go\n" as *u8, fulen("tier|freeform\ntitle|Free-form page\nel|heading|60|60|360|My Heading|#link\nel|button|60|200|180|Click me|#go\n" as *u8), out, 262143) 62 ok = 0; if l5>0 { if fuhas(out,l5,"My Heading" as *u8)==1 { if fuhas(out,l5,"left:60px;top:60px;width:360px" as *u8)==1 { if fuhas(out,l5,"href=\"#go\"" as *u8)==1 { ok=1 } } } } 63 rows=rows+1; pass=pass+furow(5, ok, "BEHAVIOR: canvas payload -> daemon path -> governed canvas, placement honored" as *u8) 64 65 // R6 (behavior): a hostile element is escaped 66 let l6: i64 = se_build_tier("tier|freeform\nel|heading|0|0|100|<script>alert(8)</script>|\n" as *u8, fulen("tier|freeform\nel|heading|0|0|100|<script>alert(8)</script>|\n" as *u8), out, 262143) 67 ok = 0; if l6>0 { if fuhas(out,l6,"<script>alert(8)" as *u8)==0 { if fuhas(out,l6,"&lt;script&gt;alert(8)" as *u8)==1 { ok=1 } } } 68 rows=rows+1; pass=pass+furow(6, ok, "BEHAVIOR: a hostile canvas element is escaped (no raw <script>)" as *u8) 69 70 fuw("NX-STUDIO-FREEFORM-UI-GATE rows=" as *u8); fun(rows); fuw(" pass=" as *u8); fun(pass); fuw("\n" as *u8) 71 if pass == rows { 72 let line: *u8 = sys_mmap(256) 73 var off: i64 = fucat(line, 0, "CMSGATE row=nx_studio_freeform_ui freeform-canvas-surface rows=" as *u8) 74 off = fucatn(line, off, rows); off = fucat(line, off, " pass=" as *u8); off = fucatn(line, off, pass) 75 off = fucat(line, off, " verdict=PASS (drag-drop canvas thin-shim + payload builds governed)\n" as *u8) 76 let gf: i64 = sys_openat_append("knowledge/status/cms_gate.log" as *u8, 0x1a4) 77 if gf >= 0 { sys_write(gf, line, off); sys_close(gf) } 78 fuw("NX-STUDIO-FREEFORM-UI-GATE verdict=PASS -- free-form canvas surface (power-user tier) thin-shim + governed\n" as *u8) 79 sys_exit(0); return 0 80 } 81 fuw("NX-STUDIO-FREEFORM-UI-GATE verdict=FAIL -- NOT recorded (no fake-green)\n" as *u8) 82 sys_exit(1); return 1 83}