Commit Graph
3699 Commits
Author SHA1 Message Date
Abdessamad Derraz cd92fe5b4d feat: let validation carry campaign evidence
The emulator schema allows evidence under validation, and a test holds the settled fields of the rule table to the schema's evidence keys.
2026-10-27 21:27:16 +01:00
Abdessamad Derraz e370970363 feat: write a finding again on new evidence
A finding line is written again when the records behind it change, so an open finding cites the oracle runs rather than a frame comparison. A contradicted validation shows the checks the runs prove, content and size, beside the profile's list.
2026-10-27 21:16:54 +01:00
Abdessamad Derraz 9327d3f97f docs: two campaign passes share one state 2026-10-27 21:02:20 +01:00
Abdessamad Derraz 5fd691a7db docs: say which lock a campaign pass keeps 2026-10-27 21:02:15 +01:00
Abdessamad Derraz fabd431adb feat: take the host probe lock per run
core_probe takes probe.lock itself around one execution, load check included, and releases it when the run ends. A campaign pass never holds it between runs, so two passes interleave. RETROBIOS_PROBE_LOCK names another file, RETROBIOS_PROBE_LOCK_HELD says the caller holds it. Tests use their own lock file.
2026-10-27 21:02:03 +01:00
Abdessamad Derraz b6ed5ba0a1 feat: group tested rows by the file they vary
Rows sit under the file under test. A title names the game and what sets the test apart from the others of its file (build, clock, region, files tried), never cut. Zero counts leave the summary. A legend explains the dots. The chips say depends on the file and same with every file. Ran on shows the short host.
2026-10-27 19:48:16 +01:00
Abdessamad Derraz e7d0c0183c feat: show each test as one row with its proof
The Tested block opens on one summary line, then a row per test: a short title, a result chip, a dot per variant and the date. Method, claim, computer, core build and the record wait in the row's details. Tests from before the boot oracle fold under one line, benchmarks get their own table. beetle_saturn shows under 120 words before anything is opened.
2026-10-27 19:40:16 +01:00
Abdessamad Derraz 70c3bbd853 feat: settle a file only when the run uses it
hle_fallback needs the file to change the run: Beetle PSX hashes every file of its folder, so opened is not used. PCSX-ReARMed hides the BIOS logo by default: its BIOS load line stands for the bios stage. A check runs again only when the oracle entries of its content and core change, and the rules run on every pass from the kept records.
2026-10-27 17:58:48 +01:00
Abdessamad Derraz a17406edae feat: let the campaign read another content list
--content-file names the test content list for run and references.
2026-10-27 15:53:25 +01:00
Abdessamad Derraz 873b645c0c chore: merge main 2026-10-27 15:52:46 +01:00
Abdessamad Derraz 3f93da6394 docs: show boot verdicts on the measurement pages
The Tested blocks and the explorer show each variant's verdict. A frame comparison from before the oracle shows no verdict. The SQLite variants table gains verdict columns. The method page says what each verdict means and how a file is proven.
2026-10-27 15:52:29 +01:00
Abdessamad Derraz b95bf466e8 feat: add the PlayStation reference frames
Bust-A-Move 2 (USA) on Beetle PSX, Beetle PSX HW, SwanStation, PCSX-ReARMed and PCSX1, each frame reviewed on its PNG. A boot needs a screen of the game: the BIOS screens alone are not one.
2026-10-27 15:52:29 +01:00
Abdessamad Derraz 38dd7401fd feat: keep the campaign timer as an opt-in
campaign.py install-timer writes the autorun units and enables nothing unless --enable is passed. The docs say a contributor who wants a schedule on their own machine installs the timer.
2026-10-27 15:46:20 +01:00
Abdessamad Derraz 44ab3febf4 feat: settle profile fields from boot verdicts
The campaign runs the full set, no BIOS, and per file the file alone with zeros, its first half and other regions' dumps under its name. required, hle_fallback and validation are read from the verdicts, never from frames that differ. Benchmarks run only with --bench. The timer command is gone: a maintainer starts each pass. references lists stable screens for the oracle.
2026-10-27 15:45:22 +01:00
Abdessamad Derraz e4c7ded489 feat: judge each probe run with a boot oracle
core_probe writes record version 4. Each run is boots, bios_error, crash, hang or unknown, from reference frames, core error patterns and screens, and the process status. A crash or a timeout is a verdict now, rebuilt from the events the worker streamed. --vary accepts @zeros:SIZE and @head:SIZE:PATH, and run takes --repeat.
2026-10-27 15:45:22 +01:00
Abdessamad Derraz c43872cdb6 feat: accept the pack and standalone probes
frontend.script names core_probe.py, pack_probe.py or standalone_probe.py.
2026-10-27 15:30:52 +01:00
Abdessamad Derraz aa6ee6db1c feat: add the boot verdict to the record schema
Record version 4 carries verdict and verdict_evidence on every repetition and variant, verdicts on a check result, and inputs.oracle. Version 3 records stay valid.
2026-10-27 15:25:30 +01:00
Abdessamad Derraz 50e84866cf docs: autorun schedules nothing by default 2026-10-27 15:25:06 +01:00
Abdessamad Derraz dcaf9d4764 docs: say who starts a test run 2026-10-27 15:22:19 +01:00
Abdessamad Derraz 9c8dbcd99a chore: merge the automatic test campaign 2026-10-27 14:05:18 +01:00
Abdessamad Derraz 9c63327da3 chore: record the MPEG card fixes on Lunar
Ten core_probe runs of the beetle-saturn fix-mpeg-auth-cr2 branch, one
per commit: the Lunar opening movie (2400 frames) and the Big Buck Bunny
Video CD booting through the card's player. Issue 85.
2026-10-27 13:52:01 +01:00
Abdessamad Derraz 332c217155 feat: pass GITHUB_TOKEN to declared API steps
A step marked github_token: true receives the token. autorun accepts the key only on check_freshness.py, refresh_stale.py and python -m scripts.scraper.* tracked in this repository, refuses it on any other step and in the campaign job. The nightly steps declare it.
2026-10-27 13:41:40 +01:00
Abdessamad Derraz ea460a6c87 docs: keep the measurements page in its budget 2026-10-27 13:39:40 +01:00
Abdessamad Derraz 57436839a8 fix: start each open finding with a capital
The statement of a finding follows a full stop on the Measurements page.
2026-10-27 13:07:33 +01:00
Abdessamad Derraz 40fca7fb1a chore: merge line mode on shared decisions 2026-10-27 13:02:52 +01:00
Abdessamad Derraz 5f3c836db9 chore: merge origin/main into the campaign work 2026-10-27 13:02:18 +01:00
Abdessamad Derraz 37d2c14e1d chore: keep campaign prose to the style rules
No clause semicolons in the campaign docstring and content list, and a help text for every option.
2026-10-27 13:02:15 +01:00
Abdessamad Derraz 8ab24a97d3 fix: test the new setup labels and skip 3.8 builds
The site tests read the SHARE drive label and the line-mode wording
from the source, and the pack-systems test needs generate_pack.py,
which needs Python 3.9.
2026-10-27 13:02:03 +01:00
Abdessamad Derraz a67dc339bc chore: merge main into the audit 17 answers
# Conflicts:
#	install.ps1
#	install.sh
#	install/launchers/index.json
2026-10-27 12:48:04 +01:00
Abdessamad Derraz e2bc06f216 fix: keep the copy hint whole under a long list
The browser hint goes below the list, which scrolls: three folders at
40x12 cut it. The test browses a folder of its own, not the host's /home.
2026-10-27 12:47:54 +01:00
Abdessamad Derraz c138270edc refactor: keep commit rules in a tracked module
The rules lived only in the local commit-msg hook, which CI and other clones do not have, so autorun could only check a subject's shape there. scripts/commit_rules.py now holds them, the hook calls it, and autorun checks every job subject with it when the job list loads.
2026-10-27 12:41:06 +01:00
Abdessamad Derraz b439371579 fix: take a backup folder on one-owner storage 2026-10-27 12:39:28 +01:00
Abdessamad Derraz 6fd831fc67 fix: keep pack system names out of the terminal
A pack's system titles, names and ids are read only without control
characters, and the systems list and the same-choice line go through
screen_text. The --yes row of the option table says it implies
--no-input.
2026-10-27 12:36:15 +01:00
Abdessamad Derraz 082b14afeb chore: apply tested fields to swanstation
Evidence for hle_fallback on scph5501.bin, written by campaign.py with the record id of measurements/swanstation.jsonl.
2026-10-27 12:25:16 +01:00
Abdessamad Derraz 8bc14c67a8 chore: apply tested fields to pcsx_rearmed
Evidence for hle_fallback on scph5501.bin, written by campaign.py with the record id of measurements/pcsx_rearmed.jsonl.
2026-10-27 12:25:15 +01:00
Abdessamad Derraz 945b8be035 chore: apply tested fields to pcsx1
Evidence for hle_fallback on scph5501.bin, written by campaign.py with the record ids of measurements/pcsx1.jsonl.
2026-10-27 12:25:13 +01:00
Abdessamad Derraz 281468c830 chore: apply tested fields to beetle_psx
Written by campaign.py from its rule table: six upper-case .BIN names the core opened for scph5501.bin, and evidence for hle_fallback, with the record ids of measurements/beetle_psx.jsonl.
2026-10-27 12:25:11 +01:00
Abdessamad Derraz 19e207217b chore: add playstation campaign measurements
First real pass of campaign.py: the libretro PlayStation profiles with an hle_fallback claim (beetle_psx through mednafen_psx and mednafen_psx_hw, pcsx_rearmed and swanstation nightlies, pcsx1 built from its pinned commit), each run on Bust-A-Move 2 - Arcade Edition (USA) with and without scph5501.bin, under bubblewrap. Every core reached the game without the BIOS.
2026-10-27 12:25:10 +01:00
Abdessamad Derraz f2425377ad chore: merge main into the audit 17 answers 2026-10-27 12:24:29 +01:00
Abdessamad Derraz 31c574aab0 fix: line mode and screen share one decision
Answers code_audit_17 and tui_audit_10: the folder found after o, SHARE
drive roots, one same-choice command, a counted confirm step in line
mode, counts from the narrowed list, read-only advice without sudo,
systems recorded in packs, Ctrl-Z stopping the whole job, and the
wording, layout and docs items.
2026-10-27 12:24:26 +01:00
Abdessamad Derraz f5e98bfda6 refactor: fetch builds into bare mirrors
Host git only fetches into bare mirrors no sandbox ever sees, https only, with no user or system config and overrides emptying hooks, fsmonitor, ssh and proxy commands and every filter driver the mirror defines. Each build is a git archive of the commit and of each submodule commit from its own mirror. Old working-tree clones are deleted. The core copied out must be a regular file inside the build folder, opened without following links.
2026-10-27 12:19:55 +01:00
Abdessamad Derraz fdcf120a7d refactor: build cores from an exported tree
make runs on a git archive export of the commit and its submodules, the clone and its .git never bound into the sandbox. Host-side git runs with no user or system config, no hooks, no fsmonitor and the file and ext transports refused.
2026-10-27 12:07:16 +01:00
Abdessamad Derraz 34963a732f docs: describe the allowlist sandbox 2026-10-27 11:53:35 +01:00
Abdessamad Derraz fd449fdae3 refactor: refuse unsandboxed campaign runs
Without a working bubblewrap the pass is refused and nothing third-party runs, probes require the sandbox and builds are refused, unless --allow-unsandboxed is given. A job report holding an alert raises an autorun alert.
2026-10-27 11:53:35 +01:00
Abdessamad Derraz e440073562 refactor: build the core sandbox as an allowlist
bwrap now binds only /usr, the /lib* and /bin links and the files of /etc the loader, fonts, TLS, the clock and user lookups read. Home, /tmp and /mnt are empty, the core, content and staged system directory read-only, the scratch folder the one writable path, every namespace unshared. --require-sandbox refuses to run without it. The worker imports nothing from the repository.
2026-10-27 11:53:35 +01:00
Abdessamad Derraz a76129f0df docs: describe the campaign and its sandbox 2026-10-27 11:48:25 +01:00
Abdessamad Derraz 960cc4a14e refactor: escape campaign values on the site
Values a run produced (core output, romfetch errors, profile names) are written as character references inside <code> or as plain text, so backticks, MDX braces and HTML stay text.
2026-10-27 11:48:22 +01:00
Abdessamad Derraz 95ca227bce refactor: run cores and builds in a sandbox
core_probe starts its worker with only the --env values, the worker clears its own environment before loading the core, and a working bubblewrap runs it with a read-only tree, no network and the user's credentials masked. The record names the isolation used. A timeout kills the whole process group. campaign.py starts core_probe, git, make and romfetch with the allowlist, make inside the same sandbox. --record refuses a folder that is not a checkout root.
2026-10-27 11:48:22 +01:00
Abdessamad Derraz e5cc1b5255 refactor: keep tokens out of autorun job steps
Every step, gate and recomputation runs with an allowlisted environment (PATH, HOME, LANG, LC_*, TZ, TMPDIR and the variables its env: key names). Names holding TOKEN, SECRET or PASS are dropped and refused in the registry. Only the push and the gh calls that read CI get GITHUB_TOKEN.
2026-10-27 11:48:22 +01:00
Abdessamad Derraz e0851dbee4 chore: record the CR2 patch on Lunar
With COMMAND_AUTH_DEVICE and COMMAND_GET_AUTH reading CR2, beetle_saturn 2ce77e2 authenticates the Video CD Card on Lunar - Silver Star Story MPEG: MPEG.AuthState is 02 with the HSS-0119 and the MK-80310 images, 00 with no file. The full machine state differs between two identical repetitions, the authentication state does not.
2026-10-27 11:44:04 +01:00