#Port conflicts... not sure if OpenClaw or Ollama is the issue. No agents responding.

58 messages · Page 1 of 1 (latest)

barren plover
#

ChatGPT is useless.

keen orioleBOT
sturdy forumBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> âś… Mark Solution

storm marshBOT
#

Yeah, local machine bugs are where generic AI gets real dumb.

Let’s use actual signals instead. Please paste these in one message:

openclaw --version
openclaw status --all
openclaw gateway status
openclaw models status
ss -ltnp | grep -E '18789|11434'

That should tell us pretty fast whether this is:

  • a real port conflict,
  • the gateway not binding,
  • Ollama being unrelated,
  • or agents/models failing for a different reason.
barren plover
#

PS C:\WINDOWS\system32> ss -ltnp | grep -E '18789|11434'

openclaw models status
openclaw gateway status
openclaw status --all
openclaw --version
ss : The term 'ss' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1

  • ss -ltnp | grep -E '18789|11434'
  • ~~
    • CategoryInfo : ObjectNotFound: (ss:String) [], CommandNotFoundException
    • FullyQualifiedErrorId : CommandNotFoundException

🦞 OpenClaw 2026.4.11 (769908e) — Making 'I'll automate that later' happen now.

Config : $OPENCLAW_HOME.openclaw\openclaw.json
Agent dir : $OPENCLAW_HOME.openclaw\agents\main\agent
Default : ollama/kimi-k2.5:cloud
Fallbacks (0) : -
Image model : -
Image fallbacks (0): -
Aliases (0) : -
Configured models (1): ollama/kimi-k2.5:cloud

Auth overview
Auth store : $OPENCLAW_HOME.openclaw\agents\main\agent\auth-profiles.json
Shell env : off
Providers w/ OAuth/tokens (0): -

  • anthropic effective=profiles:$OPENCLAW_HOME.openclaw\agents\main\agent\auth-profiles.json | profiles=1 (oauth=0, token=0, api_key=1) | anthropic:default=sk-ant-a...caEjVwAA
  • ollama effective=profiles:$OPENCLAW_HOME.openclaw\agents\main\agent\auth-profiles.json | profiles=1 (oauth=0, token=0, api_key=1) | ollama:default=marker(ollama-local) | env=ol...al | source=env: OLLAMA_API_KEY | models.json=OL...EY | source=models.json: $OPENCLAW_HOME.openclaw\agents\main\agent\models.json
  • openai effective=env:sk-proj-...ltFvMV0A | env=sk-proj-...ltFvMV0A | source=env: OPENAI_API_KEY
  • openrouter effective=env:sk-api-W...ciutAcWY | env=sk-api-W...ciutAcWY | source=env: OPENROUTER_API_KEY
  • perplexity effective=env:sk-api-W...ciutAcWY | env=sk-api-W...ciutAcWY | source=env: OPENROUTER_API_KEY

OAuth/token status

  • none
storm marshBOT
#

Nice, that at least shows you’re on 2026.4.11, so not some ancient build.

What we got there is mostly model/auth status, not the gateway/port state yet. Also, ss is a Linux command, so PowerShell ignored the port check path.

Please run these one at a time in PowerShell and paste the output:

openclaw gateway status
openclaw status --all
netstat -ano | findstr ":18789"
netstat -ano | findstr ":11434"

If either netstat command shows a PID, also run:

#
Get-Process -Id <PID>

So far we know:

  • OpenClaw is installed and reasonably current
  • model/auth config exists
  • we still don’t know whether the gateway failed to start, failed to bind, or if Ollama is even involved

If openclaw gateway status looks bad, the next thing I’ll ask for is:

openclaw logs --follow
barren plover
#

PS C:\WINDOWS\system32> openclaw gateway status

🦞 OpenClaw 2026.4.11 (769908e)
I can't fix your code taste, but I can fix your build and your backlog.

|
o
Service: Scheduled Task (registered)
File logs: \tmp\openclaw\openclaw-2026-04-12.log
Command: C:\Program Files\nodejs\node.exe C:\Users\there\AppData\Roaming\npm\node_modules\openclaw\dist\index.js gateway --port 18789
Service file: $OPENCLAW_HOME.openclaw\gateway.cmd
Service env: OPENCLAW_GATEWAY_PORT=18789

Config (cli): $OPENCLAW_HOME.openclaw\openclaw.json
Config (service): $OPENCLAW_HOME.openclaw\openclaw.json

Gateway: bind=loopback (127.0.0.1), port=18789 (service args)
Probe target: ws://127.0.0.1:18789
Dashboard: http://127.0.0.1:18789/
Probe note: Loopback-only gateway; only local clients can connect.

Runtime: unknown (state Ready, last run -1073741510, last run time 4/12/2026 5:27:29 PM, Task status is locale-dependent and no numeric Last Run Result was available.)
RPC probe: failed
RPC target: ws://127.0.0.1:18789
gateway closed (1006):

Troubles: run openclaw status
Troubleshooting: https://docs.openclaw.ai/troubleshooting

storm marshBOT
#

Good, we’ve got the first real clue.

This does not look like “Ollama stole the port” yet. It looks like the OpenClaw gateway itself isn’t staying up:

  • RPC probe: failed
  • nothing is answering on 127.0.0.1:18789
  • last run -1073741510, which on Windows usually means the process got interrupted/terminated

Next step is to catch the failure live. In two PowerShell windows:

# window 1
openclaw logs --follow
#
# window 2
openclaw gateway restart
openclaw gateway status

Then paste:

  1. the fresh openclaw gateway status
  2. the log lines that appear right after restart

If you still want the Windows port check, use:

netstat -ano | findstr ":18789"
netstat -ano | findstr ":11434"
barren plover
#

🦞 OpenClaw 2026.4.11 (769908e)
Like having a senior engineer on call, except I don't bill hourly or sigh audibly.

Gateway not reachable. Is it running and accessible?
Gateway target: ws://127.0.0.1:18789

storm marshBOT
#

Yep, confirmed, the gateway is just down right now, which is why no agents respond. This still doesn’t look like an Ollama port fight.

At this point we need the startup error, not another status snapshot. Please paste these two:

openclaw doctor
Get-Content "\tmp\openclaw\openclaw-2026-04-12.log" -Tail 100

If you want to catch it live instead:

# window 1
openclaw logs --follow
#
# window 2
openclaw gateway restart

Then paste the log lines that appear right after restart.

That should tell us whether this is:

  • a real bind/port error,
  • a config problem,
  • or the Windows scheduled task dying on startup.
barren plover
#

accepted. Group messages stay blocked until you |
| add allowed chats under |
| channels.telegram.accounts.tess.groups (and |
| optional sender IDs under |
| channels.telegram.accounts.tess.groupAllowFrom), |
| or set channels.telegram.accounts.tess.groupPolicy |
| to "open" if you want broad group access. |
| - channels.discord.groupPolicy is "allowlist" but |
| groupAllowFrom (and allowFrom) is empty — all |
| group messages will be silently dropped. Add |
| sender IDs to channels.discord.groupAllowFrom or |
| channels.discord.allowFrom, or set groupPolicy to |
| "open". |
| - channels.discord.accounts.community-manager.groupP |
| olicy |
| is "allowlist" but groupAllowFrom (and allowFrom) |
| is empty — all group messages will be silently |
| dropped. Add sender IDs to |
| channels.discord.accounts.community-manager.groupA |
| llowFrom |
| or |
| channels.discord.accounts.community-manager.allowF |
| rom, |
| or set groupPolicy to "open". |
| - channels.discord.accounts.default.groupPolicy is |
| "allowlist" but groupAllowFrom (and allowFrom) is |
| empty — all group messages will be silently |
| dropped. Add sender IDs to |
| channels.discord.accounts.default.groupAllowFrom |
| or

#

channels.discord.accounts.default.allowFrom, or |
| set groupPolicy to "open". |
| - channels.discord.accounts.krill.groupPolicy is |
| "allowlist" but groupAllowFrom (and allowFrom) is |
| empty — all group messages will be silently |
| dropped. Add sender IDs to |
| channels.discord.accounts.krill.groupAllowFrom or |
| channels.discord.accounts.krill.allowFrom, or set |
| groupPolicy to "open". |
| - channels.discord.accounts.bad-larry.groupPolicy is |
| "allowlist" but groupAllowFrom (and allowFrom) is |
| empty — all group messages will be silently |
| dropped. Add sender IDs to |
| channels.discord.accounts.bad-larry.groupAllowFrom |
| or channels.discord.accounts.bad-larry.allowFrom, |
| or set groupPolicy to "open". |
| |
+-------------------------------------------------

