e38764627 left three blank lines after the record function, and
test_install_tui's two-blank-lines check failed Validation. The pins of
install.sh and install.ps1 and the launcher index follow the new hash.
The options glance gains a Remove and put back group, the testing guide names test_install_removal, install.py declares _REPARSE_POINT once, and the type baseline drops three errors this change resolved.
install/games/ was last written before 7035da115 and 801af113b changed
the rom folders files (offers, searched_by) and before this branch's
profile and collection changes: test_published_files_are_current failed.
generate_games_index rewrites 37 files, setups and fallbacks. The
arcade indexes do not change, clone parents staying out of them.
MAME's search path for a set is the set and every ancestor
(src/emu/driver.cpp:31-38, src/emu/romload.cpp:67-84 at mame0289), so
a clone reads the ROMs it shares with its parent from the parent's
archive. games/arcade/<profile>.json now records, under parents, each
parent game set with ROMs and the clones whose romof chain reaches it
before any BIOS set, and rom_search_sets adds them to what a command
reads. The installer's index leaves them out, as it does the sources.
arcade_parent_importer --all is re-run: every profile gains parents,
and mame0258, mame0278, mame2010, mame2015, mame2016 and fbneo also
gain the sources their committed files lacked.
Manifests, EmuDeck and RetroDECK only: videopac.zip reaches
roms/odyssey2 beside i8244.zip, electron.zip roms/electron, and the 35 parent
sets the profile holds (a7800, apple2e, intv, videopac and others)
reach arcade, consolearcade and mame, the folders whose command starts
any machine. verify --all keeps its severity and status counts.
Sega's page passed its budget and was split by console again:
systems/sega-dreamcast is once more written, as a part whose parent is
systems/sega, the page it had moved to. The redirect already stands
aside for a written page. The test now asks the old address to be
absent or a part of its target.
A line opening on "Filter " stood for a filter box read whole, but the
installer page's key table has a row "Filter a long list". The reader
now counts a filter box that is not hidden. An MDX source writes the
space between two tags as {" "}: the reader of the generated sources
reads it as a space.
The test rebuilt the old rule (any profile of the setup's name) and so
expected "BIOS pack for RetroArch" once the frontend profile landed.
It now reads the profile's files, as get_page_title does.
A profile following the branch tip (pin_follows) can carry a
config_reads entry read at the build a platform installs, which is
the pin itself: advmame's retropie entry reads advmame.rc at 96237a5.
bump_commit now advances such a revision with source_commit, and
leaves every other revision (another platform's build) alone.
MDX reads a line of tags alone as JSX and drops the space between
them: the RetroDECK page, written as MDX for its tabs, read
"2007/2008Coverage". mdx_safe writes that space as {" "}, which MDX
keeps. Checked against satteri's mdxToHast, not on a built site.
The MSX part of the Batocera page now cites every reader of the blueMSX
and fMSX machine ROMs (c62515a78, 26c71d03d): 34 KB of links that are
the content. Measured on the gate build of 7c5ad8366.
RetroPie writes dir_rom $romdir/mame-advmame:$romdir/arcade into the
rc of each AdvanceMAME build (advmame.sh:100, configure_advmame being
called by the 1.4 and 0.94 modules too). _search_list_in_roms split
every list on ';', so the line was dropped and the sets landed at the
BIOS root, where no build reads them.
Each program's separator is now read from its own code: AdvanceMAME
strtoks dir_rom on file_dir_separator(), ':' on Linux, in the three
builds RetroPie ships (advance/linux/file.c:138-141, advance/osd/
fileio.c:696-699 at 96237a5, 685-688 at advancemame-1.4, 640-643 in
advancemame-0.94.0). MAME splits on ';' (src/emu/fileio.cpp:56, 64,
112 at mame0289). RetroPie is rescraped at 427e762: the three
passes_path records are its only change.
advmame, advmame-1.4 and advmame-0.94 carry a retropie config_reads
for dir_rom, read at the build RetroPie installs (96237a5, the tag
advancemame-1.4 its tarball matches, the 0.94.0 tarball). The 1.4 and
0.94 profiles gain the dir_rom pool and a path for each set, and 0.94
a pin_build on rp_module_repo.
Manifests: on RetroPie 55 sets of the three builds move from the BIOS
root to roms/mame-advmame, the first folder of the list, which every
game started from either folder reads. Seven archives other cores
share stay at the root for them. No other platform changes. verify
--all keeps its severity and status counts.
AdvanceMameOnEmuELEC counted the 29 sets of 799060b. At 0f6a767 the
profile has 26 (aleck64, atarisy1, cedmag and coh1002v leave, hng64
joins), placed in roms/mame and roms/arcade: 52 entries.
The RetroArch frontend profile and the advancemame pin were never read
by sitesources.py --fetch. Trees whose profiles now cite more paths
record them too.
Since 3129eaf10 a pin_build entry also names the build config_reads are
read at, a revision of its own: ROCKNIX builds DuckStation 0.1-10998
while the profile pins the code at c9dc2254. The test held those to the
profile's pin and read six profiles as disagreeing. advancemame, a held
pin, still disagrees: its pin is moved on another branch.
The RetroArch frontend profile (files: []) made the get/ page read
"BIOS pack for RetroArch", the order kept for a setup whose emulator
page is titled "<name> BIOS files". A profile listing no file titles
its page "<name> emulator": the setup keeps its own title.
Seven core_probe records of 2026-11-10 kept the content's parent folder
and one pack probe a traceback naming the worktree. The lines are not
published yet: each is rewritten and resealed, and the eight pack
probes naming a resealed record carry its new id.
MAME logs the folder above the content's ("Parent path"), which no
place named, and a pack probe kept core_probe's traceback with the
checkout spelled out. The first is written <content>/.., the second
<repo>, <dest> and <work>, replaced before the error is cut.
Since 7f20702b4 an omission read in an emulator's own folder is one per
folder, and the folder is the core's: mame2015 and mame2016 each list
3dobios.zip. The check keyed omissions by root and dest alone and read
seven manifests as listing one place twice.
MAME 0.289 reads intv.zip (exec.bin, src/mame/mattel/intv.cpp:549-552)
and videopac.zip (o2bios.rom, src/mame/philips/odyssey2.cpp:902-905).
The collection held both ROMs loose, INTV_EROM.bin and o2rom.bin, with
the crc32 and sha1 MAME declares. The two archives are built from them
with build_torrentzip and filed beside them: bios/Mattel/Intellivision/
and bios/Philips/Videopac/.
odyssey2 is a clone of videopac declaring the same o2bios.rom, which a
ROM search along the parent chain finds in videopac.zip. Its archive
would be a byte-identical copy, so the profile entry is dropped and the
videopac entry says so.
database.json gains the two archives (the name index also follows the
profiles' current aliases), and recipes/archives.json their recipes,
both rebuild: exact, sources profile:mame and collection.
Manifests: intv.zip and videopac.zip reach mame/bios on every platform
running MAME, and roms/intellivision and roms/videopac on EmuDeck and
RetroDECK. Each platform has 2 to 6 fewer omissions.
"e.java line 72" escaped profile_sync, which tracks path:line only.
Written "jadx e.java:72", each citation reads as one in a project the
profile does not declare, as decompiled output is. The jadx version
moves to the notes.
The build now imports romdir.py and three scraper modules through the
launcher layer: a push touching only them did not rebuild the site.
sitesteps.py was listed twice.
not_installable_words writes "436 files, 264 of them required. Why:
...": the count is followed by a comma, never a space, so the pattern
found no line and the test read the dry run as omitting nothing. The
page and the installer agree, the pattern did not follow them.
Both profile fields reached the schema without a row in the profile
field table. pin_frozen is no longer required by pin_build, which now
stands beside pin_frozen or config_reads: its row says so.
The lone-dash check read MAME's -rompath and -samplepath, QUASI88's
-romdir and RetroBat's -hash and -sp as half a dash glued to a word.
Quoted as code they read as flags. A C loop quoted in romdir.py and a
docstring in test_agnostic_scope no longer read as clause semicolons.
validate_schemas needs jsonschema, which the build does not install.
test_launcher_evidence imported it at the top, so the suite without it
errored. The module is now named in the testing guide, and its
docstring no longer joins two clauses with a semicolon.
The three builds the platforms ship are 5f301c8 (Recalbox), 6a34ec0
(EmuELEC) and 0f6a767 (AmberELEC): 5f301c8 is an ancestor of 6a34ec0,
itself an ancestor of 0f6a767. 0f6a767 is no longer on the rewritten
branch and is fetched by its sha. The profile was held at 799060b,
which none of them builds, so EveryBuildReferenceNamesThePin failed.
At 0f6a767 and its two ancestors the same 26 BIOS roots are registered
with the same contents. aleck64, atarisy1, cedmag and coh1002v are not
among them and leave the profile with the Aleck64 and Cedar Magnet
systems, and hng64 (src/drivers/hng64.c:1425-1431, 1718) joins it.
Every ref is moved with the pin and read again. Each cited line holds
the same text at 6a34ec0 and 5f301c8, except advance/osd/video.c:1787,
1795: Recalbox's 5f301c8 compiles those tables from blitmax.h and
startup.h, now said in the notes. The doc/advmame.d citations, worded
otherwise in the older builds, give way to the code that does it
(advance/linux/file.c:87-99, src/romload.c:167-204), and the artwork
refs to src/artwork.c, the loader of this revision.
Manifests: AmberELEC and Recalbox gain hng64.zip and lose aleck64.zip,
cedmag.zip and coh1002v.zip at their BIOS root. EmuELEC loses
cedmag.zip from arcade and mame, its other three stay for MAME 2010
and 2003-Plus, and hng64.zip takes the copy holding the advancemame
members. profile_sync: 0 to review, config_reads BUILD_OK at 6a34ec0.
ES-DE starts eleven machines whose sets the mame profile did not list.
Read at mame0289 (the upstream pin, f34f025) and its -listxml:
- apple2e, a7800, channelf, intv and videopac are parents, required
- fmtownshr (of fmtowns) and odyssey2 (of videopac) are clones
- the devices they load (a2diskiing, d2fdc, votrsc01a, stic, i8244,
i8245) are already profiled
- arcadia, megaduck, pv1000 and svision declare no ROM, in their
machine or in a device, and run from the cartridge alone
The systems list gains the ten machines' systems.
Manifests: apple2e, a7800, channelf and fmtownshr reach mame/bios on
every platform running the core, and the ES-DE folders of EmuDeck and
RetroDECK (apple2, atari7800, channelf, fmtowns). intv, videopac and
odyssey2 are omitted: the collection holds exec.bin and o2bios.rom
loose only (INTV_EROM.bin, o2rom.bin). verify --all keeps its severity
and status counts. profile_sync: 0 to review.
Restore moves a file in place with other bytes into a new dated backup, the installer's own recorded copy aside. Removal hashes each file again just before it goes and keeps one changed since the plan, keeps the record entries of files that stayed, touches the record only after the yes, and stops on a BIOS folder that is not there. A Windows junction counts as a link in the planner, the backup walk and --delete-backup. A place both the platform's list and a core name is never a core's alone, and two names of one file on a folding drive are planned once. A restore into a moved folder says the record was not updated.
ROCKNIX writes some add_emu_core calls under a case on DEVICE, and the
rom folders file keeps that branch as the offer's `when` (uae4arm for
amiga, emulators/package.mk:188). A board's core list names such a core
when another folder offers it there, so --target placed its files in a
folder the board does not offer it for.
offer_boards() reads `when` and board_defaults against the platform's
targets, aliases included. A board build (generate_pack and generate
--manifest with --target, verify --target) carries the board in the
config (TARGET_KEY), and content_folder_tags leaves out the pairs the
board is not offered. A manifest for every board lists in
offered_boards each profile placed in such a folder, and install.py
--target drops its files there on the other boards.
Manifests: no file moves. The cores ROCKNIX offers under a device case
read no file beside the game today, so no manifest carries
offered_boards yet.
A pin_build that only dates a config_reads entry names the revision the
platform reads that file at (ROCKNIX's armsx2 PKG_VERSION, KNULLI's
lrmame0278), not the profile's source_commit. Since a6716796a wrote
config_reads into the profiles, EveryBuildReferenceNamesThePin counted
armsx2, duckstation, hatari, mame, melonds and xemu as disagreeing. The
value is now required to name the pin only for a profile whose pin
those references hold or follow (pin_frozen, pin_follows).
advancemame still disagrees: held at 799060b, it names three earlier
builds (EmuELEC 6a34ec0, AmberELEC 0f6a767, Recalbox 5f301c8).
RetroPie clones amadvance/advancemame at the branch tip with no
revision (scriptmodules/emulators/advmame.sh:16, 39-41 at 427e762), so
advmame is profiled at 96237a5 (v5.0-484), built_by retropie and held
by pin_follows. RetroPie's advmame now resolves to it, advancemame
keeping EmuELEC, AmberELEC and Recalbox.
The MAME workflow at 96237a5: 28 BIOS roots registered in
mame/mamedriv.c (macs2bios is not), the eight ZN roots under their MAME
names (coh1000c, coh3002c, coh1002m, coh1000t, coh1002e, coh1001l,
coh1000w, coh1000a), modern Neo Geo members, coh1000w's CAT702, and 15
device archives that BIOS_LOAD reads first (atarisy1, coh3002t, m1comm,
midssio, namcoc65/68/69/71/74, s_smp, saa5050, sente6vb, sns_dsp1bleg,
t5182, v4bios). bctvidbs declares no ROM of its own. Three laserdisc
player programs are opened by name outside any ROM list, with a fatal
length, CRC32 and SHA1 check: pr8210, 22vp931 and simutrek.
pin_build accepts pin_follows in the schema, and bump_commit advances a
built_by profile that follows the tip.
Manifests: RetroPie gains 24 archives at its BIOS root, the ZN ones
under their new names, and nss.zip moves to the copy holding
nss-c.dat and nss-ic14.02. The other platforms do not change.
verify --all keeps its counts. profile_sync: 0 to review.
--remove deletes for good, or moves into a backup with --backup, only what the install record proves the installer placed: unchanged bytes, a regular file below the BIOS folder reached through no link, a SHA-1 the list still serves. Shared, changed, hand-added and unservable files stay and are named. --backups lists, --delete-backup deletes, --restore now updates the record. The full screen gains More, Remove files, the removal plan, Backups and their confirms. Events removal_plan, removed, restored and backup.