diff --git a/docs/specs/2026-09-29-processor-service-design.md b/docs/specs/2026-09-29-processor-service-design.md index d8bb720..b6fd1ed 100644 --- a/docs/specs/2026-09-29-processor-service-design.md +++ b/docs/specs/2026-09-29-processor-service-design.md @@ -525,8 +525,9 @@ reclaim re-running (not re-publishing) the extraction. old extractor on an old Processor, and the new one on a new Processor. Such a bump is **notice**: it carries that reasoning and the moved digests, which already show any dispatch change for an essence Watcher sends today. It - becomes coordination again only if Processor starts resolving essences - itself, and `tests/test_pin.py` fails first if it does. + becomes coordination again only if Processor starts calling co-core's + resolvers itself, and `tests/test_pin.py` fails if it does. (Resolving any + other way is Section 3's to forbid, and a co-core bump wouldn't move it.) - Until watcher#350 (2026-10-10) both sides extracted, so the pin was in lockstep with Watcher's, and both repos moved together or neither did. diff --git a/tests/test_pin.py b/tests/test_pin.py index da249d8..8a69333 100644 --- a/tests/test_pin.py +++ b/tests/test_pin.py @@ -6,8 +6,9 @@ co-core-direct and every moved digest in the bump note. Whether a bump is notice or coordination turns on the contract (ยง5). Essence -resolution is outside it only because Processor never resolves an essence itself, and -a test holds that premise (processor#57). +resolution is outside it only because Processor never calls co-core's resolvers +(``resolve_dispatch_essence``, ``extension_media_type``), and a test holds that +premise (processor#57). """ import ast @@ -90,6 +91,15 @@ def test_processor_version_is_co_core_plus_generation() -> None: ("# resolve_dispatch_essence is the issuer's", False), ("from co_core.pure.extract.dispatch import extractor_for_essence", False), ], + ids=[ + "from-import", + "from-import-as", + "attribute", + "name", + "docstring", + "comment", + "dispatch-call", + ], ) def test_the_guard_catches_code_not_text(source: str, caught: bool) -> None: assert bool(_resolver_uses(source)) is caught