Strip-and-block kills every ad (the site earns $0). Letting ads through is malvertising. Clean-serve is the third verdict — SANITIZE: run the hostile page's active content on the server so its JavaScript never executes in your browser at all, keep each ad as an inert static creative (the site still earns a real impression), deliver the content in native HTML5, and emit a per-page JSON safety receipt. USER safe · SITE monetizes · SEARCH neutral (served, not deranked).
1. Safety receipt (receipt mode) — nx_cleanview https://en.wikipedia.org/wiki/HTTP_cookie:
{"safe":true,"attacks_neutralized":{"scripts":5,"iframes":0,"inline_handlers":1,
"redirects":0,"miners":0,"popunders":0,"malware":0,"trackers":0},"ads_preserved_safe":0} exit 0
2. F108d sovereign server-side JS-execution (resolve mode, NEW — landed + live this session, with external-bundle enrichment) — nx_cleanview resolve https://techcrunch.com/ via MCP:
CI=49195 CV=1 SK=1 FH=1 <- the guarded JS-VM child executed on the NAS
{"url":"https://techcrunch.com/","js_media_resolve":{"found":false,"route":"none","url":null},
"engine":"sovereign guarded JS-VM (fork+CPU/mem-cap, no-network child)",
"scope":"page + up to 8 external <script src> bundles, all fetched over _best (Chrome-JA3);
bundles_fetched=8"} exit 0
The guarded engine forks a CPU/mem-capped child with no network to run the page's JS — hostile JS cannot hang, exfiltrate, or escape. Proven design: it fetches the page and up to 8 external <script src> bundles over clean-serve's strong _best (Chrome-JA3) path (bundles_fetched=8 measured live on arstechnica & techcrunch, 4 on the Guardian), so a framework player in an external bundle can be run — and it succeeds where the standalone sniff got fetch-failed. Honest: these complex sites still return route=none — the remaining gap is the JS-VM long-tail (jQuery-ready / DOMContentLoaded / XHR-capture), the precise next rung.
Web-hardening is a first-class RACI-owned workstream on the frontier board (lane cleanserve, live at /frontier). Every rung has a named owner; nothing is random or “by design.”
| function | A (accountable) | R (responsible) | C (consulted) | I |
|---|---|---|---|---|
| Web-hardening mission — safe delivery of the hostile web | security | engineer-browser | warden · referee | operator |
| Attack neutralization + safe-ad SANITIZE + receipt (live) | security | engineer-browser | referee | all |
| F108d JS-exec media resolution | security | engineer-browser | referee | operator |
| F108f / F102c TLS + crypto performance | security | engineer-browser | warden | operator |
| F108h/i fingerprint · CF-challenge · WARC archive | security | warden | engineer-browser | operator |
| Honest benchmark + maturity + evidence | referee | census + librarian | security | operator |
| state | rung | evidence / owner |
|---|---|---|
| LIVE | Server-side attack neutralization · safe-ad SANITIZE · machine receipt · SSRF guard · zero-JS deterministic delivery | receipt above · benchmark |
| LIVE | F108a MCP tool · F108b cron-supervised (heartbeat) · F108c atlas node · F108e recombination hooks | nx_cleanview · atlas card |
| LIVE | F108d JS-exec resolve — inline + up to 8 external bundles over _best, in a fork-guarded no-network VM | bundles_fetched=8 above · engineer-browser |
| NEXT | F108f / F102c — TLS session resumption (certloop ~1s → <100ms; alg=3 ~273ms cert-verify is the target) | measured · engineer-browser |
| NEXT | F108d JS-VM long-tail — jQuery-ready/DOMContentLoaded/XHR-capture + daemon :8102 wire, so real framework players resolve | route=none today · engineer-browser |
| OPEN | F108g filter-breadth · F108h fingerprint + CF-challenge · F108i WARC archive | owned on /frontier · engineer-browser / warden |
| where | what |
|---|---|
| /compare/cleanserve | 39 axes vs uBlock Origin · Brave · Privacy Badger · AdBlock Plus · NoScript · Reader View · Web Light · Browsertrix. MEASURED-HONEST — the gate forbids an all-win matrix (requires No≥Best): 5 structural exceeds, 9 honest gaps. |
| /compare/cleanserve/frontier | Research radar — 5 beyond-SOTA opportunities ranked by real 2025/26 momentum (WARC-archive 13 · fingerprint-defense 6 · ML-filter 6 · JS-exec 3 · CF-challenge 3). |
| atlas card | nx_cleanview in the from-god graph: fetch-stack ⊕ web-filter ⊕ clean-core ⊕ JS-VM — the recombination substrate. |
| /compare · /frontier · /pm | the hub, the CPM program board, and the PM ROI cockpit. |
5 structural exceeds (measured): server-side JS-never-runs-in-your-browser · safe-ad SANITIZE (site earns, no incumbent does this) · machine safety receipt · neutral-serve of difficult-but-legal sites · zero third-party dependency (own language, TLS, filter, renderer).
| gap | state + fix path | owner |
|---|---|---|
| TLS / crypto SLOW | Measured + ROOT-CAUSED this session (hard evidence, reproduced 3× — and self-corrected via investigation): our-domain handshake certloop = 918–1216ms = 3 cert-chain-link verifications at ~273ms each for the alg=3 = ECDSA-P-384 links. PINNED (corrected): the certs dir shows nishifamily.com uses a Let's Encrypt ECDSA cert — our leaf is already ECDSA-P-256 (alg=2, measured ~24ms, fast). The slow ~273ms links are Let's Encrypt's ECDSA intermediate + root (E5/E6 + ISRG Root X2), which are ECDSA-P-384 — a 3rd-party PKI choice we can't re-issue. Our P-384 verify is already windowed+KAT-gated; ~273ms is the inherent cost of pure-software P-384 (no asm intrinsics). By contrast alg=4 = RSA-SHA256 verifies ~49ms (Montgomery). FIX (corrected, evidence-backed): (1) request Let's Encrypt RSA certs instead of ECDSA — RSA intermediates verify ~49ms = ~5× faster, universally trusted, reversible via ACME; (2) cache LE's stable intermediate+root validation (same E5/X2 on every handshake → validate once, skip the P-384 re-verify) = the SOTA answer; (3) optimize our own P-384 field arithmetic. A careful ACME/edge-cert operation on the public cert — via the existing edge_swap + edge_rollback flow, coordinated, not rushed. (My first-pass “re-issue our leaf as P-256” was wrong — the leaf is already P-256; caught before deploy.) ✓ UPDATE — intermediate-validation cache BUILT + GATE-PROVEN this session: memoize the pure verify on sha256(child_der∥parent_der) so LE's byte-identical P-384 intermediate+root verify once per process then ~0ms. Gate-green (hard evidence): self-signed / expired / wrong.host .badssl.com ALL rejected (no false-accept, no MITM regression), valid certs accepted, 10/18 chain-links served from cache. ✓ DEPLOYED + LIVE-VERIFIED 2026-07-19: promoted to live nx_cleanview.elf; the live badssl gate PASSED via MCP (self-signed.badssl.com → rejected, valid certs accepted) and cache hits measured in production — across one resolve's 9 handshakes the certloop fell 16ms → 7ms with alg=4 ms=0 on repeats (chain-links served from cache). Never-brick held 14/14. Durable regression gate committed (nx_x509_chain_cache_gate 7/7 GREEN: DER-length KATs incl long-form + malformed, + memo key-equality) — supervised, not just live-smoked. The lib change rides into every fetcher on its next build (edge + nx_https_get carry the bigger LE-P-384 win via the persistent-cache follow-on). | engineer-browser (F102c) |
| F108d JS-VM long-tail | resolve mode is live + guarded, now fetching page + up to 8 external <script src> bundles over _best (bundles_fetched=8 measured live). Remaining: daemon :8102 wire → jQuery-ready/DOMContentLoaded/XHR-capture so real framework sites resolve vs route=none. | engineer-browser (F108d) |
| Filter-list breadth | nx_web_filter is a seed table, not EasyList/EasyPrivacy scale (300k+). Tracker/ad axes sit at PARITY-gap until scaled. | engineer-browser |
| Fingerprint depth · CF-challenge · WARC archive | zero-JS view removes JS fingerprinting but no canvas/WebGL spoofing; Cloudflare managed-challenge not passed; nx_web_archive present but not Browsertrix/Wayback scale. | engineer-browser / warden |