hermes-hub/tests
Hermes Team 5c2a0692d3 merge: A51 — подключённый аккаунт реально попадает в цепочку роли
Проверено ревьюером исполнением: подключение с выбором роли кладёт
аккаунт в её цепочку (developer-1 → ['openrouter-1']). Раньше выбор роли
до цепочки не доходил, и ни один аккаунт владельца ни в одной цепочке не
состоял.

Роль на карточке берётся из живой цепочки: role_assignments.get(pid, [])
вместо подстановки догадки. Таблица DEFAULT_SLOT_ROLES удалена — ссылок
на неё в дереве не осталось.

На маршрутизации показывается «Сейчас ответит: <аккаунт>» либо «никто»
с причиной. В плагине Hermes учитываются вызовы мимо хаба
(record_bypass в четырёх местах, счётчик bypassed_calls_count).

Обратное чтение сделано честно: get_hermes_config_status читает
конфигурацию Hermes ТОЛЬКО на чтение, с отдельным тестом на это.

Разрешение конфликтов с A49 и A50 (ветка A51 отведена от 17b368a):
- action_handler: взят вариант A50 — он надмножество, содержит и
  назначение в роль, и защиту слота от чужого провайдера;
- auto_assigner: взят вариант A51 — таблица-догадка удалена;
  подпись llama.cpp от A50 сохранена, она вне конфликта;
- settings_service, unified_health, app.js: обе стороны, правки
  дополняют друг друга;
- тест свежести памяти: взята строгая проверка, вариант A51 молча
  пропускал отсутствие записанного коммита.

Две правки ревьюера по итогам слияния:
- в app.js при сложении потерялась закрывающая скобка блока настроек;
- в add_account сохранение учётных данных вызывалось дважды, и второй
  вызов обращался к auth_data, которой у уже авторизованного аккаунта не
  существует. Перевод аккаунта в другую роль падал с ошибкой, хотя ключ
  вводить не требуется. Дубль убран, оба теста A51 проходят.

