Skip to content

sync(desktop): propagate current macOS/Linux runtime into top epic - #2075

Merged
integry merged 33 commits into
1950-epic-cross-platform-dskfrom
1952-epic-electron-runtime-app
Sep 2, 2026
Merged

sync(desktop): propagate current macOS/Linux runtime into top epic#2075
integry merged 33 commits into
1950-epic-cross-platform-dskfrom
1952-epic-electron-runtime-app

Conversation

@integry

@integry integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Summary

Propagate the current cross-platform Electron runtime and packaging branch into the top desktop epic for the macOS/Linux-first release.

Scope

Integration contract

Do not merge to main. Require independent diff audit and green shared/macOS/Linux checks before merging into the top epic.

Part of #1950 and prerequisite for the narrowed execution of #1962.

propr-dev[bot] and others added 30 commits September 1, 2026 00:57
…ess stage an

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

Implementation completed successfully.
…687837236817e7f455f`.

Implemented only F1/F2 on exact head `30b33a80802262d60e7c7687837236817e7f455f`.

Key changes:

- Added supervisor-owned monotonic bootstrap deadline immediately after worker start.
- Added bounded, size-capped marker reading with malformed, torn, inaccessible, stale, and unknown markers failing closed.
- Added fixed redacted bootstrap, accepted-transition, cancellation, timeout, and last-valid-marker output.
- Ensured timeout/cancellation terminates the owned Job Object tree and performs safe cleanup.
- Added executable Windows tests covering all requested scenarios, including PID-based worker/descendant termination and real pre-existing user/profile/install/registry/shortcut ownership checks.
- Wired focused tests into both x64 and ARM64 Windows matrices without changing workflow/product timeouts.
- Kept source inspection only as supplementary lint.

Files:

- [Supervisor](/home/node/workspace/apps/desktop/scripts/run-installed-windows-app-harness.ps1)
- [Executable behavior tests](/home/node/workspace/apps/desktop/scripts/test-installed-windows-app-supervisor.ps1)
- [Fixture worker](/home/node/workspace/apps/desktop/scripts/test-installed-windows-app-supervisor-fixture.ps1)
- [Workflow](/home/node/workspace/.github/workflows/desktop-release-guard.yml)
- [Supplementary contracts](/home/node/workspace/apps/desktop/src/release-workflow.test.ts)

Validation completed:

- Desktop tests: 177 passed, 6 platform skips
- Desktop/UI typechecks passed
- Focused workflow contracts passed
- Workflow YAML parsed successfully
- Docker-independent Validate Changes tests and CLI packaging passed
- `git diff --check` passed, including new files

Windows-native x64/ARM64 tests and ordinary-user MSI flows cannot execute in this Linux container; they are mandatory in both Windows workflow matrix paths. Full Suite was blocked at Redis startup because Docker is unavailable. No commit was created.

PR: #2042
Comment by: @integry (ID: 5486941518)
Model: gpt-5.6-sol
…efa675d782bfefe343c16175a0f2ba1e9fc9`.

Implemented the fixture-only correction on exact HEAD `436cefa675d782bfefe343c16175a0f2ba1e9fc9`.

