Skip to content

fix(desktop): fence stale update status responses - #5693

Merged
huangruiteng merged 1 commit into
loopx-project:mainfrom
Duang777:codex/fix-desktop-update-status-freshness
Oct 5, 2026
Merged

huangruiteng merged 1 commit into
loopx-project:mainfrom
Duang777:codex/fix-desktop-update-status-freshness

Conversation

@Duang777

@Duang777 Duang777 commented Oct 5, 2026 •

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

  • Outcome basis / optional anchor: Desktop update freshness gap identified under [Task][RFC]: Complete the Desktop execution frontend journeys #5204.
  • Goal/source and gap: desktop_update_status could capture state before bounded diagnostics, while both desktop frontends accepted delayed polling responses after a newer update action completed.
  • Observable before -> after, with the validation row that proves it: a delayed downloading response previously replaced restart_required and could expose Apply again; the same deterministic browser scenario now keeps Restart visible and records exactly one Apply request.
  • Issue/task and intended base: Related to [Task][RFC]: Complete the Desktop execution frontend journeys #5204; targets main.

Author Declaration

  • Written by: model agent (OpenAI Codex), operated by Duang777.

Implemented against

Criterion (spec clause) Disposition Symbol / path Test or command
Read transaction state after bounded diagnostics implemented desktop_update_status in maintenance.rs Rust tests and Clippy
Reject stale status responses after action transitions implemented boot.js, desktop-update.tsx desktop-update-browser-smoke.mjs
Keep Apply single-flight while preserving progress reads implemented boot and workspace action guards delayed-response browser assertions
  • Self-check before submission: Reviewed the four-file diff, rebased onto current upstream/main, checked DCO, public/private boundaries, formatting, static analysis, unit tests, production frontend bundles, exact runtime bundle generation, and the browser journey. A signed packaged App was deliberately not built because release signing fixtures are unavailable.

Scope And Continuation

  • Completed scope and remaining work: Complete within the claimed freshness-race scope. The parent desktop journey task remains broader.
  • Slice boundary / successor: Packaged macOS validation remains CI/release-owned; this PR verifies the exact source bundle and production web assets without signing or installing an App.

Validation

  • Tested revision: 647188f74eb961731a6dcc0f502b3e0379d10d26
  • Run state: finished
  • Input classes: synthetic, public_fixture
Check kind Result Public-safe evidence / limitation
regression_parity passed Delayed status scenario failed before the fix on c46f397c0 and passes on this revision for workspace and boot entry points.
real_entrypoint passed Production chat bundle browser smoke covers delayed status, one Apply call, reload recovery, errors, diagnostics, and mobile behavior. Native IPC is a synthetic double.
unit passed Rust: 84 passed, 0 failed; 3 environment-bound signed/private bundle cases ignored. Boot diagnostics: 6 passed.
static passed Rustfmt, Clippy with warnings denied, TypeScript checks, desktop/chat production builds, JS syntax checks, and semantic inventory.
integration passed Exact desktop runtime bundle generated for this revision with 3,755 installable entries; desktop release workflow and icon smokes passed.
static passed Public/private boundary scan clean for all 4 changed files.
  • Coverage and gaps: No signed .app was installed or exercised. The deterministic IPC double covers response ordering, while Rust tests compile and execute the backend with the exact generated runtime resources.

Frontend / Visual Evidence

  • UI impact: none
  • Before: N/A
  • After: N/A
  • States and viewports shown: Existing desktop and mobile states were exercised; no layout, style, or copy changed.
  • Source data: synthetic
  • Attention review: No visual elements were added or moved. Existing loading, failure, recovery, and one-step update controls remain available.

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Refactoring (no functional changes)
  • Documentation update
  • Test update

LoopX Area

  • Control plane (goals, todos, quota, scheduler, registry, runtime)
  • Benchmark boundary (adapters, runners, verifiers, scoring, evidence)
  • Capability or extension (providers, adapters, skills)
  • Public docs or presentation surface (README, protocols, dashboard)
  • Build, packaging, installer, or CI
  • Host or runtime integration

Technical Direction

Shared-authority RFC fixture impact

N/A. This change does not claim progress against the TypeScript control-plane migration or shared Goal Authority RFC.

Boundary Checklist

  • Neither the diff nor this PR body/comments/attachments disclose private state, credentials, raw traces or verifier output, internal links, or local machine paths.
  • I did not duplicate maintainer-owned benchmark work unless a maintainer split out a public issue for it.
  • I kept the change scoped to the linked issue/task.
  • I completed the visual evidence section for UI changes, or marked UI impact none.
  • Every commit includes a DCO Signed-off-by trailer (git commit -s).

@huangruiteng
huangruiteng merged commit 86ea21d into loopx-project:main Oct 5, 2026
30 of 39 checks passed
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