#

18:00:54-04:00 [telegram] channels.telegram: accounts.default is missing; falling back to "lex". Set channels.telegram.defaultAccount or add channels.telegram.accounts.default to avoid routing surprises in multi-account setups.
|
o Bundled plugins ---------------------------------+
| |
| Bundled plugin runtime deps are missing. |
| - @discordjs/opus@^0.10.0 (used by discord) |
| Fix: run openclaw doctor --fix to install them. |
| |
+---------------------------------------------------+
|

  • Install missing bundled plugin runtime deps now?
    | > Yes / No
    —
storm marshBOT
#

Yep, that’s the smoking gun. This is not a port conflict.

Your doctor output says OpenClaw is silently dropping Discord group/thread messages because groupPolicy is allowlist and nothing is allowlisted for that Discord account.

Two ways to fix it:

1. Fastest
Set Discord group access to open:

{
  channels: {
    discord: {
      accounts: {
        default: {
          groupPolicy: "open",
#
        },
      },
    },
  },
}

2. Better
Keep allowlist, but explicitly allow the guild/channel you want:

{
  channels: {
    discord: {
      accounts: {
#
        default: {
          groupPolicy: "allowlist",
          guilds: {
            "YOUR_GUILD_ID": {
              channels: {
                "YOUR_CHANNEL_ID": { allow: true },
              },
            },
          },
        },
      },
    },
  },
}
#

Then restart:

openclaw gateway restart
openclaw doctor

A couple notes:

  • if you use a different Discord account block, apply it there instead of accounts.default
  • even with groupPolicy: "open", mention gating can still apply
  • you can ignore the Telegram warning unless you’re also debugging Telegram

Docs: https://docs.openclaw.ai/channels/groups

I’d recommend allowlisting just the server/channel first, then widening it later if you want.

#

Yep, same root cause, just repeated for each Discord account block.

The important bit here is that this session is using the default Discord account, and channels.discord.accounts.default is currently configured to drop all group messages.

So the quickest fix is:

{
  channels: {
    discord: {
      accounts: {
        default: {
          groupPolicy: "open",
        },
      },
    },
#
  },
}

Then restart:

openclaw gateway restart

A couple important details:

  • you do not need to fix krill or bad-larry unless you want those accounts replying too
  • groupPolicy: "open" only opens group access, it does not necessarily disable mention gating

Docs: https://docs.openclaw.ai/channels/groups

#

If you want, paste your channels.discord.accounts.default block and I can tell you exactly what to change.

#

Yes, I’d accept that install.

But also, this output is mixing three separate things:

  1. Telegram warning
    Not relevant unless you’re also using Telegram.

  2. Missing @discordjs/opus
    Worth fixing, especially for Discord voice/audio stuff. openclaw doctor --fix is the right move.

  3. Your actual “no replies in Discord threads” problem
    Still looks like the Discord group policy / allowlist config from earlier.

So I’d do this in order:

#
openclaw doctor --fix
openclaw gateway restart

Then make sure the config for the active Discord account still includes either:

  • channels.discord.accounts.default.groupPolicy: "open"
  • or a proper allowlist for the guild/channel

So, short version: click Yes, but don’t let that distract from the real blocker, which is the Discord group-message policy.

barren plover
#

Same for Telegram? TG is my main access point for my main agent. I think the problem is deeper than this - I have no response on dashboard, TUI, or in my VM (hermes)

storm marshBOT
#

Yeah, that does sound deeper, and it matches the earlier clue.

If dashboard + TUI + hermes are all dead too, then this is not just Discord or Telegram routing. Those all depend on the gateway being healthy.

So I’d split it like this:

  • Telegram warning: real, but mostly a routing/default-account warning
  • Discord warnings: real, but about group-message policy
  • Bigger problem: your gateway is not staying up / not reachable, which would break dashboard, TUI, and remote clients all at once

So let’s ignore channel config for one minute and get the core failure.

Please paste these three:

openclaw status --all
#
Get-Content "\tmp\openclaw\openclaw-2026-04-12.log" -Tail 150
netstat -ano | findstr ":18789"

And yes, for Telegram specifically, if lex is your real default account, set:

