Commit Graph
266 Commits
Author SHA1 Message Date
Abdessamad Derraz 5f3534bdf2 feat: tune search weights and heavy page loads
Status badges and hash-listing blocks leave the search index, card titles
weigh as page titles, and Pagefind ranking is set inside a range where
the ten gate queries all answer (search_gate.py: 10/10). Tables are set
up and measured when they near the screen, which relaid out a 3,800-row
page after its first paint, and console icons hold their box.
2026-10-22 16:49:27 +02:00
Abdessamad Derraz 342d0f7271 feat: write the site for Starlight behind a flag
generate_site.py --engine starlight writes the pages, navigation and
data files of an Astro Starlight project in website/. Links resolve to
site addresses, every heading keeps its MkDocs id, and pages split by
size are measured in the MkDocs Markdown so both builds cut the same
files. The 839 pages and their 45,613 ids match the MkDocs build.
2026-10-22 15:41:39 +02:00
Abdessamad Derraz d2974660eb refactor: emit site blocks through sitemarkup
Callouts, collapsible blocks, tabs, buttons, card grids and search
exclusion go through one module that writes the engine's syntax. The
MkDocs output is unchanged apart from whitespace-only lines.
2026-10-22 15:21:52 +02:00
Abdessamad Derraz be3324f869 feat: read guides and wiki nav from data
Platform guides, device groups, terminal tabs, pack README manuals and
logo credits move from Python tables to platforms/_guides.yml, checked
against the registry on load. A folder row without a path is the
registry's extract_to, written once.

Wiki pages place themselves in the navigation with order and nav_title
in their front matter. Generated docs/ and mkdocs.yml are unchanged.
2026-10-22 15:06:52 +02:00
Abdessamad Derraz b77cc0b8fd fix: list the legal and project term pages
The copy rewrite moved the legal analysis to wiki/legal.md and the project terms to wiki/reference-terms.md, linked from the FAQ and the glossary but missing from the nav. They now sit in Explore and Reference, as their level says.
2026-10-22 14:41:17 +02:00
Abdessamad Derraz 009413944e docs: open the deep pages on their question
Each reference and contributor page now says what it answers and gives
a real case before its rules: scph5501.bin for the check modes and the
data model, DuckStation's entry for profiles, RomM for a platform. The
verification example is the RetroBat d64_1.rom case the gaps page lists
instead of a scph5501.bin case the data cannot produce.

Emulator pages open on what the emulator reads, from the profile, and
keep their technical notes folded. System pages say what a card holds.
The data model shows a real database entry and links the one
resolution chain. Gaps tables name what they count ("Discrepancy",
"Where the files come from"), and the core inventory is titled Cores
by platform so cross-reference keeps one meaning.
2026-10-22 14:31:57 +02:00
Abdessamad Derraz 70d761682c docs: plain copy on the newcomer pages
The Start here pages ran 460 to 2,100 words and the first command of
Get your files sat 254 words down. Each page now opens on its action,
with short sentences and one fact per block. The facts a newcomer does
not act on moved one level down: the legal analysis to wiki/legal.md,
the project terms to wiki/reference-terms.md, the annotated run and the
installer failures to the installer page, collection figures to a new
Explore index.

tests/test_site_copy.py holds the budgets on the generated pages, and
the testing guide states them with their reasons.

Four statements the repository contradicts are rewritten: prboom.wad
is compiled into PrBoom (emulators/prboom.yml), Batocera reports a
mismatch as UNTESTED (batocera-systems checkBios), 13 hle_fallback
entries are required, and the gaps headline splits missing firmware
from game data and unread entries.
2026-10-22 14:23:54 +02:00
Abdessamad Derraz 5d868ee19b chore: merge the installer backups 2026-10-22 14:00:25 +02:00
Abdessamad Derraz 468b5e1d3e feat: keep a replaced BIOS file beside its folder
A file in place whose contents differ (another revision, a personal
dump) was overwritten and lost. It is now moved to
retrobios-backup/<date-time>/ beside the folder written to, under the
same path, before the verified copy replaces it. Beside, not inside:
DuckStation, SwanStation and Rustation read every file of the BIOS
folder and BizHawk walks its firmware folder recursively.

Identical files are never kept. --dry-run counts what would be kept,
the summary and the summary event name the folder, files and bytes,
and --restore FOLDER puts the files back. Data trees and standalone
copies keep their replaced files the same way.
2026-10-22 14:00:00 +02:00
Abdessamad Derraz 274fc37673 chore: merge the site weight and speed work 2026-10-22 13:46:50 +02:00
Abdessamad Derraz 36ac7b0cd6 feat: split the heavy site pages
A manufacturer page over 500 KB of Markdown becomes a summary: its
largest consoles move to pages of their own, cut into parts when one
console is still too large, and every console keeps its heading there.
MAME's 1,564 cards move to four pages, its page keeping a row per entry
with the card's old anchor. RetroDECK's arcade list gets its own page.
site.js follows a moved card by content or by its row.

The largest page drops from 10.5 MB to 0.88 MB. Emulator groups of the
navigation open by initial (65 KB to 41 KB before the content). File
cards are level 3 under a level 2, and the hook keeps the table of
contents of card pages to level 2: platform pages no longer list every
system id. Key/value cards name their columns. The sweep runs before
the decoration, which kept every page no generator wrote any more.
2026-10-22 13:13:52 +02:00
Abdessamad Derraz 2d2addd6d2 fix: align the suite with the site layout
The redesign moved the technical questions to technical-faq.md, made the Get your files rows generated from each platform key and reduced getting-started.md to links. Tests now read those places: the pack-row test reads the rendered page. The new site scripts go through run_cli and refuse abbreviated options. The three maintenance image tools are exempt by name from the build dependency rule: their output is committed and the build only reads it. siteguides.py now triggers the site deploy, and the recipe counts match the store.
2026-10-22 13:11:07 +02:00
Abdessamad Derraz 33041b6bd1 feat: find a file by any hash, out of the search
Hashes, link lists, install commands, member tables and long reference
tables leave the site search: the index drops from 21.0 MB (4.88 MB
gzip) to 6.8 MB (1.33 MB gzip). Names and prose stay searchable.

files/?hash= takes a SHA1, MD5, CRC32 or SHA256 and reads one shard of
api/v1/lookup/ (about 22 KB gzip, was 675 KB) listing the collection
card, the platforms that declare the value and the profiles that check
it. files/?sha1= still opens the card, and a sha1- anchor missing from
a page is looked up there, so a card can move between pages.

Excluded blocks are section elements: the search plugin compares
elements by tag, so a div ended at the first nested div.
2026-10-22 12:46:40 +02:00
Abdessamad Derraz 427a8183e3 feat: draw the site mark and favicons as vectors
The header logo was a 256 px compressed raster whose navy chip vanished on the indigo bar. The chip is now an SVG, white with the glyph cut out, and the favicon set (SVG, 32 px and an opaque 180 px touch icon) comes from scripts/make_site_icons.py.
2026-10-22 12:34:44 +02:00
Abdessamad Derraz baf38ffbee refactor: compute coverage once, index proofs
EntryCategories asked every core in turn: 3.8 million proofs for 7,430
entries. ProofIndex looks each key up once, and verify --all --json is
byte-identical (24 s to 17 s). generate_site and generate_readme now share
one coverage, cached in tmp/coverage-cache keyed by its inputs, so the
README step drops from 25 s to 3 s.
2026-10-22 12:23:26 +02:00
Abdessamad Derraz f39bcebb22 chore: merge the site visual system 2026-10-22 12:00:19 +02:00
Abdessamad Derraz 6353ee53df feat: lay the site out as a reading funnel
Five tabs from Start here to Contribute, a level on every page, a device picker on Get your files that lists every registered platform, and platform pages that open on where the files go, the command, the pack and how to check. FAQ and troubleshooting keep the questions asked before installing, the technical ones move to their own page, and getting started points to the pages that took its content.
2026-10-22 11:50:53 +02:00
Abdessamad Derraz 1b9ea86e1b feat: draw site images from data, host them
scripts/sitediagrams.py writes the explainer, install flow, verification modes, MinUI card, pipeline and data layer diagrams as inline SVG from the registry, the platform files, the install manifests and the pipeline step list. A page asks for one with an image comment, which the decoration pass resolves. The two mermaid diagrams of the architecture page are replaced, so no page loads mermaid from unpkg.

Platform logos and system icons are copied once by fetch_site_images.py with their source and owner recorded, and the build rewrites the remote links to the copies. validate_site refuses an image from another host. Three registry logos named a personal avatar instead of the project's (RomM, ROCKNIX, MiSTer FPGA) and MyMinUI's was a GitHub identicon, now dropped.

