[GH-ISSUE #7358] [Bug]: Scheduled Transaction won't save if dollar sign in Schedule Name #52185

Open
opened 2026-04-30 20:23:47 -05:00 by GiteaMirror · 1 comment
Owner

Originally created by @oysterville on GitHub (Apr 2, 2026).
Original GitHub issue: https://github.com/actualbudget/actual/issues/7358

What happened?

I was trying to create a scheduled transaction today with a dollar sign in the name, and the red "Something went wrong" error message came up. I've cleared cache and repaired database with same result. Posting same scheduled transaction without dollar sign works.

This occurs if schedule is repeating or not.

How can we reproduce the issue?

  1. Go to Schedule
  2. Put dollar sign in Schedule Name (additional characters irrelevant)
  3. Enter transaction settings
  4. Click Save

Where are you hosting Actual?

Docker

What browsers are you seeing the problem on?

Firefox

Operating System

Linux

Originally created by @oysterville on GitHub (Apr 2, 2026). Original GitHub issue: https://github.com/actualbudget/actual/issues/7358 ### What happened? I was trying to create a scheduled transaction today with a dollar sign in the name, and the red "Something went wrong" error message came up. I've cleared cache and repaired database with same result. Posting same scheduled transaction without dollar sign works. This occurs if schedule is repeating or not. ### How can we reproduce the issue? 1. Go to Schedule 2. Put dollar sign in Schedule Name (additional characters irrelevant) 3. Enter transaction settings 4. Click Save ### Where are you hosting Actual? Docker ### What browsers are you seeing the problem on? Firefox ### Operating System Linux
GiteaMirror added the schedulesbuguser interface labels 2026-04-30 20:23:48 -05:00
Author
Owner

@alecbakholdin commented on GitHub (Apr 26, 2026):

TL;DR: you can still use $, you just can't start your schedule name with it.

Some more details in case someone wants to tackle this in the future: The full error message is Invalid field reference: $\n\nExpression stack:\n $\n {"name":{"$eq":"$"}}\n filter({"name":"$"}). This comes from the aql/compiler.ts file. When creating a schedule we create a filter name = '<schedule_name>' where we substitute the user input. There are two cases where this behaves weirdly.

  1. If it starts with a '$', the compiler attempts to treat it as an implicit field.
  2. If it starts with a ':', the compiler attempts to treat it as a named parameter.
    if (expr[0] === '$') {
      const fieldRef = expr === '$' ? state.implicitField : expr.slice(1);

      if (fieldRef == null || fieldRef === '') {
        console.error('we are erroring right now')
        throw new CompileError('Invalid field reference: ' + expr);
      }

      return transformField(state, fieldRef);
    }

    // Named parameter
    if (expr[0] === ':') {
      const param = { value: '?', type: 'param', paramName: expr.slice(1) };
      state.namedParameters.push(param);
      return param;
    }
  }

I don't know much about the nitty gritty AQL stuff so don't really have much insight beyond this (first time hearing about implicit fields or named parameters), but the fully qualified steps to recreate involves starting your schedule name with '$' or ':', so $test doesn't work but test$ does.

<!-- gh-comment-id:4323316089 --> @alecbakholdin commented on GitHub (Apr 26, 2026): TL;DR: you can still use $, you just can't *start* your schedule name with it. Some more details in case someone wants to tackle this in the future: The full error message is `Invalid field reference: $\n\nExpression stack:\n $\n {"name":{"$eq":"$"}}\n filter({"name":"$"})`. This comes from the aql/compiler.ts file. When creating a schedule we create a filter `name = '<schedule_name>'` where we substitute the user input. There are two cases where this behaves weirdly. 1. If it starts with a '$', the compiler attempts to treat it as an implicit field. 2. If it starts with a ':', the compiler attempts to treat it as a named parameter. ``` if (expr[0] === '$') { const fieldRef = expr === '$' ? state.implicitField : expr.slice(1); if (fieldRef == null || fieldRef === '') { console.error('we are erroring right now') throw new CompileError('Invalid field reference: ' + expr); } return transformField(state, fieldRef); } // Named parameter if (expr[0] === ':') { const param = { value: '?', type: 'param', paramName: expr.slice(1) }; state.namedParameters.push(param); return param; } } ``` I don't know much about the nitty gritty AQL stuff so don't really have much insight beyond this (first time hearing about implicit fields or named parameters), but the fully qualified steps to recreate involves *starting* your schedule name with '$' or ':', so `$test` doesn't work but `test$` does.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#52185