The other agent got a value wrong by resolving a record BY NAME and stopping at the first hit; their census puts 1467 of 15493 elements (9.5%) behind a second link, and they asked how exposed this exporter is. Measured: NOT AT ALL. 135 links resolve -- 116 through a focus block's record, 19 to a top-level element on the same screen -- and 0 reach nothing. Now a standing check, because this port is adding archives and a link into a record the exporter does not emit would be invisible: the element still draws, it just silently loses whatever that record animates. 🔴 THE CHECK'S FIRST VERSION REPORTED 116 FALSE FAILURES, including ptbtn00 -> ptbtn00f.rat, which I had verified by hand an hour earlier. It compared the link against the focus ELEMENT's (a .t32) instead of the focus BLOCK's (a .rat). Caught only because one row was already known to be right -- a new check producing a confident wrong answer is exactly what its own subject matter is about. 🔴 And its selftest printed 'passed=False -> ok' in one line: the message restated the condition as og==1 while the verdict tested og==2. The same stale restatement bug hit fit-trajectory earlier today, so the message is now DERIVED from the verdict rather than written twice. Selftest covers both resolution routes, including the .rat/.t32 mismatch that broke v1. In check-all.
Sylpheed
A clean-room reverse engineering and port project for Project Sylpheed: Arc of Deception (Xbox 360, 2007).
Three things live here, in one repository so that a change spanning them lands as one commit:
| The decoders | crates/sylpheed-formats — the disc's formats, read and verified disc-wide |
| The port | port/ — a Godot 4 project, plus crates/sylpheed-export which converts a disc into the open asset tree it reads |
| The corpus | docs/re/ — what has been reverse engineered, with its evidence, its retractions and its dead ends |
You need your own copy of the game. No game content is in this repository and none ever will be. The exporter reads the disc you supply.
The oracle is the real game
sylpheed-cliand the Explorer are tools for verifying our decoding. They are hypotheses under test and they have been wrong. When something must be checked against the truth, the truth is the game running in Xenia Canary, captured — not any renderer of ours.
This is stated first because getting it backwards is the most expensive mistake this project has made.
Layout
crates/
sylpheed-formats/ the decoders. Disc-wide verified; the corpus is its spec
sylpheed-cli/ headless tools -- render a screen, dump a table, probe audio
sylpheed-viewer/ the Explorer: a human's window onto the disc. STATIC data only
sylpheed-export/ disc -> the open, moddable asset tree
port/ the Godot 4 project. Reads open formats ONLY
authored/ decisions that are NOT on the disc, each with its reason
data/
base/ generated by the exporter. Gitignored, never hand-edited
mods/ drop-in overrides. Yours
docs/
re/ the corpus: findings, refutations, method traps
game/ how the game is navigated -- menus, modals, flight
port/ the port's mission, its handoff contract, modding rules
-- and RUNNING.md, which is how you actually start it
agents/ how the agent team works together
tools/ capture harnesses, probes, the share tool
exchange/ transient inter-agent files. NOT in git
docker/ the agent containers
Where to start
docs/re/INDEX.md— what is decodeddocs/re/REFUTED.md— what has been tested and dieddocs/re/METHOD.md— traps this project has already paid fordocs/game/navigation.md— how the game is navigateddocs/port/MODDING.md— why the asset tree looks the way it does
Xenia Canary is a separate repository: it is a fork tracking upstream, and it carries our instrumentation.
Conventions
Confidence is per claim, never per document: ✅ CONFIRMED · 🟡 PROBABLE ·
❔ HYPOTHESIS · ❌ REFUTED. A withdrawn result is kept with its reasoning
rather than deleted — that is why the numbers here can be trusted.