Commit Graph
588 Commits
Author SHA1 Message Date
Abdessamad Derraz 3a5b95eb31 docs: name the terminals clicks were checked in 2026-10-27 22:00:23 +01:00
Abdessamad Derraz 917ab7c94b chore: merge platform file rows 2026-10-27 21:46:44 +01:00
Abdessamad Derraz 793b16cf67 chore: merge folded cards and one install command 2026-10-27 21:45:48 +01:00
Abdessamad Derraz 0e2e014a96 chore: merge the long list tables 2026-10-27 21:15:17 +01:00
Abdessamad Derraz 1409a8db6a feat: list long file pages as filtered tables
MAME's card pages, GroovyMAME and yaps2 read 13,000 to 16,700 words of
cards. Each entry is now a table row (name, members, status, short
hash) that opens to its card in a details block, with the site's filter
box and row counter. Pages from 150 entries and every split part use it.
Visible words: mame-files-1 16,680 to 1,612, groovymame 14,396 to 1,876.

A row costs about five elements, so a part holds 180 cards: MAME goes
from 8 parts to 9, the largest at 567 KB and 8,989 elements.

Each wanted list (TOSEC, No-Intro, Redump) opens on its counts, then one
table folded under a filter box that opens it, in place of a block per
DAT. Only the names are searched: indexed descriptions and hashes put
the PlayStation page ahead of the PlayStation 2 one.

A filtered row stayed visible on a phone: a stacked row's display:block
outweighed the hidden attribute on every stacked table.
2026-10-27 21:14:04 +01:00
Abdessamad Derraz a8340614b8 chore: merge origin/main 2026-10-27 20:57:27 +01:00
Abdessamad Derraz 8adb84696d feat: fold card hashes, one install command
System and emulator file cards show the name, size, download, a short
SHA1 with a copy button, the setups and the emulators. The full hashes
and the other facts sit in one closed fold, each hash with a copy button.

A system's install box shows one command under the OS tabs for the
setup picked in a list, remembered across pages. Without the script the
list of every command shows, open. The Markdown the page budgets are
measured on is unchanged, so no card moves.
2026-10-27 20:56:07 +01:00
Abdessamad Derraz 20dc488e41 feat: list platform files as table rows
Each file of a platform list is one row: name, folder, status chip, a short hash on a button that copies it whole, and a details cell. The details hold every declared hash, the size, the served copy and the readers. A reference's role is one word (glue, port, upstream, build) defined once in a legend instead of a phrase after every reference.

