Welcome to New Expensify: a complete re-imagination of financial collaboration, centered around chat. Help us build the next generation of Expensify by sharing feedback and contributing to the code.
This report presents the forensic synthetic code analysis of Expensify/App, a TypeScript project with 4,940 GitHub stars. SynthScan v2.0 examined 1,699,825 lines of code across 9485 source files, recording 5211 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 3.3 places this repository in the Likely human-written band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 5211 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | metro.config.js | 16 | function patchMetroForExpoPackedSourceMaps() { | CODE |
| LOW | __mocks__/react-native-safe-area-context.tsx | 35 | function WithSafeAreaInsetsWithRef(props: WithSafeAreaInsetsProps & {ref: ForwardedRef<unknown>}) { | CODE |
| LOW | __mocks__/react-native-onyx.ts | 11 | function addDelayToConnectCallback(delay: number) { | CODE |
| LOW | contributingGuides/NAVIGATION.md | 1420 | function useCustomRootStackNavigatorState({state}: CustomStateHookProps) { | CODE |
| LOW | contributingGuides/NAVIGATION.md | 1455 | function useCustomSplitNavigatorState({state}: CustomStateHookProps) { | CODE |
| LOW | contributingGuides/STYLE.md | 1146 | function WithCurrentUserPersonalDetails(props: Omit<TProps, keyof HOCProps>) { | CODE |
| LOW | config/rsbuild/ModuleInitTimingPlugin.ts | 13 | function createTimingRuntimeModule(): InstanceType<typeof rspack.RuntimeModule> { | CODE |
| LOW | config/rsbuild/rsbuild.common.ts | 98 | function mapEnvironmentToLogoSuffix(environmentFile: string): string { | CODE |
| LOW | …-local-rules/require-live-region-for-status-updates.js | 43 | function getConstRoleValueFromExpression(expression) { | CODE |
| LOW | …-local-rules/require-live-region-for-status-updates.js | 70 | function getResolvedRolesFromExpression(expression) { | CODE |
| LOW | …cal-rules/no-direct-pre-insert-fullscreen-under-rhp.js | 30 | function isStaticPreInsertProperty(property, computed) { | CODE |
| LOW⚡ | …cal-rules/no-direct-pre-insert-fullscreen-under-rhp.js | 65 | function isNavigationPreInsertMemberExpression(node, scope, navigationImportBindings) { | CODE |
| LOW⚡ | …cal-rules/no-direct-pre-insert-fullscreen-under-rhp.js | 74 | function isPreInsertFullscreenUnderRHPCall(node, scope, navigationImportBindings) { | CODE |
| LOW⚡ | …cal-rules/no-direct-pre-insert-fullscreen-under-rhp.js | 78 | function getPreInsertAliasFromObjectPatternProperty(property) { | CODE |
| LOW | tests/ui/ReportActionComposeTest.tsx | 68 | function ReportActionEditMessageContextProviderForReport({children}: PropsWithChildren) { | CODE |
| LOW | …sts/ui/IOURequestStepDistanceOdometerSflResumeTest.tsx | 112 | function createOdometerTransaction(withImage: boolean): Transaction { | CODE |
| LOW | …sts/ui/IOURequestStepDistanceOdometerSflResumeTest.tsx | 129 | function createDistanceCreateRoute(): PlatformStackScreenProps<MoneyRequestNavigatorParamList, typeof SCREENS.MONEY_REQU | CODE |
| LOW | tests/ui/ReportActionMessageEditLayoutTest.tsx | 146 | function ReportActionEditMessageContextProviderForReport({children}: PropsWithChildren) { | CODE |
| LOW⚡ | tests/ui/ReportActionMessageEditLayoutTest.tsx | 184 | async function setReportActionDraftWithMessage(message: string) { | CODE |
| LOW⚡ | tests/ui/ReportActionMessageEditLayoutTest.tsx | 194 | async function clearReportActionDraftsForReport() { | CODE |
| LOW⚡ | tests/ui/ReportActionMessageEditLayoutTest.tsx | 200 | function renderNarrowMessageCompose() { | CODE |
| LOW | tests/ui/IOURequestStepHoursTest.tsx | 65 | function createPolicyWithTimeTracking(): Policy { | CODE |
| LOW | tests/ui/WorkEmailOnboarding.tsx | 128 | function MergeIntoAccountAndLoginBlockMerge() { | CODE |
| LOW | tests/ui/WorkEmailOnboarding.tsx | 153 | function MergeIntoAccountAndLoginSuccessful() { | CODE |
| LOW | tests/ui/WorkEmailOnboarding.tsx | 176 | function MergeIntoAccountAndLoginRedirectToClassic() { | CODE |
| LOW | tests/ui/WorkEmailOnboarding.tsx | 200 | function AddWorkEmailShouldValidateFailure() { | CODE |
| LOW | tests/ui/WorkEmailOnboarding.tsx | 223 | function AddWorkEmailShouldValidate() { | CODE |
| LOW | tests/ui/WorkEmailOnboarding.tsx | 261 | function AddWorkEmailWithSingleSignOnError() { | CODE |
| LOW | tests/ui/InitialSettingsPageTest.tsx | 76 | function MockAccountSwitcherSkeletonView() { | CODE |
| LOW | tests/ui/SwitchToExpensifyClassicTest.tsx | 35 | function navigateToExpensifyClassicFlow() { | CODE |
| LOW | tests/ui/SwitchToExpensifyClassicTest.tsx | 44 | function signInAppAndEnterTestFlow(dismissedValue?: boolean): Promise<void> { | CODE |
| LOW | tests/ui/LocationPermissionModalTest.tsx | 99 | function renderLocationPermissionModal(props: ReturnType<typeof createDefaultProps>) { | CODE |
| LOW | tests/ui/LocationPermissionModalTest.tsx | 110 | function renderAndroidLocationPermissionModal(props: ReturnType<typeof createDefaultProps>) { | CODE |
| LOW | tests/ui/TimeExpenseConfirmationTest.tsx | 136 | function createPolicyWithTimeTracking(): Policy { | CODE |
| LOW | tests/ui/AuthScreensInitHandlerTest.tsx | 122 | function renderAuthScreensInitHandler() { | CODE |
| LOW | tests/ui/ChatActionableButtonsTest.tsx | 23 | function createConciergeCategoryOptionsAction(options: string[]): ReportAction { | CODE |
| LOW | tests/ui/ChatActionableButtonsTest.tsx | 40 | function renderChatActionableButtons(action: ReportAction, originalReportID: string | undefined, reportID: string | unde | CODE |
| LOW | tests/ui/RecentlyAddedSectionTest.tsx | 175 | function renderRecentlyAddedSection() { | CODE |
| LOW | tests/ui/ParentNavigationSubtitleTest.tsx | 53 | function getMockRootStateWithReportsSplitStack(parentReportID: string, expenseReportID: string) { | CODE |
| LOW | tests/ui/MoneyRequestReportPreview.test.tsx | 101 | default: function MockReportPreviewActionButton() { | CODE |
| LOW | tests/ui/ReportActionItemMessageEditTest.tsx | 82 | function ReportActionEditMessageContextProviderForReport({children}: PropsWithChildren) { | CODE |
| LOW | tests/ui/SearchPageTest.tsx | 89 | function TestSearchFullscreenNavigator() { | CODE |
| LOW | tests/ui/IOURequestStepDistanceOdometerNextSyncTest.tsx | 144 | function createOdometerDraftTransaction(): Transaction { | CODE |
| LOW | tests/ui/IOURequestStepDistanceOdometerNextSyncTest.tsx | 166 | function createDistanceCreateRoute(): PlatformStackScreenProps<MoneyRequestNavigatorParamList, typeof SCREENS.MONEY_REQU | CODE |
| LOW | tests/ui/IOURequestStepDistanceTest.tsx | 206 | function createDistanceTransaction(overrides?: Partial<Transaction>): Transaction { | CODE |
| LOW | tests/ui/ReportActionAvatarsTest.tsx | 290 | async function retrieveDataFromAvatarView(props: Parameters<typeof ReportActionAvatars>[0]) { | CODE |
| LOW | tests/ui/ReportActionAvatarsTest.tsx | 312 | function isSubscriptAvatarRendered({ | CODE |
| LOW | tests/ui/IOURequestStepDistanceOdometerBackupTest.tsx | 181 | function createOdometerTransaction(): Transaction { | CODE |
| LOW | tests/ui/IOURequestStepDistanceOdometerBackupTest.tsx | 203 | function renderEditFromConfirmationOdometer() { | CODE |
| LOW | tests/ui/IOURequestStepDistanceOdometerBackupTest.tsx | 464 | function createDistanceCreateRoute(): PlatformStackScreenProps<MoneyRequestNavigatorParamList, typeof SCREENS.MONEY_ | CODE |
| LOW | tests/ui/IOURequestStepDistanceOdometerBackupTest.tsx | 481 | function createEmptyOdometerTransaction(): Transaction { | CODE |
| LOW | tests/ui/AgentRulesSectionTest.tsx | 314 | function setRuleBotPersonalDetails() { | CODE |
| LOW | tests/ui/UnreadIndicatorsTest.tsx | 62 | function scrollUpToRevealNewMessagesBadge() { | CODE |
| LOW | tests/ui/UnreadIndicatorsTest.tsx | 83 | function isNewMessagesBadgeVisible(): boolean { | CODE |
| LOW | tests/ui/UnreadIndicatorsTest.tsx | 101 | async function navigateToSidebarOptionWithoutAct(index: number): Promise<void> { | CODE |
| LOW | tests/ui/UnreadIndicatorsTest.tsx | 186 | async function signInAndGetAppWithUnreadChat(): Promise<void> { | CODE |
| LOW | tests/ui/components/SettlementButtonTest.tsx | 186 | function createPersonalBankAccount(accountNumber = '5678'): BankAccountList { | CODE |
| LOW | …s/ui/components/IOURequestStepConfirmationPageTest.tsx | 171 | function createPolicyWithTaxAndDistance(): Policy { | CODE |
| LOW | …sts/ui/components/OnboardingHelpDropdownButtonTest.tsx | 58 | function renderOnboardingHelpDropdownButton(props: { | CODE |
| LOW | tests/ui/components/MoneyRequestReceiptViewTest.tsx | 47 | function MockReceiptAlternativeMethods() { | CODE |
| 4156 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | contributingGuides/HOW_TO_CREATE_A_PLAN.md | 11 | ## Step 1: Define the problem | COMMENT |
| LOW | contributingGuides/HOW_TO_CREATE_A_PLAN.md | 27 | ## Step 2: Workshop the solutions | COMMENT |
| LOW | contributingGuides/HOW_TO_CREATE_A_PLAN.md | 39 | ## Step 3: Write out each problem and solution (P/S statement) | COMMENT |
| LOW | contributingGuides/HOW_TO_CREATE_A_PLAN.md | 42 | ## Step 4: Propose it | COMMENT |
| LOW⚡ | tests/unit/FraudProtectionTest.ts | 80 | // Step 1: BeginSignIn returns account data (no session yet) | COMMENT |
| LOW⚡ | tests/unit/FraudProtectionTest.ts | 86 | // Step 2: Magic code verified, session is created | COMMENT |
| LOW⚡ | tests/unit/SubscriptionVisibilityTest.ts | 112 | // Step 1: User has a paid workspace — subscriptionPlan is TEAM | COMMENT |
| LOW⚡ | tests/unit/SubscriptionVisibilityTest.ts | 122 | // Step 2: User deletes the workspace — subscriptionPlan becomes null | COMMENT |
| LOW⚡ | tests/unit/SubscriptionVisibilityTest.ts | 129 | // Step 3: amountOwed > 0 keeps subscription visible | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2163 | // Step 1: Split into 2 (creates child transactions via creation path) | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2241 | // Step 2: Revert to 1 split expense, moving it to a different report | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2392 | // Step 1: Split into 2 child transactions | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2470 | // Step 2: Find the split's transaction thread and add a comment to it | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2512 | // Step 3: Revert to 1 split (triggers isReverseSplitOperation) | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2568 | // Step 4: Verify the original transaction is restored with correct data | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2583 | // Step 5: Verify the new IOU action for the restored original transaction | COMMENT |
| LOW⚡ | tests/actions/IOUTest/SplitTest.ts | 2613 | // Step 6: Verify the new transaction thread report exists | COMMENT |
| LOW⚡ | tests/actions/IOUTest/SplitTest.ts | 2618 | // Step 7: Verify the comment was migrated to the new thread | COMMENT |
| LOW | tests/actions/IOUTest/SplitSelfDMTest.ts | 468 | // Step 1: Create the splits | COMMENT |
| LOW⚡ | tests/actions/IOUTest/SplitSelfDMTest.ts | 519 | // Step 2: Re-fetch allTransactions (now contains the created children) | COMMENT |
| LOW⚡ | tests/actions/IOUTest/SplitSelfDMTest.ts | 528 | // Step 3: Edit the splits (change amounts) | COMMENT |
| LOW | .claude/agents/deploy-blocker-investigator.md | 47 | ### Step 1: Read the issue | COMMENT |
| LOW | .claude/agents/deploy-blocker-investigator.md | 60 | ### Step 2: Check StagingDeployCash | COMMENT |
| LOW | .claude/agents/deploy-blocker-investigator.md | 69 | ### Step 3: Find the causing PR | COMMENT |
| LOW | .claude/agents/deploy-blocker-investigator.md | 81 | ### Step 4: Verify the causing PR | COMMENT |
| LOW⚡ | .claude/agents/deploy-blocker-investigator.md | 104 | ### Step 5: Determine fix location | COMMENT |
| LOW⚡ | .claude/agents/deploy-blocker-investigator.md | 111 | ### Step 6: Apply the decision tree | COMMENT |
| LOW⚡ | .claude/agents/deploy-blocker-investigator.md | 115 | ### Step 7: Post comment and update labels | COMMENT |
| LOW | .claude/agents/deploy-blocker-investigator.md | 130 | ### Step 8: Assign contributors | COMMENT |
| LOW | .claude/commands/review-helpdot-pr.md | 12 | ## Step 1: Inline Review | COMMENT |
| LOW | .claude/commands/review-helpdot-pr.md | 18 | ## Step 2: Summary Review | COMMENT |
| LOW | docs/Hidden/Global-Reimbursement-Singapore.md | 28 | # Step 1: Connect Your Singaporean Bank Account | COMMENT |
| LOW | docs/Hidden/Global-Reimbursement-Singapore.md | 39 | # Step 2: Complete the DocuSign Form and Upload Documents | COMMENT |
| LOW | docs/Hidden/Global-Reimbursement-Singapore.md | 51 | # Step 3: Confirm Test Payment | COMMENT |
| LOW | docs/Hidden/Global-Reimbursement-Singapore.md | 57 | # Step 4: Start Reimbursing Internationally | COMMENT |
| LOW | …expensify-card/Set-Up-and-Manage-the-Expensify-Card.md | 27 | # Step 1: Enable the Expensify Card | COMMENT |
| LOW | …expensify-card/Set-Up-and-Manage-the-Expensify-Card.md | 38 | # Step 2: Select a Bank Account | COMMENT |
| LOW | …expensify-card/Set-Up-and-Manage-the-Expensify-Card.md | 52 | # Step 3: Issue Expensify Cards | COMMENT |
| LOW | …rticles/new-expensify/connections/Uber-for-Business.md | 13 | ## Step 1: Enable Receipt Partners in your Workspace | COMMENT |
| LOW | …rticles/new-expensify/connections/Uber-for-Business.md | 20 | ## Step 2: Connect Uber for Business | COMMENT |
| LOW⚡ | docs/articles/new-expensify/connections/Greenhouse.md | 24 | ## Step 1: Establish the Connection | COMMENT |
| LOW⚡ | docs/articles/new-expensify/connections/Greenhouse.md | 31 | ## Step 2: Create the WebHook | COMMENT |
| LOW⚡ | docs/articles/new-expensify/connections/Greenhouse.md | 38 | ## Step 3: Create the Custom Candidate Field | COMMENT |
| LOW | …ons/quickbooks-desktop/Configure-QuickBooks-Desktop.md | 13 | # Step 1: Initial Connection | COMMENT |
| LOW | …ons/quickbooks-desktop/Configure-QuickBooks-Desktop.md | 23 | # Step 2: Configure Import Settings | COMMENT |
| LOW | …ons/quickbooks-desktop/Configure-QuickBooks-Desktop.md | 53 | # Step 3: Configure Export Settings | COMMENT |
| LOW | …ons/quickbooks-desktop/Configure-QuickBooks-Desktop.md | 102 | # Step 4: Configure Advanced Settings | COMMENT |
| LOW | …ons/quickbooks-desktop/Configure-QuickBooks-Desktop.md | 122 | # Step 5: Export Process | COMMENT |
| LOW | …sktop/Troubleshooting/Sync-Errors/DESK66-Sync-Error.md | 91 | ### Step 1: Remove Web Connector | COMMENT |
| LOW | …sktop/Troubleshooting/Sync-Errors/DESK66-Sync-Error.md | 100 | ### Step 2: Disconnect QuickBooks Desktop in the Workspace | COMMENT |
| LOW | …sktop/Troubleshooting/Sync-Errors/DESK66-Sync-Error.md | 111 | ### Step 3: Reboot and Reinstall Web Connector | COMMENT |
| LOW | …Troubleshooting/Connection-errors/DESK66-Sync-Error.md | 91 | ### Step 1: Remove Web Connector | COMMENT |
| LOW | …Troubleshooting/Connection-errors/DESK66-Sync-Error.md | 100 | ### Step 2: Disconnect QuickBooks Desktop in the Workspace | COMMENT |
| LOW | …Troubleshooting/Connection-errors/DESK66-Sync-Error.md | 111 | ### Step 3: Reboot and Reinstall Web Connector | COMMENT |
| LOW | …icles/new-expensify/connections/xero/Configure-Xero.md | 28 | # Step 1: Set Up Import Settings | COMMENT |
| LOW | …icles/new-expensify/connections/xero/Configure-Xero.md | 43 | # Step 2: Set Up Export Settings | COMMENT |
| LOW | …icles/new-expensify/connections/xero/Configure-Xero.md | 63 | # Step 3: Configure Advanced Settings | COMMENT |
| LOW | …expensify/connections/xero/Troubleshooting/Xero-FAQ.md | 78 | ### Step 1: Disconnect in Xero | COMMENT |
| LOW | …expensify/connections/xero/Troubleshooting/Xero-FAQ.md | 90 | ### Step 2: Reconnect in Expensify | COMMENT |
| LOW | …fy/connections/sage-intacct/Connect-to-Sage-Intacct.md | 85 | # Step 2: Enable and configure the Time & Expenses module | COMMENT |
| 221 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | __mocks__/reportData/personalDetails.ts | 56 | displayName: 'Jane Doe', | CODE |
| LOW | tests/ui/LeaveWorkspaceFlowTest.tsx | 39 | const USER_EMAIL = 'user@example.com'; | CODE |
| LOW | tests/ui/ReportAttachments.tsx | 62 | const TEST_USER_LOGIN = 'test@test.com'; | CODE |
| LOW | tests/ui/ProfilePageTest.tsx | 106 | const email = 'user@example.com'; | CODE |
| LOW | tests/ui/ProfilePageTest.tsx | 144 | const defaultEmail = 'user@example.com'; | CODE |
| LOW | tests/ui/ProfilePageTest.tsx | 538 | const customDisplayName = 'John Doe'; | CODE |
| LOW | tests/ui/ReportActionComposeTest.tsx | 293 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: currentUserAccountID, email: 'test@test.com'}); | CODE |
| LOW | tests/ui/ReportActionComposeTest.tsx | 300 | owner: 'test@test.com', | CODE |
| LOW | tests/ui/ClearReportActionErrorsUITest.tsx | 32 | const ACTOR_EMAIL = 'test@test.com'; | CODE |
| LOW | tests/ui/WorkspaceInviteMessageApproverPageTest.tsx | 59 | const adminEmail = 'admin@example.com'; | CODE |
| LOW | tests/ui/WorkspaceInviteMessageApproverPageTest.tsx | 61 | const userEmail = 'user@example.com'; | CODE |
| LOW | tests/ui/BottomTabBarTest.tsx | 159 | email: 'foo@bar.com', | CODE |
| LOW | tests/ui/BottomTabBarTest.tsx | 182 | partnerUserID: 'foo@bar.com', | CODE |
| LOW | tests/ui/BottomTabBarTest.tsx | 207 | partnerUserID: 'foo@bar.com', | CODE |
| LOW | tests/ui/ReportActionsListTest.tsx | 209 | login: 'test@test.com', | CODE |
| LOW | tests/ui/AgentsPromoBannersTest.tsx | 23 | const USER_EMAIL = 'admin@example.com'; | CODE |
| LOW⚡ | tests/ui/AuthScreensInitHandlerTest.tsx | 153 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: TEST_ACCOUNT_ID, email: 'test@test.com'}); | CODE |
| LOW⚡ | tests/ui/AuthScreensInitHandlerTest.tsx | 160 | expect(subscribeToUserEvents).toHaveBeenCalledWith(TEST_ACCOUNT_ID, 'test@test.com', expect.any(Function), expec | CODE |
| LOW⚡ | tests/ui/AuthScreensInitHandlerTest.tsx | 166 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: TEST_ACCOUNT_ID, email: 'test@test.com'}); | CODE |
| LOW⚡ | tests/ui/AuthScreensInitHandlerTest.tsx | 174 | expect(subscribeToUserEvents).toHaveBeenCalledWith(TEST_ACCOUNT_ID, 'test@test.com', expect.any(Function), expec | CODE |
| LOW⚡ | tests/ui/AuthScreensInitHandlerTest.tsx | 180 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: TEST_ACCOUNT_ID, email: 'test@test.com'}); | CODE |
| LOW | tests/ui/AuthScreensInitHandlerTest.tsx | 194 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: TEST_ACCOUNT_ID, email: 'test@test.com'}); | CODE |
| LOW | tests/ui/AuthScreensInitHandlerTest.tsx | 211 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: TEST_ACCOUNT_ID, email: 'test@test.com'}); | CODE |
| LOW | tests/ui/AuthScreensInitHandlerTest.tsx | 223 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: TEST_ACCOUNT_ID, email: 'test@test.com'}); | CODE |
| LOW | tests/ui/AuthScreensInitHandlerTest.tsx | 236 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: TEST_ACCOUNT_ID, email: 'test@test.com'}); | CODE |
| LOW | tests/ui/ChatActionableButtonsTest.tsx | 63 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: CURRENT_USER_ACCOUNT_ID, email: 'test@test.com'}); | CODE |
| LOW | tests/ui/ChatActionableButtonsTest.tsx | 67 | login: 'test@test.com', | CODE |
| LOW | tests/ui/IOURequestStepDistanceTest.tsx | 216 | waypoint0: {address: '123 Main St', lat: 40.7128, lng: -74.006, keyForList: 'start_waypoint'}, | CODE |
| LOW | tests/ui/SessionTest.tsx | 31 | const TEST_USER_LOGIN_1 = 'test@test.com'; | CODE |
| LOW | tests/ui/MoneyRequestViewTest.tsx | 92 | const currentUserEmail = 'test@test.com'; | CODE |
| LOW | tests/ui/ReportActionItemTest.tsx | 88 | const actorEmail = 'test@test.com'; | CODE |
| LOW | tests/ui/ReportActionItemTest.tsx | 365 | const action = createReportAction(CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ASSIGN_COMPANY_CARD, {email: ' | CODE |
| LOW | tests/ui/ReportActionItemTest.tsx | 374 | const action = createReportAction(CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UNASSIGN_COMPANY_CARD, {email: | CODE |
| LOW | tests/ui/ReportActionItemTest.tsx | 1335 | policyName: 'Acme Corp', | CODE |
| LOW | tests/ui/ReportActionItemTest.tsx | 1477 | email: 'user@example.com', | CODE |
| LOW | tests/ui/ReportActionItemTest.tsx | 2302 | originalMessage: {newValue: 'Acme Corp', oldValue: 'Old Corp'}, | CODE |
| LOW | tests/ui/WalletExpensifyCardPageTest.tsx | 154 | delegate: 'test@test.com', | CODE |
| LOW | tests/ui/FlightTripDetailsTest.tsx | 48 | name: 'John Doe', | CODE |
| LOW | tests/ui/ReportListItemHeaderTest.tsx | 73 | displayName: 'John Doe', | CODE |
| LOW⚡ | tests/ui/ReportListItemHeaderTest.tsx | 167 | expect(screen.getByText('John Doe')).toBeOnTheScreen(); | CODE |
| LOW⚡ | tests/ui/ReportListItemHeaderTest.tsx | 177 | expect(screen.queryByText('John Doe')).not.toBeOnTheScreen(); | CODE |
| LOW⚡ | tests/ui/ReportListItemHeaderTest.tsx | 186 | expect(screen.getAllByText('John Doe')).toHaveLength(1); | CODE |
| LOW | tests/ui/ReportListItemHeaderTest.tsx | 203 | expect(screen.getByText('John Doe')).toBeOnTheScreen(); | CODE |
| LOW⚡ | tests/ui/ReportListItemHeaderTest.tsx | 214 | expect(screen.getByText('John Doe')).toBeOnTheScreen(); | CODE |
| LOW⚡ | tests/ui/ReportListItemHeaderTest.tsx | 224 | expect(screen.getByText('John Doe')).toBeOnTheScreen(); | CODE |
| LOW⚡ | tests/ui/ReportListItemHeaderTest.tsx | 233 | expect(screen.getAllByText('John Doe')).toHaveLength(1); | CODE |
| LOW | tests/ui/ReportListItemHeaderTest.tsx | 249 | expect(screen.getByText('John Doe')).toBeOnTheScreen(); | CODE |
| LOW | tests/ui/LHNItemsPresence.tsx | 95 | const TEST_USER_LOGIN = 'test@test.com'; | CODE |
| LOW | tests/ui/WorkspaceMembersTest.tsx | 58 | Admin: 'admin@example.com', | CODE |
| LOW | tests/ui/WorkspaceMembersTest.tsx | 60 | Member: 'user@example.com', | CODE |
| LOW | tests/ui/WorkspaceMembersTest.tsx | 72 | const adminEmail = 'admin@example.com'; | CODE |
| LOW | tests/ui/WorkspaceMembersTest.tsx | 76 | const userEmail = 'user@example.com'; | CODE |
| LOW | tests/ui/components/ProductTrainingContextProvider.tsx | 43 | const TEST_USER_LOGIN = 'test@test.com'; | CODE |
| LOW | tests/unit/ReconnectTest.ts | 50 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: 1234, email: 'test@test.com'}); | CODE |
| LOW | tests/unit/ReconnectTest.ts | 101 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: 1234, email: 'test@test.com'}); | CODE |
| LOW | tests/unit/ReconnectTest.ts | 118 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: 1234, email: 'test@test.com'}); | CODE |
| LOW | tests/unit/ReconnectTest.ts | 136 | await Onyx.merge(ONYXKEYS.SESSION, {accountID: 1234, email: 'test@test.com'}); | CODE |
| LOW | tests/unit/UnreadIndicatorUpdaterTest.ts | 7 | const TEST_USER_LOGIN = 'test@test.com'; | CODE |
| LOW | tests/unit/useCreateReportTest.tsx | 87 | owner: 'test@test.com', | CODE |
| LOW | tests/unit/FlaggedExpensesTest.ts | 12 | const CURRENT_USER_EMAIL = 'user@example.com'; | CODE |
| 298 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/ui/components/ComposedButton.tsx | 66 | // ── Rendering ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ComposedButton.tsx | 112 | // ── ButtonContext ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ComposedButton.tsx | 177 | // ── Press handling ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ComposedButton.tsx | 260 | // ── Disabled-state styles ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ComposedButton.tsx | 289 | // ── Variant styles ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ComposedButton.tsx | 318 | // ── Size styles ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ComposedButton.tsx | 350 | // ── removeBorderRadius ────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ComposedButton.tsx | 384 | // ── Hover styles ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ComposedButton.tsx | 417 | // ── Accessibility ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ComposedButton.tsx | 482 | // ── Event handlers ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ComposedButton.tsx | 512 | // ── Haptic feedback ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ComposedButton.tsx | 551 | // ── Layout and composition ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ButtonKeyboardShortcut.tsx | 10 | // ── Keyboard-shortcut wiring ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ButtonKeyboardShortcut.tsx | 30 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ButtonKeyboardShortcut.tsx | 64 | // ── Registration ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ButtonKeyboardShortcut.tsx | 76 | // ── onPress invocation ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ButtonKeyboardShortcut.tsx | 116 | // ── Shortcut config ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/ui/components/ButtonKeyboardShortcut.tsx | 151 | // ── Rendering ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/useCreateReportTest.tsx | 15 | // ── Mocks ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/useCreateReportTest.tsx | 76 | // ── Helpers ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/useCreateReportTest.tsx | 108 | // ── Tests ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit/LHNAvatarPipelineTest.ts | 240 | // ── Case 1: 1:1 DM ───────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit/LHNAvatarPipelineTest.ts | 250 | // ── Case 2: Group Chat ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit/LHNAvatarPipelineTest.ts | 260 | // ── Case 3: Policy Expense Chat (not own) ─────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 29 | // ─── Test Constants ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 63 | // ─── Pipeline Helper ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 138 | // ─── Tests ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 289 | // ── Case 5: Expense Request ───────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 306 | // ── Case 6: Expense Report ────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 320 | // ── Case 7: IOU (multi-sender) ───────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 330 | // ── Case 8: IOU (single sender, request) ─────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 341 | // ── Case 9: IOU (single sender, send money) ──────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 352 | // ── Case 10: Workspace Thread ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 367 | // ── Case 11: Expense Request Thread (with policy) ─────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 406 | // ── Case 13: Trip Room ────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 421 | // ── Case 14: Invoice Room ─────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 435 | // ── Case 15: Invoice Report (non-B2B) ─────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 465 | // ── Case 16: Archived Expense Report ──────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 479 | // ── Case 17: Archived Non-Expense Chat ────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 489 | // ── Case 18: With delegate ────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 508 | // ── Case 19: Policy Expense Chat + Task (no parent PEC in Onyx) ───── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 539 | // ── Case 12c: Personal task (parent is DM) → SINGLE ────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 568 | // ── Case 21: Delegate skipped for task without chatReportID ────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 580 | // ── Case 22: Delegate applied for task WITH chatReportID ───────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 594 | // ── Case 23: Delegate skipped for invoice report ───────────────── | COMMENT |
| MEDIUM | tests/unit/LHNAvatarPipelineTest.ts | 607 | // ── Case 24: Delegate applied for chat reports ────────────────── | COMMENT |
| MEDIUM | tests/unit/hooks/useOdometerReceiptStitcherTest.tsx | 15 | // ─── Mocks ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/hooks/useOdometerReceiptStitcherTest.tsx | 92 | // ─── Test helpers ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/hooks/useOdometerReceiptStitcherTest.tsx | 133 | // ─── Tests ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/select-device.sh | 4 | # ============================================ | COMMENT |
| MEDIUM | scripts/select-device.sh | 11 | # ---------------------- | COMMENT |
| MEDIUM⚡ | scripts/setup-newdot-web-emulators.sh | 4 | # ============================================================= | COMMENT |
| MEDIUM⚡ | scripts/setup-newdot-web-emulators.sh | 12 | # ----------- | COMMENT |
| MEDIUM⚡ | scripts/setup-newdot-web-emulators.sh | 20 | # ---------------------- | COMMENT |
| MEDIUM⚡ | scripts/setup-mapbox-sdk-walkthrough.sh | 4 | # ================================== | COMMENT |
| MEDIUM⚡ | scripts/setup-mapbox-sdk-walkthrough.sh | 14 | # ----------- | COMMENT |
| MEDIUM⚡ | scripts/setup-mapbox-sdk.sh | 4 | # =================================================== | COMMENT |
| MEDIUM⚡ | scripts/setup-mapbox-sdk.sh | 13 | # ----------- | COMMENT |
| MEDIUM⚡ | scripts/setup-mapbox-sdk.sh | 19 | # ---------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/setup-mapbox-sdk.sh | 24 | # ------------------------------------------------------- | COMMENT |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | patches/react-navigation/details.md | 1 | # `@react-navigation` patches | COMMENT |
| LOW | tests/ui/IOURequestStepDistanceOdometerBackupTest.tsx | 261 | COMMENT | |
| LOW | tests/unit/generateTranslationsTest.ts | 2181 | // 2: (empty line) | COMMENT |
| LOW | tests/unit/usePersonalDetailSearchSelectorTest.tsx | 381 | expect(result.current.selectedNonExistingOptions.at(0)?.login).toBe('another@gmail.com'); | COMMENT |
| LOW | tests/unit/CardFeedErrorsDerivedValueTest.ts | 321 | expect(result.cardFeedErrors[cardFeed.feedNameWithDomainID]?.hasFeedErrors).toBe(true); | COMMENT |
| LOW | tests/unit/CardFeedErrorsDerivedValueTest.ts | 341 | // workspaceError: 'Workspace connection issue', | COMMENT |
| LOW | tests/unit/OnyxUpdateManagerTest.ts | 261 | // Even though there are multiple gaps in the deferred updates, we only want to fetch missing updates once p | COMMENT |
| LOW | tests/unit/OnyxUpdateManagerTest.ts | 301 | // - once for the first fetched missing update (2) | COMMENT |
| LOW | tests/unit/OnyxUpdateManagerTest.ts | 341 | // OnyxUpdates.apply should have been called 2 times, | COMMENT |
| LOW | ios/RCTShareActionHandlerModule.h | 1 | // | COMMENT |
| LOW | ios/NewExpensify-Bridging-Header.h | 1 | // | COMMENT |
| LOW | ios/BridgingFile.swift | 1 | // | COMMENT |
| LOW | ios/SentryNativeSDKManager.m | 1 | // | COMMENT |
| LOW | ios/CertificatePinning.swift | 1 | // | COMMENT |
| LOW | ios/NewExpensify/OriginImageRequestHandler.mm | 1 | // | COMMENT |
| LOW | ios/NewExpensify/RCTBootSplash.mm | 1 | #import "RCTBootSplash.h" | COMMENT |
| LOW | ios/NewExpensify/OriginImageRequestHandler.h | 1 | // | COMMENT |
| LOW | scripts/android-repackage-app-bundle-and-sign.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/stubReactNative.js | 1 | // Comprehensive React Native module interceptor for Bun script preload. | COMMENT |
| LOW | scripts/select-device.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/knip-changed.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/validateMobileExpensifySubmodule.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/setup-newdot-web-emulators.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/setup-newdot-web-emulators.sh | 21 | # This script streamlines the process of adding the certificates to both android and | COMMENT |
| LOW | scripts/lint.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/setup-mapbox-sdk-walkthrough.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/generateCertificatePins.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/setup-mapbox-sdk.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/setup-mapbox-sdk.sh | 21 | # This file is used in Unix-like systems to store credentials for remote machine access. | COMMENT |
| LOW | .github/workflows/deploy.yml | 121 | // push trigger: all pushed commits are in the payload | COMMENT |
| LOW | .github/scripts/enforceVideoFormats.sh | 1 | #!/bin/bash | COMMENT |
| LOW | .github/scripts/enforceVideoFormats.sh | 21 | # Non-capturing groups are part of the matching pattern, but not returned in matches. | COMMENT |
| LOW | .github/scripts/enforceVideoFormats.sh | 41 | while IFS= read -r MATCH; do | COMMENT |
| LOW | .github/scripts/inject-ci-data.sh | 1 | #!/bin/bash | COMMENT |
| LOW | .github/scripts/verifyRedirect.sh | 1 | #!/bin/bash | COMMENT |
| LOW | .github/actions/javascript/awaitStagingDeploys/index.js | 1541 | // modification, are permitted provided that the following conditions | COMMENT |
| LOW | .github/actions/javascript/verifySignedCommits/index.js | 1581 | // | COMMENT |
| LOW | .github/actions/javascript/waitForPreviousRuns/index.js | 1541 | // modification, are permitted provided that the following conditions | COMMENT |
| LOW | .github/actions/javascript/waitForPreviousRuns/index.js | 8201 | // HTTP-network fetch step 12.1.1.3 | COMMENT |
| LOW | …s/javascript/getPullRequestIncrementalChanges/index.js | 1581 | // | COMMENT |
| LOW | .github/actions/javascript/reviewerChecklist/index.js | 1581 | // | COMMENT |
| LOW | .github/actions/javascript/getPreviousVersion/index.js | 1541 | // modification, are permitted provided that the following conditions | COMMENT |
| LOW | .github/actions/javascript/getPreviousVersion/index.js | 8201 | // HTTP-network fetch step 12.1.1.3 | COMMENT |
| LOW | .github/actions/javascript/failureNotifier/index.js | 1581 | // | COMMENT |
| LOW | …hub/actions/javascript/reopenIssueWithComment/index.js | 1541 | // modification, are permitted provided that the following conditions | COMMENT |
| LOW | …hub/actions/javascript/reopenIssueWithComment/index.js | 8201 | // HTTP-network fetch step 12.1.1.3 | COMMENT |
| LOW | …thub/actions/javascript/getPullRequestDetails/index.js | 1541 | // modification, are permitted provided that the following conditions | COMMENT |
| LOW | …thub/actions/javascript/getPullRequestDetails/index.js | 8201 | // HTTP-network fetch step 12.1.1.3 | COMMENT |
| LOW | .github/actions/javascript/checkDeployBlockers/index.js | 1541 | // modification, are permitted provided that the following conditions | COMMENT |
| LOW | .github/actions/javascript/checkDeployBlockers/index.js | 8201 | // HTTP-network fetch step 12.1.1.3 | COMMENT |
| LOW | …ithub/actions/javascript/formatCodeCovComment/index.js | 1581 | // | COMMENT |
| LOW | …b/actions/javascript/getDeployPullRequestList/index.js | 1581 | // | COMMENT |
| LOW | …actions/javascript/generateHelpPreviewComment/index.js | 1581 | // | COMMENT |
| LOW | …actions/javascript/markPullRequestsAsDeployed/index.js | 1581 | // | COMMENT |
| LOW | .github/actions/javascript/getArtifactInfo/index.js | 1541 | // modification, are permitted provided that the following conditions | COMMENT |
| LOW | .github/actions/javascript/getArtifactInfo/index.js | 8201 | // HTTP-network fetch step 12.1.1.3 | COMMENT |
| LOW | …ithub/actions/javascript/postOrReplaceComment/index.js | 1581 | // | COMMENT |
| LOW | …ub/actions/javascript/isAuthorizedContributor/index.js | 1581 | // | COMMENT |
| LOW | modules/group-ib-fp/ios/ModuleFhpIos-Bridging-Header.h | 1 | #import <React/RCTBridgeModule.h> | COMMENT |
| LOW | …ulator/GIBMobileSdk.framework/Headers/GIBLogsHandler.h | 1 | // | COMMENT |
| 133 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/FraudProtectionTest.ts | 80 | // Step 1: BeginSignIn returns account data (no session yet) | COMMENT |
| LOW⚡ | tests/unit/FraudProtectionTest.ts | 86 | // Step 2: Magic code verified, session is created | COMMENT |
| LOW⚡ | tests/unit/SubscriptionVisibilityTest.ts | 112 | // Step 1: User has a paid workspace — subscriptionPlan is TEAM | COMMENT |
| LOW⚡ | tests/unit/SubscriptionVisibilityTest.ts | 122 | // Step 2: User deletes the workspace — subscriptionPlan becomes null | COMMENT |
| LOW⚡ | tests/unit/SubscriptionVisibilityTest.ts | 129 | // Step 3: amountOwed > 0 keeps subscription visible | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2163 | // Step 1: Split into 2 (creates child transactions via creation path) | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2241 | // Step 2: Revert to 1 split expense, moving it to a different report | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2392 | // Step 1: Split into 2 child transactions | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2470 | // Step 2: Find the split's transaction thread and add a comment to it | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2512 | // Step 3: Revert to 1 split (triggers isReverseSplitOperation) | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2568 | // Step 4: Verify the original transaction is restored with correct data | COMMENT |
| LOW | tests/actions/IOUTest/SplitTest.ts | 2583 | // Step 5: Verify the new IOU action for the restored original transaction | COMMENT |
| LOW⚡ | tests/actions/IOUTest/SplitTest.ts | 2613 | // Step 6: Verify the new transaction thread report exists | COMMENT |
| LOW⚡ | tests/actions/IOUTest/SplitTest.ts | 2618 | // Step 7: Verify the comment was migrated to the new thread | COMMENT |
| LOW | tests/actions/IOUTest/SplitSelfDMTest.ts | 468 | // Step 1: Create the splits | COMMENT |
| LOW⚡ | tests/actions/IOUTest/SplitSelfDMTest.ts | 519 | // Step 2: Re-fetch allTransactions (now contains the created children) | COMMENT |
| LOW⚡ | tests/actions/IOUTest/SplitSelfDMTest.ts | 528 | // Step 3: Edit the splits (change amounts) | COMMENT |
| LOW | src/libs/SearchUIUtils.ts | 4976 | // Date presets come with the equals operator, so we need to check if the value is a date preset | COMMENT |
| LOW | src/libs/ValidationUtils.ts | 331 | // so we need to check if it is a valid phone. | COMMENT |
| LOW | src/libs/ValidationUtils.ts | 354 | // so we need to check if it is a valid phone. | COMMENT |
| LOW⚡ | src/libs/SidebarUtils.ts | 729 | // Step 1: Categorize reports | COMMENT |
| LOW⚡ | src/libs/SidebarUtils.ts | 732 | // Step 2: Sort each category | COMMENT |
| LOW⚡ | src/libs/SidebarUtils.ts | 735 | // Step 3: Combine and extract IDs | COMMENT |
| LOW⚡ | src/libs/CategoryOptionListUtils.ts | 133 | // Step 1: Combine selected and enabled categories for searching | COMMENT |
| LOW⚡ | src/libs/CategoryOptionListUtils.ts | 136 | // Step 2: Get search results using tokenizedSearch | COMMENT |
| LOW⚡ | src/libs/CategoryOptionListUtils.ts | 143 | // Step 3: Deduplicate by name (keep first occurrence, which is likely the selected one if present) | COMMENT |
| LOW⚡ | src/libs/CategoryOptionListUtils.ts | 153 | // Step 4: Re-sort to restore hierarchical grouping | COMMENT |
| LOW⚡ | src/libs/CategoryOptionListUtils.ts | 161 | // Step 5: Re-apply the isSelected flag (lost during sortCategories) | COMMENT |
| LOW⚡ | src/libs/CategoryOptionListUtils.ts | 167 | // Step 6: Generate the option tree and push the section | COMMENT |
| LOW⚡ | src/libs/PolicyUtils.ts | 1457 | * This gets a "corrected" value for autoReportingFrequency. The purpose of this function is to encapsulate some logic a | COMMENT |
| LOW⚡ | src/libs/OptionsListUtils/index.ts | 1594 | // Step 1: Pre-filter reports to avoid processing thousands | COMMENT |
| LOW⚡ | src/libs/OptionsListUtils/index.ts | 1600 | // Step 2: Sort by lastVisibleActionCreated (most recent first) and limit to top N | COMMENT |
| LOW⚡ | src/libs/OptionsListUtils/index.ts | 1604 | // Step 3: If search term is present, build report map with ONLY 1:1 DM reports | COMMENT |
| LOW | src/libs/OptionsListUtils/index.ts | 1630 | // Step 4: Process the limited set of reports (performance optimization) | COMMENT |
| LOW | src/libs/OptionsListUtils/index.ts | 1667 | // Step 5: Process personal details (all of them - needed for search functionality) | COMMENT |
| LOW | src/libs/Navigation/helpers/useIsSidebarRouteActive.ts | 29 | // To check if the sidebar is active on a narrow layout, we need to check if the focused route is the sidebar route | COMMENT |
| LOW | src/libs/actions/OnyxUpdateManager/utils/index.ts | 24 | * we need to check if there are any gaps between deferred updates. | COMMENT |
| LOW | src/libs/actions/OnyxUpdateManager/utils/index.ts | 63 | // For any other updates, we need to check if the previousUpdateID of the current update is found in the deferre | COMMENT |
| LOW⚡ | src/libs/actions/IOU/UpdateMoneyRequest.ts | 1480 | // Step 1: Get the transaction being updated | COMMENT |
| LOW⚡ | src/libs/actions/IOU/UpdateMoneyRequest.ts | 1490 | // Step 2: Set any "pending fields" (ones updated while the user was offline) to have error messages in the failureD | COMMENT |
| LOW⚡ | src/libs/actions/IOU/UpdateMoneyRequest.ts | 2130 | // Step 1: Set any "pending fields" (ones updated while the user was offline) to have error messages in the failureD | COMMENT |
| LOW⚡ | src/libs/actions/IOU/UpdateMoneyRequest.ts | 2135 | // Step 2: Get all the collections being updated | COMMENT |
| LOW | src/libs/actions/IOU/UpdateMoneyRequest.ts | 1613 | // Step 3: Build the modified expense report actions | COMMENT |
| LOW | src/libs/actions/IOU/UpdateMoneyRequest.ts | 1688 | // Step 4: Compute the IOU total and update the report preview message (and report header) so LHN amount owed is cor | COMMENT |
| LOW | src/libs/actions/IOU/UpdateMoneyRequest.ts | 2214 | // Step 3: Build the modified expense report actions | COMMENT |
| LOW | src/libs/actions/IOU/UpdateMoneyRequest.ts | 2254 | // Step 4: Update the report preview message (and report header) so LHN amount tracked is correct. | COMMENT |
| LOW | src/libs/actions/Policy/CopyPolicySettings.ts | 378 | // Step 3: collection keys (categories / tags) — SET-level overwrite with snapshot rollback | COMMENT |
| LOW | src/libs/actions/Policy/CopyPolicySettings.ts | 428 | // Step 4: drive currentStep on the COPY_POLICY_SETTINGS key itself. | COMMENT |
| LOW | …/MoneyRequestConfirmationList/sections/ReportField.tsx | 77 | * We need to check if the transaction report exists first in order to prevent the outstanding reports from being us | COMMENT |
| LOW | …/MoneyRequestConfirmationList/sections/ReportField.tsx | 78 | * Also we need to check if transaction report exists in outstanding reports in order to show a correct report name. | COMMENT |
| LOW⚡ | …components/Search/hooks/useOptimisticSearchTracking.ts | 110 | // Step 1: resolve watch key if not yet available. | COMMENT |
| LOW⚡ | …components/Search/hooks/useOptimisticSearchTracking.ts | 119 | // Step 2: if the watched transaction is a split parent, swap to child. | COMMENT |
| LOW | src/hooks/useOriginalReportID.ts | 68 | // In that case, we need to check if the reportActionID belongs to the transaction thread. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/_plugins/cache_bust_filter.rb | 15 | # Check if the asset type is supported | COMMENT |
| LOW | scripts/import-cloudflare-certs-into-jdk.sh | 105 | # Check if certificate already exists | COMMENT |
| LOW | scripts/lintChanged.sh | 18 | # Check if output is empty or malformed | COMMENT |
| LOW⚡ | scripts/shellUtils.sh | 3 | # Check if GREEN has already been defined | COMMENT |
| LOW⚡ | scripts/shellUtils.sh | 8 | # Check if RED has already been defined | COMMENT |
| LOW⚡ | scripts/shellUtils.sh | 13 | # Check if BLUE has already been defined | COMMENT |
| LOW⚡ | scripts/shellUtils.sh | 18 | # Check if TITLE has already been defined | COMMENT |
| LOW⚡ | scripts/shellUtils.sh | 23 | # Check if RESET has already been defined | COMMENT |
| LOW⚡ | scripts/setup-mapbox-sdk.sh | 70 | # Check if the token was provided | COMMENT |
| LOW⚡ | scripts/setup-mapbox-sdk.sh | 120 | # Check if gradle.properties exists. If not, create one. | COMMENT |
| LOW⚡ | scripts/setup-mapbox-sdk.sh | 125 | # Check if MAPBOX_DOWNLOADS_TOKEN already exists in the file | COMMENT |
| LOW | scripts/is-hybrid-app.sh | 5 | # Check if jq is installed | COMMENT |
| LOW | scripts/is-hybrid-app.sh | 18 | # Check if 'package.json' exists | COMMENT |
| LOW | scripts/is-hybrid-app.sh | 23 | # Check if the 'name' field is 'mobile-expensify' | COMMENT |
| LOW | scripts/run-build.sh | 65 | # Check if the argument is one of the desired values | COMMENT |
| LOW | scripts/run-build.sh | 77 | # Check if this is an Expensify developer with WARP (only they need cert import) | COMMENT |
| LOW⚡ | scripts/pod-install.sh | 28 | # Check if bundle is installed | COMMENT |
| LOW⚡ | scripts/pod-install.sh | 34 | # Check if jq is installed | COMMENT |
| LOW⚡ | scripts/pod-install.sh | 40 | # Check if yq is installed | COMMENT |
| LOW | .github/workflows/deploy.yml | 920 | # Check if the release already exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | scripts/utils/OpenAIUtils.ts | 115 | this.client.beta.threads.runs.create(thread.id, { | CODE |
| CRITICAL | scripts/utils/OpenAIUtils.ts | 127 | run = await this.client.beta.threads.runs.retrieve(run.id, {thread_id: thread.id}); | CODE |
| CRITICAL | scripts/utils/OpenAIUtils.ts | 136 | for await (const message of this.client.beta.threads.messages.list(thread.id)) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/types/onyx/OriginalMessage.ts | 1025 | /** Whether the updated description was generated by AI */ | COMMENT |
| HIGH | src/libs/ModifiedExpenseMessage.ts | 347 | // Add attribution suffix based on AI-generated descriptions | COMMENT |
| HIGH | src/libs/ModifiedExpenseMessage.ts | 547 | // know the change was AI-generated, fall back to an AI-attributed generic summary so | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/_plugins/cache_bust_filter.rb | 12 | # Define a list of supported asset types | COMMENT |
| MEDIUM⚡ | scripts/setup-mapbox-sdk.sh | 21 | # This file is used in Unix-like systems to store credentials for remote machine access. | COMMENT |
| MEDIUM | scripts/setup-mapbox-sdk.sh | 45 | # This function provides a user-friendly error message when the script encounters an error. | COMMENT |
| MEDIUM | .github/workflows/finishReleaseCycle.yml | 100 | # Create a new patch version to prep for next release cycle | COMMENT |
| MEDIUM | .github/scripts/createDocsRoutes.ts | 54 | const disclaimer = '# This file is auto-generated. Do not edit it directly. Use npm run createDocsRoutes instead.\n'; | CODE |
| MEDIUM | .github/scripts/printPodspec.rb | 3 | # This file is a lightweight port of the `pod ipc spec` command. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …routerExtensions/addRootHistoryRouterExtension.test.ts | 513 | // which was incomplete and caused leak-or-misfire. Key-based pairing is robust to non-RHP | COMMENT |
| MEDIUM⚡ | scripts/setup-mapbox-sdk-walkthrough.sh | 8 | # This script assists users in setting up the necessary credentials to utilize | COMMENT |
| MEDIUM | src/components/MapView/MapViewImpl.web.tsx | 32 | // we utilize a different Mapbox library @rnmapbox/maps tailored for mobile development. | COMMENT |
| MEDIUM | src/components/MapView/Direction.web.tsx | 8 | // we utilize a different Mapbox library @rnmapbox/maps tailored for mobile development. | COMMENT |
| MEDIUM | src/pages/inbox/report/ReportActionItem.tsx | 486 | // The long term solution will leverage end-to-end encryption and only targeted users will be able to decrypt. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/libs/actions/IOU/MoneyRequestBuilder.ts | 1516 | // I want to clean this up at some point, but it's possible this will live in the code for a while so I've created h | COMMENT |
| HIGH | src/libs/actions/IOU/TrackExpense.ts | 1115 | // I want to clean this up at some point, but it's possible this will live in the code for a while so I've created h | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/setup-newdot-web-emulators.sh | 24 | # Usage: | COMMENT |
| LOW⚡ | scripts/setup-mapbox-sdk-walkthrough.sh | 19 | # Usage: | COMMENT |
| LOW | scripts/generateCertificatePins.sh | 15 | # Usage: | COMMENT |
| LOW | scripts/shellUtils.sh | 133 | # Usage: | COMMENT |
| LOW⚡ | scripts/setup-mapbox-sdk.sh | 34 | # Usage: | COMMENT |
| LOW | src/libs/mapChildrenFlat.ts | 11 | * // Usage example: | COMMENT |