Commit Graph
3320 Commits
Author SHA1 Message Date
Abdessamad Derraz 451ca88d7c chore: merge main into the round 4 fixes 2026-10-23 22:25:16 +02:00
Abdessamad Derraz 2c725d19c7 docs: regenerate the readme
624 emulators: 00_example is a test profile since 4be68b1ee.
2026-10-23 22:25:13 +02:00
Abdessamad Derraz d1414263fa feat: name the pad inside muxterm
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.
2026-10-23 21:47:55 +02:00
Abdessamad Derraz c35ae29d53 docs: name the cards the interface finds
The interface finds a muOS, Onion, spruceOS, MinUI, KNULLI or ROCKNIX card by itself (card_platform and the card rules in install.py) and lists it as a setup. The FAQ says so where it fills an SD card, within its word ceiling.
2026-10-23 21:39:42 +02:00
Abdessamad Derraz b88f23947a chore: merge main into the round 4 fixes
# Conflicts:
#	wiki/installer.md
2026-10-23 21:37:25 +02:00
Abdessamad Derraz 34fb1a4cbb chore: merge the launcher round 3 fixes 2026-10-23 21:35:10 +02:00
Abdessamad Derraz ade4e2b48b docs: say a mounted card is found by itself 2026-10-23 21:34:31 +02:00
Abdessamad Derraz 68349f246c chore: merge main into the launcher fixes 2026-10-23 21:29:54 +02:00
Abdessamad Derraz e7d27a264d fix: hide the pad from muxterm on every muos build
muxterm was allowed vendor and product 0001:0001, the id gpio-keys
gives the H700 pad on muOS before 2026-08-28: muxterm and gptokeyb2
both read it and every button acted twice. The allow-list is now
0000:0001, which SDL never reads back for a device (a vendor of 0 makes
a name GUID, read back as 0:0), so a pad plugged in later stays hidden.

- muxterm keeps PgUp and PgDn for its scrollback: in muxterm L1 and R1
  send nothing, and the README and wiki stop promising paging there.
- The offline detection runs with RETROBIOS_INSTALL_OFFLINE=1 instead
  of a closed loopback URL.
- Every launcher sets RETROBIOS_IDLE_EXIT=300 for the interface.
- ROCKNIX: control.ini's -sudokill goes through a sudo stub that runs
  nothing, so the mapper starts with -1.
- The sentinel ends with its launcher, a closed terminal app writes its
  status, a mapper lost mid-run is said and named (gptokeyb2 included),
  and the unwritable-card message stays in view.
- Tests: an SDL GUID model, a gptokeyb2 that outlives its kill, an
  interface that ignores SIGTERM, a zombie, a SIGHUP to the inner run,
  arrow bytes at the question, ROCKNIX's sudo.
