Commands break between shell words with a continuation the shell reads,
an option kept with its value. The 40x12 setup and plan keep a note or a
folder whole. Line mode counts files in place and missing, and names the
BIOS folder, as the screen does. The systems question fits its terminal.
Answers code_audit_20 and tui_audit_13. A tap acts on the frame it was
made on, bar entries that install, quit or open Confirm take two taps,
and Preferred regions keep their rows while open. Every check of a list
keeps the systems ticked, the plan's counts read the list the check
read, line mode leaves game data out of the choice alone, Confirm counts
copies, a pack's missing files are said before a size, and paths break
after a separator only.
code_audit_19 and tui_audit_12. A tap ticks a box and opens a choice on a
second tap of the row the screen saw tapped. One list drives the plan's game
data row, save line and data files. The version note, --offline in shown
commands, exit 2 for a chosen quit, legacy mouse reports read from bytes,
colour roles that read their words, the setup list's device column, the
copy browser, a drive two systems fit, WSL's Windows folder, and line mode
wording.
core_version is a string the code states, null or keyed by build mode,
and the schema refuses Git, SVN, unknown, master, main, latest, dev and
HEAD, alone or annotated. version_basis is defined per kind with the
fields each one needs, and kind none requires a null version.
tests/test_version_basis.py reads a recorded fixture of forge answers
offline and fails on drift, holds every profile to a basis (tag versions
in describe form, aliases equal to their profile, none as null), checks
that a pin advance reads the version again or is refused, and that the
schema refuses placeholders.
One table of roles from the 16 basic colours (accent, success,
warning, failure, muted, strong, selected) read by the full screen and
by the end of a line-mode run. Status words take their role from one
pattern table, the text never changes, and colour is off with NO_COLOR,
TERM dumb or unset, a terminfo entry naming fewer than 8 colours, or an
output that is not a terminal.
Colour goldens keep the escape codes, and a test strips them back to
the text goldens.
Long messages scroll with their position, a small window says why the
questions come line by line, one bar rule per width, the folder a
config names sits under it and wraps whole, the help while typing a
filter lists what does not type, the plan names --core and --region,
pc finds the computer setups, rows keep sizes near their names, a
partial result counts once, a quit is said as one, the WSL browser
names drives by letter and No connection names the pack.
A Termux run named /sdcard and /storage/emulated/0 for one storage, read
saves/<core> as a folder, split a backup path and the restore command
inside their words and named no folder for missing game data. Paths are
spelled as the BIOS folder was named, folders per core are said in
words, the result keeps paths and commands whole, and the game data line
names the folder it goes in.
Answers code_audit_17 and tui_audit_10: the folder found after o, SHARE
drive roots, one same-choice command, a counted confirm step in line
mode, counts from the narrowed list, read-only advice without sudo,
systems recorded in packs, Ctrl-Z stopping the whole job, and the
wording, layout and docs items.
Answers code_audit_16 and tui_audit_9: share drives give their bios
folder, card markers stop at mount points, a model finds its family,
the folder question quits on q, pages move by the rows drawn, and a
folder the installer proposed is created without the guard.
Line mode finds mounted cards, shows its menu and names the folder for a
pack, asks the folder instead of taking a default, and lists setups in the
screen's order. Devices have one spelling each, matched without case,
spaces or punctuation, and a device several systems run lists them all.
--tui --dest reads a card as --plain does. Card boundaries read every
parent up to a mount point from mountinfo. --offline with --yes counts the
files it leaves out as pending, never as failed. The P3 points of
code_audit_15 and tui_audit_8 follow.
card_choice is the one reading of a card's root for --dest, the setup
list with --dest, a card listed, browsed, typed or numbered: a blank
stick named for KNULLI, ROCKNIX or a system no card file names gets its
folder below the root and the same note on the screen and in line mode,
kept on Create the folder? and the plan. The MinUI family refuses a blank
--dest. A card mounted as BIOS is that card, a folder inside another
system's card is refused up to the drive's mount point, a list named for
another system's card gets a note, a refused --dest emits an error
event. AmberELEC and EmuELEC get a card setup.
Offline, every surface says missing, not failed: no retry line, no
--from after --from, Nothing installed when nothing was, --check counts
what needs the internet, a suggested command keeps --offline.
Drive letters under WSL for every path option, shown as D:\.
The setup list names each card system's devices and puts the cards after
RetroArch when nothing is found (Onion: 4 presses at 40x12, was 10), the
filter and the line menu take a device name, one match is chosen in one
press. Line mode names the BIOS folder and the card picked, leaves the
save directory files out before its menu, offers f) to copy from a
folder. Confirm shows no Install while it counts, Back from the systems
lands on Install, help keeps its column, one spelling per device.
Every system that runs from its SD card comes from card_setups(),
derived from the device rules: the setup list, its filter, --platform
and the line menus give each its own row and ask for its card. The
RetroArch row no longer lists handheld systems.
card_root_folder and card_choice share one identity check: another
system's card is refused for every system, KNULLI and ROCKNIX included,
and the same --dest gives the same folder from every entry point. WSL
drive letters are read as typed, the line question lists only that
system's cards and asks again after no.
Offline at a terminal, files left out count as missing: the run ends
with code 1 or 2, as the full screen does. Continue on the systems list
opens Confirm. Wording and layout points of code_audit_13 and
tui_audit_6.
Back from the systems list with nothing ticked keeps the ticks it
opened with, and None says First system once nothing is left to untick.
Confirm under --offline with nothing on hand has no Install, and the line
mode no longer asks to download what --offline never fetches. The line
mode counts the data files before its question.
Screen words: the checking clock starts at zero, a pack installs from
the pack, the copies found are said on a line of their own, the screen
of misplaced files says the copies stay, the save folder gets a line of
its own, the shared note is one line, a size keeps its unit, the same
save folder remedy on both screens, A Tick on the Miyoo bar, no Home
key in the help of a pad, and a system name said once with a pack.
A card system chosen on a computer, from --platform, the setup list, its
filter or the line-mode menu, always asks for its card. The card screen
lists only the cards whose files say they run that system, offers Look
again, and checks a browsed, typed or --dest folder as --dest is checked.
The line-mode Card root prompt lists the mounted drives, asks again on a
missing or foreign root, and asks before creating several folders. On the
device the detected folder is offered, and the bound card is forgotten
when another setup is chosen.
A system that runs from its SD card (Onion, spruceOS, muOS, KNULLI,
MinUI...) named with --platform on a computer no longer takes that
computer's RetroArch folder: one mounted card of that system is used,
at a terminal the card root is asked, without questions the run stops
on the --dest example. The interface opens the card screen with the
mounted cards first.
The result pager scrolls and counts lines, so its last line is
reachable at every size. The setup filter knows the devices each
setup runs on, from the guides and the firmware pages. A new event
kind, data, gives the bytes of the data trees, and the plan shows
them.
The Flatpak RetroArch's folder at 000 hid the retroarch.cfg naming ~/Games/bios, and the run offered 6.6 GB to ~/.config/retroarch/system. A closed folder under HOME or above the default now leaves no default: --dest is asked for. Python 3.14's quiet Path.exists() refusals are told from absence by os.stat, and an assumed folder reads as the one a frontend usually reads.
gptokeyb2 owns the pad in muxterm on muOS with PortMaster, and muxterm keeps PgUp and PgDn for its scrollback. The launcher now says so with RETROBIOS_PAD=gptokeyb_muxterm, and the hints name the gptokeyb buttons with no paging key.
The hint bar, the help and the install's stop line read RETROBIOS_PAD:
gptokeyb, evmapy, muxterm and miyoo each name their own buttons and
none they lack. A desktop names keys only, SteamOS game mode and any
unknown run keep both names. On a Miyoo, A (Space) chooses, L1 and R1
page, and R2 goes back: B is Left Ctrl, which sends no byte alone.
SIGTERM and SIGHUP are handled from the start of the run, so a stop
during detection ends on the farewell. A closed window now ends with
129: once the last write fails, stdout and stderr point at /dev/null
and the flush at exit no longer turns the code into 120.
- A handheld card mounted on a computer is found by the files its
firmware writes there: muOS, Onion, spruceOS, CrossMix, Allium and
Koriki from their device rules read below the card root, KNULLI and
ROCKNIX from the share their first boot seeds. It is a setup of its
own ("muOS SD card (E:\)") with the folder that system reads, and
--dest <card root> writes there too. --platform muos with a folder
that is no muOS card is refused with the folder to name.
- Space (X on PortMaster, Y on muxterm) opens the confirm screen from
Install and never installs, closes or quits by itself.
- Short of space, Choose another folder comes first, and the result
says the card is full in words, with no log lines and no command
naming the interface's own copy of the list.
- The plan keeps the BIOS folder second, cut in its middle, a --from
folder by its name, and the config that named the folder.
- The result says how many files came from the old card, how many
were downloaded and how many are still missing, as the line mode.
- The "other" row is named and explained, files shared by several
systems are counted apart, and a file that cannot be supplied is
named with its system, only where it matters.
- A work folder left by SIGKILL is removed by the next run, a failed
run's log after a week. A full card keeps no log.
- Smaller: the sudo advice names the folder, removing a --from folder
says so, the preview counts its files only, a proxy is named, a list
that is no JSON and the clock error read as plain sentences.
The plan offers the folder browser, mounted cards first and ZIPs listed,
to add --from (Options adds a second one, Left takes it back), checks the
folder again and says how many files it holds and how many are left to
download. Misplaced files are counted with a Show list of their reasons,
and a local copy no longer counts in the download speed. The found event
test now holds that the interface reads it after a check and an install.
A stop by SIGTERM (Start+Select under gptokeyb) reads the summary like
Ctrl-C and prints the count on disk. The systems filter keeps the ticks
and the focus. The bar names what A does on the focused row. Options
check the folder again, a missing network fails in 15 s with plain words,
an unwritable folder offers another one, a folder inside a card offers
its root, and only a failure keeps its log.
New event kind: checking, with files_done and files_total, while the
files in place are hashed. The exact event lists of the check and
install runs now carry two of them, for the two files in place.
Control characters from names, folders and the installer's own text
are shown as ?, on screen and in the lines left after it. The terminal
mode and the signal handlers come back even when the last write fails
or a second signal arrives. A stop from outside hands the terminal
back, the second Ctrl-C is announced, speed reads the last seconds,
values are glued to their options, and counts read before a change of
options say so.
A bare install at a terminal of 40x12 or more opens a full screen that a
keyboard or a controller mapped to keys drives: setup, plan, install in
three presses, systems, regions, cores, game data, folder browser and a
dry-run preview one press away. The installer runs itself as a child with
--events for every check and install, the file list fetched once and
handed over with --manifest. --tui asks for it, --plain, RETROBIOS_PLAIN
and ACCESSIBLE keep the line questions.
Removed 7 test files (135 tests) fully covered by test_e2e.py.
The E2E creates all fixtures in setUp, exercises every code path
with real files and real functions. Single source of regression.