Commit Graph
4616 Commits
Author SHA1 Message Date
Abdessamad Derraz e4f8bb336a fix: read a wrapped BIOS folder line whole
A long checkout path wraps "BIOS folder:" after the label, and the
test joined the lines without the space it dropped. It now compares
without spaces, which holds for either wrap point.
2026-11-09 21:00:45 +01:00
Abdessamad Derraz a02d30f90c fix: wait for the Confirm count in the tap test
Confirm has no Install row until its dry run ends, so an Enter sent
on its title alone fell on "Counting the files" and did nothing on
the runner. The test now waits for "Counted again for these choices",
drawn once the Install row exists.
2026-11-09 20:06:44 +01:00
Abdessamad Derraz 909a989114 chore: merge origin/main 2026-11-09 19:04:09 +01:00
Abdessamad Derraz b067d27d53 feat: give the package command back in hints
Run from the retrobios package, a hint and --help named python3 install.py, a file that user does not have. The package's launcher sets RETROBIOS_BOOTSTRAP=pypi, and the command is read from the environment it runs in: uvx retrobios from uv's cache, pipx run retrobios from pipx's, retrobios once installed.
2026-11-09 19:04:08 +01:00
Abdessamad Derraz 87839ea6c0 chore: merge origin/main 2026-11-09 16:37:13 +01:00
Abdessamad Derraz 6c14468862 feat: say the installer and setup pages plainly
- The installer speaks without "you": the first screen asks "Where
  to install?", rows read "Copy the BIOS files from an old card or a
  folder", a close match reads "Close matches: ...". The handheld
  launchers and their port text follow, and the pronoun guard no
  longer lists any installer message.
- A setup that runs as an app opens on its one-line command, the
  folder table after it; a setup that runs on its own device keeps
  the network folder first, which its ZIP route needs.
- The home steps say what to do: "Its page gives one line to copy",
  "Paste it, press Enter".
2026-11-09 16:33:56 +01:00
Abdessamad Derraz d9ed966e51 chore: merge the screen test fix 2026-11-09 16:14:08 +01:00
Abdessamad Derraz 68e8ea449c chore: merge the docs branch 2026-11-09 16:14:08 +01:00
Abdessamad Derraz 40ea1cdaed fix: read a wrapped path whole in screen tests
A folder under the checkout is as long as the checkout's own path. From a deep clone the screen broke it after a separator, as it should, and eight tests looked for it on one line.
2026-11-09 16:13:33 +01:00
Abdessamad Derraz 99d54bcced chore: merge origin/main 2026-11-09 15:12:54 +01:00
Abdessamad Derraz a18262f184 chore: merge origin/main 2026-11-09 15:06:18 +01:00
Abdessamad Derraz 232f27f5db docs: say a refused option writes no event
An agent reading the events learns that an option refused before the run starts ends on code 2 with no end event.
2026-11-09 14:25:51 +01:00
Abdessamad Derraz c963499643 fix: wait for Confirm by its title in the tap test
The game-data tap test waited on the bare RetroBIOS: title, which the
screen before Confirm already showed, then pressed Enter only if one
settle had drawn Confirm. The runner drew it later and the install
never started. It now waits for the Confirm title and presses Enter.
2026-11-09 14:23:36 +01:00
Abdessamad Derraz 4c0c480bdd docs: tell agents how to drive the installer
llms.txt now gives the package commands, the plan as JSON events from
--dry-run --events, the exit codes and the plan, consent, act pattern
with --yes. Tests hold each fact to install.py and to the exit code table
of the installer page.
2026-11-09 14:23:35 +01:00
Abdessamad Derraz 92546794e2 docs: archive recipes page and README badges
Every archive has a recipe in recipes/archives.json, and no page a user
reads said so. A short reference page says what a recipe is, how to
rebuild one archive and what exact and canonical mean. Its counts and the
README line are counted from the recipe file at each build.

