Commit Graph
169 Commits
Author SHA1 Message Date
Abdessamad Derraz 114afee41b feat: move a config read at the pin with it
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.
2026-11-11 14:59:37 +01:00
Abdessamad Derraz e74cbfa4e2 fix: pin advancemame at AmberELEC's build
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.
2026-11-11 14:26:00 +01:00
Abdessamad Derraz 7ff8f17808 feat: profile RetroPie's AdvanceMAME tip build
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.
2026-11-11 13:27:00 +01:00
Abdessamad Derraz 5ccf0edadd chore: point the shipped-build guard at knulli
EmuELEC v4.8 ships no RigelEngine: rigelengine is a dependency of
emuelec-ports, which no package, options file or Makefile of an image
pulls in. The guard now reads advanced_drastic, which KNULLI alone
ships, and still refuses a bump until the profile says why its pin
moves.
2026-11-09 22:22:08 +01:00
Abdessamad Derraz 244bd11075 chore: merge origin/main 2026-11-09 16:46:40 +01:00
Abdessamad Derraz 6c14468862 feat: say the installer and setup pages plainly
- The installer speaks without "you": the first screen asks "Where
  to install?", rows read "Copy the BIOS files from an old card or a
  folder", a close match reads "Close matches: ...". The handheld
  launchers and their port text follow, and the pronoun guard no
  longer lists any installer message.
- A setup that runs as an app opens on its one-line command, the
  folder table after it; a setup that runs on its own device keeps
  the network folder first, which its ZIP route needs.
- The home steps say what to do: "Its page gives one line to copy",
  "Paste it, press Enter".
