From 885b4d4d674c60aa3b5c1d163a1de5293f2c71df Mon Sep 17 00:00:00 2001 From: Fabian Hamm Date: Sun, 6 Sep 2026 21:54:52 +0200 Subject: [PATCH] docs: the handoff's resume steps assume a machine this is not MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §§1-9 were written on fabi-Hyrican-PC. On the other desktop the ~/.sylph-* credentials do not exist, the Pi does not resolve, and stable is 1.90.0 rather than the 1.98.1 §8 records -- so §8.2 (fetch the WASM bundle) and §8.4 (Phase 7) cannot be run from here at all. Says which of the four steps can. Measured rather than carried over: protection holds (10/10), fmt is 774 hunks across 154 files, check-citations is 19, and the tests are 207/0/14 across 30 suites. Two of those need reading carefully: * clippy DIVERGES. The runner is rustc 1.98.1 -- read out of job 794's log, not assumed -- and is clean; here 1.90.0 exits 101 on only_used_in_recursion at vfs.rs:85. That is #15 ceasing to be theoretical. It is NOT evidence that CI's green is fake, which is the §7 lesson-5 inference in the other direction. * the test tally matches to the unit while measuring something else. 15 *_disc.rs files resolve disc_root() through a hardcoded absolute path, so unsetting SYLPHEED_DISC does not skip them: the disc suites RAN here (1936 s, mesh_consistency_disc alone 1220 s) and skipped on CI (2.4 s total) -- and both report 207/0/14, because the skip path returns from a test that still passes. Good news for #14, since this run is the stronger evidence; and worth an issue, since SYLPHEED_DISC looks like a control and is not one. I got that last one wrong first -- inferred "the counts cannot match" from "the fallback resolves", which is §7's shape a sixth time, recorded as such. Also: a plain `git clone` of this repo fails three ways on the pack that still carries the 545 MB; --filter=blob:none works. And §6's tokio claim was challenged and survived -- every use is inside a #[cfg(test)] module. Co-Authored-By: Claude Opus 5 (1M context) --- docs/agents/HANDOFF-2026-09-06.md | 150 ++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) diff --git a/docs/agents/HANDOFF-2026-09-06.md b/docs/agents/HANDOFF-2026-09-06.md index 49310cf2..4a98ea61 100644 --- a/docs/agents/HANDOFF-2026-09-06.md +++ b/docs/agents/HANDOFF-2026-09-06.md @@ -245,3 +245,153 @@ result from before does not. * **Never self-screenshot**; ask the human to capture. Ask before a watch-and-verify `--ui` launch. * **Never judge emulator crash or stability from a Bash-launched run.** + +## 10. The second machine — measured on `fabi-MS-7C37`, 2026-09-06 + +**§§1–9 were written on `fabi-Hyrican-PC`.** This section was written on the +other desktop, and every line is a command run *here*. Nothing above is carried +across untested — §7 is the reason. + +Everything §§4–5 say about the **server** checks out exactly: 13 open issues, +#10 and #14 open and `mergeable`, Gitea 1.25.5. What does not transfer is the +**box**. + +### What is different here, and what it costs + +| § | says | here | +|---|---|---| +| 8 | four `~/.sylph-*` credentials, `chmod 600` | **none exist.** `~/.git-credentials` holds a `fabi@git.mc02.dev` token that reads `branch_protections` — an endpoint both agent tokens are refused on — so it is not an agent token. Whether it can *push* is untested | +| 8.2 | fetch `/tmp/sylph-wasm-compile.bundle` from the Pi | **`raspberrypi.fritz.box` does not resolve here**, and there is no host key for it. `ba6c5da` is unreachable from this machine | +| 8 | "updated to `rustc 1.98.1` … to match the runner" | that was the *other* desktop. Here `stable` = **1.90.0**, with a `1.92.0` also installed | +| 5 | the agent images | no `sylph-decoder` / `sylph-port` image on this box | + +So of §8's four steps, only **1** (the human's merges) and **3** (the +trunk-action decision, an edit to `ci.yml`) can be done from here. **2 and 4 +cannot, at all.** + +### 🔴 `git clone` of this repository does not work + +Three attempts died on `GnuTLS recv error (-9)` / `Recv failure: Connection +reset by peer`, at 135 MB, 4.6 MB and 73 MB. A default clone fetches **every** +branch, and `auto/port-p6-audio`'s history still carries the 545 MB of game +content §9 describes — gone from the tree, still in the pack. + +What works, in seconds: + +```bash +git -c http.version=HTTP/1.1 clone --filter=blob:none \ + https://git.mc02.dev/fabi/Sylpheed.git +``` + +Blobs fault in on demand. The tree is **108 MB in 1 007 files** (98 MB of it +`docs/re/captures/`), and it was verified byte-for-byte against +`git ls-tree -r -l` — worth doing, because the clone printed *"checkout failed"* +partway and then recovered silently. ⚠️ One cost: `check-citations` reaches into +peer branches, so on a blobless clone it faults blobs over that same flaky link +and takes minutes rather than seconds. + +### The numbers that carry, and the one that does not + +Expected values taken from §§4–5 *before* running, per R2: + +| | expected | measured here | | +|---|---|---|---| +| `gitea-protect --verify` | protection holds | **holds**, 10/10, rc=0 | ✅ carries | +| `cargo fmt --all -- --check` | 774 hunks | **774**, across **154 files** | ✅ carries | +| `check-citations --for-merge` | 19 | **19**, rc=1 | ✅ carries | +| `cargo test --workspace` | 207 / 0 / 14, 30 suites | **207 / 0 / 14, 30** | ✅ carries — see below | +| `cargo clippy --workspace -- -D warnings` | *not comparable* | **exit 101** | 🔴 diverges | + +154 files corroborates rather than adds: §7's split of the fmt debt into "133 +that cannot collide" and "21 that are the real blocker" sums to exactly it. + +`gitea-protect --verify` needs `SYLPH_GIT_CREDENTIALS=~/.git-credentials` here, +since its default is one of the four missing files. + +### 🔴 The test count carries — and that is what is wrong with it + +It matched to the unit. It should not be read as the two runs having done the +same thing, because they did not. + +**15 files** under `crates/sylpheed-formats/tests/*_disc.rs` resolve the disc +through a `disc_root()` whose second branch is a **hardcoded absolute path** — +`/home/fabi/RE - Project Sylpheed/Project Sylpheed - Arc of Deception (USA, +Europe) (En,Ja)`. So `unset SYLPHEED_DISC` does **not** disable them: that +directory exists on this box, and the disc suites *ran*. + +| | CI (job 794) | here | +|---|---|---| +| test **execution** wall time | **2.4 s**, slowest suite 0.29 s | **1 936 s**, `mesh_consistency_disc` alone **1 220 s** | +| tally | 207 / 0 / 14, 30 suites | **identical** | + +Identical because the skip path is `eprintln!("SKIP: …")` **plus an early return +from a test that still passes**. A skipped disc test and a fully exercised one +both score `1 passed`. And the message is invisible either way — `cargo test` +captures a passing test's stderr, so *neither* log contains a `SKIP:` line. The +absence of one proves nothing; only the clock separated these two runs. + +So ask the question this project keeps having to ask — **what would this check +still report if the corpus were entirely absent?** — and the answer is +`207 / 0 / 14`. + +Two consequences, and the first is good news: + +* this run is **strictly stronger evidence than CI's**: 207 passed with the disc + corpus actually exercised, on x86_64, at `593b378`. +* `SYLPHEED_DISC` looks like the control and is not one. Whether the disc suites + run is a property of *the machine's directory layout*, invisible in the command + and in the output. Worth an issue — it is the `.gitignore` lesson again, + **naming an instance instead of the condition.** + +📌 **A sixth instance for §7, and it is mine.** I inferred "the counts cannot +match" from "the fallback resolves" — an adjacent property, never tested — and +wrote it into this section before the run finished. The run returned 207 / 0 / 14. +The correction was the same as every other time in that table: run it, and count. + +### 🔴 The clippy gate genuinely disagrees between the two toolchains + +This is **#15 ceasing to be theoretical**, and it needs stating carefully, +because it is §7's lesson 5 arriving from the other side. + +Both sides measured with the same command, both versions read rather than assumed: + +* **the runner** — `rustc 1.98.1 (48a229cea 2026-09-01)`, read out of job 794's + own log. `cargo clippy --workspace -- -D warnings` finishes in 9.26 s with no + lint. Native is green on runs **206, 207, 208 and 209** — four consecutive, + not three. +* **here** — `rustc 1.90.0` / `clippy 0.1.90`. The same command exits **101**, on + exactly one lint: + +``` +error: parameter is only used in recursion + --> crates/sylpheed-formats/src/vfs.rs:85:10 + = note: `-D clippy::only-used-in-recursion` implied by `-D warnings` +``` + +Without `-D warnings` it is a warning and clippy exits 0 — so the disagreement +sits exactly at the gate. + +**What this does not mean.** It does not mean #14 is wrong, and it does not mean +CI's green is cached or ungated. That is the inference §7 records as the sharpest +of its five failures, and the evidence points the other way: the runner's log +shows the step running, on this code, clean. `d8807c4` already collapsed one +`else { if }` *"so both toolchains agree"* — this is the same class, one lint on. + +What it establishes is narrower and more useful: **the gate's verdict depends on +which stable happened to be current**, and there is now a named reproducible case +rather than an argument. That is #15's evidence. + +📌 For whoever picks up #13/#14: *"clippy is clean"* is not a property of the +tree, it is a property of the tree **and** a toolchain. Until #15 pins one, say +which one you ran. + +### Refutation attempted, and survived + +Per the adversarial duty — §6's claim that `sylpheed-formats` declares `tokio` as +a normal dependency **it never uses**. It *is* referenced, in `ship.rs` and +`xiso.rs`, which looked like a refutation. It is not: every one of those sits +inside a `#[cfg(test)]` module (`ship.rs:497`, `xiso.rs:178`). The library's +non-test code does not use tokio, so moving it to `dev-dependencies` is sound and +the `examples/` targets keep compiling. **Claim survives** — recorded because a +survived challenge is stronger than an unchallenged one, not because it changed +anything.