The README gains a row of four badges: PyPI version, Python versions,
the Validation workflow on main and the license. Tests hold the badges,
the counts and the page's command.
2026-11-09 14:23:29 +01:00
Abdessamad Derraz d8b55fc2de fix: a check sample ends on code 3
The events transcript on the installer page is a --check run that finds
files missing. Since November such a run ends on 3, as the Exit status
table says, and the sample still showed 1.
2026-11-09 14:23:21 +01:00
Abdessamad Derraz 4542bcffa8 chore: bump uv to 0.13.4 in every pin
Dependabot moved uv in pyproject.toml alone, while validate.yml and
CONTRIBUTING kept 0.12.9. Both pins move together, and a test now
fails when a package pinned in both carries two versions.
2026-11-09 14:20:12 +01:00
Abdessamad Derraz 50ec6a4474 chore: merge origin/main 2026-11-09 13:13:27 +01:00
Abdessamad Derraz 44a60ca96f docs: quote the bootstrap refusal word for word
The FAQ said the installer stops when it does not match "its
fingerprint", and the bootstraps print "does not match its expected":
the page quotes them again, within the page's word ceiling.
2026-11-09 12:11:52 +01:00
Abdessamad Derraz d6a0270ca7 chore: merge origin/main 2026-11-09 12:07:57 +01:00
Abdessamad Derraz 43088a4e9e chore: merge origin/main 2026-11-09 11:45:57 +01:00
Abdessamad Derraz b9a35589a8 feat: build the PyPI package with flit_core
build_pypi.py stages install.py, the launcher, __main__.py, README and
LICENSE, then runs uv build with flit_core 3.12.0 pinned and
SOURCE_DATE_EPOCH set from install.py's commit. Adds python -m retrobios,
the PyPA classifiers, keywords and project URLs. CI installs uv.
2026-11-09 11:45:49 +01:00
Abdessamad Derraz 277ffb7079 chore: name the contributor project retrobios-dev 2026-11-09 11:40:37 +01:00
Abdessamad Derraz 7da48ca56a feat: date the PyPI package by install.py commits 2026-11-09 11:40:37 +01:00
Abdessamad Derraz 2841998b60 chore: hold indexnow.py to the script rules
indexnow.py now exits through run_cli, its --dist option is documented
in tools.md, and test_site_freshness.py imports the tests package first.
2026-11-09 11:02:00 +01:00
Abdessamad Derraz 1647d0e4fb feat: send alias profile pages to their emulator
Search Console reported emulators/vba_m/ as not found: an alias
profile has no page, and only the names in a profile's cores: list
were redirected. Each of the 21 alias profiles now redirects to the
page of the profile it names.
2026-11-09 10:59:12 +01:00
Abdessamad Derraz 045ad9e3af chore: merge origin/main 2026-11-09 10:54:08 +01:00
Abdessamad Derraz 602945faf0 feat: logos, build stamps and exact wording
- The installer says "Every file on the list is in place." where it
  said "Everything is in place.": a check covers the files the
  collection holds, and the required ones it lacks follow.
- The FAQ, first install, legal and home pages state only what the
  code shows (PlayStation 1 and Saturn run without a BIOS on some
  emulators, save files are never touched, records are added).
- MinUI and MyMinUI show their own boot logos, and the Android,
  Linux handheld and iPhone tiles show the Android robot, Tux and a
  plain device icon, each credited in sources.json.
- Each Markdown copy, llms.txt and llms-full.txt name the commit
  they were built from, version.json the current one, and the
  answering rules tell assistants to fetch a stale copy again.
- The deploy lists the pages whose words changed (digests.json) and
  posts them to IndexNow once the site is live.
2026-11-09 10:47:37 +01:00
Abdessamad Derraz 49873497ba fix: deploy the site when sitesteps.py changes 2026-11-09 09:30:22 +01:00
Abdessamad Derraz c99639a15f chore: merge origin/main 2026-11-09 09:28:04 +01:00
Abdessamad Derraz 4053aa2601 docs: put uvx retrobios in the macOS, Linux tabs 2026-11-09 09:28:04 +01:00
Abdessamad Derraz f44ef8459e docs: state only what the code proves
Each claim in the README and the wiki now matches the code or data it
describes: line citations counted as such (93%), closed-source profiles
named, severity tied to the check mode, installs limited to files the
collection holds, and the demo labelled as a demonstration card.
2026-11-09 08:47:21 +01:00
Abdessamad Derraz 0c2bfd75f6 docs: list the PyPI test, drop pronouns there 2026-11-09 08:35:52 +01:00
Abdessamad Derraz e6c83859d5 chore: merge origin/main 2026-11-09 08:35:52 +01:00
Abdessamad Derraz 36e42557dd docs: write what-are-bios-files without pronouns
The pronoun pass left this start page untouched. Its old heading keeps
its anchor.
2026-11-09 08:25:58 +01:00
Abdessamad Derraz a8fce32051 docs: add a security policy
The installer runs from a one-line command, and no page said how to
report a weakness in it without making it public. SECURITY.md names the
scope, the private report from the Security tab and how each download
is checked.
2026-11-09 08:25:58 +01:00
Abdessamad Derraz 78e22851dd chore: guard the site against personal pronouns 2026-11-09 08:09:47 +01:00
Abdessamad Derraz a70f8bcb34 docs: write the site without personal pronouns 2026-11-09 08:09:47 +01:00
Abdessamad Derraz 77fef7289f feat: show the handheld demo and steps per tab
make_demo.py records a second variant: the full-screen interface at the
640x480 screen of an R36S, on an ArkOS root made with bwrap, started as
the Tools menu launcher starts it (RETROBIOS_PAD=gptokeyb), driven by the
keys gptokeyb sends for the buttons. demo.json holds one entry per
variant with its alt text. No Windows variant: under pwsh on Linux the
installer's summary gives --dest /mnt/e/bios back.

The quick install box of Get your files gets an "On the device" tab with
the handheld recording, the terminal recording under the others but
Windows, and, under the text of each computer tab, a drawing of opening
the terminal and pasting (sitesteps.py, inline SVG in the theme's
colours, title and desc). The terminal steps name the physical action.
2026-11-09 07:35:03 +01:00
Abdessamad Derraz 16ec5fa2d2 docs: turn the readme into a front page
The README ran 211 lines and 2,000 words: five commands with options,
an 18-row download table, coverage figures and the build commands, all
before the help. It now says what the project does, gives the line that
installs for Windows and for the rest, shows it, lists the six ZIPs and
the setups that install by command, and leads to the site, where the
figures and every option live. The build commands sit in a closed block.
No personal pronoun is left in its text.
2026-11-09 07:28:32 +01:00
Abdessamad Derraz 8328570d1c docs: name uvx retrobios beside the one-liner 2026-11-09 07:07:54 +01:00
Abdessamad Derraz 7ba899d467 feat: build the installer as a PyPI package
scripts/build_pypi.py writes a wheel and an sdist from install.py, the
copy install.sh pins, and packaging/pypi. The version is the date of the
release in release.json. validate.yml now runs on packaging/ changes.
2026-11-09 07:07:54 +01:00
Abdessamad Derraz 47593c58d7 docs: drop a clause semicolon in site_markdown 2026-11-09 06:19:12 +01:00
Abdessamad Derraz 877470337d fix: keep llms-full.txt to what a setup needs
It joined every setup page whole, its parts and its reference of every
file: 6.9 MB, past what an assistant reads at once. Each setup's own
page now stops before that reference, which its Markdown copy keeps.
2026-11-09 06:18:18 +01:00
Abdessamad Derraz 957bf0f6c1 fix: keep the 404 parent link on this site
An address with an empty segment (//other.example/x) made the 404 page
fetch and link a page of another site. Empty and dot segments are
dropped, and a parent is fetched only on this site, under its base.
2026-11-09 06:05:36 +01:00
Abdessamad Derraz 29aeccba3c feat: guide a stale link and the first download
Readers reached the 404 page with a pasted command (/i.ps1%20%7C%20iex),
a file name, a GitHub path or a section below a page: the page now says
which it is and leads on. Beside "Start with", the first file's
download sits next to its name.
2026-11-09 06:04:42 +01:00
Abdessamad Derraz a7a27028ab feat: give assistants each page as markdown
The build writes <page>/index.md beside each page, named in its head,
and llms-full.txt. llms.txt and the setup skill say how to answer from
the site, not from memory, and the setup_bios_files WebMCP tool gives a
setup's folder and exact file names from the picker data.
2026-11-09 06:04:42 +01:00
Abdessamad Derraz ab9fe76de2 fix: resolve the cores handhelds rename
ArkOS ran the GBA with gpsp_ezode_mod and dArkOS with mgba_rumble: no
profile named them, so an install for the card's games kept every GBA
core's files, FBNeo's 3,472 data files among them. Each rename proven
from the OS build (same code base, same BIOS loading) joins its
profile's cores. The resolver folds either separator, and falls back to
the emulator column when the core names a mode, a machine or a plugin
of that program, only where its profile declares the folder's system:
MAME documents no GameKing ROM. 109 unresolved names are 56, each one
recorded with why in tests/test_games_index.py.
2026-11-09 06:04:42 +01:00
Abdessamad Derraz ae5b6219bb chore: merge origin/main 2026-11-07 03:28:27 +01:00
Abdessamad Derraz 097914507b feat: install for the card's games without asking
--yes alone installed the whole list, 6.4 GB on a dArkOS card holding
two games, while the screen offers what the games need first. A run that
asks nothing now takes that first choice when the card holds games, and
says so. --all-files installs the whole list. A run given its list
(the screen's own runs) or narrowed by name is unchanged.
2026-11-07 03:16:06 +01:00