Skip to content

[2083 by GPT-5.6 Sol] Prove native macOS/Linux desktop artifact install and deep-link lifecycle - #2085

Open
propr-dev[bot] wants to merge 5 commits into
1952-epic-electron-runtime-appfrom
2083/gpt-5.6-sol-prove-native-macos-linux--20260902-1955-v0y
Open

[2083 by GPT-5.6 Sol] Prove native macOS/Linux desktop artifact install and deep-link lifecycle#2085
propr-dev[bot] wants to merge 5 commits into
1952-epic-electron-runtime-appfrom
2083/gpt-5.6-sol-prove-native-macos-linux--20260902-1955-v0y

Conversation

@propr-dev

@propr-dev propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

AI Implementation Summary

Closes #2083

Branch: 2083/gpt-5.6-sol-prove-native-macos-linux--20260902-1955-v0y
Commits: ✅ Changes committed (603ef9c)


AI Processing Completed

Execution Details:

Summary:
Implemented GitHub issue #2083.

Key changes:

  • Added a native staged-artifact lifecycle harness for Linux DEB/RPM/ZIP and macOS DMG/ZIP.
  • Added bounded first-launch, warm deep-link, shutdown, relaunch, state-preservation, architecture/identity, secure-storage, path/symlink, and cleanup evidence.
  • Added Linux XDG/GIO and macOS LaunchServices protocol registration/dispatch checks.
  • Added duplicate deep-link suppression and fail-closed evidence.
  • Added Linux x-scheme-handler/propr package metadata.
  • Integrated the lifecycle gate into all four unsigned macOS/Linux native CI matrix jobs.
  • Updated the desktop packaging runbook with internal-RC install/use/uninstall commands and platform limitations.
  • Preserved unsigned macOS behavior without Gatekeeper bypasses or signing/notarization claims.

Verification:

  • Desktop typecheck passed.
  • Desktop suite passed: 189 tests, 6 platform-specific skips.
  • Focused lifecycle/deep-link tests passed.
  • git diff --check passed.
  • Confirmed locked qs 6.16.0 and fast-uri 3.1.6.
  • The full repository suite reached test 197 before blocking on unavailable Redis at 127.0.0.1:6379.
  • Native artifact execution could not run locally because this container lacks fakeroot, RPM, ZIP, Xvfb, and macOS runners; the CI matrix now provides those native environments.

Detailed Logs:

  • Conversation: 139 messages
  • Session: 01a063b1-c34c-78f0-a1d2-ed543df4f095

Log files stored at:

  • conversation: /tmp/claude-logs/issue-2083-2026-09-02T20-24-12-742Z-conversation.json
  • output: /tmp/claude-logs/issue-2083-2026-09-02T20-24-12-742Z-output.txt
Latest Conversation Messages

This PR was created automatically by ProPR after processing issue #2083.


💡 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!

…act install

Implemented by ProPR AI using gpt-5.6-sol model.

Implementation completed successfully.
@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

CI failed: Validate unsigned win32-x64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned win32-x64 package
  • Result: failure
  • Commit: 603ef9c688a6 (603ef9c688a65390f2dff55646223dff3b75193f)
  • Details: View CI failure

Failure evidence

.github:15
Process completed with exit code 1.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

CI failed: Validate unsigned darwin-arm64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned darwin-arm64 package
  • Result: failure
  • Commit: 603ef9c688a6 (603ef9c688a65390f2dff55646223dff3b75193f)
  • Details: View CI failure

Failure evidence

.github:31
Process completed with exit code 1.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

CI failed: Validate unsigned win32-arm64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned win32-arm64 package
  • Result: failure
  • Commit: 603ef9c688a6 (603ef9c688a65390f2dff55646223dff3b75193f)
  • Details: View CI failure

Failure evidence

.github:15
Process completed with exit code 1.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

CI failed: Validate unsigned darwin-x64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned darwin-x64 package
  • Result: failure
  • Commit: 603ef9c688a6 (603ef9c688a65390f2dff55646223dff3b75193f)
  • Details: View CI failure

Failure evidence

.github:31
Process completed with exit code 1.

@integry

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Please implement one tightly scoped macOS/Linux-only follow-up on the exact current PR head. Do not change Windows code/tests/jobs, package-lock.json, public signing/notarization/update credentials, or release-profile behavior.

