Skip to content

Commit f09fb4a

Browse files
committed
merge main
2 parents 68ba8c2 + 47f1d6e commit f09fb4a

485 files changed

Lines changed: 31121 additions & 17896 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/scripts/createInlineComment.sh

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Secure proxy script to create an inline comment on a GitHub PR.
44
set -eu
55

6-
readonly ALLOWED_RULES_FILE="${GITHUB_WORKSPACE}/.claude/allowed-rules.txt"
6+
readonly ALLOWED_RULES_FILE="${ALLOWED_RULES_FILE:-${GITHUB_WORKSPACE}/.claude/allowed-rules.txt}"
77

88
# Print error and exit.
99
die() {
@@ -47,11 +47,12 @@ readonly LINE_ARG="${3:-}"
4747
validate_rule "$BODY_ARG"
4848
echo "Comment approved: $COMMENT_STATUS_REASON"
4949

50-
readonly FOOTER=$'\n\n---\n\nPlease rate this suggestion with 👍 or 👎 to help us improve! Reactions are used to monitor reviewer efficiency.'
51-
readonly COMMENT_BODY="${BODY_ARG}${FOOTER}"
52-
5350
COMMIT_ID=$(gh api "/repos/$GITHUB_REPOSITORY/pulls/$PR_NUMBER" --jq '.head.sha')
5451
readonly COMMIT_ID
52+
readonly SHORT_SHA="${COMMIT_ID:0:7}"
53+
54+
readonly FOOTER=$'\n\n---\n\n'"Reviewed at: [${SHORT_SHA}](https://github.com/${GITHUB_REPOSITORY}/commit/${COMMIT_ID}) | Please rate this suggestion with 👍 or 👎 to help us improve! Reactions are used to monitor reviewer efficiency."
55+
readonly COMMENT_BODY="${BODY_ARG}${FOOTER}"
5556

5657
PAYLOAD=$(jq -n \
5758
--arg body "$COMMENT_BODY" \

.github/workflows/cherryPick.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ jobs:
4848
4949
- name: Verify PR is merged
5050
if: ${{ inputs.PULL_REQUEST_URL != '' }}
51+
env:
52+
GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
5153
run: |
5254
if gh pr view "${{ inputs.PULL_REQUEST_URL }}" --json mergedAt | jq --exit-status '.mergedAt'; then
5355
echo "PR is merged: ${{ inputs.PULL_REQUEST_URL }}"

.github/workflows/claude-review.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ jobs:
5757
run: |
5858
"$GITHUB_WORKSPACE/.github/scripts/extractAllowedRules.sh" \
5959
"$GITHUB_WORKSPACE/.claude/skills/coding-standards/rules" \
60-
"$GITHUB_WORKSPACE/.claude/allowed-rules.txt"
60+
"$RUNNER_TEMP/allowed-rules.txt"
6161
6262
- name: Load code review JSON schema
6363
id: schema
@@ -82,6 +82,7 @@ jobs:
8282
env:
8383
GH_TOKEN: ${{ github.token }}
8484
STRUCTURED_OUTPUT: ${{ steps.code-review.outputs.structured_output }}
85+
ALLOWED_RULES_FILE: ${{ runner.temp }}/allowed-rules.txt
8586
run: |
8687
if [ -z "$STRUCTURED_OUTPUT" ]; then
8788
echo "::error::Claude Code Action returned empty structured output"

Mobile-Expensify

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ android {
111111
minSdkVersion rootProject.ext.minSdkVersion
112112
targetSdkVersion rootProject.ext.targetSdkVersion
113113
multiDexEnabled rootProject.ext.multiDexEnabled
114-
versionCode 1009035500
115-
versionName "9.3.55-0"
114+
versionCode 1009035903
115+
versionName "9.3.59-3"
116116
// Supported language variants must be declared here to avoid from being removed during the compilation.
117117
// This also helps us to not include unnecessary language variants in the APK.
118118
resConfigs "en", "es"
Lines changed: 1 addition & 0 deletions
Loading

docs/articles/new-expensify/expensify-card/Cardholder-Settings-and-Features.md

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Using Your Expensify Card in New Expensify
33
description: Learn how to activate, use, and manage your physical and virtual Expensify Card, including Smart Limits, notifications, and troubleshooting.
4-
keywords: [New Expensify, Expensify Card, Smart Limit, activate card, virtual card, card notifications, card declined, eReceipts]
4+
keywords: [New Expensify, Expensify Card, Smart Limit, activate card, virtual card, card notifications, card declined, eReceipts, freeze card, unfreeze card]
55
---
66

77
Once you receive your Expensify Visa® Commercial Card, you can activate it and start using it immediately. When you use your Expensify Card, expenses are automatically created, and SmartScanned receipts are matched to the corresponding transactions. For most purchases, excluding lodging, Expensify also generates IRS-compliant eReceipts. If your organization doesn't require itemized receipts, you can rely on eReceipts to meet documentation requirements.
@@ -96,6 +96,30 @@ For more details on adding a card to Apple or Android Pay, see this [guide](http
9696

9797
---
9898

99+
# How to freeze or unfreeze your Expensify Card
100+
101+
Need to temporarily pause spending? You can freeze your Expensify Card at any time - without canceling or reissuing it.
102+
103+
Freezing your card:
104+
- Immediately blocks new purchases on the card
105+
- Keeps your card number, CVV, and expiration date intact
106+
- Can be reversed at any time
107+
108+
## To freeze or unfreeze your card
109+
110+
1. From the navigation tabs (on the left on web, and at the bottom on mobile), go to **Account > Wallet > Expensify Card**.
111+
2. Click your Expensify Card to view its details.
112+
3. Click **Freeze card** or **Unfreeze card**, depending on the card's current state.
113+
4. Click **Confirm** in the dialog that appears.
114+
115+
Once frozen:
116+
- You'll see a **Frozen** badge and a scarf graphic over your card
117+
- All new transactions will be declined until you unfreeze it
118+
119+
**Note:** If your workspace admin froze the card, you'll need to contact them directly via Expensify Chat to request that they unfreeze it.
120+
121+
---
122+
99123
# FAQ
100124

101125
## What if I haven’t received my Expensify Card?

docs/articles/new-expensify/expensify-card/Set-Up-and-Manage-the-Expensify-Card.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,31 @@ If a card reaches its expiration date, it automatically deactivates and declines
9797

9898
---
9999

100+
# How to freeze or unfreeze an Expensify Card
101+
102+
As a Workspace Admin, you can freeze or unfreeze any card in your workspace without needing to cancel or reissue it.
103+
104+
Freezing a card is helpful if:
105+
- You suspect misuse or a policy violation
106+
- You want to temporarily pause employee spending
107+
- You're enforcing a department-wide budget freeze
108+
109+
To freeze or unfreeze a card:
110+
111+
1. Go to **Settings > Workspaces > [Workspace Name] > Expensify Card**.
112+
2. Click a card from the list to open its details pane.
113+
3. Click **Freeze card** or **Unfreeze card**.
114+
4. Confirm the action in the popup modal.
115+
116+
Once frozen:
117+
- The card immediately stops working for purchases
118+
- You'll see a note below the card indicating who froze the card and when
119+
- The employee sees the same message and cannot unfreeze the card themselves
120+
121+
All freeze/unfreeze actions are automatically posted to the workspace chat.
122+
123+
---
124+
100125
# FAQ
101126

102127
## What kind of bank account is required?

docs/articles/new-expensify/reports-and-expenses/Using-search-operators.md

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
---
2-
title: "How to use search operators in Expensify"
3-
description: "Learn how to use advanced search filters, comparisons, and groupings to find exactly what you need across expenses, chats, reports, and more."
4-
keywords: "search operators, filters, search rules, expense search, report search, chat filters, advanced search, group-by, search syntax"
2+
title: How to use search operators in Expensify
3+
description: Learn how to use advanced search filters, comparisons, and groupings to find exactly what you need across expenses, chats, reports, and more.
4+
keywords: [New Expensify, search operators, filters, search rules, expense search, report search, chat filters, advanced search, group-by, view, chart, search syntax]
5+
internalScope: Audience is all Expensify users. Covers search operator syntax for filtering, grouping, and chart views. Does not cover saved search management or Search page UI navigation.
56
---
67

7-
<div id="new-expensify" markdown="1">
8-
98
The search operator framework lets you quickly filter, sort, and group items like expenses, chats, reports, and tasks using powerful text-based rules. This guide walks you through the supported syntax, available filters, and usage tips.
109

1110
---
@@ -101,12 +100,12 @@ type:task assignee:"Charlie Brown" status:outstanding
101100

102101
---
103102

104-
# Available filters for grouping and currency conversion
103+
## How to use grouping, chart views, and currency conversion filters
105104

106-
Use `group-by:` to analyze data by dimension, and `group-currency:` to normalize totals.
105+
Use `group-by:` to analyze data by dimension, `view:` to choose how grouped results are displayed, and `group-currency:` to normalize totals.
107106

108107
```
109-
group-by:merchant group-currency:USD
108+
group-by:category view:bar group-currency:USD
110109
```
111110

112111
Supported groupings include:
@@ -123,6 +122,19 @@ Supported groupings include:
123122
- `group-by:quarter` - Group by fiscal quarter
124123
- `group-by:year` - Group by calendar year
125124

125+
## How to choose a chart view for grouped results
126+
127+
When using `group-by:`, you can add `view:` to control the visualization type. If you save a grouped search with a specific `view:`, that choice is preserved in the saved search label.
128+
129+
Supported views:
130+
131+
- `view:table` - Display grouped results as a table (default)
132+
- `view:bar` - Display grouped results as a bar chart
133+
- `view:pie` - Display grouped results as a pie chart
134+
- `view:line` - Display grouped results as a line chart
135+
136+
> **Note:** The `view:` operator only applies when `group-by:` is also used. Without `group-by:`, the `view:` value is ignored.
137+
126138
---
127139

128140
# FAQ
@@ -139,4 +151,3 @@ If the search operator isn’t recognized, the system will ignore it and return
139151

140152
Only use quotes for values that include spaces or exact phrases, like `description:"client lunch"` or `in:"#general"`.
141153

142-
</div>

0 commit comments

Comments
 (0)