From 96a2fc35dfcf14662cee491430366f4e8d8b8149 Mon Sep 17 00:00:00 2001 From: Martin Vogel Date: Sun, 20 Sep 2026 14:07:12 +0200 Subject: [PATCH] test(mcp): ask for JSON where the coverage test asserts a JSON field #1787 landed correct production code and a test that cannot pass on today's main. The test is the only thing wrong, and only in how it asks. check_index_coverage answers in the compact table by default, where a field name never appears: main.go main.go coverage_unavailable metadata_match read_source_and_reindex [] The test asserts on the JSON field spelling: strstr(response, "\"freshness\":\"metadata_match\"") Both halves are right; they were simply written against different response formats. The branch was cut on 2026-09-02, before that default changed, and was never rebased -- its CI green is from a main that no longer exists. The neighbouring coverage tests already pass "format":"json" for exactly this reason; this one predates them. So the request gains format=json and the assertions are untouched. Asserting the field rather than a bare strstr for "metadata_match" is what keeps the check exact: the value also appears in the table's recommended_action column and would be matched by any other path's row. Verified: build/c/test-runner mcp -> 318 passed, 0 failed, 4 skipped. Before this change the same suite reported 317 passed, 1 failed on identical production code. What this is NOT: a production defect. coverage_path_freshness on main uses cbm_path_info_utf8, exactly as #1787 intended, and the Windows second-vs- nanosecond truncation it fixes is gone. I checked that by reading origin/main rather than the local checkout, which was stale at 59a05eb1 and still carried the old helper -- that misreading briefly convinced me the merge had dropped the fix, and it had not. Signed-off-by: Martin Vogel --- tests/test_mcp.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/test_mcp.c b/tests/test_mcp.c index 4a02211b2..7d51c9c6d 100644 --- a/tests/test_mcp.c +++ b/tests/test_mcp.c @@ -5800,8 +5800,14 @@ TEST(tool_check_index_coverage_freshness_uses_indexer_mtime_source_issue1714) { info.size), CBM_STORE_OK); - char *response = cbm_mcp_handle_tool( - srv, "check_index_coverage", "{\"project\":\"test-project\",\"paths\":[\"main.go\"]}"); + /* format=json, like every other coverage test here: the DEFAULT response is + * the compact table, in which a field name never appears. Keeping the + * assertion on the JSON field is what makes it exact — a bare strstr for + * "metadata_match" would also be satisfied by a neighbouring column or by + * another path's row. */ + char *response = cbm_mcp_handle_tool(srv, "check_index_coverage", + "{\"project\":\"test-project\",\"paths\":[\"main.go\"]," + "\"format\":\"json\"}"); ASSERT_NOT_NULL(response); ASSERT_NOT_NULL(strstr(response, "\"freshness\":\"metadata_match\"")); free(response); @@ -5815,8 +5821,9 @@ TEST(tool_check_index_coverage_freshness_uses_indexer_mtime_source_issue1714) { ASSERT_EQ(cbm_store_upsert_file_hash(store, "test-project", "main.go", "", seconds_mtime_ns, info.size), CBM_STORE_OK); - response = cbm_mcp_handle_tool( - srv, "check_index_coverage", "{\"project\":\"test-project\",\"paths\":[\"main.go\"]}"); + response = cbm_mcp_handle_tool(srv, "check_index_coverage", + "{\"project\":\"test-project\",\"paths\":[\"main.go\"]," + "\"format\":\"json\"}"); ASSERT_NOT_NULL(response); ASSERT_NOT_NULL(strstr(response, "\"freshness\":\"metadata_changed\"")); free(response);