One 1200x630 sharing card per section, a 404 page with search and the two entry pages, and a list of screenshots that need a real device.
2026-10-22 11:45:47 +02:00
Abdessamad Derraz 87a4e8e1b6 fix: send unreleased platforms to the installer
A release recorded without a platform's pack linked its button to that release, which serves no pack for AmberELEC, EmuELEC, KNULLI, MinUI, NextUI or MyMinUI. The cell now names the release and points to the installer, which reads the file lists on main. Core folder links resolve each core name to the profile page that describes it (mednafen_vb is beetle_vb).
2026-10-22 11:04:25 +02:00
Abdessamad Derraz 4501601769 fix: show where each platform's pack goes
Platform pages labelled base_destination, the root the platform's own list writes from, as the BIOS path, so EmuDeck read bios/ where the pack goes into ~/Emulation/bios/. The row now gives the registry's extract_to, the folder the README and the pack guide name. A platform that names no file (MinUI and its forks) showed 0/0 coverage and an empty systems table; its page now lists each core folder with the files the pack puts in it.
2026-10-22 10:56:35 +02:00
Abdessamad Derraz cd7d993cac feat: settle entries by their system's cores
A system that lists the cores it runs is settled by those cores alone, so an unprofiled core of another system no longer leaves its entries open. Readers whose core runs the entry's system are named first, and cores that only share the file name are listed as such.
2026-10-22 06:30:56 +02:00
Abdessamad Derraz a0b27d612d fix: align tests with the ten-value pack result
Two test modules still unpacked nine values from verify_pack_against_platform. The category evidence joined readers with semicolons, which the prose rule refuses on generated pages, and three comments used clause semicolons.
2026-10-22 06:23:15 +02:00
Abdessamad Derraz 8ba65de1ca chore: merge the game data filter 2026-10-22 06:19:55 +02:00
Abdessamad Derraz aed958ccd1 docs: document the game data filter 2026-10-22 06:19:13 +02:00
Abdessamad Derraz be9036f2b2 feat: document the category of every entry
Held entries carry their category and readers too, not only missing ones, so each platform page says which cores read every file it lists and where the code does it. Severity still applies to firmware gaps only.
2026-10-22 05:46:09 +02:00
Abdessamad Derraz a75ea05b86 feat: document what settles each category
Each missing platform entry now carries its evidence: the profile entries that read it with their source reference, the cores of its system examined without finding a reader, or why the question stays open. verify --verbose prints it, --json carries it and the platform pages show it.
2026-10-22 05:43:06 +02:00
Abdessamad Derraz e05844e611 chore: merge the handheld port 2026-10-22 04:12:09 +02:00
Abdessamad Derraz 841017c887 chore: merge the minui family platforms 2026-10-22 04:09:17 +02:00
Abdessamad Derraz 43bdf83973 feat: add minui, nextui and myminui platforms
minarch hands every core SDCARD_PATH/Bios/<TAG> as its system directory
and opens no file in it. The scrapers read each pak's launch.sh (core,
tag, devices), each device's core makefile (the project a library is
built from: MyMinUI's dosbox_libretro.so is dosbox-pure) and the minarch
statement, at a pinned commit. The installer recognises the card from
.system/version.txt and refuses a folder inside it.
2026-10-22 04:04:36 +02:00
Abdessamad Derraz 7d87828b98 docs: explain the handheld port
The installer page says how to get the port (PortMaster's catalog once
accepted, or RetroBIOS.zip in the autoinstall folder), what it shows and
needs, and why it carries install.py. The download page links to it
from the handheld table.
2026-10-22 03:59:12 +02:00
Abdessamad Derraz 44a9c8d9bb docs: list knulli, amberelec and emuelec
The download page drops a row whose platform has no pack in the
recorded release instead of linking a release that lacks it.
2026-10-22 03:42:25 +02:00
Abdessamad Derraz 8643d4a4ea chore: merge audit fixes (site)
# Conflicts:
#	emulators/flycast.yml
#	emulators/primehack.yml
2026-10-21 11:48:30 +02:00
Abdessamad Derraz 6409757c39 chore: merge round 2 fixes (docs)
# Conflicts:
#	CONTRIBUTING.md
#	scripts/check_release_assets.py
#	scripts/generate_readme.py
2026-10-21 10:31:04 +02:00
Abdessamad Derraz f15fa46d85 feat: offer the one-liner where users land
The download page had no Android line and no Windows form with
options, and platform and system pages offered only ZIP parts. One
generator now writes the Linux, Windows and Android commands for the
download page and the platform, emulator and system pages. A system
section lists each platform's command under the system id its install
manifest records, the only names --system accepts.
2026-10-21 10:20:19 +02:00
Abdessamad Derraz ccd1ff3b0b docs: describe each setup by what it is
The which-pack page called RetroPie the largest community with the most
guides, Batocera an easy setup and Recalbox good for a first build,
claims nothing in the repository measures. Each row now says what the
setup is, with board names taken from the platform target lists.
2026-10-21 10:17:04 +02:00
Abdessamad Derraz b89383ba68 fix: open the gap page on what is missing
The page opened on a slogan and four tiles that read Verified (100%)
for 5,437 of 5,438 files and Missing 0, above a table of red cells. It
now opens on what it covers and one sentence that says every count of
the platforms' own lists and points to the emulator files below.
2026-10-21 10:16:14 +02:00
Abdessamad Derraz 69965ebb25 feat: link each platform and system to its data
An emulator page linked its YAML and api/v1 JSON, platform and system
pages nothing. Each platform page now links its YAML, its own
api/v1/platforms/<id>.json and its install manifest, and each system
page its api/v1/systems/<slug>.json, both validated by the envelope
schema.
2026-10-21 10:15:11 +02:00
Abdessamad Derraz 2239df669f fix: address a hashed file card by its hash
An emulator card's anchor changed when a second entry with the same
path was added, so cited links landed at the page top. A card whose
entry declares a hash is now addressed by it, and the first card of a
path keeps the plain file-<path> id as an alias.
2026-10-21 10:12:26 +02:00
Abdessamad Derraz de8ab51d6e fix: derive pack install guides from the registry
The pack README's one-line install was written per platform: ROCKNIX and MiSTer had none, EmuDeck's Windows edition was told to open Konsole, and RomM users were sent to library/bios/ whatever their firmware template. The automatic section now follows each platform's install.detect systems, the EmuDeck and RomM manual steps name every layout, and the download page lists EmuDeck under Windows and macOS.
2026-10-21 10:10:15 +02:00
Abdessamad Derraz 73ff57468f fix: page descriptions and urls match the page
A core that loads no file no longer promises paths and hashes in its
snippet, a description is cut at a word and keeps the underscores of
its code spans, and the JSON-LD url is encoded as mkdocs encodes the
canonical link and the sitemap.
2026-10-21 10:09:26 +02:00
Abdessamad Derraz fac8685819 fix: give both hashes in the untested table
A row said the declared hash was contradicted by the local file and
named neither. The table now prints the hashes the platform declares
and the path and hashes of the copy the collection holds.
2026-10-21 10:06:52 +02:00
Abdessamad Derraz a37af8e42e docs: readme installer options and plain wording
The quick install block gains the PowerShell form that passes options and a link to the installer page. The collection size uses the GB format of the download table and the site, counts get separators, and the sentences about RetroArch's existence check and the method describe the code instead of judging documentation.
2026-10-21 10:06:49 +02:00
Abdessamad Derraz 377e53f4c0 feat: show load_from, built_by and pin fields
load_from, found_by, on_mismatch, built_by, pin_frozen and
version_source were in the profiles and on no page: Dolphin's
gba_bios.bin showed a path under system/ although the libretro core reads
it from its save directory, and mame0278 did not say only Recalbox ships
it.
2026-10-21 10:05:18 +02:00
Abdessamad Derraz e65ece743d fix: name where a held profile entry sits
164 entries wore the in repo badge with no copy named: they are held as
a ZIP member or in a data directory, which the database does not index.
held_copy() finds that copy and the card names it. storage: large_file
no longer counts as held by itself: kenji-nx's user-picked firmware
package read as held although nothing collects it.
2026-10-21 10:02:50 +02:00
Abdessamad Derraz 45db77cfd0 fix: link a system to its maker's folder
The database keeps one path per content, so a system placed by the
copy deduplication kept linked to another maker: nintendo-nes and
nintendo-fds to Arcade > FBNeo, sega-mastersystem and
sinclair-zx-spectrum to Other > zesarux. Every folder holding a copy now
votes, an id that spells one console folder links to it, and a maker's
folder outranks the folders that file copies by emulator.
2026-10-21 09:54:56 +02:00
Abdessamad Derraz 6c2204a7a8 chore: merge tooling follow-up
# Conflicts:
#	tests/test_audit_regressions.py
2026-10-21 06:50:20 +02:00
Abdessamad Derraz 768b42e807 fix: fold case in the site gap report too 2026-10-21 06:50:10 +02:00
Abdessamad Derraz 76e44a74b4 refactor: drop comments that restate the code
Thirty one-line labels in verify.py, generate_site.py and
generate_truth.py named the statement under them ("# Load registry",
"# Copy branding assets"). Comments that give a reason stay, as do the
module section headers. A test reads the three files for new ones.
2026-10-21 06:20:50 +02:00
Abdessamad Derraz 3613c0927b docs: open the download page on its content
The which-pack page announced itself ("This page picks the right pack
for a setup") before naming a pack. The sentence goes, the pointer to
Getting started stays.
2026-10-21 06:18:59 +02:00
Abdessamad Derraz 734643b8fc chore: merge audit fixes (site)
# Conflicts:
#	wiki/testing-guide.md
2026-10-21 05:53:15 +02:00