The site read an entry's system: only, so the 430 MAME entries that list
systems: were filed under no section. It now reads common.entry_system_ids
for an entry that names its own systems.
The published platform contract validates against platform.schema.json, which does not carry the resolver's per-entry system key. The two inheritance tests and the alias call check read the new entry shape, and the testing guide lists test_maker_folder_names.
AmberELEC's nec-pc-88 declares DISK.ROM with an empty md5. QUASI88 reads
that name as n88sub.rom, the 2 KB PC-88 disk ROM (libretro.c:1085), but
the name step served the 16 KB MSX disk ROM, the only primary of that
name. The quasi88 alias never reached by_name, which refuses an alias a
primary already carries.
load_platform_config now writes each entry's system as platform_system.
A platform entry with no hash and no owning emulator, whose system id
names a maker, takes no name candidate filed under another maker, in
the name step and in the hash_mismatch step after it. When nothing is
left, by_shadowed_alias, the profile aliases by_name refuses, answers
within the system's maker folder. names_manufacturer and BUCKET_FOLDERS
move to common.py, and generate_site imports them.
Across every registered platform the only resolution that moves is
AmberELEC nec-pc-88 DISK.ROM, from bios/Microsoft/MSX/DISK.ROM to
bios/NEC/PC-88/N88SUB.ROM. Manifests, truth and exports are otherwise
byte-identical.
The emulator card read entry_target from the consumers object, which the tests stand in for with a namespace. It is a module function now, and the pairing test resolves an archive member through it as the site does.
The get pages told a reader on another setup version to run `--check` after copying, with no command and no link, to someone holding a ZIP and no installer. The line now links the setup page's How to check section.
142 tab bars held one tab, most of them "On the device" under a heading saying so. One item now stands alone, led by its label unless it names the place the text around already gives. The network route drops "Run the command on the computer" under the heading "From your computer", which keeps RetroPie in its word budget.
Without --platform, cross_reference and the site's gap report merged every
platform's standalone set, MinUI, NextUI and MyMinUI coredir: markers
included. A marker says which cores one platform hands a folder, so in the
union every core those three do not list got no layout: px68k showed 0 of
6 files and the global report lost 238 profiles and 1201 files.
merged_standalone_set drops the markers, and both readers use it.
The meta description of each platform page was its summary followed by the label of a link, "ROCKNIX website.", and never said the page gives the BIOS files, their folder and the install command.
A profile whose every file comes with the app was titled "<X> BIOS files" and described by its system alone. The title now reads "<X> emulator" and the description says every file it reads comes with the app.
The Data page said a SHA1 lookup was enough because MD5 and CRC32 declarations are filed under the collection file's SHA1 too. That holds only for a file the collection holds: 702 platform MD5s and 18 CRC32s are filed under their own value alone.
The Version cell printed the file a version is read from, or its tag, as bare text beside a pinned Revision link. The file now links at the pin where the recorded tree holds it, and the tag links to its tree. cited_paths records the version files so the record can confirm them.
The emulator page showed the reason for pin_frozen and never the one for upstream_frozen, which 11 profiles record: mupen64plus read as left behind HEAD.
FBNeo reads sm1.sm1 inside neogeo.zip. The site resolved each member entry by its crc32, credited loose copies FBNeo never opens, and no neogeo.zip card named FBNeo. A member entry now resolves through archive_entry as the pack does, and its card names the archive.
_REGION_WORDS was bound twice in generate_site. The second table won at import, so the first, read by _region_word, was never used. The region lines now read the one table through _region_words.
comes_with_app kept an entry narrowed by mode as required and missing, while verify and the pack read it as installed with that build (validation.installed_with_emulator). The four other site checks of bundled now go through the same function.
plan_emulator_pages names systems, and siterender then fell back to the repository's database.json and emulators/ whatever --db and --emulators-dir gave.
A RomM row printed the served copy's sha1 under the same SHA1 it
had just declared, 313 times on the page. The note stays where the
copy is not one the row declares.
The site test modules were cut by review pass (test_site_r2_css to test_site_r5_wiki): the passes of one subject become one module, and the modules that stood alone take the name of what they hold. The installer test classes named after a review take the name of what they test. One test left --manifest set for the tests after it, which the new order showed: it now resets the sources.
Comments, docstrings and test texts ended on tags that name private review notes no clone holds. The tags go, the facts stay. Test methods named after a finding number are named after what they hold. test_prose_style refuses a tag that comes back. install.py changes in comments only: its pin and the launcher index follow.
A section shares its page's search fields, and "playstation 3 bios" found the PlayStation page before the Sony page that held the PS3. CONSOLE_PAGES splits Sony by console whatever the size. The search gate now expects the PlayStation 3 page in the top two for that query, the order of words being something Pagefind does not weigh, and the page first for "ps3 bios".
MAME's first card part showed 1,931 words against the 1,693 ceiling once
888 entries named their system: each row gained a "for <system>" badge
while parts were cut by card count. Parts are now cut by the words each
row shows with its card closed, balanced, at most 1,350 a part and still
at most 180 entries. MAME goes from 9 parts to 10, no part disappears.
The gaps page said the exporter regenerates each platform's file, which it patches, and opened on 48 missing above a heading of 10 files. The provenance total sat above three lists that add up to more, and the cores page counted every profile as run by the platforms.
The sentence fits the page's 400-word ceiling and its 20-word sentences.
A test reading the site generator skips under Python 3.8, as the others
do, and the core plan test names the cores --core gave.