Commit Graph
1666 Commits
Author SHA1 Message Date
Abdessamad Derraz bb13e7b5f9 fix: link a system to the section of its name
A system link followed the folder its files sit in: emerson-arcadia-2001
reached the Saturn and sega-naomi the Dreamcast. It now goes to the
section system_name() reads, or stays a plain name. Console headings
carry an explicit id, so Sega's Mega-CD no longer shares mega-cd.
2026-10-23 07:08:09 +02:00
Abdessamad Derraz a9181f9d04 feat: platform logos and emulator letter sections
The decoration pass now forwards the logo front matter, pointed at the
local copy. The emulators index lists every profile under the initial
the sidebar draws, so each letter link lands on its section.
2026-10-23 07:02:40 +02:00
Abdessamad Derraz e86defdb1e fix: settle tests the site packages left apart 2026-10-23 05:32:08 +02:00
Abdessamad Derraz 51b2976515 feat: cite sources and files on reference pages
# Conflicts:
#	wiki/testing-guide.md
2026-10-23 02:59:34 +02:00
Abdessamad Derraz 8b26a8fcac feat: cite sources and files on reference pages
Platform pages link each reader's source line at its pinned revision, name the collection file that serves each entry, show launcher records with their lines, name systems with the id beside them and the list they were read from in words. The largest system lists move to pages of their own so a platform page stays under 500 KB.

