Add Linux core validation workflow

This commit is contained in:
gamer147
2026-08-03 12:28:46 -04:00
parent 378d892b01
commit ea8b92c287
5 changed files with 84 additions and 6 deletions

View File

@@ -32,6 +32,7 @@ S:\Game Hacking\Eushully\Himegari\ ← workspace root (three siblings)
├── global.json pins the validated .NET 8 SDK feature band
├── .editorconfig / .gitattributes UTF-8, indentation, text/EOL, and binary-file policy;
│ tracked source and generated references use canonical LF
├── .github/workflows/core-validation.yml read-only Ubuntu-hosted asset-independent core gate
├── run-godot.ps1 / run-godot.cmd tracked development launcher + Windows wrapper;
│ resolves Godot/game-root from parameters, environment,
│ PATH, and the conventional sibling install

View File

@@ -55,7 +55,7 @@ claiming portable exports.
| Game-install, runtime metadata, and repository discovery | `GameRootSelection` accepts `--game-root`, then probes the executable directory and current working directory for `SYS4INI.BIN`; on Unix the frontend prefers inherited shell `PWD` because Godot may change the process directory during project startup. Godot injects the selected root into its catalog and loose-first ALF store. `Himegari.csproj` embeds generated `build/opcodes.json`, and the frontend loads that assembly resource rather than `Paths.OpcodesJson`. `Paths.cs` remains a development/test locator; its page-map use is compiled only for `TOOLS` builds | Installed game data and packaged VM metadata no longer depend on the workspace sibling layout. The Linux export passed an explicit absolute game root outside the repository and read the installed archives. Exported automatic page maps use `user://diagnostics/page-maps`; editor/development runs preserve `build/page-map-<SCENE>.jsonl` | Let the future profile launcher pass `--game-root`, and run executable-directory/CWD plus case/permission smoke gates on Linux and macOS |
| Archive parity oracle | One integration test launches `bin/BinExtractALF.exe` | Windows-only test helper, not a shipped runtime dependency | Skip/replace on non-Windows CI; runtime ALF/AAI readers do not depend on it |
| Native RE tools | Frida/Ghidra helpers target the original `AGE.EXE`; supporting utilities include Windows executables and Windows command conventions | Development/research only | Keep separate from export requirements; document platform prerequisites per tool |
| Python workflow and core CI | The operating guide uses Windows `py -3.11`; `validate.py` launches child tools through `sys.executable` and has POSIX process-group cleanup plus `ps`-based leak auditing | The asset-independent core gate is platform-neutral. Tracked generated references and the engine solution/project files now have canonical LF blobs, so Linux regeneration and a fresh checkout do not acquire EOL-only drift | Run the first hosted gate on Linux with an explicitly provisioned Python 3.11 interpreter and `python -X utf8 tools/validate.py --level core`; keep private corpus and Godot runtime phases outside public CI |
| Python workflow and core CI | The operating guide uses Windows `py -3.11`; `validate.py` launches child tools through `sys.executable` and has POSIX process-group cleanup plus `ps`-based leak auditing | The asset-independent core gate is platform-neutral. Tracked generated references and the engine solution/project files have canonical LF blobs. The read-only `ubuntu-24.04` workflow provisions Python 3.11 plus `global.json`'s SDK and invokes the same core driver; private corpus and Godot runtime phases stay outside hosted CI | Confirm the first hosted result after a remote is selected and the workflow is pushed; retain Windows-native GDI parity and private installed-game/runtime checks as separate trusted gates |
No authored runtime code currently calls native DirectSound, Direct3D, Vulkan, Metal, or OpenGL. Mentions of
those APIs in `docs/engine-re.md` describe the original AGE implementation. Both the software-oracle display

View File

@@ -920,6 +920,16 @@ do not mix mechanical moves with semantic changes.
validation remains green, and a Linux Git comparison reports no unstaged EOL drift. The first hosted CI job
can therefore target Linux rather than carrying forward a Windows-runner dependency.
**Linux core workflow (2026-08-03):** item 2 is implemented as `.github/workflows/core-validation.yml`. One
read-only `ubuntu-24.04` job provisions Python 3.11 and the SDK selected by `global.json`, reports both resolved
versions, and invokes the existing asset-independent core driver. Pull requests, `main` pushes, and manual
dispatch share the job; branch-local concurrency cancels superseded runs, and seven-day validation-log upload
occurs only after failure. The workflow has no cache, secrets, private corpus, Godot runtime, packaging, or
deployment access. All four official actions are pinned to full immutable release SHAs. `actionlint` accepts
the workflow and the underlying Python 3.11 core gate remains green locally. Because no remote is configured,
the tracked workflow is dormant and its first hosted Linux execution remains a publication-time confirmation,
not a condition hidden by this commit.
**Not cleanup targets:** generated `build/` output, the two intentional solution files, historical
`docs/superpowers/` plans/specifications, and fidelity-specific complexity that is directly covered by the
native ABI. Reorganization is successful when ownership and reproduction become clearer, not when the raw
@@ -1266,10 +1276,10 @@ layer's rendering diverges from ADV; save layout.
---
## 8. Immediate next step
Continue step 5 of the **codebase consolidation** maintenance slice with an asset-independent CI workflow that
provisions Python 3.11 and the `global.json` .NET SDK on Linux, then invokes
`python -X utf8 tools/validate.py --level core`. Keep the private game corpus and Godot runtime out of the
hermetic CI job, preserve the validation driver's failure and POSIX child-process semantics, and avoid
introducing a second build/test command path.
Continue step 5 of the **codebase consolidation** maintenance slice by making the user-owned project-license and
third-party-artifact decisions required before distribution. Resolve, replace, or exclude the unverified
BinExtractALF/LzssCpp and Kelebek-derived material before adding the canonical license, notice, and checksum/
provenance manifest set. Do not infer a license choice, publish/configure a remote, or remove local artifacts as
part of that decision.
Concrete playthrough blockers may still preempt this bounded maintenance work; the consolidation effort does
not replace Phase B gameplay validation or the open cross-platform gates.

View File

@@ -35,6 +35,14 @@ by a failed preflight; rebuild each through its owning tool in this reference. R
`--godot`, then `AGE_GODOT_CONSOLE`, then `godot4`/`godot`/`godot-mono` on `PATH`. Game-root resolution uses
`--game-root`, then `AGE_GAME_ROOT`, then the conventional sibling install and always requires `SYS4INI.BIN`.
The hosted wrapper is `.github/workflows/core-validation.yml`: a read-only `ubuntu-24.04` job provisions
Python 3.11 and the SDK selected by `global.json`, then runs
`python -X utf8 tools/validate.py --level core`. Pull requests, pushes to `main`, and manual dispatch select the
same gate; superseded branch runs are cancelled, and `build/validation/**` is retained for seven days only when
the job fails. It has no secrets, cache, game corpus, Godot runtime, packaging, or deployment access. Until a
remote is configured and the commit is pushed, the tracked workflow is dormant and its first hosted result is
still pending.
## Container parse / disassemble
| Tool | Purpose | Run | Reads → Writes |