477274f1d9
The schema validation added in this PR (#34250) rejected underscore- prefixed config keys like '_test.shim_marker', breaking the Docker privilege-drop test suite (tests/docker/test_docker_exec_privilege_drop.py) which writes such markers via 'hermes config set _test.<marker> 1' to probe config.yaml file ownership after the UID-drop shim runs. Ten Docker tests failed in build-amd64 CI for this reason: test_shim_drops_root_to_hermes_uid (_test.shim_marker) test_shim_short_circuits_for_non_root (_test.shim_short_circuit) test_shim_opt_out_keeps_root (_test.opt_out) test_shim_opt_out_strict_truthiness[*] (_test.falsy) x6 test_e2e_login_then_supervised_gateway (_test.e2e_marker) Fix: treat a leading underscore on the TOP-LEVEL segment as an internal/test marker that bypasses schema validation. Mirrors Python's own '_private' convention. The escape is narrow: - Only the first segment is checked, so a genuine typo in a sub-key under a known top-level key (e.g. 'agent._max_turns') is still flagged. - Real typos ('agent.max_turn' -> 'agent.max_turns') still caught. - The headline #34067 bug ('gateway.discord.gateway_restart_notification') still caught. Tests (5 new in TestValidateConfigKey): - 4 parametrized cases for accepted underscore-prefixed keys (_test.shim_marker, _internal, _test.nested.deep.marker, _x) - test_underscore_only_first_segment_escapes: confirms agent._max_turns (underscore in a SUB-key, not the top) is still rejected. All 58 tests in test_set_config_value.py pass. Refs: #34067 #34250 Co-authored-by: Cursor <cursoragent@cursor.com>