Required corrections:

  1. Make spawned-process cleanup total on every success and failure path. Track every detached application/process group, including the initial launch and relaunch. If an evidence wait, dispatch, validation, or later cleanup fails, send bounded TERM/KILL as needed, wait for close, and prove the complete owned process group is gone. Preserve the original failure while surfacing cleanup failure deterministically; do not leave GitHub runner orphan cleanup as the authority.

  2. Model DMG mount authority immediately after hdiutil attach succeeds, not only after scan/copy returns. Every subsequent error must enter a mandatory detach path. Do not swallow detach failure. Verify the mount is gone before removing the mount root, with focused injected-failure tests for attach-success followed by scan/copy failure.

  3. Make macOS LaunchServices cleanup fail closed. Do not swallow lsregister -u; add a bounded postcondition showing the exact copied bundle registration no longer resolves after removal/unregistration. Distinguish OS-managed LaunchServices database writes from app-owned writes without claiming cleanup if stale registration remains.

  4. Do not swallow profile/server cleanup failures or let outer recursive removal mask them. Close the profile API and prove it is no longer listening; remove the authorized private profile via its authority API and verify it is absent. Aggregate original and cleanup errors safely without logging paths/endpoints/secrets.

  5. Prove renderer consumption, ordering, and exactly-once handling for every deep link. Main-process IPC send is not sufficient evidence. Add bounded renderer acknowledgements or separately observable renderer state for cold manual, cold tunnel, warm manual, warm tunnel, and warm open. Wait for each acknowledgement before the next dispatch, verify exact-one counts, and prove warm links reached the already-running instance. The open link must prove the intended queued/navigation state, not merely that IPC sent it.

  6. Be explicit about cold dispatch evidence. Current cold starts directly execute the app binary with an argv URL, while only warm tunnel uses gio/LaunchServices. Either add a true cold OS protocol-dispatch lifecycle in the strongest reliable native form, or label/report/document cold evidence as direct argv and OS registration as warm-only. Do not call direct argv an OS protocol launch.

  7. Linux currently runs under dbus-run-session but the sanitized application/dispatch environments drop DBUS_SESSION_BUS_ADDRESS, and CI logs show DBus NameHasOwner errors. Implement an isolated, validated DBus/libsecret/keyring proof if reliably possible: forward only the freshly created session bus address through a strict validator, start/stop a scoped secret-service daemon, prove a real non-basic_text round trip and deletion, and clean all owned processes/state. If the hosted runner cannot support that reliably, retain fail-closed plaintext refusal and classify/report/document the Linux result honestly as fallback-only; do not claim libsecret custody was exercised merely because libsecret-1-0 is installed.

  8. Fix RPM extraction completion authority. Await and validate both rpm2cpio and cpio exit statuses; cpio success must not resolve before a late converter failure. Bound and clean both processes on errors/timeouts.

  9. Strengthen focused tests with executable/injected adversarial fixtures covering: evidence timeout after a live child starts; process-group cleanup; attach-success then scan/copy failure and detach verification; LaunchServices unregister failure/stale result; server/profile cleanup failure; renderer acknowledgement ordering/duplicate delivery; escaping and special-file symlink targets; and late nonzero rpm2cpio after cpio completion. Avoid static string-presence tests as the principal proof.

Keep the existing accurate unsigned internal-RC disclaimers, canonical qs 6.16.0 / fast-uri 3.1.6 lock, no-basic_text/plaintext fallback, 0600/0700 authority, native architecture/identity checks, and Linux/macOS staged-artifact coverage. Run focused desktop/lifecycle tests, full suite, git diff --check, and all four Linux/macOS native jobs. Leave unmerged for audit.