Gaps: plain numbers with a bar, a badge only for missing required firmware, Files to source as a heading. Cross-reference: counts per platform, one page per platform, one row per upstream project. Exports: gaps listed once, status, category and the serving file in the CSVs and SQLite, the commit in each API envelope, the provenance Wanted list as CSV. Catalog dates in words on the provenance page.
2026-10-23 02:58:51 +02:00
Abdessamad Derraz 14a6518d49 fix: cite the reader that accepts the hash
A platform entry that declares a hash is now answered by the profile entries accepting it. Batocera's scph1001.bin (md5 dc2b9bf8, v2.0) cited DuckStation's bios.cpp:36, the v2.2 line. A same-named entry is kept, marked by name, only when none accepts the hash and its own hashes do not contradict it. Categories are unchanged: verify --all prints the same report.
2026-10-23 02:58:43 +02:00
Abdessamad Derraz 733de5f6af feat: order system cards and show their facts
# Conflicts:
#	wiki/testing-guide.md
2026-10-23 02:44:01 +02:00
Abdessamad Derraz 5da589bcaa feat: file emulator folders apart on systems index
Other holds one folder per emulator, so it gets its own table. The file
count comes before the maker so it stays on a phone screen, and a card's
searched label stays out of the search excerpt.
2026-10-23 02:43:24 +02:00
Abdessamad Derraz d1dd7ef0f5 docs: rework wiki copy
# Conflicts:
#	tests/test_site_funnel.py
#	wiki/testing-guide.md
2026-10-23 02:42:58 +02:00
Abdessamad Derraz 5167361473 feat: readable diagrams and wiki command tabs
Diagram text reads at 14 px in the column, boxes take the height of their lines, paths are mono on a line of their own. One setup count for every page. Wiki pages expand install commands into system tabs, an options table read from install.py, and keep example hashes out of search.
2026-10-23 02:42:11 +02:00
Abdessamad Derraz 38983a2a4a feat: rework entry pages and setup guides
# Conflicts:
#	wiki/testing-guide.md
2026-10-23 02:34:44 +02:00
Abdessamad Derraz 5cbdceef62 feat: rework entry pages and setup guides 2026-10-23 02:34:13 +02:00
Abdessamad Derraz 235001babb feat: cite terminals, shares and hardware 2026-10-23 02:34:13 +02:00
Abdessamad Derraz 4b7cf6501f docs: open contributing on the upload 2026-10-23 02:34:09 +02:00
Abdessamad Derraz 7d0fc83206 feat: order system cards and show their facts
Required BIOS first with a Start with line by region, a fact grid with
setup display names and a key, a link icon in place of the word
permalink, a console table on the systems index.
2026-10-23 02:31:14 +02:00
Abdessamad Derraz 2098b7a955 fix: judge a redirect page by its target 2026-10-23 02:30:20 +02:00
Abdessamad Derraz eb6ca6d38a feat: emulator pages lead with what is needed
# Conflicts:
#	wiki/testing-guide.md
2026-10-23 02:24:38 +02:00
Abdessamad Derraz 3841012c04 feat: emulator pages lead with what is needed
The intro names systems and, when required files are one per region, says to pick the one for the game's region. Cards go under Required, Optional and Game data with a summary table above, split pages in the same order. Header and index read singular classes, system names, one spelling per core and plain counts.
2026-10-23 02:22:09 +02:00
Abdessamad Derraz 8b6a5d8a8e chore: drop a fixed count from the emulator nav 2026-10-23 02:18:47 +02:00
Abdessamad Derraz 8aa1e1cea1 feat: name each sidebar group by its overview
The 404 page opens on Start here instead of tabs numbered 0 to 4. A group label is a group, or in Explore one link to its overview, never a link to its first page, and a crumb names the section that introduces the page. Emulators sit one level deep by initial. Previous and next run within a tab (Start here into Your setup) and skip system, emulator and platform pages, and follow a page's Next steps list. Reference pages group under Checking files and Data, a wiki page joining by its group: front matter. redirects.json maps alternative core names to their profile.
2026-10-23 02:18:27 +02:00
Abdessamad Derraz 997bc069b2 feat: draw a sharing card per platform page
Each platform page shares a card titled with the platform's name, rendered by make_og_cards.py --only platforms.
2026-10-23 02:18:22 +02:00
Abdessamad Derraz 72e7507ff9 feat: name each system once, from its own section
siterender.system_name reads the heading of the console section the id spells, then SYSTEM_NAMES, and raises for an id in neither. The emulator intro and the picker titles read it instead of the folder a system's files were voted onto.
2026-10-23 02:04:06 +02:00
Abdessamad Derraz 2a50bc21f7 fix: stop on a digest an unmoved file contradicts 2026-10-23 00:35:47 +02:00
Abdessamad Derraz d4f02de3fd fix: give shared files every reading system 2026-10-23 00:35:47 +02:00
Abdessamad Derraz be09d517d9 feat: read retrodeck dual-mode cores from es-de
RetroDECK listed every component standalone only. Azahar, Cemu, Dolphin,
MAME, melonDS, PCSX2 and PPSSPP also run through RetroArch: RetroDECK/ES-DE
es_systems.xml at 15e1b236 loads <name>_libretro.so beside each standalone
command, and the cores ship whole from the buildbot nightly
RetroArch_cores.7z (retroarch/component_recipe.json:250-262). Their
libretro layouts, Azahar's save-dir files among them, now reach the pack.
2026-10-22 22:59:47 +02:00
Abdessamad Derraz bf22f1da47 fix: keep Batocera's save files apart from bios/
batocera-systems lists bios/saves/dolphin-emu/Triforce/segaboot.gcm, so the pack folder for the save directory is userdata-saves/. validate_schemas refuses a pack folder the BIOS tree already uses.
2026-10-22 21:44:14 +02:00
Abdessamad Derraz 2d26385efe feat: place save-dir files in each system folder
Batocera, KNULLI, Recalbox, RetroBat and RetroDECK hand a libretro core <saves>/<system> at each launch. Each copy lands below every system that runs the core. EmuDeck keeps one unsorted saves/retroarch/saves. The unsupported platforms record why.
2026-10-22 21:16:59 +02:00
Abdessamad Derraz 9a1bf4baa6 feat: record the systems each libretro core runs 2026-10-22 21:16:47 +02:00
Abdessamad Derraz 2aaf0e50d1 feat: place files cores read below the save dir 2026-10-22 20:26:12 +02:00
Abdessamad Derraz 1cd6c9ee4d feat: place save-dir files in packs and lists
load_from: save_dir entries of a libretro build were left out of every
pack. They now go below the platform's save folder (registry
save_directory: RetroArch saves/, Lakka savefiles/, by core), the
manifest marks them root: save, and verify replays the same placement.
Platforms keeping saves per system or per game list them as omitted.
2026-10-22 19:58:26 +02:00
Abdessamad Derraz de5b517579 fix: name systems and keep the picker filter 2026-10-22 19:16:36 +02:00
Abdessamad Derraz 123d698e43 feat: build the site with Astro Starlight
generate_site.py writes the Starlight project in website/ and nothing
else: mkdocs.yml, the MkDocs hooks, theme overrides and stylesheet go,
and the wiki is written in Starlight's syntax. Both workflows set up
Node with the official actions/setup-node pinned by commit, run npm ci
from the committed lockfile, build with the strict link validator and
check the result with validate_site.py.

