ci(relay): add a forced manual relay deploy - #13550
Conversation
Alchemy does not redeploy the relay Worker when only a Config value read in its Init changes (alchemy-run/alchemy#1831). Changing a production variable such as RELAY_TUNNEL_CLEANUP_MODE therefore never reached the Worker, and neither would turning tunnel cleanup off during an incident. Add a manual trigger that runs alchemy deploy --force from main, and update the release steps to use it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — The workflow adds a manual You can add or adjust custom eligibility rules. Learn more. |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
## What's Changed * fix(web): sidebar Back always returns to the main app by @t3dotgg in pingdotgg/t3code#13516 * fix(desktop): desktop updates reconnect in seconds, not minutes by @t3dotgg in pingdotgg/t3code#12006 * fix(connect): remove tunnels after hosts go offline by @t3dotgg in pingdotgg/t3code#9386 * fix(mobile): capture a lit 6.9-inch lock screen in the agent-activity showcase by @juliusmarminge in pingdotgg/t3code#13522 * feat(grok): offer one-click updates through `grok update` by @juliusmarminge in pingdotgg/t3code#13523 * fix(mobile): make Android subscription usage widgets scrollable by @tris203 in pingdotgg/t3code#13474 * fix(web): keep sidebar terminal pulses in sync by @t3dotgg in pingdotgg/t3code#12962 * feat(web): add iPhone Duo 3D controls by @juliusmarminge in pingdotgg/t3code#12813 * fix(relay): export tunnel cleanup counters to Axiom by @juliusmarminge in pingdotgg/t3code#13528 * fix(server): Grok accounts with no usage yet no longer vanish from Limits by @jakeleventhal in pingdotgg/t3code#12799 * fix(server): report the Grok account email so usage limits merge across environments by @jakeleventhal in pingdotgg/t3code#12588 * feat(web): add usage page keybinding by @jakeleventhal in pingdotgg/t3code#9434 * chore: clear Effect language service suggestions by @juliusmarminge in pingdotgg/t3code#13536 * ci(relay): add a forced manual relay deploy by @juliusmarminge in pingdotgg/t3code#13550 * fix(web): selected text stays visible on a revealed file line by @t3dotgg in pingdotgg/t3code#13548 * fix(web): collapsed composer bar stops flipping its labels while you scroll by @t3dotgg in pingdotgg/t3code#13555 * fix(clients): sync status no longer flickers when opening running threads by @t3dotgg in pingdotgg/t3code#13551 * fix(server): newer Codex models get T3 Code's instructions again by @t3dotgg in pingdotgg/t3code#13547 **Full Changelog**: pingdotgg/t3code@v0.0.43-nightly.20260924.2223...v0.0.43-nightly.20260925.2237 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.43-nightly.20260925.2237
Changing a relay variable in the
productionenvironment never reaches the Worker. Alchemy does not redeploy the Worker when only aConfigvalue read in its Init changes (alchemy-run/alchemy#1831), so both a rerun and a push tomainwithout relay code changes plan "no changes". That's whyRELAY_TUNNEL_CLEANUP_MODE=dry-runis set but production still runsoff. The same would happen to the incident switch back tooff, and to a rotated secret such asCLERK_SECRET_KEY.This adds a
workflow_dispatchtrigger to Deploy T3 Connect relay with aforceinput (checked by default) that runsalchemy deploy --force. The job only runs onrefs/heads/main, so a manual run from another branch can't deploy that branch to production. Pushes tomainbehave as before.--forcemakes every resource in the stack reconcile. I checked the ones that hold credentials:CloudMintKeyPair,ApnsDeliveryJobSigningSecret, the Axiom ingest tokens, andRelayPostgresRuntimeRoleall keep their stored value when one already exists. A forced deploy rotates no keys, tokens or passwords.docs/operations/release.mdnow says a changed variable needs a forced deploy, and uses one in the cleanup rollout, the incident switch, the rollback, and the canary.Verification:
vp runforwards--forcetoalchemy deploy, confirmed with a probe script. actionlint reports only the existing custom Blacksmith runner label. After merging, run the workflow frommainonce to applydry-run, then checkrelay.managed_endpoint_reaper.modeon the next sweep span in Axiom.🤖 Generated with Claude Code
Summary by CodeRabbit