Repository navigation
Add neutral macOS application ownership with exact workload identity - #4492
Conversation
Bundle size reportTree-shaken, minified production esbuild bundles with React and React Native runtimes externalized.
The job is advisory: size changes are reported but do not fail the pull request. Bundle or analysis errors still fail. |
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…tity Record pending and acquired application claim resources, retain opt-in supervisor launches across sessions, and fail closed on ambiguous ownership. Preserve exact kernel incarnations through launch, attach, cancellation and cleanup, and exclude other helpers for the same application. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep exact process capture bound to the causal child or LaunchServices application, retain bounded native error metadata, and cover Windows/Win32 application-survivor claims. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
LaunchServices rejected the inherited macOS 28.0 minimum on this macOS 27.2.1 machine. Align the fixture compiler/bundle minimum with the helper, import the new public neutral entry in its consumer fixture, and account for bounded diagnostic truncation markers in the protocol schema. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…g gates Record frozen-source native identity, rejected direct-child and LaunchServices cleanup, and portable claim/survivor regressions. Preserve separate Accessibility-blocked positive lifecycle, Fabric/Paper, descendant, physical mutex and Windows native survivor gates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use explicit code paths for cross-package evidence and provider references, as required by check-agent-instructions. Native qualification remains tied to its recorded frozen source. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The corrected clean-cache buildci run passed 176 tasks with two cache skips and no failures. Record its exact source, environment and the prior owned guidance-link correction without promoting blocked native gates to passes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Distinguish not-started acquisitions from uncertain dispatch, preserve launched applications only on actual lock contention, and version the async claim API as a minor release. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Observe the authenticated Storybook bridge incarnation through the session helper without taking another controlling lease or disturbing its window records. Preserve foreign-service exclusion and the existing Windows identity attachment path. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Trace both Storybook CI failures to competing identity attachment, record the default-TMPDIR focused regressions and full package checks, and preserve the positive native qualification gates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve the unexplained first aggregate failure, the unchanged isolated Storybook pass, and the successful serialized clean-cache aggregate without treating portable results as positive native qualification. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Enumerate current-user PIDs for warmed descriptor discovery and refuse unavailable enumeration. Cover newly launched and duplicate bundle identities with a native regression. Record signed AppKit ownership/input and separate Fabric/Paper smoke evidence without closing the remaining causal-acquisition and survivor gates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Exercise real AppKit acquisition publication failure and abrupt exact-owner death before and after acquired-record publication. Preserve fenced claims while native apps and known uncontained descendants survive, then verify exact operator cleanup. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve the independent F6 provenance evidence and record signed AppKit interrupted-publication and survivor results, exact cleanup, full package checks, and remaining qualification limits. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Windows coordinator note, for coordination only; no push to this branch. This branch is now Effect on the stack: #4494 (Windows F10-W, head The Windows branches #4491 and #4498 are moving their self-contained Windows sections to separate mid-file anchors, with no merge or rebase, so they no longer collide with end-of-file appends. |
Record both 224-case consumer smokes and exact cleanup, while retaining the failed plain aggregate evidence and known boundedCommand startup assertion. No concurrency/environment workaround or unrelated fix was used. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Retire the interrupted-publication owner nonzero after two minutes and request AppKit fixture shutdown after five minutes. Exercise the same wait in the existing portable ownership suite without acquiring native resources; preserve exact-identity cleanup and durable workload fences. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Retain portable red/green, signed compile, locked-console native limitation, single plain aggregate failure, and exact-worktree cleanup evidence without carrying pre-fix runtime results forward. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
6489386 to
507effe
Compare
Implement F10-W on the neutral application-resource contracts from #4492, pinned at 6489386. Preserve exact identity, per-incarnation exclusion, and bounded survivor reconciliation. Packaged activation remains explicitly uncontained; unknown or unleased work stays fenced. Part of #4447. Part of #4435. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
…onvmo/desktop-macos-app-ownership # Conflicts: # packages/agentic/desktop-driver/references/current-status.md # packages/agentic/desktop-test/README.md # packages/agentic/desktop-test/references/current-status.md Co-authored-by: JasonVMo <35609178+JasonVMo@users.noreply.github.com>
…onvmo/desktop-macos-app-ownership # Conflicts: # packages/agentic/desktop-driver/references/current-status.md # packages/agentic/desktop-test/references/current-status.md Co-authored-by: JasonVMo <35609178+JasonVMo@users.noreply.github.com>
Platforms Impacted
Description of changes
Part of #4446; related to #4448 and epic #4435. The rebased qualification now covers interrupted acquired-record publication, owner death, and bounded known-descendant survivors. Arbitrary descendant containment, automatic recovery and broader reliability are not claimed.
@fluentui-react-native/desktop-test/application-ownership. Session-owned launch remains the default; attached apps stay external. Storybook's existing lifecycle/lease relocation remains deferred until after F9.claimDesktopWorkloadnow returns a promise and its shared Storybook caller awaits it. The desktop-test release is minor; driver/Storybook releases are patches. Preserve the stable per-user claim root across differing TMPDIRs (LIFE-9).inspectApplicationshares descriptor/window verification without acquiring a lease, taking the application/input locks or changing session window records. Foreign controlling services remain excluded; Windows/Win32 identity attachment is unchanged.NSWorkspace.runningApplicationscache omitted newly launched apps. Descriptor discovery now enumerates current-user kernel PIDs and constructs fresh application objects, preserving uniqueness and exact identity checks. Add a failing-first warmed-discovery/duplicate-bundle native regression.Verification
Post-fix native qualification — November 13, 2026
Qualified the unchanged published head
507effebd8568e0ede8ffe651a5cade0b1b25168after the console was unlocked. A nonprompting signed doctor reported on-console, unlocked, and Accessibility/PostEvent/ScreenCapture preflight true without prompting. Helper artifact1429ce4663795bad31f545086ef80bffb83e9b9533287964991c5527388b2f6cand sourcec17944691081d30a320cf6e4393a5bb0ce6cece8dd71295a400dbc5e6a53b3cbare unchanged. All commands ran under the shared native lock with the signed helper; no tracked file, commit or push changed.FURN_NATIVE_DRIVER_TEST=1 FURN_NATIVE_PHYSICAL_INPUT_TEST=1 yarn workspace @fluentui-react-native/desktop-test test --runInBand applicationOwnership.contract applicationOwnership.test ownership.testcrash-owner.mjsowner with signed AppKit fixture built byfixtures/build.cjs)Cleanup: all 41 tracked incarnations exited. Zero owned workload processes or claims remained, and the retirement runner sent no signals. All 76 session checks stayed unlocked with permissions granted. Fabric/Paper were not rerun because their ownership and accessible lanes use ReactTestApp, not the changed fixtures. Their results remain attributed to
16558610f. Hosted CI on this head passed 19/19. The post-fix native gap is closed. The local plain aggregate's unchangedboundedCommandfailure below remains disclosed and was not retried. Evidence:artifacts/desktop/f10m/postfix-native-20261112/.Final review fix and qualification boundary — November 12, 2026
Delivery head:
507effebd8568e0ede8ffe651a5cade0b1b25168, based on main041ac8b9894aeaa7e1aa273baa2ece4e46298b94. One Opus 5.5 review of the new qualification code found an unbounded crash-owner wait. Fix0fb6cd47fccc4f6210797b25085e7b56aa8ca4febounds the ready owner's wait at 120 seconds and gives the AppKit test fixture a main-queue retirement deadline of 300 seconds; its known sleep child was already bounded at 300 seconds. Production ownership, helper protocol, exact-identity cleanup and claim settlement are unchanged. Deadlines do not settle an abandoned claim or implement automatic recovery.node --check packages/agentic/desktop-test/fixtures/application-ownership/crash-owner.mjsyarn workspace @fluentui-react-native/desktop-test test --runInBand applicationOwnership.test ownership.testyarn workspace @fluentui-react-native/desktop-driver test --runInBandyarn workspace @fluentui-react-native/desktop-test test --runInBandyarn workspace @fluentui-react-native/desktop-driver exec desktop-driver --reporter json doctor --platform macos --permissionsscreenLocked=truenode packages/agentic/desktop-driver/native/macos/fixtures/build.cjs artifacts/desktop/f10m/retirement-followup-20261112/fixtureyarn clean-lage-cache && yarn lage buildciboundedCommandSIGKILL/SIGTERM assertion; no retry or environment/concurrency overrideyarn lage test-links --verbose --groupedOwning build/lint/format, root formatting/instructions, changed Markdown checks and exact-worktree cleanup passed. Post-fix native runtime qualification was initially blocked by the locked console; it is now complete (see above). The Fabric/Paper results below still qualify the pre-retirement-fix snapshot. Evidence:
artifacts/desktop/f10m/retirement-followup-20261112/.Pre-retirement-fix rebased qualification
Qualified snapshot:
16558610ff2bd14775430f86c738c12947fe81ee, rebased onto main041ac8b9894aeaa7e1aa273baa2ece4e46298b94. Qualification-only commitd5a7530a9f2d4cb78721a36c1109b5c36fbdc5a1adds native fixtures/tests; production ownership/helper behavior is unchanged by that follow-up. Both F6 provenance and the previous evidence ledgers are preserved. The #4492 → #4494 native stack remains #4495.The native environment below was used only for signed/native commands, with
FURN_NATIVE_PHYSICAL_INPUT_TEST=1additionally enabled for the focused ownership contract. Portable commands and the plain aggregate had native/signing overrides andTF_BUILDabsent, inherited TMPDIR, and no aggregate concurrency override. All native and aggregate work was serialized under the shared native lock.yarn install --immutableyarn workspace @fluentui-react-native/desktop-test test --runInBand applicationOwnership.contract applicationOwnership.test ownership.test --cacheDirectory "$PWD/artifacts/desktop/f10m/rebased-qualification-20261112/jest-ownership"yarn workspace @fluentui-react-native/desktop-driver test --runInBand --cacheDirectory "$PWD/artifacts/desktop/f10m/rebased-qualification-20261112/jest-driver-native"yarn workspace @fluentui-react-native/desktop-test test --runInBand --cacheDirectory "$PWD/artifacts/desktop/f10m/rebased-qualification-20261112/jest-harness"yarn workspace @fluentui-react-native/storybook-desktop test --runInBand --cacheDirectory "$PWD/artifacts/desktop/f10m/rebased-qualification-20261112/jest-storybook"STORYBOOK_SMOKE_STORY=components-button--default yarn storybook --reporter json smoke --macos --mode stories-and-tests --input accessibleSTORYBOOK_SMOKE_STORY=components-button--default yarn storybook --reporter json smoke --macos --paper --mode stories-and-tests --input accessibleyarn lage test-links --verbose --groupedyarn clean-lage-cache && yarn lage buildciyarn lage buildci(two unchanged retries)boundedCommandSIGKILL/SIGTERM assertion; first retry also had a private-storage timeout, which passed on final retryyarn workspace @fluentui-react-native/desktop-driver test --runInBand boundedCommand privateStorageOwning package build/lint/format, root formatting, changed Markdown checks and
git diff --checkpassed; exact commands are recorded in the owning status ledgers. Fabric and Paper were separately prepared/rebuilt and each passed all nine ownership/lifecycle checks with zero cleanup failures. Each smoke excluded one physical callback before selection; that callback is not counted as passed or skipped.New native cases retain fences after failed acquired-record publication, kill independent owners before/after acquired-record publication, verify exact surviving app/known-child identities, and perform exact operator cleanup. The known descendant survives primary-process cleanup, demonstrating uncontained, not general containment. Final cleanup proved 24 recorded incarnations exited, three ports closed, and no worktree workloads or claims remained.
Still unqualified: arbitrary descendant discovery/containment, actual forced OS PID recycling, TCC revocation/durable helper-owned grants, power-loss rename, Metro/channel survivors, automatic adoption/recovery, repeated-run reliability, and the historical LaunchServices causal-acquisition anomaly. F9 lifecycle relocation and F11 handoff remain separate. Windows/Win32 native evidence belongs to upper #4494; no Windows native run is claimed from this Mac. Apple/Office bridging checks do not apply to the standalone helper.
Local aggregate remains failed, independently of the passing focused/native/renderer checks. Hosted CI must be evaluated on the pushed head; no serial pass is substituted for that gate. Evidence:
artifacts/desktop/f10m/rebased-qualification-20261112/andpackages/agentic/desktop-test/artifacts/desktop/application-ownership-kffNMN/evidence.json.Historical pre-rebase qualification
The following retains the original results and limitations at the earlier revision; the rebased section above supersedes its publication/survivor gaps and draft recommendation.
Observed, November 12, 2026: macOS 27.2.1 arm64, signed AppKit fixture and real Agentic Components Storybook, separately on Fabric and Paper. Delivery commit:
6489386956c0485cb91b478a8f4adc4828f4178b, based on9395737943d7e1402a40a67a41dc605ef0afb24bplus the live-discovery fix. Native/GUI/physical-input and aggregate commands ran under$HOME/Library/Caches/furn-overnight/with-native-lock.sh. The default TMPDIR was retained for this requalification.Native environment:
FURN_NATIVE_DRIVER_TEST=1, signing identityFURN Desktop Driver Development, helper cache$PWD/artifacts/desktop/f10m/helper; the ownership suite additionally usesFURN_NATIVE_PHYSICAL_INPUT_TEST=1. Helper artifact:1429ce4663795bad31f545086ef80bffb83e9b9533287964991c5527388b2f6c; native source digest:c17944691081d30a320cf6e4393a5bb0ce6cece8dd71295a400dbc5e6a53b3cb.yarn workspace @fluentui-react-native/desktop-driver format --checkyarn workspace @fluentui-react-native/desktop-driver buildyarn workspace @fluentui-react-native/desktop-driver lintyarn workspace @fluentui-react-native/desktop-test format --checkyarn workspace @fluentui-react-native/desktop-test buildyarn workspace @fluentui-react-native/desktop-test lintyarn workspace @fluentui-react-native/storybook-desktop format --checkyarn workspace @fluentui-react-native/storybook-desktop buildyarn workspace @fluentui-react-native/storybook-desktop lintyarn workspace @fluentui-react-native/desktop-driver exec desktop-driver --reporter json doctor --platform macos --permissionspromptRequested=false; repeated separately for both renderersyarn workspace @fluentui-react-native/desktop-test test --runInBand applicationOwnership.contract applicationOwnership.test ownership.test --cacheDirectory "$PWD/artifacts/desktop/f10m/ax-qualification-20261112/jest-native-harness"yarn workspace @fluentui-react-native/desktop-driver test --runInBand --cacheDirectory "$PWD/artifacts/desktop/f10m/ax-qualification-20261112/jest-desktop-driver-full"yarn workspace @fluentui-react-native/desktop-driver test --runInBand --cacheDirectory "$PWD/artifacts/desktop/f10m/ax-qualification-20261112/jest-desktop-driver-portable"yarn workspace @fluentui-react-native/desktop-test test --runInBand --cacheDirectory "$PWD/artifacts/desktop/f10m/ax-qualification-20261112/jest-desktop-test-portable"yarn workspace @fluentui-react-native/storybook-desktop test --runInBand --cacheDirectory "$PWD/artifacts/desktop/f10m/ax-qualification-20261112/jest-storybook-desktop-portable"yarn storybook --reporter json bundle --macos;yarn storybook --reporter json prep --macos;yarn storybook --reporter json run --macosyarn storybook --reporter json bundle --macos --paper;yarn storybook --reporter json prep --macos --paper;yarn storybook --reporter json run --macos --paperSTORYBOOK_SMOKE_STORY=components-button--default yarn storybook --reporter json smoke --macos --mode stories-and-tests --input accessibleSTORYBOOK_SMOKE_STORY=components-button--default yarn storybook --reporter json smoke --macos --paper --mode stories-and-tests --input accessibleyarn lage test-links --verbose --groupedyarn clean-lage-cache && yarn lage buildci --concurrency 1TF_BUILD=1, default TMPDIR, native/signing overrides unsetyarn markdown-link-check -c .github/markdown-link-check-config.json packages/agentic/desktop-driver/native/macos/README.mdyarn markdown-link-check -c .github/markdown-link-check-config.json packages/agentic/desktop-driver/references/current-status.mdyarn markdown-link-check -c .github/markdown-link-check-config.json packages/agentic/desktop-test/references/current-status.mdyarn markdown-link-check -c .github/markdown-link-check-config.json .changeset/neutral-macos-application-ownership.mdyarn oxfmt --checkReal ownership acceptance: Fabric and Paper each passed all 9 qualification checks, with 0 failed/skipped and 0 cleanup failures. The neutral supervisor-owned app survived two borrowed sessions and exited at supervisor disposal. Externally attached apps survived both external owners' cleanup. Independent native helpers refused controlling attach with
application-lock-busy; the independent WebDriver service refused new-session control. Releasing the first lease permitted the second service to attach. Read-only inspection succeeded while control was held and preserved window handles. Neutral schema 3 claims verified exact OS owner/application identity and registered target/instance IDs, then released after settled cleanup.Scope: Storybook's transitional outer CLI claim still has
unregisteredtarget/instance placeholders; its exact OS owner/run identity is verified, but this is not a completed F9 lifecycle migration. Each smoke traversed 223 catalog entries and executed the one manifest-selected Button semantics callback. One physical-pointer callback was excluded before selection, not passed or skipped. The AppKit mutex test separately passed with only bounded Shift down/up input; these smokes do not qualify pointer/capture behavior.TCC responsibility: both renderer runs observed the same stable signer/designated requirement with effective Accessibility/PostEvent permissions under the
Rex Server.appresponsible process tree. No TCC/privacy settings were changed. This does not establish a first-run/durable helper-owned grant, another process tree, clean-machine/PPPC behavior or permission revocation.Failing-first evidence: the initial AppKit run passed 8 and failed 1; the added warmed-discovery regression failed before the fix (1 failed, 9 skipped). The final focused run passed 39/39. Exploratory Fabric toolchain/qualifier failures and their exact cleanup are retained separately, not counted as passes. CocoaPods prep selected the already-installed JSON 2.18.0 through a project-local Ruby preload because Ruby 4.0.6 selected incompatible JSON 3.1.0; no package installation, Podfile/generated-source patch or global Ruby change was made.
Scope correction: a broad native-enabled harness attempt recorded 416 passed, 3 failed, 1 skipped. Two portable fixtures replaced HOME while inheriting the signing override, hiding that keychain. One LaunchServices acquisition could not prove its causal incarnation and correctly preserved an unknown process; its precise cause is unestablished. Exact operator cleanup verified its native identity, run-specific executable and launch interval, then proved exit. The discovery-only regression now uses externally started, native-identified children instead of unrelated LaunchServices setup; no causal guard was relaxed. The signed selection and portable full suites subsequently passed in separate environments. This does not resolve causal-acquisition reliability.
Evidence: both owning
references/current-status.mdledgers contain exact commands, counts, identities, cleanup and remaining gates. Raw evidence:artifacts/desktop/f10m/ax-qualification-20261112/. Final AppKit:packages/agentic/desktop-test/artifacts/desktop/application-ownership-1V0SrR/evidence.json. Fabric smoke:apps/storybook/artifacts/desktop/616bf2e8-a675-408f-bd56-2e09982ea969/run.json. Paper smoke:apps/storybook/artifacts/desktop/19358539-eed2-49e9-9c9a-79b5e7db4e9f/run.json.Observed final cleanup: after the aggregate, all 31 recorded exact process incarnations were exited, all three reported ports refused connections, and scoped command-line/working-directory inspection found zero worktree workload processes. The shared workload claim and all
interactive.lockfiles in eight native/renderer/failed-attempt artifact roots were absent. The locked verifier exited 0; a following lockedtruereacquired and released the native lock.cleanup-final.json/.logrecord the checks. No helper, fixture, app, driver service or Metro from this worktree remains; experimental scratch sources were removed while retaining their evidence.Not run/unqualified: causal-acquisition reliability after the observed unverifiable LaunchServices snapshot; arbitrary surviving descendants, interrupted native publication, supervisor-death survivors, live failed-cleanup/restart fault injection, native Windows/Win32 packaged-survivor journaling/recovery and repeated-run reliability. Ordinary hosted Windows driver-native/smoke CI does not exercise that harness survivor gate. Windows CI sufficient: no; keep draft. Apple/Office module and bridging-header checks are inapplicable to this standalone helper. New-head CI monitoring belongs to the coordinator.
Pull request checklist
This PR has considered (when applicable):