Skip to content

Add updater release notes recovery flow - #5343

Closed
PerishCode wants to merge 5 commits into
mainfrom
work/updater-release-notes
Closed

Add updater release notes recovery flow#5343
PerishCode wants to merge 5 commits into
mainfrom
work/updater-release-notes

Conversation

@PerishCode

Copy link
Copy Markdown
Contributor

Why

This PR prepares the updater release-notes path for beta recovery work on the 0.14.1 line.

The immediate pain is operational: beta metadata may need to move back from a 0.14.2 path to 0.14.1 after stale R2 objects are manually removed. The release workflow previously treated that as a semver regression and would block both version preparation and latest.json publishing. This also closes the dry-run side-effect gap where sourcemap upload could still reach PostHog.

What users will see

When a packaged update is ready, the updater popup opens as a centered expanded dialog by default. It renders a local release-notes preview text, includes a control to collapse back to the compact form, and shows a "View full release notes" action when updater metadata provides an HTTPS jumpTo URL.

Release operators get an explicit force_latest workflow input for beta/betas recovery. Normal runs keep the existing forward-version protection.

Surface area

  • UI — new page / dialog / panel / menu item / setting / empty state in apps/web or apps/desktop (including Electron menu bar)
  • Keyboard shortcut — new or changed
  • CLI / env var — new od subcommand or flag, new tools-dev / tools-pack / tools-pr flag, or new OD_* env var
  • API / contract — new /api/* endpoint, new SSE event, or changed shape in packages/contracts
  • Extension point — new entry under skills/, design-systems/, design-templates, or craft/, or change to the skills protocol
  • i18n keys — added new translation keys (see TRANSLATIONS.md for the locale workflow)
  • New top-level dependency — adding any new entry to the root package.json (dependencies or devDependencies); workspace-package package.json files are out of scope. Include a paragraph on what we get vs. what bytes we ship (see CONTRIBUTING.md → Code style)
  • Default behavior change — changes what existing users experience without opting in (default model, default setting, file/SQLite schema, auto-network on startup, auto-install)
  • None — internal refactor, docs, tests, or translation update only

Screenshots

Local packaged validation captured expanded and compact updater states:

  • .tmp/updater-force-0141-r1-install/screenshots/round1-expanded.png
  • .tmp/updater-force-0141-r1-install/screenshots/round1-compact.png
  • .tmp/updater-force-0141-r2-install/screenshots/round2-expanded.png
  • .tmp/updater-force-0141-r2-install/screenshots/round2-compact.png

The expanded screenshot was inspected locally and shows the centered large updater dialog, local constant release-notes copy, and the full release-notes jump button.

Bug fix verification

Validation

  • pnpm install
  • actionlint -color .github/workflows/release-beta.yml .github/workflows/release-beta-s.yml .github/workflows/release-stable.yml
  • pnpm --filter @open-design/tools-release exec vitest run tests/channel-prepare.test.ts
  • pnpm --filter @open-design/tools-serve exec vitest run tests/release-metadata-publish.test.ts
  • pnpm --filter @open-design/tools-release typecheck
  • pnpm --filter @open-design/tools-serve typecheck
  • pnpm --filter @open-design/web typecheck
  • pnpm --filter @open-design/tools-pack typecheck
  • pnpm --filter @open-design/tools-pack exec vitest run --maxWorkers=2 tests/web-sourcemaps.test.ts tests/config.test.ts tests/release-workflows.test.ts
  • pnpm i18n:check
  • pnpm --filter @open-design/e2e exec vitest run tests/packaged-smoke-workflow.test.ts
  • pnpm --filter @open-design/web exec vitest run tests/lib/updater.test.ts tests/components/UpdaterPopup.test.tsx
  • pnpm --filter @open-design/tools-serve exec vitest run tests/updater-fixture.test.ts
  • pnpm guard
  • pnpm typecheck
  • git diff --check

Packaged updater loop validated twice locally with tools-serve + tools-pack on release-beta: build 0.14.1-beta.1, install/start 0.14.1-beta.0, trigger updater download, render popup, capture expanded/compact screenshots, close, and uninstall.

Release follow-up: after the stale R2 0.14.2 objects are cleared, dispatch release-beta with release_version=0.14.1-beta.1 and force_latest=true so the workflow can publish beta/latest/metadata.json back to the 0.14.1 line.

@PerishCode
PerishCode requested a review from a team as a code owner July 9, 2026 08:19
@lefarcen
lefarcen requested a review from mrcfps July 9, 2026 08:21
@lefarcen lefarcen added size/XXL PR changes 1500+ lines risk/high High risk: apps/desktop, daemon, auth, migration, workflows, package deps type/enhancement Enhancement to existing feature needs-validation Runtime change detected; needs human or /explore agent validation. labels Jul 9, 2026
@lefarcen

lefarcen commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

🧪 This PR changes the updater flow in a way that needs a manual QA pass before merge — please hold off self-merging for now; we'll loop QA in once it's merge-ready.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Visual regression review

Head: c6264c9 · Base: 323246a

0 changed · 53 unchanged · 0 new without baseline · 0 failed

Unchanged cases
Case Main PR Diff
visual-avatar-local-agent-list
0 px (0.00%)
main pr diff
visual-avatar-local-agent-list-panel
0 px (0.00%)
main pr diff
visual-avatar-menu
0 px (0.00%)
main pr diff
visual-avatar-menu-panel
0 px (0.00%)
main pr diff
visual-avatar-open-design-account
0 px (0.00%)
main pr diff
visual-critical-settings
0 px (0.00%)
main pr diff
visual-critical-workspace
0 px (0.00%)
main pr diff
visual-critical-workspace-preview
0 px (0.00%)
main pr diff
visual-design-system-detail
0 px (0.00%)
main pr diff
visual-design-systems
0 px (0.00%)
main pr diff
visual-home
0 px (0.00%)
main pr diff
visual-home-catalog
0 px (0.00%)
main pr diff
visual-home-context-picker
0 px (0.00%)
main pr diff
visual-home-context-picker-popover
0 px (0.00%)
main pr diff
visual-home-plugin-filter
0 px (0.00%)
main pr diff
visual-home-plugin-use-staged
0 px (0.00%)
main pr diff
visual-home-plugin-use-with-query
0 px (0.00%)
main pr diff
visual-home-staged-attachment
0 px (0.00%)
main pr diff
visual-integrations
0 px (0.00%)
main pr diff
visual-integrations-mcp
0 px (0.00%)
main pr diff

Visual diff is advisory only and does not block merging.

@mrcfps mrcfps left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@PerishCode Thanks for the release-notes recovery work here. I reviewed the changed workflow/release metadata path, updater popup normalization, fixture coverage, and sourcemap dry-run guard. I found one non-blocking UI correctness issue around release-note metadata precedence when a downloaded update is kept visible while a newer candidate has been checked. I also attempted the focused web updater Vitest command, but this checkout does not currently have vitest available for @open-design/web, so I could not use that local validation signal.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

Comment thread apps/web/src/lib/updater.ts Outdated
Generated-By: looper 0.10.1 (runner=fixer, agent=codex)
@PerishCode

Copy link
Copy Markdown
Contributor Author

Looper fixer round completec6264c9

  • ✅ Review comment on apps/web/src/lib/updater.ts (@mrcfps) — thread
    • Changed apps/web/src/lib/updater.ts so updater release-note metadata prefers status.active.metadata before top-level status.metadata. Extended apps/web/tests/lib/updater.test.ts to cover the downloaded-active release staying on version N notes while newer incoming/top-level metadata points at version N+1.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@mrcfps mrcfps left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@PerishCode I reviewed the latest head across the updater popup changes, release-note metadata publishing, beta/betas force-latest recovery path, sourcemap dry-run side-effect guard, fixture support, and the follow-up fix for active-release metadata precedence. The prior release-notes link mismatch is addressed by preferring status.active.metadata, with a regression covering an active downloaded version while newer incoming/top-level metadata exists. I did not find any new actionable issues in the changed ranges. Thanks for the careful recovery-path work here.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

@PerishCode

Copy link
Copy Markdown
Contributor Author

Closing this PR after product/research alignment changed the auto-update direction. Keeping the branch for reference; follow-up work will continue from #5071's branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-validation Runtime change detected; needs human or /explore agent validation. risk/high High risk: apps/desktop, daemon, auth, migration, workflows, package deps size/XXL PR changes 1500+ lines type/enhancement Enhancement to existing feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants