Regex pipeline not working in agent, what am I missing?

So I’ve got some unstructured logs I am trying to ingest, I developed a regex that works properly if I use it as an operation in the grafana UI. But I am having difficulty transitioning that to my agent config file.
My config looks like this-

server:
  log_level: info

logs:
  global:
    clients:
      - url: <URL>
        basic_auth:
          username: agent
          password: <PASSWORD>
        tls_config:
          insecure_skip_verify: true

  configs:
    - name: app_push
      positions: 
        filename: /tmp/loki-positions.yaml
      scrape_configs:
        - job_name: battery_logs
          pipeline_stages:
          - regex:
              expression: '^(?P<timestamp>[0-9:\.\- ]+)\s+\[[^\]]+\]\s+\[(?P<thread>\d+)\]\s+\[(?P<level>\w+)\]\s+(?P<message>.*)'
          static_configs:
            - labels:
                __path__: <LOG_FILE>

Log lines look like -

2024-01-31 12:38:52.485	[2024-01-31 17:38:47 +0000] [320] [INFO] Booting worker with pid: 320
2024-01-31 12:38:52.485	[2024-01-31 17:38:47 +0000] [319] [INFO] Booting worker with pid: 319
2024-01-31 12:38:52.485	[2024-01-31 17:38:47 +0000] [319] [INFO] Booting worker with pid: 319

My regex playground is here - regex101: build, test, and debug regex

I’m not sure there’s a better way to debug this, I just run the agent with the config, push a few log lines to the file, and then check what I get in Loki. I don’t think I see much feedback in the agent for what might be going on (or not)

I think I can get it work by adding a template stage to generate a new field in a specific JSON format, and then add an output stage to use that new field as the message.
But it makes me wonder if there’s a better option?