- Removed all `CreateProfile`/`DeleteProfile` P/Invoke code.
- Added fail-closed runner identity and `Win32_UserProfile` snapshot validation, including canonical path, reparse checks, ACL owner, existence, and stable CIM metadata. These are documented `Win32_UserProfile` fields in [Microsoft’s class reference](https://learn.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ee886409%28v%3Dvs.85%29).
- Proved the profile remains identical and no profile lookup/removal marker was entered.
- Kept a profile-less local user solely for preservation proof, with exact SID-guarded cleanup.
- Added fixed redacted evidence and regression contracts.
- Did not modify supervisor/bootstrap/tree logic, timeouts, production behavior, or workflows.

Changed:

- [test-installed-windows-app-supervisor.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T01-23-26/apps/desktop/scripts/test-installed-windows-app-supervisor.ps1:215)
- [release-workflow.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T01-23-26/apps/desktop/src/release-workflow.test.ts:558)

Validation passed:

- Desktop tests: 177 passed, 6 platform skips
- Focused workflow contracts: 23 passed
- Validate Changes Node gates: release metadata, 278 unit tests, 316 hosted-tunnel tests, 66 UI tests, CLI package verification
- `git diff --check`

Native Windows x64/ARM64 fixture and ordinary-user MSI tests could not run on this Linux host, which has no Windows/PowerShell runner. Docker-based actionlint/shellcheck was also unavailable because Docker is not installed.

PR: #2042
Comment by: @integry (ID: 5487142136)
Model: gpt-5.6-sol
Implemented only F1 and F2.

- Added durable ownership manifests and a separately supervised, bounded post-termination cleanup controller in [run-installed-windows-app-harness.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T01-35-21/apps/desktop/scripts/run-installed-windows-app-harness.ps1).
- Added ownership-safe cleanup for MSI resources, registry, shortcuts, smoke data, profiles, and users in [cleanup-installed-windows-app.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T01-35-21/apps/desktop/scripts/cleanup-installed-windows-app.ps1).
- Replaced the vacuous baseline-rejection fixture with a real timeout case that creates run-owned resources and conflicting pre-existing identities, then verifies owned resources are removed and conflicts remain unchanged.
- Preserved fixed, redacted cleanup completion/failure/timeout diagnostics.

Validation passed:

- Desktop tests: 177 passed, 6 skipped
- Desktop TypeScript typecheck
- Focused workflow tests: 23 passed
- `git diff --check`

Native Windows acceptance remains wired for both x64 and ARM64 CI jobs; it could not run in this Linux container. No commit was created.

PR: #2042
Comment by: @integry (ID: 5487345104)
Model: gpt-5.6-sol
…4d8fbdc99e50d6cf5fef5773a497db1ae58da`.

Implemented the complete #2042 follow-up on exact head `a064d8fbdc99e50d6cf5fef5773a497db1ae58da`.

Key changes:

- Added durable, workflow-addressable ownership manifests and bounded `if: always()` cleanup for both Windows matrix jobs.
- Supervisor now derives cleanup necessity from started/live/incomplete workers, terminates the Job first, and only removes internally managed manifests after fixed cleanup results.
- Added graceful external interruption and killed-supervisor workflow cleanup fixtures, including malformed/stale/missing manifest rejection and conflict preservation.
- Added complete App Paths registry authority across baseline, manifest, validation, uninstall, fallback cleanup, and owned/pre-existing/mismatched-identity tests.
- Changed only `VALID_THEN_DEADLINE` to a 2.5-second operation deadline with exact accepted-before-timeout and measured bounds.
- Preserved production watchdog deadlines and polling settings.

Local validation passed:

- Desktop suite: 177 passed, 6 platform skips
- Desktop/UI typechecks
- Fast unit suite: 278 passed
- Focused workflow contracts: 23 passed
- Workflow YAML parsing
- `git diff --check`, including the new cleanup script

Windows-native x64/ARM64 fixtures and the Redis-backed Full Suite could not run in this Linux workspace because PowerShell, Windows registry/CIM, Docker, and Redis services are unavailable. Both Windows architectures remain mandatory in the updated workflow. No commit was created.

PR: #2042
Comment by: @integry (ID: 5487638811)
Model: gpt-5.6-sol
Implemented the requested #2042 follow-up without committing.

Key changes:

- Added HKCU `Software\ProPR\Desktop` / `installed` baseline capture, value-level manifest ownership, uninstall checks, exact restoration, conflict preservation, and empty-key-only removal.
- Added schema-v2 typed `ACTIVE` and authenticated `EMPTY` manifest states.
- Added fixed controller classifications and exit codes for manifest validation, resource cleanup, timeout, and controller failures; raw child output is discarded.
- Added executable HKCU ownership/conflict coverage and distinct normal-success/already-cleaned receipt coverage.
- Kept the acceptance fixture required for both x64 and ARM64 workflow jobs.

Primary files: [cleanup-installed-windows-app.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T02-30-18/apps/desktop/scripts/cleanup-installed-windows-app.ps1), [test-installed-windows-app.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T02-30-18/apps/desktop/scripts/test-installed-windows-app.ps1), and [test-installed-windows-app-supervisor.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T02-30-18/apps/desktop/scripts/test-installed-windows-app-supervisor.ps1).

Validation:

- Focused workflow contracts: 23/23 passed
- Full desktop suite: 177 passed, 6 platform skips
- Desktop TypeScript typecheck: passed
- `git diff --check`: passed

Windows-native x64/ARM64 fixtures remain CI-only because this environment is Linux.

PR: #2042
Comment by: @integry (ID: 5487863465)
Comment by: @integry (ID: 5487872316)
Comment by: @integry (ID: 5487880305)
Model: gpt-5.6-sol
…tting.

Implemented the requested PR #2042 follow-ups without committing.

- F5: provisional ownership now authorizes only bounded MSI uninstall. Manual filesystem, shortcut, HKCU, and registry cleanup requires durable tokens or exact captured identities in [cleanup-installed-windows-app.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T02-51-19/apps/desktop/scripts/cleanup-installed-windows-app.ps1:227).
- F6: manifests are deleted only after exact `COMPLETE`/`true` results in [workflow cleanup](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T02-51-19/apps/desktop/scripts/run-installed-windows-app-workflow-cleanup.ps1:217) and [standalone cleanup](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T02-51-19/apps/desktop/scripts/run-installed-windows-app-harness.ps1:648).
- Replaced unsafe PowerShell async callbacks with a C# stream drain.
- Made process-state publication atomic and increased the fixture-only bootstrap allowance.
- Added executable replacement/collision, FAILED/TIMED_OUT retention, and retry-to-COMPLETE coverage in [test-installed-windows-app-supervisor.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T02-51-19/apps/desktop/scripts/test-installed-windows-app-supervisor.ps1:639).

Validation:

- Desktop tests: 177 passed, 6 platform skips.
- Desktop typecheck: passed.
- Focused release-workflow contracts: 23 passed.
- `git diff --check`: passed.

The Windows-native x64/ARM64 fixture could not run in this Linux environment and remains required in CI.

PR: #2042
Comment by: @integry (ID: 5488111133)
Comment by: @integry (ID: 5488155740)
Model: gpt-5.6-sol
…35acc0e6debb34cddb5aff0d5c0efdae5cedd129`.

Implemented the complete F10–F13 correction on exact head `35acc0e6debb34cddb5aff0d5c0efdae5cedd129`.

Key changes:

- Verified Job worker-tree termination now gates all cleanup; failures preserve ACTIVE recovery authority.
- Removed unchanged-HKCU MSI-uninstall bypass.
- Added marker-bound provisional-user SID adoption with durable ACTIVE-manifest persistence.
- Replaced recursive owned-directory deletion with authenticated file/marker cleanup and empty-only, deepest-first removal.
- Added termination-failure, unchanged-HKCU uninstall, provisional replacement, and in-place foreign-child coverage.
- Replaced async PowerShell callbacks with bounded C# stream pumps and fixed finalization diagnostics; fixed result lines are emitted last.
- Preserved typed EMPTY receipts, ARM deadline, HKCU value restoration, and both `if: always()` seams.

Validation:

- Desktop tests: 177 passed, 6 skipped.
- Focused workflow contracts: 23 passed.
- Desktop typecheck passed.
- `git diff --check` passed.
- Native x64/ARM64 fixture could not run locally because this environment is Linux without PowerShell or Windows runners; it remains wired for both PR workflow architectures.

Modified scripts are under [apps/desktop/scripts](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T03-17-55/apps/desktop/scripts), with contract updates in [release-workflow.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T03-17-55/apps/desktop/src/release-workflow.test.ts). No commit was created.

PR: #2042
Comment by: @integry (ID: 5488384761)
Model: gpt-5.6-sol
…ting.

Implemented the exact-head F14–F16 follow-up without committing.

Key changes:

- Primary install/shortcut fallbacks now remove directories non-recursively and only when empty.
- Smoke cleanup uses exact token, SID, owner, ACL, reparse, and object-identity validation with bounded traversal.
- Provisional smoke roots are durably promoted before further mutation; missing/mismatched tokens fail closed.
- Added interruption fixtures before/after promotion, after Electron/log creation, token mismatch/missing, and foreign descendants.
- Added top-level fixed controller phase/line classification and bounded stream finalization.
- Raised only `NO_MARKER`’s fixture ceiling to 60 seconds.

Validation:

- Desktop tests: 177 passed, 6 skipped
- Desktop typecheck: passed
- Focused workflow contracts: 23 passed
- `git diff --check`: passed

Native x64/ARM64 execution requires Windows CI; the workflow continues to require the focused fixture on both architectures.

PR: #2042
Comment by: @integry (ID: 5488566692)
Model: gpt-5.6-sol
…tting.

Implemented the exact-head F17/F18 correction without committing.

Key changes:

- Added durable install-tree, descendant, shortcut-folder, and shortcut object identities, revalidated immediately before every MSI `/x` invocation.
- Replacement or provisional authority now aborts before MSI or cleanup mutation, preserves resources, and retains ACTIVE recovery authority.
- Added distinct replaced-executable and replaced-shortcut retry fixtures.
- Replaced the unsafe signed-exit-to-`uint32` cast with fixed termination code `125`; added a negative-exit tree-cleanup fixture.
- Deferred fixture `Add-Type` until after process state and the first valid marker.
- Parsed fixed controller stdout before stderr classification and suppressed raw controller stderr before cold type loading; child stderr remains bounded and classified.
- Added static contracts covering F17/F18 while retaining F10–F16.

Validation:

- Desktop suite: 177 passed, 6 platform skips.
- Desktop typecheck: passed.
- Focused workflow contracts: passed.
- `git diff --check`: passed.

The native x64/ARM64 supervisor fixture requires the Windows CI matrix; it cannot run in this Linux workspace.

PR: #2042
Comment by: @integry (ID: 5488805055)
Model: gpt-5.6-sol
…2197d08c65f6cef461d5720b64d43f4`.

Implemented the exact-head F19/F20 correction on `a30d8bf312197d08c65f6cef461d5720b64d43f4`.

Key changes:

- F20: `Remove-OwnedFile` now requires and rechecks durable `EntryIdentity` immediately before deletion, alongside content identity.
- Added byte-identical replace-via-move coverage proving foreign survival, ACTIVE authority retention, and successful retry only after restoring the owned entry.
- F19: introduced explicit `PENDING`, `COMMITTED`, and `ROLLED_BACK_CLEAN` MSI receipts.
- Path-only provisional evidence can no longer authorize `/x`.
- Added fixed 30-second cancellation grace, exact filesystem/registry/product-registration rollback checks, durable identity publication, and `DURING_MSI` / `DURING_OWNERSHIP_CAPTURE` gates.
- Controller now emits exactly two lines using flushed `Console.Out`, with no `Write-Host`.
- Protocol failures expose only bounded line/stderr counts.

Validation:

- Full desktop suite: **177 passed, 6 skipped**
- `git diff --check`: passed
- Release workflow contracts: passed
- No commit created.

The native focused PowerShell fixture cannot run in this Linux environment; x64 and ARM64 fixture success remains required in CI before merge.

PR: #2042
Comment by: @integry (ID: 5488967936)
Model: gpt-5.6-sol
…00292e7f8ecc86da99f7e942905`.

Implemented the exact-head F21 correction on `41cd874ada64900292e7f8ecc86da99f7e942905`.

- Cleanup worker now handshakes before `Add-Type`.
- Controller assigns the worker to its Job Object immediately after start, before drains and release.
- Completion, timeout, success, and manifest deletion require Job active-process count zero.
- Added early-initialization child-spawn timeout coverage with recovery-authority retention.
- Changed only `VALID_THEN_DEADLINE` to `VALIDATION|INSTALL_TREE_SCAN|BEGIN`.
- Preserved production/generic bounds and F10–F20.

Validation:

- Desktop suite: 177 passed, 6 platform skips.
- Desktop typecheck: passed.
- Focused workflow contract: 23 passed.
- `git diff --check`: passed.

Native x64/ARM64 execution was unavailable in this Linux environment, but the mandatory dual-architecture workflow fixture remains enforced. No commit was created.

PR: #2042
Comment by: @integry (ID: 5489175076)
Model: gpt-5.6-sol
…74d8601ed871535c24646a6`.

Implemented the exact-head correction on `d2ba71eb795fd0a5d74d8601ed871535c24646a6`.

- F22 now requires an exact durable SID plus freshly canonicalized LocalPath before every production `Remove-CimInstance`.
- Uncaptured profiles are promoted only through authenticated marker/SID authority, with the canonical path durably written before deletion.
- Path mismatches preserve the profile, local-user authentication authority, and ACTIVE manifest. Added retry coverage after restoring the exact path.
- Controller no longer uses `Console.SetError`, `trap`, or labeled flow. Add-Type and the controller body use an ordinary outer try/catch, followed by bounded finalization and exactly two flushed stdout lines.
- Updated focused x64/ARM64 fixture contracts in [test-installed-windows-app-supervisor.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T05-20-24/apps/desktop/scripts/test-installed-windows-app-supervisor.ps1).

Validation:

- Focused release workflow tests: 23/23 passed.
- Desktop tests: 177 passed, 6 platform skips.
- Desktop TypeScript typecheck passed.
- `git diff --check` passed.

Native x64/ARM64 execution requires Windows CI and could not be run on this Linux host. No commit was created.

PR: #2042
Comment by: @integry (ID: 5489285503)
Model: gpt-5.6-sol
…e54e097394fb88f85d0a0c9`.

Implemented the exact-head correction on `de947aac8e3f0dd04e54e097394fb88f85d0a0c9`.

Key changes:

- F23 profile paths now require canonical, non-reparse ancestry under the registry-defined system `ProfilesDirectory`, exact direct-child depth, exact username leaf, SID, and durable-record agreement before promotion and immediately before deletion.
- Added out-of-root and alternate-leaf regressions preserving profile, account, and ACTIVE recovery authority.
- Reworked the x64 cleanup controller into a stable scriptblock launcher with a small top-level catch.
- Added sanitized startup diagnostics: allowlisted classification, signed exit, and numeric line only.
- Removed cold fixture `Add-Type` from the ARM primary-fallback measured path and added allowlisted supervisor/marker diagnostics.
- Updated supplementary contracts without changing F10–F22 behavior.

Validation passed:

- Focused release workflow: 23/23
- Full desktop suite: 177 passed, 6 skipped
- Desktop TypeScript typecheck
- `git diff --check`

Native x64/ARM64 execution requires Windows CI and was unavailable locally. Changes remain uncommitted as requested.

PR: #2042
Comment by: @integry (ID: 5489417497)
Model: gpt-5.6-sol
…9424235155bb86b7b506842` without committing.

Implemented the exact-head correction on `b9415f52f8a50288c9424235155bb86b7b506842` without committing.

Key changes:

- Added strict schema-v3 installer authority: canonical path, filesystem entry identity, SHA-256, and validated MSI ProductCode.
- Revalidates identity/digest before artifact consultation and uses only `msiexec /x {GUID}`.
- Same-path replacement fails closed, preserves foreign content and ACTIVE recovery authority, and avoids destructive cleanup.
- Preserved validated EMPTY receipt behavior.
- Split the cleanup controller into a minimal [entry wrapper](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T05-57-48/apps/desktop/scripts/run-installed-windows-app-workflow-cleanup.ps1) and separate [controller body](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T05-57-48/apps/desktop/scripts/run-installed-windows-app-workflow-cleanup-body.ps1).
- Added fixed two-line, zero-stderr startup classification for PARSER, PARAMETER_BINDING, TYPE_LOAD, and OTHER.
- Added direct startup-class and native same-path replacement fixtures.

Validation passed:

- Focused release workflow: 23/23
- Desktop suite: 177 passed, 6 platform skips
- Desktop typecheck
- PowerShell syntax audit
- Full suite: all 332 test files plus UI workspace; UI 501/501
- `git diff --check`

Native win32-x64/ARM64 execution is unavailable on this Linux host; the architecture-specific fixtures and workflow gates are in place for CI.

PR: #2042
Comment by: @integry (ID: 5489577926)
Model: gpt-5.6-sol
…a…`.

Implemented the exact native protocol correction on `d0450fa…`.

- Wrapped the complete `-f $failureClass, $line` expression so `Console.Out.WriteLine` receives one evaluated string.
- Changed only [run-installed-windows-app-workflow-cleanup.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T17-04-00/apps/desktop/scripts/run-installed-windows-app-workflow-cleanup.ps1:39).
- Preserved all F10–F24 implementation files and behavior.
- `git diff --check`: passed.
- Focused release workflow contract: 23/23 passed, including mandatory x64/ARM64 native supervisor gates.

Native Windows execution was unavailable on this Linux host. No commit was created.

PR: #2042
Comment by: @integry (ID: 5497532979)
Model: gpt-5.6-sol
Implemented the bounded NO_MARKER correction.

Key changes:

- Added allowlisted diagnostics for supervisor exit, required marker presence/outcome, worker-tree termination, and cleanup exit category.
- Authenticated initial schema-v3 ACTIVE/no-resource fixture manifests now revalidate installer authority and atomically become exact EMPTY receipts.
- NO_MARKER now requires verified tree termination, cleanup exit `0`, cleanup `COMPLETE`, and preserved exit `124`.
- F24 installer identity, digest, ProductCode, and ProductCode-only uninstall checks remain unchanged.

Validation:

- Desktop tests: 177 passed, 6 platform-specific skipped.
- Desktop TypeScript typecheck passed.
- Diff checks passed.
- Native x64/ARM64 execution remains enforced by the existing CI matrix but is unavailable in this Linux environment.

No commit was created.

PR: #2042
Comment by: @integry (ID: 5497648125)
Model: gpt-5.6-sol
Implemented the pre-branch correction on `06b8844…`.

Key changes:

- Corrected manifest `FILE_AUTHORITY` validation using a single authenticated file handle compatible with atomic replacement, with entry-identity revalidation.
- Added fixture-only exit-20 validation phases restricted to the requested enum.
- Preserved installer entry/digest/ProductCode revalidation, exact EMPTY receipt conversion, watchdog exit 124, and production cleanup behavior.
- Extended supervisor diagnostics and static contract coverage.

Validation:

- Desktop suite: 177 passed, 6 skipped.
- Release-workflow tests: 23 passed.
- Touched PowerShell scripts parse successfully.
- `git diff --check` passed.

Native x64/ARM64 execution remains CI-only in this Linux environment. No commit was created.

PR: #2042
Comment by: @integry (ID: 5497806473)
Model: gpt-5.6-sol
…rslist advis

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

Implementation completed successfully.
Implemented the fixture-only diagnostic transport:

- Redirects cleanup-child stdout/stderr, assigns the Job Object, releases the handshake, then starts bounded drains.
- Enforces 96-byte/one-line stdout, zero stderr, strict allowlisted enum parsing, and zero-output success.
- Re-emits only the parsed enum through the existing supervisor diagnostic.
- Rejects malformed, extra, raw, or timed-out output while retaining recovery authority.
- Added static ordering and protocol contracts.

Files: [harness](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T17-44-03/apps/desktop/scripts/run-installed-windows-app-harness.ps1:372), [cleanup worker](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T17-44-03/apps/desktop/scripts/cleanup-installed-windows-app.ps1:29), [contracts](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T17-44-03/apps/desktop/src/release-workflow.test.ts:769).

Validation:

- Desktop tests: 177 passed, 6 skipped.
- Touched PowerShell scripts parse successfully.
- Embedded C# compiles successfully.
- Bounded drain behavior verified.
- `git diff --check` passed.
- No lockfiles or ancestry changed.

The existing logs cannot identify the failing phase because that stream was lost. I therefore did not add another speculative authority change; the next native x64/ARM64 run will now expose the exact enum or prove cleanup exit 0/COMPLETE.

PR: #2042
Comment by: @integry (ID: 5497992679)
Model: gpt-5.6-sol
…desktop-pac-20260901-1743-dfw

[2048 by GPT-5.6 Sol] Patch runtime desktop packaging browserslist advisories
Implemented the schema-v3 follow-up on exact head `4eb7dcd9`.

- Split `UTF8_SCHEMA` into seven fixed phases: UTF-8 decode, JSON parse, exact keys, Boolean types, transaction enum, schema/type/state, and identifier formats.
- Corrected Boolean validation to inspect the PSObject base type, still rejecting strings/numbers.
- NO_MARKER now exercises the real supervisor writer → Windows PowerShell 5.1 cleanup reader path.
- Replaced the unavailable .NET Framework `File.Move(..., overwrite)` overload with atomic `File.Replace`.
- Preserved the 96-byte, one-line, zero-stderr, Job Object, timeout, strict-enum, and fail-closed parser contracts.
- Added static regression contracts covering the new phases and PowerShell 5.1 path.

Validation:

- Desktop suite: 177 passed, 6 platform skips.
- Modified PowerShell scripts parse successfully.
- `git diff --check` passed.
- No lockfiles, ancestry, or unrelated files changed.

Native x64/ARM64 execution remains for the Windows CI matrix; the existing NO_MARKER acceptance now requires exit `124`, cleanup `COMPLETE`, and cleanup-child exit `0` through PowerShell 5.1.

PR: #2042
Comment by: @integry (ID: 5498161017)
Model: gpt-5.6-sol
…9db162e7c23a5024a57382bc989e`.

Implemented the #2042 follow-up on exact head `3af480032d479db162e7c23a5024a57382bc989e`.

Key changes:

- Split `IDENTIFIER_FORMATS` into the four requested bounded phases.
- Corrected the capture/display-object versus canonical JSON wire-string mismatch.
- Enforced exact lowercase RunId/entry/SHA and uppercase braced ProductCode representations, with immediate JSON round-trip validation.
- Main `NO_MARKER` now uses the actual native `pwsh` host; a separate fixture retains PowerShell 5.1 coverage.
- Updated parent enums/parsers and regressions, including zero-stderr, cleanup exit `0`, cleanup `COMPLETE`, and watchdog exit `124` assertions.
- Preserved schema v3, BaseObject type proofs, F24 authority, Job Object ordering, retention behavior, and startup protocol.

Validation passed:

- PowerShell parsing: passed
- Focused workflow tests: 23/23
- Desktop suite: 177 passed, 6 platform skips
- Desktop typecheck
- `git diff --check`
- No lockfiles or ancestry changed; no commit created

Native x64/ARM64 execution remains CI-only.

PR: #2042
Comment by: @integry (ID: 5498348786)
Model: gpt-5.6-sol
…ct head `1a40502b4c0df8f508642de892eafb5f8e341ca3`.

Implemented the post-validation NO_MARKER correction on exact head `1a40502b4c0df8f508642de892eafb5f8e341ca3`.

Key changes:

- Added bounded `INITIAL_INSTALLER_AUTHORITY_RECHECK` and `EMPTY_RECEIPT_WRITE` phases for exits 20/21.
- Restored native pwsh atomic `File.Move(..., overwrite)` while retaining PS5.1 `File.Replace`.
- Moved `manifestValidated` after installer authority succeeds.
- Builds EMPTY receipts from a copy, preserving canonical ACTIVE authority on write failure.
- Preserved zero stderr, one ≤96-byte stdout line, timeout, and Job Object ordering.
- Explicitly documented that earlier identifier evidence was from PS5.1, while current exit 21 is native pwsh.

Files changed:

- [cleanup-installed-windows-app.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T18-30-01/apps/desktop/scripts/cleanup-installed-windows-app.ps1:1027)
- [run-installed-windows-app-harness.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T18-30-01/apps/desktop/scripts/run-installed-windows-app-harness.ps1:939)
- [test-installed-windows-app-supervisor.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T18-30-01/apps/desktop/scripts/test-installed-windows-app-supervisor.ps1:748)
- [release-workflow.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T18-30-01/apps/desktop/src/release-workflow.test.ts:753)

Validation:

- Focused workflow tests: 23 passed
- Desktop suite: 177 passed, 6 platform skips
- Desktop typecheck: passed
- `git diff --check`: passed
- No lockfiles, commits, or ancestry changes

Native x64/ARM64 execution remains for the Windows CI code gate.

PR: #2042
Comment by: @integry (ID: 5498530554)
Model: gpt-5.6-sol
…ct head `faf1d69041ecf7919449a7a5704fb3068162879a`.

Implemented the PS5.1 receipt replacement correction on exact head `faf1d69041ecf7919449a7a5704fb3068162879a`.

- Replaced PS5.1 `File.Replace` with same-directory `MoveFileExW` using `MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH`, with immediate Win32 error capture. [cleanup-installed-windows-app.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T18-41-08/apps/desktop/scripts/cleanup-installed-windows-app.ps1:170)
- Enforced existing source/destination files and identical directories; no cross-volume copy, delete-then-move, or missing-path window.
- Added failure-only temporary-file cleanup while retaining canonical ACTIVE authority.
- Preserved the Core `File.Move(..., overwrite)` path and exact EMPTY receipt construction.
- Updated focused contract coverage and PS5.1 scenario documentation. [release-workflow.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T18-41-08/apps/desktop/src/release-workflow.test.ts:770)

Validation:

- Focused workflow tests: 23 passed
- Desktop suite: 177 passed, 6 platform skips
- Desktop typecheck: passed
- `git diff --check`: passed
- HEAD and ancestry unchanged; no commit created

Native x64/ARM64 PS5.1 execution requires Windows CI. The replacement flags follow Microsoft’s documented [`MoveFileExW` contract](https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-movefileexw).

PR: #2042
Comment by: @integry (ID: 5498668928)
Model: gpt-5.6-sol
…5605cfc21fb95ac378dbbffa02a71087`.

Implemented diagnostic-only changes on exact head `4a9d15e95605cfc21fb95ac378dbbffa02a71087`.

- ARM64 assertion now reports bounded, allowlisted process exit, MSI transaction, cleanup outcome, and provisional/nonprovisional authority state. Input is capped at 4096 bytes, 32 lines, and 192 bytes per line.
- X64 retry assertion now reports validated `ExitCode`, `Result`, `ControllerStatus`, and `ReportedExitCode`, capped at 256 bytes.
- Added source-contract coverage in [release-workflow.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T18-52-04/apps/desktop/src/release-workflow.test.ts:1022).
- No production cleanup, cancellation, Job Object, authority, or replacement semantics changed.

Validation:

- Focused workflow tests: 23 passed.
- Full desktop tests: 177 passed, 6 platform-specific skipped.
- `git diff --check`: clean.
- Native Windows execution was unavailable on this Linux host.

PR: #2042
Comment by: @integry (ID: 5498804736)
Model: gpt-5.6-sol
…app-supervisor.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T19-02-32/apps/desktop/scripts/test-installed-windows-app-supervisor.ps1:399).