2026-11-09 16:33:56 +01:00
Abdessamad Derraz d81a873b15 fix: allow advancemame's removed hng64 system 2026-11-09 12:16:32 +01:00
Abdessamad Derraz d9b788787c fix: read keyed source and version in profile_sync 2026-11-09 07:34:26 +01:00
Abdessamad Derraz 8e3ba2cfd3 chore: merge scraper and tool fixes 2026-11-06 16:36:32 +01:00
Abdessamad Derraz 057fd2d0f6 fix: isolate every test module however it runs
tests/__init__.py keeps a run offline, its scratch under tmp/ and its
installer cache its own, but only discover -s tests -t . imported it.
discover tests ran with RETROBIOS_OFFLINE unset, scratch on the /tmp
tmpfs and the user's real installer cache, the setting in which e2e
fixtures had written into the shared .cache/large. Every test module now
imports the package first, and a test fails on a module that does not.
test_verify_listing.py took its line with the previous commit.
2026-11-06 15:14:05 +01:00
Abdessamad Derraz 8bdf19c7dd feat: progress lines for online profile_sync 2026-11-06 15:02:53 +01:00
Abdessamad Derraz 420162c79b fix: rank uncheckable profiles first in triage
--strict fails on a profile no declared repository answers for, yet --triage scored it 0 under the clean profiles and left it out of the count to review. It now weighs as a pin to set again and is counted.
2026-11-06 08:37:36 +01:00
Abdessamad Derraz 63fafaf0f9 fix: read teknoparrot and simple64 from mirrors
teknogods/TeknoParrotUI and simple64/simple64 answer 404 on the API and the web, and neither organisation lists them now. simple64's README at the pin archives the project for gopher64. Each profile declares upstream_gone and a fork that keeps its default branch at the analysed commit: thecrixux/TeknoParrotUI master is b75872ad, simple64-vault/simple64 main is d8c969c7. realign_prose reads a source declared gone through that mirror, which unblocks five teknoparrot notes citations that anchor unchanged.
2026-11-06 08:37:12 +01:00
Abdessamad Derraz a0ecca0024 fix: collect abbreviated prose citations
A location written without its file, (:507), reads in the file named last in the scalar, either cited or named as 'path:' before a list. A dotless file cited with its directory (tools/errorgen:20) is a citation too. devilutionx, corsixth, starship, plastic, eden-nightly, theforceengine, lightspark and higan_sfc gain 33 citations that bump and realign now follow. Two read that way pointed at another file and now name theirs: devilutionx assets.cpp:511-518, corsixth app.lua:1591.
2026-11-06 08:33:16 +01:00
Abdessamad Derraz 8dc3ac82c7 fix: date each prose citation on its own
realign_prose dated a whole field from the last commit that changed any of its citations. idtech4a++ corrected two notes citations by hand in the commit that advanced its pin, so the untouched Game.java:69-72 and GameResourceUrl.java:14-118 read as written under the current pin and were never offered again. Each citation is now followed through the history on its own. The two idtech4a++ ranges move to 72-75 and 15-121, read at ce49510f.
2026-11-06 08:24:49 +01:00
Abdessamad Derraz 19898cb6ea chore: merge site and docs fixes, third pass 2026-11-06 06:38:47 +01:00
Abdessamad Derraz f1f2254be8 docs: drop the upstream remote from CONTRIBUTING
profile_sync.py finds and fetches the project's main by itself. The
documented --base upstream/main failed in any clone without that remote,
where the same command without --base passes.
2026-11-06 03:28:36 +01:00
Abdessamad Derraz 3bad1ad35e fix: an uncached tip offline is unknown
Offline, resolve_head answered None for a tip the cache never stored, as for a branch the forge does not have. select_views then dropped xenios-jp/XeniOS and judged its citations against has207/xenia-edge. The tip and the dated commit now raise NotCachedError, and the profile is skipped as unread.
2026-11-06 03:27:04 +01:00
Abdessamad Derraz 0350f42351 chore: merge site and docs batch 2026-11-05 22:22:37 +01:00
Abdessamad Derraz f9a786896e fix: restore the profile when the prose read fails
_apply_writes promoted the bumped profile, then read its prose under the new pin. A NotCachedError, RateLimitError or UpstreamError from that read left the profile written with a pin the guard would refuse. The original bytes are now put back before the error goes on.
2026-11-05 19:30:04 +01:00
Abdessamad Derraz f8dce8f8c3 fix: keep upstream HEAD for a pin past the fork
_follow_fork_base swapped the fork merge base in as upstream HEAD even when upstream_commit was newer than that base, as for melonds and easyrpg whose upstream is the standalone build they document. melonds read its Qt refs 825 commits back and reported 4 to review. A pin that descends from the base now keeps the HEAD, melonds shows 0 to review.
2026-11-05 19:29:23 +01:00
Abdessamad Derraz 651cabf412 fix: rank orphaned and moved pins first in triage
drift_score ignored orphaned pins and moved repositories although triage_state says they are fixed before any ref is read: pcem ranked last at 0 with an upstream_commit on no branch. Each now weighs more than a GONE ref.
2026-11-05 19:27:36 +01:00
Abdessamad Derraz a3c853316a fix: name the dirty profiles profile_sync refuses
The refusal said the directory carried uncommitted changes without naming the profile, among about 375. It now lists the files git status reports, and says that --force writes over them.
2026-11-05 19:27:12 +01:00
Abdessamad Derraz a06f5ad2ba fix: fetch the project main an upstream lacks
A remote named upstream added as CONTRIBUTING said and never fetched made validate_pr --changed compare with the fork's main and exit 0 on nothing. It now fetches the project's main when the remote does not hold it. profile_sync names the fetch when --base is absent, and CONTRIBUTING adds git fetch upstream.
2026-11-05 19:20:50 +01:00
Abdessamad Derraz 4ee0fd67a2 chore: merge site and docs batch 2026-11-05 14:37:10 +01:00
Abdessamad Derraz d5e5146819 feat: hold bumps of profiles one platform ships
A bulk advance moved fheroes2, supertux and supermariowar past the
revision EmuELEC compiles, and nothing stopped it: bump_commit refused
built_by only. It now leaves a profile a single registered platform ships
until it carries pin_frozen or the new pin_follows, which says that
platform builds the branch tip.