2026-10-23 21:29:48 +02:00
Abdessamad Derraz 84ab3641a1 chore: merge the round 3 installer fixes 2026-10-23 21:20:01 +02:00
Abdessamad Derraz 49b2a69567 docs: exit 129, offline refusals and pad variables
The exit status names 129 for a closed window and the --offline
refusals of --target and --list-targets, and the events say a crash
leaves no end line. RETROBIOS_PAD and RETROBIOS_IDLE_EXIT join the
environment table, muxterm's missing paging and the save directory
found under --dest are said, and the options at a glance list
--declared-only and --offline. The first install page no longer
promises a controller on a computer, and gives the RetroPie command
for Windows too.
2026-10-23 21:11:45 +02:00
Abdessamad Derraz 67a6ad3e32 chore: wrap the work folder error line 2026-10-23 21:11:45 +02:00
Abdessamad Derraz 0ecd830028 fix: keep install tests off the host environment
On a WSL host install.main() reads USERPROFILE, APPDATA and the rest through cmd.exe and sets them in os.environ. Two selection tests left them set, and the detection test, run later in the jsonschema-free suite, found a Scoop folder no registry rule publishes. The selection tests restore os.environ, and the detection test clears the Windows variables it does not set.
2026-10-23 21:03:24 +02:00
Abdessamad Derraz d297cc3ff6 fix: bound the wait for a silent list server
A server that took the connection and never answered held line mode
93 s, three waits of 30 s for a first byte. A file list now waits 15 s
per answer and asks a silent server twice. Downloads keep their own
timeout between chunks.
2026-10-23 20:58:19 +02:00
Abdessamad Derraz 812d5d157e fix: tell offline from a lost connection on screen
With --offline and no list, the full screen said No connection and
offered a Try again that could never work. It now names offline mode
and the two ways a run gets its list without the network. With a list,
the plan counted downloads the run forbids: it says what this machine
can supply and what needs the internet, and the printed command keeps
--offline.
2026-10-23 20:56:37 +02:00
Abdessamad Derraz ba4db2ab57 fix: keep system names whole at 40 columns
The size column took half the line and cut every name to eleven
letters: Game Boy, Game Boy Advance and Game Boy Color read alike. A
system row now carries shorter size forms, and the longest one that
leaves the name whole is shown, none when that is what keeps it.
2026-10-23 20:53:07 +02:00
Abdessamad Derraz 36f4b338e1 fix: offer no paging keys on muxterm
muxterm keeps PgUp and PgDn for its scrollback and its L1 and R1 send
nothing: the help named a page key that never reaches the interface.
2026-10-23 20:50:59 +02:00
Abdessamad Derraz a23e9a09b8 feat: close the first screen when no button comes
RETROBIOS_IDLE_EXIT=SECONDS: with no key on the first screen for that
long, before any choice, the interface exits 0 with one line. A mapper
that never opens the pad no longer freezes a handheld there.
2026-10-23 20:50:24 +02:00
Abdessamad Derraz a296bbfdff fix: keep why a data tree or a copy failed
A damaged member of a data tree's archive (zlib.error, EOFError) ended
the run on a traceback, and a failed write left its .part. --offline
refusing a data tree, or the download after a --from copy failed, lost
its kind, so the advice named the network instead of --offline.
2026-10-23 20:49:23 +02:00
Abdessamad Derraz abba99d352 fix: find the save directory for a named folder
A run given --dest detected nothing, so retroarch.cfg was never read:
the full screen, which names every folder, sent Azahar's keys.txt to a
guessed RetroArch/saves or dropped it without a word, where line mode
wrote it to savefile_directory. The configs are now read once when a
save directory is asked for, and the plan and the result say what was
left out.
2026-10-23 20:47:36 +02:00
Abdessamad Derraz e7a64d6a08 docs: install from a zipped pack or an old card
The FAQ said to unzip a pack before --from-pack, which reads the ZIP, its parts or their folder as they are. A lost or wiped card now has its answer, --from, linked to Copy from an old card. Can I play without the BIOS goes, Do I need BIOS files answers it.
2026-10-23 20:46:37 +02:00
Abdessamad Derraz ccc8af7a47 fix: compare a card's BIOS folder by folders
--dest NOTMUOS/bios ended with MUOS/bios as text and passed as a muOS
card's folder. A card two systems claim now says so in one line, and
the system named among them decides the folder.
2026-10-23 20:43:38 +02:00
Abdessamad Derraz 246b6c6efc fix: print found paths as the terminal shows them
The line output printed the --from folder, the files found there and
the BIOS folder paths as they are: a name holding ESC drove the
terminal. screen_text moves out of the interface section and cleans
every line of the check, the copy plan and the unreadable list.
2026-10-23 20:42:55 +02:00
Abdessamad Derraz 3523e46595 fix: open each archive of a folder once
Each ZIP member read reopened its archive and parsed its directory
again: 4000 members of one size made 4000 parses. A folder index keeps
the archives it reads open, 16 at most, read under a lock from the copy
threads, and every index is closed at the end of the run. Archives the
list installs are still opened and closed at once.
2026-10-23 20:40:57 +02:00
Abdessamad Derraz 3203c766fc fix: name a folder or unreadable file in place
A folder or a file the user cannot read at a destination ended --check
and the install on a traceback from the hashing pool. --check now gives
the reason per file, and the install fails that file alone, before any
download for a folder.
2026-10-23 20:37:32 +02:00
Abdessamad Derraz 4b8e2f9de2 fix: check system_titles at the boundary
A list or a number among the titles passed validation and raised later,
in --system matching or the interface.
2026-10-23 20:37:03 +02:00
Abdessamad Derraz ea48a54329 fix: judge a declared slot by the platform's copy
--declared-only settled each slot on its first declaration before the
cores narrowed the list, and the declared event judged the core copy
served in its place. Both now read the declaration whose systems
remain, as the platform checks it.
2026-10-23 20:36:53 +02:00
Abdessamad Derraz 5869da409b fix: open the interface whatever owner files hold
An owner file holding a number past a pid raised OverflowError before
the screen opened, and a full temp disk stopped the run on the owner
write. 0 and negative numbers are unknown owners, not process groups.
2026-10-23 20:24:40 +02:00
Abdessamad Derraz cf3b61a17b fix: exit on the window's signal when it closes
A closed window under a changing screen failed the draw (EIO, or a
termios.error from the SIGCONT that comes with SIGHUP) before the
signal was read, and the run ended on 1 with a crash log kept.
2026-10-23 20:22:42 +02:00
Abdessamad Derraz 4ffdcf04b1 fix: rank the emulator before its frozen copies
A profile pinned to one platform's build (pin_frozen) answers after the emulator, as a frozen_snapshot does: Flycast now answers dc bios missing ahead of Reicast and Flycast 2021 LE. terms weighs 30, so the version table answers which mame version first, and the gate now asks for rank 1 there. The search field test names the five fields, since round 4 item 2.4 put the title meta on the h1.
2026-10-23 20:19:26 +02:00
Abdessamad Derraz 8a8931e4c6 feat: write the options glance from the parser
The glance on the installer page is written from install.py's argument parser when the page is built, grouped by GLANCE_GROUPS. An option no group names lands under Other, so a new option cannot be left off the page.
2026-10-23 20:19:26 +02:00
Abdessamad Derraz db0065e4f5 chore: merge main into the round 4 fixes
# Conflicts:
#	tests/test_audit_regressions.py
2026-10-23 20:04:42 +02:00
Abdessamad Derraz b5173ce72f fix: answer the search gate's missed queries
terms weighs 20, so the version table outranks MAME parts. The FAQ carries ios, iphone, ipad, the file page check my dump, and a console's regional lead names it (the PlayStation BIOS). The FAQ quotes the bootstrap's fingerprint message again. The troubleshooting page, which answers the dc/ trap, joins the pages that answer dc bios missing. The gate starts node without its compile cache.
2026-10-23 20:04:38 +02:00
Abdessamad Derraz e5cd024e2e fix: settle the round 4 site merge
Root pages nothing produced are swept, so a table moved to a platform page no longer keeps the address its redirect needs. Data tree pages name their readers, board crumbs end on the Arcade page once, fba2012 is headed FB Alpha 2012, test profiles get no page, and the installer glance lists --declared-only and --offline. sitesources.py goes through run_cli.
2026-10-23 20:04:33 +02:00
Abdessamad Derraz de55360b56 feat: flag a stale source-paths record
check_freshness reports source-paths.json STALE when it records a tree no profile pins any more, and tools.md names sitesources.py --fetch where pins move.
2026-10-23 20:04:12 +02:00
Abdessamad Derraz bac801c90e chore: run node without its compile cache
The deploy job sets NODE_DISABLE_COMPILE_CACHE for the build and the search gate, and lighthouse.py passes it to its children. The paths list gains generate_event_schema.py, which the site build imports.
2026-10-23 20:04:12 +02:00
Abdessamad Derraz 59285292c3 chore: bizhawk app icon, minui initials
BizHawk's tile takes EmuHawk's application icon (ApplicationIcon in its csproj) instead of an account avatar. MinUI has no logo of its own: its entry and copy go, and fetch_site_images.py now removes the copy of a platform without a logo.
2026-10-23 20:04:12 +02:00
Abdessamad Derraz 58c239deb4 fix: keep the node cache test before main 2026-10-23 19:56:44 +02:00
Abdessamad Derraz a8fef3fbbd chore: merge pad-aware interface hints 2026-10-23 19:43:54 +02:00
Abdessamad Derraz 4b92b517dd fix: read the handheld section up to the next one 2026-10-23 19:36:22 +02:00
Abdessamad Derraz 68452a0518 feat: name the keys of the input that runs
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.
2026-10-23 19:32:08 +02:00
Abdessamad Derraz 6f958382b7 chore: merge the engine options round 2026-10-23 19:25:34 +02:00
Abdessamad Derraz d6782913cf feat: add --offline and bound the connect time
--offline (or RETROBIOS_INSTALL_OFFLINE=1, which the runs the
full-screen interface starts inherit) makes no network request. The
file list stops the run at once with an error event of reason
offline unless --manifest or --from-pack gives it, a file the run
would download fails at once with its own advice, and board detection
is skipped. --target and --list-targets refuse it. RETROBIOS_OFFLINE
is not reused: CI and the test suite set it for every process, and the
installer tests serve their files over loopback.