The search weighs a page by what it answers: Start here pages first,
a system page's cards and file names before a guide citing them, deep
guides, launchers, aliases and frozen copies after. Status badges,
hash blocks and the export change lists leave the index. The ranking
sits at the centre of a range where the 13 queries of search_gate.py
all answer, in the search box itself.

839 pages, every URL and 45,611 ids match the MkDocs build. The tests
read the Starlight content and syntax.
2026-10-22 18:47:22 +02:00
Abdessamad Derraz abe240073c feat: pass the Starlight gate on dense pages
Pages of cards under one or two headings drop the table of contents,
whose script watched every block of a 400-card page: 2 x 430 ms of
main thread on a throttled phone. Tables are measured once the page is
idle, skipping those in closed blocks, so a scrolling table is a tab
stop anywhere on the page. The 12 heaviest pages score 97 to 100 in
Lighthouse mobile, axe reports nothing on 16 pages in both themes, and
the search answers the ten gate queries.
2026-10-22 17:21:14 +02:00
Abdessamad Derraz bcade3dc9b chore: merge main into the Starlight branch 2026-10-22 16:49:38 +02:00
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
dajiaohuang 4bf53a0561 Guard semantic checks for invalid manifests 2026-10-22 15:53:57 +02:00
Abdessamad Derraz 294942afd0 feat: port the site ports and picker checks
Tables with a download link stack on phones, the browser check covers
the lookup, a hash typed in the search, breadcrumbs, previous and next
across tabs, glossary terms and the 404 hint. validate_site budgets the
Pagefind index pieces and takes the base path without mkdocs.yml. A
test holds the picker to install.narrow() on 180 selections.
2026-10-22 15:46:36 +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 b7a54b9d9b fix: collapse clone chains in the dedup map
The clone map is cumulative. A run that removed sys68k_cpu21.zip and sys68k_cpu30x.zip as copies of other sets left the entries naming them canonical: their eight clones pointed at files that no longer existed and fell out of the manifests. Each clone now follows to the final canonical, and a loop is refused.
2026-10-22 15:27:58 +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 f18cfa1f5c chore: merge the archive recipe follow-ups 2026-10-22 15:10:14 +02:00
Abdessamad Derraz 06e37b36f7 feat: collect the tyrian files emuelec declares
EmuELEC declares 19 files of the Tyrian 2.1 distribution (setup.ini,
netterm.int, the net*.pcx screens...) that bios/ did not hold. They
resolved only at the data directory step, against data/opentyrian, the
cache refresh_data_dirs.py fills from the opentyrian-data.zip asset. verify
gave 544/572 in a checkout holding that cache and 525/572 in one without
it, for the same commit.

The 19 files are taken from the freeware tyrian21.zip (camanis.net, sha1
29827de9), each equal to the cached copy. netset.pcx and tyrset.pcx are
the same bytes under two names, so the folder joins NODEDUP_DIRS. A test
resolves every platform entry with the data directory caches present and
fails on any that only a cache answers.
2026-10-22 15:08:15 +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 dc3bf41d26 chore: merge the copy rewrite 2026-10-22 14:36:32 +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 14f042c540 chore: merge the MAME required rule 2026-10-22 14:07:13 +02:00
Abdessamad Derraz d60fe814ed feat: read required from romload for MAME sets
A set whose every ROM is NO_DUMP or ROM_OPTIONAL only warns in
handle_missing_file, so the machine runs without it. The parser now
keeps undumped and optional ROMs for that decision, the merge and the
release profiles write required false for such sets, and the text
patcher rewrites the required line it used to leave. A curated false
over a set with dumped ROMs is kept, except over no contents, which is
what an undumped set leaves once a later release dumps it.

pSxMAME builds mamedev/mame itself at 0.133 and left the current
refresh, which would have moved it onto 0.289 refs. Release profiles
keep their citations double-quoted on regeneration.
2026-10-22 14:06:18 +02:00
Abdessamad Derraz 5d868ee19b chore: merge the installer backups 2026-10-22 14:00:25 +02:00