Files
hermes-agent/scripts/ci/docs_drift_baseline.json
Teknium 4e8fe569e4 feat(ci): new config keys and slash commands must ship with docs
DEFAULT_CONFIG changed 183 times in 30 days and nothing checked that a new
key reached the docs; /pause (the global emergency stop) went undocumented
for two months.

scripts/ci/check_docs_drift.py lists every DEFAULT_CONFIG leaf and every
registered slash command and finds the ones the docs never mention. A key is
documented by its dotted path, a placeholder path in inline code
(`auxiliary.<task>.timeout`, `display.pet.*`), or a YAML example nesting it
under its parents; a slash command by a `/name` row in
reference/slash-commands.md.

The 132 keys undocumented today are baselined in docs_drift_baseline.json;
tests/ci/test_docs_drift.py fails only on NEW gaps, so it never blocks an
unrelated PR, and documenting a baselined key never fails. Deterministic,
stdlib + repo imports, ~1s.

/pause is documented here, so the slash-command baseline starts empty.
contributing.md says what to do when the test fails.
2026-10-11 05:09:46 -07:00

138 lines
4.6 KiB
JSON

{
"config": [
"agent.build_wait_timeout",
"agent.coding_context",
"agent.empty_response_guard.cost_threshold_usd",
"agent.empty_response_guard.enabled",
"agent.environment_hint",
"agent.environment_probe",
"agent.gateway_notify_interval",
"agent.gateway_startup_restore_drain_timeout",
"agent.gateway_startup_warmup_timeout",
"agent.gateway_timeout_warning",
"agent.intent_ack_continuation",
"agent.parallel_tool_call_guidance",
"agent.reasoning_echo",
"agent.sanitizer_heal_escalation_threshold",
"agent.task_completion_guidance",
"attachments.storage",
"bot_mode.turn_wait_seconds",
"browser.allow_unsafe_evaluate",
"browser.extension_control.developer_mode",
"compression.abort_on_summary_failure",
"compression.max_attempts",
"computer_use.ax_max_elements",
"computer_use.capture_after_mode",
"computer_use.max_image_dimension",
"context.memory_trim.cooldown_seconds",
"context.memory_trim.enabled",
"context.memory_trim.info_log_min_delta_mb",
"context.memory_trim.log_every_n",
"cron.output_retention",
"cron.session_db_timeout_seconds",
"dashboard.compute_host_heartbeat_secs",
"dashboard.compute_host_respawn_max",
"database.journal_size_limit",
"database.wal_autocheckpoint",
"delegation.inherit_mcp_toolsets",
"delegation.max_summary_chars",
"delegation.subagent_auto_approve",
"desktop.auto_continue.enabled",
"desktop.auto_continue.freshness_minutes",
"desktop.auto_continue.max_attempts",
"desktop.disable_gpu",
"desktop.password_store",
"desktop.renderer_accessibility",
"discord.approval_mentions",
"discord.dm_role_auth_guild",
"discord.server_actions",
"display.battery",
"display.busy_steer_ack_enabled",
"display.cli_refresh_interval",
"display.copy_shortcut",
"display.ephemeral_system_ttl",
"display.final_response_markdown",
"display.friendly_tool_labels",
"display.inline_diffs",
"display.persist_prompts",
"display.persistent_output",
"display.persistent_output_max_lines",
"display.platforms.slack.streaming",
"display.reasoning_full",
"display.resume_exchanges",
"display.resume_max_assistant_chars",
"display.resume_max_assistant_lines",
"display.resume_max_user_chars",
"display.resume_skip_tool_only",
"display.tui_agents_nudge",
"display.tui_auto_resume_recent",
"display.tui_native",
"display.turn_completion_explainer",
"display.user_message_preview.first_lines",
"display.user_message_preview.last_lines",
"doctor.live_probe_timeout",
"gateway.restart_loop_guard.max_gap_seconds",
"gateway.restart_loop_guard.max_restarts",
"gateway.restart_loop_guard.window_seconds",
"gateway.scale_to_zero.idle_timeout_minutes",
"kanban.notify_in_gateway",
"kanban.worker_log_backup_count",
"kanban.worker_log_rotate_bytes",
"local_runtime.models_max",
"local_runtime.port",
"logging.backup_count",
"logging.level",
"logging.max_size_mb",
"mattermost.free_response_channels",
"mattermost.require_mention",
"max_live_sessions",
"mcp.auto_reload_on_config_change",
"mcp_discovery_timeout",
"mcp_single_query_discovery_timeout",
"moa.active_preset",
"moa.save_traces",
"moa.trace_dir",
"models_dev.url",
"monitoring.gateway_health_export.diagnostic_events_enabled",
"monitoring.gateway_health_export.export_interval_seconds",
"monitoring.gateway_health_export.logs_export_interval_seconds",
"monitoring.gateway_health_export.metrics_enabled",
"monitoring.gateway_health_export.resource_attributes.deployment.environment.name",
"monitoring.gateway_health_export.resource_attributes.service.name",
"monitoring.gateway_health_export.warning_error_events_enabled",
"monitoring.install_id",
"nous.guest",
"paste_collapse_char_threshold",
"paste_collapse_threshold",
"paste_collapse_threshold_fallback",
"security.acked_advisories",
"security.protected_instruction_extra_patterns",
"security.protected_instruction_files",
"sessions.auto_archive_days",
"sessions.fts_optimize_notice",
"sessions.show_subagents",
"stt.elevenlabs.diarize",
"stt.elevenlabs.language_code",
"stt.elevenlabs.model_id",
"stt.elevenlabs.tag_audio_events",
"telegram.extra.allow_cjk_rich_messages",
"telegram.extra.rich_drafts",
"telegram.extra.rich_messages",
"telemetry.shared_metrics.endpoint",
"terminal.daemon_term_grace_seconds",
"terminal.degraded_mode",
"terminal.docker_shm_size",
"terminal.modal_mode",
"tts.deepinfra.model",
"tts.deepinfra.voice",
"updates.refresh_cua_driver",
"vault.bitwarden.binary_path",
"vault.onepassword.binary_path",
"voice.gpt_live.model",
"voice.thinking_sound",
"wake_word.sherpa.model_dir",
"x_search.reasoning_effort"
],
"slash_commands": []
}