@integry integry added AI and removed AI labels Sep 2, 2026
@integry

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Retrigger: implement the complete scoped macOS/Linux-only correction request in my immediately preceding comment (#2085 (comment)) on exact current head. Treat all automated Windows failure comments as out of scope. No Windows, lockfile, signing/notarization, update-credential, or release-profile changes. Leave unmerged for audit.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

Applied the requested follow-up changes in commit 7c498d7

Summary of Changes

Implemented the complete scoped macOS/Linux follow-up on base HEAD 603ef9c688a65390f2dff55646223dff3b75193f.

Key changes:

  • Total bounded process-group cleanup for initial launch, dispatches, and relaunch.
  • Immediate DMG mount authority with mandatory verified detach.
  • Fail-closed LaunchServices unregister and exact copied-bundle absence checks.
  • Bounded profile API shutdown, listening-port proof, authorized profile removal, and redacted aggregate failures.
  • Renderer acknowledgements proving ordered, exactly-once Connect/Open consumption.
  • Cold launches explicitly reported as direct argv; OS protocol testing remains warm-only.
  • Linux secure-storage evidence explicitly fallback-only without claiming libsecret custody.
  • RPM pipeline now awaits both processes and handles late failures.
  • Added adversarial cleanup, symlink/special-file, and process fixtures.
  • Updated native lifecycle documentation.

Verification:

  • Desktop typecheck: passed.
  • Desktop suite: 198 tests, 192 passed, 6 platform skips.
  • Renderer deep-link tests: 5 passed.
  • Native authority fixtures: 11 passed.
  • git diff --check: passed.
  • Full repository suite reached test 197 before blocking on unavailable Redis at 127.0.0.1:6379.
  • Native artifact execution requires staged artifacts and the four Linux/macOS architecture runners, unavailable locally.
  • package-lock.json, workflows, Windows behavior, signing/notarization, update credentials, and release profiles remain unchanged.
  • Locked qs 6.16.0 and fast-uri 3.1.6 confirmed.

Changes are left uncommitted and unmerged for audit.


🤖 Implementation Details

  • Model: GPT-5.6 Sol (high)
  • Requested By: @integry
  • Time: 31m 36s
  • Tokens: 8,393,902 (8,328,852 in / 65,050 out)
  • Cost: $7.55

Undo ChangesView Task Execution


💡 ProPR Slash Commands
Command Description Example
/merge Merge target branch into this PR and resolve conflicts /merge
/review Request an AI code review /review or /review claude-sonnet
/fix Implement fixes for issues found by /review /fix or /fix address the null check issue
/switch Change the AI model for this PR /switch claude-opus
/use Override the model for a single follow-up run /use claude-sonnet
/ultrafix Loop review→fix cycles until score goal is met /ultrafix or /ultrafix goal=8 max=10

🤖 Generated by ProPR
Processing comment ID: 5516001642✓

@integry integry removed the AI label Sep 2, 2026
…se HEAD `603ef9c688a65390f2dff55646223dff3b75193f`.

Implemented the complete scoped macOS/Linux follow-up on base HEAD `603ef9c688a65390f2dff55646223dff3b75193f`.

Key changes:

- Total bounded process-group cleanup for initial launch, dispatches, and relaunch.
- Immediate DMG mount authority with mandatory verified detach.
- Fail-closed LaunchServices unregister and exact copied-bundle absence checks.
- Bounded profile API shutdown, listening-port proof, authorized profile removal, and redacted aggregate failures.
- Renderer acknowledgements proving ordered, exactly-once Connect/Open consumption.
- Cold launches explicitly reported as direct argv; OS protocol testing remains warm-only.
- Linux secure-storage evidence explicitly fallback-only without claiming libsecret custody.
- RPM pipeline now awaits both processes and handles late failures.
- Added adversarial cleanup, symlink/special-file, and process fixtures.
- Updated [native lifecycle documentation](</tmp/git-processor/worktrees/integry/propr/pr-2085-followup-2026-09-02T20-33-31/apps/desktop/README.md>).

Verification:

- Desktop typecheck: passed.
- Desktop suite: 198 tests, 192 passed, 6 platform skips.
- Renderer deep-link tests: 5 passed.
- Native authority fixtures: 11 passed.
- `git diff --check`: passed.
- Full repository suite reached test 197 before blocking on unavailable Redis at `127.0.0.1:6379`.
- Native artifact execution requires staged artifacts and the four Linux/macOS architecture runners, unavailable locally.
- `package-lock.json`, workflows, Windows behavior, signing/notarization, update credentials, and release profiles remain unchanged.
- Locked `qs` 6.16.0 and `fast-uri` 3.1.6 confirmed.

Changes are left uncommitted and unmerged for audit.

PR: #2085
Comment by: @integry (ID: 5516001642)
Model: gpt-5.6-sol
@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

CI failed: Validate unsigned win32-x64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned win32-x64 package
  • Result: failure
  • Commit: 7c498d7a19de (7c498d7a19de5e204f5e93d19702d05b48d5f5be)
  • Details: View CI failure

Failure evidence

.github:15
Process completed with exit code 1.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

CI failed: Validate unsigned win32-arm64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned win32-arm64 package
  • Result: failure
  • Commit: 7c498d7a19de (7c498d7a19de5e204f5e93d19702d05b48d5f5be)
  • Details: View CI failure

Failure evidence

.github:15
Process completed with exit code 1.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

CI failed: Validate unsigned linux-arm64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned linux-arm64 package
  • Result: failure
  • Commit: 7c498d7a19de (7c498d7a19de5e204f5e93d19702d05b48d5f5be)
  • Details: View CI failure

Failure evidence

.github:33
Process completed with exit code 1.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

CI failed: Validate unsigned linux-x64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned linux-x64 package
  • Result: failure
  • Commit: 7c498d7a19de (7c498d7a19de5e204f5e93d19702d05b48d5f5be)
  • Details: View CI failure

Failure evidence

.github:33
Process completed with exit code 1.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

CI failed: Validate unsigned darwin-arm64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned darwin-arm64 package
  • Result: failure
  • Commit: 7c498d7a19de (7c498d7a19de5e204f5e93d19702d05b48d5f5be)
  • Details: View CI failure

Failure evidence

.github:48
Process completed with exit code 1.

@integry

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Scoped macOS/Linux/shared lifecycle correction on current head 7c498d7 only. Preserve the completed lifecycle hardening and make exactly these two corrections:

  1. Normal production deep-link acknowledgement failure must never terminate the desktop application. The current DeepLinkDelivery failure callback in main.ts unconditionally calls app.exit(1) on timeout/unexpected renderer consumption. Keep native artifact smoke fail-closed/fatal so CI evidence cannot pass without acknowledgement, but in non-smoke production handle the failure safely (bounded, no secret-bearing diagnostics, no crash/exit). Add focused tests proving smoke remains fatal and normal production does not exit; structure the policy as a testable helper if needed.

  2. LaunchServices authority must be verified absent before deleting the copied application/install root, and remediation authority must not be destroyed when unregister or its exact-record postcondition fails. The current finalizer removes installRoot before launchServices.assertGone(), and LaunchServices failures do not block outer work-root removal. Reorder cleanup so unregister plus exact stale-record query complete before install removal, retain the owned copied bundle/work root on either LaunchServices unregister or postcondition failure, and add an injected orchestration-level adversarial test proving removal does not run in those failure cases and does run after verified absence. Continue aggregating and redacting failures.

Mac/Linux/shared only. Do not modify package-lock, workflows, Windows code/tests/jobs, signing/notarization, update credentials, release profiles, artifact counts/names, or public claims. Run desktop typecheck/tests and focused adversarial tests.

@integry integry added the AI label Sep 2, 2026
@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

CI failed: Validate unsigned darwin-x64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned darwin-x64 package
  • Result: failure
  • Commit: 7c498d7a19de (7c498d7a19de5e204f5e93d19702d05b48d5f5be)
  • Details: View CI failure

Failure evidence

.github:48
Process completed with exit code 1.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

🛑 Execution Cancelled

The task processing was stopped by user request.

You can post a new comment to restart processing.

@integry integry removed the AI label Sep 2, 2026
@integry

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Fresh native-gate classification for the same scoped follow-up:

  • Both Linux lanes fail reproducibly at warm manual dispatch in OwnedProcessGroup.waitForSuccessfulExit: the second-instance main child exits successfully but its process group remains momentarily observable, and the code immediately declares "main process exited before its owned process group" instead of boundedly waiting for normal descendant drain. Preserve total-group ownership, but after main close wait a bounded grace for the group to disappear before classifying it as leaked; only then terminate remaining members and prove absence. Add a fixture with a successful parent whose same-group descendant exits shortly afterward, plus a true lingering descendant fixture that must be killed/proved gone.
  • Both macOS lanes time out in the first DMG lifecycle and then process-group cleanup also fails. Current AggregateError intentionally hides the primary cause so CI reports only generic "primary operation failed"; add a fixed, non-secret operation-stage classification to the error/evidence so a future failure is actionable without emitting paths/endpoints/process output. The approximately 60-second timing indicates the initial evidence deadline followed by group-cleanup deadlines. Investigate/fix the actual first-DMG launch/evidence stall, retaining direct-argv honesty and renderer ACK requirements. A likely contributing issue is that kill(-pgid, 0) treats unreaped zombie helpers as a live group; distinguish running group members from zombie-only remnants using bounded platform-native inspection, or otherwise use a sound lifecycle strategy that both cleans real descendants and does not falsely fail on zombie-only groups.

These are Mac/Linux lifecycle failures from run 33683145899. Fold them into the already requested two corrections in the immediately preceding maintainer comment. Do not touch automated Windows failure comments, Windows code/jobs, package-lock, signing, or release scope.

@integry

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Mac first-DMG root-cause lead to verify, not assume: createSmokeChildEnvironment rewrites HOME to the isolated profile on macOS. Unlike the earlier packaged smoke (which does not perform a credential write), native first launch then calls safeStorage encrypt/decrypt through ProfileStore before renderer-ready. Repointing HOME can detach Chromium safeStorage from the runner login Keychain and plausibly block the custody probe; both architectures show the same 45-second initial-evidence timeout. Capture fixed stage events around the non-secret custody probe to confirm. If confirmed, preserve the real runner HOME only for the macOS native child so Keychain is available, while retaining explicit --user-data-dir, 0700/0600 app-profile authority, before/after default-app-profile absence checks, no endpoint/path diagnostics, and strict cleanup. Do not weaken the macOS Keychain round-trip/deletion assertion and do not create signing/notarization claims.

@integry

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner

/fix

Implement one macOS/Linux/shared-only correction on exact head 7c498d7. This request supersedes all automated CI-failure comments. Preserve the completed lifecycle hardening and address the full audited scope below:

  1. Production safety: DeepLinkDelivery acknowledgement failure in main.ts must be fatal only during native artifact smoke evidence. A normal production acknowledgement timeout/unexpected consumption must fail safely with bounded non-secret diagnostics and must not call app.exit or crash. Add focused policy tests proving native smoke is fatal and production is not.

  2. LaunchServices cleanup authority: unregister and exact copied-bundle absence query must run and succeed before installRoot deletion. On either unregister or postcondition failure, retain the copied app/install/work root for remediation and aggregate a redacted failure. Add orchestration-level injected tests proving removal is blocked on both failures and allowed after verified absence.

  3. Linux x64 and ARM64 fresh failures in run 33683145899: waitForSuccessfulExit currently fails immediately when a successful short-lived second-instance parent closes while its same process group remains briefly observable. Allow a bounded natural descendant drain first; if still live, terminate all running owned-group members and prove them gone. Add real fixtures for a successful parent with a short-lived same-group descendant and a genuinely lingering descendant. Do not confuse zombie-only unreaped entries with running processes; use sound bounded platform-native inspection or equivalent so both no-leak and no-false-positive properties are tested.

  4. macOS x64 and ARM64 fresh failures in run 33683145899: both first DMG lifecycles hit the approximately 45-second initial-evidence deadline and group cleanup then fails, but current AggregateError redacts the primary into an unclassifiable generic message. Add fixed, non-secret operation-stage classification/evidence so future failures identify the lifecycle stage without paths, URLs, credentials, or process output. Diagnose and correct the first-DMG stall without weakening renderer acknowledgements, Keychain custody, or cleanup. Verify the likely safeStorage environment cause from comment 5516511184: native macOS rewrites HOME before the Keychain round-trip whereas ordinary packaged smoke does no credential write. If confirmed, give native macOS the runner Keychain context while retaining explicit isolated --user-data-dir, 0700/0600 authority, before/after default app-profile absence checks, and strict cleanup.

  5. Keep exact renderer acknowledgements, per-dispatch ordering/once counts, honest direct-argv cold classification, Linux fallback-only classification, DMG mandatory verified detach, both RPM pipeline statuses, and all existing adversarial guarantees.

Run desktop typecheck/unit/adversarial tests and obtain fresh macOS x64/ARM64 plus Linux x64/ARM64 native artifact gates. Do not modify package-lock, workflows unless a narrowly necessary Mac/Linux invocation fix is proven, Windows code/tests/jobs, signing/notarization/update credentials, release profile, artifact counts/names, or public release claims. Ignore Windows failures entirely.

@integry integry added the AI label Sep 2, 2026
@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

ℹ️ No authorized review findings were selected.

No files were changed because this /fix command did not select an actionable F# finding. Suggestions require a separate ordinary follow-up request.

View Task Execution


Processing comment ID: 5516525116✓

@integry integry removed the AI label Sep 2, 2026
@integry

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner

IMPLEMENTATION REQUEST — macOS/Linux/shared only.

Implement the complete scoped request in maintainer comment 5516525116 on current head 7c498d7. That request is an ordinary follow-up implementation request (the slash-command handler could not select it because it is not an F-numbered review finding). It explicitly includes: production ACK failure must not exit outside native smoke; LaunchServices absence before removal with authority retained on failure; bounded natural process-group drain plus true leak cleanup and zombie-safe proof for both Linux failures; actionable fixed non-secret stage diagnostics and correction of both macOS first-DMG stalls, including verification of the isolated-HOME/Keychain lead in comment 5516511184; focused adversarial tests and fresh four Mac/Linux native gates.

This request supersedes every automated CI-failure comment. Ignore Windows entirely. Do not change package-lock, Windows code/jobs/tests, signing/notarization/update credentials, release profile, artifacts, or public claims. Preserve all existing completed guarantees listed in comment 5516525116.

@integry integry added AI and removed AI labels Sep 2, 2026
@integry

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Please start the scoped Mac/Linux/shared implementation request in the immediately preceding maintainer comment 5516541390, including the complete requirements it references in 5516525116 and 5516511184. This is the only authorized follow-up; ignore all automated CI comments and all Windows work.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

Applied the requested follow-up changes in commit 90b8610

Summary of Changes

Implemented the complete scoped macOS/Linux/shared follow-up without committing.

Key changes:

  • Production deep-link ACK failures now emit fixed, non-secret diagnostics without exiting or crashing; native artifact smoke remains fatal.
  • LaunchServices unregister and exact absence verification now precede copied-app deletion. Failures retain the install/work root.
  • Process groups receive a bounded natural drain, with zombie-aware inspection and TERM/KILL cleanup for genuine leaks.
  • Native lifecycle failures expose fixed operation stages without paths, URLs, credentials, or process output.
  • macOS native children retain the validated runner HOME for Keychain access while preserving isolated --user-data-dir, permissions, absence checks, and Keychain round-trip/deletion assertions.
  • Added focused adversarial tests for each correction.

Verification:

  • Desktop suite: 207 tests, 201 passed, 6 platform skips.
  • Focused lifecycle/environment suite: 28/28 passed.
  • ACK policy tests: 3/3 passed.
  • Desktop typecheck passed.
  • git diff --check passed.
  • No Windows, workflow, lockfile, signing, release-profile, or artifact-definition changes.

The four architecture-specific native gates require post-commit GitHub macOS/Linux runners and staged artifacts, so they could not be executed truthfully from this uncommitted Linux worktree.


🤖 Implementation Details

  • Model: GPT-5.6 Sol (high)
  • Requested By: @integry
  • Time: 12m 26s
  • Tokens: 3,286,281 (3,257,480 in / 28,801 out)
  • Cost: $3.06

Undo ChangesView Task Execution


💡 ProPR Slash Commands
Command Description Example
/merge Merge target branch into this PR and resolve conflicts /merge
/review Request an AI code review /review or /review claude-sonnet
/fix Implement fixes for issues found by /review /fix or /fix address the null check issue
/switch Change the AI model for this PR /switch claude-opus
/use Override the model for a single follow-up run /use claude-sonnet
/ultrafix Loop review→fix cycles until score goal is met /ultrafix or /ultrafix goal=8 max=10

🤖 Generated by ProPR
Processing comment ID: 5516559539✓

@integry integry removed the AI label Sep 2, 2026
…p without committing.

Implemented the complete scoped macOS/Linux/shared follow-up without committing.

Key changes:

- Production deep-link ACK failures now emit fixed, non-secret diagnostics without exiting or crashing; native artifact smoke remains fatal.
- LaunchServices unregister and exact absence verification now precede copied-app deletion. Failures retain the install/work root.
- Process groups receive a bounded natural drain, with zombie-aware inspection and TERM/KILL cleanup for genuine leaks.
- Native lifecycle failures expose fixed operation stages without paths, URLs, credentials, or process output.
- macOS native children retain the validated runner `HOME` for Keychain access while preserving isolated `--user-data-dir`, permissions, absence checks, and Keychain round-trip/deletion assertions.
- Added focused adversarial tests for each correction.

Verification:

- Desktop suite: 207 tests, 201 passed, 6 platform skips.
- Focused lifecycle/environment suite: 28/28 passed.
- ACK policy tests: 3/3 passed.
- Desktop typecheck passed.
- `git diff --check` passed.
- No Windows, workflow, lockfile, signing, release-profile, or artifact-definition changes.

The four architecture-specific native gates require post-commit GitHub macOS/Linux runners and staged artifacts, so they could not be executed truthfully from this uncommitted Linux worktree.

PR: #2085
Comment by: @integry (ID: 5516559539)
Model: gpt-5.6-sol
@integry integry added the AI label Sep 2, 2026
@integry

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner

NARROW MAC/LINUX SHARED CORRECTION on exact head 90b8610. Preserve all completed fixes and change only two residual items. First, preserving the real macOS HOME for Keychain makes Electron app.getPath(logs) default to ~/Library/Logs/; the harness explicitly asserts those default paths remain absent. During authorized packaged/native smoke initialization, set the Electron logs path to a pre-existing owned directory under the isolated user-data root before any getPath(logs) call, and test that ordinary production paths are unchanged while authorized smoke logging remains 0700/0600 and inside its profile. Do not weaken the real-HOME Keychain context or before/after default-profile checks. Second, a process-groups cleanup/postcondition failure must block copied install-root and outer work-root deletion; retain remediation/executable authority whenever live-member absence cannot be proven, and add an injected orchestration test. Mac/Linux/shared only. No package-lock, workflow, Windows, signing/notarization/update, release profile, artifacts, or public-claim changes. Run desktop typecheck and focused tests.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

Applied the requested follow-up changes in commit d66aee2

Summary of Changes

Implemented the two scoped corrections on exact head 90b86106e49d4c1e92ef00ddf36801a254ee37f3.

  • Native Mac/Linux smoke now redirects Electron logs to a validated, pre-existing 0700 directory inside isolated user data before getPath('logs'). Production paths remain unchanged; log files are verified 0600.
  • Process-group cleanup/postcondition failures now preserve the copied executable/install root and outer work root, including Linux sandbox authority.
  • Added focused logging, ordering, and injected cleanup-orchestration tests.
  • Preserved macOS real-HOME Keychain handling and default-profile absence checks.
  • No Windows, lockfile, workflow, signing, release, or artifact changes.

Validation:

  • Focused tests: 38 passed
  • Desktop typecheck: passed
  • git diff --check: passed
  • Changes left uncommitted as requested.

🤖 Implementation Details

  • Model: GPT-5.6 Sol (high)
  • Requested By: @integry
  • Time: 7m 30s
  • Tokens: 1,217,499 (1,200,525 in / 16,974 out)
  • Cost: $1.50

Undo ChangesView Task Execution


💡 ProPR Slash Commands
Command Description Example
/merge Merge target branch into this PR and resolve conflicts /merge
/review Request an AI code review /review or /review claude-sonnet
/fix Implement fixes for issues found by /review /fix or /fix address the null check issue
/switch Change the AI model for this PR /switch claude-opus
/use Override the model for a single follow-up run /use claude-sonnet
/ultrafix Loop review→fix cycles until score goal is met /ultrafix or /ultrafix goal=8 max=10

🤖 Generated by ProPR
Processing comment ID: 5516723148✓

@integry integry removed the AI label Sep 2, 2026
…106e49d4c1e92ef00ddf36801a254ee37f3`.

Implemented the two scoped corrections on exact head `90b86106e49d4c1e92ef00ddf36801a254ee37f3`.

- Native Mac/Linux smoke now redirects Electron logs to a validated, pre-existing 0700 directory inside isolated user data before `getPath('logs')`. Production paths remain unchanged; log files are verified 0600.
- Process-group cleanup/postcondition failures now preserve the copied executable/install root and outer work root, including Linux sandbox authority.
- Added focused logging, ordering, and injected cleanup-orchestration tests.
- Preserved macOS real-HOME Keychain handling and default-profile absence checks.
- No Windows, lockfile, workflow, signing, release, or artifact changes.

Validation:

- Focused tests: 38 passed
- Desktop typecheck: passed
- `git diff --check`: passed
- Changes left uncommitted as requested.

PR: #2085
Comment by: @integry (ID: 5516723148)
Model: gpt-5.6-sol
@integry integry added the AI label Sep 2, 2026
@integry

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner

FINAL NATIVE GATE CORRECTION on exact head d66aee2, Mac/Linux/shared only. Preserve all completed cleanup/log/Keychain/ACK fixes. From run 33685589669: (1) Linux x64+arm64 both reach UNSAFE_SCHEME_EVIDENCE then lose a race because waitForEvents checks child exit before reading evidence; the final rejected-unsafe event legitimately triggers clean app quit. Read and validate fixed evidence first, then reject an exited child only when required events are absent; retain subsequent waitForSuccessfulExit and exact ordering/once proof. Add a fixture where evidence is complete before a clean child exit and one where it is incomplete. (2) macOS x64 reaches PROTOCOL_DISPATCH and fails. Split this into fixed non-secret LS_REGISTER vs OPEN_DISPATCH reason/stage, and make OS dispatch target the exact copied application path (for example open -a <copied .app> ) after registering it, rather than ambiguous bundle-ID selection, while still proving the already-running renderer consumes exactly once and unregistering the copied bundle. Update only the honest internal lifecycle wording/test if needed. (3) macOS arm64 exits during FIRST_INITIAL_EVIDENCE. Classify early child exit using the fixed evidence milestones (no evidence/authorized/identity/deep-link delivery failure/cold ACK/secure-storage started/completed/renderer) and result class without paths, URLs, credentials, or process output. Correct any deterministic startup/ACK issue exposed by the classification; use a bounded native-smoke-only ACK allowance if runner startup timing is the cause, without weakening production behavior or exact consumption. Run focused tests and require fresh Linux x64/arm64 and macOS x64/arm64 gates. No package-lock, Windows, signing/notarization/update, release profile, artifact counts/names, or broad workflow changes. Ignore automated Windows failures.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

Applied the requested follow-up changes in commit 9ba00e5

Summary of Changes

Implemented the final native-gate correction on head d66aee2f.

  • Evidence is validated before child exit, with a stable re-read closing the final-event race.
  • Added complete/incomplete clean-exit fixtures and fixed milestone/result classifications.
  • macOS now reports LS_REGISTER versus OPEN_DISPATCH and uses open -a <exact copied .app> <URL>.
  • Native smoke ACK timeout is bounded at 15 seconds; production remains 5 seconds.
  • LaunchServices unregister, ordering, and exactly-once proofs remain intact.
  • No Windows, workflow, lockfile, signing, or release-profile changes.

Validation passed:

  • Native lifecycle tests: 19/19
  • Release workflow contract tests: 24/24
  • Full desktop suite: 207 passed, 6 skipped
  • Desktop typecheck
  • git diff --check

The unchanged required matrix will provide fresh Linux x64/arm64 and macOS x64/arm64 native gates; those should pass before merge.


🤖 Implementation Details

  • Model: GPT-5.6 Sol (high)
  • Requested By: @integry
  • Time: 8m 41s
  • Tokens: 1,881,003 (1,860,584 in / 20,419 out)
  • Cost: $2.05

Undo ChangesView Task Execution


💡 ProPR Slash Commands
Command Description Example
/merge Merge target branch into this PR and resolve conflicts /merge
/review Request an AI code review /review or /review claude-sonnet
/fix Implement fixes for issues found by /review /fix or /fix address the null check issue
/switch Change the AI model for this PR /switch claude-opus
/use Override the model for a single follow-up run /use claude-sonnet
/ultrafix Loop review→fix cycles until score goal is met /ultrafix or /ultrafix goal=8 max=10

🤖 Generated by ProPR
Processing comment ID: 5516860721✓

@integry integry removed the AI label Sep 2, 2026
…e2f`.

Implemented the final native-gate correction on head `d66aee2f`.

- Evidence is validated before child exit, with a stable re-read closing the final-event race.
- Added complete/incomplete clean-exit fixtures and fixed milestone/result classifications.
- macOS now reports `LS_REGISTER` versus `OPEN_DISPATCH` and uses `open -a <exact copied .app> <URL>`.
- Native smoke ACK timeout is bounded at 15 seconds; production remains 5 seconds.
- LaunchServices unregister, ordering, and exactly-once proofs remain intact.
- No Windows, workflow, lockfile, signing, or release-profile changes.

Validation passed:

- Native lifecycle tests: 19/19
- Release workflow contract tests: 24/24
- Full desktop suite: 207 passed, 6 skipped
- Desktop typecheck
- `git diff --check`

The unchanged required matrix will provide fresh Linux x64/arm64 and macOS x64/arm64 native gates; those should pass before merge.

PR: #2085
Comment by: @integry (ID: 5516860721)
Model: gpt-5.6-sol
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant