Plan Critic¶
Cluster: Uncategorised | Type: component | MCP Tools: None
Overview¶
Public API¶
PlanCriticDecisionError(ValueError)¶
The LLM did not produce a usable, validated critique decision.
CritiqueDecision¶
Validated, already-merged critique decision + honest evidence.
| Field | Type | Default |
|---|---|---|
report | CritiqueReport | required |
llm_used | bool | False |
degraded | bool | True |
diverged_from_floor | bool | False |
degradation_reason | str | '' |
rationale | str | '' |
raw_response | str | '' |
Methods:
to_evidence_decisions() -> list[dict[str, Any]]¶
PlanCriticRuntime(Protocol)¶
The grounded critique surface: a Plan -> a raw (un-merged) CritiqueReport.
Methods:
critique(plan: Plan) -> CritiqueReport¶
LLMPlanCriticRuntime¶
Provider-neutral plan-critique runtime backed by G6's LLM caller.
Constructor:
| Parameter | Type | Default |
|---|---|---|
llm | LLMCaller \| None | None |
Methods:
critique(plan: Plan) -> CritiqueReport¶
PlanCriticPlanner¶
Runtime-first VERDICT-tier facade with a deterministic floor + stricter-of.
| Field | Type | Default |
|---|---|---|
runtime | PlanCriticRuntime \| None | None |
floor | PlanCritic | field(default_factory=PlanCritic) |
last_decision | CritiqueDecision \| None | field(default=None, init=False) |
last_llm_used | bool | field(default=False, init=False) |
Methods:
critique(plan: Plan) -> CritiqueDecision¶
PlanCriticInput(BaseModel)¶
| Field | Type | Default |
|---|---|---|
op | Literal['critique', 'list_patterns', 'ops', 'help'] | 'critique' |
plan | dict | Field(default_factory=dict) |
goal | str | '' |
steps | list[str] | Field(default_factory=list) |
acceptance_criteria | list[str] | Field(default_factory=list) |
risks | list[str] | Field(default_factory=list) |
tests | list[str] | Field(default_factory=list) |
rollback | str | '' |
run_mode | Literal['beta', 'production'] | 'beta' |
reviewer_signature | str | '' |
PlanCriticBlock(AIBlock[PlanCriticInput, dict, dict])¶
Constructor:
| Parameter | Type | Default |
|---|---|---|
name | str | 'plan_critic' |
state | dict \| None | None |
agentic_planner | - | None |
Methods:
infer(data: PlanCriticInput) -> Result[dict]¶
PlanCritic¶
Methods:
critique(plan: Plan) -> CritiqueReport¶
Plan(BaseModel)¶
| Field | Type | Default |
|---|---|---|
goal | str | required |
steps | list[str] | Field(default_factory=list) |
acceptance_criteria | list[str] | Field(default_factory=list) |
risks | list[str] | Field(default_factory=list) |
tests | list[str] | Field(default_factory=list) |
rollback | str | '' |
CritiqueFinding(BaseModel)¶
| Field | Type | Default |
|---|---|---|
category | str | required |
severity | Literal['low', 'medium', 'high', 'critical'] | 'medium' |
what | str | required |
why | str | required |
unsafe_assumption | str | '' |
better_plan | str | required |
cheap_validation | str | required |
CritiqueReport(BaseModel)¶
| Field | Type | Default |
|---|---|---|
verdict | Literal['pass', 'revise', 'block'] | required |
findings | list[CritiqueFinding] | Field(default_factory=list) |
Functions¶
stricter_verdict(a: str, b: str) -> str¶
Return the stricter of two verdicts on pass < revise < block.
merge_reports(floor: CritiqueReport, agentic: CritiqueReport) -> CritiqueReport¶
VERDICT-tier stricter-of merge: the LLM may only TIGHTEN.