Cut and publish a live release including PR #1011 (orbit-view globe) — handoff, in progress nf-ucxy ← Beads

closed priority 2 task unassigned activesession:cut-release

Twinned from https://github.com/cfsh/ninefold/issues/1029 by tools/beads/import_github.py's reconcile pass.

Handoff from a chat-driven chunk in the argo worktree. Aedan asked to push a live release including the orbit-view globe PR; this got most of the way there and then stopped mid-flight for a fresh session to pick up. Everything below is exact state as of this comment, not a plan — verify before acting on any of it, state may have moved.

Done, no action needed

- PR #1011 (orbit-view globe terrain — continents/patches, 2x2 Game Pixel rendering, GameState.Time, the Game Pixel/Real Pixel terminology sweep) is merged to main at 0ec0682. Reviewer PASS (12/12), human approved. Nothing further needed on it. - Godot 4.7.1-stable mono export templates are now installed on this box at /root/.local/share/godot/export_templates/4.7.1.stable.mono/ (~1.9 GB). They were empty before today — a release had never been attempted from a Linux box here. Notably: the official template package bundles BOTH platforms' binaries in one archive (windows_release_x86_64.exe sits right next to linux_release.x86_64), so "Windows export templates are Windows-side" (the old framing in notes/machines.md) undersold it — the templates aren't platform-pinned, only release.py's engine-lookup glob is. Whether a full win+linux cross-export actually completes cleanly from a Linux host is still unverified.

In flight — needs your attention first

- PR #1028https://github.com/cfsh/ninefold/pull/1028 — adds --linux-only to tools/release/release.py, deciding #570's open question ("whether a Linux box can cut the full release, or only the Linux half"): skips the Windows export/manifest/sync entirely rather than touching the Windows-pinned Godot glob. Also fixes notes/machines.md's now-stale "Releases cannot be cut" line. State right now: - presubmit.py passes; python3 -m unittest tools.tests.test_release — 28/28 pass, including 2 new tests for --linux-only. - rev:off removed, review requested from aedanpope, review_now.py was kicked off and was still rev:pending (no verdict posted yet) when this session stopped — check ./tools/pr/thread.sh 1028, it may have landed on its own, or may need ./tools/pr/review_now.py 1028 run again. - tools/release/* is always outside the Tier-1 perimeter (governance), so this needs Aedan's real GitHub approval regardless of the reviewer verdict — same gate PR #1011 hit. - Separately: PR #1011's own review also hit a real bug worth knowing about if you see it again — filed as unclaimed issue #1025 (ninefold-reviewer posts risk=risk:feel instead of the charter's tier=<1|2|3>, so tools/nflib/verdict.py's parser can't recognize an actual PASS). #1011 was merged past it with UNCONVERGED_OK=1 ./tools/pr/merge_pr.py, justified because the PASS was independently confirmed by reading the verdict body directly. Watch for the same false "no verdict" refusal on #1028.

Not done — this is the actual remaining work

Once #1028 is merged:

1. Fetch fresh origin/main into a real main checkout — a **dedicated worktree pinned to origin/main**, not cwal (that's another dev's live checkout — don't touch it) and not this argo worktree (mid-chunk, different branch). git worktree add --detach <path> origin/main is what this session used before stopping; clean it up when done, same as rebuild_f5.py's own worktree pattern. 2. rclone is not installed on this box at all (which rclone finds nothing). find_rclone() checks $RCLONE_BIN, then PATH, then a Windows-only fallback path that won't exist here — needs a real Linux rclone binary one way or another before anything past find_rclone() can run. 3. R2 credentials are not set anywhere on this box — checked the current shell env and .bashrc/.profile/.zshrc//etc/environment, all empty. release.py's r2_env() requires all three (R2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY) unconditionally — even a --dry-run needs them, since rclone sync --dry-run still authenticates against the real bucket to compute a diff. CREDS_HELP in release.py has the exact setx-style recipe (Linux needs the export equivalent); Aedan has these credentials, this box has never had them. 4. Once rclone + credentials + the merged --linux-only flag are all in place: `GODOT_BIN=/opt/godot/Godot_v4.7.1-stable_mono_linux.x86_64 python3 tools/release/release.py --linux-only` for a dry run first (proves the export/manifest steps work end to end without uploading anything), then the same with --yes for the real, live, public push. --linux-only was not yet run for real — this session validated it only via unit tests with fakes, not a real end-to-end pass, per DEV_PRINCIPLES.md E5 ("do not report a change as working until you have watched it work") — that watching is what's left. 5. Report back to Aedan the version string and per-platform transfer numbers per .claude/commands/release.md's Step 4 — this is a Linux-only release, so say that plainly rather than letting "done" imply Windows shipped too.

Open, not urgent

- Whether a full win+linux cross-export can actually work from a Linux host, now that the templates are confirmed to bundle both platforms — a real question, genuinely unverified, separate from today's Linux-only need. Worth a careful, isolated dry-run test (never live) before ever trusting it for a public sync.

Unclaimed — Aedan is assigning a fresh session to this.

Dependencies

None.

Comments

No comments.

Add a comment