[FEATURE] Complete independent consoles, vttys, TUI, keyboard layouts, mouse and boot logo #1
Labels
No labels
bug
ci
docs
duplicate
enhancement
help wanted
invalid
performance
phase-6
question
refactor
security
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
erix/ttyd#1
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem and motivation
The final user environment needs predictable framebuffer initialization, independent terminals and usable interactive tools. Multiple live vttys, layout-correct Unicode text, scoped selection/paste and a preserved authenticated logo must work through real input paths.
Proposed behavior and scope
Implement one-time configurable framebuffer clear, independent default TTYs, session-mediated TUI/extop behavior, US/Finnish keyboard translation, safe vtty switching, initially hidden mouse pointer and primary selection/paste. Deterministically convert and display the existing signed logo with Linux/guest packaging parity.
This issue records planned work; its unchecked criteria are not implementation proof. The normative basis is Phase 6 and AC1–AC24.
Authority, security and reliability
Bind display, input, focus, selection and retained text to exact session generations. Protect trusted chrome/consent, cancel prompts on switch, retire stale input and grants, and keep unsigned preferences separate from signed policies/code. Ordinary clients receive neither raw framebuffer nor global clipboard access.
Apply the priority order: security, reliability, then performance. Keep suspected vulnerabilities in the repository’s restricted SECURITY.md reporting channel.
Acceptance criteria
[features].fbcon_clear, defaulttrue, to runtime/buildconfiguration, schema, parser, feature identity and documentation; reject malformed values and
test omission, true and false.
before the first console output when enabled; when disabled neither initializer may erase
existing content merely because it starts.
through the trusted handoff; if early fbcon already cleared the screen, user fbcon adopts it
without another clear. Do not treat arbitrary descriptive startup bytes as proof of a trusted
completed clear.
conflicting unconditional release/early clears and test that late initialization never erases
valid early logs. Normal explicit TUI clearing remains separate from this initialization-only
build option.
console with clear enabled/disabled; assert exact clear count, final pixels and handoff
failure behavior, not just a serial READY marker.
tty_mirror = falsein both canonical dev/release images; alignsample/extended defaults with independent terminals and retain explicit mirrored fixtures so
the optional feature remains tested.
input/output/cwd/history/foreground jobs/consent and adequate declared capacity; single-path
and no-TTY configurations still work without extra grants.
new dual-shell default separately using integration#5 session-bound observations. Do not attribute a
policy/workload change to a kernel speedup or relax the carried limits; report each terminal's
full startup/command evidence.
visible cursor, erase regions, colors/attributes, rectangular cell updates, scrolling regions,
viewport/resize and frame completion.
checks and deterministic malformed-request behavior without granting raw framebuffer memory or
global-screen ownership to clients.
renderer versus terminal ownership. Keep trusted powerbox chrome protected; ordinary clients
cannot draw over it or steal focus/consent input.
same session-level interface; define supported capabilities explicitly rather than claiming
compatibility with every ncurses extension.
alternate-screen behavior, including extop's existing home/full-erase needs; test split escape
sequences, unsupported controls and dimensions.
resize/navigation, screen restoration and interrupt/exit cleanup; retain its exact
process-inspection/control authorities and never add broad console caps.
modal input is not consumed by extop and no previous trusted text or stale ordinary frame is
replayed after focus/session changes.
scrolling, resize, extop refresh/quit/Ctrl-C, independent TTYs, prompt interruption and
complete session/capability cleanup.
fix measured bottlenecks without skipping visible completion, and update IPC/Rust API man
pages, tool manuals and operator documentation.
retain driver/inputd raw identity and implement text translation at ttyd or a reviewed shared
pure layout layer. Provide signed, clean-room
en_USandfi_FImappings with modifiers,Caps Lock, AltGr, punctuation, Unicode and Finnish dead-key behavior. Keep physical identity,
navigation and control chords distinguishable from text.
default
en_US; preserve consistent layout behavior for every physical keyboardclient/session without double-translating serial input. Initially select layout at boot; later
runtime layout changes require their own state-transition contract, not reinterpretation of
buffered input.
fi_FIand include it explicitlyin image identity/test receipts. Keep canonical dev/release, extended profiles and clean CI
defaulting to
en_US; explicit CI layout fixtures test Finnish without allowing a developeroverride to leak into publication.
changes must not synthesize approval, reinterpret buffered keys or let ordinary layout
processing consume trusted y/n plus Enter. Document which chords are physical and which text
is layout-selected and display prompts consistently with those rules.
local override isolation, modifier/dead-key release, repeated input, Unicode editor/delete
behavior and trusted consent. Test both independent terminals and verify serial byte input
remains unchanged.
image/build docs and the technical manual, explicitly identifying unsigned convenience data
versus signed security policy and code.
backpressure-safe atomic character delivery; define dead-key composition, unsupported
combinations, modifier release and pending-state reset on focus/ session/consent changes. Test
interrupted multi-byte delivery cannot corrupt commands, leak pending text to another TTY or
reinterpret it as trusted input.
with their own shell, screen/scrollback, cursor, editing/history, cwd, foreground jobs and
input state. Keep virtual-terminal records separate from the existing two physical
framebuffer/serial console bindings.
with at least two exercised in acceptance. Allocate/reuse only explicitly authorized session
resources; an Fn ordinal cannot create processes or grant launch authority. Test exhaustion
and safe focus fallback when a shell/vtty exits, without imposing an incidental fixed table
limit.
vtty identified by Fn. Admit this exact authenticated gesture without a separate manual
secure-attention step, independently of keyboard layout; preserve existing trusted controls
and reject nonexistent/stale targets.
generation; keep events bound to their receipt-time destination and handle held
modifiers/releases without injecting them into the wrong vtty. Independent serial focus
remains unchanged; test explicit mirrored mode too.
cancellation/cleanup contract; never transfer approval state to the destination. Restore
ordinary content only after renderer acknowledgement and preserve fresh-input fences if a
later prompt is created.
screen/cursor/selection on activation; handle resize, scrolling and extop alternate-screen
updates without exposing another vtty or trusted chrome.
background output, exit/recreation, stale IDs, modifiers, both layouts, serial isolation and
prompt cancellation. Profile switching/memory use and record the multi-vtty workload
separately from frozen startup comparisons.
on the first authenticated nonzero movement, not button-only, resize or focus events. Define
per-seat visibility across vtty switches; distinguish this pointer from the shell's text
caret.
clip cursor drawing to the viewport and restore underlying pixels correctly during movement,
redraw, scrolling, resize and vtty changes.
from the owning vtty's ordinary text model, including wrapped lines, Unicode/cell boundaries
and scrollback. Bind selection to session and content revision; define updates while output
changes during a drag.
text, and middle-button press pastes it. Keep selection bytes scoped to the owning
terminal/session by default; cross-vtty transfer requires explicit user-directed
source/destination and realm policy, never a global clipboard or arbitrary screen-reading
capability.
with backpressure-safe ordering and no duplicate bytes. Define
bracketed-paste/multiline/control-byte behavior so shell paste does not silently execute
embedded newlines; require normal explicit submission. Do not apply keyboard layout
translation to already selected UTF-8 text.
selection/paste cannot approve, edit or queue answers to a trusted prompt; reject untrusted
escape-sequence clipboard access and keep the host/serial terminal clipboard separate. Retire
retained text on owner teardown/reuse.
button-only packets, first movement, bounds, pixel restoration, selection during
redraw/scroll/resize, Unicode, middle paste, backpressure, vtty isolation and prompt races;
prove cleanup and zero unintended authority.
source as the
original boot-logo source, recording its exact digest and asset provenance. It is currently a
1024×1024 RGBA PNG. Preserve its artwork/transparency; define deterministic
preprocessing/scaling rather than generating a new logo.
with explicit dimensions/pixel/alpha format; package it as an optional signed non-executable
boot.img section. Keep general PNG decoding out of the bootloader unless a separately
justified design requires it.
center using validated GOP geometry. Preserve aspect ratio, alpha blend against the existing
background and define deterministic fitting/ margins for small resolutions; never stretch or
draw outside the viewport.
destination bounds before drawing; test RGBA/BGRA, padding, clipping and overflow
independently. Image data grants no framebuffer mapping authority.
paths, independent of early text-log enablement. Preserve the clear-completion handoff so
later early/user console initialization does not immediately erase the logo; define temporary
text/logo placement and normal console takeover without hiding required readiness/error
output.
cosmetic-error handling for an authenticated but malformed bitmap; container/signature failure
still follows the existing fail-closed policy. Release temporary logo buffers/module authority
once no consumer needs them.
inputs/tools in the integration#8/integration#9 build closure; the final guest-built images must not depend on an
unrecorded host-side bitmap conversion.
early console on/off, both pixel formats and small/normal geometries; assert bottom-center
placement/transparency and unchanged text. Test signed-logo tampering rejection and document
the asset/format/build options in boot-tool man pages, canonical docs and the technical
manual.
For each implementation slice, retain actual formatting, strict Clippy, unit/doctest and warning-denied build results for all altered Rust repositories and valid configurations. Add relevant runtime VM coverage, monitor older unit/VM regressions in exact-head CI, and update canonical component documents and affected technical-manual/API material. Every authored code file must remain below 1,000 physical lines, with meaningful inline documentation and missing_docs enforcement in Rust crates.
Alternatives and tradeoffs
Different dual-shell/vtty workloads need separately recorded timing cohorts; they cannot be presented as kernel speedups or relax carried limits. Reuse raw physical event identity and pure layout/rendering semantics, preserving explicit mirrored fixtures and serial byte behavior.
Coherent realm image service prerequisites — 18 September 2026: Signed
8adf42e3a3014f583f7e16f32345bfa0d93b315fselects the original shared wire/startup dependency graph. Direct Rust implementation bytes are unchanged. All 10 default, all-feature and separate production development/release configurations pass 248/250/251/252 unit tests per configuration, strict host/native Clippy and freestanding linking with fatal linker warnings. Formatting, private-item rustdoc and Markdown pass, with zero warnings. Original push/PR CI is under observation. Matching catalog adoption and real consumer VMs remain requirements; complete realm and full in-guest build acceptance remain open.Original coherent realm source CI acceptance — 18 September 2026: Signed
8adf42e3a3014f583f7e16f32345bfa0d93b315fpasses CI 69 and CI 68. All four terminal logs are complete (120,912 bytes), with zero final warnings. This closes the original CI observation recorded above. Coherent catalog publication, actual consumer VMs and full guest-build acceptance remain separate open requirements.Tracking and rollout
Runtime consumer dependency alignment — 15 September 2026
Signed
2dfdbb8f4547086ae88615a83e0cebfd2e095fd4aligns the existing dependency selections with the original signed runtime graph. This checkpoint changes Cargo selections and the roadmap; this repository's Rust implementation files are unchanged. Formatting, strict Clippy, private rustdoc and canonical documentation checks pass without warnings. Default/all-feature development/release tests pass 248 default / 252 all-feature tests. Independent production configurations also pass strict host/native Clippy and native builds:ttyd-runtime: 248 development / 248 release tests,ttyd-runtime-seeded-interrupt: 251 development / 251 release tests,ttyd-runtime-seeded-wait-interrupt: 250 development / 250 release tests. There are 10 supported native builds in total. Push/review CI 66/67 passes with complete classified logs and no final warnings. The product catalog, product VM acceptance and guest build remain pending. Review: #3.Dependencies: integration#1, bootloader#1
Dependencies identify required contracts and closure gates; preparatory inventory/design can proceed in parallel under one owner per edited file. Link bounded implementation issues and their PRs here before claiming acceptance. Use
feature/posix-compat, regular signed commits in the canonical contribution format, and WIP PRs linked to the exact coherent component graph. All cross-repository Cargo/catalog selections and CI helpers use full 40-character lowercase commit hashes, including transitive dependencies; do not substitute branch, tag or implicit HEAD selection.Close criteria only with their own reviewed deliverables and validation evidence. Pending, skipped, cancelled, failed or predecessor-only results remain distinct. Keep main images unchanged until explicit promotion direction; technical completion does not authorize merges, release tags or publication.
Coherent dependency checkpoint — 20 September 2026: signed/pushed commit 318b302f576ed4818e21435a27d96d5cdf144241 aligns original shared dependency pins with the explicit installer-rights contract. Only the manifest and roadmap change; local implementation, APIs and authority policy are unchanged. Four strict 248/252-unit configurations, four native builds with the maintained linker layout, host/native Clippy, formatting, private rustdoc and dependency checks pass without warnings. Original CI 70/71 passes with four complete hashed logs (120,904 bytes), zero warning candidates.
Full catalog equality and actual consumer-image validation remain required under Integration regression 68. The broader work remains tracked by phase completion, including native external Rust/LLVM/runtime rebuilding and both complete EriX-in-EriX generations. This dependency checkpoint does not close full lifecycle, frame or self-hosting acceptance.
Acknowledged terminal service dependencies — 21 September 2026: signed ce05f76f11f02612a0ad062868021f4e100daff1 selects the original shared libraries for repeated terminal observation, exact acknowledgement and final CPU measurements under Kernel design 20. All 4 strict 248/252-test selected development/release feature configurations, warning-denied host/native builds with the maintained linker layout, host/native Clippy, private rustdoc, applicable doctests, formatting and dependency/Markdown checks pass. All authored code remains below 1,000 lines. Original CI 72, 73 passes; complete hashed logs total 120,984 bytes with zero warning candidates. Full service CPU/profiler VM acceptance and guest builds remain open in Phase 6 completion.
[FEATURE] [P21] Complete independent consoles, vttys, TUI, keyboard layouts, mouse and boot logoto [FEATURE] Complete independent consoles, vttys, TUI, keyboard layouts, mouse and boot logo