[Epic] 1951-epic-desktop-experience-uxs - #1975
Draft
propr-dev[bot] wants to merge 49 commits into
Draft
Conversation
…gine for CLI Implemented by ProPR AI using gpt-5.6-sol model. Implementation completed successfully.
…tance connec Implemented by ProPR AI using gpt-5.6-sol model. Implementation completed successfully.
…nstance conn Implemented by ProPR AI using gpt-5.6-sol model. Implementation completed successfully.
…compatibilit Implemented by ProPR AI using gpt-5.6-sol model. Implementation completed successfully.
…untime and r Implemented by ProPR AI using gpt-5.6-sol model. Implementation completed successfully.
Implemented the follow-up fix without committing. - [pr-build-check.yml](/tmp/git-processor/worktrees/integry/propr/pr-1963-followup-2026-08-29T14-25-06/.github/workflows/pr-build-check.yml:34) now builds `@propr/local-setup` before every affected CLI typecheck/test. - [build-publish.mjs](/tmp/git-processor/worktrees/integry/propr/pr-1963-followup-2026-08-29T14-25-06/packages/cli/scripts/build-publish.mjs:77) now builds and vendors `@propr/local-setup`, rewriting private workspace imports for the standalone CLI package. Verified successfully: - Local-setup and CLI typechecks - CLI lint - Hosted-tunnel suite: 312 tests passed - Init JSON suite: 12 passed - Local-setup suite: 9 passed - Agent Skill suite: 62 passed, 1 platform skip - CLI package dry-run and installed-tarball smoke test - YAML parsing and `git diff --check` Docker was unavailable locally, so the exact containerized `actionlint` invocation could not run. PR: #1963 Comment by: @github-actions[bot] (ID: 5462947943) Model: gpt-5.6-sol
…s](/tmp/git-processor/worktrees/integry/propr/pr-1963-followup-2026-08-29T14-34-00/packages/cli/src/commands/taskInspectCommands.test.ts:107). Fixed the full-suite failure in [taskInspectCommands.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-1963-followup-2026-08-29T14-34-00/packages/cli/src/commands/taskInspectCommands.test.ts:107). The test now validates concurrent state requests without assuming nondeterministic request order. Canonical output ordering remains separately verified. Validation: - Focused test passed 20 consecutive runs - CLI typecheck passed - `git diff --check` passed - No commit created PR: #1963 Comment by: @github-actions[bot] (ID: 5462991038) Model: gpt-5.6-sol
…p-shaped-ui-20260829-1408-e9w [1959 by GPT-5.6 Sol] Add the desktop-shaped UI mode and instance connection experience
…d-propr-api-20260829-1408-n3k [1954 by GPT-5.6 Sol] Create a shared ProPR API client and instance connection model
…anging Electron security configuration. Implemented the packaging supply-chain follow-up without changing Electron security configuration. Changes: - Upgraded all Electron Forge packages to `8.0.0-alpha.10`. - Pinned safe overrides: - `@electron/packager` 20.3.0 - `@electron/rebuild` 4.2.0 - Regenerated [package-lock.json](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T14-44-22/package-lock.json). - Added separate runtime and packaging audit scripts in [package.json](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T14-44-22/package.json). - Added a lockfile-first [desktop release guard](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T14-44-22/.github/workflows/desktop-release-guard.yml) that fails: - Runtime advisories at low or higher. - Desktop packaging advisories at high or critical. - Documented the audit policy in [apps/desktop/README.md](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T14-44-22/apps/desktop/README.md). Verification passed: - Clean `npm ci` - Runtime audit: 0 vulnerabilities - Desktop packaging audit: 0 vulnerabilities - Full `npm audit`: 0 vulnerabilities - Desktop/UI typecheck - 15 desktop tests - Linux desktop packaging - Workflow YAML validation and `git diff --check` The vulnerable `extract-zip`, Electron `node-gyp`, and `cacache` chains are absent. No advisory exception or constrained-exposure documentation was necessary. Changes remain uncommitted as requested. PR: #1967 Comment by: @integry (ID: 5463039825) Model: gpt-5.6-sol
…ktop-pairin-20260829-1408-o5i [1955 by GPT-5.6 Sol] Add secure desktop pairing tokens and compatibility discovery to the API
Implemented the release-blocking packaging fix. - Disabled only `LoadBrowserProcessSpecificV8Snapshot`; all hardened fuses remain enforced. - Added a packaged Linux smoke test that: - Validates every fuse state. - Launches without `--no-sandbox` or `--disable-sandbox`. - Requires Electron’s `ready-to-show` renderer event. - Requires a clean exit. - Added the smoke test to the desktop release guard using Xvfb and a correctly configured Chromium setuid sandbox helper. - Added `desktop:smoke` and documented its usage. Verification passed: - Shared package build - Desktop/UI typecheck - All 15 desktop tests - Forge Linux packaging - Fuse inspection, including the snapshot fuse disabled - Script syntax and `git diff --check` The current execution container cannot complete the final launch because it prohibits user namespaces and provides no root/sudo or Xvfb; Electron correctly failed closed instead of disabling its sandbox. The release CI now supplies the required sandbox helper configuration and display server to execute that proof automatically. PR: #1967 Comment by: @integry (ID: 5463056792) Model: gpt-5.6-sol
[Epic] 1953-epic-desktop-transport-api
Implemented the self-contained desktop preparation: - Added `desktop:prepare` to build `@propr/shared`. - Made `desktop:typecheck` and `desktop:package` invoke preparation first. - Added `packages/shared/**` to the release-guard trigger. - Documented the behavior. Files changed: [package.json](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T15-02-01/package.json:75), [desktop-release-guard.yml](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T15-02-01/.github/workflows/desktop-release-guard.yml:10), and [README.md](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T15-02-01/apps/desktop/README.md:23). Verification: - Runtime audit: 0 vulnerabilities - Packaging audit: 0 vulnerabilities - `npm ci`: passed - Typecheck from absent `packages/shared/dist`: passed and recreated output - Desktop tests: 15/15 passed - Forge Linux package: passed, independently rebuilding shared first - JSON, script syntax, and `git diff --check`: passed The packaged launch smoke was attempted but this execution host lacks both `sudo` and Xvfb and forbids unprivileged user namespaces. The harness verified the fuse configuration, then correctly failed closed because `chrome-sandbox` could not be made root-owned mode `4755`. The CI workflow retains the required sandbox-helper setup and Xvfb launch steps. PR: #1967 Comment by: @integry (ID: 5463103357) Model: gpt-5.6-sol
…tmp/git-processor/worktrees/integry/propr/pr-1963-followup-2026-08-29T14-56-46/.github/workflows/cli-node-compatibility.yml:6): Implemented the follow-up in [cli-node-compatibility.yml](/tmp/git-processor/worktrees/integry/propr/pr-1963-followup-2026-08-29T14-56-46/.github/workflows/cli-node-compatibility.yml:6): - Builds `@propr/shared`, then `@propr/local-setup`, before project-options tests. - Triggers compatibility checks when `packages/local-setup/**` changes. - Audited other clean-checkout CLI paths; they already prepare both dependencies via explicit builds, `test:prepare`, or self-contained `cli:pack`. Validation passed: - Node 22: 26/26 project-options tests - Node 24: 26/26 project-options tests - Full suite: all 309 test files plus UI workspace passed; UI 465/465 tests - `npm run cli:pack` - Actionlint 1.7.12 - Workflow YAML parsing and `git diff --check` Only the compatibility workflow is modified. No commit was created. PR: #1963 Comment by: @integry (ID: 5463097453) Model: gpt-5.6-sol
…-agnostic-l-20260829-1408-o4c [1958 by GPT-5.6 Sol] Extract the UI-agnostic local setup engine for CLI and desktop use
…ed release smoke: Implemented the Electron entry-format repair and strengthened release smoke: - Main/preload now emit explicit CommonJS `.cjs` bundles; packaged manifest and preload path match. - Packaged renderer uses a restricted app-owned protocol, preserving the disabled file-protocol privilege fuse, as [Electron recommends](https://www.electronjs.org/docs/latest/tutorial/security). - Renderer-ready is emitted only after verifying `window.proprDesktop`. - Smoke rejects known main-process uncaught-exception markers. Key changes: [package.json](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T15-14-42/apps/desktop/package.json:11), [main.ts](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T15-14-42/apps/desktop/src/main.ts:22), [smoke-packaged.mjs](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T15-14-42/apps/desktop/scripts/smoke-packaged.mjs:12). Validation: - Typecheck: passed - Desktop tests: 15/15 passed - Forge package: passed - Packaged manifest/bundle inspection: passed - Fuse validation: passed, including V8 snapshot fuse disabled - Functional packaged launch: reached renderer-ready with `"preloadBridgeExposed":true` The exact sandbox smoke was rerun but this container lacks `sudo` and cannot make `chrome-sandbox` root-owned mode `4755`; Chromium correctly refused to start rather than disabling sandboxing. The existing release workflow performs that ownership setup before running the unchanged smoke command. PR: #1967 Comment by: @integry (ID: 5463184150) Model: gpt-5.6-sol
…epic-desktop-experience-uxs Automatically resolved merge conflicts after merging target branch into PR branch. Resolved conflicts in: - propr-ui/src/api/apiClient.ts - propr-ui/src/api/compatibility.ts PR: #1968 Model: gpt-5.6-sol
…worktrees/integry/propr/pr-1968-followup-2026-08-29T15-39-39/propr-ui/src/App.tsx:458). The merged file exceeded ESLint’s 400-line limit by one effective line; the default wrapper is now a compact named function with unchanged behavior. Fixed the PR build failure in [App.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1968-followup-2026-08-29T15-39-39/propr-ui/src/App.tsx:458). The merged file exceeded ESLint’s 400-line limit by one effective line; the default wrapper is now a compact named function with unchanged behavior. Validation passed: - UI lint with zero warnings - UI typecheck - UI production build - Focused App and desktop-pairing tests: 9/9 - `git diff --check` Only `propr-ui/src/App.tsx` was modified. No commit was created. PR: #1968 Comment by: @github-actions[bot] (ID: 5463307288) Model: gpt-5.6-sol
…ing the user-facing product name and all security settings. Implemented the Linux space-free package path while preserving the user-facing product name and all security settings. Changes: - Forge now emits `apps/desktop/out/propr-desktop-linux-x64` via [forge.config.ts](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T15-42-24/apps/desktop/forge.config.ts:11). - Smoke launches the exact space-free binary path in [smoke-packaged.mjs](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T15-42-24/apps/desktop/scripts/smoke-packaged.mjs:20). - CI configures the exact sandbox helper path without globbing in [desktop-release-guard.yml](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T15-42-24/.github/workflows/desktop-release-guard.yml:62). - Packaged ASAR metadata still contains `"productName":"ProPR Desktop"`. Verification passed: - Both audits: 0 vulnerabilities - Clean `npm ci`: 0 vulnerabilities - Desktop and renderer typecheck - Desktop tests: 15/15 - Forge package - Exact artifact and metadata assertions - Hardened fuse validation - `git diff --check` The final local renderer-ready launch could not complete because this container has neither `sudo` nor `xvfb-run`; it stopped at Chromium’s expected root/setuid ownership check. Its diagnostic used the complete new space-free path without truncation. The CI workflow retains the required `chown root:root`, mode `4755`, Xvfb, and sandboxed renderer-ready/bridge proof. PR: #1967 Comment by: @integry (ID: 5463320073) Model: gpt-5.6-sol
…st.mjs](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T15-50-52/test/orchestratorConfig.test.mjs:25). Fixed the full-suite failure in [test/orchestratorConfig.test.mjs](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T15-50-52/test/orchestratorConfig.test.mjs:25). The VAPID fixture now pads OpenSSL-generated private scalars to the required 32-byte width, preventing intermittent “malformed” results when a leading zero was omitted. Validation: - Exact suite-runner test: 56/56 passed - `git diff --check`: passed - No commit created - Only the test fixture file was modified PR: #1967 Comment by: @github-actions[bot] (ID: 5463323066) Model: gpt-5.6-sol
Implemented only F1 and F2. - Fixture query activation now requires `import.meta.env.DEV`; the trusted desktop bridge remains available in production. - Connection probe and persistence failures transition to retryable blocked states with distinct messaging. - Stale connection attempts are ignored. - Added production fixture, rejection, persistence, retry, and stale-attempt regression tests. Verification passed: - 11 focused tests - UI typecheck - UI lint - Production build - `git diff --check` No commit or PR was created. PR: #1968 Comment by: @propr-ultrafix (ID: 0) Model: gpt-5.6-sol
Implemented F1–F3 only. - [security.ts](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T16-10-43/apps/desktop/src/security.ts): packaged renderer trust now allows hash routes while rejecting queries, alternate hosts, and documents. - [desktop.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T16-10-43/propr-ui/src/desktop.tsx): activating a profile now reloads the renderer for fresh REST/socket module configuration. - [package.json](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T16-10-43/apps/desktop/package.json): dev, make, DEB, and RPM entrypoints prepare `@propr/shared`. - Added routed-IPC and two-endpoint switching regression tests. Validation passed: - Desktop tests: 15/15 - UI tests: 466/466 - Desktop and UI typechecks - All preparation hooks - `git diff --check` No commit created. PR: #1967 Comment by: @integry (ID: 5463457877) Model: gpt-5.6-sol
Implemented F3, F4, and F5 only. - Manager additions now connect and activate; active edits reconnect safely, while inactive edits remain save-only. - Save, remove, authentication, browser-launch, and active-clear failures surface as retryable UI errors. - macOS and Windows hide unsupported local setup and show remote-connection guidance. - Added focused regression coverage in [DesktopExperience.test.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1968-followup-2026-08-29T16-15-38/propr-ui/src/desktop/DesktopExperience.test.tsx). Verification passed: - 15 focused tests - TypeScript typecheck - Targeted ESLint - `git diff --check` No commit was created. PR: #1968 Comment by: @integry (ID: 5463481548) Model: gpt-5.6-sol
Implemented only F4, F5, and F6. - F4: Deep-link IPC now registers eagerly in preload and buffers links until React subscribes. Main-process pending links are queued, preserving startup and loading-time second-instance links. - F5: Desktop logout now uses the active Electron session with credentials and manual redirects, then navigates internally to `#/login?logged_out=true` without external browsing. - F6: Credential mutations are serialized per profile with deterministic invocation-order semantics, including profile removal. Verification passed: - Desktop tests: 20/20 - UI tests: 467/467 - Desktop and UI typechecks - Electron Forge package - `git diff --check` No commit was created. PR: #1967 Comment by: @integry (ID: 5463548749) Model: gpt-5.6-sol
Implemented F6 only. - Desktop authentication now resolves only after a profile-specific completion signal. - Login refreshes shared authentication state, then navigates to the intended return path. - The sign-in button remains disabled while authentication is pending. - Added focused success-path and adapter completion tests. Key changes: [LoginPage.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1968-followup-2026-08-29T16-34-38/propr-ui/src/pages/LoginPage.tsx:320), [types.ts](/tmp/git-processor/worktrees/integry/propr/pr-1968-followup-2026-08-29T16-34-38/propr-ui/src/desktop/types.ts:29), [desktop authentication test](/tmp/git-processor/worktrees/integry/propr/pr-1968-followup-2026-08-29T16-34-38/propr-ui/src/pages/LoginPage.desktopAuthentication.test.tsx:23). Verification passed: - 41 focused tests - UI TypeScript check - UI lint - `git diff --check` PR: #1968 Comment by: @integry (ID: 5463572792) Model: gpt-5.6-sol
Implemented F7 only. - Successful desktop authentication now reconnects the still-current profile. - Added a positive-path test covering authentication-required → authenticated → connected app. - Preserved existing authentication failure handling. Verification passed: - DesktopExperience tests: 16/16 - `propr-ui` TypeScript typecheck - `git diff --check` Modified only [DesktopExperience.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1968-followup-2026-08-29T16-54-22/propr-ui/src/desktop/DesktopExperience.tsx) and [DesktopExperience.test.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1968-followup-2026-08-29T16-54-22/propr-ui/src/desktop/DesktopExperience.test.tsx). PR: #1968 Comment by: @integry (ID: 5463666356) Model: gpt-5.6-sol
Implemented only F7, F8, and F9. - F7: Added an exact shared `propr-app://renderer` CORS boundary for REST and Socket.IO, enabled CORS on the registered scheme, and extended the packaged smoke test with a real credentialed renderer request. - F8: Added development-only inline-script CSP support and corrected Vite’s shared renderer entry resolution. Packaged output retains strict `script-src 'self'`. - F9: Added deterministic deep-link queue coordination and regression coverage for the post-load/pre-assignment race. Verification passed: - Desktop tests: 22/22 - API CORS tests: 12/12 - Desktop, UI, and API typechecks - API lint - Desktop profile UI test - Forge packaging - Vite development HTML and renderer module loading The packaged launch smoke was attempted but this container cannot configure the Chromium helper as root-owned mode `4755` or provide Xvfb. The existing release workflow provisions both before running the enhanced smoke test. PR: #1967 Comment by: @integry (ID: 5463673605) Model: gpt-5.6-sol
…webPushDispatcher.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-1968-followup-2026-08-29T17-05-56/packages/api/test/webPushDispatcher.test.ts:15). Fixed the intermittent notification regression failure in [webPushDispatcher.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-1968-followup-2026-08-29T17-05-56/packages/api/test/webPushDispatcher.test.ts:15). The fixture now uses a stable historical timestamp, preventing SQLite/Node wall-clock skew from temporarily hiding claimable jobs. Validation passed: - Full notification suite - Dispatcher test 20/20 repeated runs - API typecheck - API lint - `git diff --check` Only the intended test file changed; no commit was created. PR: #1968 Comment by: @github-actions[bot] (ID: 5463687760) Model: gpt-5.6-sol
…st.ts](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T17-17-44/packages/api/test/webPushDispatcher.test.ts:15). Fixed the flaky full-suite failure in [webPushDispatcher.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-1967-followup-2026-08-29T17-17-44/packages/api/test/webPushDispatcher.test.ts:15). The fixture now uses a stable historical timestamp, preventing SQLite wall-clock comparisons from intermittently hiding claimable delivery jobs. Validation passed: - Dispatcher suite: 20 consecutive runs, 340/340 tests - Notification suites: 42/42 tests - API typecheck - API lint - `git diff --check` Only the intended test file changed; no commit was created. PR: #1967 Comment by: @github-actions[bot] (ID: 5463780771) Model: gpt-5.6-sol
Implemented the focused PR #1968 follow-up without committing. Key changes: - Serialized profile/active-ID writes with freshness checks, preventing stale attempts or clears from overwriting newer actions. - Added pending-probe Back cancellation that blocks later commits. - Completed modal focus trapping, background inertness, Escape handling, and opener focus restoration. - Scoped focus styles to desktop roots. - Restored `webPushDispatcher.test.ts` exactly to its pre-`1da60f5` state; no other API/notification files changed. - Added regressions for deferred persistence ordering, cancellation, and modal accessibility. Verification passed: - Focused desktop tests: 25/25 - `DesktopExperience` tests: 19/19 - UI typecheck - UI lint - UI production build - `git diff --check` Primary files: [DesktopExperience.tsx](</tmp/git-processor/worktrees/integry/propr/pr-1968-followup-2026-08-29T17-17-20/propr-ui/src/desktop/DesktopExperience.tsx>), [DesktopExperience.test.tsx](</tmp/git-processor/worktrees/integry/propr/pr-1968-followup-2026-08-29T17-17-20/propr-ui/src/desktop/DesktopExperience.test.tsx>), and [desktopExperienceHooks.ts](</tmp/git-processor/worktrees/integry/propr/pr-1968-followup-2026-08-29T17-17-20/propr-ui/src/desktop/desktopExperienceHooks.ts>). PR: #1968 Comment by: @integry (ID: 5463780360) Model: gpt-5.6-sol
…ecure-elect-20260829-1408-gux [1956 by GPT-5.6 Sol] Scaffold the secure Electron desktop runtime and reusable Web UI renderer
…to 1952-epic-electron-runtime-app
Implemented F9 and S1 follow-up changes. - Restored Darwin/Windows CLI setup flow by removing desktop capability gating from the command and platform-neutral setup engine. - Retained Linux-only local setup presentation in DesktopExperience. - Added mocked Darwin/Windows CLI regressions covering agent-skill and sequential engine entry. - Closed the instance manager when new or active profiles begin connecting, preventing the inert overlay from returning. - Added focused UI regressions for both profile paths. All requested checks passed: - Local setup tests: 10/10 - CLI setup tests: 114/114 - CLI/local-setup typechecks - CLI pack: 122 files - DesktopExperience tests: 21/21 - UI typecheck, lint, production build - `git diff --check` No commit was created. PR: #1968 Comment by: @integry (ID: 5463920747) Model: gpt-5.6-sol
…f281`. Implemented the requested follow-ups on synced head `a9fde0f281`. - Added cross-platform Vite `/@fs/` normalization with explicit POSIX and `C:\...` tests. - Desktop dev/typecheck/package/make hooks now build `@propr/shared` then `@propr/client`. - Release guard packages before typechecks from asserted-clean build inputs; audits remain before `npm ci`. - Added `[::1]` support across desktop API/external/dev URL validation, renderer CSP, client normalization, and development CORS while retaining unsafe-scheme/non-loopback rejection. Key changes: [vite-file-system-url.ts](/tmp/git-processor/worktrees/integry/propr/pr-1971-followup-2026-08-29T17-47-07/apps/desktop/src/vite-file-system-url.ts), [security.ts](/tmp/git-processor/worktrees/integry/propr/pr-1971-followup-2026-08-29T17-47-07/apps/desktop/src/security.ts:3), [package.json](/tmp/git-processor/worktrees/integry/propr/pr-1971-followup-2026-08-29T17-47-07/package.json:75), [desktop-release-guard.yml](/tmp/git-processor/worktrees/integry/propr/pr-1971-followup-2026-08-29T17-47-07/.github/workflows/desktop-release-guard.yml:52). Validation passed: - Desktop, UI, and client typechecks - Desktop tests: 24/24 - Client tests: 10/10 - REST/Socket CORS tests: 12/12 - Actual `npm run desktop:package` - All nine hardened Electron fuse checks - Development HTML emitted a valid POSIX `/@fs/.../desktop.tsx` URL The sandboxed packaged launch was attempted but this runner lacks `sudo` and Xvfb, while AppArmor blocks unprivileged user namespaces. The release guard retains the root-owned `4755` helper plus `xvfb-run` path needed to complete renderer-ready/API-origin smoke in CI. No commit was created. PR: #1971 Comment by: @integry (ID: 5463922441) Model: gpt-5.6-sol
…ees/integry/propr/pr-1971-followup-2026-08-29T17-57-47/propr-ui/src/App.tsx:43) by reducing its counted lines from 401 to 400 with a formatting-only change. Fixed the CI failure in [App.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1971-followup-2026-08-29T17-57-47/propr-ui/src/App.tsx:43) by reducing its counted lines from 401 to 400 with a formatting-only change. Validation passed: - UI lint with zero warnings - UI typecheck - `git diff --check` No commit created. PR: #1971 Comment by: @github-actions[bot] (ID: 5463945190) Model: gpt-5.6-sol
[Epic] 1951-epic-desktop-experience-uxs
Implemented F2 only. - [`normalizeApiBaseUrl`](/tmp/git-processor/worktrees/integry/propr/pr-1971-followup-2026-08-29T18-13-46/apps/desktop/src/security.ts:17) now rejects path-bearing URLs, accepts root slashes only, and returns `url.origin`. - Added security, logout, and profile-store regressions covering `/base` rejection, non-persistence, trailing roots, and exact `[::1]` origins. - Scheme, host, and loopback allowlists were unchanged. All runnable checks passed, including: - Desktop tests: 24/24 - Client tests: 10/10 - API CORS tests: 12/12 - Desktop/UI typechecks - Production package and ASAR inspection - Root fast suite: 278 tests - Hosted regressions: 314 tests plus 66 UI tests - Notification regressions and browser smoke: 4/4 - Builds/lints, audits, release verification, CLI packaging - `git diff --check` The sandboxed Electron GUI launch could not complete because this unprivileged container lacks root/setuid sandbox setup and Xvfb. Workflow lint was likewise unavailable because Docker/actionlint/shellcheck are not installed. No commit was created. PR: #1971 Comment by: @integry (ID: 5464048347) Model: gpt-5.6-sol
…epic-electron-runtime-app Automatically resolved merge conflicts after merging target branch into PR branch. Resolved conflicts in: - package-lock.json - propr-ui/src/App.tsx - propr-ui/src/components/Layout.tsx - propr-ui/src/pages/LoginPage.tsx PR: #1971 Model: gpt-5.6-sol
…ees/integry/propr/pr-1971-followup-2026-08-29T18-33-24/propr-ui/src/App.tsx:44) by reducing the ESLint-counted lines from 401 to 400. This is formatting-only. Fixed the CI blocker in [App.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1971-followup-2026-08-29T18-33-24/propr-ui/src/App.tsx:44) by reducing the ESLint-counted lines from 401 to 400. This is formatting-only. Validated successfully: - UI lint, typecheck, and production build - Core/API lint and build - CLI typecheck and build - Desktop typecheck and production package - Desktop tests: 24/24 - Client tests: 10/10 - CORS tests: 12/12 - DesktopExperience tests: 21/21 - Local-setup tests: 10/10 - `git diff --check` Only the sandboxed launch could not run locally because this container lacks both `sudo` and `xvfb-run`. No commit was created. PR: #1971 Comment by: @github-actions[bot] (ID: 5464141981) Model: gpt-5.6-sol
[Epic sync] Bring Electron runtime foundation into desktop UX lane
…the #1960/#1961 placeholder boundary. Implemented the packaged-renderer CSS fix without changing the #1960/#1961 placeholder boundary. Key changes: - Desktop Vite now loads `propr-ui`’s PostCSS pipeline using native cross-platform paths. - Tailwind resolves its config/content relative to `propr-ui`. - Production builds fail if emitted CSS contains `@tailwind`/`@apply` or lacks `.h-5`, `.space-y-5`, `.bg-primary-500`, or `.dashboard-card`. - Packaged smoke now measures the 1280×820 window, logo bounds, controls, help text, button, and runtime footer spacing. Validation passed: - Production desktop package - Emitted CSS inspection - Desktop/UI typechecks - 24 Electron tests - 21 DesktopExperience tests - Web UI production build - `git diff --check` The sandboxed launch was attempted but blocked before window creation because this non-root container cannot configure Electron’s root-owned `4755` sandbox helper or create a user namespace. The smoke remains strict and does not use `--no-sandbox`; CI already provisions the helper correctly. PR: #1971 Comment by: @integry (ID: 5464159479) Model: gpt-5.6-sol
Implemented F3 only; S1 remains untouched. - Hardened `propr://open` validation in [security.ts](/tmp/git-processor/worktrees/integry/propr/pr-1971-followup-2026-08-29T19-10-30/apps/desktop/src/security.ts:25), rejecting external/protocol-relative paths, traversal, controls, malformed encoding, login/pairing routes, and hosted-flow parameters. - Added ordered startup buffering and post-load hash routing in [desktop-deep-link.ts](/tmp/git-processor/worktrees/integry/propr/pr-1971-followup-2026-08-29T19-10-30/propr-ui/src/desktop-deep-link.ts:3), integrated at [desktop.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1971-followup-2026-08-29T19-10-30/propr-ui/src/desktop.tsx:145). - Added `/tasks`, startup-buffer, post-load, and unsafe-input regressions. Validation: - Electron tests: 26/26 passed - Focused UI tests: 5/5 passed - Desktop/UI typechecks: passed - UI lint: passed - Production package: passed - `git diff --check`: passed - Sandboxed layout/API-origin smoke: attempted twice, but the container cannot launch Electron because generated `chrome-sandbox` is `node:node 0755`; Electron requires root ownership and mode `4755`. No sandbox-disabling workaround was used. PR: #1971 Comment by: @integry (ID: 5464313572) Model: gpt-5.6-sol
…st.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1979-followup-2026-08-29T19-43-24/propr-ui/src/desktop/DesktopExperience.test.tsx:293). Fixed the flaky full-suite failure in [DesktopExperience.test.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1979-followup-2026-08-29T19-43-24/propr-ui/src/desktop/DesktopExperience.test.tsx:293). The test now opens instance management through the title-bar control, avoiding an unrelated shortcut-listener timing race. Production behavior is unchanged. Validation: - UI suite: 70 files, 500 tests passed - UI typecheck: passed - `git diff --check`: passed No commit created. PR: #1979 Comment by: @github-actions[bot] (ID: 5464467107) Model: gpt-5.6-sol
…54e8667a648429c5e4080d44bb0d5ff936abe`. Reapplied the canonical deep-link repair on exact head `6fe54e8667a648429c5e4080d44bb0d5ff936abe`. Changed only: - [security.ts](/tmp/git-processor/worktrees/integry/propr/pr-1980-followup-2026-08-29T19-52-01/apps/desktop/src/security.ts:32) - [security.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-1980-followup-2026-08-29T19-52-01/apps/desktop/src/security.test.ts:77) - [desktop-deep-link.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-1980-followup-2026-08-29T19-52-01/propr-ui/src/desktop-deep-link.test.ts:30) Verification: - Desktop: 27/27 passed - Focused UI: 25/25 passed - Full UI: 500/500 passed - Desktop/UI typechecks: passed - Production package: passed - Exact encoded `#` and `?`, single/double-encoded traversal variants: all returned `null` - Normal `/tasks?status=open#recent`: preserved - CI-only `DesktopExperience.test.tsx` change: preserved - Final diff: three requested files only Packaged smoke was attempted but the non-root worker cannot configure the required root-owned setuid Chromium sandbox helper and lacks Xvfb. The application correctly refused to launch without sandboxing. Per instruction, I did not commit or push. `git ls-remote` therefore still reports the published head as `6fe54e8`; post-publication verification can only occur after the system creates and publishes its automatic commit. PR: #1980 Comment by: @integry (ID: 5464512567) Model: gpt-5.6-sol
….test.ts](/tmp/git-processor/worktrees/integry/propr/pr-1980-followup-2026-08-29T19-58-19/packages/api/test/notificationManagementRoutes.test.ts:65). Fixed the full-suite flake in [notificationManagementRoutes.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-1980-followup-2026-08-29T19-58-19/packages/api/test/notificationManagementRoutes.test.ts:65). Node occasionally emits a 31-byte ECDH private scalar by omitting a leading zero. The fixture now pads it to VAPID’s required 32-byte width, preventing valid mismatched-key cases from being misclassified as malformed. No production code changed. Validation: - Previously failing test: 3/3 passed - Desktop tests: 27/27 passed - Focused UI tests: 25/25 passed - Desktop/UI typechecks: passed - Production package: passed - `git diff --check`: passed - Final diff: one test file only The published PR head is `c524a9e5`, contains the canonical deep-link fix, and still targets `1951-epic-desktop-experience-uxs`. A local full-suite rerun was unavailable because this worker has neither Docker nor Redis. Sandboxed smoke was also blocked by the environment’s missing root-owned Chromium sandbox helper and Xvfb. No commit was created. PR: #1980 Comment by: @github-actions[bot] (ID: 5464573988) Model: gpt-5.6-sol
sync(desktop): propagate finalized runtime into UX epic
…8dcb68971e6a0e6`. Implemented F1 only on base head `48f85811addf4bccfd390961e8dcb68971e6a0e6`. Changes: - [security.ts](/tmp/git-processor/worktrees/integry/propr/pr-1979-followup-2026-08-29T20-41-29/apps/desktop/src/security.ts) now checks the serialized canonical candidate’s length/controls and requires its dashboard path to equal the validated input path before returning it. - Added desktop and renderer regressions for percent-expansion beyond 2,048 and an exactly 2,048-character valid canonical link. - Existing traversal, encoded-delimiter, auth/pairing, query, and hash tests remain passing. Verification: - Desktop tests: 28 passed. - Focused renderer tests: 5 passed. - Desktop and UI typechecks: passed. - Production package: passed. - `git diff --check`: passed. - Packaged smoke: environment-blocked because no usable Chromium sandbox helper is installed/configured. - Full suite: reached file 155/320 before blocking on unavailable Redis (`127.0.0.1:6379`); neither Redis nor Docker is installed. Only the three scoped files are modified. Per instruction, I did not commit or push; the system must publish the resulting branch head. PR: #1979 Comment by: @integry (ID: 5464771154) Model: gpt-5.6-sol
fix(desktop): propagate canonical deep-link length validation to UX
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Epic PR
This PR aggregates all changes from child PRs merged to the
1951-epic-desktop-experience-uxsbranch.Created automatically by ProPR