Skip to content

Record the retro boundary and the three core selections - #17

Merged
randroid88 merged 2 commits into
mainfrom
agent/record-retro-decisions
Aug 4, 2026
Merged

Record the retro boundary and the three core selections#17
randroid88 merged 2 commits into
mainfrom
agent/record-retro-decisions

Conversation

@randroid88

Copy link
Copy Markdown
Contributor

Three commitments were being re-derived in conversation instead of read from the register. D-185 through D-189 fix that.

D-185 — never vendor emulator code

No third-party emulator, frontend, or core source or binary enters this repository. Upstream is recorded only as pinned provenance — repository, observed branch, revision, git tree object, archive URL, archive SHA-256, byte length, licence text location, notice obligations — and build recipes fetch and verify those artifacts before assembling a signed local package.

This records the practice already in force: the retro-2048 manifest already states no RetroArch or core binary is bundled, and vcg-development-package already assembles from operator-supplied archives checked against pinned digests.

D-186 / D-188 / D-189 — the three cores, with licences read at source

System Core Licence Commercial use
NES libretro FCEUmm GPL-2.0 (+ LGPL-2.1 NTSC filter) permitted
SNES Snes9x libretro port custom: non-commercial, personal use only; port grants no commercial rights ever forbidden
Mega Drive / MS / GG Genesis Plus GX custom: "may not be sold, nor used in a commercial product or activity" forbidden

Only the NES core is free of a field-of-use restriction. All three are inside their grants for a non-commercial open-source project that never redistributes their code.

Two licence readings needed human eyes, because grep gets both wrong. "noncommercial" in FCEUmm's COPYING is the GPL preamble discussing equivalent-source distribution — not a restriction. "commercial or non-commercial" in the Genesis Plus GX licence file belongs to the permissive LZMA SDK public-domain notice; the real restriction is a separate clause. I initially flagged Genesis Plus GX from the pattern match and had to read the file to get it right.

Provenance — verified, not asserted

Using the method the 2048 candidate declares (git-blob-oid-and-tar-mode-comparison, three independent downloads):

Core Revision Blobs Downloads
snes9x 21a66f39… 181/181 identical
fceumm b5e35665… 687/687 identical
genesis-plus-gx ca93fec8… 721/721 identical

All matched the pinned git tree with no missing, extra, or mode-differing files.

D-187 — test platform policy

Records the CI policy already implemented: real-resource tests on Linux only, every deterministic check on both platforms.

Scope

Re-registers 91 plan source bindings (DECISIONS.md is bound by many plans). No physical result, threshold, gate, selection, authorization, or qualification field changed.

No core is qualified by this. Nothing has been built, run, or measured on a Raspberry Pi. These are selections with recorded licences and verified provenance — the inputs to a build, not evidence that one works.

🤖 Generated with Claude Code

randroid88 and others added 2 commits August 3, 2026 19:33
…ions

Three commitments were being re-derived in conversation instead of read from the
register. D-185 through D-187 fix them.

D-185 makes the no-vendoring boundary explicit: no third-party emulator,
frontend, or core source or binary enters this repository. Upstream components
are recorded only as pinned provenance -- repository, observed branch, commit
revision, git tree object, archive URL, archive SHA-256, byte length, licence
text location, and notice obligations -- and build recipes fetch and verify
those artifacts before assembling a signed local package. This records the
practice already in force: the retro-2048 manifest already states that no
RetroArch or core binary is bundled, and vcg-development-package already
assembles from operator-supplied archives checked against pinned digests.

D-186 selects the Snes9x libretro port for the personal-use retro lane and
records its licence exactly rather than approximately: non-commercial purposes
only, freeware for personal use only, and the libretro port stating that under
no circumstances will commercial rights be given. Snes9x-derived packages may
therefore never declare rights.distribution as redistributable and must carry a
LicenseRef stating the non-commercial condition, the component attribution
mosaic (JMA GPL/LGPL, snes_ntsc LGPL, xBRZ GPLv3), and the Nintendo trademark
notice. The project owner states this is a non-commercial open-source project,
which is inside the personal-use grant, and under D-185 no Snes9x code is
redistributed here at all.

Provenance for the pinned revision was verified independently rather than
asserted: three separate downloads of the archive for
21a66f3975388e15d5495d52422415f52c040f86 were byte-identical at SHA-256
5146b4fbdb7062a3d93d5ced27c72d7c811f7278228353786619c0d591b73634, and all 181
archive blobs matched the pinned git tree with no missing, extra, or
mode-differing files.

