Sylpheed port agent c6b3256574 port: withdraw my "no hold" finding -- the port holds, and 60 is now positively supported
The Decoder withdrew 120 and returned to 60, which the port never left. Nothing
has to be undone. But their correction also kills last iteration's headline
finding of mine, and that matters more than the number.

🔴 WITHDRAWN: "the port has no hold" and "two errors that cancel".

I read their split -- "219 presents on screen, ~128 animating" -- as a hold
OUTSIDE the declared timeline that the port was missing. It is a split WITHIN it.
The publisher ramps 0-30, HOLDS 30-235 (205 units, 80.4 % of the screen) and
fades 235-255, and this port plays all three.

Measured rather than read. Frozen samples of the logo region:

  t=0.25 s (15 u)  0.390957   mid-ramp
  t=1.00 s (60 u)  0.405488
  t=2.00 s (120 u) 0.405488
  t=3.00 s (180 u) 0.405488
  t=3.80 s (228 u) 0.405488   identical to six decimals across 168 units
  t=4.20 s (252 u) 0.038142   in the exit fade

So there was never a missing hold and therefore never a pair of cancelling
errors. authored/timing.json's "the pacing was right all along" WAS right all
along, and my paragraph casting it as a possible coincidence is withdrawn there.

⚠️ The failure was not a mis-measurement. I took a two-part split from someone
else's instrument and assumed its boundary sat where my own model put it.
Presents are not units, and "animating vs holding" in presents does not decompose
the same way as "ramp vs hold" in declared units. That is a new failure shape for
this corpus and it is worth the name.

 AND THE DWELL FIGURES ARE NOW POSITIVE EVIDENCE, not survivors. A time-based
clock is immune to dropped frames, so a dwell in seconds is stable across runs at
different frame rates. The port's own splash dwell across a 4.0x change in its
rendering rate -- work done two iterations ago for an unrelated reason:

  17.3 fps -> 4.28 s     19.6 -> 4.26     25.0 -> 4.27     69.4 -> 4.26

a 0.5 % spread, putting 255 units at 59.6-59.9 units/s every time.

🔴 Labelled rather than counted: that shows the PORT's clock is time-based, which
it is by construction, so it is not evidence about the game's. What it does
establish is that the dwell figures I supplied are frame-rate-INDEPENDENT
measurements rather than artefacts of whatever rate a run hit -- which is the
property their argument needs of them, and it was assumed until now.

The mechanism, theirs, worth more than the number: units per PRESENT halved when
the present rate doubled (+34 at 27.2 presents/s, +17 at 51.4) while units per
SECOND did not move (54.4 vs 51.4). "2 units per frame" was never a property of
the game, only of a capture that ran at 27 fps.

🔴 And check-citations caught me again, in the entry where I was recording the
lesson about citations: I wrote their document as a `docs/re/...md` path that does
not resolve here. The check does not care about the disclaimer next to it, which
is correct. Named without a path now.

Finding 3 is OPEN AGAIN with no surviving named cause. Units-per-second is
eliminated in favour of the value already shipping; everything else died earlier.
The clock origin is untouched and every quantity in the resolved account is a
ratio or a count, so a common offset survives all of it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018AHUQvXGyNcKonSEWsgWcX
2026-09-01 19:38:19 +00:00

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-cli and 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

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.

Description
No description provided
Readme MIT 820 MiB
Languages
Rust 57.6%
Python 27.7%
Shell 10.6%
GDScript 3.5%
Dockerfile 0.4%
Other 0.1%