hode, bermuda, bennugd-monolithic and ccleste are held on the
PKG_VERSION of their EmuELEC v4.8 package.mk, equal to their pins.
rigelengine was one commit past it (README.md only) and goes back to
f05996f9.
2026-11-05 12:23:41 +01:00
Abdessamad Derraz bef8b50669 fix: compare --changed with the project main line
In a fork's clone origin/main is the fork: once pushed it is HEAD, and
profile_sync --changed --strict checked nothing and passed while the PR's
CI then failed. The default base is now the line validate_pr.py reads:
upstream/main or origin/main when that remote is the project, the
project's main fetched otherwise.
2026-11-05 12:16:28 +01:00
Abdessamad Derraz 4175aeefd3 fix: profile redream from its public tree
The profile declared libretro/redream, which answers 404, with no pin and
no source_ref: profile_sync skipped it and the boot.bin md5 came from the
libretro docs. It now reads inolen/redream at ffb73022, the last public
tree, whose libretro core opens dc/boot.bin and dc/flash.bin in the system
directory. boot.bin is checked against four md5 and the flash against its
size, and both fall back to the high level BIOS, so neither is required.
2026-11-05 12:04:41 +01:00
Abdessamad Derraz 593260a5ed fix: name orphaned pins on the triage line
needs_review counts an orphaned pin and a moved repository, but the
triage line only added stale prose and unchecked refs, so pcem read
"1 to review" for an upstream_commit outside its branch history.
2026-11-05 11:59:33 +01:00
Abdessamad Derraz 739f651a16 feat: check refs into a submodule
idtech4a++ cites xash3d-fwgs filesystem/filesystem.c, starship and
ghostship Torch src/Companion.cpp: files of submodules of the declared
repository. No blob of the declared tree answers, so the parts stayed
external and a bump moved the submodule commit with nothing checked.
A project word now also resolves to the one submodule named after it,
and a file under a submodule is read in the repository .gitmodules
names, at the commit the declared revision pins it to.
2026-11-05 11:58:22 +01:00
Abdessamad Derraz 8dcf531625 fix: report pinned trees the source record lacks 2026-11-05 11:57:01 +01:00
Abdessamad Derraz 8e6d672136 fix: hold CONTRIBUTING to the CI profile check 2026-11-05 11:56:50 +01:00
Abdessamad Derraz d5c4cd3575 fix: read ti99sim version from its changelog
core_version went null although doc/CHANGES.html at the pin opens on
Version 0.16.0. ti99sim cites v0.16.0 and v0.0.11 parts side by side,
and with no documented version every part read as another program:
profile_sync reported 6 external, 0 to review, nothing checked. The v0.16.0
parts are anchored at the pin again, the v0.0.11 parts stay external.
2026-11-05 11:55:52 +01:00
Abdessamad Derraz 6aa236440a feat: read core_version from its recorded basis
version_basis says where a profile's version is read: a pattern in a
file, the nearest tag and its distance, an alias, a package, none, or
unverified with the reason. profile_sync --verify-version reads it again
at the pin and exits 1 on a difference, --set-version writes what the
code states. A pin advance reads the version at the new pin in the same
write and is refused when it cannot.

upstream.describe counts the commits after the nearest tag in a treeless
clone kept under the cache, and graph_ancestry answers a pair GitHub
refuses to compare.
2026-10-27 18:48:11 +01:00
Abdessamad Derraz 68f42bf8e2 fix: judge each build's refs in its own tree
A profile keyed by build mode compared a part in every repository and kept
the best outcome: xenia-edge's libretro tree carries emulator.cc offset,
and its lines vouched for standalone refs that had moved 4 lines. A part
of an entry with a mode is read in that build's repository, and a part
naming none in the first build declared, as _realign_part decides.
2026-10-27 05:41:27 +01:00
Abdessamad Derraz d0de6dde30 fix: rebuild source paths from the written pins
load_emulator_profiles caches by directory, and the run had loaded the
profiles before writing them, so the record rebuilt after a write kept the
pins just replaced: linapple, then ten profiles in one advance. The cache
is cleared first. The record is rebuilt for those ten.
2026-10-27 05:24:04 +01:00
Abdessamad Derraz 951bd070bf feat: advance profiles that cite no source
_needs_review held every skipped report, so a profile with no source_ref
never moved: anarch sat behind a CI-only commit through every bulk advance.
Its source pin now moves; its upstream pin does not, since nothing was
compared there.
2026-10-27 04:26:28 +01:00
Abdessamad Derraz 4b11a43a86 feat: version check reads tags and numbers
A project that tags without releases (eightyone, higan) was never compared,
and a core_version naming no tag (parallel-launcher 9.0.5 beside v9.0-6)
silenced the passed-release warning. The newest tag stands in when it is a
version number, and an untagged core_version is compared by number within
one scheme. --emulator is repeatable: a stored value kept only the last.
2026-10-27 04:16:31 +01:00
Abdessamad Derraz 44378ae5c9 feat: name a release newer than the pinned tag
A profile pinned on its release tag read as clean forever: armsx1, armsx2
and x1-box sat on old tags while newer releases were out. --check-version
now names the latest release when it follows both the declared tag and
the pin, unless pin_frozen holds the pin on purpose.
2026-10-26 23:25:51 +01:00
Abdessamad Derraz f3a161b60e fix: keep unread trees in the source paths record
A sitesources run that GitLab rate-limited dropped about twenty trees it
never read from website/src/data/source-paths.json. A tree key names a
pinned sha, so the last record's entry for an unread tree still holds and
is carried over, in sitesources and in profile_sync's refresh.
2026-10-26 22:52:23 +01:00
Abdessamad Derraz 45d611332a feat: hold a bump when cited files gained names
Refs that still anchor say nothing of what the code added around them:
mame2003_plus's zn.c gained two Taito G-NET BIOS sets while its cited
lines only shifted. --rebase-refs and --bump-commit now refuse a profile
whose cited files gained a file name or a hash literal since the pin, or
could not be read, until --accept-changed says the additions were read.
With this, --all --rebase-refs --fresh is safe to run as is.
2026-10-26 21:55:23 +01:00
Abdessamad Derraz 32633c4e5c fix: let any refusal confirm a declared dead forge
citron's taken domain now resolves to an unrelated host that fails TLS,
so the pass reported an upstream error where the profile already states
the forge is gone. Any forge error now agrees with upstream_gone; a rate
limit still does not.
2026-10-26 21:53:47 +01:00
Abdessamad Derraz fa3651d14d feat: refresh source paths after a profile write
Each pin advance left website/src/data/source-paths.json behind and the
site's freshness test red until sitesources.py --fetch ran by hand.
profile_sync now rebuilds it after any run that wrote a profile, online
and not in a dry run.
2026-10-26 21:07:08 +01:00
Abdessamad Derraz 0c77ef074e feat: add --fresh and name why a keyed pin waits
Branch tips, tags and releases are cached for six hours, and the
EKA2L1, trzy/Supermodel and VICE heads read as behind their real HEAD.
--fresh asks the forges again, and is refused with --offline.

A recale on a profile whose pins are keyed by build mode said the prose
had to move first. It now says the pins are set by hand.
2026-10-24 04:08:59 +02:00
Abdessamad Derraz fa7977d2c3 fix: ask again for a tip older than the pin
A branch tip is cached for six hours. scummvm-standalone was pinned on
6f7b060d while the cache still held 77d80d7, its ancestor, so profile_sync
showed a HEAD behind the pin and a bump would have moved it backwards. A
tip that is a strict ancestor of the pin is now asked for again.
2026-10-24 02:00:21 +02:00
Abdessamad Derraz 5a3f621e94 fix: read the mirror of a gone source
select_views stopped on the first repository that answered as gone, so
yuzu's source_mirror was never read and the profile stayed unchecked. A
gone repository is now passed over, and a profile declared gone that
answers only through its mirror is not reported as a contradiction.
2026-10-23 19:13:48 +02:00
Abdessamad Derraz 82bf236a5a feat: hold an upstream pin a port vendors
upstream_frozen says why upstream_commit stays: the port vendors that
upstream tree, synced to that release, or merged that commit. The view
is then read at its own pin, the way pin_frozen holds source_commit, and
a bump leaves it. Outside a GitHub fork network nothing else could tell
aps3e's vendored RPCS3 1f080485 from an upstream read on a date.
2026-10-23 17:30:20 +02:00
Abdessamad Derraz 01465ecf6b fix: ignore a release older than the tag
--check-version said pcsx2x6's v0.2.22 was older than its code because
the pin holds release v0.2.20, the latest the project published. A
release that is an ancestor of the declared tag is not a later one.
2026-10-23 17:26:25 +02:00
Abdessamad Derraz 19f22da75f fix: write prose and quoted refs as written
A folded run rewritten whole keeps its separators (boom3, mame), a
double-quoted source_ref is matched as the loader reads it and escaped on
write (etlegacy), two files sharing a name take their build mode in the
field path (supermodel Games.xml), and a project word ending the line
before a path marks the citation external (genesis_plus_gx_expanded).
2026-10-23 17:23:01 +02:00
Abdessamad Derraz 6f8d3dede3 fix: read prose where its path is written
realign_prose stripped a path prefix, or read a path two repositories
share, in the repository whose pin moved, while the profile meant the
other. hatarib's hatari/src/tos.c became hatari/hatari's src/tos.c, and
freej2me_plus's fork citations were read in hex007/freej2me: 32 and 8
citations asked to be read again although their files were unchanged.
The path as written now decides first, and a shared path belongs to the
repository declared first, as in attribution.

test_a_frozen_build_files_its_content_with_the_build_that_follows paired
every pin_frozen profile with every live one of the same source. It now
skips platform builds (built_by), and requires the frozen systems to be
a subset: a later release can add a board (advancemame's coh1002v).
2026-10-23 16:41:04 +02:00