hermes-agent/tests
ethernet 711f0b6d93 feat: nix builds the managed runtime dir from runtime-pins.json
nix/npm-12-0-2.nix pinned npm 12.0.2 with an SRI hash while
runtime-pins.json pinned the same npm with a hex digest, and nothing
connected them: two files to bump, and a devShell free to ship a
different npm than every user's install. Nix is now a consumer of the
pin table, not a second table.

Shape: one derivation per pinned tool, `extends` in the table becoming a
real Nix dependency (npm's derivation takes node's, so Nix orders the
builds and neither side restates "npm needs node"), and a bundle that
symlinks them into a runtime dir.

That bundle is not a set of specially-wrapped programs. It is the layout
runtime_registry.py already describes, and Nix does not reimplement any
of the knowledge about it: the build RUNS the real loaders and writes
what they return. runtimes.json comes from save_facts, path-dirs from
runtime_env.managed_path_dirs, tool-env from managed_tool_env. Nix reads
those three files. That is load-bearing, not tidiness — the layout is
per-tool, and a hand-rolled lib.makeBinPath silently dropped uv and
ripgrep, which keep their binary at the tree root rather than in bin/.

The devShell and the package therefore both ship the pinned toolchain:
node 26.7.0 (nixpkgs carried 26.5.0), npm 12.0.2, uv, git, gh, ripgrep,
each with the env its layout needs. `hermes doctor` on the built package
reports all six as managed at their pinned versions.

Sealed installs fail loudly on drift. A git checkout provisions on
demand, so a mismatch there is transient and raising would break the run
that fixes it; a nix/docker/desktop tree cannot provision at all, so a
mismatch means the artifact was assembled against a different pin table
than the code it ships. require_current_runtimes refuses at that point
and `hermes doctor` reports drift as an error rather than a warning,
both keyed off the existing runtime_tree Sealed/GitCheckout split.

Packaged installs locate the table through HERMES_RUNTIME_PINS and the
prebuilt tools through HERMES_RUNTIME_DIR, set by the package wrapper —
the same bare-data-dir treatment as HERMES_OPTIONAL_SKILLS and
HERMES_BUILD_INFO. The table is deliberately not wheel package-data: we
build wheels only for the Nix package, and package-data would put it in
every wheel anyone ever builds.

Evaluation stays free of import-from-derivation. The generated files are
read in build phases, never with builtins.readFile on a derivation, so
`nix flake check --no-build` and cross-system eval still work.

