feat!: require a tunnel endpoint; always bind the bare hostname (legacy removal) - #554
feat!: require a tunnel endpoint; always bind the bare hostname (legacy removal)#554venkatamutyala wants to merge 4 commits into
Conversation
Drops the legacy central fallback and the "cde" bind branch. dev() now fails loudly if /etc/glueops/tunnel_endpoint is missing on a CDE VM, rather than tunneling somewhere unexpected. BREAKING CHANGE: images from this release only work with a slackbot that writes /etc/glueops/tunnel_endpoint for every CDE VM. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ErBUiAYTosnpbF9hvUj3Dn
The previous commit's edit removed the adjacent cde-boot docker-exec block (gh auth, repo clone, AutoGlue setup) along with the tunnel code — restored verbatim. Also rebases the change onto the current release so IdentitiesOnly=yes is preserved, and adds an explicit failure when the endpoint is still the retired central host, which would otherwise bind bare while that sish prefixes the username. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ErBUiAYTosnpbF9hvUj3Dn
Multi-agent review of the legacy-removal PRs (4 reviewers, findings adversarially verified)23 raw findings → 7 confirmed. The headline one was a self-inflicted regression, now fixed:
Deliberately not changed (verified as intended behavior): the hard-fail on a transient Merge order remains the operative risk, and it is unchanged: provisioner first (after every region declares 🤖 Generated with Claude Code |
A tunnel misconfiguration should cost only the tunnel: cde-boot (gh auth, repo clone, AutoGlue) is unrelated, the VM stays reachable over the tailnet, and every dev re-run previously hit the same early return so the bootstrap could never run. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ErBUiAYTosnpbF9hvUj3Dn
Final review — lead reviewers + requested specialists (29 agents, findings adversarially verified)23 raw findings → 10 confirmed → all fixed. Structure: four lead reviewers (one per PR + a cross-repo seams lead) each assessed the post-fix branches and requested domain specialists; the specialists they asked for (GlueOps deployment config; sish flag semantics as actually deployed) were fanned out and settled their questions empirically; everything then went through adversarial verification. The previous round's five fixes were re-verified as correct — the Fixed in this round
Correction to PR #554's precondition (please read before merging)The stated precondition — "the slackbot writes
🤖 Generated with Claude Code |
The earlier guards returned before code serve-web, so a tunnel misconfiguration also withheld the editor — contradicting their own rationale that the VM stays reachable over the tailnet. They now set TUNNEL_OK=0, skip only autossh, and tell the user to reach the VM over Tailscale. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ErBUiAYTosnpbF9hvUj3Dn
Round 3 — six-lens sweep + completeness critic (28 agents, adversarially verified)21 raw findings → 9 confirmed → all fixed. Zero critical, zero major (round 1 had a critical, round 2 a major), and the nine deduplicated to five real issues — three independent lenses landed on the same transient-tagging defect, two on the same stale comment. That convergence is the signal this has bottomed out. Fixed
One correction for PR #504's body (not code)Decommission precondition 4 says to check the central sish's admin console — that box does not run AssessmentThree rounds, 84 agents: critical → major → all-minor, with the last round's findings concentrated in wording, docs, and one behavioral nuance in code the previous round had just added. Further review rounds are unlikely to pay for themselves; the remaining risk in this change set is operational (the drain preconditions and deploy order), not defect-shaped. 🤖 Generated with Claude Code |
DRAFT — do not merge until the preconditions below hold. Part of retiring the legacy central tunnel.
tunnels.glueopshosted.comdefault is gone:dev()reads/etc/glueops/tunnel_endpointand, on a CDE VM, errors out if it's missing or empty instead of silently tunneling to the central host.TUNNEL_BINDlegacy branch is gone: the VM always binds its bare$HOSTNAME, so URLs are always<hostname>.<region>.tunnels.cde.glueopshosted.com.Preconditions
tunnel_endpoint(companion PR: feat!: require tunnel_endpoint on every region (legacy tunnel removal) provisioner#236), so cloud-init always writes the file./etc/glueops/tunnel_endpointfor every CDE VM — true since v4.3.0.Note on old images
This only affects VMs built from this release onward. Older images keep their baked-in
dev()and remain safe as long as the slackbot still hands them a working endpoint — which is exactly what the slackbot'sREGIONAL_TUNNEL_MIN_IMAGE_TAGgate governs, so retire that gate (see the slackbot PR) only once pre-v0.155.1 images are no longer offered or in use.🤖 Generated with Claude Code
https://claude.ai/code/session_01ErBUiAYTosnpbF9hvUj3Dn