A connection now has 4 s to open, then the read keeps its 30 or 60 s
timeout: three tries that never connect end in about 15 s instead of
93, and a slow but open transfer is not cut.

A --dry-run prints its totals first. A plan taller than the screen
names the ten largest systems, and --verbose lists every system and
file. Events are unchanged.
2026-10-23 19:24:07 +02:00
Abdessamad Derraz 7143d20ef8 fix: check the event schema under the given root
validate_schemas.py read install-events.schema.json from the real tree while a test pointed ROOT at a scratch one, and test_schema_semantic_gate.py called unittest.main() before its last class.
2026-10-23 19:23:59 +02:00
Abdessamad Derraz 8f50015a0c feat: round 4 reference and data 2026-10-23 19:23:58 +02:00
Abdessamad Derraz 167597ad5e feat: round 4 emulator pages 2026-10-23 19:23:58 +02:00
Abdessamad Derraz 5e09301dd8 feat: round 4 system pages 2026-10-23 19:23:58 +02:00
Abdessamad Derraz 3bbe7225af docs: round 4 wiki and release docs 2026-10-23 19:23:53 +02:00
Abdessamad Derraz 03d12ffe98 feat: round 4 entry pages 2026-10-23 19:23:29 +02:00
Abdessamad Derraz 7a2b83882d feat: round 4 search 2026-10-23 19:23:29 +02:00