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:

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.