Visible words: Batocera 2,433 to 2,332, AmberELEC 1,301 to 1,299, RomM 1,607 to 1,596, RetroArch 2,207 to 2,088, RetroDECK arcade part 2 19,127 to 2,104. Rows weigh more Markdown, so 38 more systems move to pages of their own under the existing budgets.
2026-10-27 20:44:05 +01:00
Abdessamad Derraz 107bf6fd68 docs: say every profile carries its version basis 2026-10-27 20:09:25 +01:00
Abdessamad Derraz c9d4fbbbd8 chore: merge mouse and touch input
# Conflicts:
#	install.ps1
#	install.sh
#	install/launchers/index.json
2026-10-27 19:42:11 +01:00
Abdessamad Derraz 0d510eb4bd chore: merge core versions read from code 2026-10-27 19:42:04 +01:00
Abdessamad Derraz 6e30e86d42 chore: merge main into mouse input
Pins and launcher index recomputed for the merged install.py. Mouse modes are now written before the frame, so a screen read back already takes clicks.
2026-10-27 19:29:42 +01:00
Abdessamad Derraz 91b7bd94d0 feat: refuse placeholder versions in the schema
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.
2026-10-27 19:23:17 +01:00
Abdessamad Derraz 7ec4d00375 chore: merge true platform list versions
# Conflicts:
#	install.ps1
#	install.py
#	install.sh
#	install/launchers/index.json
2026-10-27 19:18:57 +01:00
Abdessamad Derraz c8eb3a79e3 feat: say when the system runs another version
The installer reads the version the system states in its own file,
without running anything: batocera.version, recalbox.version (a release
only), RetroBat's system/version.info, VERSION_ID in os-release on Lakka
and EmuELEC. When it differs from the version the list was built for, a
line says so before the install and again with the result, and the new
version event carries it for the screen. An unknown version says
nothing, and the install never stops on it.
2026-10-27 19:10:44 +01:00
Abdessamad Derraz 72287e3310 feat: take clicks and taps on the full screen
Modes 1000 and 1006 only, SGR and legacy reports decoded, a hit map built from each drawn frame, action on release. Off on every way out, on the screens whose text is copied, with a pad route or RETROBIOS_NO_MOUSE.
2026-10-27 19:06:34 +01:00
Abdessamad Derraz c12cecde33 refactor: count every run line from one tally
The run header, the menu, its game data split and g, the plan, the
screen's plan and game data row and both results now divide one tally
of the list the run keeps. Case variants were counted on the run and
missing from the screen's split, g counted the whole list under a head
narrowed by c, and the result left out the data tree files. The wiki
examples come from real runs of 2026-10-27.
2026-10-27 19:01:13 +01:00
Abdessamad Derraz 77a1a7285a feat: write the romset table from the profiles
The FAQ table of arcade romsets was typed by hand and told readers to
collect MAME 0.160 and FinalBurn Neo 1.0.0.2 sets for cores whose source
states 0.159 and 1.0.0.03. generate_site now writes it between generated
markers from the profiles, and a test holds the page to the generator.
An emulator page names where its version is read (the file, the tag and
the commits after it, the package), and says when the code states none
or the version could not be confirmed. HBMAME no longer claims a MAME
romset. tools.md and profiling.md document version_basis and the two
modes.
2026-10-27 18:59:30 +01:00
Abdessamad Derraz 230885b77f feat: paint the installer with colour roles
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.
2026-10-27 18:19:26 +01:00
Abdessamad Derraz 1f6c018006 chore: merge card markers and game data counts 2026-10-27 17:10:59 +01:00
Abdessamad Derraz a4af2ffda4 fix: name --offline when given, keep page budget
--offline given with the variable set is named as the option, and the
runs the screen starts get it only when the user gave it. The first
install page stays under its 400 words, the 3.8 runs skip only the
pack test that needs generate_pack.
2026-10-27 16:57:34 +01:00
Abdessamad Derraz f8881e0874 docs: describe runs without questions and offline
The options and environment tables say what --no-input finds and when
it stops, and how the words name RETROBIOS_INSTALL_OFFLINE. A test holds
the options screen to leave out parallel downloads offline.
2026-10-27 16:30:24 +01:00
Abdessamad Derraz 39c2809a4b fix: polish the screens audit 11 named
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.
2026-10-27 16:27:47 +01:00
Abdessamad Derraz 0fb1047231 feat: count game data apart from BIOS files
The installer knew BIOS files from game data and no count showed it.
The plan, the line menu and the result count them apart for a list that
marks game data, the plan gets a game data row and the menu a g key,
each toggling it in one press, and one sentence says what game data is.
2026-10-27 16:03:25 +01:00
Abdessamad Derraz 992bc8ce70 fix: keep paths whole and spelled one way
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.
2026-10-27 15:50:51 +01:00
Abdessamad Derraz 2ab01d3eec fix: ignore Ctrl-Z when no shell can resume
Started with no job-control shell, a Ctrl-Z stopped the screen and its
launcher for good. The key now stops it only when its process group is
a shell's job, and the bar says why otherwise.
2026-10-27 15:39:50 +01:00
Abdessamad Derraz 0fa4552dae fix: refuse only the axis a list lacks
The MinUI family's lists record cores and regions and no system: every
narrowing was refused with a remedy that fetched the same list. Each
option is now refused by the axis missing, with what works, and a pack
names its platform's list only when that list records the axis. Line
mode names what c chooses and skips a question with one answer, and
Options leaves out parallel downloads when nothing is downloaded.
2026-10-27 15:37:24 +01:00
Abdessamad Derraz 50e84866cf docs: autorun schedules nothing by default 2026-10-27 15:25:06 +01:00
Abdessamad Derraz dcaf9d4764 docs: say who starts a test run 2026-10-27 15:22:19 +01:00
Abdessamad Derraz 5704dd6793 fix: offer a drive by the folder its system reads
RetroArch's folder question numbered a Batocera SHARE drive and filled
its root. A drive is now offered by its own system's BIOS folder, one
nothing names by its bios folder, and another system's is left out and
named with the options that reach it. A list or pack card setups read
too opens on those setups, in both modes.
2026-10-27 15:19:03 +01:00
Abdessamad Derraz 19bd88131d fix: show outside text, never obey it
Pack and list paths with a control character are refused, the names a
list records, card labels, folders and events pass one filter, and a
folder a configuration names with one is not taken.
2026-10-27 14:46:14 +01:00
Abdessamad Derraz a334ace439 fix: name cards by files no menu rewrites
A KNULLI card renamed in its menu was read as a Batocera SHARE drive.
KNULLI is now named by about.info first, Batocera by its own hostname,
and a drive two systems fit is said instead of guessed. Runs without
questions see mounted cards as the screen does and stop on two setups.
The card marker table of the wiki is generated.
2026-10-27 14:40:28 +01:00
Abdessamad Derraz 9c8dbcd99a chore: merge the automatic test campaign 2026-10-27 14:05:18 +01:00
Abdessamad Derraz 332c217155 feat: pass GITHUB_TOKEN to declared API steps
A step marked github_token: true receives the token. autorun accepts the key only on check_freshness.py, refresh_stale.py and python -m scripts.scraper.* tracked in this repository, refuses it on any other step and in the campaign job. The nightly steps declare it.
2026-10-27 13:41:40 +01:00
Abdessamad Derraz ea460a6c87 docs: keep the measurements page in its budget 2026-10-27 13:39:40 +01:00
Abdessamad Derraz 6fd831fc67 fix: keep pack system names out of the terminal
A pack's system titles, names and ids are read only without control
characters, and the systems list and the same-choice line go through
screen_text. The --yes row of the option table says it implies
--no-input.
2026-10-27 12:36:15 +01:00
Abdessamad Derraz 31c574aab0 fix: line mode and screen share one decision
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.
2026-10-27 12:24:26 +01:00
Abdessamad Derraz f5e98bfda6 refactor: fetch builds into bare mirrors
Host git only fetches into bare mirrors no sandbox ever sees, https only, with no user or system config and overrides emptying hooks, fsmonitor, ssh and proxy commands and every filter driver the mirror defines. Each build is a git archive of the commit and of each submodule commit from its own mirror. Old working-tree clones are deleted. The core copied out must be a regular file inside the build folder, opened without following links.
2026-10-27 12:19:55 +01:00
Abdessamad Derraz fdcf120a7d refactor: build cores from an exported tree
make runs on a git archive export of the commit and its submodules, the clone and its .git never bound into the sandbox. Host-side git runs with no user or system config, no hooks, no fsmonitor and the file and ext transports refused.
2026-10-27 12:07:16 +01:00
Abdessamad Derraz 34963a732f docs: describe the allowlist sandbox 2026-10-27 11:53:35 +01:00
Abdessamad Derraz a76129f0df docs: describe the campaign and its sandbox 2026-10-27 11:48:25 +01:00
Abdessamad Derraz 07c34781e7 chore: merge the autorun runner and jobs 2026-10-27 10:41:53 +01:00
Abdessamad Derraz 343a4e8bd7 feat: add the autorun job runner
Runs the jobs of automation/jobs.yml under one host lock, with load and disk guards, one idle retry on a host misread, artifacts computed twice, explicit-path commits in .cache/autorun/worktree, an opt-in push (--push) and a CI circuit breaker. First jobs: nightly refresh chain, large-files asset dry run, disk cleanup and check, weekly bios integrity. install-timers writes systemd user units without enabling them.
2026-10-27 10:40:10 +01:00
Abdessamad Derraz 0fbf920e45 chore: merge one-file measurement records 2026-10-27 10:24:41 +01:00
Abdessamad Derraz a9301fbdc0 chore: merge line mode on the screen's decisions
# Conflicts:
#	tests/test_install_tui.py
2026-10-27 10:20:31 +01:00
Abdessamad Derraz 77bdf7c206 fix: line mode answers in the merged tests
The TERM probe test answers the setup question, first-install keeps
its button name on one line and under 400 words, and --page of the
installer doc script is named on the page.
2026-10-27 10:19:37 +01:00
Abdessamad Derraz 11c65f40fc chore: align card depth test and document page 2026-10-27 10:14:56 +01:00
Abdessamad Derraz da68f19411 refactor: keep one full record per line
Each line of measurements/<emulator>.jsonl now holds the whole run:
every repetition, core logs, per-frame hashes and raw timings. The gzip
data files, the data schema and the split and join code are gone, and
core_probe --record appends one line. record_version moves to 3.

The seven records are rewritten once: each new line equals its old line
joined with its data file, and rebuilds the first-layout file its id
hashes.
2026-10-27 09:57:39 +01:00
Abdessamad Derraz 8c1887fd0c chore: merge main into the audit answers 2026-10-27 09:57:16 +01:00
Abdessamad Derraz 559494ae43 fix: line mode reads the screen's decisions
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.
2026-10-27 09:55:50 +01:00