nx_swcompare_office.nx source
↩ module page · 222 lines · 20773 B
1// nx_swcompare_office.nx -- SoftwareCompare (office domain): the Nishi office stack MEASURED vs Microsoft 365
2// Copilot / Google Workspace Gemini / LibreOffice. Each Nishi cell PROVEN by the implementing symbol in the real
3// organ source on disk (present) or its ABSENCE (gap). Competitor cells = documented capability presence, grounded
4// in knowledge/library/office-sota-bar-2026-07-08.txt (cited, web-fetched 2025/2026). Coverage is HONESTLY LOW: the
5// office suite is a sovereign FOUNDATION, not SOTA -- the liar-kill enforces coverage<600 + the marquee gaps real.
6// Modes: no-arg = console census + liar-kill (gate); argv[1]="html" = emit the /compare/office page to stdout.
7// NOTE: no '#'/'!' in string literals (nx_cc trap) -> rgb() + emit '!' byte. license_tier: ORIGINAL expect_exit: 0
8import "nx_syscalls.nx"
9import "nx_swcompare_lib.nx" // w/wc/wn/c_read/streq + sc_theme_pass: ONE copy for the compare surface
10const K_MAGIC_262144: i64 = 262144
11
12// w / wc / wn / c_read / streq WERE DEFINED HERE and are now COMPOSED from nx_swcompare_lib.nx, whose
13// copies are byte-identical (its header records them as AUTO-EXTRACTED -- this file kept the copy).
14// This file and nx_swcompare_compute.nx were near-clones: the same five duplicated helpers AND a
15// byte-identical hardcoded palette line. Nothing in the estate compared them, so a change to either
16// would have diverged the two pages silently.
17// STILL DUPLICATED BETWEEN THIS FILE AND nx_swcompare_compute.nx, named rather than left silent:
18// c_exists, c_has, c_file_has, isp, ise, isa, con_row, td_badge. They are NOT in the lib yet, so lifting
19// them is a second, separate consolidation with its own proof -- not something to fold in unproven here.
20func c_exists(path: *u8) -> i64 { let fd: i64 = sys_openat_rd(path); if fd < 0 { return 0 } sys_close(fd); return 1 }
21func c_has(buf: *u8, n: i64, needle: *u8) -> i64 {
22 var i: i64 = 0
23 while i < n { var k: i64 = 0; var hit: i64 = 1
24 while needle[k] != (0 as u8) { if i + k >= n { hit = 0; k = 0 - 1; break } if buf[i+k] != needle[k] { hit = 0; break } k = k + 1 }
25 if hit == 1 { if k > 0 { return 1 } } i = i + 1 }
26 return 0
27}
28func c_file_has(path: *u8, needle: *u8, buf: *u8, cap: i64) -> i64 {
29 let n: i64 = c_read(path, buf, cap); if n <= 0 { return 0 }
30 return c_has(buf, n, needle)
31}
32// streq composed from nx_swcompare_lib.nx (byte-identical body), same as nx_swcompare_compute.nx.
33func isp(ns: i64) -> i64 { if ns == 1 { return 1 } return 0 }
34func ise(ns: i64) -> i64 { if ns == 2 { return 1 } return 0 }
35func isa(ns: i64) -> i64 { if ns == 0 { return 1 } return 0 }
36
37func con_row(label: *u8, ns: i64) -> i64 {
38 w(1, " [" as *u8)
39 if ns == 2 { w(1, "EXCEEDS" as *u8) } else { if ns == 1 { w(1, "PRESENT" as *u8) } else { if ns == 3 { w(1, "PARTIAL" as *u8) } else { w(1, "ABSENT " as *u8) } } }
40 w(1, "] " as *u8); w(1, label); w(1, "\n" as *u8); return 0
41}
42func td_badge(fd: i64, code: i64) -> i64 {
43 if code == 1 { w(fd, "<td class='b y'>Yes</td>" as *u8); return 0 }
44 if code == 3 { w(fd, "<td class='b p'>Part</td>" as *u8); return 0 }
45 if code == 2 { w(fd, "<td class='b ex'>Best</td>" as *u8); return 0 }
46 w(fd, "<td class='b n'>No</td>" as *u8); return 0
47}
48// 3 competitors: M365 Copilot, Workspace Gemini, LibreOffice
49func html_row3(fd: i64, cat: *u8, ns: i64, ms: i64, gg: i64, lo: i64, note: *u8) -> i64 {
50 w(fd, "<tr><td class='cat'>" as *u8); w(fd, cat); w(fd, "</td>" as *u8)
51 if ns == 2 { w(fd, "<td class='b nc ex'>Best</td>" as *u8) } else { if ns == 1 { w(fd, "<td class='b nc y'>Yes</td>" as *u8) } else { if ns == 3 { w(fd, "<td class='b nc p'>Part</td>" as *u8) } else { w(fd, "<td class='b nc n'>No</td>" as *u8) } } }
52 td_badge(fd, ms); td_badge(fd, gg); td_badge(fd, lo)
53 w(fd, "<td class='note'>" as *u8); w(fd, note); w(fd, "</td></tr>\n" as *u8)
54 return 0
55}
56
57func main(argc: i64, argv: *i64) -> i64 {
58 let cap: i64 = K_MAGIC_262144
59 let buf: *u8 = sys_mmap(cap)
60 let DOCX: *u8 = "runtime/_hdl_build/nx_docx.nx"
61 let ODT: *u8 = "runtime/_hdl_build/nx_odt.nx"
62 let XLSX: *u8 = "runtime/_hdl_build/nx_xlsx.nx"
63 let MERGE:*u8 = "runtime/_hdl_build/nx_mailmerge.nx"
64 let VDOC: *u8 = "runtime/_hdl_build/nx_vizsla_doc.nx"
65 let DGEN: *u8 = "runtime/_hdl_build/nx_vizsla_docgen.nx"
66 let EST: *u8 = "runtime/_hdl_build/nx_estate_inventory.nx"
67 let PPTX: *u8 = "runtime/_hdl_build/nx_pptx.nx"
68 let IMPR: *u8 = "runtime/_hdl_build/nx_impress.nx"
69 let COEDIT:*u8 = "runtime/_hdl_build/nx_coedit.nx"
70 let AISLIDE:*u8 = "runtime/_hdl_build/nx_ai_slides.nx"
71 let BAR: *u8 = "knowledge/library/office-sota-bar-2026-07-08.txt"
72
73 let ns_docx: i64 = c_file_has(DOCX, "docx_write" as *u8, buf, cap)
74 var ns_odt: i64 = 0
75 if c_exists(ODT) == 1 { ns_odt = c_file_has(ODT, "text:p" as *u8, buf, cap) }
76 let ns_fmt: i64 = c_file_has(DOCX, "w:rPr" as *u8, buf, cap)
77 let ns_tbl: i64 = c_file_has(DOCX, "w:tblPr" as *u8, buf, cap)
78 let ns_img: i64 = c_file_has(DOCX, "w:drawing" as *u8, buf, cap)
79 let ns_lay: i64 = c_file_has(DOCX, "sectPr" as *u8, buf, cap)
80 let ns_trk: i64 = c_file_has(DOCX, "<w:ins " as *u8, buf, cap)
81 let ns_cmt: i64 = c_file_has(DOCX, "commentReference" as *u8, buf, cap)
82 let ns_ref: i64 = c_file_has(DOCX, "footnoteReference" as *u8, buf, cap)
83 let ns_spl: i64 = c_file_has(DOCX, "spellcheck" as *u8, buf, cap)
84 var ns_mrg: i64 = 0
85 if c_exists(MERGE) == 1 { ns_mrg = c_file_has(MERGE, "{{" as *u8, buf, cap) }
86 let ns_xlsx: i64 = c_file_has(XLSX, "fromtsv" as *u8, buf, cap)
87 let ns_cell: i64 = c_file_has(XLSX, "inlineStr" as *u8, buf, cap)
88 let ns_fml: i64 = c_file_has(XLSX, "<f>" as *u8, buf, cap)
89 let ns_cht: i64 = c_file_has(XLSX, "chart" as *u8, buf, cap)
90 let ns_piv: i64 = c_file_has(XLSX, "pivot" as *u8, buf, cap)
91 let ns_cnd: i64 = c_file_has(XLSX, "conditionalFormatting" as *u8, buf, cap)
92 let ns_mac: i64 = c_file_has(XLSX, "macro" as *u8, buf, cap)
93 var ns_pptx: i64 = c_exists(PPTX)
94 if c_exists(IMPR) == 1 { ns_pptx = 1 }
95 var ns_coe: i64 = c_exists(COEDIT)
96 if c_file_has(VDOC, "crdt" as *u8, buf, cap) == 1 { ns_coe = 1 }
97 let ns_shr: i64 = c_file_has(VDOC, "acl" as *u8, buf, cap)
98 let x_ver: i64 = c_file_has(VDOC, "VIZSLA-DOC-VERSION" as *u8, buf, cap)
99 let ns_ver: i64 = x_ver * 2
100 var ns_ai1: i64 = c_file_has(DOCX, "llm" as *u8, buf, cap)
101 if c_file_has(DGEN, "llm" as *u8, buf, cap) == 1 { ns_ai1 = 1 }
102 let ns_ai2: i64 = c_file_has(XLSX, "llm" as *u8, buf, cap)
103 let ns_ai3: i64 = c_exists(AISLIDE)
104 let ns_ai4: i64 = c_file_has(DGEN, "agent_mode" as *u8, buf, cap)
105 let ns_dmg: i64 = c_file_has(VDOC, "VIZSLA-DOC-HISTORY" as *u8, buf, cap)
106 let ns_dgn: i64 = c_file_has(DGEN, "VIZSLA-DOCGEN" as *u8, buf, cap)
107 var ns_est: i64 = 0
108 if c_exists(EST) == 1 { ns_est = c_file_has(EST, "history" as *u8, buf, cap) }
109 let ns_snc: i64 = c_file_has(VDOC, "oauth" as *u8, buf, cap)
110 let ns_sov: i64 = (1 - c_file_has(DOCX, "nx_socket" as *u8, buf, cap)) & (1 - c_file_has(DOCX, "nx_tls" as *u8, buf, cap))
111 let ns_opn: i64 = c_exists(DOCX) & c_exists(ODT)
112
113 let corpus: i64 = c_exists(BAR)
114 let neg: i64 = c_file_has(DOCX, "microsoft_copilot_agent_mode" as *u8, buf, cap)
115
116 var present: i64 = isp(ns_docx)+isp(ns_odt)+isp(ns_fmt)+isp(ns_tbl)+isp(ns_img)+isp(ns_lay)+isp(ns_trk)+isp(ns_cmt)+isp(ns_ref)+isp(ns_spl)+isp(ns_mrg)+isp(ns_xlsx)+isp(ns_cell)+isp(ns_fml)+isp(ns_cht)+isp(ns_piv)+isp(ns_cnd)+isp(ns_mac)+isp(ns_pptx)+isp(ns_coe)+isp(ns_shr)+isp(ns_ai1)+isp(ns_ai2)+isp(ns_ai3)+isp(ns_ai4)+isp(ns_dmg)+isp(ns_dgn)+isp(ns_est)+isp(ns_snc)+isp(ns_sov)+isp(ns_opn)
117 var exceeds: i64 = ise(ns_ver)
118 var absent: i64 = isa(ns_docx)+isa(ns_odt)+isa(ns_fmt)+isa(ns_tbl)+isa(ns_img)+isa(ns_lay)+isa(ns_trk)+isa(ns_cmt)+isa(ns_ref)+isa(ns_spl)+isa(ns_mrg)+isa(ns_xlsx)+isa(ns_cell)+isa(ns_fml)+isa(ns_cht)+isa(ns_piv)+isa(ns_cnd)+isa(ns_mac)+isa(ns_pptx)+isa(ns_coe)+isa(ns_shr)+isa(ns_ai1)+isa(ns_ai2)+isa(ns_ai3)+isa(ns_ai4)+isa(ns_dmg)+isa(ns_dgn)+isa(ns_est)+isa(ns_snc)+isa(ns_sov)+isa(ns_opn)
119 let total: i64 = present + exceeds + absent
120 var coverage: i64 = 0
121 if total > 0 { coverage = ((exceeds + present) * 1000) / total }
122
123 var html: i64 = 0
124 if argc >= 2 { if streq(argv[1] as *u8, "html" as *u8) == 1 { html = 1 } }
125
126 if html == 1 {
127 w(1, "<" as *u8); wc(1, 33); w(1, "DOCTYPE html>\n<html lang='en'><head><meta charset='utf-8'><meta name='viewport' content='width=device-width, initial-scale=1'>\n" as *u8)
128 w(1, "<title>Nishi vs the Field -- Office Suite</title>\n<style>\n" as *u8)
129 // PALETTE CONSOLIDATED 2026-08-27. This line was BYTE-IDENTICAL to nx_swcompare_compute.nx:133.
130 // Two files, one design, nothing comparing them: the copies could only ever drift, and whichever
131 // drifted first would do so silently because no reader holds both. Both now compose the brand SSOT
132 // through sc_theme_pass -- the same source nx_swcompare_matrix has always used.
133 // ZERO VISUAL CHANGE BY CONSTRUCTION IN THIS THEME: these exact rgb values ARE the SSOT's light
134 // rows now, and the page gains the dark theme it never had.
135 sc_theme_pass(1)
136 w(1, "*{box-sizing:border-box}body{background:var(--bg);font-family:-apple-system,Segoe UI,Roboto,sans-serif;max-width:1040px;margin:5vh auto;padding:0 20px;color:var(--fg);line-height:1.6}\n" as *u8)
137 w(1, "h1{font-size:2rem;margin:0 0 4px}.sub{color:rgb(102,102,102);font-size:1.05rem;margin:0 0 4px}.crumb{font-size:.85rem;margin-bottom:18px}a{color:var(--ac)}\n" as *u8)
138 w(1, ".meth{background:var(--soft);border:1px solid var(--line);border-radius:12px;padding:14px 18px;margin:20px 0;font-size:.9rem;color:rgb(51,51,51)}\n" as *u8)
139 w(1, ".wrap{overflow-x:auto;border:1px solid var(--line);border-radius:12px}table{border-collapse:collapse;width:100%;min-width:760px;font-size:.93rem}\n" as *u8)
140 w(1, "th,td{padding:9px 12px;text-align:left;border-bottom:1px solid var(--line)}thead th{background:var(--soft);font-weight:600}\n" as *u8)
141 w(1, "td.b{text-align:center;font-weight:600}td.b.y{color:var(--y)}td.b.p{color:var(--p)}td.b.n{color:var(--n)}td.b.ex{color:var(--ex)}td.nc{background:rgb(238,243,255)}.cat{font-weight:600}.note{color:rgb(119,119,119);font-size:.83rem}\n" as *u8)
142 w(1, "th.nishi{color:var(--ac)}.sec td{background:var(--soft);font-weight:600;font-size:.85rem}.tally{margin:20px 0}.badge{display:inline-block;padding:2px 8px;border-radius:20px;background:var(--soft);margin-right:6px;font-size:.85rem}\n" as *u8)
143 w(1, ".verdict{background:var(--soft);border-left:4px solid var(--ac);padding:12px 18px;border-radius:0 10px 10px 0;margin:18px 0}.foot{margin-top:28px;color:rgb(136,136,136);font-size:.78rem;border-top:1px solid var(--line);padding-top:14px}\n" as *u8)
144 w(1, "@media(prefers-color-scheme:dark){:root{--bg:rgb(15,15,20);--fg:rgb(230,230,238);--line:rgb(38,38,47);--soft:rgb(23,23,31)}td.nc{background:rgb(20,26,43)}}\n" as *u8)
145 // THE PRINT SHEET GOES LAST (datavis DV7, 2026-09-15): order is its specificity -- see sc_print_css in nx_swcompare_lib
146 sc_print_css(1)
147 w(1, "</style></head><body>\n" as *u8)
148 w(1, "<p class='crumb'><a href='/'>Nishi Family</a> › <a href='/compare'>Compare</a> › Office Suite</p>\n" as *u8)
149 w(1, "<h1>Nishi vs the Field</h1>\n<p class='sub'>Office Suite — mechanically measured, liar-killed, sovereign.</p>\n" as *u8)
150 w(1, "<p class='sub' style='font-size:.9rem'>Nishi vs Microsoft 365 Copilot · Google Workspace Gemini · LibreOffice</p>\n" as *u8)
151 w(1, "<div class='meth'><b>How this is scored.</b> Every <b>Nishi</b> cell is <b>measured</b> against the real organ source on disk (present = the emit symbol exists; absent = it does not exist anywhere). Competitor cells = documented 2025/2026 capability from the cited office-sota bar. Unlike Computational Math, this domain scores <b>honestly LOW</b>: the Nishi office suite is a sovereign <b>foundation</b>, not a SOTA product. The liar-kill enforces coverage under 600 and that the marquee gaps are genuinely absent.</div>\n" as *u8)
152 w(1, "<div class='wrap'><table><thead><tr><th>Capability</th><th class='nishi'>Nishi</th><th>M365 Copilot</th><th>Workspace Gemini</th><th>LibreOffice</th><th>Notes</th></tr></thead><tbody>\n" as *u8)
153 w(1, "<tr class='sec'><td colspan='6'>Word processor</td></tr>\n" as *u8)
154 html_row3(1, ".docx (OOXML) read/write" as *u8, ns_docx, 1,1,1, "nx_docx -- Word-openable OPC package" as *u8)
155 html_row3(1, ".odt (ODF) read/write" as *u8, ns_odt, 3,3,1, "nx_odt; cloud leaders import/convert" as *u8)
156 html_row3(1, "Rich formatting (styles/bold/fonts)" as *u8, ns_fmt, 1,1,1, "nx_docx run-properties (w:rPr)" as *u8)
157 html_row3(1, "Tables" as *u8, ns_tbl, 1,1,1, "nx_docx w:tblPr" as *u8)
158 html_row3(1, "Images / media" as *u8, ns_img, 1,1,1, "no w:drawing yet" as *u8)
159 html_row3(1, "Page layout (headers/sections)" as *u8, ns_lay, 1,1,1, "no sectPr" as *u8)
160 html_row3(1, "Track changes / revisions" as *u8, ns_trk, 1,1,1, "no w:ins (doc-level versioning differs, see below)" as *u8)
161 html_row3(1, "Comments / annotations" as *u8, ns_cmt, 1,1,1, "no commentReference" as *u8)
162 html_row3(1, "TOC / footnotes" as *u8, ns_ref, 1,1,1, "no footnoteReference" as *u8)
163 html_row3(1, "Spell / grammar" as *u8, ns_spl, 1,1,1, "no organ" as *u8)
164 html_row3(1, "Mail merge" as *u8, ns_mrg, 1,3,1, "nx_mailmerge {{field}} -> per-record .docx" as *u8)
165 w(1, "<tr class='sec'><td colspan='6'>Spreadsheet</td></tr>\n" as *u8)
166 html_row3(1, ".xlsx read/write" as *u8, ns_xlsx, 1,1,1, "nx_xlsx SpreadsheetML" as *u8)
167 html_row3(1, "Cell typing" as *u8, ns_cell, 1,1,1, "numeric vs inlineStr" as *u8)
168 html_row3(1, "Formulas / functions" as *u8, ns_fml, 1,1,1, "no formula cells -- values only (the core gap)" as *u8)
169 html_row3(1, "Charts" as *u8, ns_cht, 1,1,1, "none" as *u8)
170 html_row3(1, "Pivot tables" as *u8, ns_piv, 1,1,1, "none" as *u8)
171 html_row3(1, "Conditional formatting" as *u8, ns_cnd, 1,1,1, "none" as *u8)
172 html_row3(1, "Macros / scripting" as *u8, ns_mac, 1,3,1, "none" as *u8)
173 w(1, "<tr class='sec'><td colspan='6'>Presentation</td></tr>\n" as *u8)
174 html_row3(1, "Slides author (.pptx/.odp)" as *u8, ns_pptx, 1,1,1, "NO presentation organ" as *u8)
175 w(1, "<tr class='sec'><td colspan='6'>Collaboration</td></tr>\n" as *u8)
176 html_row3(1, "Real-time co-editing" as *u8, ns_coe, 1,1,3, "no OT/CRDT -- the biggest cloud gap" as *u8)
177 html_row3(1, "Sharing / comments / permissions" as *u8, ns_shr, 1,1,3, "nx_vault ACL exists but unwired" as *u8)
178 html_row3(1, "Version history" as *u8, ns_ver, 3,3,3, "EXCEEDS: tamper-evident, content-addressed, never-lose -- cloud history is mutable/deletable" as *u8)
179 w(1, "<tr class='sec'><td colspan='6'>In-app AI (the 2025/2026 headline)</td></tr>\n" as *u8)
180 html_row3(1, "In-doc AI draft/rewrite/summarize" as *u8, ns_ai1, 1,1,0, "Copilot in Word / Gemini in Docs" as *u8)
181 html_row3(1, "AI data analysis in sheets" as *u8, ns_ai2, 1,1,0, "Copilot in Excel / Gemini fill" as *u8)
182 html_row3(1, "AI presentation generation" as *u8, ns_ai3, 1,1,0, "Copilot in PowerPoint / Gemini in Slides" as *u8)
183 html_row3(1, "Agentic multi-step" as *u8, ns_ai4, 1,3,0, "Copilot Agent Mode GA 2026-04; gated on our LLM arc" as *u8)
184 w(1, "<tr class='sec'><td colspan='6'>Storage / documents / sovereignty</td></tr>\n" as *u8)
185 html_row3(1, "Document management (versioned store)" as *u8, ns_dmg, 1,1,3, "nx_vizsla_doc store/get/history" as *u8)
186 html_row3(1, "Doc generation from structured data" as *u8, ns_dgn, 1,1,3, "nx_vizsla_docgen fields -> .docx" as *u8)
187 html_row3(1, "Records / estate workflow" as *u8, ns_est, 3,3,0, "nx_estate_inventory never-lose" as *u8)
188 html_row3(1, "Cloud / offsite sync" as *u8, ns_snc, 1,1,3, "local seg_store only; oauth2 roadmap" as *u8)
189 html_row3(1, "Sovereign: on-device, no telemetry" as *u8, ns_sov, 0,0,1, "PARITY with LibreOffice; cloud leaders send data up" as *u8)
190 html_row3(1, "Open format / no lock-in" as *u8, ns_opn, 3,3,1, "both OOXML and ODF" as *u8)
191 w(1, "</tbody></table></div>\n" as *u8)
192 w(1, "<div class='tally'><span class='badge'>coverage " as *u8); wn(1, coverage); w(1, "/1000</span><span class='badge'>EXCEEDS " as *u8); wn(1, exceeds)
193 w(1, "</span><span class='badge'>PRESENT " as *u8); wn(1, present); w(1, "</span><span class='badge'>ABSENT " as *u8); wn(1, absent); w(1, "</span></div>\n" as *u8)
194 w(1, "<div class='verdict'><b>Honest verdict.</b> NOT a state-of-the-art office suite — a sovereign <b>foundation</b> with correct .docx/.xlsx/.odt interop, mail-merge, and versioned document management, plus <b>one genuine exceeds</b> (tamper-evident content-addressed never-lose version history, which even LibreOffice lacks) and privacy/open-format parity with the open-source SOTA. The 2025/2026 leaders' differentiators are all absent: agentic in-app AI (Copilot Agent Mode / Gemini), presentations entirely, deep spreadsheet (formulas/charts/pivots), and real-time collaboration. Coverage is a capability fraction, not a rank.</div>\n" as *u8)
195 w(1, "<p class='foot'>Generated by nx_swcompare_office (sovereign NishiLang organ) — every Nishi cell verified against real organ source on disk; competitor cells from office-sota-bar-2026-07-08.txt. Zero JS, zero trackers.</p>\n" as *u8)
196 w(1, "</body></html>\n" as *u8)
197 sys_exit(0); return 0
198 }
199
200 w(1, "=== NX-SWCOMPARE-OFFICE -- Nishi office stack MEASURED vs Microsoft 365 Copilot / Workspace Gemini / LibreOffice ===\n" as *u8)
201 w(1, " -- SOTA bar grounded in corpus="); wn(1, corpus); w(1, " (office-sota-bar-2026-07-08.txt)\n" as *u8)
202 con_row(".docx read/write" as *u8, ns_docx); con_row(".odt read/write" as *u8, ns_odt); con_row("rich formatting" as *u8, ns_fmt); con_row("tables" as *u8, ns_tbl)
203 con_row("images" as *u8, ns_img); con_row("page layout" as *u8, ns_lay); con_row("track changes" as *u8, ns_trk); con_row("comments" as *u8, ns_cmt); con_row("TOC/footnotes" as *u8, ns_ref); con_row("spell/grammar" as *u8, ns_spl); con_row("mail merge" as *u8, ns_mrg)
204 con_row(".xlsx read/write" as *u8, ns_xlsx); con_row("cell typing" as *u8, ns_cell); con_row("formulas" as *u8, ns_fml); con_row("charts" as *u8, ns_cht); con_row("pivot tables" as *u8, ns_piv); con_row("conditional formatting" as *u8, ns_cnd); con_row("macros" as *u8, ns_mac)
205 con_row("presentations" as *u8, ns_pptx); con_row("real-time co-editing" as *u8, ns_coe); con_row("sharing/comments" as *u8, ns_shr); con_row("version history" as *u8, ns_ver)
206 con_row("in-doc AI" as *u8, ns_ai1); con_row("AI data analysis" as *u8, ns_ai2); con_row("AI presentations" as *u8, ns_ai3); con_row("agentic AI" as *u8, ns_ai4)
207 con_row("document management" as *u8, ns_dmg); con_row("doc generation" as *u8, ns_dgn); con_row("records/estate" as *u8, ns_est); con_row("cloud sync" as *u8, ns_snc); con_row("sovereign no-telemetry" as *u8, ns_sov); con_row("open format" as *u8, ns_opn)
208 w(1, " TALLY: EXCEEDS="); wn(1, exceeds); w(1, " PRESENT="); wn(1, present); w(1, " ABSENT="); wn(1, absent); w(1, " (of "); wn(1, total); w(1, " axes) coverage="); wn(1, coverage); w(1, "/1000\n")
209
210 let liar_neg: i64 = (neg == 0) as i64
211 let liar_corpus: i64 = (corpus == 1) as i64
212 let liar_core: i64 = ns_docx & ns_xlsx & ns_odt
213 let liar_gaps: i64 = isa(ns_pptx) & isa(ns_fml) & isa(ns_coe) & isa(ns_ai4)
214 let liar_exceed: i64 = (exceeds == 1) as i64
215 let liar_low: i64 = (coverage < 600) as i64
216 w(1, " LIAR-KILL: neg-absent="); wn(1, liar_neg); w(1, " corpus="); wn(1, liar_corpus); w(1, " core-present="); wn(1, liar_core)
217 w(1, " marquee-gaps-real="); wn(1, liar_gaps); w(1, " exceeds==1="); wn(1, liar_exceed); w(1, " coverage<600="); wn(1, liar_low); w(1, "\n")
218 let ok: i64 = liar_neg & liar_corpus & liar_core & liar_gaps & liar_exceed & liar_low
219 w(1, "NX-SWCOMPARE-OFFICE coverage="); wn(1, coverage); w(1, "/1000 EXCEEDS="); wn(1, exceeds); w(1, " verdict=")
220 if ok == 1 { w(1, "MEASURED-HONEST (liar-killed) -- sovereign FOUNDATION not SOTA; 1 exceed (never-lose versioning); leaders' agentic AI + presentations + deep sheets + real-time collab absent\n" as *u8); sys_exit(0); return 0 }
221 w(1, "RED (a check failed)\n" as *u8); sys_exit(1); return 1
222}