Add versioned effective policy
This commit is contained in:
parent
a9a75c5c27
commit
34cd5f74c1
11 changed files with 708 additions and 70 deletions
|
|
@ -17,12 +17,14 @@ from mcp.client.stdio import stdio_client
|
|||
from mcp.shared.memory import create_connected_server_and_client_session
|
||||
|
||||
from docforge.changesets import ChangesetStore
|
||||
from docforge.errors import DocForgeError
|
||||
from docforge.index import ProjectIndex
|
||||
from docforge.mcp_server import (
|
||||
ALL_TOOLS,
|
||||
APPLICATION_TOOLS,
|
||||
CONTENT_WARNING,
|
||||
PROPOSAL_TOOLS,
|
||||
READ_TOOLS,
|
||||
DocForgeService,
|
||||
_create_bound_server,
|
||||
create_server,
|
||||
|
|
@ -103,6 +105,43 @@ class DocForgeMcpTests(unittest.IsolatedAsyncioTestCase):
|
|||
)
|
||||
)
|
||||
|
||||
async def test_explicit_capability_modes_preserve_surfaces_and_fail_closed(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, capability_mode="read"),
|
||||
raise_exceptions=True,
|
||||
) as session:
|
||||
read_names = tuple(tool.name for tool in (await session.list_tools()).tools)
|
||||
read_bootstrap = await session.call_tool("docforge_bootstrap", {})
|
||||
|
||||
self.assertEqual(READ_TOOLS, read_names)
|
||||
self.assertEqual(
|
||||
"read",
|
||||
read_bootstrap.structuredContent["effective_policy"]["capability_mode"],
|
||||
)
|
||||
self.assertNotIn(
|
||||
"docforge_register_changes",
|
||||
read_bootstrap.structuredContent["recommended_workflow"],
|
||||
)
|
||||
|
||||
async with create_connected_server_and_client_session(
|
||||
create_server(
|
||||
root,
|
||||
"alpha-editor",
|
||||
canonical_applier_id="alpha-editor",
|
||||
capability_mode="application",
|
||||
),
|
||||
raise_exceptions=True,
|
||||
) as session:
|
||||
application_names = tuple(tool.name for tool in (await session.list_tools()).tools)
|
||||
self.assertEqual((*ALL_TOOLS, *APPLICATION_TOOLS), application_names)
|
||||
|
||||
with self.assertRaises(DocForgeError) as unavailable:
|
||||
create_server(root, capability_mode="application")
|
||||
self.assertEqual("capability_unavailable", unavailable.exception.code)
|
||||
|
||||
async def test_factory_diagnostics_are_additive_through_real_mcp(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
root = self.copy_fixture("alpha", Path(directory))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue