HEXWORK - A Lantern in the Deep: 3D ASCII terminal roguelike RPG in Rust. Entirely designed and built by Muse Spark 1.3 to evaluate if I like the model.
hexwork docs player-interface-validation.md
5.8 kB
Markdown
at main

Interface recovery validation ledger #

2026-09-09. Automated implementation evidence; human AC10 pending. Use cargo +stable, --locked, approved opt1 dev/test environment from development-validation.md (assertions and overflow checks enabled). Worker commands occasionally omitted explicit +stable/--locked but used the same inherited stable opt1 target; parent commands below explicitly used both. Source changed between impact runs. This is complete target coverage plus focused correction evidence, not one frozen all-green invocation.

Metadata auditor generated 14 target-covering partitions in target/interface-partitions.json after adding terminal_color_reference.

Partition Evidence/status
workspace excluding CLI, all targets PASS parent; later renderer-only optimization separately passed full render112 tests and972 exact reference pairs
CLI bin hexwork PASS,0 tests
CLI routes PASS,1 test
CLI lib Parent full run258pass/4fail/2ignored; one compiled stale ribbon expectation subsequently fixed; three self-executable spawn ENOENT failures under concurrent relinking. All4 serial focused reruns PASS. New semantic marker test included in separate5/5 production semantic run. No remaining known lib failure; no claim of a fresh monolithic265-pass run
contracts_open PASS10 worker,85.99s; original bounded capture failure repaired through correct physical route/map exit
hud_essentials PASS9 worker,25.10s; optional legacy0 collision/map close and explicit focus CSI normalization
phase11_gate Initial44pass5fail; four repaired eye/feedback cases pass focused,267.15s five-case run had only script parser failure. Added presentation-only slice verbs; last presentation case PASS parent11.21s. Existing hash/history/v4/death durability assertions unchanged
player_interface_pty Parent entire target PASS19,220.29s, includes10 physical scenarios plus decoder/support cases
tactical_orientation PASS11 worker,66.18s final; strict unique player assertion retained, caught and verified real Entry center-rounding fix
terminal_color_reference Parent PASS2, independent VT oracle on actual full/diff encoders
tinker_live PASS11 worker,379.16s; actual modal title synchronization fixes premature Play-hint match; exact25cu/15cu checks intact
transfers_lifecycle PASS10 worker,122.57s
transfers_live PASS11 worker,174.24s; canonical-route physical key conversion explicit
wield_live PASS10 worker,300.61s; unchanged target

Additional evidence: Python VT7 pass; core light7 parent pass; term62 pass; App camera/movement9 pass; production semantic5 pass; renderer112 pass. No tests disabled to bypass failures. Two ignored CLI tests are the pre-existing transfer timing harness and new explicitly opt-in render benchmark.

Final cargo +stable fmt --all -- --check and git diff --check: PASS. Vendor bincode/bincode_derive lifetime warnings remain, no new compile warning in parent CLI check. The Rust language server failed initialization; compiler/tests and targeted reads supplied verification.

Performance #

Machine: Linux x86_64, Intel Processor U300,6 logical CPUs; rustc1.98.1 (48a229cea,2026-09-01), LLVM22.1.8.

cargo +stable test --locked -p hexwork-cli --lib interface_benchmark::render_trajectory_benchmark -- --exact --ignored --nocapture after conservative projected billboard bounds optimization:

Frame cells Samples after10 warmups median p95
80×24 100 3.909ms 4.541ms
120×36 100 8.640ms 11.161ms

Includes chase collision, active catalog collection, derived light, descriptors, render, gamma and full truecolor encode. Excludes App snapshot, terminal flush, and canonical simulation. Allocations unmeasured for this broader path; known per-frame BTreeMap/Vec work remains. Meets16.7ms for this trajectory, not a universal60fps or tighter per-stage budget claim. Concurrent heavy earlier runs missed the target (p9522/38ms); neither contention attribution nor optimization speedup is rigorously isolated. Renderer-only allocator benchmark has separate scope in ../crates/hexwork-render/BENCHMARK-recovery.md.

Release and manual boundary #

cargo +stable build --locked --release -p hexwork-cli: PASS. Binary: target/dev-loop-ab-57-opt1/release/hexwork SHA-256: 1697b68a8309e4573c44c5e630d4211054fa37503db976a845993efdb674981b.

The identified release also passed an actual seed140 Story truecolor physical PTY route: look/right/up/reset/exit, chase, inventory/return, tactical slice and rejected off-floor movement, Home, too-small/restore/grow/shrink, map exit/save. 18 decoded stages; opt-in JSON/SVG artifacts: target/player-interface-release-evidence/. This is terminal-protocol evidence, not human font/monitor readability.

AC10 manual_normal_brightness_orientation_route remains pending. Follow the README route on this binary and record screenshots and explicit human pass/fail. No full HEXWORK1.0 completion, accessibility certification, or human usability acceptance is claimed.

Explicit remaining matrix limits #

The implementation and tests are materially broader than the baseline, but not an exhaustive Cartesian matrix of every seed/mode/palette/gamma/remap/stance. Actual catalog service/exit projection tests use real anchors in synthetic clear geometry, not a walked service/exit route. Color oracle exercises public renderer palettes and actual ANSI; CLI gamma-specific decoded fixture matrix is incomplete. Allocation counts are measured only in the narrow renderer bench. Fully blocked invalid player geometry cannot provide a safe own-column eye; fallback policy is finite/deterministic and documented. These limits must accompany any acceptance claim; automated checks cannot replace AC10.