Skip to content

Disable muse-spark bots and mask derived Metaculus tokens - #342

Closed
CodexVeritas wants to merge 1 commit into
mainfrom
claude/recent-bot-run-errors-c060ef
Closed

Disable muse-spark bots and mask derived Metaculus tokens#342
CodexVeritas wants to merge 1 commit into
mainfrom
claude/recent-bot-run-errors-c060ef

Conversation

@CodexVeritas

@CodexVeritas CodexVeritas commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

Why

muse_spark_1_1, 1_2 and 1_3 have produced zero forecasts across the Fall 2026 season questions (45526–45569), and were the cause of most AIB workflow failures since Sept 7.

Their passing runs were runs with Questions to forecast: 0, which is why this was not visible during the Sept 2–6 gap between seasons.

Root cause

OpenRouter returns HTTP 200 with an empty completion for all three models:

{"choices":[{"finish_reason":"stop","native_finish_reason":"completed",
  "message":{"role":"assistant","content":null,"refusal":null,"reasoning":null}}]}

content and reasoning are both null and there is no usage block. This reproduces on any prompt, with and without temperature, include_reasoning and reasoning_effort, so there is no text for the client to read. /models/meta/muse-spark-1.1/endpoints lists a single provider, so provider routing is not an option either. muse-glimmer-30b is served by a different provider and is unaffected.

The three bots are disabled following the existing convention (TournConfig.NONE plus removing the workflow job), which keeps enabled bots (83) matched 1:1 with workflow jobs (83).

Workflow token handling

The launcher extracts a single token from the METACULUS_TOKENS secret with jq. A value derived from a secret is a new string that Actions does not treat as masked, so it could be written to logs by later steps. This registers it with ::add-mask:: before use.

Error message

The failure surfaced as AssertionError: Answer is not a string and is of type: NoneType, which did not distinguish an upstream provider fault from a parsing bug. It now reports the model, the finish reason and the usage.

Testing

  • 3 new unit tests in code_tests/unit_tests/test_ai_models/test_general_llm.py covering the empty response, the reasoning-content fallback and the normal path.
  • Full unit suite: 927 passed. The 14 failures are pre-existing and reproduce identically on main; they pass when run file-alone, so they are order-dependent.
  • black / isort / ruff / typos pass at the pinned pre-commit versions.

🤖 Generated with Claude Code

The three muse-spark bots have failed on every question of the Fall 2026
season (45526-45569), producing zero forecasts. OpenRouter's only provider
for these models returns HTTP 200 with an empty completion: content and
reasoning are both null, there is no usage block, and the finish reason is
"stop". Confirmed with direct calls to all three models. There is no
alternative provider to route to, so they are disabled until it is fixed.

Tokens pulled out of the METACULUS_TOKENS json are derived values that
GitHub has never seen registered as secrets, so they were not masked and
got printed in plain text in the logs of every bot job. This repo is
public, so those logs are world readable. Masking them explicitly fixes
new runs; the existing tokens still need rotating.

The assertion that fired for the muse bots said only that the answer was
not a string, which was not enough to tell an upstream provider fault from
a parsing bug. It now names the model, the finish reason and the usage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@CodexVeritas CodexVeritas changed the title Disable muse-spark bots and stop leaking resolved Metaculus tokens Disable muse-spark bots and mask derived Metaculus tokens Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant