diff --git a/config/bounded-ingress-baseline.json b/config/bounded-ingress-baseline.json index 856f511a96a..b0518bb025d 100644 --- a/config/bounded-ingress-baseline.json +++ b/config/bounded-ingress-baseline.json @@ -1,728 +1,797 @@ { - "allowed": [ - "mobile/src/cache/home-snapshot-cache.ts:json-parse", - "mobile/src/cache/home-snapshot-cache.ts:json-stringify", - "mobile/src/components/CustomKeyModal.tsx:json-parse", - "mobile/src/components/CustomKeyModal.tsx:json-stringify", - "mobile/src/components/MobileRichMarkdownEditor.tsx:json-parse", - "mobile/src/components/mobile-rich-markdown-editor-html.ts:json-stringify", - "mobile/src/components/pr-sidebar/MermaidDiagram.tsx:json-stringify", - "mobile/src/files/mobile-file-preview-source.ts:json-stringify", - "mobile/src/session/MobileNativeChatView.tsx:json-stringify", - "mobile/src/session/mobile-image-source-picker.ts:response-text", - "mobile/src/session/mobile-native-chat-permission.ts:json-parse", - "mobile/src/session/mobile-native-chat-question.ts:json-stringify", - "mobile/src/session/mobile-terminal-records.ts:json-stringify", - "mobile/src/session/use-mobile-native-chat-ask-dismiss.ts:json-stringify", - "mobile/src/storage/codex-reset-attempt-journal.ts:json-parse", - "mobile/src/storage/codex-reset-attempt-journal.ts:json-stringify", - "mobile/src/storage/preferences.ts:json-parse", - "mobile/src/storage/preferences.ts:json-stringify", - "mobile/src/storage/session-view-preferences.ts:json-parse", - "mobile/src/storage/session-view-preferences.ts:json-stringify", - "mobile/src/terminal/TerminalWebView.tsx:json-parse", - "mobile/src/terminal/TerminalWebView.tsx:json-stringify", - "mobile/src/terminal/terminal-accessory-layout.ts:json-parse", - "mobile/src/terminal/terminal-accessory-layout.ts:json-stringify", - "mobile/src/terminal/terminal-webview-engine.generated.ts:json-parse", - "mobile/src/terminal/terminal-webview-engine.generated.ts:json-stringify", - "mobile/src/terminal/terminal-webview-html.ts:json-parse", - "mobile/src/terminal/terminal-webview-html.ts:json-stringify", - "mobile/src/terminal/terminal-webview-url-tap.ts:json-stringify", - "mobile/src/transport/browser-screencast-protocol.ts:json-parse", - "mobile/src/transport/host-credential-cleanup.ts:json-parse", - "mobile/src/transport/host-credential-cleanup.ts:json-stringify", - "mobile/src/transport/host-store.ts:json-parse", - "mobile/src/transport/host-store.ts:json-stringify", - "mobile/src/transport/mobile-e2ee-v2-physical-channel.ts:json-parse", - "mobile/src/transport/mobile-e2ee-v2-physical-channel.ts:json-stringify", - "mobile/src/transport/mobile-relay-credential-bundle.ts:json-parse", - "mobile/src/transport/mobile-relay-credential-bundle.ts:json-stringify", - "mobile/src/transport/mobile-relay-credential-rotation.ts:json-stringify", - "mobile/src/transport/mobile-relay-direct-upgrade-journal.ts:json-parse", - "mobile/src/transport/mobile-relay-direct-upgrade-journal.ts:json-stringify", - "mobile/src/transport/mobile-relay-direct-upgrade.ts:json-stringify", - "mobile/src/transport/mobile-relay-e2ee-link.ts:json-parse", - "mobile/src/transport/mobile-relay-e2ee-link.ts:json-stringify", - "mobile/src/transport/mobile-relay-host-overlay-store.ts:json-parse", - "mobile/src/transport/mobile-relay-host-overlay-store.ts:json-stringify", - "mobile/src/transport/mobile-relay-invite-director.ts:json-parse", - "mobile/src/transport/mobile-relay-invite-director.ts:json-stringify", - "mobile/src/transport/mobile-relay-pairing-journal-store.ts:json-parse", - "mobile/src/transport/mobile-relay-pairing-journal-store.ts:json-stringify", - "mobile/src/transport/mobile-relay-pairing-journal.ts:json-stringify", - "mobile/src/transport/mobile-relay-pairing-recovery.ts:json-stringify", - "mobile/src/transport/mobile-relay-physical-client.ts:json-parse", - "mobile/src/transport/mobile-relay-physical-client.ts:json-stringify", - "mobile/src/transport/mobile-relay-resume-director.ts:json-parse", - "mobile/src/transport/mobile-relay-resume-director.ts:json-stringify", - "mobile/src/transport/mobile-relay-resume-director.ts:response-text", - "mobile/src/transport/mobile-relay-rpc-session.ts:json-parse", - "mobile/src/transport/mobile-relay-rpc-session.ts:json-stringify", - "mobile/src/transport/pairing.ts:json-parse", - "mobile/src/transport/pre-profile-pairing-coordinator.ts:json-stringify", - "mobile/src/transport/rpc-client.ts:json-parse", - "mobile/src/transport/rpc-client.ts:json-stringify", - "mobile/src/transport/socket-event-debug.ts:json-stringify", - "mobile/src/transport/terminal-stream-protocol.ts:json-parse", - "mobile/src/transport/websocket-payload-bytes.ts:response-text", - "mobile/src/worktree/last-visited-worktree-repo.ts:json-parse", - "src/cli/bundled-skill-guides.ts:json-parse", - "src/cli/bundled-skill-guides.ts:json-stringify", - "src/cli/bundled-skill-guides.ts:read-file", - "src/cli/format.ts:json-stringify", - "src/cli/handlers/agent-hooks.ts:json-parse", - "src/cli/handlers/agent-hooks.ts:json-stringify", - "src/cli/handlers/agent-hooks.ts:read-file", - "src/cli/handlers/automations.ts:json-parse", - "src/cli/handlers/browser-env.ts:json-stringify", - "src/cli/handlers/browser-interact.ts:json-stringify", - "src/cli/handlers/browser-nav.ts:json-stringify", - "src/cli/handlers/browser-storage.ts:json-stringify", - "src/cli/handlers/browser-tab.ts:json-stringify", - "src/cli/handlers/emulator.ts:json-parse", - "src/cli/handlers/emulator.ts:json-stringify", - "src/cli/handlers/introspection.ts:json-stringify", - "src/cli/handlers/orchestration.ts:json-stringify", - "src/cli/handlers/skills.ts:json-stringify", - "src/cli/handlers/vm.ts:json-stringify", - "src/cli/handlers/vm.ts:read-file", - "src/cli/linear-request-builders.ts:read-file", - "src/cli/runtime/mac-app-update-bundle.ts:read-file", - "src/cli/runtime/metadata.ts:json-parse", - "src/cli/runtime/metadata.ts:read-file", - "src/cli/runtime/serve-update-supervisor.ts:json-parse", - "src/cli/runtime/serve-update-supervisor.ts:json-stringify", - "src/cli/runtime/serve-update-supervisor.ts:read-file", - "src/cli/runtime/transport.ts:json-parse", - "src/cli/runtime/transport.ts:json-stringify", - "src/cli/workspace-format.ts:json-stringify", - "src/main/active-view-preference.ts:json-parse", - "src/main/active-view-preference.ts:json-stringify", - "src/main/active-view-preference.ts:read-file", - "src/main/agent-hooks/hooks-json-read.ts:json-parse", - "src/main/agent-hooks/hooks-json-read.ts:read-file", - "src/main/agent-hooks/install-telemetry.ts:json-stringify", - "src/main/agent-hooks/installer-utils-remote.ts:json-parse", - "src/main/agent-hooks/installer-utils-remote.ts:json-stringify", - "src/main/agent-hooks/installer-utils-remote.ts:read-file", - "src/main/agent-hooks/installer-utils.ts:json-stringify", - "src/main/agent-hooks/installer-utils.ts:read-file", - "src/main/agent-hooks/managed-hook-local-filesystem.ts:read-file", - "src/main/agent-hooks/managed-hook-lock-claims.ts:json-stringify", - "src/main/agent-hooks/managed-hook-lock-claims.ts:read-file", - "src/main/agent-hooks/managed-hook-lock-records.ts:json-parse", - "src/main/agent-hooks/managed-hook-lock-records.ts:json-stringify", - "src/main/agent-hooks/managed-hook-lock-records.ts:read-file", - "src/main/agent-hooks/managed-hook-owner-identity.ts:read-file", - "src/main/agent-hooks/server.ts:json-parse", - "src/main/agent-hooks/server.ts:json-stringify", - "src/main/agent-hooks/server.ts:read-file", - "src/main/agent-hooks/wsl-hook-fs-adapter.ts:read-file", - "src/main/agent-hooks/wsl-hook-relay-deps.ts:read-file", - "src/main/agent-hooks/wsl-hook-relay-launch.ts:read-file", - "src/main/agent-state-file-reader.ts:json-parse", - "src/main/agent-trust-presets.ts:json-parse", - "src/main/agent-trust-presets.ts:json-stringify", - "src/main/agent-trust-presets.ts:read-file", - "src/main/ai-vault/cached-session-list.ts:json-stringify", - "src/main/ai-vault/remote-session-scanner-codex-index.ts:read-file", - "src/main/ai-vault/remote-session-scanner-discovery.ts:unbounded-fanout", - "src/main/ai-vault/remote-session-scanner.ts:read-file", - "src/main/ai-vault/remote-session-scanner.ts:unbounded-fanout", - "src/main/ai-vault/session-parse-cache-persistence.ts:json-parse", - "src/main/ai-vault/session-parse-cache-persistence.ts:json-stringify", - "src/main/ai-vault/session-parse-cache-persistence.ts:read-file", - "src/main/ai-vault/session-scanner-antigravity-fixtures.ts:json-stringify", - "src/main/ai-vault/session-scanner-claude-subagents.ts:json-parse", - "src/main/ai-vault/session-scanner-claude-subagents.ts:read-file", - "src/main/ai-vault/session-scanner-codex-fixtures.ts:json-stringify", - "src/main/ai-vault/session-scanner-devin-parser.ts:json-parse", - "src/main/ai-vault/session-scanner-devin-parser.ts:read-file", - "src/main/ai-vault/session-scanner-gemini-parsers.ts:json-parse", - "src/main/ai-vault/session-scanner-gemini-parsers.ts:read-file", - "src/main/ai-vault/session-scanner-graph-parsers.ts:json-parse", - "src/main/ai-vault/session-scanner-graph-parsers.ts:read-file", - "src/main/ai-vault/session-scanner-grok-parser.ts:json-parse", - "src/main/ai-vault/session-scanner-grok-parser.ts:read-file", - "src/main/ai-vault/session-scanner-incremental-fixtures.ts:json-stringify", - "src/main/ai-vault/session-scanner-kimi-parser.ts:json-parse", - "src/main/ai-vault/session-scanner-kimi-parser.ts:read-file", - "src/main/ai-vault/session-scanner-kimi-paths.ts:json-parse", - "src/main/ai-vault/session-scanner-opencode-sqlite.ts:json-parse", - "src/main/ai-vault/session-scanner-secondary-parsers.ts:json-parse", - "src/main/ai-vault/session-scanner-secondary-parsers.ts:read-file", - "src/main/ai-vault/session-scanner-test-fixtures.ts:json-stringify", - "src/main/ai-vault/session-scanner-values.ts:json-parse", - "src/main/ai-vault/session-scanner-values.ts:read-file", - "src/main/ai-vault/session-scanner.ts:read-file", - "src/main/amp/hook-service.ts:json-stringify", - "src/main/amp/hook-service.ts:read-file", - "src/main/attribution/terminal-attribution.ts:read-file", - "src/main/automations/external-manager.ts:json-parse", - "src/main/automations/external-manager.ts:read-file", - "src/main/automations/hermes-cron-output.ts:read-file", - "src/main/automations/hermes-cron-output.ts:unbounded-fanout", - "src/main/azure-devops/azure-devops-api-request.ts:response-text", - "src/main/azure-devops/pull-request-creation.ts:json-stringify", - "src/main/bitbucket/client.ts:response-text", - "src/main/browser/agent-browser-bridge.ts:json-parse", - "src/main/browser/agent-browser-bridge.ts:json-stringify", - "src/main/browser/agent-browser-bridge.ts:read-file", - "src/main/browser/browser-clicked-link-routing.ts:json-stringify", - "src/main/browser/browser-cookie-import.ts:json-parse", - "src/main/browser/browser-cookie-import.ts:read-file", - "src/main/browser/browser-manager.ts:json-stringify", - "src/main/browser/browser-session-registry.ts:json-parse", - "src/main/browser/browser-session-registry.ts:json-stringify", - "src/main/browser/browser-session-registry.ts:read-file", - "src/main/browser/cdp-bridge.ts:json-parse", - "src/main/browser/cdp-bridge.ts:json-stringify", - "src/main/browser/cdp-ws-proxy-test-harness.ts:json-parse", - "src/main/browser/cdp-ws-proxy-test-harness.ts:json-stringify", - "src/main/browser/cdp-ws-proxy.ts:json-parse", - "src/main/browser/cdp-ws-proxy.ts:json-stringify", - "src/main/browser/popup-origin-bar-window.ts:json-stringify", - "src/main/browser/snapshot-engine.ts:json-parse", - "src/main/browser/snapshot-engine.ts:json-stringify", - "src/main/claude-accounts/managed-auth-path.ts:read-file", - "src/main/claude-accounts/oauth-refresh.ts:json-parse", - "src/main/claude-accounts/oauth-refresh.ts:json-stringify", - "src/main/claude-accounts/oauth-refresh.ts:response-text", - "src/main/claude-accounts/runtime-auth-service.ts:json-parse", - "src/main/claude-accounts/runtime-auth-service.ts:json-stringify", - "src/main/claude-accounts/runtime-auth-service.ts:read-file", - "src/main/claude-accounts/service.ts:json-parse", - "src/main/claude-accounts/service.ts:json-stringify", - "src/main/claude-accounts/service.ts:read-file", - "src/main/claude-usage/scanner.ts:json-parse", - "src/main/claude-usage/scanner.ts:unbounded-fanout", - "src/main/claude-usage/store.ts:json-parse", - "src/main/claude-usage/store.ts:json-stringify", - "src/main/claude-usage/store.ts:read-file", - "src/main/claude/hook-settings.ts:json-stringify", - "src/main/cli/cli-installer.ts:read-file", - "src/main/cli/linux-bare-orca-dispatcher.ts:read-file", - "src/main/cli/linux-terminal-orca-cli-shim.ts:read-file", - "src/main/cli/wsl-cli-registration-registry.ts:json-parse", - "src/main/cli/wsl-cli-registration-registry.ts:json-stringify", - "src/main/cli/wsl-cli-registration-registry.ts:read-file", - "src/main/codex-accounts/codex-auth-identity.ts:json-parse", - "src/main/codex-accounts/host-codex-managed-home-ownership.ts:read-file", - "src/main/codex-accounts/legacy-shared-auth-migration.ts:json-stringify", - "src/main/codex-accounts/legacy-shared-auth-migration.ts:read-file", - "src/main/codex-accounts/runtime-home-service.ts:json-parse", - "src/main/codex-accounts/runtime-home-service.ts:json-stringify", - "src/main/codex-accounts/runtime-home-service.ts:read-file", - "src/main/codex-accounts/service.ts:json-parse", - "src/main/codex-accounts/service.ts:json-stringify", - "src/main/codex-accounts/service.ts:read-file", - "src/main/codex-usage/scanner.ts:json-parse", - "src/main/codex-usage/store.ts:json-parse", - "src/main/codex-usage/store.ts:json-stringify", - "src/main/codex-usage/store.ts:read-file", - "src/main/codex/codex-app-server-grant-bridge.ts:json-parse", - "src/main/codex/codex-app-server-grant-bridge.ts:json-stringify", - "src/main/codex/codex-app-server-grant-entry.ts:json-parse", - "src/main/codex/codex-app-server-grant-entry.ts:json-stringify", - "src/main/codex/codex-app-server-session.ts:json-parse", - "src/main/codex/codex-app-server-session.ts:json-stringify", - "src/main/codex/codex-home-paths.ts:json-parse", - "src/main/codex/codex-home-paths.ts:json-stringify", - "src/main/codex/codex-home-paths.ts:read-file", - "src/main/codex/codex-hook-identity.ts:json-stringify", - "src/main/codex/codex-real-home-hook-install.ts:read-file", - "src/main/codex/codex-session-backfill-audit.ts:json-stringify", - "src/main/codex/codex-session-backfill-marker.ts:json-parse", - "src/main/codex/codex-session-backfill-marker.ts:json-stringify", - "src/main/codex/codex-session-backfill-marker.ts:read-file", - "src/main/codex/codex-session-bridge.ts:json-parse", - "src/main/codex/codex-session-bridge.ts:read-file", - "src/main/codex/codex-session-index-heal-state.ts:json-parse", - "src/main/codex/codex-session-index-heal-state.ts:json-stringify", - "src/main/codex/codex-session-index-heal-state.ts:read-file", - "src/main/codex/codex-trust-config-rollback.ts:read-file", - "src/main/codex/codex-trust-grant-ledger.ts:json-parse", - "src/main/codex/codex-trust-grant-ledger.ts:json-stringify", - "src/main/codex/codex-trust-grant-ledger.ts:read-file", - "src/main/codex/config-settings-baseline.ts:json-stringify", - "src/main/codex/config-toml-trust.ts:json-stringify", - "src/main/codex/config-toml-trust.ts:read-file", - "src/main/codex/hook-service.ts:json-stringify", - "src/main/codex/hook-service.ts:read-file", - "src/main/codex/hook-trust-promotion.ts:json-parse", - "src/main/codex/hook-trust-promotion.ts:json-stringify", - "src/main/codex/hook-trust-promotion.ts:read-file", - "src/main/codex/wsl-codex-session-bridge.ts:json-parse", - "src/main/computer/desktop-script-action.ts:json-stringify", - "src/main/computer/desktop-script-provider-client.ts:json-parse", - "src/main/computer/desktop-script-provider-client.ts:json-stringify", - "src/main/computer/desktop-script-provider-test-harness.ts:json-parse", - "src/main/computer/desktop-script-provider-test-harness.ts:json-stringify", - "src/main/computer/macos-computer-use-permission-status.ts:json-parse", - "src/main/computer/macos-computer-use-permission-status.ts:read-file", - "src/main/computer/macos-native-provider-client.ts:json-parse", - "src/main/computer/macos-native-provider-client.ts:json-stringify", - "src/main/crash-reporting/crash-report-store.ts:json-parse", - "src/main/crash-reporting/crash-report-store.ts:json-stringify", - "src/main/crash-reporting/crash-report-store.ts:read-file", - "src/main/daemon/client.ts:json-parse", - "src/main/daemon/client.ts:read-file", - "src/main/daemon/daemon-entry.ts:read-file", - "src/main/daemon/daemon-file-log.ts:json-stringify", - "src/main/daemon/daemon-health.ts:json-parse", - "src/main/daemon/daemon-health.ts:read-file", - "src/main/daemon/daemon-host-relocation.ts:json-parse", - "src/main/daemon/daemon-host-relocation.ts:json-stringify", - "src/main/daemon/daemon-host-relocation.ts:read-file", - "src/main/daemon/daemon-init.ts:read-file", - "src/main/daemon/daemon-pty-adapter.ts:json-stringify", - "src/main/daemon/daemon-spawner.ts:json-parse", - "src/main/daemon/daemon-spawner.ts:json-stringify", - "src/main/daemon/daemon-spawner.ts:read-file", - "src/main/daemon/daemon-stream-backlog-probe.ts:json-stringify", - "src/main/daemon/history-manager.ts:json-parse", - "src/main/daemon/history-manager.ts:json-stringify", - "src/main/daemon/history-manager.ts:read-file", - "src/main/daemon/ndjson.ts:json-parse", - "src/main/daemon/ndjson.ts:json-stringify", - "src/main/daemon/terminal-history-file-reader.ts:json-parse", - "src/main/devin/hook-config-json.ts:read-file", - "src/main/devin/hook-settings.ts:json-stringify", - "src/main/diagnostics/main-thread-churn-probe.ts:json-stringify", - "src/main/emulator/emulator-probe.ts:json-stringify", - "src/main/emulator/serve-sim-accessibility-tree.ts:json-parse", - "src/main/emulator/serve-sim-accessibility-tree.ts:response-text", - "src/main/emulator/serve-sim-detached-session.ts:json-parse", - "src/main/emulator/serve-sim-detached-session.ts:read-file", - "src/main/emulator/serve-sim-execution.ts:json-parse", - "src/main/emulator/serve-sim-execution.ts:read-file", - "src/main/emulator/simctl-simulator-devices.ts:json-parse", - "src/main/ghostty/index.ts:json-stringify", - "src/main/ghostty/index.ts:read-file", - "src/main/ghostty/theme-resolution.ts:read-file", - "src/main/git/huge-folder-ignore.ts:read-file", - "src/main/git/repo.ts:read-file", - "src/main/git/status.ts:read-file", - "src/main/git/worktree-include-file.ts:read-file", - "src/main/git/worktree.ts:read-file", - "src/main/gitea/client.ts:response-text", - "src/main/gitea/pull-request-creation.ts:json-stringify", - "src/main/github/client.ts:json-parse", - "src/main/github/client.ts:read-file", - "src/main/github/conflict-summary-cache.ts:json-stringify", - "src/main/github/issues.ts:json-parse", - "src/main/github/local-git-config-signature.ts:read-file", - "src/main/github/merged-pr-commit-membership.ts:json-parse", - "src/main/github/project-view.ts:json-parse", - "src/main/github/project-view/internals.ts:json-parse", - "src/main/github/project-view/mutations.ts:json-parse", - "src/main/github/project-view/project-error-classification.ts:json-parse", - "src/main/github/rate-limit.ts:json-parse", - "src/main/github/work-item-details.ts:json-parse", - "src/main/github/work-item-details.ts:json-stringify", - "src/main/gitlab/client.ts:json-parse", - "src/main/gitlab/issues.ts:json-parse", - "src/main/gitlab/merge-request-creation-lookup.ts:json-parse", - "src/main/gitlab/merge-request-creation-lookup.ts:json-stringify", - "src/main/gitlab/merge-request-creation.ts:read-file", - "src/main/gitlab/work-item-details.ts:json-parse", - "src/main/hermes/hook-service.ts:json-stringify", - "src/main/hermes/hook-service.ts:read-file", - "src/main/hooks.ts:read-file", - "src/main/ipc/ai-vault.ts:json-stringify", - "src/main/ipc/app.ts:json-parse", - "src/main/ipc/crash-reporting.ts:json-stringify", - "src/main/ipc/developer-permissions.ts:unbounded-fanout", - "src/main/ipc/ephemeral-vm-runtime-handlers.ts:json-stringify", - "src/main/ipc/feedback.ts:json-stringify", - "src/main/ipc/filesystem-mutations.ts:read-file", - "src/main/ipc/filesystem-watcher.ts:json-stringify", - "src/main/ipc/filesystem.ts:read-file", - "src/main/ipc/notebook.ts:json-stringify", - "src/main/ipc/notification-authorization-status.ts:json-parse", - "src/main/ipc/notifications.ts:read-file", - "src/main/ipc/pet.ts:json-parse", - "src/main/ipc/pet.ts:read-file", - "src/main/ipc/repos.ts:read-file", - "src/main/ipc/shell.ts:read-file", - "src/main/ipc/ssh.ts:json-stringify", - "src/main/ipc/terminal-render-desync-evidence.ts:json-stringify", - "src/main/ipc/watcher-removal-gate.ts:json-stringify", - "src/main/ipc/workspace-cleanup-activity.ts:read-file", - "src/main/ipc/workspace-ports.ts:json-stringify", - "src/main/ipc/worktree-base-directory-poller.ts:unbounded-fanout", - "src/main/ipc/worktree-base-directory-watch-targets.ts:read-file", - "src/main/ipc/worktree-common-git-directory.ts:read-file", - "src/main/ipc/worktree-head-identity-reader.ts:read-file", - "src/main/ipc/worktree-remote.ts:read-file", - "src/main/ipc/worktrees.ts:read-file", - "src/main/jira/client.ts:json-parse", - "src/main/jira/client.ts:json-stringify", - "src/main/jira/client.ts:read-file", - "src/main/jira/client.ts:response-text", - "src/main/jira/issues.ts:json-stringify", - "src/main/keybindings/keybinding-file.ts:json-parse", - "src/main/keybindings/keybinding-file.ts:json-stringify", - "src/main/keybindings/keybinding-file.ts:read-file", - "src/main/kimi/hook-service.ts:read-file", - "src/main/linear/client.ts:json-parse", - "src/main/linear/client.ts:json-stringify", - "src/main/linear/client.ts:read-file", - "src/main/linear/issues.ts:unbounded-fanout", - "src/main/local-worktree-filesystem.ts:read-file", - "src/main/minimax/minimax-cookie-store.ts:read-file", - "src/main/native-chat/transcript-line-decoders-grok.ts:json-parse", - "src/main/native-chat/transcript-record-blocks.ts:json-stringify", - "src/main/observability/bundle.ts:json-parse", - "src/main/observability/bundle.ts:json-stringify", - "src/main/observability/bundle.ts:read-file", - "src/main/observability/diagnostic-upload-http.ts:json-parse", - "src/main/observability/diagnostic-upload-http.ts:json-stringify", - "src/main/observability/local-file-sink.ts:json-stringify", - "src/main/opencode-usage/scanner.ts:json-parse", - "src/main/opencode-usage/scanner.ts:json-stringify", - "src/main/opencode-usage/store.ts:json-parse", - "src/main/opencode-usage/store.ts:json-stringify", - "src/main/opencode-usage/store.ts:read-file", - "src/main/opencode/hook-service.ts:json-parse", - "src/main/opencode/hook-service.ts:json-stringify", - "src/main/opencode/hook-service.ts:read-file", - "src/main/orca-profiles/profile-cloud-client.ts:json-stringify", - "src/main/orca-profiles/profile-cloud-client.ts:response-text", - "src/main/orca-profiles/profile-cloud-org-members-client.ts:json-stringify", - "src/main/orca-profiles/profile-cloud-org-members-client.ts:response-text", - "src/main/orca-profiles/profile-cloud-session-mutation.ts:json-parse", - "src/main/orca-profiles/profile-cloud-session-mutation.ts:read-file", - "src/main/orca-profiles/profile-cloud-session-store.ts:json-parse", - "src/main/orca-profiles/profile-cloud-session-store.ts:json-stringify", - "src/main/orca-profiles/profile-cloud-session-store.ts:read-file", - "src/main/orca-profiles/profile-index-store.ts:json-parse", - "src/main/orca-profiles/profile-index-store.ts:json-stringify", - "src/main/orca-profiles/profile-index-store.ts:read-file", - "src/main/orca-profiles/profile-project-state-file.ts:json-parse", - "src/main/orca-profiles/profile-project-state-file.ts:json-stringify", - "src/main/orca-profiles/profile-project-state-file.ts:read-file", - "src/main/persistence.ts:json-parse", - "src/main/persistence.ts:json-stringify", - "src/main/persistence.ts:read-file", - "src/main/pi/agent-status-extension-source.ts:json-stringify", - "src/main/pi/agent-status-extension-source.ts:read-file", - "src/main/pi/titlebar-extension-service.ts:read-file", - "src/main/ports/local-workspace-port-scanner.ts:json-parse", - "src/main/ports/local-workspace-port-scanner.ts:read-file", - "src/main/project-groups/nested-repo-discovery.ts:read-file", - "src/main/providers/ssh-filesystem-provider.ts:read-file", - "src/main/providers/ssh-git-provider.ts:json-stringify", - "src/main/providers/types.ts:read-file", - "src/main/providers/windows-foreground-process-rows.ts:json-parse", - "src/main/pty/shell-startup-env.ts:read-file", - "src/main/rate-limits/claude-fetcher.ts:json-parse", - "src/main/rate-limits/claude-fetcher.ts:read-file", - "src/main/rate-limits/claude-fetcher.ts:response-text", - "src/main/rate-limits/claude-oauth-usage-error.ts:response-text", - "src/main/rate-limits/codex-fetcher.ts:json-parse", - "src/main/rate-limits/codex-fetcher.ts:json-stringify", - "src/main/rate-limits/codex-fetcher.ts:read-file", - "src/main/rate-limits/codex-fetcher.ts:response-text", - "src/main/rate-limits/gemini-cli-oauth-extractor.ts:json-parse", - "src/main/rate-limits/gemini-cli-oauth-extractor.ts:read-file", - "src/main/rate-limits/gemini-oauth-sources.ts:json-parse", - "src/main/rate-limits/gemini-oauth-sources.ts:json-stringify", - "src/main/rate-limits/gemini-oauth-sources.ts:read-file", - "src/main/rate-limits/gemini-oauth-sources.ts:response-text", - "src/main/rate-limits/gemini-usage-fetcher.test-fixtures.ts:json-stringify", - "src/main/rate-limits/gemini-usage-fetcher.ts:json-stringify", - "src/main/rate-limits/gemini-usage-fetcher.ts:response-text", - "src/main/rate-limits/grok-auth.ts:json-parse", - "src/main/rate-limits/grok-auth.ts:read-file", - "src/main/rate-limits/grok-fetcher.ts:response-text", - "src/main/rate-limits/kimi-fetcher.ts:json-parse", - "src/main/rate-limits/kimi-fetcher.ts:read-file", - "src/main/rate-limits/kimi-fetcher.ts:response-text", - "src/main/rate-limits/minimax-fetcher.ts:response-text", - "src/main/rate-limits/opencode-go-usage-fetcher.ts:response-text", - "src/main/remote-agent-trust-presets.ts:json-parse", - "src/main/remote-agent-trust-presets.ts:json-stringify", - "src/main/remote-agent-trust-presets.ts:read-file", - "src/main/repo-icon-autodetect.ts:json-parse", - "src/main/repo-icon-autodetect.ts:read-file", - "src/main/runtime/agent-session-claim-identity.ts:read-file", - "src/main/runtime/claude-agent-teams-shim-env.ts:read-file", - "src/main/runtime/device-registry.ts:json-parse", - "src/main/runtime/device-registry.ts:read-file", - "src/main/runtime/e2ee-keypair.ts:json-parse", - "src/main/runtime/e2ee-keypair.ts:read-file", - "src/main/runtime/orca-runtime-files.ts:json-stringify", - "src/main/runtime/orca-runtime-files.ts:read-file", - "src/main/runtime/orca-runtime.ts:json-stringify", - "src/main/runtime/orca-runtime.ts:read-file", - "src/main/runtime/orchestration/coordinator.ts:json-parse", - "src/main/runtime/orchestration/db.ts:json-parse", - "src/main/runtime/orchestration/db.ts:json-stringify", - "src/main/runtime/orchestration/lifecycle-reconciliation.ts:json-parse", - "src/main/runtime/orchestration/lifecycle-reconciliation.ts:json-stringify", - "src/main/runtime/relay/relay-control-client.ts:json-stringify", - "src/main/runtime/relay/relay-control-protocol.ts:json-parse", - "src/main/runtime/relay/relay-http-client.ts:json-stringify", - "src/main/runtime/relay/relay-http-client.ts:response-text", - "src/main/runtime/relay/relay-revoke-outbox.ts:json-parse", - "src/main/runtime/relay/relay-revoke-outbox.ts:read-file", - "src/main/runtime/rpc/dispatcher.ts:json-stringify", - "src/main/runtime/rpc/e2ee-channel.ts:json-stringify", - "src/main/runtime/rpc/methods/orchestration-gates.ts:json-parse", - "src/main/runtime/rpc/methods/orchestration.ts:json-parse", - "src/main/runtime/rpc/methods/orchestration.ts:json-stringify", - "src/main/runtime/rpc/relay-transport.ts:json-stringify", - "src/main/runtime/rpc/ws-fallback-port-store.ts:json-parse", - "src/main/runtime/rpc/ws-fallback-port-store.ts:json-stringify", - "src/main/runtime/rpc/ws-fallback-port-store.ts:read-file", - "src/main/runtime/runtime-metadata.ts:json-parse", - "src/main/runtime/runtime-metadata.ts:read-file", - "src/main/runtime/runtime-rpc.ts:json-parse", - "src/main/runtime/runtime-rpc.ts:json-stringify", - "src/main/runtime/runtime-rpc.ts:unbounded-fanout", - "src/main/runtime/tls-certificate.ts:read-file", - "src/main/runtime/windows-mobile-firewall.ts:json-parse", - "src/main/serve-update-handoff.ts:json-parse", - "src/main/serve-update-handoff.ts:json-stringify", - "src/main/serve-update-handoff.ts:read-file", - "src/main/server/serve-readiness.ts:json-stringify", - "src/main/skills/claude-plugin-skill-sources.ts:json-parse", - "src/main/skills/skill-bundle-artifacts.ts:read-file", - "src/main/skills/skill-package-identity.ts:json-stringify", - "src/main/source-control/hosted-review-api-request.ts:response-text", - "src/main/source-control/pull-request-template.ts:read-file", - "src/main/speech/openai-api-key-store.ts:json-parse", - "src/main/speech/openai-api-key-store.ts:read-file", - "src/main/speech/openai-transcription-client.ts:response-text", - "src/main/speech/stt-worker.ts:json-parse", - "src/main/ssh/relay-protocol.ts:json-parse", - "src/main/ssh/relay-protocol.ts:json-stringify", - "src/main/ssh/ssh-agent-identity-filter.ts:read-file", - "src/main/ssh/ssh-auth-resolution.ts:read-file", - "src/main/ssh/ssh-config-include-expander.ts:read-file", - "src/main/ssh/ssh-control-socket.ts:json-stringify", - "src/main/ssh/ssh-git-response-stream-reader.ts:json-parse", - "src/main/ssh/ssh-port-forward.ts:unbounded-fanout", - "src/main/ssh/ssh-relay-deploy.ts:json-stringify", - "src/main/ssh/ssh-relay-versioned-install.ts:read-file", - "src/main/ssh/ssh-remote-cli-format.ts:json-stringify", - "src/main/ssh/ssh-remote-commands.ts:read-file", - "src/main/ssh/ssh-remote-orca-cli.ts:json-stringify", - "src/main/ssh/ssh-remote-orchestration-send.ts:json-stringify", - "src/main/ssh/ssh-remote-platform.ts:json-stringify", - "src/main/ssh/system-ssh-file-transfer.ts:json-stringify", - "src/main/ssh/system-ssh-file-transfer.ts:read-file", - "src/main/startup/configure-process.ts:json-parse", - "src/main/startup/configure-process.ts:read-file", - "src/main/startup/ensure-virtual-display.ts:read-file", - "src/main/startup/gpu-fallback-marker.ts:json-parse", - "src/main/startup/gpu-fallback-marker.ts:json-stringify", - "src/main/startup/gpu-fallback-marker.ts:read-file", - "src/main/startup/startup-diagnostics.ts:json-stringify", - "src/main/startup/windows-user-data-acl.ts:json-parse", - "src/main/startup/windows-user-data-acl.ts:json-stringify", - "src/main/startup/windows-user-data-acl.ts:read-file", - "src/main/stats/collector.ts:json-parse", - "src/main/stats/collector.ts:json-stringify", - "src/main/stats/collector.ts:read-file", - "src/main/system-fonts.ts:json-parse", - "src/main/telemetry/consent.ts:json-stringify", - "src/main/terminal-history.ts:json-parse", - "src/main/terminal-history.ts:json-stringify", - "src/main/terminal-history.ts:read-file", - "src/main/updater-changelog.ts:response-text", - "src/main/updater-lifecycle-diagnostics.ts:json-stringify", - "src/main/updater-nudge.ts:response-text", - "src/main/updater-prerelease-feed.ts:response-text", - "src/main/warp-themes/index.ts:read-file", - "src/main/workspace-space-analysis.ts:unbounded-fanout", - "src/main/worktree-removal-safety.ts:read-file", - "src/relay/agent-exec-handler.ts:json-stringify", - "src/relay/external-automations-handler.ts:json-parse", - "src/relay/external-automations-handler.ts:read-file", - "src/relay/fs-handler-file-read.ts:read-file", - "src/relay/fs-handler.ts:json-stringify", - "src/relay/fs-handler.ts:read-file", - "src/relay/fs-stream-registry.ts:unbounded-fanout", - "src/relay/git-handler-status-ops.ts:read-file", - "src/relay/git-handler.ts:json-stringify", - "src/relay/git-working-file-read.ts:read-file", - "src/relay/plugin-overlay.ts:read-file", - "src/relay/port-scan-handler.ts:read-file", - "src/relay/protocol.ts:json-parse", - "src/relay/protocol.ts:json-stringify", - "src/relay/pty-handler.ts:json-parse", - "src/relay/pty-handler.ts:json-stringify", - "src/relay/pty-handler.ts:unbounded-fanout", - "src/relay/pty-shell-launch.ts:read-file", - "src/relay/pty-shell-utils.ts:read-file", - "src/relay/relay-handshake.ts:read-file", - "src/relay/relay-watcher-removal-fence.ts:unbounded-fanout", - "src/relay/windows-port-scan.ts:json-parse", - "src/relay/workspace-session-handler.ts:json-parse", - "src/relay/workspace-session-handler.ts:json-stringify", - "src/relay/workspace-session-handler.ts:read-file", - "src/relay/wsl-hook-fs-bridge.ts:read-file", - "src/renderer/src/components/GitHubItemDialog.tsx:json-stringify", - "src/renderer/src/components/PullRequestPage.tsx:json-stringify", - "src/renderer/src/components/TaskPage.tsx:json-parse", - "src/renderer/src/components/TaskPage.tsx:json-stringify", - "src/renderer/src/components/Terminal.tsx:unbounded-fanout", - "src/renderer/src/components/automations/AutomationsPage.tsx:json-stringify", - "src/renderer/src/components/browser-pane/BrowserPane.tsx:json-parse", - "src/renderer/src/components/browser-pane/BrowserPane.tsx:json-stringify", - "src/renderer/src/components/diff-comments/useDiffCommentDecorator.tsx:json-stringify", - "src/renderer/src/components/editor/CombinedDiffViewer.tsx:json-stringify", - "src/renderer/src/components/editor/IpynbViewer.tsx:json-stringify", - "src/renderer/src/components/editor/editor-autosave-controller.ts:unbounded-fanout", - "src/renderer/src/components/editor/ipynb-parse.ts:json-parse", - "src/renderer/src/components/editor/ipynb-parse.ts:json-stringify", - "src/renderer/src/components/editor/markdown-document-list-request.ts:json-stringify", - "src/renderer/src/components/editor/markdown-export-extract.ts:response-text", - "src/renderer/src/components/editor/raw-markdown-html.ts:json-stringify", - "src/renderer/src/components/editor/rich-markdown-html-superscript-link.ts:json-parse", - "src/renderer/src/components/editor/useEditorPanelContentState.ts:json-stringify", - "src/renderer/src/components/editor/useLocalImageSrc.ts:read-file", - "src/renderer/src/components/feature-wall/feature-wall-completion-persistence.ts:json-parse", - "src/renderer/src/components/feature-wall/feature-wall-completion-persistence.ts:json-stringify", - "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.tsx:json-stringify", - "src/renderer/src/components/floating-terminal/floating-terminal-panel-bounds.ts:json-parse", - "src/renderer/src/components/floating-terminal/floating-terminal-panel-bounds.ts:json-stringify", - "src/renderer/src/components/floating-terminal/floating-terminal-trigger-position.ts:json-parse", - "src/renderer/src/components/floating-terminal/floating-terminal-trigger-position.ts:json-stringify", - "src/renderer/src/components/github-project/column-widths.ts:json-parse", - "src/renderer/src/components/github-project/column-widths.ts:json-stringify", - "src/renderer/src/components/github-project/columns.ts:json-parse", - "src/renderer/src/components/github-project/columns.ts:json-stringify", - "src/renderer/src/components/github-project/project-visible-table-cache.ts:json-stringify", - "src/renderer/src/components/landing-preflight-dismissal.ts:json-parse", - "src/renderer/src/components/landing-preflight-dismissal.ts:json-stringify", - "src/renderer/src/components/linear-issue-attribute-filter-dropdowns.tsx:json-stringify", - "src/renderer/src/components/native-chat/native-chat-interactive-prompt.ts:json-parse", - "src/renderer/src/components/native-chat/native-chat-pending-occurrence.ts:json-stringify", - "src/renderer/src/components/native-chat/native-chat-session-assembler.ts:json-stringify", - "src/renderer/src/components/native-chat/native-chat-session-option-enrichment.ts:json-stringify", - "src/renderer/src/components/native-chat/native-chat-skill-discovery-context.ts:json-stringify", - "src/renderer/src/components/pet/PetOverlay.tsx:json-parse", - "src/renderer/src/components/pet/PetOverlay.tsx:json-stringify", - "src/renderer/src/components/pr-comments-resolution-prompt.ts:json-stringify", - "src/renderer/src/components/quick-open-file-list.ts:json-stringify", - "src/renderer/src/components/right-sidebar/ChecksPanel.tsx:json-stringify", - "src/renderer/src/components/right-sidebar/PortsPanel.tsx:json-stringify", - "src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialog.tsx:json-stringify", - "src/renderer/src/components/right-sidebar/ai-vault-view-options-persistence.ts:json-parse", - "src/renderer/src/components/right-sidebar/ai-vault-view-options-persistence.ts:json-stringify", - "src/renderer/src/components/right-sidebar/checks-panel-git-status-snapshot.ts:json-stringify", - "src/renderer/src/components/right-sidebar/checks-panel-polling.ts:json-stringify", - "src/renderer/src/components/right-sidebar/file-explorer-operation-owner.ts:json-stringify", - "src/renderer/src/components/right-sidebar/push-target-upstream-refresh-cache.ts:json-stringify", - "src/renderer/src/components/right-sidebar/useFileDeletion.ts:unbounded-fanout", - "src/renderer/src/components/right-sidebar/useFileExplorerWatch.ts:json-stringify", - "src/renderer/src/components/right-sidebar/useGitHistoryCommitActions.ts:json-stringify", - "src/renderer/src/components/right-sidebar/useSavedSourceControlAgentActionAutoStart.ts:json-stringify", - "src/renderer/src/components/settings/RepositoryHostSetupsSection.tsx:json-stringify", - "src/renderer/src/components/settings/RuntimeEnvironmentsPane.tsx:unbounded-fanout", - "src/renderer/src/components/settings/SourceControlActionRecipeRow.tsx:json-stringify", - "src/renderer/src/components/settings/mcp-config-inspection.ts:read-file", - "src/renderer/src/components/settings/repository-source-control-ai-global-ux.ts:json-stringify", - "src/renderer/src/components/settings/repository-source-control-ai-persist-queue.ts:json-stringify", - "src/renderer/src/components/settings/source-control-action-recipe-draft-state.ts:json-stringify", - "src/renderer/src/components/settings/source-control-ai-action-recipe-draft.ts:json-stringify", - "src/renderer/src/components/setup-guide/setup-guide-progress-readiness.ts:json-stringify", - "src/renderer/src/components/sidebar/WorktreeList.tsx:unbounded-fanout", - "src/renderer/src/components/sidebar/linear-agent-skill-runtime.ts:json-stringify", - "src/renderer/src/components/sidebar/workspace-board-task-status-sync.ts:json-stringify", - "src/renderer/src/components/sidebar/workspace-status-drag-data.ts:json-parse", - "src/renderer/src/components/sidebar/workspace-status-drag-data.ts:json-stringify", - "src/renderer/src/components/status-bar/SshStatusSegment.tsx:unbounded-fanout", - "src/renderer/src/components/status-bar/StatusBar.tsx:json-stringify", - "src/renderer/src/components/task-page-cache-selectors.ts:json-stringify", - "src/renderer/src/components/terminal-pane/terminal-view-attributes-publisher.ts:json-stringify", - "src/renderer/src/hooks/useIpcEvents.ts:unbounded-fanout", - "src/renderer/src/lib/ai-vault-session-drag.ts:json-parse", - "src/renderer/src/lib/ai-vault-session-drag.ts:json-stringify", - "src/renderer/src/lib/app-font-family.ts:json-stringify", - "src/renderer/src/lib/execute-open-editor-path-move.ts:unbounded-fanout", - "src/renderer/src/lib/feature-education-telemetry.ts:json-parse", - "src/renderer/src/lib/feature-education-telemetry.ts:json-stringify", - "src/renderer/src/lib/react-error-boundary-reporting.ts:json-stringify", - "src/renderer/src/lib/workspace-file-drag.ts:json-parse", - "src/renderer/src/lib/workspace-file-drag.ts:json-stringify", - "src/renderer/src/lib/workspace-port-actions.ts:json-stringify", - "src/renderer/src/lib/worktree-operation-generation.ts:json-stringify", - "src/renderer/src/lib/worktree-operation-route.ts:json-stringify", - "src/renderer/src/lib/worktree-runtime-owner-index.ts:json-stringify", - "src/renderer/src/runtime/runtime-file-client.ts:read-file", - "src/renderer/src/runtime/sync-runtime-graph.ts:json-stringify", - "src/renderer/src/runtime/web-session-intent-owner.ts:json-stringify", - "src/renderer/src/store/slices/linear.ts:json-stringify", - "src/renderer/src/store/slices/pull-request-generation.ts:json-stringify", - "src/renderer/src/store/slices/repos.ts:json-stringify", - "src/renderer/src/store/slices/terminal-tab-retirement.ts:json-stringify", - "src/renderer/src/store/slices/workspace-cleanup.ts:json-stringify", - "src/renderer/src/web/web-pairing.ts:json-parse", - "src/renderer/src/web/web-preload-api.ts:json-parse", - "src/renderer/src/web/web-preload-api.ts:json-stringify", - "src/renderer/src/web/web-runtime-client.ts:json-parse", - "src/renderer/src/web/web-runtime-client.ts:json-stringify", - "src/renderer/src/web/web-runtime-client.ts:response-text", - "src/renderer/src/web/web-runtime-environment.ts:json-parse", - "src/renderer/src/web/web-runtime-environment.ts:json-stringify", - "src/shared/agent-hook-listener.ts:json-parse", - "src/shared/agent-hook-listener.ts:json-stringify", - "src/shared/agent-question-answered-intent.ts:json-parse", - "src/shared/agent-status-types.ts:json-parse", - "src/shared/browser-annotation-viewport-bridge.ts:json-stringify", - "src/shared/browser-screencast-protocol.ts:json-parse", - "src/shared/browser-screencast-protocol.ts:json-stringify", - "src/shared/claude-statusline-rate-limits.ts:json-parse", - "src/shared/codex-reset-credit-attempt-ledger.ts:json-stringify", - "src/shared/codex-reset-credit-scope.ts:json-stringify", - "src/shared/commit-message-agent-spec.ts:json-parse", - "src/shared/emulator-keyboard-frame.ts:json-stringify", - "src/shared/emulator-touch-frame.ts:json-stringify", - "src/shared/ephemeral-vm-recipe-lifecycle-payload.ts:json-stringify", - "src/shared/ephemeral-vm-recipe-runner.ts:json-stringify", - "src/shared/ephemeral-vm-recipes.ts:json-parse", - "src/shared/ephemeral-vm-runtime-store.ts:json-parse", - "src/shared/external-automation-jobs-file.ts:json-parse", - "src/shared/fetch-response-body.ts:json-parse", - "src/shared/fetch-response-body.ts:response-text", - "src/shared/git-effective-upstream.ts:json-stringify", - "src/shared/git-publish-target-status.ts:json-stringify", - "src/shared/git-status-line-stats-cache.ts:json-stringify", - "src/shared/in-flight-promise-dedupe.ts:json-stringify", - "src/shared/linear-issue-attribute-filter.ts:json-stringify", - "src/shared/map-with-concurrency.ts:unbounded-fanout", - "src/shared/mcp-config.ts:json-parse", - "src/shared/mobile-relay-pairing-fixtures.ts:json-stringify", - "src/shared/native-chat-ask.ts:json-parse", - "src/shared/native-chat-tool-summary.ts:json-stringify", - "src/shared/pairing.ts:json-parse", - "src/shared/pairing.ts:json-stringify", - "src/shared/pr-checks-fix-prompt.ts:json-stringify", - "src/shared/pull-request-generation.ts:json-parse", - "src/shared/remote-runtime-client.ts:json-stringify", - "src/shared/remote-runtime-request-frames.ts:json-parse", - "src/shared/remote-runtime-request-websocket.ts:json-stringify", - "src/shared/runtime-bootstrap.ts:json-parse", - "src/shared/runtime-environment-store.ts:json-parse", - "src/shared/secure-file.ts:json-stringify", - "src/shared/serve-update-handoff.ts:json-parse", - "src/shared/setup-script-import-codex-environment.ts:json-parse", - "src/shared/setup-script-import-codex-environment.ts:read-file", - "src/shared/setup-script-imports.ts:json-parse", - "src/shared/setup-script-imports.ts:read-file", - "src/shared/setup-script-package-manager-suggestion.ts:json-parse", - "src/shared/setup-script-package-manager-suggestion.ts:read-file", - "src/shared/source-control-ai.ts:json-stringify", - "src/shared/source-control-commit-failure.ts:json-stringify", - "src/shared/source-control-conflict-prompts.ts:json-stringify", - "src/shared/source-control-push-failure.ts:json-stringify", - "src/shared/terminal-stream-protocol.ts:json-parse", - "src/shared/terminal-stream-protocol.ts:json-stringify", - "src/shared/text-search.ts:json-parse" - ] + "allowed": { + "mobile/src/cache/home-snapshot-cache.ts:json-parse": 1, + "mobile/src/cache/home-snapshot-cache.ts:json-stringify": 1, + "mobile/src/components/CustomKeyModal.tsx:json-parse": 1, + "mobile/src/components/CustomKeyModal.tsx:json-stringify": 1, + "mobile/src/components/MobileRichMarkdownEditor.tsx:json-parse": 1, + "mobile/src/components/mobile-rich-markdown-editor-html.ts:json-stringify": 2, + "mobile/src/components/pr-sidebar/MermaidDiagram.tsx:json-stringify": 1, + "mobile/src/files/mobile-file-preview-source.ts:json-stringify": 2, + "mobile/src/session/MobileNativeChatView.tsx:json-stringify": 1, + "mobile/src/session/mobile-image-source-picker.ts:response-text": 1, + "mobile/src/session/mobile-native-chat-permission.ts:json-parse": 1, + "mobile/src/session/mobile-native-chat-question.ts:json-stringify": 1, + "mobile/src/session/mobile-terminal-records.ts:json-stringify": 4, + "mobile/src/session/use-mobile-native-chat-ask-dismiss.ts:json-stringify": 1, + "mobile/src/storage/codex-reset-attempt-journal.ts:json-parse": 1, + "mobile/src/storage/codex-reset-attempt-journal.ts:json-stringify": 2, + "mobile/src/storage/preferences.ts:json-parse": 2, + "mobile/src/storage/preferences.ts:json-stringify": 2, + "mobile/src/storage/session-view-preferences.ts:json-parse": 1, + "mobile/src/storage/session-view-preferences.ts:json-stringify": 1, + "mobile/src/terminal/TerminalWebView.tsx:json-parse": 1, + "mobile/src/terminal/TerminalWebView.tsx:json-stringify": 2, + "mobile/src/terminal/terminal-accessory-layout.ts:json-parse": 1, + "mobile/src/terminal/terminal-accessory-layout.ts:json-stringify": 1, + "mobile/src/terminal/terminal-webview-html.ts:json-parse": 1, + "mobile/src/terminal/terminal-webview-html.ts:json-stringify": 4, + "mobile/src/terminal/terminal-webview-url-tap.ts:json-stringify": 2, + "mobile/src/transport/browser-screencast-protocol.ts:json-parse": 1, + "mobile/src/transport/host-credential-cleanup.ts:json-parse": 1, + "mobile/src/transport/host-credential-cleanup.ts:json-stringify": 1, + "mobile/src/transport/host-store.ts:json-parse": 1, + "mobile/src/transport/host-store.ts:json-stringify": 1, + "mobile/src/transport/mobile-e2ee-v2-physical-channel.ts:json-parse": 3, + "mobile/src/transport/mobile-e2ee-v2-physical-channel.ts:json-stringify": 2, + "mobile/src/transport/mobile-relay-credential-bundle.ts:json-parse": 1, + "mobile/src/transport/mobile-relay-credential-bundle.ts:json-stringify": 1, + "mobile/src/transport/mobile-relay-credential-rotation.ts:json-stringify": 1, + "mobile/src/transport/mobile-relay-direct-upgrade-journal.ts:json-parse": 1, + "mobile/src/transport/mobile-relay-direct-upgrade-journal.ts:json-stringify": 1, + "mobile/src/transport/mobile-relay-direct-upgrade.ts:json-stringify": 1, + "mobile/src/transport/mobile-relay-e2ee-link.ts:json-parse": 1, + "mobile/src/transport/mobile-relay-e2ee-link.ts:json-stringify": 1, + "mobile/src/transport/mobile-relay-host-overlay-store.ts:json-parse": 1, + "mobile/src/transport/mobile-relay-host-overlay-store.ts:json-stringify": 1, + "mobile/src/transport/mobile-relay-invite-director.ts:json-parse": 1, + "mobile/src/transport/mobile-relay-invite-director.ts:json-stringify": 1, + "mobile/src/transport/mobile-relay-pairing-journal-store.ts:json-parse": 2, + "mobile/src/transport/mobile-relay-pairing-journal-store.ts:json-stringify": 3, + "mobile/src/transport/mobile-relay-pairing-journal.ts:json-stringify": 1, + "mobile/src/transport/mobile-relay-pairing-recovery.ts:json-stringify": 1, + "mobile/src/transport/mobile-relay-physical-client.ts:json-parse": 2, + "mobile/src/transport/mobile-relay-physical-client.ts:json-stringify": 2, + "mobile/src/transport/mobile-relay-resume-director.ts:json-parse": 1, + "mobile/src/transport/mobile-relay-resume-director.ts:json-stringify": 1, + "mobile/src/transport/mobile-relay-resume-director.ts:response-text": 1, + "mobile/src/transport/mobile-relay-rpc-session.ts:json-parse": 1, + "mobile/src/transport/mobile-relay-rpc-session.ts:json-stringify": 1, + "mobile/src/transport/pairing.ts:json-parse": 1, + "mobile/src/transport/pre-profile-pairing-coordinator.ts:json-stringify": 1, + "mobile/src/transport/rpc-client.ts:json-parse": 3, + "mobile/src/transport/rpc-client.ts:json-stringify": 2, + "mobile/src/transport/socket-event-debug.ts:json-stringify": 1, + "mobile/src/transport/terminal-stream-protocol.ts:json-parse": 1, + "mobile/src/transport/websocket-payload-bytes.ts:response-text": 1, + "mobile/src/worktree/last-visited-worktree-repo.ts:json-parse": 1, + "src/cli/bundled-skill-guides.ts:json-parse": 1, + "src/cli/bundled-skill-guides.ts:json-stringify": 1, + "src/cli/bundled-skill-guides.ts:read-file": 1, + "src/cli/format.ts:json-stringify": 3, + "src/cli/handlers/agent-hooks.ts:json-parse": 1, + "src/cli/handlers/agent-hooks.ts:json-stringify": 1, + "src/cli/handlers/agent-hooks.ts:read-file": 1, + "src/cli/handlers/automations.ts:json-parse": 1, + "src/cli/handlers/browser-env.ts:json-stringify": 1, + "src/cli/handlers/browser-interact.ts:json-stringify": 2, + "src/cli/handlers/browser-nav.ts:json-stringify": 1, + "src/cli/handlers/browser-storage.ts:json-stringify": 2, + "src/cli/handlers/browser-tab.ts:json-stringify": 1, + "src/cli/handlers/emulator.ts:json-parse": 1, + "src/cli/handlers/emulator.ts:json-stringify": 3, + "src/cli/handlers/introspection.ts:json-stringify": 1, + "src/cli/handlers/orchestration.ts:json-stringify": 3, + "src/cli/handlers/skills.ts:json-stringify": 2, + "src/cli/handlers/vm.ts:json-stringify": 1, + "src/cli/handlers/vm.ts:read-file": 1, + "src/cli/linear-request-builders.ts:read-file": 1, + "src/cli/runtime/mac-app-update-bundle.ts:read-file": 1, + "src/cli/runtime/metadata.ts:json-parse": 2, + "src/cli/runtime/metadata.ts:read-file": 2, + "src/cli/runtime/serve-update-supervisor.ts:json-parse": 2, + "src/cli/runtime/serve-update-supervisor.ts:json-stringify": 1, + "src/cli/runtime/serve-update-supervisor.ts:read-file": 2, + "src/cli/runtime/transport.ts:json-parse": 1, + "src/cli/runtime/transport.ts:json-stringify": 1, + "src/cli/workspace-format.ts:json-stringify": 2, + "src/main/active-view-preference.ts:json-parse": 1, + "src/main/active-view-preference.ts:json-stringify": 1, + "src/main/active-view-preference.ts:read-file": 1, + "src/main/agent-hooks/hooks-json-read.ts:json-parse": 1, + "src/main/agent-hooks/hooks-json-read.ts:read-file": 1, + "src/main/agent-hooks/install-telemetry.ts:json-stringify": 1, + "src/main/agent-hooks/installer-utils-remote.ts:json-parse": 1, + "src/main/agent-hooks/installer-utils-remote.ts:json-stringify": 1, + "src/main/agent-hooks/installer-utils-remote.ts:read-file": 7, + "src/main/agent-hooks/installer-utils.ts:json-stringify": 1, + "src/main/agent-hooks/installer-utils.ts:read-file": 2, + "src/main/agent-hooks/managed-hook-local-filesystem.ts:read-file": 2, + "src/main/agent-hooks/managed-hook-lock-claims.ts:json-stringify": 1, + "src/main/agent-hooks/managed-hook-lock-claims.ts:read-file": 2, + "src/main/agent-hooks/managed-hook-lock-records.ts:json-parse": 3, + "src/main/agent-hooks/managed-hook-lock-records.ts:json-stringify": 1, + "src/main/agent-hooks/managed-hook-lock-records.ts:read-file": 3, + "src/main/agent-hooks/managed-hook-lock-records.ts:unbounded-fanout": 1, + "src/main/agent-hooks/managed-hook-owner-identity.ts:read-file": 3, + "src/main/agent-hooks/server.ts:json-parse": 1, + "src/main/agent-hooks/server.ts:json-stringify": 1, + "src/main/agent-hooks/server.ts:read-file": 1, + "src/main/agent-hooks/wsl-hook-fs-adapter.ts:read-file": 1, + "src/main/agent-hooks/wsl-hook-relay-deps.ts:read-file": 1, + "src/main/agent-hooks/wsl-hook-relay-launch.ts:read-file": 1, + "src/main/agent-state-file-reader.ts:json-parse": 1, + "src/main/agent-trust-presets.ts:json-parse": 1, + "src/main/agent-trust-presets.ts:json-stringify": 2, + "src/main/agent-trust-presets.ts:read-file": 3, + "src/main/ai-vault/cached-session-list.ts:json-stringify": 1, + "src/main/ai-vault/remote-session-scanner-codex-index.ts:read-file": 1, + "src/main/ai-vault/remote-session-scanner-discovery.ts:unbounded-fanout": 1, + "src/main/ai-vault/remote-session-scanner.ts:read-file": 2, + "src/main/ai-vault/remote-session-scanner.ts:unbounded-fanout": 3, + "src/main/ai-vault/session-parse-cache-persistence.ts:json-parse": 1, + "src/main/ai-vault/session-parse-cache-persistence.ts:json-stringify": 1, + "src/main/ai-vault/session-parse-cache-persistence.ts:read-file": 1, + "src/main/ai-vault/session-scanner-antigravity-fixtures.ts:json-stringify": 1, + "src/main/ai-vault/session-scanner-claude-subagents.ts:json-parse": 1, + "src/main/ai-vault/session-scanner-claude-subagents.ts:read-file": 1, + "src/main/ai-vault/session-scanner-claude-subagents.ts:unbounded-fanout": 1, + "src/main/ai-vault/session-scanner-codex-fixtures.ts:json-stringify": 1, + "src/main/ai-vault/session-scanner-devin-parser.ts:json-parse": 1, + "src/main/ai-vault/session-scanner-devin-parser.ts:read-file": 1, + "src/main/ai-vault/session-scanner-discovery.ts:unbounded-fanout": 1, + "src/main/ai-vault/session-scanner-gemini-parsers.ts:json-parse": 1, + "src/main/ai-vault/session-scanner-gemini-parsers.ts:read-file": 1, + "src/main/ai-vault/session-scanner-graph-parsers.ts:json-parse": 1, + "src/main/ai-vault/session-scanner-graph-parsers.ts:read-file": 1, + "src/main/ai-vault/session-scanner-grok-parser.ts:json-parse": 1, + "src/main/ai-vault/session-scanner-grok-parser.ts:read-file": 1, + "src/main/ai-vault/session-scanner-incremental-fixtures.ts:json-stringify": 25, + "src/main/ai-vault/session-scanner-kimi-parser.ts:json-parse": 1, + "src/main/ai-vault/session-scanner-kimi-parser.ts:read-file": 1, + "src/main/ai-vault/session-scanner-kimi-paths.ts:json-parse": 1, + "src/main/ai-vault/session-scanner-opencode-sqlite.ts:json-parse": 2, + "src/main/ai-vault/session-scanner-secondary-parsers.ts:json-parse": 3, + "src/main/ai-vault/session-scanner-secondary-parsers.ts:read-file": 3, + "src/main/ai-vault/session-scanner-test-fixtures.ts:json-stringify": 1, + "src/main/ai-vault/session-scanner-values.ts:json-parse": 2, + "src/main/ai-vault/session-scanner-values.ts:read-file": 1, + "src/main/ai-vault/session-scanner.ts:read-file": 1, + "src/main/ai-vault/session-scanner.ts:unbounded-fanout": 1, + "src/main/amp/hook-service.ts:json-stringify": 2, + "src/main/amp/hook-service.ts:read-file": 3, + "src/main/attribution/terminal-attribution.ts:read-file": 1, + "src/main/automations/external-manager.ts:json-parse": 2, + "src/main/automations/external-manager.ts:read-file": 2, + "src/main/automations/external-manager.ts:unbounded-fanout": 1, + "src/main/automations/hermes-cron-output.ts:read-file": 2, + "src/main/automations/hermes-cron-output.ts:unbounded-fanout": 1, + "src/main/azure-devops/azure-devops-api-request.ts:response-text": 1, + "src/main/azure-devops/pull-request-creation.ts:json-stringify": 1, + "src/main/bitbucket/client.ts:response-text": 1, + "src/main/browser/agent-browser-bridge.ts:json-parse": 2, + "src/main/browser/agent-browser-bridge.ts:json-stringify": 9, + "src/main/browser/agent-browser-bridge.ts:read-file": 1, + "src/main/browser/browser-clicked-link-routing.ts:json-stringify": 2, + "src/main/browser/browser-cookie-import.ts:json-parse": 3, + "src/main/browser/browser-cookie-import.ts:read-file": 4, + "src/main/browser/browser-manager.ts:json-stringify": 24, + "src/main/browser/browser-session-registry.ts:json-parse": 1, + "src/main/browser/browser-session-registry.ts:json-stringify": 1, + "src/main/browser/browser-session-registry.ts:read-file": 1, + "src/main/browser/cdp-bridge.ts:json-parse": 1, + "src/main/browser/cdp-bridge.ts:json-stringify": 1, + "src/main/browser/cdp-ws-proxy-test-harness.ts:json-parse": 1, + "src/main/browser/cdp-ws-proxy-test-harness.ts:json-stringify": 1, + "src/main/browser/cdp-ws-proxy.ts:json-parse": 1, + "src/main/browser/cdp-ws-proxy.ts:json-stringify": 4, + "src/main/browser/popup-origin-bar-window.ts:json-stringify": 1, + "src/main/browser/snapshot-engine.ts:json-parse": 1, + "src/main/browser/snapshot-engine.ts:json-stringify": 1, + "src/main/claude-accounts/managed-auth-path.ts:read-file": 2, + "src/main/claude-accounts/oauth-refresh.ts:json-parse": 2, + "src/main/claude-accounts/oauth-refresh.ts:json-stringify": 1, + "src/main/claude-accounts/oauth-refresh.ts:response-text": 1, + "src/main/claude-accounts/runtime-auth-service.ts:json-parse": 8, + "src/main/claude-accounts/runtime-auth-service.ts:json-stringify": 3, + "src/main/claude-accounts/runtime-auth-service.ts:read-file": 10, + "src/main/claude-accounts/service.ts:json-parse": 2, + "src/main/claude-accounts/service.ts:json-stringify": 2, + "src/main/claude-accounts/service.ts:read-file": 2, + "src/main/claude-usage/scanner.ts:json-parse": 1, + "src/main/claude-usage/scanner.ts:unbounded-fanout": 3, + "src/main/claude-usage/store.ts:json-parse": 1, + "src/main/claude-usage/store.ts:json-stringify": 3, + "src/main/claude-usage/store.ts:read-file": 1, + "src/main/claude/hook-settings.ts:json-stringify": 1, + "src/main/cli/cli-installer.ts:read-file": 3, + "src/main/cli/linux-bare-orca-dispatcher.ts:read-file": 1, + "src/main/cli/linux-terminal-orca-cli-shim.ts:read-file": 1, + "src/main/cli/wsl-cli-registration-registry.ts:json-parse": 1, + "src/main/cli/wsl-cli-registration-registry.ts:json-stringify": 1, + "src/main/cli/wsl-cli-registration-registry.ts:read-file": 1, + "src/main/codex-accounts/codex-auth-identity.ts:json-parse": 1, + "src/main/codex-accounts/host-codex-managed-home-ownership.ts:read-file": 1, + "src/main/codex-accounts/legacy-shared-auth-migration.ts:json-stringify": 1, + "src/main/codex-accounts/legacy-shared-auth-migration.ts:read-file": 1, + "src/main/codex-accounts/runtime-home-service.ts:json-parse": 2, + "src/main/codex-accounts/runtime-home-service.ts:json-stringify": 4, + "src/main/codex-accounts/runtime-home-service.ts:read-file": 20, + "src/main/codex-accounts/service.ts:json-parse": 3, + "src/main/codex-accounts/service.ts:json-stringify": 4, + "src/main/codex-accounts/service.ts:read-file": 7, + "src/main/codex-usage/scanner.ts:json-parse": 1, + "src/main/codex-usage/store.ts:json-parse": 1, + "src/main/codex-usage/store.ts:json-stringify": 3, + "src/main/codex-usage/store.ts:read-file": 1, + "src/main/codex/codex-app-server-grant-bridge.ts:json-parse": 1, + "src/main/codex/codex-app-server-grant-bridge.ts:json-stringify": 1, + "src/main/codex/codex-app-server-grant-entry.ts:json-parse": 1, + "src/main/codex/codex-app-server-grant-entry.ts:json-stringify": 4, + "src/main/codex/codex-app-server-session.ts:json-parse": 1, + "src/main/codex/codex-app-server-session.ts:json-stringify": 1, + "src/main/codex/codex-home-paths.ts:json-parse": 1, + "src/main/codex/codex-home-paths.ts:json-stringify": 1, + "src/main/codex/codex-home-paths.ts:read-file": 2, + "src/main/codex/codex-hook-identity.ts:json-stringify": 1, + "src/main/codex/codex-real-home-hook-install.ts:read-file": 1, + "src/main/codex/codex-session-backfill-audit.ts:json-stringify": 1, + "src/main/codex/codex-session-backfill-marker.ts:json-parse": 1, + "src/main/codex/codex-session-backfill-marker.ts:json-stringify": 1, + "src/main/codex/codex-session-backfill-marker.ts:read-file": 1, + "src/main/codex/codex-session-bridge.ts:json-parse": 1, + "src/main/codex/codex-session-bridge.ts:read-file": 1, + "src/main/codex/codex-session-index-heal-state.ts:json-parse": 2, + "src/main/codex/codex-session-index-heal-state.ts:json-stringify": 2, + "src/main/codex/codex-session-index-heal-state.ts:read-file": 2, + "src/main/codex/codex-trust-config-rollback.ts:read-file": 2, + "src/main/codex/codex-trust-grant-ledger.ts:json-parse": 1, + "src/main/codex/codex-trust-grant-ledger.ts:json-stringify": 1, + "src/main/codex/codex-trust-grant-ledger.ts:read-file": 1, + "src/main/codex/config-settings-baseline.ts:json-stringify": 1, + "src/main/codex/config-toml-trust.ts:json-stringify": 1, + "src/main/codex/config-toml-trust.ts:read-file": 1, + "src/main/codex/hook-service.ts:json-stringify": 1, + "src/main/codex/hook-service.ts:read-file": 3, + "src/main/codex/hook-trust-promotion.ts:json-parse": 1, + "src/main/codex/hook-trust-promotion.ts:json-stringify": 1, + "src/main/codex/hook-trust-promotion.ts:read-file": 1, + "src/main/codex/wsl-codex-session-bridge.ts:json-parse": 1, + "src/main/computer/desktop-script-action.ts:json-stringify": 1, + "src/main/computer/desktop-script-provider-client.ts:json-parse": 1, + "src/main/computer/desktop-script-provider-client.ts:json-stringify": 1, + "src/main/computer/desktop-script-provider-test-harness.ts:json-parse": 1, + "src/main/computer/desktop-script-provider-test-harness.ts:json-stringify": 1, + "src/main/computer/macos-computer-use-permission-status.ts:json-parse": 1, + "src/main/computer/macos-computer-use-permission-status.ts:read-file": 1, + "src/main/computer/macos-native-provider-client.ts:json-parse": 1, + "src/main/computer/macos-native-provider-client.ts:json-stringify": 2, + "src/main/crash-reporting/crash-report-store.ts:json-parse": 1, + "src/main/crash-reporting/crash-report-store.ts:json-stringify": 1, + "src/main/crash-reporting/crash-report-store.ts:read-file": 1, + "src/main/daemon/client.ts:json-parse": 1, + "src/main/daemon/client.ts:read-file": 1, + "src/main/daemon/daemon-entry.ts:read-file": 1, + "src/main/daemon/daemon-file-log.ts:json-stringify": 1, + "src/main/daemon/daemon-health.ts:json-parse": 4, + "src/main/daemon/daemon-health.ts:read-file": 8, + "src/main/daemon/daemon-host-relocation.ts:json-parse": 1, + "src/main/daemon/daemon-host-relocation.ts:json-stringify": 1, + "src/main/daemon/daemon-host-relocation.ts:read-file": 2, + "src/main/daemon/daemon-init.ts:read-file": 1, + "src/main/daemon/daemon-init.ts:unbounded-fanout": 1, + "src/main/daemon/daemon-pty-adapter.ts:json-stringify": 1, + "src/main/daemon/daemon-spawner.ts:json-parse": 1, + "src/main/daemon/daemon-spawner.ts:json-stringify": 1, + "src/main/daemon/daemon-spawner.ts:read-file": 1, + "src/main/daemon/daemon-stream-backlog-probe.ts:json-stringify": 2, + "src/main/daemon/degraded-daemon-fallback-shutdown.ts:unbounded-fanout": 1, + "src/main/daemon/history-manager.ts:json-parse": 4, + "src/main/daemon/history-manager.ts:json-stringify": 3, + "src/main/daemon/history-manager.ts:read-file": 4, + "src/main/daemon/ndjson.ts:json-parse": 1, + "src/main/daemon/ndjson.ts:json-stringify": 1, + "src/main/daemon/terminal-history-file-reader.ts:json-parse": 2, + "src/main/daemon/terminal-host-session-shutdown.ts:unbounded-fanout": 1, + "src/main/devin/hook-config-json.ts:read-file": 1, + "src/main/devin/hook-settings.ts:json-stringify": 1, + "src/main/diagnostics/main-thread-churn-probe.ts:json-stringify": 2, + "src/main/emulator/emulator-bridge.ts:unbounded-fanout": 1, + "src/main/emulator/emulator-probe.ts:json-stringify": 2, + "src/main/emulator/serve-sim-accessibility-tree.ts:json-parse": 1, + "src/main/emulator/serve-sim-accessibility-tree.ts:response-text": 1, + "src/main/emulator/serve-sim-detached-session.ts:json-parse": 1, + "src/main/emulator/serve-sim-detached-session.ts:read-file": 1, + "src/main/emulator/serve-sim-execution.ts:json-parse": 1, + "src/main/emulator/serve-sim-execution.ts:read-file": 1, + "src/main/emulator/simctl-simulator-devices.ts:json-parse": 1, + "src/main/ghostty/index.ts:json-stringify": 2, + "src/main/ghostty/index.ts:read-file": 1, + "src/main/ghostty/theme-resolution.ts:read-file": 1, + "src/main/git/huge-folder-ignore.ts:read-file": 1, + "src/main/git/repo.ts:read-file": 3, + "src/main/git/status.ts:read-file": 2, + "src/main/git/worktree-include-file.ts:read-file": 1, + "src/main/git/worktree.ts:read-file": 2, + "src/main/gitea/client.ts:response-text": 1, + "src/main/gitea/pull-request-creation.ts:json-stringify": 1, + "src/main/github/client.ts:json-parse": 37, + "src/main/github/client.ts:read-file": 2, + "src/main/github/conflict-summary-cache.ts:json-stringify": 1, + "src/main/github/issues.ts:json-parse": 7, + "src/main/github/local-git-config-signature.ts:read-file": 3, + "src/main/github/local-git-config-signature.ts:unbounded-fanout": 1, + "src/main/github/merged-pr-commit-membership.ts:json-parse": 1, + "src/main/github/project-view.ts:json-parse": 1, + "src/main/github/project-view/internals.ts:json-parse": 2, + "src/main/github/project-view/mutations.ts:json-parse": 1, + "src/main/github/project-view/project-error-classification.ts:json-parse": 1, + "src/main/github/rate-limit.ts:json-parse": 2, + "src/main/github/work-item-details.ts:json-parse": 10, + "src/main/github/work-item-details.ts:json-stringify": 1, + "src/main/gitlab/client.ts:json-parse": 13, + "src/main/gitlab/issues.ts:json-parse": 5, + "src/main/gitlab/merge-request-creation-lookup.ts:json-parse": 2, + "src/main/gitlab/merge-request-creation-lookup.ts:json-stringify": 1, + "src/main/gitlab/merge-request-creation.ts:read-file": 2, + "src/main/gitlab/work-item-details.ts:json-parse": 8, + "src/main/hermes/hook-service.ts:json-stringify": 1, + "src/main/hermes/hook-service.ts:read-file": 4, + "src/main/hooks.ts:read-file": 4, + "src/main/ipc/ai-vault.ts:json-stringify": 1, + "src/main/ipc/app.ts:json-parse": 1, + "src/main/ipc/crash-reporting.ts:json-stringify": 2, + "src/main/ipc/developer-permissions.ts:unbounded-fanout": 1, + "src/main/ipc/ephemeral-vm-runtime-handlers.ts:json-stringify": 1, + "src/main/ipc/feedback.ts:json-stringify": 1, + "src/main/ipc/filesystem-mutations.ts:read-file": 1, + "src/main/ipc/filesystem-watcher.ts:json-stringify": 1, + "src/main/ipc/filesystem-watcher.ts:unbounded-fanout": 4, + "src/main/ipc/filesystem.ts:read-file": 4, + "src/main/ipc/filesystem.ts:unbounded-fanout": 1, + "src/main/ipc/notebook.ts:json-stringify": 2, + "src/main/ipc/notification-authorization-status.ts:json-parse": 1, + "src/main/ipc/notifications.ts:read-file": 1, + "src/main/ipc/pet.ts:json-parse": 1, + "src/main/ipc/pet.ts:read-file": 3, + "src/main/ipc/preflight.ts:unbounded-fanout": 1, + "src/main/ipc/pty-management.ts:unbounded-fanout": 2, + "src/main/ipc/pty.ts:unbounded-fanout": 1, + "src/main/ipc/remote-workspace.ts:unbounded-fanout": 1, + "src/main/ipc/repos.ts:read-file": 1, + "src/main/ipc/shell.ts:read-file": 1, + "src/main/ipc/ssh-worktree-create-root-registration.ts:unbounded-fanout": 1, + "src/main/ipc/ssh.ts:json-stringify": 1, + "src/main/ipc/ssh.ts:unbounded-fanout": 1, + "src/main/ipc/terminal-render-desync-evidence.ts:json-stringify": 1, + "src/main/ipc/watcher-removal-gate.ts:json-stringify": 1, + "src/main/ipc/workspace-cleanup-activity.ts:read-file": 1, + "src/main/ipc/workspace-ports.ts:json-stringify": 1, + "src/main/ipc/worktree-base-directory-poller.ts:unbounded-fanout": 3, + "src/main/ipc/worktree-base-directory-watch-targets.ts:read-file": 1, + "src/main/ipc/worktree-common-git-directory.ts:read-file": 1, + "src/main/ipc/worktree-git-common-polling.ts:unbounded-fanout": 3, + "src/main/ipc/worktree-head-identity-reader.ts:read-file": 1, + "src/main/ipc/worktree-remote.ts:read-file": 1, + "src/main/ipc/worktrees.ts:read-file": 8, + "src/main/jira/client.ts:json-parse": 1, + "src/main/jira/client.ts:json-stringify": 1, + "src/main/jira/client.ts:read-file": 2, + "src/main/jira/client.ts:response-text": 3, + "src/main/jira/issues.ts:json-stringify": 6, + "src/main/jira/issues.ts:unbounded-fanout": 2, + "src/main/keybindings/keybinding-file.ts:json-parse": 1, + "src/main/keybindings/keybinding-file.ts:json-stringify": 1, + "src/main/keybindings/keybinding-file.ts:read-file": 1, + "src/main/kimi/hook-service.ts:read-file": 2, + "src/main/linear/client.ts:json-parse": 2, + "src/main/linear/client.ts:json-stringify": 1, + "src/main/linear/client.ts:read-file": 3, + "src/main/linear/issue-context-client.ts:unbounded-fanout": 2, + "src/main/linear/issues.ts:unbounded-fanout": 2, + "src/main/linear/mcp-issue-list.ts:unbounded-fanout": 1, + "src/main/linear/projects.ts:unbounded-fanout": 1, + "src/main/linear/teams.ts:unbounded-fanout": 3, + "src/main/local-worktree-filesystem.ts:read-file": 1, + "src/main/minimax/minimax-cookie-store.ts:read-file": 1, + "src/main/native-chat/transcript-line-decoders-grok.ts:json-parse": 1, + "src/main/native-chat/transcript-record-blocks.ts:json-stringify": 1, + "src/main/observability/bundle.ts:json-parse": 1, + "src/main/observability/bundle.ts:json-stringify": 2, + "src/main/observability/bundle.ts:read-file": 1, + "src/main/observability/diagnostic-upload-http.ts:json-parse": 1, + "src/main/observability/diagnostic-upload-http.ts:json-stringify": 1, + "src/main/observability/local-file-sink.ts:json-stringify": 1, + "src/main/opencode-usage/scanner.ts:json-parse": 1, + "src/main/opencode-usage/scanner.ts:json-stringify": 1, + "src/main/opencode-usage/store.ts:json-parse": 1, + "src/main/opencode-usage/store.ts:json-stringify": 3, + "src/main/opencode-usage/store.ts:read-file": 1, + "src/main/opencode/hook-service.ts:json-parse": 1, + "src/main/opencode/hook-service.ts:json-stringify": 2, + "src/main/opencode/hook-service.ts:read-file": 2, + "src/main/orca-profiles/profile-cloud-client.ts:json-stringify": 1, + "src/main/orca-profiles/profile-cloud-client.ts:response-text": 1, + "src/main/orca-profiles/profile-cloud-org-members-client.ts:json-stringify": 1, + "src/main/orca-profiles/profile-cloud-org-members-client.ts:response-text": 2, + "src/main/orca-profiles/profile-cloud-session-mutation.ts:json-parse": 1, + "src/main/orca-profiles/profile-cloud-session-mutation.ts:read-file": 1, + "src/main/orca-profiles/profile-cloud-session-store.ts:json-parse": 2, + "src/main/orca-profiles/profile-cloud-session-store.ts:json-stringify": 1, + "src/main/orca-profiles/profile-cloud-session-store.ts:read-file": 1, + "src/main/orca-profiles/profile-index-store.ts:json-parse": 1, + "src/main/orca-profiles/profile-index-store.ts:json-stringify": 2, + "src/main/orca-profiles/profile-index-store.ts:read-file": 1, + "src/main/orca-profiles/profile-project-state-file.ts:json-parse": 1, + "src/main/orca-profiles/profile-project-state-file.ts:json-stringify": 1, + "src/main/orca-profiles/profile-project-state-file.ts:read-file": 1, + "src/main/persistence.ts:json-parse": 3, + "src/main/persistence.ts:json-stringify": 9, + "src/main/persistence.ts:read-file": 3, + "src/main/pi/agent-status-extension-source.ts:json-stringify": 1, + "src/main/pi/agent-status-extension-source.ts:read-file": 2, + "src/main/pi/titlebar-extension-service.ts:read-file": 1, + "src/main/ports/local-workspace-port-scanner.ts:json-parse": 1, + "src/main/ports/local-workspace-port-scanner.ts:read-file": 2, + "src/main/project-groups/nested-repo-discovery.ts:read-file": 1, + "src/main/providers/pty-process-list-admission.ts:unbounded-fanout": 2, + "src/main/providers/ssh-filesystem-provider.ts:read-file": 3, + "src/main/providers/ssh-git-provider.ts:json-stringify": 1, + "src/main/providers/types.ts:read-file": 1, + "src/main/providers/windows-foreground-process-rows.ts:json-parse": 1, + "src/main/pty/shell-startup-env.ts:read-file": 1, + "src/main/quit-teardown-deadline.ts:unbounded-fanout": 1, + "src/main/rate-limits/claude-fetcher.ts:json-parse": 1, + "src/main/rate-limits/claude-fetcher.ts:read-file": 2, + "src/main/rate-limits/claude-fetcher.ts:response-text": 1, + "src/main/rate-limits/claude-oauth-usage-error.ts:response-text": 1, + "src/main/rate-limits/codex-fetcher.ts:json-parse": 2, + "src/main/rate-limits/codex-fetcher.ts:json-stringify": 3, + "src/main/rate-limits/codex-fetcher.ts:read-file": 1, + "src/main/rate-limits/codex-fetcher.ts:response-text": 3, + "src/main/rate-limits/gemini-cli-oauth-extractor.ts:json-parse": 1, + "src/main/rate-limits/gemini-cli-oauth-extractor.ts:read-file": 2, + "src/main/rate-limits/gemini-oauth-sources.ts:json-parse": 2, + "src/main/rate-limits/gemini-oauth-sources.ts:json-stringify": 2, + "src/main/rate-limits/gemini-oauth-sources.ts:read-file": 2, + "src/main/rate-limits/gemini-oauth-sources.ts:response-text": 2, + "src/main/rate-limits/gemini-usage-fetcher.test-fixtures.ts:json-stringify": 1, + "src/main/rate-limits/gemini-usage-fetcher.ts:json-stringify": 1, + "src/main/rate-limits/gemini-usage-fetcher.ts:response-text": 1, + "src/main/rate-limits/grok-auth.ts:json-parse": 1, + "src/main/rate-limits/grok-auth.ts:read-file": 1, + "src/main/rate-limits/grok-fetcher.ts:response-text": 1, + "src/main/rate-limits/kimi-fetcher.ts:json-parse": 1, + "src/main/rate-limits/kimi-fetcher.ts:read-file": 1, + "src/main/rate-limits/kimi-fetcher.ts:response-text": 1, + "src/main/rate-limits/minimax-fetcher.ts:response-text": 1, + "src/main/rate-limits/minimax-request-context.ts:unbounded-fanout": 1, + "src/main/rate-limits/opencode-go-usage-fetcher.ts:response-text": 2, + "src/main/remote-agent-trust-presets.ts:json-parse": 1, + "src/main/remote-agent-trust-presets.ts:json-stringify": 2, + "src/main/remote-agent-trust-presets.ts:read-file": 1, + "src/main/repo-icon-autodetect.ts:json-parse": 2, + "src/main/repo-icon-autodetect.ts:read-file": 6, + "src/main/runtime/agent-session-claim-identity.ts:read-file": 2, + "src/main/runtime/claude-agent-teams-shim-env.ts:read-file": 1, + "src/main/runtime/device-registry.ts:json-parse": 1, + "src/main/runtime/device-registry.ts:read-file": 1, + "src/main/runtime/e2ee-keypair.ts:json-parse": 1, + "src/main/runtime/e2ee-keypair.ts:read-file": 1, + "src/main/runtime/orca-runtime-files.ts:json-stringify": 1, + "src/main/runtime/orca-runtime-files.ts:read-file": 4, + "src/main/runtime/orca-runtime-files.ts:unbounded-fanout": 1, + "src/main/runtime/orca-runtime.ts:json-stringify": 3, + "src/main/runtime/orca-runtime.ts:read-file": 8, + "src/main/runtime/orca-runtime.ts:unbounded-fanout": 2, + "src/main/runtime/orchestration/coordinator.ts:json-parse": 2, + "src/main/runtime/orchestration/db.ts:json-parse": 2, + "src/main/runtime/orchestration/db.ts:json-stringify": 3, + "src/main/runtime/orchestration/lifecycle-reconciliation.ts:json-parse": 1, + "src/main/runtime/orchestration/lifecycle-reconciliation.ts:json-stringify": 1, + "src/main/runtime/relay/relay-control-client.ts:json-stringify": 4, + "src/main/runtime/relay/relay-control-protocol.ts:json-parse": 1, + "src/main/runtime/relay/relay-http-client.ts:json-stringify": 2, + "src/main/runtime/relay/relay-http-client.ts:response-text": 2, + "src/main/runtime/relay/relay-revoke-outbox.ts:json-parse": 1, + "src/main/runtime/relay/relay-revoke-outbox.ts:read-file": 1, + "src/main/runtime/rpc/dispatcher.ts:json-stringify": 6, + "src/main/runtime/rpc/e2ee-channel.ts:json-stringify": 4, + "src/main/runtime/rpc/methods/orchestration-gates.ts:json-parse": 1, + "src/main/runtime/rpc/methods/orchestration.ts:json-parse": 1, + "src/main/runtime/rpc/methods/orchestration.ts:json-stringify": 1, + "src/main/runtime/rpc/relay-transport.ts:json-stringify": 1, + "src/main/runtime/rpc/ws-fallback-port-store.ts:json-parse": 1, + "src/main/runtime/rpc/ws-fallback-port-store.ts:json-stringify": 1, + "src/main/runtime/rpc/ws-fallback-port-store.ts:read-file": 1, + "src/main/runtime/runtime-metadata.ts:json-parse": 1, + "src/main/runtime/runtime-metadata.ts:read-file": 1, + "src/main/runtime/runtime-rpc.ts:json-parse": 4, + "src/main/runtime/runtime-rpc.ts:json-stringify": 11, + "src/main/runtime/runtime-rpc.ts:unbounded-fanout": 2, + "src/main/runtime/tls-certificate.ts:read-file": 4, + "src/main/runtime/windows-mobile-firewall.ts:json-parse": 2, + "src/main/runtime/worktree-teardown.ts:unbounded-fanout": 1, + "src/main/serve-update-handoff.ts:json-parse": 2, + "src/main/serve-update-handoff.ts:json-stringify": 1, + "src/main/serve-update-handoff.ts:read-file": 2, + "src/main/server/serve-readiness.ts:json-stringify": 2, + "src/main/skills/claude-plugin-skill-sources.ts:json-parse": 1, + "src/main/skills/discovery.ts:unbounded-fanout": 2, + "src/main/skills/skill-bundle-artifacts.ts:read-file": 3, + "src/main/skills/skill-freshness-inventory.ts:unbounded-fanout": 1, + "src/main/skills/skill-package-identity.ts:json-stringify": 1, + "src/main/source-control/hosted-review-api-request.ts:response-text": 2, + "src/main/source-control/pull-request-template.ts:read-file": 2, + "src/main/speech/openai-api-key-store.ts:json-parse": 1, + "src/main/speech/openai-api-key-store.ts:read-file": 2, + "src/main/speech/openai-transcription-client.ts:response-text": 1, + "src/main/speech/stt-worker.ts:json-parse": 3, + "src/main/ssh/relay-protocol.ts:json-parse": 1, + "src/main/ssh/relay-protocol.ts:json-stringify": 1, + "src/main/ssh/ssh-agent-identity-filter.ts:read-file": 1, + "src/main/ssh/ssh-auth-resolution.ts:read-file": 2, + "src/main/ssh/ssh-config-include-expander.ts:read-file": 1, + "src/main/ssh/ssh-control-socket.ts:json-stringify": 1, + "src/main/ssh/ssh-git-response-stream-reader.ts:json-parse": 1, + "src/main/ssh/ssh-port-forward.ts:unbounded-fanout": 1, + "src/main/ssh/ssh-relay-deploy.ts:json-stringify": 2, + "src/main/ssh/ssh-relay-session.ts:unbounded-fanout": 1, + "src/main/ssh/ssh-relay-versioned-install.ts:read-file": 1, + "src/main/ssh/ssh-remote-cli-format.ts:json-stringify": 1, + "src/main/ssh/ssh-remote-commands.ts:read-file": 1, + "src/main/ssh/ssh-remote-orca-cli.ts:json-stringify": 3, + "src/main/ssh/ssh-remote-orchestration-send.ts:json-stringify": 1, + "src/main/ssh/ssh-remote-platform.ts:json-stringify": 2, + "src/main/ssh/system-ssh-file-transfer.ts:json-stringify": 1, + "src/main/ssh/system-ssh-file-transfer.ts:read-file": 1, + "src/main/startup/configure-process.ts:json-parse": 1, + "src/main/startup/configure-process.ts:read-file": 1, + "src/main/startup/ensure-virtual-display.ts:read-file": 1, + "src/main/startup/gpu-fallback-marker.ts:json-parse": 1, + "src/main/startup/gpu-fallback-marker.ts:json-stringify": 1, + "src/main/startup/gpu-fallback-marker.ts:read-file": 1, + "src/main/startup/startup-diagnostics.ts:json-stringify": 1, + "src/main/startup/windows-user-data-acl.ts:json-parse": 1, + "src/main/startup/windows-user-data-acl.ts:json-stringify": 1, + "src/main/startup/windows-user-data-acl.ts:read-file": 1, + "src/main/stats/collector.ts:json-parse": 1, + "src/main/stats/collector.ts:json-stringify": 1, + "src/main/stats/collector.ts:read-file": 1, + "src/main/system-fonts.ts:json-parse": 1, + "src/main/telemetry/consent.ts:json-stringify": 1, + "src/main/terminal-history.ts:json-parse": 1, + "src/main/terminal-history.ts:json-stringify": 1, + "src/main/terminal-history.ts:read-file": 1, + "src/main/updater-changelog.ts:response-text": 1, + "src/main/updater-lifecycle-diagnostics.ts:json-stringify": 1, + "src/main/updater-nudge.ts:response-text": 1, + "src/main/updater-prerelease-feed.ts:response-text": 2, + "src/main/updater-prerelease-feed.ts:unbounded-fanout": 2, + "src/main/warp-themes/index.ts:read-file": 1, + "src/main/window/clipboard-remote-file-copy.ts:unbounded-fanout": 1, + "src/main/workspace-space-analysis.ts:unbounded-fanout": 4, + "src/main/worktree-removal-safety.ts:read-file": 1, + "src/relay/agent-exec-handler.ts:json-stringify": 1, + "src/relay/external-automations-handler.ts:json-parse": 1, + "src/relay/external-automations-handler.ts:read-file": 3, + "src/relay/external-automations-handler.ts:unbounded-fanout": 1, + "src/relay/fs-handler-file-read.ts:read-file": 2, + "src/relay/fs-handler.ts:json-stringify": 1, + "src/relay/fs-handler.ts:read-file": 2, + "src/relay/fs-handler.ts:unbounded-fanout": 1, + "src/relay/fs-stream-registry.ts:unbounded-fanout": 1, + "src/relay/git-handler-status-ops.ts:read-file": 1, + "src/relay/git-handler.ts:json-stringify": 1, + "src/relay/git-working-file-read.ts:read-file": 1, + "src/relay/plugin-overlay.ts:read-file": 1, + "src/relay/port-scan-handler.ts:read-file": 2, + "src/relay/preflight-handler.ts:unbounded-fanout": 1, + "src/relay/protocol.ts:json-parse": 2, + "src/relay/protocol.ts:json-stringify": 2, + "src/relay/pty-handler.ts:json-parse": 1, + "src/relay/pty-handler.ts:json-stringify": 1, + "src/relay/pty-handler.ts:unbounded-fanout": 1, + "src/relay/pty-shell-launch.ts:read-file": 1, + "src/relay/pty-shell-utils.ts:read-file": 1, + "src/relay/relay-handshake.ts:read-file": 1, + "src/relay/relay-watcher-removal-fence.ts:unbounded-fanout": 2, + "src/relay/windows-port-scan.ts:json-parse": 1, + "src/relay/workspace-session-handler.ts:json-parse": 1, + "src/relay/workspace-session-handler.ts:json-stringify": 1, + "src/relay/workspace-session-handler.ts:read-file": 1, + "src/relay/workspace-space-scan.ts:unbounded-fanout": 3, + "src/relay/wsl-hook-fs-bridge.ts:read-file": 1, + "src/renderer/src/App.tsx:unbounded-fanout": 1, + "src/renderer/src/components/GitHubItemDialog.tsx:json-stringify": 2, + "src/renderer/src/components/PullRequestPage.tsx:json-stringify": 2, + "src/renderer/src/components/TaskPage.tsx:json-parse": 1, + "src/renderer/src/components/TaskPage.tsx:json-stringify": 1, + "src/renderer/src/components/TaskPage.tsx:unbounded-fanout": 3, + "src/renderer/src/components/Terminal.tsx:unbounded-fanout": 1, + "src/renderer/src/components/automations/AutomationsPage.tsx:json-stringify": 1, + "src/renderer/src/components/automations/AutomationsPage.tsx:unbounded-fanout": 1, + "src/renderer/src/components/browser-pane/BrowserPane.tsx:json-parse": 3, + "src/renderer/src/components/browser-pane/BrowserPane.tsx:json-stringify": 3, + "src/renderer/src/components/diff-comments/useDiffCommentDecorator.tsx:json-stringify": 1, + "src/renderer/src/components/editor/CombinedDiffViewer.tsx:json-stringify": 2, + "src/renderer/src/components/editor/IpynbViewer.tsx:json-stringify": 2, + "src/renderer/src/components/editor/editor-autosave-controller.ts:unbounded-fanout": 3, + "src/renderer/src/components/editor/ipynb-parse.ts:json-parse": 2, + "src/renderer/src/components/editor/ipynb-parse.ts:json-stringify": 1, + "src/renderer/src/components/editor/markdown-document-list-request.ts:json-stringify": 1, + "src/renderer/src/components/editor/markdown-export-extract.ts:response-text": 2, + "src/renderer/src/components/editor/markdown-export-extract.ts:unbounded-fanout": 1, + "src/renderer/src/components/editor/raw-markdown-html.ts:json-stringify": 1, + "src/renderer/src/components/editor/rich-markdown-html-superscript-link.ts:json-parse": 1, + "src/renderer/src/components/editor/useEditorPanelContentState.ts:json-stringify": 1, + "src/renderer/src/components/editor/useLocalImageSrc.ts:read-file": 1, + "src/renderer/src/components/feature-wall/feature-wall-completion-persistence.ts:json-parse": 8, + "src/renderer/src/components/feature-wall/feature-wall-completion-persistence.ts:json-stringify": 8, + "src/renderer/src/components/floating-terminal/FloatingTerminalPanel.tsx:json-stringify": 1, + "src/renderer/src/components/floating-terminal/floating-terminal-panel-bounds.ts:json-parse": 1, + "src/renderer/src/components/floating-terminal/floating-terminal-panel-bounds.ts:json-stringify": 1, + "src/renderer/src/components/floating-terminal/floating-terminal-trigger-position.ts:json-parse": 1, + "src/renderer/src/components/floating-terminal/floating-terminal-trigger-position.ts:json-stringify": 1, + "src/renderer/src/components/github-project/column-widths.ts:json-parse": 1, + "src/renderer/src/components/github-project/column-widths.ts:json-stringify": 1, + "src/renderer/src/components/github-project/columns.ts:json-parse": 1, + "src/renderer/src/components/github-project/columns.ts:json-stringify": 1, + "src/renderer/src/components/github-project/project-visible-table-cache.ts:json-stringify": 1, + "src/renderer/src/components/landing-preflight-dismissal.ts:json-parse": 1, + "src/renderer/src/components/landing-preflight-dismissal.ts:json-stringify": 1, + "src/renderer/src/components/linear-issue-attribute-filter-dropdowns.tsx:json-stringify": 1, + "src/renderer/src/components/native-chat/native-chat-interactive-prompt.ts:json-parse": 1, + "src/renderer/src/components/native-chat/native-chat-pending-occurrence.ts:json-stringify": 1, + "src/renderer/src/components/native-chat/native-chat-session-assembler.ts:json-stringify": 1, + "src/renderer/src/components/native-chat/native-chat-session-option-enrichment.ts:json-stringify": 1, + "src/renderer/src/components/native-chat/native-chat-skill-discovery-context.ts:json-stringify": 2, + "src/renderer/src/components/new-workspace/SmartWorkspaceNameField.tsx:unbounded-fanout": 3, + "src/renderer/src/components/pet/PetOverlay.tsx:json-parse": 1, + "src/renderer/src/components/pet/PetOverlay.tsx:json-stringify": 1, + "src/renderer/src/components/pet/pet-blob-cache.ts:unbounded-fanout": 1, + "src/renderer/src/components/ports/WorkspacePortScanner.tsx:unbounded-fanout": 1, + "src/renderer/src/components/pr-comments-resolution-prompt.ts:json-stringify": 4, + "src/renderer/src/components/quick-open-file-list.ts:json-stringify": 2, + "src/renderer/src/components/right-sidebar/ChecksPanel.tsx:json-stringify": 5, + "src/renderer/src/components/right-sidebar/PortsPanel.tsx:json-stringify": 1, + "src/renderer/src/components/right-sidebar/SourceControl.tsx:unbounded-fanout": 1, + "src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialog.tsx:json-stringify": 1, + "src/renderer/src/components/right-sidebar/ai-vault-view-options-persistence.ts:json-parse": 1, + "src/renderer/src/components/right-sidebar/ai-vault-view-options-persistence.ts:json-stringify": 1, + "src/renderer/src/components/right-sidebar/checks-panel-git-status-snapshot.ts:json-stringify": 1, + "src/renderer/src/components/right-sidebar/checks-panel-polling.ts:json-stringify": 1, + "src/renderer/src/components/right-sidebar/file-explorer-operation-owner.ts:json-stringify": 1, + "src/renderer/src/components/right-sidebar/push-target-upstream-refresh-cache.ts:json-stringify": 2, + "src/renderer/src/components/right-sidebar/useFileDeletion.ts:unbounded-fanout": 2, + "src/renderer/src/components/right-sidebar/useFileExplorerTree.ts:unbounded-fanout": 1, + "src/renderer/src/components/right-sidebar/useFileExplorerWatch.ts:json-stringify": 1, + "src/renderer/src/components/right-sidebar/useGitHistoryCommitActions.ts:json-stringify": 1, + "src/renderer/src/components/right-sidebar/useSavedSourceControlAgentActionAutoStart.ts:json-stringify": 1, + "src/renderer/src/components/settings/RepositoryHostSetupsSection.tsx:json-stringify": 1, + "src/renderer/src/components/settings/RuntimeEnvironmentsPane.tsx:unbounded-fanout": 2, + "src/renderer/src/components/settings/Settings.tsx:unbounded-fanout": 1, + "src/renderer/src/components/settings/SourceControlActionRecipeRow.tsx:json-stringify": 1, + "src/renderer/src/components/settings/mcp-config-inspection.ts:read-file": 1, + "src/renderer/src/components/settings/mcp-config-inspection.ts:unbounded-fanout": 1, + "src/renderer/src/components/settings/repository-source-control-ai-global-ux.ts:json-stringify": 2, + "src/renderer/src/components/settings/repository-source-control-ai-persist-queue.ts:json-stringify": 1, + "src/renderer/src/components/settings/source-control-action-recipe-draft-state.ts:json-stringify": 1, + "src/renderer/src/components/settings/source-control-ai-action-recipe-draft.ts:json-stringify": 1, + "src/renderer/src/components/setup-guide/setup-guide-progress-readiness.ts:json-stringify": 1, + "src/renderer/src/components/sidebar/AddRepoSteps.tsx:unbounded-fanout": 1, + "src/renderer/src/components/sidebar/WorktreeContextMenu.tsx:unbounded-fanout": 2, + "src/renderer/src/components/sidebar/WorktreeList.tsx:unbounded-fanout": 2, + "src/renderer/src/components/sidebar/linear-agent-skill-runtime.ts:json-stringify": 1, + "src/renderer/src/components/sidebar/workspace-board-task-status-sync.ts:json-stringify": 1, + "src/renderer/src/components/sidebar/workspace-board-task-status-sync.ts:unbounded-fanout": 1, + "src/renderer/src/components/sidebar/workspace-status-drag-data.ts:json-parse": 1, + "src/renderer/src/components/sidebar/workspace-status-drag-data.ts:json-stringify": 1, + "src/renderer/src/components/status-bar/ResourceUsageStatusSegment.tsx:unbounded-fanout": 1, + "src/renderer/src/components/status-bar/SshStatusSegment.tsx:unbounded-fanout": 1, + "src/renderer/src/components/status-bar/StatusBar.tsx:json-stringify": 2, + "src/renderer/src/components/task-page-cache-selectors.ts:json-stringify": 2, + "src/renderer/src/components/terminal-pane/terminal-pane-recovery.ts:unbounded-fanout": 1, + "src/renderer/src/components/terminal-pane/terminal-view-attributes-publisher.ts:json-stringify": 1, + "src/renderer/src/hooks/useIpcEvents.ts:unbounded-fanout": 2, + "src/renderer/src/hooks/useIssueMetadata.ts:unbounded-fanout": 1, + "src/renderer/src/lib/agent-hibernation-coordinator.ts:unbounded-fanout": 1, + "src/renderer/src/lib/ai-vault-session-drag.ts:json-parse": 1, + "src/renderer/src/lib/ai-vault-session-drag.ts:json-stringify": 1, + "src/renderer/src/lib/app-font-family.ts:json-stringify": 1, + "src/renderer/src/lib/codex-session-restart.ts:unbounded-fanout": 2, + "src/renderer/src/lib/execute-open-editor-path-move.ts:unbounded-fanout": 1, + "src/renderer/src/lib/feature-education-telemetry.ts:json-parse": 2, + "src/renderer/src/lib/feature-education-telemetry.ts:json-stringify": 2, + "src/renderer/src/lib/react-error-boundary-reporting.ts:json-stringify": 1, + "src/renderer/src/lib/repo-slug-index.ts:unbounded-fanout": 1, + "src/renderer/src/lib/workspace-file-drag.ts:json-parse": 1, + "src/renderer/src/lib/workspace-file-drag.ts:json-stringify": 1, + "src/renderer/src/lib/workspace-port-actions.ts:json-stringify": 1, + "src/renderer/src/lib/workspace-session-host-persistence.ts:unbounded-fanout": 1, + "src/renderer/src/lib/worktree-operation-generation.ts:json-stringify": 1, + "src/renderer/src/lib/worktree-operation-route.ts:json-stringify": 2, + "src/renderer/src/lib/worktree-runtime-owner-index.ts:json-stringify": 2, + "src/renderer/src/runtime/runtime-file-client.ts:read-file": 3, + "src/renderer/src/runtime/sync-runtime-graph.ts:json-stringify": 7, + "src/renderer/src/runtime/web-session-intent-owner.ts:json-stringify": 1, + "src/renderer/src/runtime/web-session-tabs-sync.ts:unbounded-fanout": 2, + "src/renderer/src/store/slices/github.ts:unbounded-fanout": 3, + "src/renderer/src/store/slices/linear.ts:json-stringify": 1, + "src/renderer/src/store/slices/pull-request-generation.ts:json-stringify": 1, + "src/renderer/src/store/slices/remote-server-updates.ts:unbounded-fanout": 1, + "src/renderer/src/store/slices/repos.ts:json-stringify": 2, + "src/renderer/src/store/slices/repos.ts:unbounded-fanout": 5, + "src/renderer/src/store/slices/runtime-status.ts:unbounded-fanout": 1, + "src/renderer/src/store/slices/terminal-tab-retirement.ts:json-stringify": 1, + "src/renderer/src/store/slices/terminals.ts:unbounded-fanout": 1, + "src/renderer/src/store/slices/workspace-cleanup.ts:json-stringify": 3, + "src/renderer/src/store/slices/workspace-cleanup.ts:unbounded-fanout": 2, + "src/renderer/src/web/web-pairing.ts:json-parse": 1, + "src/renderer/src/web/web-preload-api.ts:json-parse": 3, + "src/renderer/src/web/web-preload-api.ts:json-stringify": 2, + "src/renderer/src/web/web-preload-api.ts:unbounded-fanout": 1, + "src/renderer/src/web/web-runtime-client.ts:json-parse": 3, + "src/renderer/src/web/web-runtime-client.ts:json-stringify": 3, + "src/renderer/src/web/web-runtime-client.ts:response-text": 1, + "src/renderer/src/web/web-runtime-environment.ts:json-parse": 1, + "src/renderer/src/web/web-runtime-environment.ts:json-stringify": 1, + "src/shared/agent-hook-listener.ts:json-parse": 1, + "src/shared/agent-hook-listener.ts:json-stringify": 16, + "src/shared/agent-question-answered-intent.ts:json-parse": 1, + "src/shared/agent-status-types.ts:json-parse": 1, + "src/shared/browser-annotation-viewport-bridge.ts:json-stringify": 6, + "src/shared/browser-screencast-protocol.ts:json-parse": 1, + "src/shared/browser-screencast-protocol.ts:json-stringify": 1, + "src/shared/claude-statusline-rate-limits.ts:json-parse": 1, + "src/shared/codex-reset-credit-attempt-ledger.ts:json-stringify": 2, + "src/shared/codex-reset-credit-scope.ts:json-stringify": 3, + "src/shared/commit-message-agent-spec.ts:json-parse": 1, + "src/shared/emulator-keyboard-frame.ts:json-stringify": 1, + "src/shared/emulator-touch-frame.ts:json-stringify": 1, + "src/shared/ephemeral-vm-recipe-lifecycle-payload.ts:json-stringify": 2, + "src/shared/ephemeral-vm-recipe-runner.ts:json-stringify": 3, + "src/shared/ephemeral-vm-recipes.ts:json-parse": 1, + "src/shared/ephemeral-vm-runtime-store.ts:json-parse": 1, + "src/shared/external-automation-jobs-file.ts:json-parse": 1, + "src/shared/fetch-response-body.ts:json-parse": 1, + "src/shared/fetch-response-body.ts:response-text": 2, + "src/shared/git-effective-upstream.ts:json-stringify": 2, + "src/shared/git-publish-target-status.ts:json-stringify": 2, + "src/shared/git-status-line-stats-cache.ts:json-stringify": 1, + "src/shared/git-uncommitted-line-stats.ts:unbounded-fanout": 1, + "src/shared/in-flight-promise-dedupe.ts:json-stringify": 1, + "src/shared/linear-issue-attribute-filter.ts:json-stringify": 1, + "src/shared/map-with-concurrency.ts:unbounded-fanout": 2, + "src/shared/mcp-config.ts:json-parse": 1, + "src/shared/mobile-relay-pairing-fixtures.ts:json-stringify": 1, + "src/shared/native-chat-ask.ts:json-parse": 1, + "src/shared/native-chat-tool-summary.ts:json-stringify": 2, + "src/shared/pairing.ts:json-parse": 1, + "src/shared/pairing.ts:json-stringify": 1, + "src/shared/pr-checks-fix-prompt.ts:json-stringify": 2, + "src/shared/pull-request-generation.ts:json-parse": 1, + "src/shared/quick-open-readdir-walk.ts:unbounded-fanout": 1, + "src/shared/remote-runtime-client.ts:json-stringify": 2, + "src/shared/remote-runtime-request-frames.ts:json-parse": 1, + "src/shared/remote-runtime-request-websocket.ts:json-stringify": 1, + "src/shared/runtime-bootstrap.ts:json-parse": 1, + "src/shared/runtime-environment-store.ts:json-parse": 1, + "src/shared/secure-file.ts:json-stringify": 1, + "src/shared/serve-update-handoff.ts:json-parse": 1, + "src/shared/setup-script-import-codex-environment.ts:json-parse": 1, + "src/shared/setup-script-import-codex-environment.ts:read-file": 1, + "src/shared/setup-script-imports.ts:json-parse": 1, + "src/shared/setup-script-imports.ts:read-file": 5, + "src/shared/setup-script-package-manager-suggestion.ts:json-parse": 1, + "src/shared/setup-script-package-manager-suggestion.ts:read-file": 2, + "src/shared/setup-script-package-manager-suggestion.ts:unbounded-fanout": 1, + "src/shared/source-control-ai.ts:json-stringify": 1, + "src/shared/source-control-commit-failure.ts:json-stringify": 5, + "src/shared/source-control-conflict-prompts.ts:json-stringify": 6, + "src/shared/source-control-push-failure.ts:json-stringify": 5, + "src/shared/terminal-stream-protocol.ts:json-parse": 1, + "src/shared/terminal-stream-protocol.ts:json-stringify": 1, + "src/shared/text-search.ts:json-parse": 1 + } } diff --git a/config/scripts/check-bounded-ingress.mjs b/config/scripts/check-bounded-ingress.mjs index 114721bf1fa..a828684042b 100644 --- a/config/scripts/check-bounded-ingress.mjs +++ b/config/scripts/check-bounded-ingress.mjs @@ -19,8 +19,9 @@ const SKIP_PATH_PARTS = new Set([ ]) const BASELINE_PATH = 'config/bounded-ingress-baseline.json' -// Each pattern names an unbounded way to pull data into memory. -const PATTERNS = [ +// Each pattern names an unbounded way to pull data into memory. Hints must name real exports — +// they are the text an agent copies when the ratchet blocks it (asserted in the test). +export const PATTERNS = [ { id: 'read-file', re: /\breadFile(?:Sync)?\s*\(/, @@ -34,21 +35,26 @@ const PATTERNS = [ { id: 'json-parse', re: /\bJSON\.parse\s*\(/, - hint: 'guard with assertJsonTextWithinStructureLimits (memory-safety/json-text-structure-limit)' + hint: 'guard with assertJsonTextStructureWithinLimits (memory-safety/json-text-structure-limit)' }, { id: 'json-stringify', re: /\bJSON\.stringify\s*\(/, - hint: 'use stringifyJsonWithinLimit (memory-safety/node-bounded-json-stringify) when the value can be large' + hint: 'use stringifyJsonWithinByteLimit (memory-safety/node-bounded-json-stringify) when the value can be large' }, { id: 'unbounded-fanout', - re: /Promise\.all\s*\(\s*[\w.]+\s*\.map\s*\(/, + // Why two lines joined: the formatter wraps `Promise.all(\n items.map(` far more often than it + // keeps it on one, so a single-line regex misses the majority of real fan-outs. + re: /Promise\.(?:all|allSettled|any)\s*\(\s*[\w.[\]]+\s*\.map\s*\(/, + joinsNextLine: true, hint: 'use mapWithConcurrency so fan-out cannot grow with input size' } ] -const ALLOW_RE = /bounded-by:/i +// Why a non-empty rationale: an escape that costs nothing gets pattern-matched into place. Anchor to +// a comment so a string literal containing the token cannot silence a real finding. +const ALLOW_RE = /(?:\/\/|\/\*|\*)[^\n]*bounded-by:\s*\S/i export function findViolations(relativePath, source) { const lines = source.split('\n') @@ -58,8 +64,19 @@ export function findViolations(relativePath, source) { if (ALLOW_RE.test(line) || (i > 0 && ALLOW_RE.test(lines[i - 1]))) { continue } + const joined = i + 1 < lines.length ? `${line} ${lines[i + 1].trim()}` : line for (const pattern of PATTERNS) { - if (pattern.re.test(line)) { + if (!pattern.joinsNextLine) { + if (pattern.re.test(line)) { + found.push({ file: relativePath, line: i + 1, id: pattern.id, hint: pattern.hint }) + } + continue + } + // Report the wrapped form once, at the line that opens it. + if ( + pattern.re.test(joined) && + !(i > 0 && pattern.re.test(`${lines[i - 1]} ${line.trim()}`)) + ) { found.push({ file: relativePath, line: i + 1, id: pattern.id, hint: pattern.hint }) } } @@ -75,6 +92,11 @@ function isSkipped(relative) { if (relative.includes('.test.') || relative.includes('.spec.') || relative.includes('.bench.')) { return true } + // Why: generated output is gitignored, so scanning it makes the baseline depend on whether the + // person regenerating it happens to have build artifacts present. + if (relative.includes('.generated.')) { + return true + } return relative.split('/').some((part) => SKIP_PATH_PARTS.has(part)) } @@ -114,21 +136,43 @@ export async function run(root, { updateBaseline = false } = {}) { violations.push(...findViolations(file.relative, source)) } - const baselineFile = path.join(root, BASELINE_PATH) - if (updateBaseline) { - const keys = [...new Set(violations.map(violationKey))].sort() - await fs.writeFile(baselineFile, `${JSON.stringify({ allowed: keys }, null, 2)}\n`) - return { added: [], baselineSize: keys.length, updated: true } + // Why counts, not just keys: a file:rule key alone lets an already-baselined file add a SECOND + // unbounded read of the same kind silently — and follow-on work mostly touches baselined files. + const counts = {} + for (const v of violations) { + const key = violationKey(v) + counts[key] = (counts[key] ?? 0) + 1 } - let allowed = new Set() + const baselineFile = path.join(root, BASELINE_PATH) + if (updateBaseline) { + const sorted = Object.fromEntries(Object.entries(counts).sort(([a], [b]) => (a < b ? -1 : 1))) + await fs.writeFile(baselineFile, `${JSON.stringify({ allowed: sorted }, null, 2)}\n`) + return { added: [], baselineSize: Object.keys(sorted).length, updated: true } + } + + let allowed = {} try { - allowed = new Set(JSON.parse(await fs.readFile(baselineFile, 'utf8')).allowed) + const parsed = JSON.parse(await fs.readFile(baselineFile, 'utf8')).allowed + // Tolerate the original array form so the baseline can be regenerated, not hand-migrated. + allowed = Array.isArray(parsed) + ? Object.fromEntries(parsed.map((k) => [k, Number.POSITIVE_INFINITY])) + : (parsed ?? {}) } catch { // No baseline yet: every occurrence is reported so the first run can seed one. } - const added = violations.filter((v) => !allowed.has(violationKey(v))) - return { added, baselineSize: allowed.size, updated: false } + + const overBudget = new Set(Object.keys(counts).filter((key) => counts[key] > (allowed[key] ?? 0))) + const seen = new Set() + const added = violations.filter((v) => { + const key = violationKey(v) + if (!overBudget.has(key) || seen.has(key)) { + return false + } + seen.add(key) + return true + }) + return { added, baselineSize: Object.keys(allowed).length, updated: false } } const invokedDirectly = process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href diff --git a/config/scripts/check-bounded-ingress.test.mjs b/config/scripts/check-bounded-ingress.test.mjs index 0f044e249b5..f848f2c042d 100644 --- a/config/scripts/check-bounded-ingress.test.mjs +++ b/config/scripts/check-bounded-ingress.test.mjs @@ -1,5 +1,7 @@ +import { readFileSync } from 'node:fs' +import path from 'node:path' import { describe, expect, it } from 'vitest' -import { findViolations, violationKey } from './check-bounded-ingress.mjs' +import { findViolations, violationKey, PATTERNS } from './check-bounded-ingress.mjs' describe('check-bounded-ingress', () => { it('flags an unbounded file read and JSON parse', () => { @@ -42,4 +44,55 @@ describe('check-bounded-ingress', () => { it('ignores lines with no ingress pattern', () => { expect(findViolations('src/main/thing.ts', 'const total = a + b')).toEqual([]) }) + + it('catches fan-out that the formatter wrapped onto the next line', () => { + const wrapped = findViolations( + 'src/main/thing.ts', + ['await Promise.all(', ' items.map((i) => load(i))', ')'].join('\n') + ) + expect(wrapped.map((v) => v.id)).toContain('unbounded-fanout') + for (const variant of ['Promise.allSettled', 'Promise.any']) { + expect( + findViolations( + 'src/main/thing.ts', + `await ${variant}(\n items.map((i) => load(i))\n)` + ).map((v) => v.id) + ).toContain('unbounded-fanout') + } + }) + + it('rejects an empty or non-comment bounded-by escape', () => { + // An escape that costs nothing gets pattern-matched into place without thought. + expect( + findViolations('src/main/thing.ts', 'const buf = await readFile(p) // bounded-by:') + ).toHaveLength(1) + expect( + findViolations('src/main/thing.ts', 'const label = "bounded-by: lol"; readFile(p)') + ).toHaveLength(1) + expect( + findViolations( + 'src/main/thing.ts', + 'const buf = await readFile(p) // bounded-by: stat-checked' + ) + ).toEqual([]) + }) + + it('every hint names a real export of the module it points at', () => { + // The hint is the text an agent copies when blocked; a stale name is an immediate import error. + const root = path.resolve(import.meta.dirname, '../..') + for (const pattern of PATTERNS) { + const match = /\b([a-zA-Z][\w]*)\s*\(memory-safety\/([\w-]+)\)/.exec(pattern.hint) + if (!match) { + continue + } + const [, fn, moduleName] = match + const source = readFileSync( + path.join(root, 'src/shared/memory-safety', `${moduleName}.ts`), + 'utf8' + ) + expect(source, `${pattern.id} hint names ${fn}`).toMatch( + new RegExp(`export (?:async )?function ${fn}\\b`) + ) + } + }) }) diff --git a/src/main/runtime/orca-runtime.ts b/src/main/runtime/orca-runtime.ts index 51c2223dffe..1f0eb503d00 100644 --- a/src/main/runtime/orca-runtime.ts +++ b/src/main/runtime/orca-runtime.ts @@ -19535,7 +19535,6 @@ export class OrcaRuntimeService { const cacheKey = `${runtimeKey}::${repoPath}::${remote}` const cached = this.canonicalFetchKeyCache.get(cacheKey) if (cached !== undefined) { - this.canonicalFetchKeyCache.set(cacheKey, cached) return cached } let resolved = cacheKey @@ -19577,7 +19576,6 @@ export class OrcaRuntimeService { return null } if (Date.now() - lastAt < FETCH_FRESHNESS_MS) { - this.fetchLastCompletedAt.set(key, lastAt) return lastAt } this.fetchLastCompletedAt.delete(key) diff --git a/src/shared/memory-safety/README.md b/src/shared/memory-safety/README.md index 0946e10f21d..f52ce42b409 100644 --- a/src/shared/memory-safety/README.md +++ b/src/shared/memory-safety/README.md @@ -23,16 +23,23 @@ can be wrong, and every ceiling is a new user-visible failure mode when it is hi If you cannot name the untrusted input and the bound it crosses, you do not need a limit. +### Never copy an accumulator on every update + +The crash that started this (#9872) was not only an unbounded `Map` — it also rebuilt itself on every +status ping (`state = { ...state, [key]: value }`). Copy-per-update turns a large collection into +repeated large allocations, so it reaches the heap ceiling far sooner than its size suggests. Mutate +in place, or use `BoundedMap`. No lint rule catches this; it is on you to notice. + ## What's here -| Module | Use it for | -| --- | --- | -| `bounded-map.ts` | A cache/map that must not grow forever. Count and/or byte ceiling with LRU eviction. | -| `node-bounded-file-reader.ts` | Reading a file whose size you do not control. Checks before allocating and while growing. | -| `node-bounded-json-stringify.ts` | Serializing to JSON when the result could be huge. | -| `bounded-secure-json-file.ts` | Reading/writing a secret-bearing JSON file within a byte ceiling. | -| `json-text-structure-limit.ts` | Guarding `JSON.parse` against depth/token amplification before it runs. | -| `utf8-byte-limits.ts` | Measuring/truncating UTF-8 without materializing the whole string. | +| Module | Use it for | +| -------------------------------- | ----------------------------------------------------------------------------------------- | +| `bounded-map.ts` | A cache/map that must not grow forever. Count and/or byte ceiling with LRU eviction. | +| `node-bounded-file-reader.ts` | Reading a file whose size you do not control. Checks before allocating and while growing. | +| `node-bounded-json-stringify.ts` | Serializing to JSON when the result could be huge. | +| `bounded-secure-json-file.ts` | Writing a secret-bearing JSON file within a byte ceiling. | +| `json-text-structure-limit.ts` | Guarding `JSON.parse` against depth/token amplification before it runs. | +| `utf8-byte-limits.ts` | Measuring/truncating UTF-8 without materializing the whole string. | Domain-specific ceilings (e.g. `git-status-limit.ts`, `terminal-scrollback-limits.ts`) live next to the code they bound, not here. This folder is only for primitives reused across domains. @@ -50,6 +57,28 @@ the code they bound, not here. This folder is only for primitives reused across 5. **Test the exact boundary and boundary+1**, through every entry point — including hydration, restore, and replay paths, not just the create path. +## The ratchet (`pnpm run check:bounded-ingress`) + +Runs in `pnpm lint`. It scans `src/` and `mobile/src/` for five unbounded-ingress patterns — +`readFile`/`readFileSync`, `response.text()/.json()/.arrayBuffer()/.blob()`, `JSON.parse`, +`JSON.stringify`, and `Promise.all|allSettled|any(x.map(...))` — and fails when a **file's count for +a rule exceeds its baseline count** in `config/bounded-ingress-baseline.json`. + +Two ways to pass when it flags you: + +1. **Use a helper** from this folder. This is the default; the failure message names the exact export. +2. **Justify it** with a `bounded-by:` comment on the line or the line above, naming what actually + bounds it — `// bounded-by: stat-checked < 1 MiB above`. An empty `bounded-by:` is rejected, and + the token only counts inside a comment. + +**Do not grow the baseline.** `--update-baseline` exists to _shrink_ it as unbounded reads are +replaced, and to re-seed after a large refactor — not to admit new ones. + +What it does **not** enforce: `createReadStream`, `readdir`, recursion depth, copy-per-update +amplification, and long-lived accumulator growth. Those are doctrine, not lint; the rules above still +apply to them. `JSON.stringify` is in the list not as ingress but because serializing a large object +transiently doubles it. + ## Before you add one Prefer fixing the actual growth. The real crash was fixed by capping one map that was already known diff --git a/src/shared/memory-safety/bounded-map.ts b/src/shared/memory-safety/bounded-map.ts index 2835c64d20d..6fb423fbabf 100644 --- a/src/shared/memory-safety/bounded-map.ts +++ b/src/shared/memory-safety/bounded-map.ts @@ -39,7 +39,7 @@ function assertCeiling(name: string, value: number | undefined): void { // Why SameValueZero: Map key equality treats NaN as equal to NaN, but === does not; a === guard // would fail to protect a just-admitted NaN key and evict it after reporting success. function isSameKey(a: K, b: K): boolean { - return a === b || (Number.isNaN(a as unknown as number) && Number.isNaN(b as unknown as number)) + return a === b || Object.is(a, b) } export class BoundedMap {