D-187 records the continuous-integration platform policy already implemented:
real-resource tests on Linux only, every deterministic check on both platforms.

Re-registers 91 plan source bindings, since DECISIONS.md is bound by many
pre-registration plans. No physical result, threshold, gate, selection,
authorization, or qualification field changed.

Nothing here qualifies a core, a build, or a Raspberry Pi. D-186 selects a
candidate and records its licence; performance, accuracy, and save behaviour on
the target remain unmeasured.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
D-188 selects the libretro FCEUmm port for NES and D-189 selects Genesis Plus GX
for Mega Drive, Master System, and Game Gear. Both record exact licence terms
and independently verified provenance rather than asserted ones.

FCEUmm is GPL version 2, with its bundled NTSC filter under LGPL 2.1. It is the
only retro core selected so far under a recognised open-source licence, so the
NES lane stays usable if project scope ever changes.

Genesis Plus GX permits redistribution but states that redistributions may not
be sold nor used in a commercial product or activity, requires complete
corresponding source for modified redistributions, and carries a component
mosaic including Nuked OPN2, an LGPL NTSC filter, libchdr, libFLAC under Xiph
BSD terms, minimp3, Tremor, and public-domain LZMA SDK code.

Two licence readings were checked by hand rather than by pattern match, because
grep gets both wrong. The word noncommercial in the FCEUmm COPYING file is the
GPL preamble discussing equivalent-source distribution, not a restriction. The
phrase commercial or non-commercial in the Genesis Plus GX licence file belongs
to the permissive LZMA SDK public-domain notice, not to the core terms; the
actual restriction is a separate clause.

Provenance verified by the method the 2048 candidate declares, three independent
downloads and a per-blob comparison against the pinned git tree:

  fceumm           b5e3566515c27dc66c9c20572171673126532e06  687/687 blobs
  genesis-plus-gx  ca93fec870378f3bff65931bcd828d5e756cce75  721/721 blobs

Both matched with no missing, extra, or mode-differing files.

Re-registers 91 plan source bindings, since DECISIONS.md is bound by many
pre-registration plans. No physical result, threshold, gate, selection,
authorization, or qualification field changed.

No core is qualified by this. Nothing has been built, run, or measured on a
Raspberry Pi.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Updated SHA-256 source-binding digests across 35 benchmark plans. Updated docs/DECISIONS.md with decisions D-185 through D-189 and register metadata. No benchmark behavior or public entities changed.

Changes

Source-binding refresh

