Skip to content

feat(updatecheck): daily check cap, failure backoff, CI nudge suppression (Spec 079 US3)#911

Open
Dumbris wants to merge 4 commits into
mainfrom
feat/079-upgrade-nudge-us3
Open

feat(updatecheck): daily check cap, failure backoff, CI nudge suppression (Spec 079 US3)#911
Dumbris wants to merge 4 commits into
mainfrom
feat/079-upgrade-nudge-us3

Conversation

@Dumbris

@Dumbris Dumbris commented Jul 24, 2026

Copy link
Copy Markdown
Member

Closes out the remaining task on the P0 upgrade-nudge epic (roadmap: upgrade-nudge-quiet). Implements Spec 079 US3 — operator control and environment-appropriate quiet.

Truth-sync first

Most of US3 was already shipped and the roadmap note was stale: FR-012 (update_check config group + hot-reload), FR-013 (channel semantics), FR-014 (env-var precedence), FR-016/017 (downgrade + dev-build guards) all exist with tests. The genuinely missing pieces were FR-018 and FR-019:

FR-018 — rate limit + backoff

  • DefaultCheckInterval 4h → 24h ("at most a daily check" against the rate-limited unauthenticated GitHub API).
  • Consecutive failures back the periodic loop off exponentially (2×/4×/8× the interval, capped); success resets. Errors stay "unknown", never alarming (FR-020 preserved).
  • CheckNow (user-initiated /api/v1/info?refresh=true) bypasses the window — explicit intent.

FR-019 — CI / non-interactive quiet

  • CI=true|1 (the same convention the telemetry env-filter uses) marks the process non-interactive.
  • The "Update available" announcement demotes to Debug (no per-run CI log nag).
  • VersionInfo//api/v1/info gain an additive nudges_suppressed field (FR-021-compatible); the Web UI banner honors it while status/doctor/info keep reporting the facts.

Verification

  • 6 new Go tests (watched failing first): backoff window/cap/reset, CheckNow bypass, CI suppression incl. log-level assertion via zap observer; go test -race ./internal/updatecheck green; one pre-existing announce-dedupe test updated to step its clock past the new backoff window.
  • 1 new frontend test (banner hidden on nudges_suppressed); frontend suite green, vue-tsc clean.
  • make swagger regenerated; strict golangci-lint v2 clean on both tag sets; ./scripts/test-api-e2e.sh 65/65.
  • Docs: docs/configuration.md documents cadence, backoff, and CI quiet behavior.

Dumbris added 3 commits July 24, 2026 18:11
…ession (Spec 079 US3)

FR-018: DefaultCheckInterval 4h -> 24h (at most a daily check against the
rate-limited GitHub API); consecutive failures back the periodic loop off
exponentially (2x/4x/8x the interval, capped). CheckNow (user refresh via
/api/v1/info?refresh=true) bypasses the window — explicit intent.

FR-019: CI=true/1 (same convention as the telemetry env-filter) marks the
process non-interactive: the 'Update available' announcement drops to
Debug (no per-run CI log nag) and every VersionInfo carries an additive
nudges_suppressed field (FR-021-safe) that the Web UI banner honors while
status/doctor/info keep reporting the facts.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 24, 2026

Copy link
Copy Markdown

Deploying mcpproxy-docs with  Cloudflare Pages  Cloudflare Pages

Latest commit: 97c6a34
Status: ✅  Deploy successful!
Preview URL: https://94a2edcf.mcpproxy-docs.pages.dev
Branch Preview URL: https://feat-079-upgrade-nudge-us3.mcpproxy-docs.pages.dev

View logs

…guard backoff; soften refresh-failure toast (Codex round 1)

- nudges_suppressed added to the generate-types template (contracts.ts is
  generated; the hand-edit would have been wiped and TestContractsInSync
  would fail) and regenerated.
- Go tray decodes nudges_suppressed and hides the menu nudge / demotes
  the log when set; Web UI sidebar 'update' badge honors the shared
  updateNudgesSuppressed store computed (FR-019 covers every nudge
  surface, not just the banner).
- Backoff mutations are generation-guarded and SetConfig clears the
  window on an effective change, so a pre-change failure cannot swallow
  the prompt re-enable/channel-switch check (new test).
- Manual-refresh check failure toast demoted from error to info with
  non-alarming copy (FR-020).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant