-
Notifications
You must be signed in to change notification settings - Fork 1
backlog + substrate(2026-04-28): B-0083 Atari ROM tooling + B-0084 CodeQL verify + 2 trajectory memories + absorb-contribute end-goal #680
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
AceHack
merged 11 commits into
main
from
backlog/atari-rom-canonical-naming-tosec-goodtools-2026-04-28
Apr 28, 2026
Merged
Changes from all commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
c32a504
backlog(B-0083): Atari 2600 ROM canonical-naming + safe-folder-split …
AceHack abc7763
backlog(B-0083): add Aaron's ownership-rationale verbatim (2026-04-28…
AceHack 910dc47
backlog(B-0083): pivot to dependency-first design (Aaron 2026-04-28T1…
AceHack 9d69fcc
memory(absorb-contribute): end-goal sharpening — build-our-own as tra…
AceHack 7f70d41
backlog(B-0084): emit empty SARIF on path-gate skip — fix Scorecard S…
AceHack c60f936
memory(ci-trajectory): emit-empty-security-result on conditional-skip…
AceHack d392b70
memory(self-healing-metrics): factory design principle — prefer rolli…
AceHack 83c9efc
fix(pr-680): address 11 review threads on B-0083 + B-0084 (Copilot+Co…
AceHack 14ad00c
fix(pr-680): actually fill in TOSEC tool names + cite uv-canonical-py…
AceHack 15c2799
fix(pr-680): MD032 auto-fix + restore broken '+' line-start in Schedu…
AceHack dea6b5e
fix(pr-680): update B-0084 snippet to per-language SARIF categories (…
AceHack File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
325 changes: 325 additions & 0 deletions
325
...083-atari-2600-rom-canonical-naming-tosec-goodtools-tooling-aaron-2026-04-28.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,325 @@ | ||||||
| --- | ||||||
| id: B-0083 | ||||||
| priority: P1 | ||||||
| status: open | ||||||
| title: Atari 2600 ROM canonical-naming + safe-vs-unsafe folder split + TOSEC/Good-Tools-style hash-lookup tooling | ||||||
| tier: factory-tooling | ||||||
| effort: M | ||||||
| ask: maintainer Aaron 2026-04-28 (autonomous-loop ROM-drop + canonical-naming request) | ||||||
| created: 2026-04-28 | ||||||
| last_updated: 2026-04-28 | ||||||
| tags: [aaron-2026-04-28, roms, atari-2600, tosec, good-tools, canonical-naming, datfile, license-safety, gitignore-already-protects, high-priority-after-0-0-0, scheduled-after-0-0-0] | ||||||
| --- | ||||||
|
|
||||||
| # B-0083 — Atari 2600 ROM canonical-naming + tooling | ||||||
|
|
||||||
| ## Source | ||||||
|
|
||||||
| Aaron 2026-04-28T18:55Z verbatim: | ||||||
|
|
||||||
| > *"I just put a bunch of messy roms int your Atari 2600 folder, can you | ||||||
| > organize them connonicaly for easy finding, feel free to spend some | ||||||
| > time doing research, these folders should be ignored and not checked | ||||||
| > in but you can reference any of them you want in readmes as games you | ||||||
| > can test out locally, we don't want to distribute atari roms, we can | ||||||
| > manually selelct check in any that won't get us in trouble for sharing | ||||||
| > on github for any that's follow those rules and licenses. we maybe need | ||||||
| > different non git ignored folder for those special ones that are safe. | ||||||
| > Please name them all connonically and probably does not need to be | ||||||
| > zipped, there are tools that can help you likely with naming them, like | ||||||
| > to tosec and good tools, i don't know if they run on mac but you can | ||||||
| > look at their source to figure out how it workds it's proabaly some | ||||||
| > database file you can check agants sha or md5s or sometime based on the | ||||||
| > latest list. Lets make sure we can replicate that functionalty here on | ||||||
| > list updates if that's how it works, we can backlog this but hight | ||||||
| > priortiy right after the 0/0/0 starting point"* | ||||||
|
|
||||||
| ## Schedule | ||||||
|
|
||||||
| **Scheduled trigger**: 0/0/0 AceHack-LFG hard-reset complete (the | ||||||
| hard-reset chain is the gating dependency; see PR #677 5-disciplines | ||||||
| and pull-queue work). | ||||||
|
|
||||||
| ## Ownership rationale (Aaron verbatim 2026-04-28T18:58Z) | ||||||
|
|
||||||
| > *"basically some roms i own becasue i bought the same i can share | ||||||
| > with you locally but we can't check into git, only certain ones are | ||||||
| > license safe or it's expired or whatever. those can get checked in, | ||||||
| > the more realish games will only be on local maintainers computers | ||||||
| > and each will likely have their own set."* | ||||||
|
|
||||||
| This articulates the established personal-use vs distribution legal | ||||||
| boundary: | ||||||
|
|
||||||
| - **Aaron owns the ROMs (bought them)** → personal-use copies are | ||||||
| legal between him and the local agent on his machine. | ||||||
| - **Distribution via git** would create a redistribution path → only | ||||||
| license-cleared ROMs (public domain, homebrew with permissive | ||||||
| license, copyright-expired, explicit-license-commercial) can ship | ||||||
| in the tracked `roms-safe/` folder. | ||||||
| - **Per-maintainer local ROM sets**: the gitignored `roms/` folder | ||||||
| is local to each maintainer's machine. Each maintainer will have | ||||||
| their own set based on what they personally own. | ||||||
| - **The safe folder is the SHARED canonical surface**: only ROMs that | ||||||
| every maintainer can legally use (regardless of what they personally | ||||||
| own) live in `roms-safe/`. | ||||||
|
|
||||||
| This split is exactly what the existing `roms/.gitignore` + | ||||||
| `roms/atari/2600/README.md` license-safety-gate enforces. B-0083 | ||||||
| operationalizes the split by adding the safe-folder + the tooling. | ||||||
|
|
||||||
| ## Current state (verified 2026-04-28T18:53Z) | ||||||
|
|
||||||
| - **3461 files** in `roms/atari/2600/` — mix of `.bin` and `.zip`, | ||||||
| some Good-Tools-style canonical names (`Title (Year) (Publisher) | ||||||
| [!]`), some uncanonical (`Jammed.bin`, `seantsc.bin`). | ||||||
| - **`roms/.gitignore` already fully protects** with depth-limited | ||||||
| pattern (`*` + `!*/` + `!/README.md` + `!/*/README.md` + | ||||||
| `!/*/*/README.md`). The 3461 ROMs are NOT at risk of accidental | ||||||
| commit. README.md is the only tracked file. **No emergency action | ||||||
| required.** | ||||||
| - **`roms/atari/2600/README.md` already documents the license-safety | ||||||
| gate**: PD / homebrew-with-permissive-license / official-test-ROMs / | ||||||
| commercially-released-as-free / explicit-license-commercial = SAFE; | ||||||
| uncertain provenance defaults to FORBIDDEN. | ||||||
|
|
||||||
| ## Why high-priority + scheduled-after-0/0/0 | ||||||
|
|
||||||
| Aaron's explicit verbatim: *"we can backlog this but hight priortiy | ||||||
| right after the 0/0/0 starting point"*. Decoded: | ||||||
|
|
||||||
| - Priority: P1 (high) | ||||||
| - Trigger: AceHack-main and LFG-main reach 0/0/0 (per the hard-reset | ||||||
| audit already in flight; see PR #677's 5-disciplines memory + the | ||||||
| pull-queue work this session). | ||||||
| - NOT before 0/0/0 — the substrate cleanup is the blocking | ||||||
| dependency. | ||||||
|
|
||||||
| ## Background research (TOSEC + Good Tools) | ||||||
|
|
||||||
| ### TOSEC ("The Old School Emulation Center") | ||||||
|
|
||||||
| - Datfile format: XML, one `<datafile>` per platform. | ||||||
| - Each `<game>` entry has `<rom>` children with `name`, `size`, | ||||||
| `crc`, `md5`, `sha1` attributes. | ||||||
| - Canonical naming convention (TOSEC Naming Convention 2015 / TNC15): | ||||||
| `Title version (Demo) (Date)(Publisher)(System)(Video)(Country)(Language)(Copyright)(Devstatus)[Cracked][Trainer][Hacked][Modified][Pirated][Bad][Verified][More Info]` | ||||||
| - Datfiles available from: <https://www.tosecdev.org/> + GitHub | ||||||
| mirrors (e.g. `TheTOSECteam` org). | ||||||
| - Atari 2600 platform-slug: `Atari 2600 (TOSEC)`. | ||||||
|
|
||||||
| ### Good Tools (a.k.a. GoodSets) | ||||||
|
|
||||||
| - Created by Cowering. Discontinued ~2011 but datfiles remain | ||||||
| authoritative for older ROM-set hash matching. | ||||||
| - Atari 2600 set: `GoodA26` (typically `GoodA26 v3.27` or similar). | ||||||
| - Naming convention: `Title (Year) (Publisher) [code]` where code is | ||||||
| `[!]` (verified good), `[a1]` (alternate), `[b1]` (bad dump), | ||||||
| `[h1]` (hack), `[o1]` (overdump), `[t1]` (trainer), `[T+ENG]` | ||||||
| (English translation), etc. | ||||||
| - Source for GoodA26: search GitHub for `GoodTools-A26` mirrors; | ||||||
| the original distribution was `GoodA26.zip` containing the EXE | ||||||
| + datfile. | ||||||
|
|
||||||
| ### Algorithm (replicated in factory tooling) | ||||||
|
|
||||||
| 1. **For each file in `roms/atari/2600/`**: | ||||||
| - Extract: if `.zip`, get the inner ROM bytes. | ||||||
| - Compute SHA1 + MD5 + CRC32 of the ROM bytes. | ||||||
| 2. **Lookup in datfile**: | ||||||
| - Match by SHA1 first (most discriminating). | ||||||
| - Fall back to MD5 → CRC32 if SHA1 absent. | ||||||
| - If no match: file is unrecognized; flag for manual review. | ||||||
| 3. **Rename to canonical form**: | ||||||
| - Use TOSEC TNC15 OR Good-Tools convention (pick one as | ||||||
| factory standard; recommend TOSEC for ongoing maintenance | ||||||
| since GoodTools is discontinued). | ||||||
| 4. **Classify license-safety**: | ||||||
|
AceHack marked this conversation as resolved.
|
||||||
| - Match against the README's permitted classes (PD, homebrew, | ||||||
| official-test, commercially-released-as-free, explicit-license). | ||||||
| - The TOSEC `<game>` element's `<description>` and | ||||||
| `<comment>` fields sometimes carry license metadata; if not, | ||||||
| fall back to a curated allowlist (e.g. | ||||||
| `tools/roms/manifests/atari-2600-homebrew-allowlist` (no-extension manifest per the `tools/setup/manifests/uv-tools` convention)). | ||||||
|
||||||
| `tools/roms/manifests/atari-2600-homebrew-allowlist` (no-extension manifest per the `tools/setup/manifests/uv-tools` convention)). | |
| `tools/roms/manifests/atari-2600-homebrew-allowlist` (no-extension manifest per the `tools/setup/manifests/uv-tools` convention). |
AceHack marked this conversation as resolved.
AceHack marked this conversation as resolved.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.