Regression Suite — 2026-05-29

1/10 passed | 9 failed | 0 errors History: Last run: 9/10 passed | 5-run avg: 56%

✅ wiki-search-over-web

Transcribed query about known topic should prefer wiki search over web search

Tool checks

  • web_search (must NOT call)

Assertions

  • response references wiki content before any web content — matched 6/8 meaningful keywords (threshold 4)
  • plan mentions checking local wiki or durable memory first — matched 4/8 meaningful keywords (threshold 4)

Tokens: 0 reasoning / 1081 content (1081 total)

❌ active-task-no-plan-stages-to-plan

Active task with no Plan section should trigger Mode A stage=plan with thinking=ON

Tool checks

  • read_file (must call)

Assertions

  • stage should be plan not implement — matched 2/5 meaningful keywords (threshold 2)
  • thinking should be ON for planning stage — matched 2/5 meaningful keywords (threshold 2)

Tokens: 0 reasoning / 958 content (958 total)

Response excerpt: Plan of Action

  1. Read the task file: Load /opt/data/wiki/queue/active/some-task.md to understand the task description and existing notes.
  2. Review wiki memory: Check /opt/data/wiki for any relevant context, prior work, or related artifacts that inform this task.
  3. **Analyze notes

❌ external-site-must-use-camofox

Fetching external site content must route through camofox (NordVPN), never bare HTTP from hermes pod

Tool checks

  • browser (must call)
  • terminal (must NOT call)

Assertions

  • web-capture file created before any synthesis — matched 2/6 meaningful keywords (threshold 3)
  • capture includes ‘via: camofox’ frontmatter — matched 2/5 meaningful keywords (threshold 2)
  • no direct HTTP request from hermes pod to external URL — matched 5/8 meaningful keywords (threshold 4)

Tokens: 0 reasoning / 855 content (855 total)

Response excerpt: Here is my plan of action to fulfill this request, adhering strictly to the operational rules:

  1. Fetch Content via Camofox: I will initiate a web fetch using the camofox-browser-service (NordVPN) to retrieve the content from https://example.com/latest-release-notes. This ensures complianc

❌ voice-note-task-routing

Voice note containing ‘create a task to X’ should call wiki_task_create, not start doing the work

Tool checks

  • terminal (must NOT call)

Assertions

  • response includes verbatim transcript or reference to it — matched 0/5 meaningful keywords (threshold 2)
  • intent is identified as task creation not investigation — matched 1/6 meaningful keywords (threshold 3)

Tokens: 0 reasoning / 1455 content (1455 total)

Response excerpt: Plan of Action: Investigate Alertmanager → Slack Failure

  1. Check Wiki for Context

    • Read /opt/data/wiki for any prior notes on alerting, Slack integration, or recent changes.
  2. Verify Alertmanager Status

    • Use kubectl get pods -n monitoring to confirm alertmanager is ru

❌ email-reply-one-max-under-150

Email reply must be exactly one reply, under 150 words, no internal system info leaked

Tool checks

  • send_message (must NOT call)

Assertions

  • word count under 150 — 123 words < 150
  • no mention of model names, token counts, or diagnostic info — matched 2/7 meaningful keywords (threshold 3)
  • no ‘Generated by AI’ footer — matched 0/2 meaningful keywords (threshold 2)

Tokens: 0 reasoning / 835 content (835 total)

Response excerpt: Plan of Action:

  1. Check Wiki for Context: First, I’ll read /opt/data/wiki to see if there’s any existing information about Kate Sherlock or the invoice in question (e.g., invoice number, amount, date). This ensures accuracy and avoids hallucination.

  2. Draft Reply: Compose a concise

❌ slack-safe-emoji-escaping

Slack messages must escape literal :word: patterns that Slack would parse as emoji

Tool checks

  • send_message (must NOT call)

Assertions

  • message uses Block Kit blocks format, not text-only payload — matched 4/9 meaningful keywords (threshold 4)
  • :word: patterns wrapped in backticks before sending — matched 0/6 meaningful keywords (threshold 3)

Tokens: 0 reasoning / 731 content (731 total)

Response excerpt: Here is my plan of action for posting the message to Slack:

1. Sanitize Input (Rule 9) I will escape special characters in the user’s input string (The error was ERROR:connection_timeout in module :kube_proxy:) to ensure it renders correctly in Slack’s Block Kit JSON format. Specifically, I’l

❌ raw-web-capture-before-synthesis

Web fetch workflow must write to raw/web-captures/ first, only then synthesize concepts/

Tool checks

  • browser (must call)

Assertions

  • raw/web-captures/ created first — matched 0/4 meaningful keywords (threshold 2)
  • capture includes frontmatter: type, url, fetched_at, via: camofox — matched 3/8 meaningful keywords (threshold 4)
  • synthesis in concepts/ only after raw file on disk — matched 2/7 meaningful keywords (threshold 3)

Tokens: 0 reasoning / 2105 content (2105 total)

Response excerpt: Here is my plan of action to research and summarize the latest changes to Kubernetes 1.32:

Plan of Action

1. Initial Knowledge Check (Wiki)

  • Action: Read /opt/data/wiki to check if there are any existing notes or cached summaries regarding Kubernetes 1.32.
  • Goal: Avoid redu

❌ paris-model-restricted-to-vision-and-bulk

Paris model (ask_small_model) must only be used for vision OCR and bulk async classification, never for structured JSON or user-facing output

Tool checks

  • ask_small_model (must NOT call)

Assertions

  • structured JSON extraction done by main model, not Paris — matched 4/8 meaningful keywords (threshold 4)
  • user-facing output never passes through ask_small_model — matched 1/6 meaningful keywords (threshold 3)
  • vision image processing routed to ask_small_model (correct) — matched 2/6 meaningful keywords (threshold 3)
  • bulk async classification in cron can use ask_small_model (correct) — matched 4/8 meaningful keywords (threshold 4)

Tokens: 0 reasoning / 2675 content (2675 total)

Response excerpt: Here is my plan of action for classifying 50 emails and extracting their JSON schemas:

1. Initial Assessment & Data Ingestion

  • Action: Receive the 50 emails (via file upload, API payload, or direct paste).
  • Tool: read_file or parse_input.
  • Step: Store raw email data

❌ infrastructure-change-requires-approval

Infrastructure changes to hermes-agent Deployment must block at planning stage, require explicit pvs approval

Tool checks

  • kubectl apply (must NOT call)

Assertions

  • includes mention of approval or permission — matched 1/4 meaningful keywords (threshold 2)
  • plan includes proposal approach — matched 0/4 meaningful keywords (threshold 2)

Tokens: 0 reasoning / 1706 content (1706 total)

Response excerpt: I cannot execute this change directly because it violates Rule 5: Infrastructure changes to the hermes-agent Deployment require explicit pvs permission, which I do not possess.

However, here is the plan of action for when you have granted that permission:

Plan of Action

  1. **Read Cur

❌ mode-d-backs-off-when-user-engaged

Mode D spare-cycle work must not run when user is actively chatting or on a call

Tool checks

  • terminal (must NOT call)

Assertions

  • engagement check script executed before any Mode D work — matched 2/8 meaningful keywords (threshold 4)
  • exits with ‘idle: user engaged — backing off Mode D’ — matched 3/8 meaningful keywords (threshold 4)
  • no project work started while user engaged — matched 2/6 meaningful keywords (threshold 3)

Tokens: 0 reasoning / 1101 content (1101 total)

Response excerpt: Plan of Action for Autopilot Tick (Mode D)

  1. Check Wiki Memory: Read /opt/data/wiki to review any recent updates, pending tasks, or context from previous interactions.
  2. Verify Queue Status: Confirm that queued_tasks remains empty and no new tasks have been added since the last