From a57fd7ea0947cdf6d916263e843798fe6f136ac9 Mon Sep 17 00:00:00 2001 From: Kimi Agent Date: Sat, 14 Mar 2026 21:29:11 -0400 Subject: [PATCH 1/2] [loop-cycle-30] fix: gitea-mcp binary name + test stabilization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. gitea-mcp → gitea-mcp-server (brew binary name). Fixes Timmy's Gitea triage — MCP server can now be found on PATH. 2. Mark test_returns_dict_with_expected_keys as @pytest.mark.slow — it runs pytest recursively and always exceeds the 30s timeout. 3. Fix ruff F841 lint in test_cli.py (unused result= variable). --- src/config.py | 2 +- src/timmy/mcp_tools.py | 2 +- tests/timmy/test_cli.py | 2 +- tests/timmy/test_introspection.py | 2 ++ 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/config.py b/src/config.py index c27b17c..503d2a2 100644 --- a/src/config.py +++ b/src/config.py @@ -252,7 +252,7 @@ class Settings(BaseSettings): # ── MCP Servers ──────────────────────────────────────────────────── # External tool servers connected via Model Context Protocol (stdio). - mcp_gitea_command: str = "gitea-mcp -t stdio" + mcp_gitea_command: str = "gitea-mcp-server -t stdio" mcp_filesystem_command: str = "npx -y @modelcontextprotocol/server-filesystem" mcp_timeout: int = 15 diff --git a/src/timmy/mcp_tools.py b/src/timmy/mcp_tools.py index 66cc703..128c9b4 100644 --- a/src/timmy/mcp_tools.py +++ b/src/timmy/mcp_tools.py @@ -40,7 +40,7 @@ def _parse_command(command_str: str) -> tuple[str, list[str]]: """Split a command string into (executable, args). Handles ``~/`` expansion and resolves via PATH if needed. - E.g. ``"gitea-mcp -t stdio"`` → ``("/Users/x/go/bin/gitea-mcp", ["-t", "stdio"])`` + E.g. ``"gitea-mcp-server -t stdio"`` → ``("/opt/homebrew/bin/gitea-mcp-server", ["-t", "stdio"])`` """ parts = command_str.split() executable = os.path.expanduser(parts[0]) diff --git a/tests/timmy/test_cli.py b/tests/timmy/test_cli.py index f069048..83c5240 100644 --- a/tests/timmy/test_cli.py +++ b/tests/timmy/test_cli.py @@ -282,7 +282,7 @@ def test_repl_skips_empty_input(): patch("timmy.session.chat") as mock_chat, ): mock_chat.return_value = "Response" - result = runner.invoke(app, ["repl"]) + runner.invoke(app, ["repl"]) # chat should only be called once (for "hello"), empty lines are skipped, exit breaks assert mock_chat.call_count == 1 diff --git a/tests/timmy/test_introspection.py b/tests/timmy/test_introspection.py index c143947..c91989a 100644 --- a/tests/timmy/test_introspection.py +++ b/tests/timmy/test_introspection.py @@ -3,6 +3,7 @@ from unittest.mock import MagicMock, patch import httpx +import pytest def test_get_system_info_returns_dict(): @@ -163,6 +164,7 @@ class TestGetOllamaModelExactMatch: class TestRunSelfTests: """Tests for run_self_tests() — Timmy's self-verification tool.""" + @pytest.mark.slow def test_returns_dict_with_expected_keys(self): """run_self_tests should return structured test results.""" from timmy.tools_intro import run_self_tests From 874f7f83911662bb50a3164e066ad0a602275b71 Mon Sep 17 00:00:00 2001 From: Kimi Agent Date: Sat, 14 Mar 2026 21:32:54 -0400 Subject: [PATCH 2/2] policy: add QA philosophy and dogfooding mandate to AGENTS.md --- AGENTS.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 543ca2f..0dcffa0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -69,6 +69,46 @@ The Hermes loop orchestrator must: --- +## QA Philosophy — File Issues, Don't Stay Quiet + +Every agent is a quality engineer. When you see something wrong, broken, +slow, or missing — **file a Gitea issue**. Don't fix it silently. Don't +ignore it. Don't wait for someone to notice. + +**Escalate bugs:** +- Test failures → file with traceback, tag `[bug]` +- Flaky tests → file with reproduction details +- Runtime errors → file with steps to reproduce +- Broken behavior on main → file IMMEDIATELY + +**Propose improvements — don't be shy:** +- Slow function? File `[optimization]` +- Missing capability? File `[feature]` +- Dead code / tech debt? File `[refactor]` +- Idea to make Timmy smarter? File `[timmy-capability]` +- Gap between SOUL.md and reality? File `[soul-gap]` + +Bad ideas get closed. Good ideas get built. File them all. + +When the issue queue runs low, that's a signal to **look harder**, not relax. + +## Dogfooding — Timmy Is Our Product, Use Him + +Timmy is not just the thing we're building. He's our teammate and our +test subject. Every feature we give him should be **used by the agents +building him**. + +- When Timmy gets a new tool, start using it immediately. +- When Timmy gets a new capability, integrate it into the workflow. +- When Timmy fails at something, file a `[timmy-capability]` issue. +- His failures are our roadmap. + +The goal: Timmy should be so woven into the development process that +removing him would hurt. Triage, review, architecture discussion, +self-testing, reflection — use every tool he has. + +--- + ## Agent Roster ### Build Tier