Skip to content
This repository was archived by the owner on Oct 23, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,12 @@ jobs:
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: '3.10'
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '24.10.0'
- name: Install Rust for the GTA adapter checks
run: |
rustup toolchain install 1.95.0 --profile minimal
rustup default 1.95.0
- name: Verify source metadata, documentation and Python tests
run: python3 scripts/verify.py
45 changes: 17 additions & 28 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Combine

Work from the owner's current request. The previous workflow and backlog are
retired; historical plans do not select or authorize new work.
Preserve the existing implementation and local changes.
Combine puts the existing Skate simulation into offline GTA IV: mount where you
stand, ride on GTA's own ground, dismount back to ordinary GTA. Start from the
selected open GitHub issue.

## Agent skills

Expand All @@ -18,28 +18,17 @@ The five default triage labels, unchanged. See `docs/agents/triage-labels.md`.

Single-context: root `GLOSSARY.md` and `docs/adr/`. See `docs/agents/domain.md`.

## Project reference

- Start/resume: the selected issue; for GTA, [#61 current summary](https://github.com/Jpatching/combine/issues/61) and [#20 acceptance](https://github.com/Jpatching/combine/issues/20).
- Fortnite + Skate requirements: [interactive-world contract](docs/FORTNITE_SKATE.md).
- Purpose and entry points: [README](README.md).
- Parked Synergy: [menu guide](docs/TRICKSHOT_MENU.md); actual pinned GSC.
- Baseline recovery: [Windows runbook](docs/WINDOWS_BASELINE.md).
- Decisions: [host rationale](docs/adr/0001-preserve-offline-gta-gameplay.md); consult `docs/adr/` for the affected experience.
- Source/release identities: [pins](research/upstream.lock.json); refresh does not move pins.

Repository gate: `python3 scripts/verify.py` (`py -3 scripts/verify.py` on Windows).
Runtime changes need relevant runtime checks. Preparation, launch, gameplay,
verification, owner acceptance and release are distinct evidence claims.

Keep GTA IV in windowed mode throughout runtime testing. Confirm window mode
during preflight and after each restart; retain foreground and input-ownership
safeguards.

Keep game assets, converted data, identities, secrets, recordings, private logs
and settings outside Git and AI uploads. Preserve original installs and builds;
isolate runtime copies/caches/profiles. Review plugins/scripts before use.
No DRM/anti-cheat bypass. Source licences do not establish asset/publisher rights.
Recipes remain strict data, never executable commands, paths or download URLs.
No universal merger, new engine, marketplace or production launcher is authorized.
Spending, outreach, redistribution, launch, deployment and release need task authority.
## Working loop

- Tight loop: `python3 tools/gtaiv-skate/check.py` (seconds, no game). Build
behaviour test-first in its harness; run the game once per slice, at the end.
- Gate before every PR: `python3 scripts/verify.py`.
- Report source checks, runtime observation and owner acceptance as separate claims.

## Guardrails

- Game assets, converted data, recordings, private logs and settings stay local,
outside Git and AI uploads.
- Original installs and builds stay untouched; run from isolated copies.
- Use locally owned, unprotected setups; DRM and anti-cheat stay intact.
- Spending, outreach, redistribution, deployment and release need explicit owner authority.
14 changes: 14 additions & 0 deletions GLOSSARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,17 @@ The mode in which normal host-game movement, camera and vehicle use are availabl

**Skate Session**:
An active instance of the existing Skate simulation, with its collision, controls and skater pose.

## Riding surfaces

**Sampled surface**:
Host-game floor found by querying the running game around the rider, as opposed to floor decoded from collision files.
_Avoid_: live ground, probe surface

**Coverage window**:
The area of sampled surface currently given to the Skate Session around the rider.
_Avoid_: flat patch, patch, grid

**Coverage gap**:
A place the coverage window cannot honestly cover, such as a wall-sized height jump, unloaded ground, a vehicle or the window's edge. Mounting there is refused, or riding into it dismounts, with a stated reason.
_Avoid_: hole, unsupported area
32 changes: 10 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,18 @@
# Combine

Combine connects an existing game's world and ordinary gameplay with the existing
Skate simulation. This repository contains experimental source and reproduction
tools; game data and private trials stay local.

- [Reproduce source checks and builds](docs/REPRODUCING.md).
- [Windows baseline recovery](docs/WINDOWS_BASELINE.md).
- [Synergy controls and requirements](docs/TRICKSHOT_MENU.md).
- [Investigation tools and local evidence viewing](docs/WORKBENCH.md).
- [Agent instructions](AGENTS.md), [glossary](GLOSSARY.md) and
[host decision](docs/adr/0001-preserve-offline-gta-gameplay.md).
Combine puts the existing Skate simulation into offline GTA IV: mount where you
stand, ride on GTA's own ground, dismount back to ordinary GTA. Game data and
private trials stay local.

```sh
python3 scripts/verify.py
python3 tools/gtaiv-skate/check.py # tight loop: riding checks, no game
python3 scripts/verify.py # gate before every PR
```

Use `py -3` on Windows. This checks source metadata, recipes, tracked links and
tests; gameplay needs separate runtime evidence and explicit owner acceptance.

Current GTA candidate, evidence, blocker and next action live in
[workflow #61](https://github.com/Jpatching/combine/issues/61).
[Ride #20](https://github.com/Jpatching/combine/issues/20) owns ride acceptance;
[spec #64](https://github.com/Jpatching/combine/issues/64) owns wider GTA riding.
[Fortnite proof #4](https://github.com/Jpatching/combine/issues/4) and the
[interactive-world contract](docs/FORTNITE_SKATE.md) own the separate Fortnite goal.
- Riding source: [`tools/gtaiv-skate/`](tools/gtaiv-skate/README.md).
- [Agent instructions](AGENTS.md), [glossary](GLOSSARY.md) and [surface decision](docs/adr/0004-live-host-queries-supply-riding-surfaces.md).
- Current work: open GitHub issues.

[Source pins](research/upstream.lock.json), [patches](patches/README.md) and
[Synergy GPLv3 attribution](licenses/Synergy-GPL-3.0.md) identify the retained
sources. Source licences do not establish game-asset or publisher rights.
[licences](licenses/Synergy-GPL-3.0.md) identify retained third-party sources.
Source licences do not grant game-asset or publisher rights.
31 changes: 31 additions & 0 deletions docs/adr/0004-live-host-queries-supply-riding-surfaces.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
status: proposed
---

# Live host queries supply riding surfaces

Riding surfaces are built from **sampled surfaces**: ground heights queried from the
running GTA IV around the rider, through the ground-height native already used to
mount. They are sent to the Skate Session through the existing triangle-surface
route. Decoded static collision resources remain a dormant fallback. This replaces
the flat patch, which refused any ground more than 0.05 m off level, and avoids
the unresolved placement of decoded collision.

Accept this once one windowed ride on a sampled slope (mount, push, steer both
ways, dismount, walk) succeeds from a build of `main`.

## Considered Options

- **Decoded static collision** (the earlier route): complete geometry, including
walls, but world placement of the decoded resources was never qualified.
- **Live host queries** (chosen): reuses an already-working native and the existing
triangle route. It only sees floors. Walls become coverage gaps, and stacked
floors need a later stepped probe.

## Consequences

- The vertical query starts just above the rider, so the floor under the rider is
sampled. Rooftops and the road beneath a bridge work without stacked-floor support,
but crossing between stacked floors does not.
- Every metre threshold depends on the unverified `SCALE = 1` assumption in
`tools/gtaiv-skate/combine_skate.js`.
6 changes: 6 additions & 0 deletions scripts/verify.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,12 @@ def main():
[sys.executable, "-m", "unittest", "discover", "-s", "tests", "-v"], cwd=ROOT,
check=False,
)
if result.returncode:
return result.returncode
result = subprocess.run(
[sys.executable, str(ROOT / "tools" / "gtaiv-skate" / "check.py")], cwd=ROOT,
check=False,
)
if result.returncode:
return result.returncode
print("PASS: repository gate. Windows gameplay and business validation are NOT covered.")
Expand Down
Loading
Loading