All checks were successful
Tests / Declarative: Post Actions passed: 1205
Two changes to how this reads and behaves on real service repositories. The fixture rules were stated to Hermes on every job, so it reasoned about them out loud and that reasoning was published verbatim into service issue trackers - ariadne/404 opened with 'The job is ariadne, not hermes-triage-demo, so the reserved demo fixture classification and repair action are forbidden'. That reads as though the system exists to serve a demonstration. Those rules are now appended only for the fixture job, so a real service is never told about them and cannot repeat them; the demo classification is unreachable elsewhere by construction rather than by instruction. The prompt also asks for language aimed at a maintainer who knows nothing about how triage is configured, and points at the structured test evidence first now that junit publishes it. The duplicate guard refused a proposal whenever any repair pull request was open, which meant one unreviewed fix blocked every later one across the repository. It now enforces a ceiling instead, ARIADNE_HERMES_CODE_MAX_OPEN_PROPOSALS, default 64. That is a review-capacity limit, not a correctness one: proposals are cheap to make and expensive to read. Auto-triage settings move to their own module; they had grown a section's worth and pushed settings_sections.py past its size budget. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
54 lines
2.5 KiB
Python
54 lines
2.5 KiB
Python
"""Auto-triage settings, kept apart because they have grown a section's worth.
|
|
|
|
Splitting them out keeps settings_sections.py within its size budget and
|
|
puts every triage knob in one place to review.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from .settings_env import _env, _env_bool, _env_float, _env_int, _pair_map
|
|
|
|
|
|
def _hermes_autotriage_config() -> dict[str, Any]:
|
|
return {
|
|
"hermes_autotriage_enabled": _env_bool("ARIADNE_HERMES_AUTOTRIAGE_ENABLED", "false"),
|
|
"hermes_autotriage_job_allowlist": [
|
|
item.strip()
|
|
for item in _env("ARIADNE_HERMES_AUTOTRIAGE_JOB_ALLOWLIST", "hermes-triage-demo").split(",")
|
|
if item.strip()
|
|
],
|
|
"hermes_autoremediation_enabled": _env_bool("ARIADNE_HERMES_AUTOREMEDIATION_ENABLED", "false"),
|
|
"hermes_allowed_actions": [
|
|
item.strip()
|
|
for item in _env("ARIADNE_HERMES_ALLOWED_ACTIONS", "repair_demo_fixture").split(",")
|
|
if item.strip()
|
|
],
|
|
"hermes_action_classifications": _pair_map(
|
|
_env(
|
|
"ARIADNE_HERMES_ACTION_CLASSIFICATIONS",
|
|
"known_demo_fixture_failure=repair_demo_fixture,transient_infra_failure=retry_transient_infra",
|
|
)
|
|
),
|
|
"hermes_parameterized_jobs": [
|
|
item.strip()
|
|
for item in _env("ARIADNE_HERMES_PARAMETERIZED_JOBS", "hermes-triage-demo").split(",")
|
|
if item.strip()
|
|
],
|
|
"hermes_min_confidence": _env_float("ARIADNE_HERMES_MIN_CONFIDENCE", 0.85),
|
|
"hermes_hung_build_minutes": _env_float("ARIADNE_HERMES_HUNG_BUILD_MINUTES", 45.0),
|
|
"hermes_max_branches": _env_int("ARIADNE_HERMES_MAX_BRANCHES", 5),
|
|
"hermes_job_namespaces": _pair_map(_env("ARIADNE_HERMES_JOB_NAMESPACES", "")),
|
|
"hermes_code_max_open_proposals": _env_int("ARIADNE_HERMES_CODE_MAX_OPEN_PROPOSALS", 64),
|
|
"hermes_max_actions_per_incident": _env_int("ARIADNE_HERMES_MAX_ACTIONS_PER_INCIDENT", 1),
|
|
"hermes_api_url": _env(
|
|
"ARIADNE_HERMES_API_URL",
|
|
"http://hermes.hermes.svc.cluster.local:8642",
|
|
).rstrip("/"),
|
|
"hermes_api_key": _env("ARIADNE_HERMES_API_KEY", ""),
|
|
"hermes_run_timeout_seconds": _env_float("ARIADNE_HERMES_RUN_TIMEOUT_SECONDS", 420.0),
|
|
"hermes_demo_namespace": _env("ARIADNE_HERMES_DEMO_NAMESPACE", "hermes-triage-demo"),
|
|
"hermes_demo_fixture_configmap": _env("ARIADNE_HERMES_DEMO_FIXTURE_CONFIGMAP", "hermes-triage-demo-fixture"),
|
|
}
|