554 passed, 1 skipped, ruff clean, релизный гейт 10/10 и на конфигурации
владельца, и на пустой.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 19:13:02 +07:00
..
fixtures fix(installer): ошибка 12 при установке — проверка требовала конфигурацию от 20 августа 2026-08-24 09:35:36 +07:00
manual Fix account slot isolation and add background checks with per-account model discovery 2026-08-31 18:42:41 +07:00
conftest.py fix(tests): адреса провайдеров из окружения ломали прогон на машине владельца 2026-08-31 01:35:57 +07:00
test_a9_migration_quotas_models.py feat(skills): A49 subagents layout, skills tab, SkillDoctor, and Obsidian memory integration 2026-08-31 18:19:01 +07:00
test_a31_preflight_state_batching_pii.py feat(skills): A49 subagents layout, skills tab, SkillDoctor, and Obsidian memory integration 2026-08-31 18:19:01 +07:00
test_a35_role_resolution.py feat(pipeline): A35 and A36 canonical Antigravity workflow pipeline with role resolution and loops 2026-08-30 15:34:07 +00:00
test_a36_pipeline.py feat(skills): A49 subagents layout, skills tab, SkillDoctor, and Obsidian memory integration 2026-08-31 18:19:01 +07:00
test_a37_isolation_guards.py fix(security): команда с тильдой обходила защиту каталога учётных данных 2026-08-30 22:51:17 +07:00
test_a39_local_request_options.py feat(local): параметры запроса (request_options) для локальных профилей 2026-08-30 23:49:57 +07:00
test_a40_model_benchmark.py merge: A44 и A49 — отчёт замеров и субагенты со скиллами и памятью 2026-08-31 18:47:41 +07:00
test_a41_clean_install.py feat(skills): A49 subagents layout, skills tab, SkillDoctor, and Obsidian memory integration 2026-08-31 18:19:01 +07:00
test_a42_provider_connect.py Fix account slot isolation and add background checks with per-account model discovery 2026-08-31 18:42:41 +07:00
test_a43_frontend_canvas.py feat(ui): A43 интерактивный холст workflow (n8n style), панорамирование, зум колесом, 6 KPI и верстка по макетам 2026-08-31 12:29:06 +07:00
test_a49_subagents_skills_memory.py feat(skills): A49 subagents layout, skills tab, SkillDoctor, and Obsidian memory integration 2026-08-31 18:19:01 +07:00
test_a51_hub_controls_hermes.py feat(a51): hub controls hermes - full real routing, bypass telemetry and truthful status 2026-08-31 18:53:55 +07:00
test_account_modal_refresh.py fix(web): окно аккаунта не обновлялось и застревало на заглушке 2026-08-24 20:40:13 +07:00
test_accounts_a50.py Fix account slot isolation and add background checks with per-account model discovery 2026-08-31 18:42:41 +07:00
test_accounts_distribution_and_thresholds_a26.py feat(config): A41 чистая конфигурация при первой установке, безопасность учетных данных и сброс 2026-08-31 02:27:42 +07:00
test_accounts_tariffs_quotas.py feat(A11): интеграция с Hermes, токены Codex, честное обнаружение моделей 2026-08-23 15:27:28 +07:00
test_adapter_error_parsing.py fix(adapters): обработчик ошибок падал сам, скрывая настоящую причину 2026-08-24 14:54:39 +07:00
test_agy_native_login.py feat(config): A41 чистая конфигурация при первой установке, безопасность учетных данных и сброс 2026-08-31 02:27:42 +07:00
test_agy_oauth_credentials.py fix(oauth): preserve complete credentials and sync oauth_creds.json for Antigravity profiles (A20) 2026-08-23 23:09:58 +07:00
test_antigravity_concurrency.py perf(antigravity): из десяти аккаунтов одновременно работал один 2026-08-30 20:04:52 +07:00
test_api_providers_a32.py feat(config): A41 чистая конфигурация при первой установке, безопасность учетных данных и сброс 2026-08-31 02:27:42 +07:00
test_brand_icons.js Restore local provider logos and add model-family brand marks 2026-08-31 18:14:34 +07:00
test_codex_opencode_wizard.py feat(hub): A34 восстановление подключения аккаунтов, OpenRouter, NVIDIA, удаление десктопа 2026-08-31 00:23:27 +07:00
test_credential_isolation.py fix(test): isolate agy lookup in hermetic credential test 2026-08-27 12:08:14 +00:00
test_dashboard_data.py Finish A28: Subagents and role registry implementation 2026-08-25 19:38:03 +07:00
test_data_truthfulness_and_oauth_security.py feat(state): harden snapshots quotas and routing 2026-08-21 00:03:50 +07:00
test_delete_credentials.py fix(accounts): удаление аккаунта рапортовало успех, ничего не удаляя 2026-08-24 19:17:51 +07:00
test_delete_without_provider.py fix(web): удаление аккаунта не работало из интерфейса 2026-08-24 20:19:58 +07:00
test_deployment_doctor.py feat(config): A41 чистая конфигурация при первой установке, безопасность учетных данных и сброс 2026-08-31 02:27:42 +07:00
test_grok_device_flow.py fix(grok): опрос device-flow не различал отказ, просрочку и ожидание 2026-08-24 15:11:54 +07:00
test_grok_quota.py feat(grok): подписка вместо кредитов — квота и модели заработали 2026-08-24 20:29:08 +07:00
test_health_auth_recovery.py Finish A28: Subagents and role registry implementation 2026-08-25 19:38:03 +07:00
test_import_invariants.py feat(hub): A34 восстановление подключения аккаунтов, OpenRouter, NVIDIA, удаление десктопа 2026-08-31 00:23:27 +07:00
test_import_source_contract.py feat(state): harden snapshots quotas and routing 2026-08-21 00:03:50 +07:00
test_in_app_updates_a27.py fix(ci): stop hanging hermetic tests and unblock clean/headless runners 2026-08-27 12:03:37 +00:00
test_installer.py feat(security): isolate subprocess credentials, implement selection explanation matrix, and resolve installer registry isolation 2026-08-21 10:17:19 +07:00
test_installer_windows_and_linux.py feat(hub): A34 восстановление подключения аккаунтов, OpenRouter, NVIDIA, удаление десктопа 2026-08-31 00:23:27 +07:00
test_linux_port_paths.py feat(A15): веб-API, общий ActionExecutor и порт путей на Linux 2026-08-23 19:45:13 +07:00
test_local_llm_empty_answer.py Merge A24 (маршрутизация как центр управления) и A25 (локальная модель) 2026-08-24 14:33:16 +07:00
test_local_llm_provider_a25.py feat(skills): A49 subagents layout, skills tab, SkillDoctor, and Obsidian memory integration 2026-08-31 18:19:01 +07:00
test_memory_freshness_a47.py merge: A50 — аккаунты, обнаружение моделей и автоматическая проверка 2026-08-31 18:54:04 +07:00
test_model_choice_and_discovery.py feat(config): A41 чистая конфигурация при первой установке, безопасность учетных данных и сброс 2026-08-31 02:27:42 +07:00
test_model_validation_a23.py feat(hub): A34 восстановление подключения аккаунтов, OpenRouter, NVIDIA, удаление десктопа 2026-08-31 00:23:27 +07:00
test_multi_provider_router.py feat(skills): A49 subagents layout, skills tab, SkillDoctor, and Obsidian memory integration 2026-08-31 18:19:01 +07:00
test_oauth_lifecycle.py feat(hub): A34 восстановление подключения аккаунтов, OpenRouter, NVIDIA, удаление десктопа 2026-08-31 00:23:27 +07:00
test_openai_compatible_providers_a34.py feat(hub): A34 восстановление подключения аккаунтов, OpenRouter, NVIDIA, удаление десктопа 2026-08-31 00:23:27 +07:00
test_opencode_credentials.py fix(opencode): адаптер не читал сохранённый ключ — аккаунт не работал никогда 2026-08-23 21:45:32 +07:00
test_p0_1_dangling_handlers_and_wizard.py feat(hub): A34 восстановление подключения аккаунтов, OpenRouter, NVIDIA, удаление десктопа 2026-08-31 00:23:27 +07:00
test_p0_release_gate.py feat(hub): A34 восстановление подключения аккаунтов, OpenRouter, NVIDIA, удаление десктопа 2026-08-31 00:23:27 +07:00
test_plan_a_stabilization_and_smart_routing.py Finish A28: Subagents and role registry implementation 2026-08-25 19:38:03 +07:00
test_plugin_passthrough.py fix(plugin): отказ роутера больше не подменяет ответ модели в Hermes 2026-08-23 12:25:02 +07:00
test_readiness_counting.py fix(readiness): роль на резерве считается работающей 2026-08-24 10:19:33 +07:00
test_roadmap_features.py feat(state): harden snapshots quotas and routing 2026-08-21 00:03:50 +07:00
test_router_error_path.py fix(router): обработчик ошибок падал сам, уровень усилия не подставлялся 2026-08-24 08:51:01 +07:00
test_router_telemetry.py Finish A28: Subagents and role registry implementation 2026-08-25 19:38:03 +07:00
test_routing_control_center_a24.py Finish A28: Subagents and role registry implementation 2026-08-25 19:38:03 +07:00
test_state_layer_and_event_driven_quota.py Finish A28: Subagents and role registry implementation 2026-08-25 19:38:03 +07:00
test_state_layer_contract.py Finish A28: Subagents and role registry implementation 2026-08-25 19:38:03 +07:00
test_ui_claude_grok_connection.py fix(ci): stop hanging hermetic tests and unblock clean/headless runners 2026-08-27 12:03:37 +00:00
test_ui_model_discovery_reachability.py feat(ui): A12 — компактные карточки аккаунтов, доступность причин Н/Д, упорядочивание провайдеров и тест службы моделей 2026-08-23 13:30:20 +07:00
test_unified_health.py merge: A42, A45, A47, A48 — провайдеры, замеры MoE, общая память, интерфейс по макетам 2026-08-31 17:04:56 +07:00
test_updater.py feat(updater): in-app updates based on main repo release commits (A27 Pass 1) 2026-08-25 17:54:51 +07:00
test_web_api_security.py feat(A15): веб-API, общий ActionExecutor и порт путей на Linux 2026-08-23 19:45:13 +07:00
test_web_client_contract.py fix(security): токен сравнивался обычным !=, вопреки контракту 2026-08-25 10:21:40 +07:00
test_web_handlers_dom_contract.js Fix account slot isolation and add background checks with per-account model discovery 2026-08-31 18:42:41 +07:00
test_web_parity_a21.py feat(integration): consolidate A28, A29 and A30 on top of origin/main with green release gate 2026-08-26 09:10:10 +07:00
test_web_snapshot_freshness.py fix(web): квоты не подтягивались — прогрев кэша и пересбор снапшота 2026-08-23 21:32:26 +07:00
test_workflow_routes_a48.js Route workflow arrows through row gaps with semantic colors 2026-08-31 16:12:00 +07:00
test_workflow_service_a30.py fix(roles): 19 агентов вместо 13, шесть пар неотличимы по названию; поиск локальных серверов 2026-08-30 20:46:25 +07:00
test_workspace_a48.js feat(ui): A48 workspace layout draft awaiting authenticated visual QA 2026-08-31 15:25:15 +07:00