# Classic library — local integration

**2026-10-30:** 18 pinned selections; Aura Square excluded by the user. 17 local portal entries, one legacy build blocker. No public deployment.

- `games.json`: exact upstream revisions, origins, preparation and verification status, mobile limitations and licensing notes.
- `content.json`: authored English/Chinese game information; translations are written to all 34 portal language files. Other-language translations use the existing machine-translation workflow and are not represented as human-reviewed.
- `fetch.py`: restore locked source revisions under the ignored `.research-cache` directory.
- `build.py`: explicit build recipes, no deployment. js-solitaire uses esbuild 0.25.11 / Sass 1.93.2 instead of unsupported node-sass; Stillplay uses committed WASM cores, not a locally reproduced C build.
- `prepare.py`, `adapt.py`: isolated game distributions, English Wordfind sample, vendored/hash-checked jQuery, original Super Blocks tones, English Marble Trail strings, Wordle data-path fix/removal of upstream analytics.
- `sudoku-starter.py`: deterministic original 12-puzzle bank; every puzzle is solvable by repeated naked singles. This is a local bank, not a mirror of the upstream community. The optional server hint/explanation endpoint is not implemented.
- `integrate.py`: versioned WebP assets, catalog entries, translations, credits/notices/source archives. Disabled projects are excluded from the playable catalog.
- `start.py`: one local origin per game, localhost only; no public runtime domain changes. Start the Vite portal separately. Do not run a second copy while the current preview processes own these ports.
- `check.py`: integration invariants and cover/locale checks. Requires Pillow.

## Restore and preparation

Python 3, Node/npm, pnpm and ffmpeg are needed. Wordle has its own Python venv. Mah's Angular build uses pinned Node 26.13.0. Crosshare uses Node 22.23.4, pnpm 10.30.3 and Java 21 (set `CLASSIC_JAVA_HOME` if Java is installed elsewhere).

```sh
python3 tools/classic-library/fetch.py
python3 tools/classic-library/build.py
python3 tools/classic-library/prepare.py
.research-cache/classic-20261030/wordle-venv/bin/python tools/classic-library/integrate.py
python3 research/translate-content.py
.research-cache/classic-20261030/wordle-venv/bin/python tools/classic-library/check.py
python3 tools/classic-library/start.py
```

The recipes were exercised against the retained pinned caches. A complete empty-cache reinstall of all games has not been repeated. Fetch does not silently advance versions. Game distributions are ignored generated output, recreated from locked sources and retained adapters.

## Preview limitations

- **Crosshare:** local Firebase demo project only (`demo-crosshare`), with the upstream sample crossword. Its Next dev server and emulator fixture are a local preview, not a production service. Upstream Sentry reporting is disabled. Public deployment requires a separately provisioned backend, content policy and production build. No production credentials are used here.
- **solitaire.gg:** source fetched, metadata and cover prepared, but no playable catalog entry. sbt 0.13.16 / Scala.js 0.6.22 build depends on old repositories including retired Bintray. Checked launcher URLs returned 404. Needs a legacy toolchain recovery or migration, not an external page disguised as a game.
- **JigsawPuzzle (Raketten):** the V36 PC/tablet/phone interface was explicitly approved on 2026-10-30 and is now in the portal catalog at port 8944. The game has 34 local UI translations, exactly 12/20/48 pieces and browser save/restore. The approved design and original generated picture are retained. See `design/v36-classic-library/README.md` and the three device captures.
- **Sudoku Exchange:** local starter bank works; server solving hints and live community bank are unavailable and the description says so.
- **Tetris:** keyboard required. **Jigsaw Puzzle Studio:** phone layout remains limited. Other games are not claimed phone-adapted merely because a viewport loaded.
- Full-game completion, long-term save migration, physical-phone gestures and production caching remain unverified. 2048 board restoration and Super Blocks placement/score restoration were checked locally.

## Attribution and publication

Game detail shows creator/account only, with the existing removal-report link. Repository/source links and licence notices remain on the separate credits page. Source archives for the included AGPL projects and local patches are supplied there; adapter scripts are included separately. Super Blocks upstream game audio is entirely replaced with reproducible original tones. Jigsaw Studio sample photographs still use an external image service. Code licensing does not settle every image/font/data right; all publication conditions must be reviewed before release.

`portal/public/game-runtime.json` and online domains are deliberately unchanged. Vite combines the existing seven runtime entries with these enabled local entries during development. Deploying only the portal would **not** deploy these new games.

## Checks

Recorded startup/resource checks, interactions, three device sizes, RTL and iframe loading live in `research/classic-puzzles-20261030/`; cover/design records in `design/v36-classic-library/`. Run portal build, tag tests, validate script and Sites worker tests before releasing a new snapshot. No SMTP test mail was sent and no email backend settings were changed.