channels: {
  telegram: {
    defaultAccount: "lex",
  },
}

But I would not chase Telegram/Discord first. The dashboard/TUI/hermes symptom says the gateway itself is the main fire.

barren plover
#

Then let's fix the main fire

storm marshBOT
#

Yep. Let’s go straight at it.

Run these one at a time in PowerShell, then paste all output in one message:

openclaw gateway restart
openclaw status --all
Get-Content "\tmp\openclaw\openclaw-2026-04-12.log" -Tail 150
netstat -ano | findstr ":18789"

That gives us, in order:

  • whether the gateway can restart at all
  • what OpenClaw thinks is broken
  • the actual startup/crash lines
  • whether anything is listening on the gateway port
#

Don’t crop the log tail if you can help it, that’s probably where the real answer is.

barren plover
#

Get-Content "\tmp\openclaw\openclaw-2026-04-12.log" -Tail 150
netstat -ano | findstr ":18789"

Is this all one command?

storm marshBOT
#

Nope, separate commands. One at a time 🙂

Run exactly this:

openclaw gateway restart

then

openclaw status --all

then

#
Get-Content "\tmp\openclaw\openclaw-2026-04-12.log" -Tail 150

then

netstat -ano | findstr ":18789"

Paste the outputs after that.

barren plover
#

I'm green on everything in the status --all check until i get to Agents... My main (main) bootstarp file is present, as is Songbird's (another agent running on Anthropic and not ollama)... all others are ABSENT

Diagnosis (read-only)

Gateway connection details:
Gateway target: ws://127.0.0.1:18789
Source: local loopback
Config: C:\Users\there.openclaw\openclaw.json
Bind: loopback

âś“ Config: C:\Users\there.openclaw\openclaw.json
âś“ Secret diagnostics (0)
âś“ Restart sentinel: none
! Port 18789
Port 18789 is already in use.

  • pid 22152: "C:\Program Files\nodejs\node.exe" C:\Users\there\AppData\Roaming\npm\node_modules\openclaw\dist\index.js gateway --port 18789 (127.0.0.1:18789)
  • Gateway already running locally. Stop it (openclaw gateway stop) or use a different port.
    ! Tailscale: off · unknown
    ✓ Skills: 12 eligible · 0 missing · C:\Users\there.openclaw\workspace
    ! Plugin compatibility (1)
  • [warn] memory-lancedb still uses legacy before_agent_start; keep regression coverage on this plugin, and prefer before_model_resolve/before_prompt_build for new work.
    ! Channel issues skipped (gateway unreachable)

o
PS C:\WINDOWS\system32> netstat -ano | findstr ":18789"
TCP 127.0.0.1:18789 0.0.0.0:0 LISTENING 22152
TCP 127.0.0.1:18789 127.0.0.1:50151 ESTABLISHED 22152
TCP 127.0.0.1:18789 127.0.0.1:65301 ESTABLISHED 22152
TCP 127.0.0.1:18789 127.0.0.1:65302 ESTABLISHED 22152
TCP 127.0.0.1:50151 127.0.0.1:18789 ESTABLISHED 15304
TCP 127.0.0.1:65301 127.0.0.1:18789 ESTABLISHED 22152
TCP 127.0.0.1:65302 127.0.0.1:18789 ESTABLISHED 22152
TCP [::1]:18789 [::]:0 LISTENING 22152

storm marshBOT
#

Okay, that’s a really useful clue.

Good news: this is not Ollama stealing the port.
18789 is owned by OpenClaw itself:

  • node ... openclaw ... gateway --port 18789
  • LISTENING 22152

So the port is fine. The suspicious bit is this:

BOOTSTRAP.md is present for main and Songbird

We’ve seen leftover BOOTSTRAP.md keep agents stuck in perpetual bootstrapping, which makes them look dead from dashboard, TUI, and chat even though the gateway process is technically up.

Best next move

Temporarily rename or move the BOOTSTRAP.md files for:

  • main
#
  • Songbird

Then:

openclaw gateway restart

and test again.

If you want me to confirm before you touch files

Paste the log tail too, because that should show bootstrap churn/crashes:

Get-Content "\tmp\openclaw\openclaw-2026-04-12.log" -Tail 150
#

So right now my top read is:

  1. not a port conflict
  2. gateway process exists
  3. agents may be stuck bootstrapping due to leftover BOOTSTRAP.md

If you want, paste the Agents section plus the log tail and I’ll tell you whether it’s safe to remove those two bootstrap files.

barren plover
#

Ok... could this be the issue:

Lex is my main agent. For a couple days, I was having a TON of problems with her - arguing, losing context, stuff like that.

So what I've been doing is setting up a multi-agent org to take some of the work off her shoulders. I also cleaned up a ton of bloated useless old files, and (most relevant) moved her main workspace OUT of the main openclaw folder. I did this for all my agents except main... I did this by having Lex set up a new workspace for herself with a new heartbeat.md, soul.md, etc...

For Songbird, I copied his into the new location, and HIS has a bootstrap.md... the other agents are new agents (not including the Discord bots in this). So looking in Lex's NEW workspace, I see the new heartbeat, soul, etc.. I DO NOT see a new bootstrap.md.

Could that be the issue?

storm marshBOT
#

Yes, that absolutely could be the issue.

The workspace move itself is not necessarily bad. The suspicious part is this:

  • HEARTBEAT.md, SOUL.md, etc. are normal to keep/copy
  • BOOTSTRAP.md is different. It’s basically first-run scaffolding, not long-term memory

So:

  • Lex new workspace with no BOOTSTRAP.md: that part sounds fine
  • Songbird new workspace with a copied BOOTSTRAP.md: that is very suspicious
  • if main/Lex is still pointed at an old workspace that still has a BOOTSTRAP.md, that could also keep things wedged

What I’d check next is:

  1. find every BOOTSTRAP.md in both the old and new workspaces
  2. identify which ones belong to active agents
#
  1. temporarily rename those BOOTSTRAP.md files out of the way
  2. restart the gateway and test again

If you want a quick inventory, run:

Get-ChildItem $env:USERPROFILE\.openclaw -Recurse -Filter BOOTSTRAP.md | Select-Object FullName

And if some agents now live outside .openclaw, search those custom workspace folders too.

So short answer: yes, copied/misplaced BOOTSTRAP.md files are one of the most plausible causes here.

barren plover
#

Ok.. and the problem started immediately after starting a /new session with Lex and restarting the GW

storm marshBOT
#

Yep, that timing makes the bootstrap/session-state theory a lot stronger.

A /new session + gateway restart is exactly when OpenClaw will try to bootstrap fresh session state. If that state is bad, or it finds a lingering BOOTSTRAP.md, things can wedge right there.

So I’d treat this as the most likely chain now:

  1. /new session triggered fresh bootstrap behavior
  2. workspace/session state was already weird after the moves/copies
  3. gateway came back up, but the agent got stuck in bootstrap land

I’d do this in this order

  1. temporarily rename any active-agent BOOTSTRAP.md files, especially:
    • Lex/main
    • Songbird
  2. restart the gateway
  3. try again with a fresh session
#

If it’s still broken after that, then the next suspect is a stale session store / bad saved session state, not the port.

So yes, this new detail fits the bootstrap theory really well.

barren plover
#

Same shit: LLM request failed: network connection error.

storm marshBOT
#

Annoying, but that’s actually a better clue.

LLM request failed: network connection error means the agent got far enough to try a model call. So this is not just “stuck bootstrap” anymore. The failure is now at the provider/network layer.

So the next move is just this:

openclaw logs --follow

Then:

  1. send one test message to Lex
  2. paste the new log lines that appear right after the failure

That should tell us whether the bad hop is:

  • Lex’s model/backend
  • local Ollama connectivity
#
  • or a more general outbound network/provider problem

Also, one quick sanity check:

  • if Songbird works but Lex fails, it’s probably Lex’s model/backend
  • if both fail with the same network error, it’s probably broader than a single agent

Paste the log lines and we can stop guessing.

barren plover
#

Discord: ok (@Lexi P., @Bad Larry, @Super Macho Man, @Krill) (342ms)
Telegram: ok (@lexmain_bot, @Tes_sbot) (261ms)
Agents: main (default), super-macho-man, krill, songbird, bad-larry, investigator, lexicon, ultimate-brainzilla, hamburger_helper, janitor
Heartbeat interval: 30m (main)
Session store (main): C:\Users\there.openclaw\agents\main\sessions\sessions.json (43 entries)

  • agent:main:main (69m ago)
  • agent:main:telegram:direct:8244638936 (3295m ago)
  • agent:main:subagent:61bd9800-07f2-4c0f-8177-fd958cce3a51 (3305m ago)
  • agent:main:cron:75b0623f-3a08-44ce-a2aa-bc480341614f (17057m ago)
  • agent:main:cron:4b8f2491-d202-4216-b5c5-bf836fe71bc6 (17064m ago)
    18:27:20-04:00 [plugins] memory-lancedb: plugin registered (db: C:\Users\there.openclaw\memory\lancedb, lazy init)
    |
    o Memory search -------------------------------------------------+
    | |
    | No active memory plugin is registered for the current config. |
    | |
    +-----------------------------------------------------------------+
    |
    — Doctor complete.
storm marshBOT
#

That output is actually good news.

It means:

  • Discord is fine
  • Telegram is fine
  • the gateway is up
  • agents are registered
  • this is not a port / channel / gateway meltdown anymore

So the problem has narrowed down to model execution.
In other words, the agent is alive, but the LLM call is failing.

The memory-lancedb bit is not the fire here, and the memory plugin warning is unrelated to “LLM request failed: network connection error”.

What I need now

Not doctor, but the live failure lines.

#

Run:

openclaw logs --follow

Then send one message to Lex that fails, and paste the new log lines only.

I’m looking for the part that mentions:

  • provider
  • model
  • URL/endpoint
  • timeout / connect / ECONN / 4xx / 5xx

At this point, that log snippet is the shortest path to the real root cause.

barren plover
#

This stuff?

22:28:58+00:00 warn agent/embedded {"subsystem":"agent/embedded"} {"event":"embedded_run_failover_decision","tags":["error_handling","failover","assistant","surface_error"],"runId":"4f0c1187-74f7-4b8f-a1bd-78978fa5d2fc","stage":"assistant","decision":"surface_error","failoverReason":"timeout","profileFailureReason":null,"provider":"ollama","model":"gemma4:31b-cloud","fallbackConfigured":false,"timedOut":false,"aborted":false,"rawErrorPreview":"fetch failed | other side closed","rawErrorHash":"sha256:1cbfed6bdf66","providerRuntimeFailureKind":"timeout"} embedded run failover decision
22:28:58+00:00 info gateway/channels/telegram {"subsystem":"gateway/channels/telegram"} telegram sendMessage ok chat=8244638936 message=18003
Gateway not reachable. Is it running and accessible?

storm marshBOT
#

Yep, that’s the smoking gun.

This is not a Discord, Telegram, or gateway problem. Telegram send succeeded. The failing hop is the model backend:

  • provider: ollama
  • model: gemma4:31b-cloud
  • error: fetch failed | other side closed
  • failover reason: timeout
  • fallbackConfigured: false

So Lex is alive, but the Ollama-backed model call is timing out / having the connection closed, and there’s no fallback.

Fastest path forward

Pick one:

1. Unstick Lex now, recommended
Temporarily switch Lex/main off that Ollama model, or add a fallback model that you know works.

#

2. Prove it directly
Run a direct model probe:

openclaw infer model run --model ollama/gemma4:31b-cloud --prompt "hi" --json

If that fails the same way, the problem is the Ollama model/backend path, not OpenClaw’s routing.

3. Compare agents
Try Songbird once. If Songbird works and Lex fails, that confirms it’s isolated to the Ollama side.

So the main fire has narrowed to: ollama/gemma4:31b-cloud is failing upstream, and Lex has no fallback configured.

barren plover
#

Dude... So I just checked my Ollama account, and for the past 2 months it's showing tomorow as the day I pay... I have no money in that acct right now. You don't think maybe it tried to take payment and failed or smth do you?

storm marshBOT
#

Honestly, yeah, that’s plausible.

Because the failing model is gemma4:31b-cloud on the ollama provider, this is not a purely local Ollama path. If your Ollama cloud account is in a weird billing state, that could absolutely show up as:

  • connection closed
  • timeout
  • vague network-ish failures

instead of a nice clean “payment failed” message.

So my read is:

  • yes, billing/account state could be the root cause
  • and it fits the log better than the old port-conflict theory

Fastest move right now

Don’t wait on billing weirdness. Temporarily: