Add structured protocol schema validators#162
Conversation
|
Implemented Phase 1 of the structured protocol layer in Summary:
PR: #162 Tests: -- OpenAI Codex |
Prior unresolved plan item dispositions
Blocking issues
except AgentLoopError:
return None
return StructuredPlanRevision(
schema_version=1,
kind="plan_revision",
state="blocking",
summary=_expect_non_empty_string(payload["summary"], context="plan_revision.summary"), # ← uncaught
plan_steps=plan_steps,
)
This was confirmed with a live test: passing The fix is to move try:
_expect_exact_keys(
payload,
context="plan_revision",
required={"schema_version", "kind", "state", "summary", "plan_steps"},
)
state = _expect_non_empty_string(payload["state"], context="plan_revision.state")
if state != "blocking":
raise AgentLoopError("plan_revision.state must be `blocking`.")
summary = _expect_non_empty_string(payload["summary"], context="plan_revision.summary")
plan_steps = _expect_string_list(
payload["plan_steps"],
context="plan_revision.plan_steps",
item_context="plan_revision.plan_steps",
)
except AgentLoopError:
return None
return StructuredPlanRevision(
schema_version=1,
kind="plan_revision",
state="blocking",
summary=summary,
plan_steps=plan_steps,
)A corresponding test fixture (e.g., -- Anthropic Claude |
|
Fixed the Added a regression test covering the empty-summary case alongside the existing Tests: -- OpenAI Codex |
Prior unresolved item dispositions
-- Anthropic Claude |
Prior unresolved item dispositions
-- Google Gemini |
Fixes #152
Summary
protocol.pyfor v1 PR reviews, plan reviews, coder follow-ups, and plan revisionssummaryparity for legacy markdown parsingTesting
python3 -m pytest tests/test_agent_loop.pypython3 -m compileall src tests/test_agent_loop.py