Commit Graph
2614 Commits
Author SHA1 Message Date
Abdessamad Derraz d9b788787c fix: read keyed source and version in profile_sync 2026-11-09 07:34:26 +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
Abdessamad Derraz 6316fd12ff feat: keep data trees the card's cores read
The manifest names the cores that read a tree no platform system
declares, every reader of a shared tree included. An install for the
games of a card keeps such a tree only when its plan runs one of them:
a SNES game on ArkOS (snes9x) no longer takes FBNeo's cheats and samples.
A system no setup names a core for keeps every core's tree.
2026-11-07 03:16:06 +01:00
Abdessamad Derraz 0b385100ba fix: give the no-jsonschema run the runner's time
The rerun without jsonschema took 345 s here and went past its 600 s
limit on the CI runner, about twice slower, so main stayed red. It now
selects the modules that import jsonschema or validate_schemas rather
than those that name them, and allows 1800 s.
2026-11-07 02:49:24 +01:00
Abdessamad Derraz 16f8c869a5 chore: merge installer fixes, fifth pass 2026-11-07 00:11:09 +01:00
Abdessamad Derraz 70f530516d chore: merge pack and resolver fixes 2026-11-07 00:06:15 +01:00
Abdessamad Derraz 21dfb961f9 chore: merge archive recipes 2026-11-07 00:05:51 +01:00
Abdessamad Derraz 83214b9d1e chore: merge origin/main 2026-11-06 23:29:29 +01:00
Abdessamad Derraz de431c0d53 fix: find the home page when it is MDX
The install demo made the home page index.mdx, and sitepages.require
looked for index.md alone: every page test skipped locally and failed
in CI, 256 at once.
2026-11-06 23:28:21 +01:00
Abdessamad Derraz 544df4326b chore: merge origin/main 2026-11-06 22:53:00 +01:00
Abdessamad Derraz ae7feba539 fix: type the lists and returns mypy flagged
The data tree record carries the needed flag since 072380c26, and
the manifest test still built the three-part one. profile_sync's triage
lists and _emit's returns, site_insights' GoatCounter answers and
make_demo's blocks are annotated, and the baseline loses the entry
that no longer occurs.
2026-11-06 22:30:55 +01:00
Abdessamad Derraz 966ab201ea fix: regenerate the launcher list after main
Main changed install.py without the launcher index, so --add-app
refused every launcher and nine tests failed on main itself. The demo
script added a list without a type, and an archive-size test still
built the data-tree refs without the needed flag the builder reads.
2026-11-06 21:48:46 +01:00
Abdessamad Derraz 399b5c33c1 chore: merge origin/main 2026-11-06 21:18:18 +01:00
Abdessamad Derraz cfc950b834 chore: merge origin/main 2026-11-06 21:09:17 +01:00
Abdessamad Derraz 68c8dca41d feat: offer the games of a handheld's card
An ArkOS EASYROMS card plugged into a computer was never offered "for
the games on this card": its console folders sit beside bios, with no
roms folder above. A games part now counts as a card that may hold
games.
2026-11-06 21:01:23 +01:00
Abdessamad Derraz 65a5dfecc7 feat: show the installer demo on readme and site
The README shows the GIF under the commands. The home page and Get your
files show the video through InstallDemo.astro: nothing is fetched until
it is on screen, reduced motion and Save-Data keep the poster with a play
button, and a description is read to screen readers.
2026-11-06 20:46:07 +01:00
Abdessamad Derraz b56dc64609 chore: merge origin/main 2026-11-06 20:38:15 +01:00
Abdessamad Derraz 268c974e28 docs: name every refused quote in the agent steps
The skill and llms.txt said "a quote" where the tool refuses the
typographic ones too, which end a PowerShell string. One constant states
the set for both, and points to device_setup_command.
2026-11-06 20:17:45 +01:00
Abdessamad Derraz 74489a4a0f docs: quote folders in the agent setup steps
The skill and llms.txt told an agent to write --dest=<card>/bios bare.
A folder now goes in single quotes, attached to its option, and one that
holds a quote, a backtick or a control character, or starts with -, is
a question for the user.
2026-11-06 20:15:47 +01:00
Abdessamad Derraz c91bf440da feat: publish the setup steps as an agent skill
ARD reserves text/markdown for agent skills, and Lighthouse warned on
the llms.txt entry. skills/setup-bios/SKILL.md holds the steps that set
up a device with the fewest files, and the manifest lists it as a skill.
2026-11-06 20:14:38 +01:00
Abdessamad Derraz d10c037a86 fix: refuse a path that could escape the command
device_setup_command built a shell command from the agent's values: a
typographic quote ends a PowerShell string, and a path starting with -
reads as an option. Such values are refused, the options are written
attached to their values, and platform must be a setup name.
2026-11-06 20:01:03 +01:00
Abdessamad Derraz 24d7db0ab3 feat: guide AI agents to the fewest files
llms.txt and an ARD manifest name the pages and the JSON API, and lead
an agent setting up a device to --for-games --required-only. Every page
registers four read-only WebMCP tools: the setup command, a hash lookup,
an emulator's files and the site search.
2026-11-06 19:58:42 +01:00
Abdessamad Derraz 072380c268 feat: install the fewest files for a card's games
--for-games --required-only on a dArkOS card from a computer kept every
file of the list: --dest skipped the card's detection, so its rom
folders were never found. The games part beside the BIOS folder now
names them. The manifest marks a data tree every core runs without
(optional), and --required-only leaves it out: one GBA and one SNES game
took FBNeo's cheats and samples, 3,472 files no game opened.
2026-11-06 19:58:41 +01:00
Abdessamad Derraz f04b3c6324 chore: merge the gate branch (7db9fe14e) 2026-11-06 19:55:51 +01:00
Abdessamad Derraz eb2bdb20cd chore: merge origin/main 2026-11-06 19:55:21 +01:00
Abdessamad Derraz ba348b6ca8 chore: merge origin/main 2026-11-06 19:51:38 +01:00
Abdessamad Derraz 4a167f7cca chore: mame recipes start at 0.177 now
The site's neogeo.zip line, the identification note and the recipe count sentence follow the 113 imported releases.
2026-11-06 19:18:38 +01:00
Abdessamad Derraz 7db9fe14e1 fix: let the export step fail as CI does
validate.yml runs export_native with continue-on-error, and pr_checks
failed the whole run on it. The step is now shown and does not fail
the run, and a test keeps that list equal to the workflow's.
2026-11-06 18:43:05 +01:00
Abdessamad Derraz 4af681c754 fix: clear the XDG folders for the test suite
The CI runner sets XDG_CONFIG_HOME to its own home, and the installer
now reads it as RetroArch does. Tests that fake HOME then found the
runner's RetroArch folders. The suite clears the three XDG variables
it reads, and a test that exercises one sets it itself.
2026-11-06 18:43:05 +01:00
Abdessamad Derraz adce8dd0d4 feat: share each page under its search title
og:title and twitter:title carry the search title ("mGBA BIOS
files"), an emulator page shares its maker's card, a download page is
dated by its release in the sitemap, and a Switch emulator's files are
called keys.
2026-11-06 18:40:27 +01:00
Abdessamad Derraz bbfea602f4 chore: merge origin/main 2026-11-06 18:38:12 +01:00
Abdessamad Derraz b7645f70ad feat: a recipe for every archive, and its build
recipes/archives.json records each of the 2,222 archives database.json lists, .variants/ copies included: members in order with size, crc32 and sha1, the container sha1, md5 and size, exact when the TorrentZip build gives its bytes (1,790) and canonical otherwise (432), the profile and DAT recipes agreeing on its members, and the platforms or profiles pinning its bytes.

romset_recipes.py --capture writes it (pipeline step 1c), --build and --build-all rebuild from held members, loose first, then another archive, then its own copy, read back and checked before the move into place. Under zlib-ng nothing is claimed exact. A test fails when an archive has no recipe or a member is held nowhere.
2026-11-06 18:37:55 +01:00
Abdessamad Derraz 4648676c11 feat: import every mame listxml, match by members
The importer keeps the archive names the collection holds and every set whose member list equals an archive the collection keeps under another name (aga.zip is isa_aga), under the collection's name with the upstream one in set. All 113 MAME listxml releases (0.177 to 0.289) are imported, not one in five, and FBNeo is read again at its tip: 2,936 MAME recipes and 145 FBNeo ones, compacted as before.

fccpu20.zip, fcisio1.zip and interpod.zip now have recipes and carry slot ROMs beside their own set. Trimmed, each equals the archive under the newer MAME name, so they are kept as they are until the storage decision.
2026-11-06 18:37:37 +01:00
Abdessamad Derraz b56bc1f8d2 feat: stream torrentzip members, detect zlib-ng
write_torrentzip reads and deflates one member at a time, gives back what it read (size, crc32, sha1) and takes a ZIP64 field only past 32 bits, so a 2 GiB disk image builds without being held whole. TorrentZip layouts are unchanged. zlib_ng_version() names the deflater that cannot reproduce TorrentZip bytes.
2026-11-06 18:34:40 +01:00
Abdessamad Derraz b4346ebf14 fix: no composite md5 as a container target
Recalbox hashes a ZIP by its members (zip_digest: composite, Bios.cpp:64-68), so its md5 names no container bytes: romset_recipes --missing tried to rebuild it and counted it unreproducible.
2026-11-06 18:34:34 +01:00
Abdessamad Derraz 5b6feef785 chore: merge site fixes 2026-11-06 18:17:24 +01:00
Abdessamad Derraz e7c4de27bc fix: lead the old oric address to tangerine
A reader followed /systems/oric/ to the 404 page: Oric has been filed
under its maker since 2026-10-23.
2026-11-06 18:17:19 +01:00
Abdessamad Derraz 0c074f8458 fix: run mypy and shellcheck in pr_checks
validate.yml runs mypy against its baseline and checks that shellcheck
is installed, and pr_checks ran neither. The guard test only knew the
python, vermin and npm commands, so it missed both. A step can now pipe
its output into a second command, as mypy into mypy-baseline filter.
2026-11-06 17:58:44 +01:00
Abdessamad Derraz 2e32b12f64 fix: import the test isolation in test_proven_name 2026-11-06 17:25:26 +01:00
Abdessamad Derraz b9f309940c chore: merge site and docs fixes, fifth pass 2026-11-06 17:15:57 +01:00
Abdessamad Derraz 84cffe3f8d chore: merge origin/main 2026-11-06 16:42:16 +01:00
Abdessamad Derraz 8e3ba2cfd3 chore: merge scraper and tool fixes 2026-11-06 16:36:32 +01:00
Abdessamad Derraz faf444a476 fix: hold the exit status page to code 3 2026-11-06 16:18:35 +01:00
Abdessamad Derraz fd62b21abd chore: expect binary citation annotations 2026-11-06 16:01:27 +01:00
Abdessamad Derraz a195023d3d chore: run every test class when a file runs alone 2026-11-06 16:01:27 +01:00
Abdessamad Derraz 35be4cf033 fix: compare whole md5 in the folder check
check_platform_folder.py, the script the site publishes, still accepted
a cut md5 by prefix. It now compares whole digests as Batocera does
(batocera-systems:1088), like verify since cut_md5_owner.
2026-11-06 16:01:04 +01:00
Abdessamad Derraz 1bbbdcd4e4 fix: keep tool names out of the probe path check 2026-11-06 15:46:54 +01:00