openbor.c is 55k lines at the pin and 57k at HEAD, over a ceiling of
40k, so its ref reported CHANGED with nothing to act on: the mapping was
never attempted. Diffing that pair takes nine seconds, and the fallback
only runs once exact anchoring has failed, which is rare.
The ceiling now sits above it and still stops a pathological pair from
stalling a sweep of every profile. savesettings moved from 2675 to 2940
and the range maps cleanly.
The BIOS search dropped the arcade and consoles subdirectories under
both the rom directory and system/fbneo. Seven places to put a BIOS ZIP
became four, and both profiles still documented the old list, which is
the kind of thing a user follows.
fbneo's gba_bios.bin also cited a line in the middle of a battery
allocation; its RomDesc entry, which carries the name and the crc32, is
at 538.
The pin moved with the recale, so twenty-eight romset refs stopped
naming the line declaring their set; mame_ref_audit moved them.
pegasus.zip cited the word ROM_START where a line number goes, which
resolves against nothing: its declaration is at 575.
KEmulator replaced the native amrdecoder with a pure Java port of
opencore-amr and says so in AMRDecoder.java: no platform specific binary
is shipped or loaded any more. The profile still asked for it under nine
names across four platforms.
hatari and scummvm cited a line just past the option they mean.
fluid.soundfont, the fake SDL switch, the mt32.romdir assignment: each
was cited a few lines past itself. future-pinball-fploader's PuPVideo
part carried no artefact, so it read as a path.
jaxe pointed at a libretro core-info file, lindbergh-loader at a
Batocera generator, oricutron at the ES-DE user guide. None is in the
tree each names.
Every part of its ref names a class from the shipped app, not a file in
the repository, and only the first carried the release label; the
continuations were looked up in the tree. race, xendroid, zesarux and
sdl2trs only needed their pin to catch up.
boytacean cited a line a hundred past the CGB boot selection and cap32 a
blank one after the bios directory is built. b2 carried the owner and
repository in front of its path, which matched two roms.cpp. crocods,
armsx2 and amiberry only needed their pin to catch up.
gopher2600 and gearsystem cited a blank line one past the fingerprint
comparison and the SG-1000 bootrom guard. fuse cited a glob, which
resolves against nothing: the two machines it means are named now.
gsplus, gopher64 and geolith carried refs from a newer tree than their
pin.
melonds_ds cited the bios9 load and the tool offered the bios7 line one
above it; the ref names bios9.bin, so it goes to 306. m2000's P2000.c
gained a serial-support branch inside the ROM patch loop. Pins moved
with the refs in all three.
Four refs pointed at blank lines or a closing brace: get_bios,
pif_bootrom_hle_execute, the key mapping block and the neocd system
subdirectory constant are one line off in each case.
xenia, tyrquake and solarus cited bare or unprefixed files and carried
line numbers from a newer tree than their pin named; each now names the
path and the revision together. tic80's wrapper repository holds nothing
but a licence, a readme and the core submodule, so the runtime claim
cites the submodule declaration and the project it points at.
fs.cpp:52 is blank; the case-insensitive match is in findPathIndex at
53-56. The upstream carried no commit, so it was pinned by profiled_date
to a revision where resource.cpp sat three lines off.
The pin advanced with the recale, so twenty-five romset refs stopped
naming the line that declares their set at the new revision.
mame_ref_audit found and moved them; 147 agree, 180 refs anchored.
dinothawr's libretro.cpp became libretro.c and its refs already carried
the new line numbers, so the pin followed. groovymame cited a Batocera
package recipe and jgenesis a RetroBat generator, neither of which lives
in the tree each names; both read external now.
psx.cpp is not in this fork, only headers, and the declared upstream is
a website rather than a forge: the size rejection is Mednafen's and
reads external now, beside the fork's own BIOS_SIZE_STD. The MAME
provenance of the checksums is external too, and the lists themselves
are in libretro.c, which is where libretro.cpp went.
same_cdi's cdi.cpp is 494 lines; the profile cited 574-640 and 662-820,
which are upstream MAME's numbers. The fork carries four sets and none
of the Quizard game ROMs, and the refs say so now.
fsuae cited fsuaePaths.py and fsuaeGenerator.py against libretro-fsuae,
where they have never been: they are Batocera's, which is what the note
already said in prose.
The block moved and the profile's line numbers stayed. The selection now
reads program_state.flashcart_loaded and program_state.cfg.boot_to_menu
at 151-181, choosing between the menu and game bootloader for each
fxport pin. Pin moved with the refs.
The guard left gearlynx_core_inline.h for gearlynx_core.cpp, and the
line the tool proposed in its place is SynchronizeComLynx. Following the
content rather than the offer puts it at 249-253.
mgba and vitaquake2 carried refs written against a newer tree than their
source_commit named, which the diagnostic reports rather than leaving as
a plain miss. vba_next is the other shape: CPUInit sits at gba.cpp:5137
in upstream VBA-M and always has, but the profile declared no
upstream_commit, so the upstream was pinned by profiled_date to a
revision where that file was shorter.
aps3e was left alone: its pin is behind for two refs and HEAD has moved
far enough that advancing costs seven more.
Both cite files that ship in a release and exist in no revision of any
declared repository: SSF's Document/Readme.txt, and the MacOS binary and
Resources folder of the AetherSX2 app bundle. Cited behind the project's
own name the resolver looked for them in the tree; behind a label that
is not a repository they read as what they are.
OpenLara carries twenty-seven main.cpp, one per platform, and the bare
name matched them all. This profile is the libretro core, so the file is
src/platform/libretro/main.cpp, where the extension list, retro_load_game
and the system directory probe sit at the lines cited.
The freetype feature joined the desktop defaults, and load_fontdb_font
takes a renderer and an atlas set: on Linux the face goes through
FreetypeFontRenderer, and the memory map of the file is the other
branch. Which faces are asked for is unchanged, and still no name, path,
size or hash is fixed anywhere.
scarier handles both Adrift 4 and Adrift 5 and is what the two default
to; scare and FrankenDrift each cover one format and win only where the
build asked for them. The profile still named scare and FrankenDrift as
the pair.
libblastem.c doubled in length and read_bundled_file moved from 661 to
1297; the TMSS fatal_error left genesis.c:1933, which is blank, for
3043. The refs described none of it. Pin moved with them, 6 anchored.
Three refs cited paths under Q3E/src/main/jni that the repository does
not carry: xash3d-fwgs and SeriousSamClassic are git submodules, so the
parent tree holds pointers and nothing else. They read as the separate
repositories they are, which is what the external form is for.
Reading the last two changed blocks turned up the substance.
ETQW_GLSL_SHADER_VERSION went from .3 to .6, and the bundled
zzz_etqwbase.pk4 grew from 136061 to 141815 bytes: the size, md5 and
sha1 the profile recorded describe the pack that was replaced. The new
one is in, the old one kept as a variant for builds that still expect
it, and GameResourceUrl gained two Quake 4 mod entries along the way.
70 refs, 68 anchored and 2 external, none left to read.
The diagnostic caught a ref whose file was missing at the pin. nestopia
showed the other shape: the file is there and the line is not yet. Its
palette and database loads were cited at 2041 and 2063, which is where
HEAD carries them, against a pin four hundred lines shorter, and that
reported as a plain GONE with nothing to act on.
A cited line past the end of the pinned file that fits HEAD is the same
finding as before and now says so. nestopia's pin moved to the revision
its refs describe: 8 refs, all anchored.
The four rhythm entries pointed at fmgen_opna.cpp:1434, a blank line at
the pin as well as at HEAD. What they mean is the block above it, where
2608_ is joined to the rhythm name and .WAV and the file is opened.
The two changed blocks are BOOL, TRUE and FALSE giving way to bool, true
and false, and MemInitializeCustomROM losing its void parameter list.
Which ROM is read and how is untouched. 67 refs, all anchored.
kenji-nx cited tmp/es-de/ANDROID.md:470-474, a path from the machine of
whoever profiled it. No revision of any declared repository holds it, so
profile_sync could only report it missing, every pass, forever, and no
amount of reading would ever settle it.
validate_schemas now refuses a scratch directory, an absolute path, a
Windows drive path and one climbing out of the tree, and names the
offending citation rather than the scalar that carries it. Offline, so it
runs on every push and every pull request rather than waiting for a
network pass.
The ES-DE citation reads as external now, which is what it always was.
kenji-nx is at 37 refs, all anchored: the three changed blocks were var
giving way to explicit types.
An empty file list is the one assertion here that ages unwatched. Nothing
can go missing and no ref can drift, so nothing notices when a core that
embedded everything grows a path. virtualjaguar said "No external BIOS
files are required or loaded by this core" while its source had grown
eleven filenames read from the system directory, and only a reading
found it.
fileless_audit looks for the request itself, the system directory ask, in
the sources each profile already cites. Over the 151 fileless profiles it
named eleven, of which two were covered by data_directories, six carried
an exclusion_note, and three had nothing written down at all: craft
writes its world database in that directory, dice stores the answer in a
variable no other file in the tree names, lutro hands it to the Lua game.
Each now says so.
The check settles: declared files, a declared directory, or a written
answer all end it, so what it reports is the set nobody has read yet. A
test holds the corpus at zero.
The profile said "No external BIOS files are required or loaded by this
core" and carried an empty file list. The core reads up to eleven names
from the system directory today.
Staging left retro_load_game for stage_cart_boot_rom, which tries a file
before the embedded array. BT_CUSTOM, a value the enum did not carry
when this was profiled, searches six cart boot ROM names across three
directories; BT_M_SERIES tries jagboot_m.rom. Both need 0x20000 bytes,
the size copied to jagMemSpace + 0xE00000.
The Jaguar CD BIOS is the larger addition: three name groups over five
directories, accepted at exactly 0x40000 bytes and recognised by CRC32
against 687068D5 retail and 55A0669C developer. The group order follows
virtualjaguar_cd_bios_type, then generic names, then the other type,
since a lone file of the wrong type still beats the embedded copy.
None is required, every path falls back to an embedded array. What they
buy is the real dump instead of the reimplementation. The collection
holds the cart boot ROM under boot.rom; both CD BIOSes and jagboot_m.rom
are absent and now show as gaps rather than as nothing at all.
The profile mixed vintages: most refs carried pin-era line numbers while
the Game Express note already named the HEAD position, which reads as a
blank line at the pin. Everything now describes one revision. The only
content change in the cited blocks is LoadMediaFromZipFile taking a
softpatching flag, which decides nothing about which BIOS is read.
profile_sync follows content, so a ref that drifted still anchors where
the cited text went. That is drift detection working, and it cannot
answer the only question a MAME romset ref asks: does this line declare
this set. It flagged five refs in one driver file where nineteen were
stale, the fourteen others having been relocatable somewhere plausible.
mame_ref_audit asks the stronger question and found ninety-two across
the four profiles whose upstream still moves: mame 66, mamearcade 18,
mamemess 6, groovymame 2. Each had exactly one declaration to point at.
The frozen generations, mame2009 through mame2016, come out clean, which
is the check saying it finds drift only where drift can happen.
The set name is argument 1 of the machine macro. Matching it anywhere on
the line matches every clone naming it as parent, which is most of a
driver, and comments are stripped first because a declaration can sit
behind one. A set no machine declares is reported as not judgeable, not
wrong: device archives take their DEFINE_DEVICE_TYPE shortname.
profile_sync flagged five refs in src/mame/tvgames/xavix.cpp. Checking
each entry against the line that declares its own set showed nineteen
were wrong, the whole e-kara and XaviX family: ekara cited 2956 where
the pinned revision declares it at 2878. The fourteen the tool passed
were relocatable by content, so they anchored somewhere plausible; that
is drift detection working, and it is weaker than asking whether the
cited line declares the set the entry names.
Every ref now names the CONS line of its own set at the pinned
revision, checked by matching the set name on that line rather than by
anchoring.
Saying those profiles would stay open no matter what was wrong. A dead
forge is a verifiable fact, and a fact can be recorded: upstream_gone
carries why, and the profile stops being an open problem. The refs
describe the last revision anyone could reach, which is all any reader
can ask of them.
The declaration is guarded rather than trusted, because a forge can come
back and a profile that keeps asserting a death nobody rechecks is worse
than one that fails loudly. Declared and unreachable reports as a
recorded fact; declared and answering reports as the contradiction it
is, and the profile has to be read again.
yuzu and suyu carry GitHub's 451. citron carries the loss of
git.citron-emu.org and the squatter now sitting on the .com. Each names
what was probed and when, so the next reader retraces it rather than
repeating it.
The refs carried paths from a revision newer than source_commit, so the
profiles described two trees at once. rvvm is the plain case: the file
is src/rvvm.c at the pin and src/core/rvvm.c at the revision its refs
were written against, and citing the second against the first reads as a
file that vanished.
The diagnostic added for this named all three in one pass, and each cost
one line. rvvm 3 refs, boom3 4, applewin 1, all anchored.
Refs written at the new line numbers while the pin still named the old
revision left the profile describing two trees at once. The gpu cvar is
the clearest case: at the pin it sits in xenia_main.cc, at the revision
this profile now names it moved to emulator.cc beside the code that
reads it, and citing one against the other reads as a blank line.
The rest is a plugins.toml path join that stopped embedding a backslash,
and a cvar description that says DXIL validator where it said DXIL
shader compiler. 31 refs, all anchored.
The D3D12 backend used to load dxcompiler.dll and dxil.dll and refused
to start without the compiler. It now compiles shaders through Mesa and
keeps only the signer: D3D12 rejects an unsigned shader, so
PipelineCache::Initialize stops on IsSignerAvailable() and asks for a
recent dxil.dll. dxcompiler appears nowhere in the tree any more, and
the installer extracts that one entry from the same pinned archive.
The profile still declared dxcompiler.dll required, so it sent people
after a file the emulator stopped reading. The gpu cvar moved to
emulator.cc beside the code that reads it.