kin: auto-commit after pipeline

This commit is contained in:
Gros Frumos 2026-03-17 14:03:53 +02:00
parent 04cbbc563b
commit b6f40a6ace
9 changed files with 1690 additions and 16 deletions

View file

@ -599,19 +599,19 @@ class TestNonInteractive:
@patch.dict("os.environ", {"KIN_AGENT_TIMEOUT": ""}, clear=False)
@patch("agents.runner.subprocess.run")
def test_noninteractive_uses_600s_timeout(self, mock_run, conn):
def test_noninteractive_uses_model_timeout(self, mock_run, conn):
mock_run.return_value = _mock_claude_success({"result": "ok"})
run_agent(conn, "debugger", "VDOL-001", "vdol", noninteractive=True)
call_kwargs = mock_run.call_args[1]
assert call_kwargs.get("timeout") == 600
assert call_kwargs.get("timeout") == 1200 # sonnet default
@patch.dict("os.environ", {"KIN_NONINTERACTIVE": ""})
@patch("agents.runner.subprocess.run")
def test_interactive_uses_600s_timeout(self, mock_run, conn):
def test_interactive_uses_model_timeout(self, mock_run, conn):
mock_run.return_value = _mock_claude_success({"result": "ok"})
run_agent(conn, "debugger", "VDOL-001", "vdol", noninteractive=False)
call_kwargs = mock_run.call_args[1]
assert call_kwargs.get("timeout") == 600
assert call_kwargs.get("timeout") == 1200 # sonnet default
@patch.dict("os.environ", {"KIN_NONINTERACTIVE": ""})
@patch("agents.runner.subprocess.run")
@ -630,17 +630,44 @@ class TestNonInteractive:
run_agent(conn, "debugger", "VDOL-001", "vdol", noninteractive=False)
call_kwargs = mock_run.call_args[1]
assert call_kwargs.get("stdin") == subprocess.DEVNULL
assert call_kwargs.get("timeout") == 600
assert call_kwargs.get("timeout") == 1200 # sonnet default
@patch.dict("os.environ", {"KIN_AGENT_TIMEOUT": "900"})
@patch("agents.runner.subprocess.run")
def test_custom_timeout_via_env_var(self, mock_run, conn):
"""KIN_AGENT_TIMEOUT overrides the default 600s timeout."""
"""KIN_AGENT_TIMEOUT overrides model-based timeout."""
mock_run.return_value = _mock_claude_success({"result": "ok"})
run_agent(conn, "debugger", "VDOL-001", "vdol")
call_kwargs = mock_run.call_args[1]
assert call_kwargs.get("timeout") == 900
@patch.dict("os.environ", {"KIN_AGENT_TIMEOUT": ""})
@patch("agents.runner.subprocess.run")
def test_opus_timeout_1800(self, mock_run, conn):
"""Opus model gets 1800s (30 min) timeout."""
mock_run.return_value = _mock_claude_success({"result": "ok"})
run_agent(conn, "debugger", "VDOL-001", "vdol", model="opus")
call_kwargs = mock_run.call_args[1]
assert call_kwargs.get("timeout") == 1800
@patch.dict("os.environ", {"KIN_AGENT_TIMEOUT": ""})
@patch("agents.runner.subprocess.run")
def test_haiku_timeout_600(self, mock_run, conn):
"""Haiku model gets 600s (10 min) timeout."""
mock_run.return_value = _mock_claude_success({"result": "ok"})
run_agent(conn, "debugger", "VDOL-001", "vdol", model="haiku")
call_kwargs = mock_run.call_args[1]
assert call_kwargs.get("timeout") == 600
@patch.dict("os.environ", {"KIN_AGENT_TIMEOUT": "999"})
@patch("agents.runner.subprocess.run")
def test_env_timeout_overrides_model(self, mock_run, conn):
"""KIN_AGENT_TIMEOUT env var overrides model-based timeout."""
mock_run.return_value = _mock_claude_success({"result": "ok"})
run_agent(conn, "debugger", "VDOL-001", "vdol", model="opus")
call_kwargs = mock_run.call_args[1]
assert call_kwargs.get("timeout") == 999
@patch("agents.runner.subprocess.run")
def test_allow_write_adds_skip_permissions(self, mock_run, conn):
mock_run.return_value = _mock_claude_success({"result": "ok"})
@ -1236,12 +1263,12 @@ class TestRegressionKIN056:
@patch.dict("os.environ", {"KIN_NONINTERACTIVE": "1", "KIN_AGENT_TIMEOUT": ""})
@patch("agents.runner.subprocess.run")
def test_web_noninteractive_timeout_is_600(self, mock_run, conn):
"""Web путь: KIN_NONINTERACTIVE=1 → timeout = 600s (не 300s)."""
def test_web_noninteractive_timeout_uses_model_default(self, mock_run, conn):
"""Web путь: KIN_NONINTERACTIVE=1 → timeout = model default (sonnet=1200s)."""
mock_run.return_value = _mock_claude_success({"result": "ok"})
run_agent(conn, "debugger", "VDOL-001", "vdol")
call_kwargs = mock_run.call_args[1]
assert call_kwargs.get("timeout") == 600
assert call_kwargs.get("timeout") == 1200
@patch("agents.runner.subprocess.run")
def test_web_and_cli_paths_use_same_timeout(self, mock_run, conn):