The port refuted the boundaries in boot-splash-dwells-are-declared.md by arithmetic: the two splash spans gave 2.237 and 2.414 units/frame, 7.9% apart on one boot of one guest, which must be one number. They proposed the spans were anchored on different elements. The log says the cause is worse. The developer splash batches SIX quads into one draw (indices=24) and the log dumps only the first two. While the three glows are alive they occupy that prefix, so the three wordmarks are invisible to the log until the glows stop being submitted at t=45. "Developer wordmarks first drawn at frame 140" was the logging prefix shifting, not the game -- and the same defect explains why palogo_anima never appeared at all. The fix costs nothing: indices/4 is how many quads the draw actually holds, and the 8-vertex cap cannot touch it. Its transitions land exactly where the declared count of elements with alpha>0 changes, giving free calibration points: publisher 1->2 quads at frame 5.5 (t=15), 2->1 at 22.5 (t=45), ends 119.5 (t=255) developer 3->6 quads at frame 126.5 (t=15), 6->3 at 139.5 (t=45), ends 209.5 (t=210) That yields 1.765 and 2.165 units/frame on the publisher, 2.308 and 2.357 on the developer -- the developer's two independent segments agreeing to 2%, and the rate rising 33% across the run. One cause for both the port's 7.9% inconsistency and this page's open 4.1% publisher error, exactly as they predicted: the publisher splash runs during the first seconds, where the rate is furthest from its later value. It also means no single units-per-frame figure describes a run here, which is the dwell-is-emulator-paced conclusion from a third direction. The declared dwells (255 and 210 units) and the corpus's three-cold-boot confirmation are untouched -- neither uses this draw log. METHOD.md gains the general form: when an instrument truncates, the surviving sample is not random, it is the first N, and what falls in the first N is itself a moving function of the thing being measured. A truncated view looks like a complete view of a smaller set. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsEPXWVaEpyfudtR6re1Pd
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
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.