Context
FORGE WQ-186 / iicp.network#570 researched stable relay fallback beyond accountless Cloudflare Quick Tunnel rate limits.
The Python client already detects Cloudflare Quick Tunnel rate limits such as HTTP 429 / error code 1015 and applies an in-process cooldown via IICP_TUNNEL_RATE_LIMIT_COOLDOWN_S. That prevents churn inside one running process.
Remaining gap
The cooldown is process-local. Under service or Docker supervision, a crash or restart loop can forget the cooldown and attempt another accountless Quick Tunnel creation immediately, recreating rate-limit pressure.
Desired behavior
- Persist a coarse
quick_tunnel_rate_limited_until marker in the node state/config directory.
- Check the persisted marker before spawning accountless
cloudflared tunnel --url ....
- Keep
IICP_TUNNEL_RATE_LIMIT_COOLDOWN_S as the operator override.
- Preserve verified direct endpoints and
IICP_PUBLIC_ENDPOINT behavior exactly as-is.
- Keep accountless Quick Tunnel as a fallback, not a production relay requirement.
- Add tests proving supervised restarts respect the persisted cooldown and do not affect direct/public-endpoint paths.
Acceptance
- A rate-limited tunnel attempt suppresses later attempts after process restart until the cooldown expires.
- Existing reachability/tunnel tests still pass.
- Error/log output remains operator-actionable: configure a stable public endpoint / named tunnel for production relay use.
Related: RobLe3/iicp.network#570 and #538.
Context
FORGE WQ-186 / iicp.network#570 researched stable relay fallback beyond accountless Cloudflare Quick Tunnel rate limits.
The Python client already detects Cloudflare Quick Tunnel rate limits such as HTTP 429 / error code 1015 and applies an in-process cooldown via
IICP_TUNNEL_RATE_LIMIT_COOLDOWN_S. That prevents churn inside one running process.Remaining gap
The cooldown is process-local. Under service or Docker supervision, a crash or restart loop can forget the cooldown and attempt another accountless Quick Tunnel creation immediately, recreating rate-limit pressure.
Desired behavior
quick_tunnel_rate_limited_untilmarker in the node state/config directory.cloudflared tunnel --url ....IICP_TUNNEL_RATE_LIMIT_COOLDOWN_Sas the operator override.IICP_PUBLIC_ENDPOINTbehavior exactly as-is.Acceptance
Related: RobLe3/iicp.network#570 and #538.