Coverage for little_loops / extensions / reference_interceptor.py: 100%
8 statements
« prev ^ index » next coverage.py v7.12.0, created at 2026-05-22 16:19 -0500
« prev ^ index » next coverage.py v7.12.0, created at 2026-05-22 16:19 -0500
1"""Reference interceptor extension for little-loops.
3Demonstrates passthrough ``before_route()`` and ``before_issue_close()``
4behavior. Copy this class, rename it, and replace the return values with
5real veto or routing logic.
6"""
8from __future__ import annotations
10from little_loops import RouteContext, RouteDecision
11from little_loops.issue_parser import IssueInfo
14class ReferenceInterceptorExtension:
15 """Reference implementation demonstrating passthrough interceptor behavior.
17 ``before_route()`` and ``before_issue_close()`` both return ``None``,
18 which means "pass through without modifying the decision."
20 To build a real interceptor:
21 1. Copy this class and rename it.
22 2. Implement ``before_route`` to redirect or veto FSM routing by returning
23 a ``RouteDecision`` instance (``RouteDecision(None)`` vetoes the
24 transition; ``RouteDecision("state_name")`` redirects to that state).
25 3. Implement ``before_issue_close`` to veto an issue close by returning
26 ``False``; return ``None`` to allow the close to proceed.
27 4. Register your class in ``ll-config.json`` under the ``extensions`` key
28 as ``"your_package.module:YourClassName"``.
29 """
31 def before_route(self, context: RouteContext) -> RouteDecision | None:
32 """Return None to pass through without modifying routing.
34 Return a ``RouteDecision`` to redirect or veto the FSM transition:
35 - ``RouteDecision("state_name")`` — redirect to a different state
36 - ``RouteDecision(None)`` — veto the transition (no state change)
37 """
38 return None
40 def before_issue_close(self, info: IssueInfo) -> bool | None:
41 """Return None to pass through; return False to veto the close.
43 Args:
44 info: Parsed issue information for the issue being closed.
46 Returns:
47 ``None`` to allow the close to proceed, ``False`` to veto it.
48 """
49 return None