Console model and interface run 01 - kmosoti/FabricO11y GitHub Wiki
Console model and interface investigation — run 01
Date: 2026-10-10. Scope: native presentation algorithms and an explicitly synthetic Leptos/WebAssembly PWA foundation. This is not authenticated product integration, human usability acceptance, a mobile-platform qualification or a release.
Direction and sources
The art direction follows an operator task through its evidence, hierarchy, encoding, interaction and implementation. Fabric uses restrained cyan accents, white/deep navy surfaces, readable evidence tables, labelled chart scales and visible gaps. These visual choices are design judgments to evaluate, not universal scientific conclusions. “AI tells” describes generic shortcuts such as invented metrics, decorative charts, empty controls and illegible styling; it does not establish whether an interface was AI-generated.
The method draws on primary research and standards:
- Munzner, InfoVis/TVCG 2009: separate domain tasks, data/operation abstraction, encoding/interaction and algorithms, and validate each claim at its own level.
- Heer and Bostock, CHI 2010: visual perception can be studied experimentally; encoding, chart size and grid design affect interpretation.
- WCAG 2.2 and USWDS data visualization: accessibility, text equivalents, context and meaningful data access.
Task time is decomposed as navigation + query wait + interpretation + action. Success, wrong interpretations/actions, assistance and timing are measured separately, subject to evidence fidelity and accessibility. No arbitrary weighted beauty score or human-performance claim follows from a faster chart algorithm. Human comparisons remain unrun; future comparisons preregister participants, tasks, equivalent fixtures, order, viewports, measures and stopping rules.
Implemented finite foundation
The fabric-ui composition root provides Overview, Explore logs/metrics/spans,
trace detail, Pipeline, bounded manually advanced Live Tail, Settings and two
themes. Fixtures are conspicuously labelled. The default/reopened screen is locked;
it does not ask for a master administrator token or implement a fake login.
No API transport or protected server data is present yet.
Native models implement checked request/session/query epochs, retained row and UTF-8 byte limits, completion-based polling/backoff, and integer-time extrema buckets. Tail limits are 4,096 rows / 1 MiB retained payload; the demonstration uses six rows / 4,096 bytes. Charts accept at most 65,536 samples / 1,024 buckets. Text filters retain at most 4,096 UTF-8 bytes. These local bounds are not whole browser/server RSS bounds, transport-decoding bounds or authorization enforcement.
Registered chart experiment
Protocol: repository docs/experiments/benchmarks/console-model-protocol.md.
Fixed 65,536 ordered nanosecond samples, periodic spikes and explicit gaps,
256 display buckets, five warmups and 21 interleaved trials, alternating original
and optimized order. Output equivalence is checked before timing.
For span S and P buckets, the reference assigns
min(P-1, floor(delta * P / S)). Ordered inputs allow a monotonic cursor at
ceil(j * S / P), reducing wide divisions from N to at most P without changing
the partition. Exhaustive small grids include more buckets than time offsets,
repeated boundaries and the inclusive chart endpoint.
| Measured quantity | Direct division | Ordered boundary |
|---|---|---|
| Median preparation | 667.112 µs | 232.542 µs |
| p95 preparation | 730.206 µs | 335.974 µs |
| Output equality | Reference | Equal in fixture |
The ordered implementation delivered about a 2.87× preparation speedup in this fixture (65.1% lower median). This is not a browser frame-time or investigation speedup.
Raw non-gap geometry contained 65,472 points / 1,571,328 logical vector bytes. The envelope contained at most 512 extrema / 20,480 logical vector bytes: about 128 times fewer points and 76.7 times fewer output bytes. These are output representation counts, not measured heap/RSS. The raw transform itself was faster (171.195 µs median / 315.952 µs p95) than the envelope transform; raw and envelope have different display semantics. Extrema omit intermediate values, preserve observed min/max and gaps, and never claim an aggregate or exhaustive history.
Defects found and corrected
| Failure | Correction / retained check |
|---|---|
| A short Rust String could retain arbitrarily large spare capacity. | Normalize accepted retained strings through boxed-string ownership; preserve capacity/Unicode regression. Incoming decode allocation remains a separate bound. |
| A 15 s healthy poll retried after only 1 s on overload. | Delay is max(healthy interval, exponential backoff, Retry-After); failure cannot increase polling pressure. |
| SVG letterboxing separated plotted positions from external Y-axis labels. | Plot/ticks now share explicit coordinates; duplicate identical extrema marks omitted. Screenshots inspected. |
| Unlimited filter input could defeat retained-state limits. | Byte check, DOM limit, visible rejection and browser Unicode-overflow test. |
| Initial muted text/background and cyan/tint ratios were 4.274 and 4.314. | Darkened light-theme tokens; all 20 selected final opaque text pairs meet 4.5:1. This is not full WCAG conformance. |
| Shell-size check omitted the generated worker. | Recheck the complete artifact against 8 MiB before success. |
| First browser cache-defect injection had invalid JavaScript. | Preserve its timeout as an invalid control attempt; corrected worker caches a dummy API response and is rejected specifically by the cache check. |
The first browser harness also used WebDriver refresh, which bypassed worker control in this environment. Ordinary new navigation established control and supported offline-shell verification. The requirement was retained. Screenshots now await finite theme transitions, avoiding misleading intermediate colors.
Verification and artifact
- Native model verification: 17 integration tests and one unit test passed; includes exhaustive small-boundary/eviction comparisons and negative controls.
- Native and WASM Clippy passed on the recorded initial model snapshot. Final WASM check status is recorded below.
- Final build: Rust 1.99.0, Leptos 0.8.22, Trunk 0.21.14,
wasm32-unknown-unknown, optimized size / thin LTO. Public artifact is 1,519,153 bytes over ten files. WASM is 1,249,721 bytes (184,409 bytes deterministic gzip estimate); no network startup time or browser-memory performance claim follows. - Firefox 157.0: 19 functional/privacy checks passed on the compiled artifact. Actual narrow viewport was 500 × 758 CSS px, not the requested 390 px; this is no substitute for Android/iOS installed-app testing.
- Cache negative control: corrected injected API caching exited 1 exactly at “API bypasses shell cache”; the ordinary worker passed. Offline reopening shows only the locked shell; no telemetry or credentials are persisted.
- Palette: 20 pairs passed, with black/white and two failing-pair controls.
- Three manual documentation checks passed. Bun CI/hooks remain disabled.
Final static artifact: local data-drive results/ui-foundation-build-06.
Final ordinary browser evidence: results/ui-foundation-browser-07;
corrected cache control: results/ui-foundation-browser-mutant-04.
WASM SHA-256: 8e10578df8b4ec016cefd1374af5fe2daebc93552fbd8fdd2032a029b2021979.
Native probe: results/ui-native-03/check-4.log.
Palette: results/ui-palette-final-02.json.
Dependency and workspace findings
cargo deny --workspace --locked check exited 7. A root-package-only invocation
had exited 0 but did not inspect the new UI or all server dependencies.
The complete workspace result is the relevant finding.
UI introduces the unmaintained paste crate (RUSTSEC-2024-0436) and license
rejections for base16 (CC0), const_format/its macros, konst/its macros, slotmap
(Zlib), and xxhash-rust (BSL). Existing server failures include tiny-keccak (CC0),
unlicensed/publishable fabric-server metadata/path dependencies, and unmaintained
rustls-pemfile through axum-server. Duplicate versions are warnings.
Stable Leptos 0.8.22 and the inspected 0.9 beta still depend on paste. A maintained pastey alias requires a provenance-pinned patch across five upstream manifests and actual macro/browser verification; it was researched, not applied. Mandatory slotmap's Zlib license independently requires an explicit license-policy decision. No advisory ignore, private-crate disguise or license allowlist relaxation was introduced. References: RustSec, Leptos, pastey.
The original fast profile completed 16 checks successfully and failed the workspace
test check when rustdoc could not load fabric_frame (E0463). A full workspace
retry reproduced that failure. Isolated package doctests, workspace-only doctests
and replay of the exact rustdoc command then exited 0. A subsequent full
cargo +1.99.0 test --workspace --locked --all-features exited 0 in 292.395 s,
including all executable suites and doctest crate loads. The original fast
receipt remains failed; it was not relabelled. No source, test, policy or cache
cleanup change was needed for the passing rerun. Artifact-state dependence is
supported, but the mechanism is unresolved; overlapping Cargo activity using the
shared target directory is recorded as a confounder, not a proven cause.
Receipts and preserved failures: results/ui-doctest-repair-01/summary.json.
The successful rerun peaked at 12,677,955,584 bytes with no memory-high/max/OOM events.
Final WASM check: cargo clippy --locked --offline -p fabric-ui --target wasm32-unknown-unknown --lib --bin fabric-ui -- -D warnings exited 0 (results/ui-wasm-final/receipt.json).
Source implementation commit: 6cdfe4a on milestone/operator-console (local, not published to the source remote). Policy commit: 7942445. Unrelated pre-existing worktree changes remain; the build receipt pins exact UI source and working lockfile hashes.
Resource use and cleanup
All project workloads used the resource launcher, mounted data-drive caches and scratch, cgroup v2 memory max 20 GiB and swap 0. The initial full fast profile peaked at 17,181,716,480 bytes (about 16 GiB), recording 107 memory-high events and zero memory-max/OOM events; UI build-06 peaked at 102.5 MiB and final Firefox check at 718.6 MiB (cgroup totals, not application RSS). No real server was loaded, so these are not measurements of the 4 GB server cap. Project storage was about 58.9 GB, below the 100 GB ceiling. Toolchains/build caches are retained for reuse.
All browser profiles and owned processes were removed. Final artifact, screenshots, source hashes, raw measurements, failures and cleanup receipts are kept on the data drive. Superseded generated assets and the temporary wiki clone are cleaned after publication; no telemetry corpus or secrets were published.
Product consequence
This establishes an executable, measured UI foundation and a task-first art direction. It does not complete passkey/session/grant enforcement, live query adapters, package integration, cross-browser/PWA lifecycle, human usability or full accessibility acceptance. Those remain explicit release gates. The dependency failures prevent treating this experimental foundation as a release-ready UI.