diff --git a/src/scribe/services/shape_ledger.py b/src/scribe/services/shape_ledger.py index cab9635..4c130e0 100644 --- a/src/scribe/services/shape_ledger.py +++ b/src/scribe/services/shape_ledger.py @@ -444,6 +444,10 @@ async def live_rows_for(user_id: int, project_id: int) -> list[CodeShape]: outside (an MCP tool, a route) rather than from a job that already established who is asking. Empty for a project the caller cannot read, never a partial answer.""" + # Deferred, like every other access import in this module: services/access + # reaches back here, and a module-level import closes the cycle. + from scribe.services import access + if not await access.can_read_project(user_id, project_id): return [] return await live_rows(project_id) diff --git a/tests/test_stamps_to_review.py b/tests/test_stamps_to_review.py index 115dafc..eb7acb7 100644 --- a/tests/test_stamps_to_review.py +++ b/tests/test_stamps_to_review.py @@ -22,8 +22,6 @@ hook's own history is made of. """ - - import pytest from scribe.services.shape_ledger import (