Layer / File(s) Summary
Decision register and propagated decision digests
docs/DECISIONS.md, benchmarks/{camera-cabling,camera-geometry,...}/*-plan-v1.json
Updated the decision register date and count. Added decisions D-185 through D-189. Refreshed bindings to docs/DECISIONS.md.
Camera benchmark binding refresh
benchmarks/{camera-angle,camera-cabling,camera-geometry,camera-service,camera-state,csi-fallback,depth-comparison,depth-interference,enclosure,lens-calibration,orbbec,realsense,visual-robustness}/*
Updated SHA-256 digests for camera geometry, cabling, state, calibration, enclosure, depth, and camera-target source plans.
Platform and system benchmark binding refresh
benchmarks/{controller-only-usability,cross-tier-reference,failure-critical-substitutes,first-party-motion-adaptation,...}/*
Updated SHA-256 digests for platform, workload, package, shell, qualification, product, economics, and system-boundary plans.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Poem

A rabbit checks each hash in line,
Fresh source links now neatly shine.
Five decisions join the register bright,
Linux tests set their boundary right.
Hop, hop—no behavior takes flight!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the retro boundary and core selections, which are central changes in the pull request.
Description check ✅ Passed The description directly explains decisions D-185 through D-189, provenance verification, licensing, CI policy, and source-binding updates.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agent/record-retro-decisions
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch agent/record-retro-decisions

Comment @coderabbitai help to get the list of available commands.

@randroid88
randroid88 merged commit 9581340 into main Aug 4, 2026
7 of 8 checks passed
@randroid88
randroid88 deleted the agent/record-retro-decisions branch August 4, 2026 02:42

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/DECISIONS.md`:
- Around line 196-199: Update the PR objective’s “no selections changed”
statement to explicitly limit that claim to benchmark qualification fields,
since D-186, D-188, and D-189 select cores. Preserve the documented core
selections and ensure the objective no longer conflicts with DECISIONS.md.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 8f36d843-4764-400f-93fd-5a7ad1fcd7cc

📥 Commits

Reviewing files that changed from the base of the PR and between 188bde3 and 26407af.

📒 Files selected for processing (37)
  • benchmarks/camera-angle/fixed-angle-escalation-evidence-plan-v1.json
  • benchmarks/camera-cabling/cross-tier-camera-cable-plan-v1.json
  • benchmarks/camera-geometry/cross-tier-camera-placement-geometry-plan-v1.json
  • benchmarks/camera-service/camera-replacement-recalibration-plan-v1.json
  • benchmarks/camera-state/physical-shutter-camera-state-experience-plan-v1.json
  • benchmarks/controller-only-usability/cross-tier-controller-only-usability-plan-v1.json
  • benchmarks/cross-tier-reference/pi5-x86-product-contract-plan-v1.json
  • benchmarks/csi-fallback/pi5-camera-module-3-wide-csi-fallback-plan-v1.json
  • benchmarks/depth-comparison/oak-d-pro-w-rgb-depth-comparison-plan-v1.json
  • benchmarks/depth-interference/cross-device-ir-interference-safety-plan-v1.json
  • benchmarks/enclosure/pi5-integrated-enclosure-reference-build-plan-v1.json
  • benchmarks/failure-critical-substitutes/cross-tier-failure-critical-substitute-plan-v1.json
  • benchmarks/first-party-motion-adaptation/first-party-motion-adaptation-ranking-plan-v1.json
  • benchmarks/four-player/four-player-qualification-plan-v1.json
  • benchmarks/hailo-recovery/hailo-package-model-recovery-plan-v1.json
  • benchmarks/jetson/jetson-orin-nano-super-tensorrt-plan-v1.json
  • benchmarks/kiosk-compositor/cross-tier-kiosk-compositor-plan-v1.json
  • benchmarks/lens-calibration/cross-tier-lens-distortion-rectification-plan-v1.json
  • benchmarks/libretro/supervised-libretro-frontend-qualification-plan-v1.json
  • benchmarks/orbbec/gemini-335l-linux-target-plan-v1.json
  • benchmarks/realsense/d455-linux-target-plan-v1.json
  • benchmarks/reserved-home/reserved-home-action-plan-v1.json
  • benchmarks/shutdown-reserve/pi5-shutdown-reserve-comparison-plan-v1.json
  • benchmarks/signed-local-package/runtime-neutral-signed-local-package-plan-v1.json
  • benchmarks/steam-input/steamos-steam-input-action-plan-v1.json
  • benchmarks/steam-machine-accountless/steam-machine-accountless-core-plan-v1.json
  • benchmarks/steam-machine-dual-boot/steam-machine-windows-dual-boot-status-v1.json
  • benchmarks/steam-machine-os-comparison/steam-machine-steamos-windows-comparison-plan-v1.json
  • benchmarks/steamos-camera/steamos-uvc-permission-plan-v1.json
  • benchmarks/steamos-content/steamos-update-safe-content-plan-v1.json
  • benchmarks/steamos-shell/steamos-outer-shell-lifecycle-plan-v1.json
  • benchmarks/steamos-workload/steamos-pose-game-workload-plan-v1.json
  • benchmarks/system-economics/complete-system-economics-plan-v1.json
  • benchmarks/tv-visual-tokens/physical-tv-visual-token-plan-v1.json
  • benchmarks/two-player/two-player-qualification-plan-v1.json
  • benchmarks/visual-robustness/cross-tier-visual-robustness-plan-v1.json
  • docs/DECISIONS.md
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
  • GitHub Check: node / ubuntu-latest
  • GitHub Check: native / windows-latest
  • GitHub Check: node / windows-latest
  • GitHub Check: e2e / ubuntu-latest
🔇 Additional comments (23)
docs/DECISIONS.md (3)

3-7: 🎯 Functional Correctness

Verify the register metadata from the complete file.

Recompute the decision-ID sequence and confirm that 189 decisions through D-189 and Last updated: 2026-08-03 match the complete register.


195-199: 🔒 Security & Privacy

Link the required D-185 provenance fields.

D-185 requires the repository, observed branch, commit, git-tree object, archive URL, archive SHA-256, archive byte length, exact licence-text location, and notice obligations. D-186 through D-189 show only part of this information in these rows. If complete records exist elsewhere, link each decision to its authoritative provenance record.


197-197: 🩺 Stability & Availability

Verify that CI enforces D-187.

Confirm that real-resource jobs run only on Linux, deterministic jobs remain required on both platforms, and no Windows real-resource check remains required.

benchmarks/camera-geometry/cross-tier-camera-placement-geometry-plan-v1.json (1)

17-17: 🗄️ Data Integrity & Integration

No digest changes are required.

All 551 source bindings match their repository files, with no conflicts or missing sources.

			> Likely an incorrect or invalid review comment.
benchmarks/depth-comparison/oak-d-pro-w-rgb-depth-comparison-plan-v1.json (2)

20-20: LGTM!


40-45: LGTM!

benchmarks/four-player/four-player-qualification-plan-v1.json (2)

19-19: LGTM!


44-44: LGTM!

benchmarks/enclosure/pi5-integrated-enclosure-reference-build-plan-v1.json (3)

43-48: LGTM!


63-68: LGTM!


78-88: LGTM!

benchmarks/failure-critical-substitutes/cross-tier-failure-critical-substitute-plan-v1.json (2)

35-40: LGTM!


70-70: LGTM!

benchmarks/orbbec/gemini-335l-linux-target-plan-v1.json (1)

41-41: LGTM!

benchmarks/realsense/d455-linux-target-plan-v1.json (1)

41-41: LGTM!

benchmarks/steamos-shell/steamos-outer-shell-lifecycle-plan-v1.json (2)

58-58: LGTM!


68-68: LGTM!

benchmarks/steamos-workload/steamos-pose-game-workload-plan-v1.json (2)

25-25: LGTM!


35-35: LGTM!

benchmarks/system-economics/complete-system-economics-plan-v1.json (2)

40-40: LGTM!


65-65: LGTM!

benchmarks/steam-machine-os-comparison/steam-machine-steamos-windows-comparison-plan-v1.json (1)

18-18: 🗄️ Data Integrity & Integration

No changes needed.

All listed source digests and downstream bindings match the repository bytes. The object-valued sourceDigestContract is required by the SteamOS shell validator.

benchmarks/signed-local-package/runtime-neutral-signed-local-package-plan-v1.json (1)

15-15: 🗄️ Data Integrity & Integration

No action required. All source bindings match their normalized UTF-8 SHA-256 digests.

Comment thread docs/DECISIONS.md
Comment on lines +196 to +199
| D-186 | Working | Select the Snes9x libretro port as the SNES core for the personal-use retro lane, recording its exact licence terms rather than approximating them: permission to use, copy, modify, and distribute in binary and source form is granted for non-commercial purposes only; Snes9x is freeware for personal use only and commercial users must seek permission first; and the libretro port states that under no circumstances will commercial rights be given. Snes9x-derived packages may therefore never declare `rights.distribution` as `redistributable`, and must carry a `LicenseRef` that states the non-commercial condition, the component attribution mosaic (JMA under GPL/LGPL, snes_ntsc under LGPL, xBRZ under GPLv3), and the Nintendo trademark notice. | The project owner states this is a non-commercial open-source project, which is inside the personal-use grant, and under D-185 no Snes9x code is redistributed by this repository at all: the operator fetches upstream and builds for their own device. Snes9x is also the SNES core most likely to reach full speed on a Raspberry Pi 5, where accuracy-focused alternatives may not. The licence is nonetheless not an OSI-style open-source licence because of its field-of-use restriction, so recording it exactly prevents a later assumption that these packages are freely redistributable. Provenance for revision `21a66f3975388e15d5495d52422415f52c040f86` was independently verified: three separate downloads of the pinned archive were byte-identical at SHA-256 `5146b4fbdb7062a3d93d5ced27c72d7c811f7278228353786619c0d591b73634`, and all 181 archive blobs matched the pinned git tree with no missing, extra, or mode-differing files. | The project scope changes toward commercial distribution, in which case Snes9x becomes ineligible and a GPL-licensed core must be screened instead; or measured Raspberry Pi 5 performance, accuracy, or save behaviour fails and another core is qualified. Retain exact licence recording and the non-redistribution boundary either way. |
| D-187 | Working | Run continuous-integration tests that require real operating-system resources — child-process supervision, local sockets, and real browsers — on Linux only. Windows continues to run every deterministic check: format, lint, build, typecheck, and the computational test suite. Required status checks cover both platforms for the deterministic jobs and Linux only for the real-resource jobs. | Linux is the product target for both the Raspberry Pi 5 and the ordinary x86-64 reference. Five continuous-integration failures were all on Windows runners, all in real-resource tests, a different test each time, and every one passed on rerun, while none ever caught a defect Linux did not; the one real layout defect in that suite reproduced only under Linux font metrics and was found by the Linux job. A required check that fails spuriously trains reviewers to ignore it, which is worse protection than none. Windows retains real value for deterministic checks: `clippy::large_enum_variant` on `InstalledRuntime` fires only where `PathBuf` is 32 bytes and is invisible on Linux. | Windows becomes a supported appliance target rather than a development host, or a Windows-only defect escapes because a real-resource test no longer runs there; add the job back with an explicit flake budget rather than silently widening timeouts. |
| D-188 | Working | Select the libretro FCEUmm port as the NES core, recording its licence as GNU GPL version 2 with the bundled NTSC filter library under LGPL version 2.1. FCEUmm is the only retro core selected so far under a recognised open-source licence, so NES packages may declare `rights.distribution` as `redistributable` provided the GPL source-offer obligation is honoured and the LGPL filter attribution is retained. | The project owner requires NES support. FCEUmm is the widely used libretro NES core and, unlike the selected SNES and Mega Drive cores, carries no field-of-use restriction, which keeps the NES lane usable if project scope ever changes. Provenance for revision `b5e3566515c27dc66c9c20572171673126532e06` was verified rather than asserted: three separate downloads of the pinned archive were byte-identical at SHA-256 `1ef34c9ed324f91856d6eca7d923e4f0d33ce85acb4b6a9b62d4a56c46e5ddc1`, and all 687 archive blobs matched the pinned git tree with no missing, extra, or mode-differing files. Licence text was read at source; the word "noncommercial" appearing in the GPL preamble is the licence's own wording about equivalent-source distribution and is not a field-of-use restriction. | Measured Raspberry Pi 5 performance, accuracy, mapper coverage, or save behaviour fails, or the GPL source-offer obligation cannot be met by the recipe boundary in D-185; screen Nestopia or Mesen instead and retain exact licence recording. |
| D-189 | Working | Select the libretro Genesis Plus GX port as the Mega Drive, Master System, and Game Gear core, recording its licence exactly: redistribution and use are permitted, but "Redistributions may not be sold, nor may they be used in a commercial product or activity", modified redistributions must include complete corresponding source, and the copyright notice and conditions must be reproduced. Genesis Plus GX packages may therefore never declare `rights.distribution` as `redistributable` without the non-commercial condition stated, and must carry the component attribution mosaic, which includes Nuked OPN2 under LGPL, an LGPL NTSC filter, libchdr, libFLAC under the Xiph BSD terms, minimp3, Tremor, and public-domain LZMA SDK code. | The project owner requires Sega support and states the project is non-commercial open source, which is inside this grant, and under D-185 no Genesis Plus GX code is redistributed by this repository. Provenance for revision `ca93fec870378f3bff65931bcd828d5e756cce75` was verified: three separate downloads were byte-identical at SHA-256 `9b00f9b29abb4e9fbe7be01b54e45bb8910935b62810c1d2f4a2b2138237650b`, and all 721 archive blobs matched the pinned git tree. The licence was read at source rather than pattern-matched: a "commercial or non-commercial" phrase in the same file belongs to the permissive LZMA SDK public-domain notice and must not be mistaken for the core's own terms. | Project scope changes toward commercial distribution, making this core ineligible alongside Snes9x; or measured target performance, accuracy, or CD support fails and PicoDrive or BlastEm is screened instead. Retain exact licence recording either way. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Scope the “no selections changed” statement in the PR objective.

D-186, D-188, and D-189 add core selections. If the objective refers only to benchmark qualification fields, state that scope explicitly. Otherwise, the objective conflicts with this document.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/DECISIONS.md` around lines 196 - 199, Update the PR objective’s “no
selections changed” statement to explicitly limit that claim to benchmark
qualification fields, since D-186, D-188, and D-189 select cores. Preserve the
documented core selections and ensure the objective no longer conflicts with
DECISIONS.md.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant