Console/Error Capture — F106a shipped

Experiential-testing lane · 2026-07-23 · the console/CSP-capture axis (highest-ROI automated defect signal per the banked SOTA research) computed deterministically over sovereign surfaces.

What shipped: nx_uiq_console (CLI + lib, family: nx_uiq_color/contrast/perf) + nx_uiq_console_gate, built on the NAS over the API, promoted never-brick, registered + schema'd as MCP tools. Error classes: undefined var(--x) (no fallback), duplicate id, dead href="#frag", mixed-content http:// subresources, empty src="", container tag imbalance. Warning classes: fallback-saved undefined var, img without alt, empty href.

Gate (live tools/call, exit 0)

NX-UIQ-CONSOLE-GATE passed 12/12 verdict=GREEN — 9 classes exact-counted on a known fixture, clean-page zero (no false positives), liar-kill (one injected defect flips 0→1), script-bodies-masked tooth, and an empty-name var(--) prose tooth added after the sweep caught v1 false-flagging documentation text.

Full-scale sweep — 98 live pages, every top-level docroot surface

resultpagesdetail
PASS96zero console-analog errors
FAIL2capabilities.html: div open=40 close=39 (one missing </div>, debt seq619) · standup.html: <main> and <nav> opened, never closed (grep-verified, debt seq620)
warn1nishios_docs.html: one img without alt

Rigor note: v1 flagged 4 more pages for var_undef; source verification showed all four were the literal prose string var(--) in page text — a scanner false positive, not a page defect. The organ was fixed (empty-name references ignored), the gate gained the discriminating tooth, and only then were results published. No false positives survive.

F106b — ARIA-tree + structural diff (same session)

nx_uiq_atree shipped: role-tree snapshots (landmarks, headings, links, buttons, inputs, images, lists, tables, forms; explicit role overrides; names from aria-label, alt, then direct text) plus a real Zhang-Shasha tree-edit-distance (insert/delete/rename cost 1). Gate 9/9 verdict=GREEN — exact node counts, TED oracle 0/1/1/1 and symmetric, script-mask tooth, 62-node scale tree. Production proof: the live front door parses to a 109-node tree with self-TED 0; cross-page distance home vs index = TED 101; the heavy standup DOM = 157 nodes inside the declared 512 cap. A structural regression on any emitted surface is now a computable number.

Rigor note: the first gate run was an honest 7/9 RED — the shared prefix-based word comparator let a bare a tag test swallow article/aside; fixed with an exact-length comparator, then 9/9. The gate caught its own tool twice in one day.

F106c — the zero-Claude sentinel (same session)

nx_uiq_sentinel shipped: baseline blessed all 101 live pages (copy + console counts + tree size into a manifest); check re-audits every page and classifies — missing and console-regressed (errors above baseline) fail the run, struct-drift (tree-edit-distance > 0 vs baseline) flags review, new pages are counted. Gate 6/6 verdict=GREEN with each classification proven discriminately (a duplicate-id injection regresses the console without moving the tree; an appended footer drifts the tree without a console error). First production check: 101 pages, verdict CLEAN. A daily clock row now runs it with zero sessions — the verdict line lands in knowledge/status/uiq_sentinel.log; anything but CLEAN is the signal to look.

External-oracle calibration — Chrome's real console (anti-navel-gaze, seq632)

A REAL browser (Chrome headless, console logging, 10s virtual time) was run over a 12-page live sample and compared against this family's verdicts. Measured results:

findingoursChrome consolereading
capabilities unclosed div · standup unclosed main/navflaggedsilent (0 lines)defects are REAL (independently source-verified) but browsers recover silently — validator-family, relabeled
10 of 12 pagesPASS0 console linesagreement
/library, /torrent password field outside a formnot visible (static envelope)DOM warning, 4 linesChrome-only runtime class — the declared envelope gap, now measured
/torrent vantageaudits the docroot filerenders /login redirectauth-gated routes differ from docroot files for anonymous visitors

Consequence shipped: the organ now declares class families in its envelope — console (mixed-content, empty src), validator (tag imbalance, duplicate id), a11y (missing alt, dead fragment, empty anchor), computed-style (undefined custom property) — so a PASS is never read as more than what was measured. Both halves of seq632 are now run: real browser console AND real accessibility tree.

Accessibility-tree oracle — Chrome DevTools Protocol (seq632 closed)

The ARIA snapshots were measured against the real accessibility tree: Chrome 150 headless driven over DevTools Protocol, Accessibility.getFullAXTree, 10 live pages, ignored nodes filtered. It found a genuine bug and a genuine boundary.

roleours (before)Chrome AXoutcome
region (home)50OUR BUG — a bare <section> is generic; region requires an accessible name. Fixed → now 0, exact match
navigation / main / contentinfo (home)6 / 1 / 16 / 1 / 1exact agreement
heading / table / main (uiconsole)7 / 2 / 17 / 2 / 1exact agreement
footer inside a section (roi)contentinfosectionfooterOUR BUG — header/footer are banner/contentinfo only at document scope. Fixed → demoted when nested
link / heading (home)78 / 1655 / 11ENVELOPE, not a bug — the collapsed mega-menu holds exactly 23 links + 5 headings behind a CSS toggle; the a11y tree omits display:none subtrees, a static scan cannot. Now declared and quantified

Both spec rules are now enforced with discriminating gate teeth (labeled section = region and bare section = generic; nested footer demoted and document footer kept) — gate 11/11 GREEN. CSS-visibility blindness is written into the tool's own output envelope rather than left implicit.

Honest envelope

Static source scan; <script> bodies masked before structure scans; CSS-defined custom properties only; runtime JS errors and real CSP violation reports need a JS engine — that is browser-lane work and is not faked here. The F106 ladder (console → structure → sentinel) is COMPLETE; remaining SOTA gap: perceptual premium judging stays partnership-gated (will-not-fake).

Evidence: gate transcript + 98-page sweep JSON per page (classes/detail/verdict) · store row uisota-/uiq-console-f106a · tools callable via cap-gated tools/call.