Sylpheed port agent 9405d71aae port: a hard negative found a coverage hole and two defects hiding each other
The Decoder generalised my identity rule back at me -- a positive control that is
merely 'high' hides the difference between an exact instrument and a lossy one --
and it landed on the band check I shipped yesterday. Its positive control was 0.29
and 0.66 dB, and small is not zero. Source against itself read 7.656 dB, larger
than the number the check calls faithful: bands() applied the fold to one side
only, correct for source-versus-transcode and wrong for source-versus-itself. The
fold is per-side now and identity reads 0.000 dB exactly. The published 0.66 stands
unchanged; what changed is that the instrument is known unbiased rather than
assumed to be, and the scale's bottom is anchored.

Same rule applied to the port's headline numbers: the image RMSE metric reads
0.0000 for a capture against itself and after a PNG round-trip, so 13.21 is real
difference and not pipeline noise. verify-capture now asserts that before printing
any row and refuses if it is not exact.

Then their refutation attempt on 'band energies need no alignment'. It survives --
1 s of misalignment costs 0.16 dB -- but 10 s costs 1.00 dB, so the claim is
narrowed to robust, not free. Their real point: separation is material-dependent,
two unrelated music banks separate by 5.28 dB where an unrelated movie gave me
19-20. A movie is an easy negative, so I built the hard one and it failed. A 6 kHz
lowpass is caught on ADV at 4.27 dB, 2.8x, and NOT caught on S00A at 1.28 dB
against a 1.5 dB threshold, because S00A's own 6-16 kHz content sits at -67 dB. A
transcode that lost its whole top end would pass on S00A. Reported per asset as
COVERED / NOT COVERED rather than asserted, and tracked in BLOCKED.

Splitting the top band raised ADV from 2.58 to 4.27 dB. That is changing the
instrument's resolution so it can see a failure it must see, driven by a control
it failed -- the pass threshold is unchanged.

Repairing it exposed two defects that had been hiding each other. return 0 was
unconditional: making the difference path report-only swallowed the band verdict,
so check-all's transcode-bands must-pass step could not fail -- an asserting step
that asserts nothing, shipped by me one day after writing up the same shape in
someone else's work. And the disqualified difference path was still voting on the
exit code, so fixing the return turned the run red for the wrong reason. Neither
would have surfaced without a control the tool could fail.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
2026-08-31 00:37:59 +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
  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%