[1960 by GPT-5.6 Sol] Implement the guided local Linux setup wizard in the desktop app - #1978
Conversation
… wizard in t Implemented by ProPR AI using gpt-5.6-sol model. Implementation completed successfully.
|
/review Initial Ultrafix review for the guided local Linux setup lane. Review the full PR delta against |
|
✅ AI Code Review Complete requested by @integry Posted 1 review: |
Checks FailedValidation failed during setup, tests, CLI packaging, linting, or build checks. View Logs |
🔍 AI Code Review — codex:gpt-5.6-solOverall EvaluationThis PR adds a thoughtful shared-engine-based Linux setup wizard, but it needs significant rework before merge. Renderer credential isolation, origin binding, cancellation, resume behavior, and platform gating currently have merge-blocking flaws. Two authoritative checks also remain pending. This review assumes the stated ✅ Constrained setup IPC — The new renderer bridge exposes fixed operations instead of arbitrary IPC or command execution, and main-process handlers centrally validate the renderer URL. ✅ Atomic setup-state writes — Setup snapshots use a mode- ✅ Shared health-gated setup — Desktop reuses Merge blockersEvery finding below was introduced by this PR and must be resolved before merging. F1: 🔴 Paired bearers remain renderer-readable
F2: 🔴 Credentials are not bound to their origin
F3: 🔴 Cancellation does not terminate active work
F4: 🔴 Restart resume discards setup decisions
F5: 🔴 Persisted state can bypass platform gating
F6: 🔴 Unexpected errors cross the redaction boundary
F7: 🔴 Setup IPC validation is incomplete
SuggestionsThese are optional follow-ups and are not sent to S1: 🟢 Bound pairing pollingValidate and cap server-provided pairing expiry and polling intervals, validate S2: 🟢 Add adversarial regression testsExtend tests with renderer-controlled profile-origin substitution, origin edits retaining credentials, legacy-bridge token reads, a Linux snapshot loaded on Darwin/Windows, concurrent status/start hydration, cancellation during a deliberately blocked host action, and restart recovery for every setup mode. The existing tests cover useful happy paths and basic redaction, but not the security and recovery boundaries above; the exact test organization is optional. ScoreThe shared-engine integration and atomic persistence are promising, but direct bearer exposure/exfiltration paths plus incomplete cancellation and recovery make the current head unsafe to merge. The remaining two pending checks do not change these verified code blockers. Score: 4/10 🤖 Review Details
🤖 Review by ProPR |
|
✅ Applied the requested follow-up changes in commit 57b6011 Summary of ChangesFixed the PR’s two UI lint failures:
Verification passed:
Only those two files changed; no commit was created. 🤖 Implementation Details
Undo Changes • View Task Execution 💡 ProPR Slash Commands
🤖 Generated by ProPR |
Fixed the PR’s two UI lint failures: - Refactored [LocalSetupWizard.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1978-followup-2026-08-29T19-16-57/propr-ui/src/desktop/LocalSetupWizard.tsx:43) into focused phase/form components, reducing function complexity. - Reduced counted lines in [DesktopExperience.test.tsx](/tmp/git-processor/worktrees/integry/propr/pr-1978-followup-2026-08-29T19-16-57/propr-ui/src/desktop/DesktopExperience.test.tsx:13) without changing behavior. Verification passed: - UI lint with zero warnings - UI typecheck - UI production build - 26 desktop renderer tests - `git diff --check` Only those two files changed; no commit was created. PR: #1978 Comment by: @github-actions[bot] (ID: 5464300976) Model: gpt-5.6-sol
|
/fix F1 F2 F3 F4 F5 F6 F7 Apply the seven Ultrafix blockers as one hardened local-setup design, with these independent requirements:
Re-run clean UI/desktop/local-setup/CLI validation, production package, and wizard tests, then request a fresh /review. Stay based on 1951-epic-desktop-experience-uxs; do not merge to main. |
|
✅ Applied the requested follow-up changes in commit 546713a
Summary of ChangesImplemented F1–F7 as a unified hardened local-setup design:
Validation passed:
The branch remains based on 🤖 Implementation Details
Undo Changes • View Task Execution 💡 ProPR Slash Commands
🤖 Generated by ProPR |
Implemented F1–F7 as a unified hardened local-setup design: - Removed renderer credential IPC and duplicate remote pairing/auth injection. - Added native filesystem selection with session-bound, expiring, single-use capabilities. - Enforced the official relay origin and strict runtime IPC schemas. - Added process-tree cancellation with bounded cleanup and no late writes. - Added validated, redacted resume plans and shared hydration. - Centralized secret redaction across renderer events, persistence, logs, and diagnostics. - Expanded security, cancellation, restart, platform-gating, and wizard tests. Validation passed: - Desktop typecheck, tests, and lint - Local-setup tests: 10 passed - CLI setup tests: 130 passed - Wizard/UI tests: 26 passed - Process-tree cancellation test - UI production build - CLI package dry run - Electron production package - `git diff --check` The branch remains based on `1951-epic-desktop-experience-uxs`; nothing was committed or merged. A fresh `/review` should be posted after the automation commits and publishes this delta. PR: #1978 Comment by: @integry (ID: 5464383143) Model: gpt-5.6-sol
|
/review\n\nReview exact hardened local-wizard head 546713a before its final runtime-base sync. Re-audit every prior F1–F7 boundary: no renderer-readable credentials or duplicate remote auth; main-process native selection with opaque session-bound expiring single-use capabilities resistant to forgery, replay and symlink swaps; official relay/origin enforcement; complete bounded discriminated IPC schemas; AbortSignal propagation and process-tree cleanup without late writes; versioned redacted resume plans, awaited hydration, platform revalidation and surfaced persistence failures; centralized redaction in UI, persistence, logs and diagnostics; atomic mode-600 writes. Also review the broad CLI/orchestrator/shared-engine edits for regressions and require Linux platform gating. Treat any secret exposure, TOCTOU/path capability escape, uncancelled child, invalid resume bypass, or duplicate remote ownership as blocker. Score exact head only; do not modify code. |
|
ℹ️ Analyzed the follow-up request by @integry Analysis SummaryReview: BlockExact head:
Focused desktop, local-setup, UI, orchestrator-cancellation, and TypeScript checks passed, but they do not exercise these boundaries. The worktree remains clean; no code was modified. No code changes were necessary based on the current state of the branch. 🤖 Analysis Details
💡 ProPR Slash Commands
🤖 Generated by ProPR |
Full Test Suite ResultsValidation failed during: Full test suite.
View Test Output |
|
!propr Repair every exact-head blocker together on 546713a. Preserve duplicate remote-auth deletion and hardcoded official relay; #1977 owns remote integration.\n\n1. Renderer secret boundary: remove webhook secret input/state/event payload from renderer. Acquire via a native main-process secure one-shot prompt/controller and expose only opaque single-use secret capability/presence label. Main consumes it; resume requires re-entry. Tests must prove a sentinel is absent from DOM, preload/setup IPC, progress/results, persistence, logs and errors.\n\n2. Root authority: default root must be a fixed app-owned 0700 directory with safe ownership/no-link validation. Configured/custom roots require fresh native chooser authority; never trust ConfigManager strings. Consuming a chooser cap must not degrade to reusable pathname authority. Keep anchored main-process directory authority with no-follow/identity-checked relative managed operations, or require reselection after restart. Persisted paths are display metadata, never authority. Regression: select+complete, quit, rename original root, create replacement at identical path, resume must reject/require reselection. Reject symlinked default/children and hardlink targets (outside hardlinked .env must remain byte-identical).\n\n3. Private keys: on capability consumption open once O_NOFOLLOW|O_CLOEXEC, fstat dev/ino/uid/mode/type/size, then atomically copy bytes into app-owned durable 0700 key storage/0600 file. Env/Docker uses only owned copy, never reopens user pathname. Random exclusive same-dir temp, fsync file, rename, fsync dir. Tests swap original after consume and during GitHub step; replacement bytes never read/mounted; cover forged/replay/expiry/session mismatch.\n\n4. Cancellation: rethrow SetupCancellation/AbortError before generic catches. saveWhitelist must not treat abort as validation failure or fall back to .env. Check signal immediately before every commit/rename; return cancelled:true/code cancelled and await settlement with no late writes. Abort each await boundary including whitelist fallback and prove filesystem unchanged.\n\n5. Docker daemon rollback: killing the docker CLI process group is insufficient. Journal deterministic run-owned container name/labels before launch. On abort use a fresh bounded cleanup signal to inspect/stop/rm exact run-owned migration/current service containers even when daemon side effect happened before client returned, then rollback previously started services and await cleanup before cancellation settles. Never touch preexisting/foreign containers; record preexistence/ownership. Stateful fake-daemon regression: container created then client aborts pre-response; owned current/migration and started containers removed, foreign/preexisting untouched, retry only after settlement.\n\n6. Linux gating: shared runSetup rejects before reporter/mutator actions on Darwin/Windows; CLI wrapper also rejects. Tests assert zero actions/writes/containers on both and on retry.\n\n7. Atomic persistence: one shared writer for resume and .env. Parent 0700; reject symlink/hardlink target; unpredictable exclusive wx 0600 temp in same dir; full write+fsync; signal check; rename; verify/chmod final 0600; fsync directory; cleanup temp on failure. No direct in-place .env writes. Test precreated PID-temp symlink, permissive temp, target symlink, hardlinked .env, mid-write/rename failure retaining prior bytes/outside unchanged, final mode 0600.\n\n8. Complete bounded schemas/redaction/hydration remain intact. Either validate/use loginAgents or remove the dead accepted field.\n\n9. Fix exact full-suite regression: test/cliAgentValidation.test.ts mock orchestrators must implement dockerAsync without weakening assertions. Clean desktop test preparation must build local-setup before setup-controller tests (coordinate with the eventual shared prepare:renderer/pretest fix from #1977; do not introduce recursion). Run clean npm ci, direct desktop tests, local-setup/CLI/orchestrator cancellation tests, configured UI tests, full suite, typechecks, production Electron package, sandboxed smoke, git diff --check. |
|
✅ Applied the requested follow-up changes in commit dfba5ac Summary of ChangesImplemented all requested exact-head blockers without committing. Key outcomes:
Validation:
🤖 Implementation Details
Undo Changes • View Task Execution 💡 ProPR Slash Commands
🤖 Generated by ProPR |
…tting. Implemented all requested exact-head blockers without committing. Key outcomes: - Renderer no longer handles webhook secret bytes; main uses a native prompt and opaque, expiring, session-bound one-shot capabilities. - Root and private-key authority now use ownership/link/inode validation, anchored directory authority, and durable app-owned key copies. - Added shared atomic 0700/0600 persistence with no-follow, hardlink rejection, fsync, cancellation checks, and failure cleanup. - Cancellation propagates correctly with no fallback or late writes. - Docker abort cleanup journals and removes only run-owned daemon-side containers. - Linux gating occurs before reporters or mutations. - Removed dead `loginAgents`; preserved official relay enforcement and existing remote-auth deletion. - Added clean desktop preparation and the missing `dockerAsync` test mock. - Stabilized the UI manager shortcut regression. Validation: - Clean `npm ci`: passed, 0 vulnerabilities. - Desktop: 46/46. - Local setup: 12/12. - Focused CLI/orchestrator: 89/89. - UI: 69 files, 496/496. - Full runner: all 323 non-UI entries passed; its final UI timing failure was fixed and the complete UI workspace then passed. - Root, desktop, and UI typechecks: passed. - Production Electron package: passed. - `git diff --check`: passed. - Packaged sandbox smoke could not run because the container cannot configure Chromium’s root-owned SUID sandbox or create user namespaces. I did not weaken it with `--no-sandbox`. PR: #1978 Comment by: @integry (ID: 5464699344) Model: gpt-5.6-sol
|
!propr Fix three exact-head correctness issues on dfba5ac while preserving all existing secret, key-copy, cancellation, Linux-gate, atomic-write, and Docker ownership hardening.
Run cancellation repeatedly plus setup-controller/security/private-filesystem/local-setup/CLI/orchestrator, clean desktop tests, configured UI, full suite, typechecks, package/smoke where supported, and git diff --check. Do not merge the advanced UX base yet. |
|
✅ Applied the requested follow-up changes in commit be3d9f9 Summary of ChangesImplemented the three exact-head fixes on Key changes:
Validation passed:
Environment limitations:
🤖 Implementation Details
Undo Changes • View Task Execution 💡 ProPR Slash Commands
🤖 Generated by ProPR |
… committing or merging the advanced UX base. Implemented the three exact-head fixes on `dfba5ac` without committing or merging the advanced UX base. Key changes: - Fixed cancellation fake output using synchronous fd-1 writes; cleanup now repeatedly proves exact run-owned removal while preserving foreign/preexisting containers. - Added main-only descriptor-anchored root operations for setup, filesystem commits, Docker handoff, and fixed-root lifecycle actions. Custom lifecycle roots now require reselection. - Guarded final stack status, abort checks, Docker error/nonzero handling, and awaited exact-label cleanup. - Added atomic-root replacement and Docker-launch race regressions. Validation passed: - Cancellation regression: 5 repeated mid-launch runs, final-`docker ps` abort, and nonzero status case - 120 focused setup/CLI/orchestrator tests - Desktop: 48/48 - Configured UI: 26/26 - Local-setup, CLI, desktop, and UI typechecks - CLI package dry run - Linux desktop packaging - `git diff --check` Environment limitations: - Full 324-entry suite was attempted but Redis is unavailable; `llmMetrics.test.ts` reached the runner’s 180-second timeout. - Packaged smoke was blocked by the Electron `chrome-sandbox` ownership/mode requirement. - Docker is unavailable for a real daemon smoke test. PR: #1978 Comment by: @integry (ID: 5465027279) Model: gpt-5.6-sol
|
!propr Fix four exact-head blockers on be3d9f9 without merging the conflicting UX base.
Run orchestrator cancellation under parallel and serial load repeatedly; setup controller, capabilities, private filesystem, local-setup, CLI and lifecycle tests; configured UI and full suite with Redis; typechecks; Linux package and sandboxed smoke where available; inspect Docker HostConfig in tests; git diff --check. Preserve renderer secret absence, durable owned private-key copy, abort-before-commit, exact-label cleanup, final-status guarded lifetime, Linux host gating, no custom root mounts, and zero main merge. |
|
✅ Applied the requested follow-up changes in commit 73ddce0 Summary of ChangesImplemented all four blockers on exact head
Validation passed:
Real Docker restart/smoke, Redis full-suite execution, Xvfb sandbox smoke, and 🤖 Implementation Details
Undo Changes • View Task Execution 💡 ProPR Slash Commands
🤖 Generated by ProPR |
…5cd79a3af140600c3dec75e0f9` without merging or committing. Implemented all four blockers on exact head `be3d9f933243015cd79a3af140600c3dec75e0f9` without merging or committing. - Docker binds now use only the validated private `<userData>/desktop/local-stack` root—never `/proc/.../fd`, `/dev/fd`, chooser paths, symlinks, or renderer values. - Removed custom runtime-root selection and resume state; lifecycle and retries always reopen the fixed root. - Cleanup now re-inspects after every stop result and force-removes only the same exactly labeled setup-run container. - Cancellation coverage uses deterministic, bounded serial iterations and passes alongside parallel tests. - Added persisted HostConfig/restart, replacement sentinel, root identity, and nonzero-stop regression coverage. Validation passed: - Desktop tests: 49/49 - Root unit suite: 278/278 - UI suite: 496/496 - CLI suite: 331 passed, one platform skip - Orchestrator suite: 110/110 - Local setup, typechecks, and Linux desktop packaging - Repeated serial/parallel cancellation runs - `git diff --check` Real Docker restart/smoke, Redis full-suite execution, Xvfb sandbox smoke, and `.deb` creation were unavailable because Docker, Redis, `xvfb-run`, and `fakeroot` are not installed. PR: #1978 Comment by: @integry (ID: 5465215437) Model: gpt-5.6-sol
|
/ultrafix goal=9 max=6 Audit and harden exact head 73ddce0 only; do not merge or sync the base. Prove the Linux setup wizard has one durable app-owned runtime root under Electron userData for .env/data/logs/repos and every persisted Docker HostConfig bind. No /proc/PID/fd, /dev/fd, native chooser path, symlink, renderer value, or transient authority pathname may reach Docker. Keep descriptor-anchored reads/writes where possible while Docker receives only the revalidated stable path. Require link-free owner-only ancestry and exact identity revalidation at each lifecycle/setup boundary; no custom runtime-root selection or stale resume authority; exact run-label reinspection after every stop result and rm -f only if still owned; foreign replacements untouched; cancellation deterministic under serial and parallel load; renderer never receives raw secrets or paths. Check startup/running/stop/retry after restart, same-user path replacement windows, missing/corrupt state, crash recovery, non-Linux unavailable UX, and no TOCTOU regression caused by mixing descriptor read roots with stable Docker roots. Run focused setup/lifecycle/orchestrator tests, repeated parallel cancellation, desktop/UI/client typechecks, configured full suite, Linux production package/smoke where available, and git diff --check. Stop below 9/10 or on any security/durability blocker and report exact findings. |
|
🔄 Ultrafix loop started (goal: 9/10, max cycles: 6) First action:
|
|
✅ AI Code Review Complete requested by @integry Posted 1 review: |
|
Independent exact-head blocker for the running Ultrafix gate: fixed-root lifecycle Stop/Start/Restart is currently broken. Fix without weakening setup-run ownership: either lifecycle Stop removes only exact verified ProPR service containers while preserving named-volume/fixed-root data, or add a distinct lifecycle start/restart path that re-inspects exact |
|
Second independent exact-head blocker for the active review: rollback uses one 15-second AbortController for the entire sequential reverse journal ( Perform exact-label inspect/stop/reinspect/rm cleanup entries concurrently under one justified cleanup-wide deadline, or derive a defensible worst-case bound from journal size and per-command grace. Await all settlements, preserve fail-closed exact run-label checks, and report any residual cleanup failures explicitly rather than presenting successful cancellation. Add delayed fake coverage near the two-second stop grace for all core plus optional containers; prove every same-run record is gone before cancellation settles while foreign/replacement records survive. This also compounds the retained-container retry/restart blocker: a partial cleanup leaves names that every later setup start rejects. |
🔍 AI Code Review — codex:gpt-5.6-solOverall EvaluationThis PR adds a substantial Linux setup wizard with capability-based secret handling, fixed-root filesystem authority, resumable state, lifecycle controls, and cancellation support. However, it is not ready to merge: the production renderer bridge cannot connect even after successful setup, and several cancellation, TOCTOU, renderer-boundary, and concurrency invariants remain violated. The supplied diff is explicitly partial, so omitted setup-controller and orchestrator ranges could not be fully verified. ✅ Opaque renderer capabilities — Private-key paths and webhook-secret bytes remain in Electron main; the renderer receives only bounded, session-bound capability tokens. ✅ Safer private persistence — ✅ Stable Docker bind intent — The start-stack path separates descriptor-rooted configuration reads from stable bind paths and revalidates authority before container launch. Merge blockersEvery finding below was introduced by this PR and must be resolved before merging. F8: 🔴 Production connections always fail
F9: 🔴 Cancellation is converted into failure
F10: 🔴 Root authority does not cover all mutations
F11: 🔴 Lifecycle errors cross the renderer boundary
F12: 🔴 Lifecycle mutations are not serialized
SuggestionsThese are optional follow-ups and are not sent to S1: 🟢 Automate the full verification matrixThe authoritative head status contains no passing checks, while the added orchestrator cancellation test runs its iterations serially with S2: 🟢 Centralize the renderer contract
ScoreThe PR contains strong security-oriented foundations, but the production connection path is currently nonfunctional and multiple required boundary and concurrency guarantees remain unresolved. No authoritative passing head checks are available, and part of the security-critical diff was omitted. Score: 4/10 🤖 Review Details
Files omitted from review diff1 file was omitted because patch content was unavailable from GitHub or did not fit the review context budget. Large, binary, generated, and lockfile changes are deprioritized.
🤖 Review by ProPR |
|
Ultrafix scope/integration constraint for F8–F12: PR #1978 owns the Linux local-setup wizard and local lifecycle only. Do not duplicate or regress the ProfileStore, browser pairing, bearer token, transportScope, SocketProvider, authenticated attachment, or remote-origin logic owned by PR #1977. For F8, implement the minimal functional local-profile probe/transition through the existing desktop connection adapter boundary (or preserve a clean injectable seam), with bounded/redacted errors; remote pairing/auth will arrive when the reviewed transport branch is reconciled later. The next fix cycle must also include the two independently proven blockers already commented but absent from the partial review: (1) Stop→Start/Restart and retry after a legitimately stopped stack cannot reuse retained service names; (2) one 15-second sequential rollback deadline cannot cover up to nine valid two-second stop graces. Keep exact-label ownership, foreign replacement safety, durable fixed-root HostConfig binds, and do not base-sync or merge. |
|
!propr Fix the exact 73ddce0 local-wizard gate, covering review F8-F12 plus the two independent blockers; do not merge or sync the base. Preserve the durable fixed-root, secret/key/cancellation/Linux-gate fixes. F8 scope: PR #1978 owns Linux local setup/lifecycle only. Make the post-setup local profile transition/probe functional through the existing injectable desktop connection boundary with bounded/redacted errors. Do not duplicate or change ProfileStore browser pairing, bearer tokens, transportScope, SocketProvider, authenticated blobs, or remote-origin behavior owned by PR #1977. F9: every catch around abortable gh/fetch/login/relay/token/version operation must rethrow cancellation before fallback classification; pre-abort and boundary abort cannot write a token/secret or continue. F10: thread the descriptor read root through every config consumer including pullImages, status, backend/API/profile URL resolution and start; only stable root paths reach Docker binds. Revalidate authority immediately before each pull/API/Docker mutation and after awaits. F11: renderer lifecycle errors/status are fixed, bounded and redacted; raw host/Docker/path/env diagnostics stay in a centrally redacted main log, never IPC exceptions. F12: one main-process coordinator serializes or deterministically rejects setup, start, stop, restart, cancel and shutdown before any host action; shutdown/cancel awaits cleanup. Independent blocker 1: lifecycle Stop currently retains legitimate service containers, while Start/Restart/setup retry rejects every pre-existing service name. Add a distinct safe lifecycle recovery path: re-inspect exact Independent blocker 2: one 15-second sequential rollback deadline cannot cover up to nine containers with two-second stop grace plus inspections/rm. Clean independent exact-run journal entries concurrently under justified per-command and cleanup-wide deadlines, await all settlements, re-inspect exact labels after every stop result, preserve foreign replacements, and surface residual cleanup failure explicitly. Add delayed fakes near stop grace for core+UI+docs+tunnel and prove cancellation never reports clean while same-run containers remain. Run focused setup/lifecycle/orchestrator/cancellation tests repeatedly under serial and parallel load, setup-vs-lifecycle/cancel-vs-shutdown races, desktop/UI/client/local-setup/CLI typechecks, configured full suite, Linux production package/smoke where available, and git diff --check. No unrelated remote-auth implementation. |
|
✅ Applied the requested follow-up changes in commit 61961b3 Summary of ChangesImplemented the exact-head follow-up on Key results:
Validation passed:
The configured full suite reached test 188 before Redis-dependent tests failed with 🤖 Implementation Details
Undo Changes • View Task Execution 💡 ProPR Slash Commands
🤖 Generated by ProPR |
…9ef80d672c21cd8532d111` without merging, syncing, or committing. Implemented the exact-head follow-up on `73ddce0bb05d7773049ef80d672c21cd8532d111` without merging, syncing, or committing. Key results: - Added injectable, loopback-only local profile probing without touching PR #1977 remote-auth ownership. - Hardened cancellation boundaries around GitHub, fetch, relay, token, version, and persistence operations. - Threaded descriptor-root reads and authority revalidation through all local configuration consumers. - Added fixed/redacted lifecycle IPC errors and protected main-process diagnostics. - Added a single setup/lifecycle/cancel/shutdown coordinator. - Added exact-label, fixed-bind lifecycle recovery supporting Stop → Start/Restart and partial stopped stacks while rejecting foreign replacements. - Made rollback concurrent with bounded deadlines, post-stop ownership inspection, residual detection, and explicit incomplete-cleanup failure. Validation passed: - Desktop: 63 tests - Local setup: 12 tests - CLI setup engine: 59 tests - API: 8 tests - Repeated serial/parallel orchestrator suites: 61 tests per run - Desktop/UI, CLI, local-setup, and client typechecks - Linux x64 production packaging - `git diff --check` - Canonical and packaged orchestrators match The configured full suite reached test 188 before Redis-dependent tests failed with `ECONNREFUSED`; `redis-server` is unavailable here. Docker and `xvfb-run` are also unavailable, so their smoke tests could not run. PR: #1978 Comment by: @integry (ID: 5465406860) Model: gpt-5.6-sol
|
!propr Fix only the remaining exact-head rollback proof blocker on 61961b3. Do not merge or sync the conflicting base; preserve every durable-root, lifecycle, cancellation, redaction, coordinator, and concurrent-cleanup fix.
Add deterministic regressions for exact not-found/disappears-between-checks, generic nonzero inspect with container still present, daemon/permission failure, timeout/signal/malformed/truncated output, ambiguous/duplicate exact-name rows, and later successful retry. Assert cleanup reports fixed Rebuild workspace dependencies first, then run setup-controller 21/21, orchestrator cancellation/concurrent-cleanup/lifecycle/config suites, local-setup and CLI tests, desktop/UI typechecks, canonical/built orchestrator drift check, full configured suite where available, and git diff --check. No unrelated auth/transport work. |
|
✅ Applied the requested follow-up changes in commit a6b5b5c Summary of ChangesImplemented the exact-head rollback proof fix without merging/syncing or touching auth/transport work. Key changes:
Validation passed:
The full 329-file suite completed all tests through the first 183 files successfully, then encountered unavailable Redis ( 🤖 Implementation Details
Undo Changes • View Task Execution 💡 ProPR Slash Commands
🤖 Generated by ProPR |
…ng/syncing or touching auth/transport work. Implemented the exact-head rollback proof fix without merging/syncing or touching auth/transport work. Key changes: - Failed/malformed `docker inspect` now requires a separate bounded exact-name query before absence is accepted. - Nonzero, timeout, signal, truncation, malformed, ambiguous, duplicate, or present query results fail closed with `PROPR_SETUP_CLEANUP_INCOMPLETE`. - The classifier is reused before stop, after stop, after remove, and during final residual verification. - Docker output is capped/discarded and excluded from renderer-facing errors/logs. - Added deterministic rollback regressions in [orchestratorRollbackAbsenceProof.test.mjs](/tmp/git-processor/worktrees/integry/propr/pr-1978-followup-2026-08-30T00-23-23/test/orchestratorRollbackAbsenceProof.test.mjs:18). - Updated bounded-result typing in [types.ts](/tmp/git-processor/worktrees/integry/propr/pr-1978-followup-2026-08-30T00-23-23/packages/cli/src/orchestrator/types.ts:121). Validation passed: - Setup controller: 21/21 - Orchestrator focused suites: 62/62 - Local setup: 12/12 - All 30 CLI non-live test files - Desktop/UI and CLI typechecks - Canonical/built orchestrator byte comparisons - `git diff --check` The full 329-file suite completed all tests through the first 183 files successfully, then encountered unavailable Redis (`ECONNREFUSED 127.0.0.1:6379`). Neither Redis nor Docker is installed in this environment, so the unavailable remainder was stopped. HEAD remains exactly `61961b3dee25bfb5c7d27f10a0fe16b751e363a0`. PR: #1978 Comment by: @integry (ID: 5465725447) Model: gpt-5.6-sol
AI Implementation Summary
Closes #1960
Branch:
1960/gpt-5.6-sol-implement-the-guided-loca-20260829-1840-7k8Commits: ✅ Changes committed (587b7ee)
AI Processing Completed
Execution Details:
Summary:
Implemented the guided local Linux setup wizard.
Key changes:
@propr/local-setupusing CLI launcher host operations.Verification passed:
npm run desktop:typechecknpm run desktop:testnpm run test -w @propr/local-setupnpm run test -w propr-ui -- src/desktop/DesktopExperience.test.tsx src/desktop/browserAdapters.test.tsnpm run desktop:packageA disposable Docker-stack smoke test could not run because Docker is unavailable. The packaged-binary Xvfb smoke test and macOS/Windows runtime behavior could not be exercised locally because
xvfb-runand those platforms are unavailable.Detailed Logs:
01a04ed3-7fe4-79f0-aca5-05fda8423a2eLog files stored at:
/tmp/claude-logs/issue-1960-2026-08-29T19-03-14-616Z-conversation.json/tmp/claude-logs/issue-1960-2026-08-29T19-03-14-616Z-output.txtLatest Conversation Messages
This PR was created automatically by ProPR after processing issue #1960.
💡 Need changes?
Comment on this PR to request refinements — the AI agent monitors comments and will update the implementation based on your feedback. Keep iterating until you're satisfied!