Implemented the parser-only fix in [test-installed-windows-app-supervisor.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T19-02-32/apps/desktop/scripts/test-installed-windows-app-supervisor.ps1:399).

- Captures the `switch` output first.
- Requires exactly one allowlisted value: `PROVISIONAL`, `NONPROVISIONAL`, or `FAILED`.
- Adds only the validated string.
- No production cleanup, cancellation, diagnostics, or bounds changed.

Validation:

- Whole-file PowerShell 7.6.5 parser check: passed, zero errors.
- Focused release workflow tests: 23/23 passed.
- `git diff --check`: passed.
- No commit created.

PR: #2042
Comment by: @integry (ID: 5498943044)
Model: gpt-5.6-sol
…0786004979b3374f2b3edd2039f508ea35a3e9`.

Implemented the diagnostic-only follow-up on exact head `280786004979b3374f2b3edd2039f508ea35a3e9`.

- Added `STARTUP_FAILURE`-only sanitized metadata with allowlisted class, signed exit, bounded line `1..999999`, and fixed `INVALID` sentinels.
- Preserved the existing fields and 256-byte cap.
- Added valid/invalid parser and sanitizer regressions, including non-startup exclusion.
- Changed no cleanup, retry, authority, cancellation, watchdog, or replacement semantics.

Files:

- [test-installed-windows-app-supervisor.ps1](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T19-11-16/apps/desktop/scripts/test-installed-windows-app-supervisor.ps1:452)
- [release-workflow.test.ts](/tmp/git-processor/worktrees/integry/propr/pr-2042-followup-2026-09-01T19-11-16/apps/desktop/src/release-workflow.test.ts:978)

Validation:

- Desktop suite: 177 passed, 6 platform-specific skipped.
- Targeted workflow suite: 23 passed.
- `git diff --check`: clean.
- Native PowerShell execution awaits the next x64/ARM64 jobs; `pwsh` is unavailable locally.

PR: #2042
Comment by: @integry (ID: 5499049144)
Model: gpt-5.6-sol
Implemented the exact parser-only fix.

- Split cleanup-worker path construction and resolution into two syntactically complete lines while preserving `-LiteralPath`, `-ErrorAction Stop`, and path semantics.
- Added a whole-file AST parser regression to the native `pwsh` supervisor suite.
- Preserved the existing Windows PowerShell 5.1 compatibility scenario.
- No cleanup or lifecycle semantics changed.

Validation:

- Release-workflow tests: 23/23 passed.
- `git diff --check`: passed.
- Native x64/ARM64 execution was unavailable in this Linux environment, so no later bounded assertion was observed.
- Changes remain uncommitted as requested.

PR: #2042
Comment by: @integry (ID: 5499191816)
Model: gpt-5.6-sol
…into 2041/gpt-5.6-sol-bound-every-windows-insta-20260901-0045-zue
Integrate the bounded Windows installed-app startup, cancellation, authority, cleanup, receipt, and diagnostic hardening into the runtime sub-epic. Durable ownership-capture publication and cleanup-controller protocol completeness remain explicit blocking correction tasks before runtime propagation to the top desktop epic.
@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

CI failed: Validate unsigned linux-arm64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned linux-arm64 package
  • Result: failure
  • Commit: e3149c20c1e5 (e3149c20c1e5eb21b2f0fb06415757aae3e01f12)
  • Details: View CI failure

Failure evidence

.github:34
Process completed with exit code 1.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

CI failed: Validate unsigned linux-x64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned linux-x64 package
  • Result: failure
  • Commit: e3149c20c1e5 (e3149c20c1e5eb21b2f0fb06415757aae3e01f12)
  • Details: View CI failure

Failure evidence

.github:34
Process completed with exit code 1.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

CI failed: Validate unsigned darwin-arm64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned darwin-arm64 package
  • Result: failure
  • Commit: e3149c20c1e5 (e3149c20c1e5eb21b2f0fb06415757aae3e01f12)
  • Details: View CI failure

Failure evidence

.github:34
Process completed with exit code 1.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

CI failed: Validate unsigned darwin-x64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned darwin-x64 package
  • Result: failure
  • Commit: e3149c20c1e5 (e3149c20c1e5eb21b2f0fb06415757aae3e01f12)
  • Details: View CI failure

Failure evidence

.github:34
Process completed with exit code 1.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

CI failed: Validate unsigned win32-x64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned win32-x64 package
  • Result: failure
  • Commit: e3149c20c1e5 (e3149c20c1e5eb21b2f0fb06415757aae3e01f12)
  • 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

CI failed: Validate unsigned win32-arm64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned win32-arm64 package
  • Result: failure
  • Commit: e3149c20c1e5 (e3149c20c1e5eb21b2f0fb06415757aae3e01f12)
  • Details: View CI failure

Failure evidence

.github:15
Process completed with exit code 1.

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

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

Correct the exact shared/macOS/Linux release blocker on PR #2075 without changing runtime behavior.

All four unsigned package jobs currently fail before package/launch in npm run audit:runtime because this sync still carries the stale transitive lock entries qs@6.15.3 and fast-uri@3.1.5 from the prior top/runtime merge. Restore the already-established canonical resolution:

  • qs = 6.16.0
  • fast-uri = 3.1.6
  • fast-uri resolved URL: https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.6.tgz
  • fast-uri integrity: sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==

Requirements:

  • Make only the minimal package-lock dependency-resolution correction required for those canonical versions; do not change application/runtime/workflow/test source or widen dependency ranges.
  • Preserve npm lockfile consistency and every existing platform/security contract.
  • Prove npm ci, npm run audit:runtime, lockfile audit tests, full suite, and unsigned package/build/inspection on Linux x64/ARM64 and macOS x64/ARM64.
  • Windows-only failures are deferred to Deferred Windows desktop GA: finish x64/ARM64 package, ordinary-user Connect, and PowerShell durability gates #2074 and must not cause unrelated changes.
  • Do not merge; this sync targets only 1950-epic-cross-platform-dsk, never main.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

🛑 Execution Cancelled

The task processing was stopped by user request.

You can post a new comment to restart processing.

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

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

Retry the previously queued lock-only correction; task pr-comments-batch-integry-propr-2075-1788374336761 was stopped after remaining stuck in processing without claiming a free executor.

On exact head e3149c20c1e5eb21b2f0fb06415757aae3e01f12, preserve browserslist 4.28.8 and its existing transitive metadata. Change only package-lock.json to the canonical runtime pair:

  • qs 6.16.0, URL https://registry.npmjs.org/qs/-/qs-6.16.0.tgz, integrity sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==;
  • fast-uri 3.1.6, URL https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.6.tgz, integrity sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==.

Do not choose fast-uri 3.1.7, modify dependency ranges, or touch application/runtime/workflow/test source. Require npm ci, zero runtime/packaging audits, lock tests, full suite, and Linux x64/ARM64 plus macOS x64/ARM64 unsigned package validation. Windows remains deferred to #2074. Do not merge or target main.

@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

🛑 Execution Cancelled

The task processing was stopped by user request.

You can post a new comment to restart processing.

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

integry commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

Retry the exact canonical lock-only correction from the immediately preceding owner comment now that the stuck task is confirmed cancelled. Preserve browserslist 4.28.8; require qs 6.16.0 and fast-uri 3.1.6 with the exact URLs/integrities stated there; touch only package-lock.json; do not merge.

propr-dev[bot] and others added 2 commits September 2, 2026 19:11
…ime lock res

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

Implementation completed successfully.
…cal-qs-and--20260902-1901-jro

[2078 by GPT-5.6 Sol] Restore canonical qs and fast-uri runtime lock resolution for macOS/Linux packaging
@propr-dev

propr-dev Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

CI failed: Validate unsigned win32-x64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned win32-x64 package
  • Result: failure
  • Commit: 03821a2d9175 (03821a2d91755e650df838dd7548ad687336013b)
  • 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

CI failed: Validate unsigned win32-arm64 package

Please investigate and fix this CI failure.

  • Check: Validate unsigned win32-arm64 package
  • Result: failure
  • Commit: 03821a2d9175 (03821a2d91755e650df838dd7548ad687336013b)
  • Details: View CI failure

Failure evidence

.github:15
Process completed with exit code 1.

@integry
integry merged commit 6f88cb0 into 1950-epic-cross-platform-dsk Sep 2, 2026
21 of 24 checks passed
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

Full Test Suite Results

Validation failed during: Full test suite.

  • Dependency install: success
  • Workspace build: success
  • Docs validation: success
  • Redis startup: success
  • Full test suite: failure
View Test Output

> propr@0.8.15 test:full:prepared
> npm run test:server


> propr@0.8.15 test:server
> node scripts/run-test-suite.mjs


[1/333] apps/desktop/scripts/assert-windows-mvp-package.test.mjs
TAP version 13
# Subtest: Windows MVP ASAR main entry
    # Subtest: uses the rooted listPackage representation accepted by extractFile
    ok 1 - uses the rooted listPackage representation accepted by extractFile
      ---
      duration_ms: 28.219889
      type: 'test'
      ...
    # Subtest: preserves the Windows separator after removing the one archive root
    ok 2 - preserves the Windows separator after removing the one archive root
      ---
      duration_ms: 0.208864
      type: 'test'
      ...
    # Subtest: rejects traversal, duplicate entries, and case-colliding main paths
    ok 3 - rejects traversal, duplicate entries, and case-colliding main paths
      ---
      duration_ms: 0.691049
      type: 'test'
      ...
    1..3
ok 1 - Windows MVP ASAR main entry
  ---
  duration_ms: 30.017191
  type: 'suite'
  ...
1..1
# tests 3
# suites 1
# pass 3
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 283.132568

[2/333] apps/desktop/scripts/build-windows-machine-installer.test.mjs
TAP version 13
# Subtest: sets explicit Windows-1252 MSI and summary code pages in probe and production WXS
ok 1 - sets explicit Windows-1252 MSI and summary code pages in probe and production WXS
  ---
  duration_ms: 1.82316
  type: 'test'
  ...
# Subtest: accepts the exact MSI ProductVersion boundary and retains version and upgrade identity in WXS
ok 2 - accepts the exact MSI ProductVersion boundary and retains version and upgrade identity in WXS
  ---
  duration_ms: 0.536637
  type: 'test'
  ...
# Subtest: rejects every unsupported ProductVersion at the direct installer builder entry point
ok 3 - rejects every unsupported ProductVersion at the direct installer builder entry point
  ---
  duration_ms: 1.848598
  type: 'test'
  ...
# Subtest: uses per-machine scope without explicitly authoring the derived ALLUSERS property
ok 4 - uses per-machine scope without explicitly authoring the derived ALLUSERS property
  ---
  duration_ms: 0.440162
  type: 'test'
  ...
# Subtest: authors the complete per-machine Start Menu contract for x64 and ARM64
ok 5 - authors the complete per-machine Start Menu contract for x64 and ARM64
  ---
  duration_ms: 1.087324
  type: 'test'
  ...
# Subtest: selects only the installed x64 WiX directory or an explicit ARM64 build directory
ok 6 - selects only the installed x64 WiX directory or an explicit ARM64 build directory
  ---
  duration_ms: 0.716246
  type: 'test'
  ...
# Subtest: uses a ten-minute timeout only for production Light
ok 7 - uses a ten-minute timeout only for production Light
  ---
  duration_ms: 0.346581
  type: 'test'
  ...
# Subtest: keeps WiX processes and their emitted diagnostics bounded
ok 8 - keeps WiX processes and their emitted diagnostics bounded
  ---
  duration_ms: 0.181963
  type: 'test'
  ...
# Subtest: emits WiX v3 default registry values without empty Name attributes
ok 9 - emits WiX v3 default registry values without empty Name attributes
  ---
  duration_ms: 0.507883
  type: 'test'
  ...
1..9
# tests 9
# suites 0
# pass 9
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 239.446091

[3/333] apps/desktop/scripts/packaged-smoke-support.test.mjs
TAP version 13
# Subtest: packaged smoke native window layout
    # Subtest: accepts the preferred size while retaining responsive containment
    ok 1 - accepts the preferred size while retaining responsive containment
      ---
      duration_ms: 1.213233
      type: 'test'
      ...
    # Subtest: accepts the 1024x720-clamped size while retaining responsive containment
    ok 2 - accepts the 1024x720-clamped size while retaining responsive containment
      ---
      duration_ms: 0.198158
      type: 'test'
      ...
    # Subtest: accepts the configured minimum size while retaining responsive containment
    ok 3 - accepts the configured minimum size while retaining responsive containment
      ---
      duration_ms: 0.18639
      type: 'test'
      ...
    # Subtest: accepts the undersized work area while retaining responsive containment
    ok 4 - accepts the undersized work area while retaining responsive containment
      ---
      duration_ms: 0.138789
      type: 'test'
      ...
    # Subtest: rejects an unclamped window or a viewport inconsistent with native content chrome
    ok 5 - rejects an unclamped window or a viewport inconsistent with native content chrome
      ---
      duration_ms: 0.514994
      type: 'test'
      ...
    # Subtest: accepts actual reduced native sizing only when both minimum constraints are exercised
    ok 6 - accepts actual reduced native sizing only when both minimum constraints are exercised
      ---
      duration_ms: 0.240431
      type: 'test'
      ...
    1..6
ok 1 - packaged smoke native window layout
  ---
  duration_ms: 3.724377
  type: 'suite'
  ...
# Subtest: packaged smoke child environment
    # Subtest: passes only platform launch inputs and private profile paths from a hostile parent
    ok 1 - passes only platform launch inputs and private profile paths from a hostile parent
      ---
      duration_ms: 17.248001
      type: 'test'
      ...
    # Subtest: keeps cleanup bounded to the generated profile root
    ok 2 - keeps cleanup bounded to the generated profile root
      ---
      duration_ms: 10.522354
      type: 'test'
      ...
    # Subtest: accepts only a normalized absolute Windows SystemRoot directory
    ok 3 - accepts only a normalized absolute Windows SystemRoot directory
      ---
      duration_ms: 2.096831
      type: 'test'
      ...
    # Subtest: contains no parent environment spread, enumeration, denylist, PATH, or shell launch
    ok 4 - contains no parent environment spread, enumeration, denylist, PATH, or shell launch
      ---
      duration_ms: 3.671358
      type: 'test'
      ...
    # Subtest: requires the adjacent packaged spawn options with LF or CRLF source
    ok 5 - requires the adjacent packaged spawn options with LF or CRLF source
      ---
      duration_ms: 1.613936
      type: 'test'
      ...
    1..5
ok 2 - packaged smoke child environment
  ---
  duration_ms: 35.646731
  type: 'suite'
  ...
1..2
# tests 11
# suites 2
# pass 11
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 269.352383

[4/333] apps/desktop/scripts/release-architecture.test.mjs
TAP version 13
# Subtest: machine-wide Windows artifacts require a real MSI compound file
ok 1 - machine-wide Windows artifacts require a real MSI compound file
  ---
  duration_ms: 7.62608
  type: 'test'
  ...
# Subtest: administrative MSI payload inspection
    # Subtest: uses exact fixed native extractor argv and minimal environments
    ok 1 - uses exact fixed native extractor argv and minimal environments
      ---
      duration_ms: 1.32437
      type: 'test'
      ...
    # Subtest: accepts only the canonical application with the one administrative root prefix
    ok 2 - accepts only the canonical application with the one administrative root prefix
      ---
      duration_ms: 14.941835
      type: 'test'
      ...
    # Subtest: rejects path escapes and case collisions from the Linux listing before extraction
    ok 3 - rejects path escapes and case collisions from the Linux listing before extraction
      ---
      duration_ms: 0.959452
      type: 'test'
      ...
    # Subtest: uses fixed missing and duplicate canonical-app codes with bounded counts
    ok 4 - uses fixed missing and duplicate canonical-app codes with bounded counts
      ---
      duration_ms: 9.298093
      type: 'test'
      ...
    # Subtest: distinguishes authority resources, unsafe trees, and architecture mismatch without path data
    ok 5 - distinguishes authority resources, unsafe trees, and architecture mismatch without path data
      ---
      duration_ms: 13.775011
      type: 'test'
      ...
    # Subtest: maps extractor failures to one redacted tool code
    ok 6 - maps extractor failures to one redacted tool code
      ---
      duration_ms: 2.792196
      type: 'test'
      ...
    # Subtest: retains compound-file, per-machine scope, and canonical PE evidence across extraction
    ok 7 - retains compound-file, per-machine scope, and canonical PE evidence across extraction
      ---
      duration_ms: 5.786026
      type: 'test'
      ...
    # Subtest: fails closed on extractor nonzero, stderr, output overflow, and timeout
    ok 8 - fails closed on extractor nonzero, stderr, output overflow, and timeout
      ---
      duration_ms: 145.926402
      type: 'test'
      ...
    1..8
ok 2 - administrative MSI payload inspection
  ---
  duration_ms: 195.885241
  type: 'suite'
  ...
# Subtest: DEB and RPM executable layouts
    # Subtest: accept only the canonical regular ELF payload and documented launcher symlink
    ok 1 - accept only the canonical regular ELF payload and documented launcher symlink
      ---
      duration_ms: 16.351032
      type: 'test'
      ...
    # Subtest: reject missing and extra payload names for both package formats
    ok 2 - reject missing and extra payload names for both package formats
      ---
      duration_ms: 14.245358
      type: 'test'
      ...
    # Subtest: reject unexpected same-name file types and non-ELF or cross-architecture payloads
    ok 3 - reject unexpected same-name file types and non-ELF or cross-architecture payloads
      ---
      duration_ms: 16.263111
      type: 'test'
      ...
    # Subtest: reject launcher escapes, cycles, and targets other than the canonical payload
    ok 4 - reject launcher escapes, cycles, and targets other than the canonical payload
      ---
      duration_ms: 11.171379
      type: 'test'
      ...
    # Subtest: reject special files with the executable name
    ok 5 - reject special files with the executable name
      ---
      duration_ms: 14.806296
      type: 'test'
      ...
    1..5
ok 3 - DEB and RPM executable layouts
  ---
  duration_ms: 73.268544
  type: 'suite'
  ...
# Subtest: DMG application layout
    # Subtest: accepts the real Forge tree with its install link and nested Electron helper bundles
    ok 1 - accepts the real Forge tree with its install link and nested Electron helper bundles
      ---
      duration_ms: 13.646548
      type: 'test'
      ...
    # Subtest: rejects a symbolic-link canonical helper bundle
    ok 2 - rejects a symbolic-link canonical helper bundle
      ---
      duration_ms: 6.356533
      type: 'test'
      ...
    # Subtest: rejects a symbolic-link canonical helper executable ancestor
    ok 3 - rejects a symbolic-link canonical helper executable ancestor
      ---
      duration_ms: 8.243232
      type: 'test'
      ...
    # Subtest: rejects every symbolic link outside canonical framework internals
    ok 4 - rejects every symbolic link outside canonical framework internals
      ---
      duration_ms: 9.91428
      type: 'test'
      ...
    # Subtest: rejects escaping, cyclic, missing, and case-mismatched framework symbolic links
    ok 5 - rejects escaping, cyclic, missing, and case-mismatched framework symbolic links
      ---
      duration_ms: 35.157486
      type: 'test'
      ...
    # Subtest: never treats Linux 7z sanitized install-link output as native layout evidence
    ok 6 - never treats Linux 7z sanitized install-link output as native layout evidence
      ---
      duration_ms: 7.910147
      type: 'test'
      ...
    # Subtest: rejects wrong bundles, alternate same-name executables, and canonical symlink escapes
    ok 7 - rejects wrong bundles, alternate same-name executables, and canonical symlink escapes
      ---
      duration_ms: 13.352131
      type: 'test'
      ...
    # Subtest: rejects alternate top-level application bundles
    ok 8 - rejects alternate top-level application bundles
      ---
      duration_ms: 6.115141
      type: 'test'
      ...
    # Subtest: rejects unsafe links inside the canonical application bundle
    ok 9 - rejects unsafe links inside the canonical application bundle
      ---
      duration_ms: 11.486947
      type: 'test'
      ...
    # Subtest: rejects non-helper nested application bundles
    ok 10 - rejects non-helper nested application bundles
      ---
      duration_ms: 10.642764
      type: 'test'
      ...
    # Subtest: rejects case-colliding top-level entries when the filesystem permits them
    ok 11 - rejects case-colliding top-level entries when the filesystem permits them
      ---
      duration_ms: 7.072435
      type: 'test'
      ...
    # Subtest: rejects special files inside the canonical application bundle
    ok 12 - rejects special files inside the canonical application bundle
      ---
      duration_ms: 12.865709
      type: 'test'
      ...
    1..12
ok 4 - DMG application layout
  ---
  duration_ms: 143.479149
  type: 'suite'
  ...
1..4
# tests 26
# suites 3
# pass 26
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 651.483299

[5/333] apps/desktop/scripts/release-artifacts.test.mjs
TAP version 13
# Subtest: desktop release artifacts
    # Subtest: stages named artifacts and finalizes unsigned validation metadata
    ok 1 - stages named artifacts and finalizes unsigned validation metadata
      ---
      duration_ms: 92.465329
      type: 'test'
      ...
    # Subtest: rejects extensionless, doubled-extension, case-conflicting, duplicate, wrong-kind, stale, and mixed-target names
    ok 2 - rejects extensionless, doubled-extension, case-conflicting, duplicate, wrong-kind, stale, and mixed-target names
      ---
      duration_ms: 233.514941
      type: 'test'
      ...
    # Subtest: rejects altered DMG bytes even when fragment artifact metadata is rewritten
    ok 3 - rejects altered DMG bytes even when fragment artifact metadata is rewritten
      ---
      duration_ms: 23.119869
      type: 'test'
      ...
    # Subtest: rejects permanent DMG replacement or in-place mutation during held inspection without emitting evidence
    ok 4 - rejects permanent DMG replacement or in-place mutation during held inspection without emitting evidence
      ---
      duration_ms: 10.147064
      type: 'test'
      ...
    # Subtest: keeps held A bytes, evidence, and publication stable when original and public pathnames change during inspection
    ok 5 - keeps held A bytes, evidence, and publication stable when original and public pathnames change during inspection
      ---
      duration_ms: 9.108498
      type: 'test'
      ...
    # Subtest: continues to reject a mutable pathname passed directly to DMG inspection
    ok 6 - continues to reject a mutable pathname passed directly to DMG inspection
      ---
      duration_ms: 0.267893
      type: 'test'
      ...
    # Subtest: requires explicit fixture authority for Windows-hosted DMG evidence tests
    ok 7 - requires explicit fixture authority for Windows-hosted DMG evidence tests # SKIP
      ---
      duration_ms: 0.0731
      type: 'test'
      ...
    # Subtest: accepts real Darwin mode-0700 directory and mode-0600 single-link file authority
    ok 8 - accepts real Darwin mode-0700 directory and mode-0600 single-link file authority # SKIP
      ---
      duration_ms: 0.049565
      type: 'test'
      ...
    # Subtest: rejects native Darwin broad mode, foreign owner, extra link, replacement type, and symlink with fixed authority codes
    ok 9 - rejects native Darwin broad mode, foreign owner, extra link, replacement type, and symlink with fixed authority codes # SKIP
      ---
      duration_ms: 0.083456
      type: 'test'
      ...
    # Subtest: accepts native xattr/ctime-only change when held bytes and identity are unchanged
    ok 10 - accepts native xattr/ctime-only change when held bytes and identity are unchanged # SKIP
      ---
      duration_ms: 0.209545
      type: 'test'
      ...
    # Subtest: does not emit claimed DMG layout evidence without the native-validation marker
    ok 11 - does not emit claimed DMG layout evidence without the native-validation marker
      ---
      duration_ms: 6.854561
      type: 'test'
      ...
    # Subtest: strictly rejects missing, mixed, stale, malformed, or fabricated native DMG evidence
    ok 12 - strictly rejects missing, mixed, stale, malformed, or fabricated native DMG evidence
      ---
      duration_ms: 281.322458
      type: 'test'
      ...
    # Subtest: rejects native DMG evidence copied between x64 and arm64 fragments
    ok 13 - rejects native DMG evidence copied between x64 and arm64 fragments
      ---
      duration_ms: 24.888313
      type: 'test'
      ...
    # Subtest: rejects duplicate target fragments before aggregation
    ok 14 - rejects duplicate target fragments before aggregation
      ---
      duration_ms: 23.671253
      type: 'test'
      ...
    # Subtest: rejects either Windows fragment when the installed ordinary-user application gate was skipped
    ok 15 - rejects either Windows fragment when the installed ordinary-user application gate was skipped
      ---
      duration_ms: 64.91077
      type: 'test'
      ...
    # Subtest: fails closed when trusted update signing configuration is incomplete
    ok 16 - fails closed when trusted update signing configuration is incomplete
      ---
      duration_ms: 60.725374
      type: 'test'
      ...
    # Subtest: signs cryptographically bound feeds only in the trusted release phase
    ok 17 - signs cryptographically bound feeds only in the trusted release phase
      ---
      duration_ms: 48.51149
      type: 'test'
      ...
    # Subtest: refuses to sign a renamed extensionless distributable
    ok 18 - refuses to sign a renamed extensionless distributable
      ---
      duration_ms: 33.246608
      type: 'test'
      ...
    # Subtest: refuses to sign when artifact bytes changed after unsigned finalization
    ok 19 - refuses to sign when artifact bytes changed after unsigned finalization
      ---
      duration_ms: 44.229704
      type: 'test'
      ...
    # Subtest: rejects unsigned production metadata and actual signer mismatches
    ok 20 - rejects unsigned production metadata and actual signer mismatches
      ---
      duration_ms: 82.460714
      type: 'test'
      ...
    # Subtest: rejects mixed Windows signers and tampered fingerprint evidence
    ok 21 - rejects mixed Windows signers and tampered fingerprint evidence
      ---
      duration_ms: 45.820971
      type: 'test'
      ...
    # Subtest: parses x64 and arm64 ELF, PE, and Mach-O executable fixtures
    ok 22 - parses x64 and arm64 ELF, PE, and Mach-O executable fixtures
      ---
      duration_ms: 1.362808
      type: 'test'
      ...
    # Subtest: derives Windows target architecture from the full NUPKG independently of its supported bootstrapper
    ok 23 - derives Windows target architecture from the full NUPKG independently of its supported bootstrapper
      ---
      duration_ms: 10.769229
      type: 'test'
      ...
    # Subtest: binds ZIP and NUPKG executables to exact maker-specific canonical paths
    ok 24 - binds ZIP and NUPKG executables to exact maker-specific canonical paths
      ---
      duration_ms: 3.707007
      type: 'test'
      ...
    # Subtest: rejects missing, corrupt, mismatched, and ambiguous packaged Windows authority helpers
    ok 25 - rejects missing, corrupt, mismatched, and ambiguous packaged Windows authority helpers
      ---
      duration_ms: 5.750993
      type: 'test'
      ...
    # Subtest: accepts only the real Forge macOS framework-internal symbolic-link layout
    ok 26 - accepts only the real Forge macOS framework-internal symbolic-link layout
      ---
      duration_ms: 4.579301
      type: 'test'
      ...
    # Subtest: rejects hostile macOS ZIP symbolic links before trusting their payloads
    ok 27 - rejects hostile macOS ZIP symbolic links before trusting their payloads
      ---
      duration_ms: 14.228923
      type: 'test'
      ...
    # Subtest: rejects unsafe, duplicate, shadowed, forged, alternate, and noncanonical archive layouts
    ok 28 - rejects unsafe, duplicate, shadowed, forged, alternate, and noncanonical archive layouts
      ---
      duration_ms: 5.099078
      type: 'test'
      ...
    # Subtest: rejects cross-labeled package architectures at staging and finalization
    ok 29 - rejects cross-labeled package architectures at staging and finalization
      ---
      duration_ms: 32.50144
      type: 'test'
      ...
    1..29
ok 1 - desktop release artifacts
  ---
  duration_ms: 1166.501535
  type: 'suite'
  ...
1..1
# tests 29
# suites 1
# pass 25
# fail 0
# cancelled 0
# skipped 4
# todo 0
# duration_ms 1388.149727

[6/333] apps/desktop/scripts/release-preflight.test.mjs
TAP version 13
# Subtest: desktop release preflight
    # Subtest: accepts only a new immutable tag reachable from protected main and a protected environment
    ok 1 - accepts only a new immutable tag reachable from protected main and a protected environment
      ---
      duration_ms: 4.032059
      type: 'test'
      ...
    # Subtest: accepts an authorization-visible bypass list and fails closed for hidden or denied ruleset details
    ok 2 - accepts an authorization-visible bypass list and fails closed for hidden or denied ruleset details
      ---
      duration_ms: 1.838934
      type: 'test'
      ...
    # Subtest: paginates repository rulesets and reads every full rule definition
    ok 3 - paginates repository rulesets and reads every full rule definition
      ---
      duration_ms: 4.547634
      type: 'test'
      ...
    # Subtest: requires an exact active bypass-free update and deletion tag ruleset
    ok 4 - requires an exact active bypass-free update and deletion tag ruleset
      ---
      duration_ms: 2.397934
      type: 'test'
      ...
    # Subtest: rejects ruleset mutation or deletion during preflight
    ok 5 - rejects ruleset mutation or deletion during preflight
      ---
      duration_ms: 1.755077
      type: 'test'
      ...
    # Subtest: requires the complete effective environment policy set to be exactly desktop-v* tags
    ok 6 - requires the complete effective environment policy set to be exactly desktop-v* tags
      ---
      duration_ms: 3.590166
      type: 'test'
      ...
    # Subtest: requires the separately protected preflight credential environment
    ok 7 - requires the separately protected preflight credential environment
      ---
      duration_ms: 0.744098
      type: 'test'
      ...
    # Subtest: paginates all environment policies and rejects a permissive policy on a later page
    ok 8 - paginates all environment policies and rejects a permissive policy on a later page
      ---
      duration_ms: 0.906322
      type: 'test'
      ...
    # Subtest: rejects missing or ambiguous environment protection and explicit API denial
    ok 9 - rejects missing or ambiguous environment protection and explicit API denial
      ---
      duration_ms: 1.329969
      type: 'test'
      ...
    # Subtest: rejects tags not created by this push, tags off main, and moved or existing releases
    ok 10 - rejects tags not created by this push, tags off main, and moved or existing releases
      ---
      duration_ms: 1.805193
      type: 'test'
      ...
    1..10
ok 1 - desktop release preflight
  ---
  duration_ms: 24.767451
  type: 'suite'
  ...
1..1
# tests 10
# suites 1
# pass 10
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 270.134204

[7/333] apps/desktop/scripts/release-publish.test.mjs
TAP version 13
# Subtest: atomic desktop release publication
    # Subtest: creates a draft, paginates and verifies the exact final assets, then publishes
    ok 1 - creates a draft, paginates and verifies the exact final assets, then publishes
      ---
      duration_ms: 160.455441
      type: 'test'
      ...
    # Subtest: leaves a partial upload as a recoverable draft and resumes only matching assets
    ok 2 - leaves a partial upload as a recoverable draft and resumes only matching assets
      ---
      duration_ms: 11.926709
      type: 'test'
      ...
    # Subtest: rejects unexpected, duplicate, size, and content-digest asset mismatches without publishing
    ok 3 - rejects unexpected, duplicate, size, and content-digest asset mismatches without publishing
      ---
      duration_ms: 8.708658
      type: 'test'
      ...
    # Subtest: rejects tag drift before publishing the verified draft
    ok 4 - rejects tag drift before publishing the verified draft
      ---
      duration_ms: 5.484862
      type: 'test'
      ...
    # Subtest: rejects local files outside or missing from finalized checksums
    ok 5 - rejects local files outside or missing from finalized checksums
      ---
      duration_ms: 4.386612
      type: 'test'
      ...
    1..5
ok 1 - atomic desktop release publication
  ---
  duration_ms: 192.343087
  type: 'suite'
  ...
1..1
# tests 5
# suites 1
# pass 5
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 398.505513

[8/333] apps/desktop/scripts/verify-darwin-image.test.mjs
TAP version 13
# Subtest: Darwin image verification retries only bounded documented resource states
ok 1 - Darwin image verification retries only bounded documented resource states
  ---
  duration_ms: 12.777853
  type: 'test'
  ...
# Subtest: Darwin image verification does not retry malformed/truncated images or accept mutation
ok 2 - Darwin image verification does not retry malformed/truncated images or accept mutation
  ---
  duration_ms: 9.191618
  type: 'test'
  ...
# Subtest: Darwin image verification holds a fixed hdiutil image behind a real mutation and replacement barrier
ok 3 - Darwin image verification holds a fixed hdiutil image behind a real mutation and replacement barrier # SKIP
  ---
  duration_ms: 0.190246
  type: 'test'
  ...
1..3
# tests 3
# suites 0
# pass 2
# fail 0
# cancelled 0
# skipped 1
# todo 0
# duration_ms 246.252389

[9/333] apps/desktop/src/deep-link-delivery.test.ts
TAP version 13
# Subtest: desktop deep-link delivery
    # Subtest: queues links received after did-finish-load until the ready window is registered
    ok 1 - queues links received after did-finish-load until the ready window is registered
      ---
      duration_ms: 1.585373
      type: 'test'
      ...
    # Subtest: delivers a queued initial Connect URL before packaged smoke asserts it and only once
    ok 2 - delivers a queued initial Connect URL before packaged smoke asserts it and only once
      ---
      duration_ms: 0.593061
      type: 'test'
      ...
    1..2
ok 1 - desktop deep-link delivery
  ---
  duration_ms: 3.425528
  type: 'suite'
  ...
1..1
# tests 2
# suites 1
# pass 2
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 231.053808

[10/333] apps/desktop/src/ipc.test.ts
TAP version 13
# Subtest: desktop session IPC operations
    # Subtest: logs out through the active Electron session with credentials and without following redirects
    ok 1 - logs out through the active Electron session with credentials and without following redirects
      ---
      duration_ms: 23.073841
      type: 'test'
      ...
    # Subtest: rejects untrusted logout endpoints before making a session request
    ok 2 - rejects untrusted logout endpoints before making a session request
      ---
      duration_ms: 0.842136
      type: 'test'
      ...
    1..2
ok 1 - desktop session IPC operations
  ---
  duration_ms: 24.985884
  type: 'suite'
  ...
1..1
# tests 2
# suites 1
# pass 2
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 268.229055

[11/333] apps/desktop/src/preload-bridge.test.ts
TAP version 13
# Subtest: desktop preload bridge
    # Subtest: exposes only the narrow frozen namespaces
    ok 1 - exposes only the narrow frozen namespaces
      ---
      duration_ms: 1.414366
      type: 'test'
      ...
    # Subtest: maps profile and credential operations to fixed channels
    ok 2 - maps profile and credential operations to fixed channels
      ---
      duration_ms: 0.483147
      type: 'test'
      ...
    # Subtest: does not expose Electron event objects to deep-link listeners
    ok 3 - does not expose Electron event objects to deep-link listeners
      ---
      duration_ms: 0.24625
      type: 'test'
      ...
    # Subtest: buffers startup and second-instance deep links until the renderer subscribes
    ok 4 - buffers startup and second-instance deep links until the renderer subscribes
      ---
      duration_ms: 0.221413
      type: 'test'
      ...
    1..4
ok 1 - desktop preload bridge
  ---
  duration_ms: 3.357185
  type: 'suite'
  ...
1..1
# tests 4
# suites 1
# pass 4
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 242.19171

[12/333] apps/desktop/src/profile-store.test.ts
TAP version 13
# Subtest: desktop profile store
    # Subtest: persists validated profiles and active selection
    ok 1 - persists validated profiles and active selection
      ---
      duration_ms: 13.489302
      type: 'test'
      ...
    # Subtest: encrypts credentials before writing app-owned storage
    ok 2 - encrypts credentials before writing app-owned storage
      ---
      duration_ms: 6.389127
      type: 'test'
      ...
    # Subtest: serializes concurrent credential writes with last-write semantics
    ok 3 - serializes concurrent credential writes with last-write semantics
      ---
      duration_ms: 4.900935
      type: 'test'
      ...
    # Subtest: orders concurrent credential writes and removals by invocation
    ok 4 - orders concurrent credential writes and removals by invocation
      ---
      duration_ms: 6.750415
      type: 'test'
      ...
    # Subtest: refuses plaintext fallback when encryption is unavailable or basic_text
    ok 5 - refuses plaintext fallback when encryption is unavailable or basic_text
      ---
      duration_ms: 1.480085
      type: 'test'
      ...
    # Subtest: rejects unsafe endpoints and path-like profile identifiers
    ok 6 - rejects unsafe endpoints and path-like profile identifiers
      ---
      duration_ms: 4.184338
      type: 'test'
      ...
    1..6
ok 1 - desktop profile store
  ---
  duration_ms: 38.826284
  type: 'suite'
  ...
1..1
# tests 6
# suites 1
# pass 6
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 285.137106

[13/333] apps/desktop/src/release-config.test.ts
TAP version 13
# Subtest: desktop release configuration
    # Subtest: keeps Linux maker executables aligned with the packaged executable
    ok 1 - keeps Linux maker executables aligned with the packaged executable
      ---
      duration_ms: 531.728058
      type: 'test'
      ...
    # Subtest: propagates an explicit independent desktop version
    ok 2 - propagates an explicit independent desktop version
      ---
      duration_ms: 0.403757
      type: 'test'
      ...
    # Subtest: accepts the exact MSI ProductVersion numeric boundary for Windows releases
    ok 3 - accepts the exact MSI ProductVersion numeric boundary for Windows releases
      ---
      duration_ms: 0.21988
      type: 'test'
      ...
    # Subtest: preserves the stable SemVer diagnostic for malformed Windows release versions
    ok 4 - preserves the stable SemVer diagnostic for malformed Windows release versions
      ---
      duration_ms: 0.531549
      type: 'test'
      ...
    # Subtest: rejects canonical stable Windows versions outside MSI bounds with one fixed actionable diagnostic
    ok 5 - rejects canonical stable Windows versions outside MSI bounds with one fixed actionable diagnostic
      ---
      duration_ms: 0.273761
      type: 'test'
      ...
    # Subtest: preserves stable SemVer policy outside the Windows MSI path
    ok 6 - preserves stable SemVer policy outside the Windows MSI path
      ---
      duration_ms: 0.224076
      type: 'test'
      ...
    # Subtest: keeps updates disabled unless they are explicitly enabled
    ok 7 - keeps updates disabled unless they are explicitly enabled
      ---
      duration_ms: 0.125598
      type: 'test'
      ...
    # Subtest: requires a signed build and a complete trusted update configuration
    ok 8 - requires a signed build and a complete trusted update configuration
      ---
      duration_ms: 0.828355
      type: 'test'
      ...
    # Subtest: parses canonical Windows certificate or SPKI SHA-256 pin allowlists for artifact signing
    ok 9 - parses canonical Windows certificate or SPKI SHA-256 pin allowlists for artifact signing
      ---
      duration_ms: 0.59214
      type: 'test'
      ...
    # Subtest: fails closed to unsupported Windows updates even when every update variable is configured or malformed
    ok 10 - fails closed to unsupported Windows updates even when every update variable is configured or malformed
      ---
      duration_ms: 0.482455
      type: 'test'
      ...
    # Subtest: preserves opaque signing credentials while normalizing non-secret members
    ok 11 - preserves opaque signing credentials while normalizing non-secret members
      ---
      duration_ms: 0.203025
      type: 'test'
      ...
    # Subtest: rejects whitespace-only and partially configured signing groups with fixed diagnostics
    ok 12 - rejects whitespace-only and partially configured signing groups with fixed diagnostics
      ---
      duration_ms: 0.271388
      type: 'test'
      ...
    # Subtest: fails closed when a production signing or notarization condition is absent
    ok 13 - fails closed when a production signing or notarization condition is absent
      ---
      duration_ms: 0.484558
      type: 'test'
      ...
    1..13
ok 1 - desktop release configuration
  ---
  duration_ms: 537.845923
  type: 'suite'
  ...
1..1
# tests 13
# suites 1
# pass 13
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 812.967275

[14/333] apps/desktop/src/release-workflow.test.ts
TAP version 13
# Subtest: desktop trusted release workflow
    # Subtest: keeps pull-request packaging unsigned and completely secretless
    ok 1 - keeps pull-request packaging unsigned and completely secretless
      ---
      duration_ms: 1.390881
      type: 'test'
      ...
    # Subtest: allows production only from a new protected-main desktop tag after protected read-only preflight
    ok 2 - allows production only from a new protected-main desktop tag after protected read-only preflight
      ---
      duration_ms: 1.106964
      type: 'test'
      ...
    # Subtest: grants the preflight token Environments read for both environment API calls without exposing it
    ok 3 - grants the preflight token Environments read for both environment API calls without exposing it
      ---
      duration_ms: 0.316896
      type: 'test'
      ...
    # Subtest: keeps every certificate and the update private key inside preflight-dependent environment jobs
    ok 4 - keeps every certificate and the update private key inside preflight-dependent environment jobs
      ---
      duration_ms: 0.357527
      type: 'test'
      ...
    # Subtest: fails closed for every production signing, notarization, update, and signer condition
    ok 5 - fails closed for every production signing, notarization, update, and signer condition
      ---
      duration_ms: 0.499531
      type: 'test'
      ...
    # Subtest: preserves the opaque Windows certificate password for package and MSI signing
    ok 6 - preserves the opaque Windows certificate password for package and MSI signing
      ---
      duration_ms: 0.358128
      type: 'test'
      ...
    # Subtest: rechecks package architecture in staging and finalization and publishes only signed new releases
    ok 7 - rechecks package architecture in staging and finalization and publishes only signed new releases
      ---
      duration_ms: 0.396786
      type: 'test'
      ...
    # Subtest: retains the exact native matrix when the workflow checkout uses CRLF
    ok 8 - retains the exact native matrix when the workflow checkout uses CRLF
      ---
      duration_ms: 0.793804
      type: 'test'
      ...
    # Subtest: runs the native DMG layout suite on both macOS architectures
    ok 9 - runs the native DMG layout suite on both macOS architectures
      ---
      duration_ms: 1.079383
      type: 'test'
      ...
    # Subtest: keeps both Windows architectures and the complete machine-scope installer contract mandatory
    ok 10 - keeps both Windows architectures and the complete machine-scope installer contract mandatory
      ---
      duration_ms: 2.295381
      type: 'test'
      ...
    # Subtest: revalidates each real WiX MSI first on native Windows and then from the same staged bytes on Linux
    ok 11 - revalidates each real WiX MSI first on native Windows and then from the same staged bytes on Linux
      ---
      duration_ms: 0.52568
      type: 'test'
      ...
    # Subtest: supplementary lint retains installed Windows worker lifecycle contracts
    ok 12 - supplementary lint retains installed Windows worker lifecycle contracts
      ---
      duration_ms: 7.552214
      type: 'test'
      ...
    # Subtest: runs executable supervisor acceptance on both Windows architectures and keeps supplementary contracts
    ok 13 - runs executable supervisor acceptance on both Windows architectures and keeps supplementary contracts
      ---
      duration_ms: 21.722668
      type: 'test'
      ...
    # Subtest: supplementary lint retains fail-closed installed-app cleanup guards
    ok 14 - supplementary lint retains fail-closed installed-app cleanup guards
      ---
      duration_ms: 2.116732
      type: 'test'
      ...
    # Subtest: uses bounded network logon impersonation with secure native credential cleanup
    ok 15 - uses bounded network logon impersonation with secure native credential cleanup
      ---
      duration_ms: 0.59831
      type: 'test'
      ...
    # Subtest: requires the exact ordinary-user SID before bounded presence and absence checks
    ok 16 - requires the exact ordinary-user SID before bounded presence and absence checks
      ---
      duration_ms: 0.574003
      type: 'test'
      ...
    # Subtest: keeps shortcut proof output fixed and redacted and rejects the legacy process proof
    ok 17 - keeps shortcut proof output fixed and redacted and rejects the legacy process proof
      ---
      duration_ms: 0.634233
      type: 'test'
      ...
    # Subtest: emits fixed uninstall and cleanup substages without masking the primary failure
    ok 18 - emits fixed uninstall and cleanup substages without masking the primary failure
      ---
      duration_ms: 1.67619
      type: 'test'
      ...
    # Subtest: keeps the canonical common shortcut and exact-identity cleanup
    ok 19 - keeps the canonical common shortcut and exact-identity cleanup
      ---
      duration_ms: 0.796227
      type: 'test'
      ...
    # Subtest: replaces a hostile privileged parent environment with the exact smoke child allowlist
    ok 20 - replaces a hostile privileged parent environment with the exact smoke child allowlist
      ---
      duration_ms: 1.194927
      type: 'test'
      ...
    # Subtest: keeps spaced and unspaced smoke argv values as distinct ArgumentList entries
    ok 21 - keeps spaced and unspaced smoke argv values as distinct ArgumentList entries
      ---
      duration_ms: 0.363646
      type: 'test'
      ...
    # Subtest: opens installed Windows smoke evidence with a bounded, redacted reader
    ok 22 - opens installed Windows smoke evidence with a bounded, redacted reader
      ---
      duration_ms: 1.162518
      type: 'test'
      ...
    # Subtest: configures signed updates only for macOS and never advertises a Windows update feed
    ok 23 - configures signed updates only for macOS and never advertises a Windows update feed
      ---
      duration_ms: 0.341984
      type: 'test'
      ...
    1..23
ok 1 - desktop trusted release workflow
  ---
  duration_ms: 50.767991
  type: 'suite'
  ...
1..1
# tests 23
# suites 1
# pass 23
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 341.310066

[15/333] apps/desktop/src/security.test.ts
TAP version 13
# Subtest: desktop URL security
    # Subtest: only accepts HTTPS and loopback HTTP API endpoints
    ok 1 - only accepts HTTPS and loopback HTTP API endpoints
      ---
      duration_ms: 1.207665
      type: 'test'
      ...
    # Subtest: denies unsafe external browser schemes and credential-bearing URLs
    ok 2 - denies unsafe external browser schemes and credential-bearing URLs
      ---
      duration_ms: 0.193381
      type: 'test'
      ...
    # Subtest: requires an exact loopback development origin
    ok 3 - requires an exact loopback development origin
      ---
      duration_ms: 0.276836
      type: 'test'
      ...
    # Subtest: retains IPC trust for hash-routed packaged renderer URLs only
    ok 4 - retains IPC trust for hash-routed packaged renderer URLs only
      ---
      duration_ms: 0.248494
      type: 'test'
      ...
    # Subtest: allowlists custom protocol actions and extracts them from argv
    ok 5 - allowlists custom protocol actions and extracts them from argv
      ---
      duration_ms: 0.327483
      type: 'test'
      ...
    # Subtest: accepts a normal internal dashboard route from an open deep link
    ok 6 - accepts a normal internal dashboard route from an open deep link
      ---
      duration_ms: 0.832051
      type: 'test'
      ...
    # Subtest: revalidates open links after canonical serialization
    ok 7 - revalidates open links after canonical serialization
      ---
      duration_ms: 2.329553
      type: 'test'
      ...
    # Subtest: rejects encoded delimiters combined with encoded traversal
    ok 8 - rejects encoded delimiters combined with encoded traversal
      ---
      duration_ms: 0.858551
      type: 'test'
      ...
    # Subtest: rejects malformed and unsafe open deep-link paths
    ok 9 - rejects malformed and unsafe open deep-link paths
      ---
      duration_ms: 2.501721
      type: 'test'
      ...
    # Subtest: publishes a restrictive production policy
    ok 10 - publishes a restrictive production policy
      ---
      duration_ms: 0.59862
      type: 'test'
      ...
    # Subtest: relaxes inline scripts only while Vite serves the development renderer
    ok 11 - relaxes inline scripts only while Vite serves the development renderer
      ---
      duration_ms: 0.196946
      type: 'test'
      ...
    1..11
ok 1 - desktop URL security
  ---
  duration_ms: 11.155932
  type: 'suite'
  ...
1..1
# tests 11
# suites 1
# pass 11
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 256.351378

[16/333] apps/desktop/src/signed-update-policy.test.ts
TAP version 13
# Subtest: Windows signed-update public boundary is fixed unsupported with zero external or apply calls
ok 1 - Windows signed-update public boundary is fixed unsupported with zero external or apply calls
  ---
  duration_ms: 1.378813
  type: 'test'
  ...
# Subtest: signed macOS feeds accept only the canonical ZIP extension and matching artifact URL
ok 2 - signed macOS feeds accept only the canonical ZIP extension and matching artifact URL
  ---
  duration_ms: 1.846796
  type: 'test'
  ...
# Subtest: macOS signed-update check remains check-only and verifies its exact feed and artifact
ok 3 - macOS signed-update check remains check-only and verifies its exact feed and artifact # SKIP
  ---
  duration_ms: 0.082975
  type: 'test'
  ...
1..3
# tests 3
# suites 0
# pass 2
# fail 0
# cancelled 0
# skipped 1
# todo 0
# duration_ms 282.182383

[17/333] apps/desktop/src/smoke-test-authorization.test.ts
TAP version 13
# Subtest: packaged smoke profile authorization
    # Subtest: requires both argv and environment smoke triggers with the explicit isolated directory
    ok 1 - requires both argv and environment smoke triggers with the explicit isolated directory
      ---
      duration_ms: 1.52293
      type: 'test'
      ...
    # Subtest: rejects a dual-authorized smoke invocation when the isolated directory is missing
    ok 2 - rejects a dual-authorized smoke invocation when the isolated directory is missing
      ---
      duration_ms: 0.211828
      type: 'test'
      ...
    # Subtest: rejects relative, default, non-smoke, and duplicate directories
    ok 3 - rejects relative, default, non-smoke, and duplicate directories
      ---
      duration_ms: 0.320922
      type: 'test'
      ...
    # Subtest: does not enable mutating smoke behavior in development or without a trigger
    ok 4 - does not enable mutating smoke behavior in development or without a trigger
      ---
      duration_ms: 0.149865
      type: 'test'
      ...
    # Subtest: terminates a malformed packaged smoke attempt without an interactive failure path
    ok 5 - terminates a malformed packaged smoke attempt without an interactive failure path
      ---
      duration_ms: 0.468955
      type: 'test'
      ...
    # Subtest: authorizes the isolated directory before profile and lifecycle construction
    ok 6 - authorizes the isolated directory before profile and lifecycle construction
      ---
      duration_ms: 0.284257
      type: 'test'
      ...
    # Subtest: registers one-shot lifecycle shutdown before smoke window creation and preserves required evidence order
    ok 7 - registers one-shot lifecycle shutdown before smoke window creation and preserves required evidence order
      ---
      duration_ms: 1.378833
      type: 'test'
      ...
    1..7
ok 1 - packaged smoke profile authorization
  ---
  duration_ms: 5.737596
  type: 'suite'
  ...
1..1
# tests 7
# suites 1
# pass 7
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 247.172774

[18/333] apps/desktop/src/smoke-test-evidence.test.ts
TAP version 13
# Subtest: packaged smoke evidence
    # Subtest: does not create evidence for a non-smoke run
    ok 1 - does not create evidence for a non-smoke run
      ---
      duration_ms: 2.213398
      type: 'test'
      ...
    # Subtest: writes only fixed allowlisted event-only records and suppresses duplicates
    ok 2 - writes only fixed allowlisted event-only records and suppresses duplicates
      ---
      duration_ms: 2.737786
      type: 'test'
      ...
    # Subtest: flushes the bounded lifecycle in emission order
    ok 3 - flushes the bounded lifecycle in emission order
      ---
      duration_ms: 3.241874
      type: 'test'
      ...
    1..3
ok 1 - packaged smoke evidence
  ---
  duration_ms: 9.337668
  type: 'suite'
  ...
1..1
# tests 3
# suites 1
# pass 3
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 241.913697

[19/333] apps/desktop/src/vite-file-system-url.test.ts
TAP version 13
# Subtest: Vite filesystem renderer URLs
    # Subtest: preserves an absolute POSIX path after the /@fs/ prefix
    ok 1 - preserves an absolute POSIX path after the /@fs/ prefix
      ---
      duration_ms: 0.673383
      type: 'test'
      ...
    # Subtest: normalizes a Windows drive-letter path and separators
    ok 2 - normalizes a Windows drive-letter path and separators
      ---
      duration_ms: 0.155904
      type: 'test'
      ...
    1..2
ok 1 - Vite filesystem renderer URLs
  ---
  duration_ms: 1.787828
  type: 'suite'
  ...
1..1
# tests 2
# suites 1
# pass 2
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 230.344283

[20/333] apps/desktop/src/window-options.test.ts
TAP version 13
# Subtest: desktop BrowserWindow security
    # Subtest: isolates and sandboxes the renderer without Node or webviews
    ok 1 - isolates and sandboxes the renderer without Node or webviews
      ---
      duration_ms: 1.254096
      type: 'test'
      ...
    # Subtest: uses the native inset title bar only on macOS
    ok 2 - uses the native inset title bar only on macOS
      ---
      duration_ms: 0.200171
      type: 'test'
      ...
    # Subtest: retains the preferred and minimum responsive window sizes
    ok 3 - retains the preferred and minimum responsive window sizes
      ---
      duration_ms: 0.192019
      type: 'test'
      ...
    # Subtest: centers the initial window within the selected display work area
    ok 4 - centers the initial window within the selected display work area
      ---
      duration_ms: 0.345279
      type: 'test'
      ...
    1..4
ok 1 - desktop BrowserWindow security
  ---
  duration_ms: 3.178158
  type: 'suite'
  ...
# Subtest: desktop BrowserWindow display sizing
    # Subtest: clamps preferred and minimum sizing for a normal work area
    ok 1 - clamps preferred and minimum sizing for a normal work area
      ---
      duration_ms: 0.366742
      type: 'test'
      ...
    # Subtest: clamps preferred and minimum sizing for a exactly bounded work area
    ok 2 - clamps preferred and minimum sizing for a exactly bounded work area
      ---
      duration_ms: 0.171618
      type: 'test'
      ...
    # Subtest: clamps preferred and minimum sizing for a narrow work area
    ok 3 - clamps preferred and minimum sizing for a narrow work area
      ---
      duration_ms: 0.175634
      type: 'test'
      ...
    # Subtest: clamps preferred and minimum sizing for a short work area
    ok 4 - clamps preferred and minimum sizing for a short work area
      ---
      duration_ms: 0.37225
      type: 'test'
      ...
    # Subtest: clamps preferred and minimum sizing for a work area smaller in both dimensions
    ok 5 - clamps preferred and minimum sizing for a work area smaller in both dimensions
      ---
      duration_ms: 0.224307
      type: 'test'
      ...
    # Subtest: selects the display nearest the cursor for multi-display window placement
    ok 6 - selects the display nearest the cursor for multi-display window placement
      ---
      duration_ms: 0.431128
      type: 'test'
      ...
    # Subtest: falls back deterministically to the primary display
    ok 7 - falls back deterministically to the primary display
      ---
      duration_ms: 0.221443
      type: 'test'
      ...
    1..7
ok 2 - desktop BrowserWindow display sizing
  ---
  duration_ms: 2.457264
  type: 'suite'
  ...
1..2
# tests 11
# suites 2
# pass 11
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 257.10769

[21/333] packages/api/test/agentLoginRoutes.test.ts
TAP version 13
# Subtest: agent login session manager
    # Subtest: builds an allowlisted Docker login container without forwarding host secrets
    ok 1 - builds an allowlisted Docker login container without forwarding host secrets
      ---
      duration_ms: 2.816825
      type: 'test'
      ...
    # Subtest: maps a ProPR-managed account to the managed host root and marks its container ownership as safe to normalize
    ok 2 - maps a ProPR-managed account to the managed host root and marks its container ownership as safe to normalize
      ---
      duration_ms: 1.229929
      type: 'test'
      ...
    # Subtest: creates a ProPR-managed credential directory before starting Docker
    ok 3 - creates a ProPR-managed credential directory before starting Docker
      ---
      duration_ms: 2.269903
      type: 'test'
      ...
    # Subtest: fails clearly instead of resolving a default home path inside a containerized API
    ok 4 - fails clearly instead of resolving a default home path inside a containerized API
      ---
      duration_ms: 0.607374
      type: 'test'
      ...
    # Subtest: rejects unsafe credential roots and option-like image names
    ok 5 - rejects unsafe credential roots and option-like image names
      ---
      duration_ms: 0.448334
      type: 'test'
      ...
    # Subtest: streams sanitized output, accepts input, and records successful completion
    ok 6 - streams sanitized output, accepts input, and records successful completion
      ---
      duration_ms: 1.599365
      type: 'test'
      ...
    # Subtest: prevents concurrent logins that write the same credential directory
    ok 7 - prevents concurrent logins that write the same credential directory
      ---
      duration_ms: 0.639852
      type: 'test'
      ...
    # Subtest: pulls a missing agent image before creating the login container
    ok 8 - pulls a missing agent image before creating the login container
      ---
      duration_ms: 0.713974
      type: 'test'
      ...
    # Subtest: renews the session deadline when the user sends input
    ok 9 - renews the session deadline when the user sends input
      ---
      duration_ms: 0.640223
      type: 'test'
      ...
    # Subtest: sweeps only orphaned login containers from the current stack scope
    ok 10 - sweeps only orphaned login containers from the current stack scope
      ---
      duration_ms: 0.501644
      type: 'test'
      ...
    1..10
ok 1 - agent login session manager
  ---
  duration_ms: 12.705151
  type: 'suite'
  ...
# Subtest: agent login routes
    # Subtest: starts and returns only the requesting user login session
    ok 1 - starts and returns only the requesting user login session
      ---
      duration_ms: 0.776417
      type: 'test'
      ...
    # Subtest: accepts the same agent alias on start and follow-up calls, including while disabled
    ok 2 - accepts the same agent alias on start and follow-up calls, including while disabled
      ---
      duration_ms: 0.592201
      type: 'test'
      ...
    # Subtest: rejects interactive login for an unsupported agent type
    ok 3 - rejects interactive login for an unsupported agent type
      ---
      duration_ms: 0.437207
      type: 'test'
      ...
    1..3
ok 2 - agent login routes
  ---
  duration_ms: 1.941729
  type: 'suite'
  ...
# [2026-09-02 19:24:27.922 +0000] �[32mINFO�[39m: �[36mSQLite database connection established successfully�[39m
#     filename: "/tmp/propr-test-suite-BEYzZR/021-agentLoginRoutes.test.ts/propr.test.sqlite"
#     environment: "test"
# [2026-09-02 19:24:27.933 +0000] �[32mINFO�[39m: �[36mSQLite database connection closed�[39m
# [2026-09-02 19:24:27.933 +0000] �[32mINFO�[39m: �[36mShutting down queue...�[39m
# [2026-09-02 19:24:27.933 +0000] �[32mINFO�[39m: �[36mQueue was never initialized, nothing to shutdown�[39m
1..2
# tests 13
# suites 2
# pass 13
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 2231.897982

[22/333] packages/api/test/agentRuntimeRoutes.test.ts
TAP version 13
# Subtest: agent runtime package routes
    # Subtest: queues one validated package profile for the unified agent image
    ok 1 - queues one validated package profile for the unified agent image
      ---
      duration_ms: 4.005272
      type: 'test'
      ...
    # Subtest: persists a failed state when queue submission fails
    ok 2 - persists a failed state when queue submission fails
      ---
      duration_ms: 0.87164
      type: 'test'
      ...
    # Subtest: rejects a package missing from an effective runtime before queueing
    ok 3 - rejects a package missing from an effective runtime before queueing
      ---
      duration_ms: 0.710478
      type: 'test'
      ...
    # Subtest: times out slow runtime package validation before queueing
    ok 4 - times out slow runtime package validation before queueing
      ---
      duration_ms: 6.91077
      type: 'test'
      ...
    # Subtest: returns package suggestions from configured runtimes
    ok 5 - returns package suggestions from configured runtimes
      ---
      duration_ms: 0.922016
      type: 'test'
      ...
    # Subtest: enforces PROPR_ADMIN_USERS when configured
    ok 6 - enforces PROPR_ADMIN_USERS when configured
      ---
      duration_ms: 0.437188
      type: 'test'
      ...
    # Subtest: denies runtime package changes by default when no admin policy is configured
    ok 7 - denies runtime package changes by default when no admin policy is configured
      ---
      duration_ms: 0.349906
      type: 'test'
      ...
    # Subtest: requires runtime-management permission before returning runtime package state
    ok 8 - requires runtime-management permission before returning runtime package state
      ---
      duration_ms: 0.312781
      type: 'test'
      ...
    # Subtest: warms the package catalog when an admin loads runtime package state
    ok 9 - warms the package catalog when an admin loads runtime package state
      ---
      duration_ms: 0.431088
      type: 'test'
      ...
    # Subtest: does not warm the package catalog when a member is rejected
    ok 10 - does not warm the package catalog when a member is rejected
      ---
      duration_ms: 3.532311
      type: 'test'
      ...
    # Subtest: resolves the runtime build queue lazily when queueing
    ok 11 - resolves the runtime build queue lazily when queueing
      ---
      duration_ms: 0.946413
      type: 'test'
      ...
    # Subtest: reports apply load failures through the route response
    ok 12 - reports apply load failures through the route response
      ---
      duration_ms: 0.296336
      type: 'test'
      ...
    # Subtest: verifies the current effective images through the runtime-management boundary
    ok 13 - verifies the current effective images through the runtime-management boundary
      ---
      duration_ms: 0.442264
      type: 'test'
      ...
    # Subtest: rejects runtime verification without runtime-management permission
    ok 14 - rejects runtime verification without runtime-management permission
      ---
      duration_ms: 0.235724
      type: 'test'
      ...
    1..14
ok 1 - agent runtime package routes
  ---
  duration_ms: 22.165594
  type: 'suite'
  ...
# [2026-09-02 19:24:29.935 +0000] �[32mINFO�[39m: �[36mSQLite database connection established successfully�[39m
#     filename: "/tmp/propr-test-suite-BEYzZR/022-agentRuntimeRoutes.test.ts/propr.test.sqlite"
#     environment: "test"
# [2026-09-02 19:24:29.954 +0000] �[32mINFO�[39m: �[36mSQLite database connection closed�[39m
1..1
# tests 14
# suites 1
# pass 14
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 2006.853666

[23/333] packages/api/test/attachmentUploadCleanup.test.ts
TAP version 13
# Subtest: upload handler removes Multer files rejected before attachment processing
ok 1 - upload handler removes Multer files rejected before attachment processing
  ---
  duration_ms: 6.744805
  type: 'test'
  ...
# Subtest: attachment processing removes temporary and final files when persistence fails
ok 2 - attachment processing removes temporary and final files when persistence fails
  ---
  duration_ms: 5.215875
  type: 'test'
  ...
# Subtest: temporary cleanup refuses paths outside its configured root
ok 3 - temporary cleanup refuses paths outside its configured root
  ---
  duration_ms: 0.668304
  type: 'test'
  ...
# Subtest: temporary cleanup rejects dot-segment paths that resolve above its root
ok 4 - temporary cleanup rejects dot-segment paths that resolve above its root
  ---
  duration_ms: 0.564106
  type: 'test'
  ...
# Subtest: attachment processing rejects path-like draft IDs and still cleans its temp file
ok 5 - attachment processing rejects path-like draft IDs and still cleans its temp file
  ---
  duration_ms: 1.822135
  type: 'test'
  ...
# [2026-09-02 19:24:32.039 +0000] �[32mINFO�[39m: �[36mSQLite database connection established successfully�[39m
#     filename: "/tmp/propr-test-suite-BEYzZR/023-attachmentUploadCleanup.test.ts/propr.test.sqlite"
#     environment: "test"
# [2026-09-02 19:24:32.054 +0000] �[32mINFO�[39m: �[36mSQLite database connection closed�[39m
1..5
# tests 5
# suites 0
# pass 5
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 1969.760223

[24/333] packages/api/test/authGithubTokens.test.ts
TAP version 13
# Refreshing GitHub token for user octocat (force=true)
# Successfully refreshed GitHub token for user octocat
# Refreshing GitHub token for user octocat (force=true)
# GitHub token refresh failed with status 503
# Refreshing GitHub token for user octocat (force=true)
# Subtest: isGitHubTokenExpired handles missing, future, exact, and past expiry values
ok 1 - isGitHubTokenExpired handles missing, future, exact, and past expiry values
  ---
  duration_ms: 2.264075
  type: 'test'
  ...
# Subtest: ensureAuthenticated refres

...(truncated)

View Workflow

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant