Skip to content

feat(gui): surface interrupted operation recovery - #226

Open
KoEkko wants to merge 1 commit into
openecos-projects:mainfrom
KoEkko:ekko/feat-operation-recovery
Open

KoEkko wants to merge 1 commit into
openecos-projects:mainfrom
KoEkko:ekko/feat-operation-recovery

Conversation

@KoEkko

@KoEkko KoEkko commented Sep 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Surface interrupted ECC operation recovery end to end: the recovered workspace revision propagates through workspace open, and pending/failed recovery state is projected into the background operation store for the renderer.
  • Harden force-quit and window teardown: workspace release is idempotent once sessions are gone, teardown rejections are caught and logged, and expected shutdown/scope IPC failures no longer log warnings.
  • Skip backend workspace session startup when no project is open, and return null from project discovery when the probed path is outside the granted scope.
  • Bump the ecc submodule for the recovery workspace revision (depends on feat(runtime): return workspace revision from interrupted operation recovery ecc#292).

Scope

Select the areas touched by this PR:

  • GUI - desktop UI/runtime changes in ecos/gui, including renderer, Electron, and shared packages.
  • ECC - ECC submodule updates or ECOS Studio integration with the ECC CLI/runtime.
  • Resource management - resource registry, downloads, installation, manifests, PDKs, or tool assets.
  • Build, packaging, Nix, or release workflow - build inputs, AppImage packaging, or release metadata.
  • CI - GitHub Actions workflows, reusable actions, triggers, path filters, or automated checks.
  • Documentation only - README, guides, templates, or docs with no runtime behavior change.

Validation

List the commands you ran. Mark checks that are not applicable as N/A.

  • cd ecos/gui && pnpm run typecheck
  • cd ecos/gui && pnpm run test (shared 102, renderer 1006, desktop-electron 905)
  • cd ecos/gui && pnpm run build (renderer typecheck + desktop:build)
  • cd ecos/gui && pnpm run desktop:build && pnpm run desktop:smoke (smoke with ELECTRON_DISABLE_SANDBOX=1, see below)
  • make build
  • make demo-gcd
  • make demo-retrosoc
  • Manual GUI smoke: cd ecos/gui && pnpm run dev
  • Other: pnpm run lint, pnpm run fmt:check, python3 .github/scripts/check-version.py

Skipped checks and reason:

  • make build, demos, manual GUI smoke: not a packaging, release, version, or native-resource change; AppImage packaging intentionally not run.
  • desktop:smoke requires ELECTRON_DISABLE_SANDBOX=1 locally because this machine's chrome-sandbox helper is not setuid root; smoke passes with sandbox disabled.

Screenshots or Recordings

Required for visible GUI changes.

  • Not captured: recovery state only appears after an interrupted/crashed ECC operation; no always-on UI changed.

Release, Packaging, and Runtime Impact

  • No release, packaging, or runtime impact
  • Version metadata changed
  • AppImage or Electron packaging changed
  • ECC CLI runtime resources changed
  • OSS CAD Suite, PDK, resource download, or installer behavior changed
  • Submodule gitlink changed

Notes:

Checklist

  • I kept the change scoped to the affected component.
  • I updated docs or user-facing text where behavior changed.
  • I included lockfile changes for dependency updates.
  • I documented intentional submodule updates.
  • I did not include local caches, virtual environments, or generated build outputs.
  • I explained any skipped validation and remaining risk.

- propagate the recovered workspace revision through workspace open
- project pending/failed recovery state into the background operation store
- harden force-quit teardown: idempotent workspace release, coded
  rejections, and quiet expected IPC failures
- bump ecc for the operation recovery workspace revision
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