qhints-rs Adelic Layer · AT-SPI Semantic Truth · Coordinate Pipeline · Ghost Node Taxonomy
γ₁ = 14.134725141734693 · mefine-static · pemos.ca
VIZASL treats every rendered UI element as a spatial claim subject to legal proof. A button that exists in the DOM but overlaps another element has violated spatial sovereignty. A heading that is visually present but semantically invisible to AT-SPI is giving false testimony. The VIZASL system measures, witnesses, and scores spatial truth across two planes: semantic (AT-SPI) and visual (imageproc). Discrepancies between planes are ghost nodes — the most dangerous class of UI lie.
qhints-rs is a Rust crate that wraps AT-SPI accessibility tree traversal and feeds coordinates into the adelic mapping pipeline. It produces precise bounding rectangles for every semantic node. Fast, zero-copy, kernel-adjacent.
Rust crate AT-SPI wrapper adelic-readyAT-SPI (Assistive Technology Service Provider Interface) is the accessibility bus. It reports what elements exist, their roles, names, states, and positions — as the system believes them to be. AT-SPI is the witness for semantic claims.
semantic truth role + name screen coordsimageproc (Rust image processing library) provides the visual witness: what pixels actually exist on screen. Screenshot → edge detection → bounding box extraction. This is TC-4 equivalent for UI: the kernel-level visual fact.
pixel truth edge detection visual witnessThe adelic mapper converts screen coordinates into adelic space — a product of real coordinates and p-adic structures. Each UI element gets a coordinate body: a unique adelic address that allows SET-OPS to reason about spatial relationships without floating-point ambiguity.
adelic space p-adic coords unique address
// Stage 1: qhints-rs traverses AT-SPI tree
let hints = qhints::scan_window(window_id)?;
// hints: Vec<SpatialHint { role, name, rect: Rect(x,y,w,h) }>
// Stage 2: imageproc visual witness
let screenshot = capture_screen(window_id);
let visual_nodes = imageproc::detect_bounding_boxes(&screenshot);
// Stage 3: Adelic mapping
let adelic_coords: Vec<AdelicCoord> = hints.iter()
.map(|h| adelic_mapper::encode(h.rect, PRIME_BASIS))
.collect();
// Stage 4: Adelic pouch storage
pouch.store_batch(&adelic_coords)?;
// Stage 5: SET-OPS spatial relations
let relations = set_ops::measure_relations(&adelic_coords);
// relations: collisions, containment, reading-order violations
// Stage 6: joffe-math floor check
let floor_check = joffe_math::gamma1_floor_check(&relations, GAMMA1);
// Stage 7: mebraillines output + abacus accountability
mebraillines::render(&relations, &floor_check);
abacus::record_score(&floor_check);
| TYPE | NAME | DEFINITION | SEVERITY | ACTION |
|---|---|---|---|---|
| G-1 | Invisible Present | AT-SPI reports element. imageproc sees nothing. Element exists semantically but not visually. | CRITICAL | Force render or remove from accessibility tree |
| G-2 | Visual Phantom | imageproc detects pixels. AT-SPI has no matching node. Element renders but is inaccessible. | HIGH | Add ARIA role or remove from visual layer |
| G-3 | Coordinate Ghost | AT-SPI reports one position. imageproc witnesses a different position. Coordinate lie. | MEDIUM | Align CSS position with accessibility rect |
| G-4 | Layer Ghost | Element in correct layer order semantically but visually obscured by higher z-index sibling. | MEDIUM | Fix z-index hierarchy or add aria-hidden |
| G-5 | Order Ghost | Element visually first, semantically last. Reading order ghost creates navigation confusion. | LOW-MED | Reorder DOM or set tabindex explicitly |