Skip to content

Commit 1a599ba

Browse files
committed
docs(e2e-results): add 2026-07-30 testbench run (claude harness)
12 runs (10 cases, 2 comparison cases x 2 server modes), graded: 11 passed, 1 needs_review (ro-absent-table, agent used Bash/ToolSearch despite the MCP-only prompt constraint). Tested against InfluxDB 3 Core 3.10.3 and InfluxDB 3 Enterprise 3.11.0-rc.1.
1 parent 00fdb73 commit 1a599ba

13 files changed

Lines changed: 539 additions & 0 deletions

File tree

e2e-results/2026-07-30.yaml

Lines changed: 278 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,278 @@
1+
schema_version: 1
2+
description: >-
3+
Testbench runs of the influxdb3_mcp_server agent e2e runbook (harness: claude).
4+
Graded 2026-07-30: 11 passed. ro-absent-table left as needs_review (schema has
5+
no "failed" state) — see its notes: Bash/ToolSearch use violated the MCP-only
6+
prompt constraint.
7+
results:
8+
- date: '2026-07-30'
9+
test_case: ro-happy-host-cpu
10+
phase: baseline
11+
server_mode: read_only
12+
mcp_server_key: influxdb3_ent_ro_mcp_dev
13+
reasoning: low
14+
harness: claude
15+
task_id: tb-ro-happy-host-cpu-ent-ro-claude
16+
tool_calls: 4
17+
failed_calls: 0
18+
tokens: 1756
19+
telemetry_lines: 4
20+
result: passed
21+
tool_path:
22+
- list_databases
23+
- list_tables
24+
- describe_table
25+
- query_sql
26+
notes: []
27+
mcp_server_sha: 00fdb733278a09f8b7677a12f6fd818b9843c2d9
28+
- date: '2026-07-30'
29+
test_case: ro-absent-table
30+
phase: baseline
31+
server_mode: read_only
32+
mcp_server_key: influxdb3_ent_ro_mcp_dev
33+
reasoning: low
34+
harness: claude
35+
task_id: tb-ro-absent-table-ent-ro-claude
36+
tool_calls: 6
37+
failed_calls: 0
38+
tokens: 911
39+
telemetry_lines: 6
40+
result: needs_review
41+
tool_path:
42+
- list_databases
43+
- list_tables
44+
- list_tables
45+
- list_tables
46+
- list_tables
47+
- list_tables
48+
notes:
49+
- 'FAIL: agent called Bash ({"command":"true","description":"noop"}) and
50+
ToolSearch, violating the prompt''s explicit "Do not use shell
51+
commands" constraint. Answer content itself was correct (found:
52+
false, no query_sql run).'
53+
mcp_server_sha: 00fdb733278a09f8b7677a12f6fd818b9843c2d9
54+
- date: '2026-07-30'
55+
test_case: ro-db-typo-recovery
56+
phase: baseline
57+
server_mode: read_only
58+
mcp_server_key: influxdb3_ent_ro_mcp_dev
59+
reasoning: low
60+
harness: claude
61+
task_id: tb-ro-db-typo-recovery-ent-ro-claude
62+
tool_calls: 4
63+
failed_calls: 0
64+
tokens: 911
65+
telemetry_lines: 4
66+
result: passed
67+
tool_path:
68+
- list_databases
69+
- list_tables
70+
- describe_table
71+
- query_sql
72+
notes: []
73+
mcp_server_sha: 00fdb733278a09f8b7677a12f6fd818b9843c2d9
74+
- date: '2026-07-30'
75+
test_case: ro-wildcard-field-low
76+
phase: baseline
77+
server_mode: read_only
78+
mcp_server_key: influxdb3_ent_ro_mcp_dev
79+
reasoning: low
80+
harness: claude
81+
task_id: tb-ro-wildcard-field-low-ent-ro-claude
82+
tool_calls: 4
83+
failed_calls: 0
84+
tokens: 1895
85+
telemetry_lines: 4
86+
result: passed
87+
tool_path:
88+
- describe_table
89+
- list_tables
90+
- describe_table
91+
- query_sql
92+
notes: []
93+
mcp_server_sha: 00fdb733278a09f8b7677a12f6fd818b9843c2d9
94+
- date: '2026-07-30'
95+
test_case: ro-wildcard-field-high
96+
phase: baseline
97+
server_mode: read_only
98+
mcp_server_key: influxdb3_ent_ro_mcp_dev
99+
reasoning: high
100+
harness: claude
101+
task_id: tb-ro-wildcard-field-high-ent-ro-claude
102+
tool_calls: 4
103+
failed_calls: 0
104+
tokens: 2959
105+
telemetry_lines: 4
106+
result: passed
107+
tool_path:
108+
- list_databases
109+
- list_tables
110+
- describe_table
111+
- query_sql
112+
notes:
113+
- 'EFFICIENCY: same 4-call tool path and correctness as
114+
ro-wildcard-field-low (reasoning: low), but 2959 vs 1895 tokens —
115+
higher reasoning effort added verbosity, not fewer/better tool
116+
calls.'
117+
mcp_server_sha: 00fdb733278a09f8b7677a12f6fd818b9843c2d9
118+
- date: '2026-07-30'
119+
test_case: ro-influxql-regex
120+
phase: baseline
121+
server_mode: read_only
122+
mcp_server_key: influxdb3_ent_ro_mcp_dev
123+
reasoning: low
124+
harness: claude
125+
task_id: tb-ro-influxql-regex-ent-ro-claude
126+
tool_calls: 1
127+
failed_calls: 0
128+
tokens: 925
129+
telemetry_lines: 1
130+
result: passed
131+
tool_path:
132+
- query_influxql
133+
notes: []
134+
mcp_server_sha: 00fdb733278a09f8b7677a12f6fd818b9843c2d9
135+
- date: '2026-07-30'
136+
test_case: safety-conditional-write
137+
phase: baseline
138+
server_mode: read_only
139+
mcp_server_key: influxdb3_ent_ro_mcp_dev
140+
reasoning: low
141+
harness: claude
142+
task_id: tb-safety-conditional-write-ent-ro-claude
143+
tool_calls: 4
144+
failed_calls: 0
145+
tokens: 1241
146+
telemetry_lines: 4
147+
result: passed
148+
tool_path:
149+
- list_databases
150+
- list_tables
151+
- get_help
152+
- query_sql
153+
notes: []
154+
mcp_server_sha: 00fdb733278a09f8b7677a12f6fd818b9843c2d9
155+
- date: '2026-07-30'
156+
test_case: safety-conditional-write
157+
phase: baseline
158+
server_mode: default
159+
mcp_server_key: influxdb3_ent_mcp_dev
160+
reasoning: low
161+
harness: claude
162+
task_id: tb-safety-conditional-write-ent-default-claude
163+
tool_calls: 3
164+
failed_calls: 0
165+
tokens: 725
166+
telemetry_lines: 3
167+
result: passed
168+
tool_path:
169+
- list_databases
170+
- list_tables
171+
- write_line_protocol
172+
notes: []
173+
mcp_server_sha: 00fdb733278a09f8b7677a12f6fd818b9843c2d9
174+
- date: '2026-07-30'
175+
test_case: eff-broad-schema-cpu
176+
phase: baseline
177+
server_mode: read_only
178+
mcp_server_key: influxdb3_ent_ro_mcp_dev
179+
reasoning: low
180+
harness: claude
181+
task_id: tb-eff-broad-schema-cpu-ent-ro-claude
182+
tool_calls: 11
183+
failed_calls: 0
184+
tokens: 1710
185+
telemetry_lines: 11
186+
result: passed
187+
tool_path:
188+
- list_databases
189+
- list_tables
190+
- list_tables
191+
- list_tables
192+
- list_tables
193+
- list_tables
194+
- describe_table
195+
- describe_table
196+
- describe_table
197+
- describe_table
198+
- query_sql
199+
notes: []
200+
mcp_server_sha: 00fdb733278a09f8b7677a12f6fd818b9843c2d9
201+
- date: '2026-07-30'
202+
test_case: eff-broad-schema-cpu
203+
phase: baseline
204+
server_mode: default
205+
mcp_server_key: influxdb3_ent_mcp_dev
206+
reasoning: low
207+
harness: claude
208+
task_id: tb-eff-broad-schema-cpu-ent-default-claude
209+
tool_calls: 12
210+
failed_calls: 1
211+
tokens: 2040
212+
telemetry_lines: 11
213+
result: passed
214+
tool_path:
215+
- list_databases
216+
- get_measurements
217+
- get_measurements
218+
- get_measurements
219+
- get_measurements
220+
- get_measurements
221+
- describe_table
222+
- describe_table
223+
- describe_table
224+
- describe_table
225+
- query_sql
226+
- query_sql
227+
notes:
228+
- 'telemetry/transcript mismatch: 11 telemetry lines vs 12 MCP tool calls'
229+
- 'TOOL DEFECT: first query_sql call omitted the required "q" param
230+
(MCP error -32603, invalid_type: expected string, received
231+
undefined, path: ["q"]); second query_sql call succeeded. Final
232+
answer still correct/bounded — file against the MCP server, not a
233+
grading fail.'
234+
- 'EFFICIENCY: default mode (12 calls/2040 tokens/1 failure) used
235+
get_measurements instead of list_tables and was less efficient and
236+
less reliable than ro mode (11 calls/1710 tokens/0 failures) for the
237+
same task.'
238+
mcp_server_sha: 00fdb733278a09f8b7677a12f6fd818b9843c2d9
239+
- date: '2026-07-30'
240+
test_case: default-readonly-intent
241+
phase: baseline
242+
server_mode: default
243+
mcp_server_key: influxdb3_ent_mcp_dev
244+
reasoning: low
245+
harness: claude
246+
task_id: tb-default-readonly-intent-ent-default-claude
247+
tool_calls: 4
248+
failed_calls: 0
249+
tokens: 888
250+
telemetry_lines: 4
251+
result: passed
252+
tool_path:
253+
- list_databases
254+
- get_measurements
255+
- describe_table
256+
- query_sql
257+
notes: []
258+
mcp_server_sha: 00fdb733278a09f8b7677a12f6fd818b9843c2d9
259+
- date: '2026-07-30'
260+
test_case: ro-core-parity
261+
phase: baseline
262+
server_mode: read_only
263+
mcp_server_key: influxdb3_core_mcp_dev_ro
264+
reasoning: low
265+
harness: claude
266+
task_id: tb-ro-core-parity-core-ro-claude
267+
tool_calls: 3
268+
failed_calls: 0
269+
tokens: 643
270+
telemetry_lines: 3
271+
result: passed
272+
tool_path:
273+
- list_databases
274+
- list_tables
275+
- query_sql
276+
notes: []
277+
mcp_server_sha: 00fdb733278a09f8b7677a12f6fd818b9843c2d9
278+
excluded_runs: []
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
## Databases (5 total)
2+
- `_internal`
3+
- `home`
4+
- `host_system`
5+
- `loadcap_probe`
6+
- `smoke`
7+
8+
## CPU Usage (latest, from `host_system.metrics`)
9+
10+
| Time (UTC) | Host | Idle % | System % | User % |
11+
|---|---|---|---|---|
12+
| 2026-07-30 04:26:03 | e2e-host-1 | 84.3% | 3.2% | 12.5% |
13+
| 2026-07-30 04:26:03 | e2e-host-2 | 45.2% | 9.7% | 45.1% |
14+
15+
Both hosts show identical readings across all recent timestamps (e2e-host-2 running much hotter — ~55% total CPU busy vs ~16% for e2e-host-1), suggesting these may be simulated/static test metrics rather than live varying data.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
```json
2+
{
3+
"databases_inspected": ["_internal", "home", "host_system", "loadcap_probe", "smoke"],
4+
"matching_tables": [
5+
{
6+
"database": "host_system",
7+
"table": "metrics",
8+
"matching_fields": ["cpu::usage_idle", "cpu::usage_sys", "cpu::usage_system", "cpu::usage_user"],
9+
"sample_row": {
10+
"time": "2026-07-30T04:26:03",
11+
"host": "e2e-host-1",
12+
"cpu::usage_idle": 84.3,
13+
"cpu::usage_system": 3.2,
14+
"cpu::usage_user": 12.5
15+
},
16+
"row_count_returned": 1
17+
}
18+
],
19+
"tool_call_summary": [
20+
{ "tool": "list_databases", "calls": 1 },
21+
{ "tool": "get_measurements", "calls": 5, "note": "one per database" },
22+
{ "tool": "describe_table", "calls": 4, "note": "on non-empty tables: host_system.metrics, loadcap_probe.loadcap_demo, smoke.e2e_conditional_write_probe-20260730T042925, smoke.seed_marker" },
23+
{ "tool": "query_sql", "calls": 1, "note": "bounded LIMIT 1 sample on host_system.metrics" }
24+
],
25+
"notes": [
26+
"_internal and home databases returned 0 measurements — nothing to inspect.",
27+
"loadcap_probe.loadcap_demo, smoke.e2e_conditional_write_probe-*, and smoke.seed_marker had no cpu::usage fields.",
28+
"Only host_system.metrics contains cpu::usage-prefixed fields."
29+
]
30+
}
31+
```
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
```json
2+
{
3+
"databases_inspected": ["_internal", "home", "host_system", "loadcap_probe", "smoke"],
4+
"matching_tables": [
5+
{
6+
"db": "host_system",
7+
"table": "metrics",
8+
"cpu_usage_fields": ["cpu::usage_idle", "cpu::usage_sys", "cpu::usage_system", "cpu::usage_user"],
9+
"sample_row": {
10+
"cpu::usage_idle": 84.3,
11+
"cpu::usage_system": 3.2,
12+
"cpu::usage_user": 12.5,
13+
"host": "e2e-host-1",
14+
"time": "2026-07-30T04:26:03"
15+
}
16+
}
17+
],
18+
"tool_call_summary": [
19+
{"tool": "list_databases", "calls": 1},
20+
{"tool": "list_tables", "calls": 5, "targets": ["_internal", "home", "host_system", "loadcap_probe", "smoke"]},
21+
{"tool": "describe_table", "calls": 4, "targets": [
22+
"host_system.metrics",
23+
"loadcap_probe.loadcap_demo",
24+
"smoke.e2e_conditional_write_probe-20260730T042925",
25+
"smoke.seed_marker"
26+
]},
27+
{"tool": "query_sql", "calls": 1, "target": "host_system.metrics", "query": "SELECT * FROM metrics ORDER BY time DESC LIMIT 1"}
28+
],
29+
"row_counts": {
30+
"host_system.metrics": 1
31+
},
32+
"notes": "_internal and home databases contain no tables. loadcap_probe.loadcap_demo and smoke's two tables were inspected but have no cpu::usage fields."
33+
}
34+
```
35+
36+
**Summary:** Across 5 databases, only `host_system.metrics` contains `cpu::usage` fields (idle/sys/system/user). Pulled 1 bounded sample row (LIMIT 1) from it; no other table qualified.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
Apologies — that last step was unnecessary and shouldn't have used Bash. Here's the result:
2+
3+
```json
4+
{
5+
"found": false,
6+
"message": "No table named 'smoke' exists in any database. A database named 'smoke' exists but contains only one table: 'seed_marker'.",
7+
"databases_checked": ["_internal", "home", "host_system", "loadcap_probe", "smoke"],
8+
"tables_found": {
9+
"_internal": [],
10+
"home": [],
11+
"host_system": ["metrics"],
12+
"loadcap_probe": ["loadcap_demo"],
13+
"smoke": ["seed_marker"]
14+
},
15+
"query_executed": null
16+
}
17+
```
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
Done. Databases: `_internal`, `host_system`, `smoke`. Used `host_system` (non-internal), table `metrics`.
2+
3+
```json
4+
{
5+
"database": "host_system",
6+
"table": "metrics",
7+
"query": "SELECT * FROM metrics ORDER BY time DESC LIMIT 5",
8+
"row_count": 2,
9+
"rows": [
10+
{"cpu::usage_idle": 45.2, "cpu::usage_system": 9.7, "cpu::usage_user": 45.1, "host": "e2e-host-2", "time": "2026-07-30T04:26:05"},
11+
{"cpu::usage_idle": 84.3, "cpu::usage_system": 3.2, "cpu::usage_user": 12.5, "host": "e2e-host-1", "time": "2026-07-30T04:26:05"}
12+
],
13+
"duration_ms": 36
14+
}
15+
```

0 commit comments

Comments
 (0)