Files
roboco/tests/unit/foundation/policy/test_doc_bail_remediate.py
T

36 lines
1.1 KiB
Python
Raw Normal View History

"""Doc-stage bail rejections must name the real exit: i_documented.
Live loop (2026-07-02, b8fe0494): fe-doc respawned 26 times on a revision
pass — the docs were already written, the agent wouldn't call i_documented
for work it didn't author, and its bail attempts (i_am_blocked/unclaim) were
rejected with a generic remediate that never mentioned the one verb that IS
the exit from awaiting_documentation.
"""
from __future__ import annotations
from dataclasses import dataclass, field
from uuid import uuid4
from roboco.foundation.identity import Role
from roboco.foundation.policy.lifecycle import Context, can_invoke_intent
@dataclass
class _Task:
status: object = "awaiting_documentation"
assigned_to: object = None
task_type: object = "code"
team: object = "frontend"
created_by: object = field(default_factory=uuid4)
def test_doc_block_rejection_points_at_i_documented() -> None:
doc = uuid4()
task = _Task(assigned_to=doc)
decision = can_invoke_intent(
Role.DOCUMENTER, "i_am_blocked", task, Context(actor_id=doc)
)
assert not decision.allowed
assert "i_documented" in (decision.remediate or "")