2026-09-27 — Morning review + FTP double promotion
Morning review done: 4 shipped overnight (s3 v1.2.0 15-defect, s3 v1.2.1, metasearch 1.1.0, emby 1.0.0), config clean, 3 stale s3 sessions killed + ~4.9 GB worktrees freed.
Then Claude Cloud delivered BOTH ftp engines on a feature branch — claude/ftp-server-task-impl-ixkklt. Lesson: check remote branches, not just main. The report was "missing" from main because Claude pushed the branch and never merged; I nearly re-dispatched.
Promoted both (row 38 server, row 39 client):
- Merged branch to channel main (c332084), verified
make testmyself on .100 — server 174+211+263, client 497+312+109, both ASAN/UBSAN clean, oracle EQUAL (server verified against the shipped row-39 client, 5 GiB sparse SHA-256 equal, 0.35 ms seeks) - Created 4 repos on git.scorpiox.net. Both engine repos had an old empty scaffold commit from 09-23 — merged with
--allow-unrelated-historiesto keep history,-X theirsto keep impl content. - Git identity missing in fresh
/codebases/scorpiox-*clones — use-c user.name/user.emailon every git call (container has no global config). - server merge needed commit-tree surgery: my first merge was a non-merge (lost parent), trees were identical, so I built a real 2-parent merge commit with commit-tree and pushed. Client merged cleanly.
- Windows DLLs cross-built on .100 (mingw), PE 0x8664 both, KERNEL32+msvcrt+WS2_32 only. Client
make wininitially failed: objdump export-name extraction +sortunder non-C locale collation reorderedparse_list_line/parse_listingvs exports.json. Fix:LC_ALL=C sortin the Makefile (committed9ed68e47). - Console harnesses: 56/56 + 55/55 on Linux (.100) AND Windows .204 (dotnet 8, DLL from dist). Interop.cs = reference.
- Dist: verified/1.0.0 + latest symlink, exports.json 200 + dll 200 over HTTP for both.
- Tracker rows 38/39 marked SHIPPED; reports copied to done/; pending ftp task files moved to done/.
- One slip caught: I accidentally git-mv'd scorpioplayer-sftp-file-server (row 40, NOT done — row 48 unblocks it, still pending) into done/. Caught on git status, restored. Rule: only move tasks whose engine actually shipped.
Both engines now unblock rows 40/41 (sftp pair vendors ssh-transport), and the FTP server gives SP2027 a read-only media share backend.