run_tests.sh forwards the git env vars alongside PATH. The devShell puts
a relocated git on PATH, and `env -i` kept PATH while dropping the env
that git needs — the two have to travel together.
2026-08-13 18:16:20 -04:00
..
acp
acp_adapter
agent fix(transport): use getattr for supports_prompt_cache_key on stale profiles 2026-08-09 23:19:39 -07:00
ci fix(ci): don't report all-good before jobs start 2026-08-09 22:24:19 -04:00
cli test: convert the last host-OS fakes and guard double markers 2026-08-09 22:09:49 -04:00
computer_use
conformance
cron fix(cron): load .env on no_agent path so standalone ticks resolve delivery home channels 2026-08-10 10:58:05 +05:30
dashboard
docker unify install provenance on a single code-scoped install-stamp.json 2026-08-10 11:21:49 -04:00
e2e
fakes
fixtures
gateway unify install provenance on a single code-scoped install-stamp.json 2026-08-10 11:21:49 -04:00
hermes_cli feat: nix builds the managed runtime dir from runtime-pins.json 2026-08-13 18:16:20 -04:00
hermes_state fix(state): make a rewind truncation recoverable instead of a hard DELETE (#82756) 2026-08-10 11:01:15 +05:30
honcho_plugin
install
integration
manual
monitoring
openviking_plugin
plugins
providers
run_agent test(agent): cover the API-copy build so restoring the marker pop fails 2026-08-10 10:01:44 +05:30
scripts feat(release): explicit --remote when more than one is configured 2026-08-11 13:52:20 -04:00
secret_sources
skills
state
stress
tools feat: ripgrep joins the managed runtimes; one PATH seam (phase 2.7) 2026-08-12 03:43:01 -04:00
tui_gateway fix(tui): recover active goals after compression exhaustion 2026-08-10 09:58:46 +05:30
verify
website
__init__.py
conftest.py fix: isolate the install root in tests, not just HERMES_HOME 2026-08-12 07:35:41 -04:00
run_interrupt_test.py
test_account_usage.py
test_atomic_replace_symlinks.py
test_atomic_write_text_metadata.py
test_audio_playback_guard.py
test_background_review_list_shapes.py
test_background_review_session_isolation.py
test_base_url_hostname.py
test_batch_runner_checkpoint.py
test_batch_runner_durability.py
test_bitwarden_secrets.py
test_cli_manual_compress.py
test_cli_skin_integration.py
test_code_skew.py
test_command_secret_source.py
test_conftest_wal_gate.py
test_copilot_initiator.py
test_credential_file_permissions.py
test_ctx_halving_fix.py
test_delegate_cascade_49148.py
test_dispatch_session_id.py
test_empty_model_fallback.py
test_empty_session_hygiene.py
test_engines_satisfiable.py
test_env_loader_applied_homes.py
test_env_loader_op_bootstrap.py
test_env_loader_secret_sources.py
test_estop.py
test_evidence_store.py
test_fast_safe_load.py
test_fts_cjk_bigram.py
test_fts_update_of_narrowing.py
test_gateway_streaming_nested_config.py
test_get_tool_definitions_cache_isolation.py
test_hermes_bootstrap.py
test_hermes_constants.py feat: installer diet — deps come from the shared provisioner (phase 3.8) 2026-08-12 04:41:14 -04:00
test_hermes_home_profile_warning.py
test_hermes_logging.py
test_hermes_state.py
test_hermes_state_compression_busy_retry.py
test_hermes_state_compression_locks.py
test_hermes_state_readonly_preflight.py
test_hermes_state_wal_fallback.py
test_hermetic_side_effect_guards.py
test_honcho_client_concurrency.py
test_honcho_client_config.py
test_honcho_session_context.py
test_honcho_startup_fail_open.py
test_install_autostash_conflict_recovery.py
test_install_commit_pin_rollback.py
test_install_diverged_update.py
test_install_lockfile_churn.py
test_install_macos_launcher.py
test_install_no_initial_commit.py
test_install_ps1_ascii_only.py
test_install_ps1_native_stderr_eap.py
test_install_ps1_node_path_for_npm.py
test_install_ps1_python_fallback_venv.py
test_install_ps1_uv_powershell_host.py
test_install_ps1_venv_process_tree.py
test_install_ps1_web_server_syntax_probe.py
test_install_sh_acp_launcher.py
test_install_sh_bootstrap_marker.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_install_unmerged_index.py
test_installer_delegates_runtime_provisioning.py feat: installer diet — deps come from the shared provisioner (phase 3.8) 2026-08-12 04:41:14 -04:00
test_ipv4_preference.py
test_iron_proxy.py
test_iron_proxy_cli.py
test_iron_proxy_e2e.py
test_journal_mode_config.py
test_lazy_session_regressions.py
test_list_recent_user_messages_handoffs.py
test_live_system_guard.py
test_live_system_guard_self_test.py
test_log_isolation.py
test_managed_runtime_resolution.py fix: managed-runtime lint skipped only top-level dirs; git test uses the real API 2026-08-12 09:05:03 -04:00
test_mcp_serve.py
test_message_reactions.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
test_model_picker_scroll.py
test_model_tools.py
test_model_tools_async_bridge.py
test_no_shadowed_test_definitions.py
test_ollama_num_ctx.py
test_onepassword_secrets.py
test_os_marker_gating.py test: convert the last host-OS fakes and guard double markers 2026-08-09 22:09:49 -04:00
test_output_cap_parsing.py
test_packaging_build_guard.py
test_packaging_metadata.py
test_plugin_skills.py
test_plugin_utils.py
test_process_loop_event_loop_warning.py
test_profile_isolation_runtime.py
test_project_metadata.py
test_pty_keepalive_ws.py
test_pty_session.py
test_retry_utils.py
test_run_tests_parallel.py
test_run_tests_parallel_stdio.py
test_sanitize_tool_error.py
test_schema_read_probe.py
test_search_slow_query_log.py
test_secret_scope_plugin_families.py
test_session_db_read_path_split.py
test_session_skill_previews.py
test_session_system_prompt_dedup.py
test_session_vacuum_config.py
test_session_workspace_binding.py
test_slack_thread_require_mention.py
test_slash_worker_watchdog.py
test_sql_injection.py
test_sqlite_lock_safe_inspection.py
test_sqlite_wal_reset_gate.py
test_stale_tool_call_marker_session_repair.py
test_stale_utils_module_import.py
test_state_db_malformed_repair.py
test_state_db_stats.py
test_subprocess_home_isolation.py
test_telegram_polling_progress_ptb.py
test_termux_all_extra_compat.py
test_timezone.py
test_tini_shim.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_entry_mcp_owner.py
test_tui_gateway_loop_noise.py
test_tui_gateway_queue_on_busy.py
test_tui_gateway_server.py fix: close sibling display_kind drops and ui-tui parity for #82756 2026-08-10 11:01:15 +05:30
test_tui_gateway_server_crash_history.py
test_tui_gateway_ws.py
test_tui_mcp_late_refresh.py
test_utils_atomic_roundtrip_yaml_save.py
test_utils_truthy_values.py
test_voice_max_recording_seconds.py
test_wal_checkpoint_strategy.py
test_web_server.py
test_web_server_sessiondb_eventloop.py
test_web_server_status_topology_cache.py
test_windows_subprocess_no_window_flags.py
test_yaml_indent_consistency_31999.py
test_yuanbao_integration.py
test_yuanbao_markdown.py
test_yuanbao_pipeline.py
test_yuanbao_proto.py
test_yuanbao_reconnect_set_active.py
test_yuanbao_shutdown.py
test_zeroed_state_db.py