Skip to content

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

Merged
Dumbris merged 5 commits into
mainfrom
feat/079-upgrade-nudge-us3
Jul 25, 2026
Merged

feat(updatecheck): daily check cap, failure backoff, CI nudge suppression (Spec 079 US3)#911
Dumbris merged 5 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: 3491682
Status: ✅  Deploy successful!
Preview URL: https://fdd5f9b9.mcpproxy-docs.pages.dev
Branch Preview URL: https://feat-079-upgrade-nudge-us3.mcpproxy-docs.pages.dev

View logs

Dumbris added 2 commits July 24, 2026 18:19
…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).
…esn't fire in CI

TestChecker_UpdateAvailableLoggedOncePerVersion asserts the interactive
Info-level 'Update available' announcement — under the CI runner's own
CI=true the new nudge suppression demoted that log to debug and the test
failed in every CI job while passing locally. Verified with CI=true go
test ./internal/... locally (clean sweep).
@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions

Copy link
Copy Markdown

📦 Build Artifacts

Workflow Run: View Run
Branch: feat/079-upgrade-nudge-us3

Available Artifacts

  • archive-darwin-amd64 (28 MB)
  • archive-darwin-arm64 (25 MB)
  • archive-linux-amd64 (16 MB)
  • archive-linux-arm64 (15 MB)
  • archive-windows-amd64 (28 MB)
  • archive-windows-arm64 (25 MB)
  • frontend-dist-pr (0 MB)
  • installer-dmg-darwin-amd64 (22 MB)
  • installer-dmg-darwin-arm64 (20 MB)

How to Download

Option 1: GitHub Web UI (easiest)

  1. Go to the workflow run page linked above
  2. Scroll to the bottom "Artifacts" section
  3. Click on the artifact you want to download

Option 2: GitHub CLI

gh run download 30142632918 --repo smart-mcp-proxy/mcpproxy-go

Note: Artifacts expire in 14 days.

@Dumbris
Dumbris merged commit 7e3c2f2 into main Jul 25, 2026
39 checks passed
@Dumbris
Dumbris deleted the feat/079-upgrade-nudge-us3 branch July 25, 2026 04:09
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.

2 participants