Add structured compiler diagnostics
This commit is contained in:
parent
0fe968c475
commit
24bd13f9d9
20 changed files with 1386 additions and 58 deletions
|
|
@ -92,6 +92,24 @@ class DocForgeMcpTests(unittest.IsolatedAsyncioTestCase):
|
|||
)
|
||||
)
|
||||
|
||||
async def test_factory_diagnostics_are_additive_through_real_mcp(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
root = self.copy_fixture("alpha", Path(directory))
|
||||
ProjectIndex(Project.open(root)).build()
|
||||
async with create_connected_server_and_client_session(
|
||||
create_server(root, diagnostics=True),
|
||||
raise_exceptions=True,
|
||||
) as session:
|
||||
result = await session.call_tool(
|
||||
"docforge_get_node",
|
||||
{"node_id": "guide.workflow"},
|
||||
)
|
||||
|
||||
diagnostics = result.structuredContent["diagnostics"]
|
||||
self.assertEqual("mcp.get_node", diagnostics["operation"])
|
||||
self.assertEqual(0, diagnostics["counters"]["project_loads"])
|
||||
self.assertEqual(0, diagnostics["counters"]["source_files_parsed"])
|
||||
|
||||
async def test_no_ast_binding_preserves_adapter_and_blocks_logic(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
root = self.copy_fixture("alpha", Path(directory))
|
||||
|
|
@ -263,6 +281,7 @@ class DocForgeMcpTests(unittest.IsolatedAsyncioTestCase):
|
|||
root,
|
||||
"alpha-editor",
|
||||
canonical_applier_id="alpha-editor",
|
||||
diagnostics=True,
|
||||
),
|
||||
raise_exceptions=True,
|
||||
) as session:
|
||||
|
|
@ -477,6 +496,7 @@ class DocForgeMcpTests(unittest.IsolatedAsyncioTestCase):
|
|||
self.assertEqual("ok", payload["status"])
|
||||
self.assertTrue(payload["mutation_committed"])
|
||||
self.assertEqual("receipt", payload["result_mode"])
|
||||
self.assertNotIn("diagnostics", payload)
|
||||
self.assertLessEqual(
|
||||
len(json.dumps(payload, sort_keys=True, separators=(",", ":"))),
|
||||
1600,
|
||||
|
|
@ -513,7 +533,7 @@ class DocForgeMcpTests(unittest.IsolatedAsyncioTestCase):
|
|||
ProjectIndex(Project.open(root)).build()
|
||||
changeset_id = "must-not-exist-" + ("x" * 100)
|
||||
async with create_connected_server_and_client_session(
|
||||
create_server(root, "alpha-editor"),
|
||||
create_server(root, "alpha-editor", diagnostics=True),
|
||||
raise_exceptions=True,
|
||||
) as session:
|
||||
result = await session.call_tool(
|
||||
|
|
@ -526,6 +546,7 @@ class DocForgeMcpTests(unittest.IsolatedAsyncioTestCase):
|
|||
self.assertEqual("result_too_large", payload["error"]["code"])
|
||||
self.assertEqual("preflight", payload["error"]["details"]["stage"])
|
||||
self.assertFalse(payload["error"]["details"]["mutation_committed"])
|
||||
self.assertNotIn("diagnostics", payload)
|
||||
self.assertFalse((root / f".docforge/changesets/{changeset_id}.json").exists())
|
||||
|
||||
async def test_proposal_tools_use_fixed_writer_and_never_change_canonical_content(self) -> None:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue