hermes-agent/tests
Ian Culling 86e10dd874 fix(agent): route 'thinking blocks cannot be modified' 400 to recovery
Anthropic returns a 400 when the thinking/redacted_thinking blocks in the
latest assistant message are mutated upstream: 'thinking or redacted_thinking
blocks in the latest assistant message cannot be modified. These blocks must
remain as they were in the original response.'

The classifier's thinking_signature branch only matched on the substring
'signature', so this variant fell through to a non-retryable client error
and hard-aborted the turn -- even though the existing strip-reasoning_details
-and-retry recovery would have healed it.

Broaden the 400 match to also catch 'cannot be modified' / 'must remain as
they were' (still gated on 'thinking'), routing it to the same recovery.
Adds a negative-case test so unrelated 'cannot be modified' 400s are not
swept in.

Defense-in-depth, orthogonal to the root-cause work in #35975 / #17861
(which prevent the block mutation in the first place). Only changes a
terminal-failure into a one-shot recovery.

Signed-off-by: Ian Culling <ian@culling.ca>
2026-06-10 12:39:44 -07:00
..
acp
…
acp_adapter
…
agent fix(agent): route 'thinking blocks cannot be modified' 400 to recovery 2026-06-10 12:39:44 -07:00
cli fix(cli): prevent duplicate one-shot finalize on interrupted cleanup (#43320) 2026-06-09 22:41:04 -07:00
cron fix(cron): don't strict-scan script-injected output in no-skills jobs (#43223) 2026-06-10 08:27:24 +05:30
docker fix(gateway): auto-start after container restart via planned-stop marker (#42675) (#43236) 2026-06-10 14:01:34 +10:00
e2e
…
fakes
…
fixtures/plugins/example-dashboard/dashboard
…
gateway test: port voice-reply suffix assertions, fix change-detector cap test, add AUTHOR_MAP entry 2026-06-10 02:57:39 -07:00
hermes_cli Add dashboard file browser paths 2026-06-10 09:53:12 -07:00
hermes_state
…
honcho_plugin
…
integration
…
openviking_plugin
…
plugins fix(langfuse): redact base64 data URIs instead of truncating into invalid base64 2026-06-10 10:49:36 +05:30
providers fix(openrouter): route reasoning_effort to verbosity for adaptive Anthropic models (#43436) 2026-06-10 15:03:01 +05:30
run_agent fix(params): send max_completion_tokens for newer OpenAI families on custom endpoints 2026-06-09 23:22:10 -07:00
scripts
…
skills
…
stress
…
tools test: port voice-reply suffix assertions, fix change-detector cap test, add AUTHOR_MAP entry 2026-06-10 02:57:39 -07:00
tui_gateway fix(desktop): rebind sessions after websocket reconnect (salvage of #41740) (#43004) 2026-06-09 19:01:00 +00:00
website
…
__init__.py
…
conftest.py
…
run_interrupt_test.py
…
test_account_usage.py
…
test_atomic_replace_symlinks.py
…
test_base_url_hostname.py
…
test_batch_runner_checkpoint.py
…
test_bitwarden_secrets.py
…
test_cli_file_drop.py
…
test_cli_manual_compress.py
…
test_cli_skin_integration.py
…
test_ctx_halving_fix.py
…
test_dashboard_sidecar_close_on_disconnect.py
…
test_desktop_mac_entitlements.py
…
test_docker_home_override_scripts.py Repair cron ownership on container restart (#41976) 2026-06-10 15:32:34 +10:00
test_docker_stage2_browser_discovery.py
…
test_dockerfile_tini_compat_shim.py
…
test_empty_model_fallback.py
…
test_env_loader_secret_sources.py
…
test_evidence_store.py
…
test_gateway_streaming_nested_config.py
…
test_get_tool_definitions_cache_isolation.py
…
test_hermes_bootstrap.py
…
test_hermes_constants.py
…
test_hermes_home_profile_warning.py
…
test_hermes_logging.py
…
test_hermes_state.py
…
test_hermes_state_compression_locks.py
…
test_hermes_state_wal_fallback.py
…
test_honcho_client_concurrency.py
…
test_honcho_client_config.py
…
test_honcho_session_context.py
…
test_honcho_startup_fail_open.py
…
test_install_no_initial_commit.py
…
test_install_sh_browser_install.py
…
test_install_sh_pythonpath_sanitization.py
…
test_install_sh_root_fhs_uv_python_path.py
…
test_install_sh_setup_wizard_tty_probe.py
…
test_install_sh_symlink_stomp.py
…
test_install_sh_termux_network_prereqs.py
…
test_ipv4_preference.py
…
test_lazy_session_regressions.py
…
test_lint_config.py
…
test_live_system_guard_self_test.py
…
test_mcp_serve.py
…
test_mini_swe_runner.py
…
test_minimax_model_validation.py
…
test_minimax_oauth.py
…
test_minisweagent_path.py
…
test_model_forces_max_completion_tokens.py fix(params): send max_completion_tokens for newer OpenAI families on custom endpoints 2026-06-09 23:22:10 -07:00
test_model_picker_scroll.py
…
test_model_tools.py
…
test_model_tools_async_bridge.py
…
test_ollama_num_ctx.py
…
test_output_cap_parsing.py test(agent): cover char-based output-cap overflow parsing (#42741) 2026-06-09 03:17:12 -07:00
test_package_json_lazy_deps.py
…
test_packaging_metadata.py fix(packaging): ship optional-mcps catalog in wheel and sdist (#39859) 2026-06-09 14:03:20 -04:00
test_plugin_skills.py
…
test_plugin_utils.py
…
test_process_loop_event_loop_warning.py
…
test_project_metadata.py
…
test_retry_utils.py
…
test_run_tests_parallel.py fix(ci): make parallel runner's exit-4 retry robust for newly-added test files (#42994) 2026-06-09 21:39:09 -07:00
test_sanitize_tool_error.py
…
test_slash_worker_watchdog.py
…
test_sql_injection.py
…
test_state_db_malformed_repair.py fix(state.db): recover from malformed sqlite_master so hidden sessions reappear (#43149) 2026-06-09 18:49:08 -05:00
test_subprocess_home_isolation.py
…
test_termux_all_extra_compat.py
…
test_timezone.py
…
test_toolset_distributions.py
…
test_toolsets.py
…
test_trajectory_compressor.py
…
test_trajectory_compressor_async.py
…
test_transform_llm_output_hook.py
…
test_transform_tool_result_hook.py
…
test_tui_gateway_server.py fix(desktop): keep model runtime state per session (#43702) 2026-06-10 18:16:50 +00:00
test_tui_gateway_ws.py
…
test_utils_truthy_values.py
…
test_web_server.py
…
test_wheel_locales_e2e.py
…
test_yuanbao_integration.py
…
test_yuanbao_markdown.py
…
test_yuanbao_pipeline.py test(yuanbao): add missing patch import to pipeline tests 2026-06-09 03:17:00 -07:00
test_yuanbao_proto.py
…
test_yuanbao_shutdown.py
…