Mark two known gaps in the Agent Tunnel installer flow with TODOs:
1. Enrollment success != tunnel connectivity. enroll_agent() / the
EnrollAgentTunnel custom action report success once the HTTPS cert
exchange (POST /jet/tunnel/enroll, port 7171) completes and config is
written. The QUIC tunnel (UDP, quic_endpoint) is never probed, so a
blocked QUIC port (e.g. firewall on UDP 4433) produces a green install
while the agent never comes online and silently auto-reconnects.
2. Custom installer dialog labels render as raw localization keys. The
.wxl strings are loaded into a local dict used only for pre-flight
MessageBoxes; the custom dialogs resolve [Key] via MsiRuntime.Localize,
which is not populated from these custom strings (light.exe only emits
!(loc.X)-referenced strings).
1. Installer reports success on enrollment, not on tunnel connectivity
Symptom: MSI install shows the Agent Tunnel step as success, but the agent never appears online in the Gateway / DVLS agent list.
Root cause:
EnrollAgentTunnelrunsdevolutions-agent up→enroll_agent()(devolutions-agent/src/enrollment.rs). Its success criteria is only:POST https://<gw>:7171/jet/tunnel/enroll(HTTPS management port) returns 2xx and issues the client cert, andTunnelsection are persisted toagent.json.The actual data path — the QUIC tunnel over UDP (
quic_endpoint, 4433) — is established later by the agent service (devolutions_agent::tunnel, with auto-reconnect) and is never probed at install time. Enrollment uses 7171; the tunnel uses 4433. So when 4433 is blocked (e.g. firewall) the install is green while the agent silently fails to connect.Reproduced: Gateway host firewall had no inbound
UDP 4433rule → agent log:Tunnel connection lost error=QUIC handshake: timed out→ agent absent fromGET /jet/tunnel/agents, yet the installer said success.Suggested fix: after
enroll_agent, do a short QUIC connectivity probe toenroll_response.quic_endpointand surface a clear warning/failure when it can't connect (so admins get actionable feedback at install time). TODO marker inenrollment.rs.2. Custom installer dialog labels show raw localization keys
Symptom: The Agent Tunnel dialog (and the base dialog title) render literal keys —
AgentTunnelDlgTitle,AgentTunnelDlgEnrollmentStringLabel,AgentDlg_Title, … — instead of the translated text.Root cause: The strings exist correctly in
Strings_*.jsonandDevolutionsAgent_*.wxl. At runtimeProject_UIInitializedloads the embedded.wxlinto a local dict that only feeds the pre-flight MessageBoxes. The custom dialogs resolve[Key]viaMsiRuntime.Localize, which is not populated from these custom strings —light.exeonly emits strings referenced via!(loc.X)into the MSI, and the custom[Key]labels are never!(loc.X)-referenced (verified viadark.exe: the strings are absent from the built MSI's localization tables). Standard dialogs (Welcome/InstallDir) work only because WixSharp's built-in UI references those standard IDs via!(loc.X).Suggested fix: wire the loaded
stringsdict into the ManagedUI runtime localization (or back the custom dialogs with a sharedI18nthat reads it). TODO marker inProgram.cs.