| """Release gate for the verified autonomous agent.
|
|
|
| A release must not ship an agent that regresses the deterministic baseline.
|
| This module exposes a single check the release workflow can call: it runs the
|
| offline non-regression comparison and returns a structured pass/fail verdict.
|
| The F1 promotion bar (deciding whether the agent becomes the *default* path)
|
| lives in :func:`dataforge.bench.agent_promotion_verdict`, fed by real eval runs.
|
| """
|
|
|
| from __future__ import annotations
|
|
|
| from dataclasses import dataclass
|
| from pathlib import Path
|
|
|
| from dataforge.bench.agent_gate import AgentGateReport, compare_agent_vs_deterministic
|
| from dataforge.detectors.base import Schema
|
|
|
| __all__ = ["AgentReleaseGateResult", "check_agent_release_gate"]
|
|
|
|
|
| @dataclass(frozen=True)
|
| class AgentReleaseGateResult:
|
| """Outcome of the agent non-regression release gate."""
|
|
|
| passed: bool
|
| report: AgentGateReport
|
| reason: str
|
|
|
|
|
| def check_agent_release_gate(
|
| fixture_paths: list[Path] | None = None,
|
| *,
|
| schema: Schema | None = None,
|
| ) -> AgentReleaseGateResult:
|
| """Verify the agent reproduces the deterministic floor on bundled fixtures.
|
|
|
| Args:
|
| fixture_paths: Optional fixtures; defaults to the bundled gate fixtures.
|
| schema: Optional schema applied to every fixture.
|
|
|
| Returns:
|
| An :class:`AgentReleaseGateResult`. ``passed`` is ``False`` if any
|
| fixture shows the agent diverging from the deterministic baseline.
|
| """
|
| report = compare_agent_vs_deterministic(fixture_paths, schema=schema)
|
| if not report.fixtures:
|
| return AgentReleaseGateResult(
|
| passed=False,
|
| report=report,
|
| reason="No gate fixtures were available to evaluate.",
|
| )
|
| if report.all_parity:
|
| return AgentReleaseGateResult(
|
| passed=True,
|
| report=report,
|
| reason=(
|
| f"Agent reproduced the deterministic floor on all "
|
| f"{len(report.fixtures)} fixture(s); no regression."
|
| ),
|
| )
|
| diverged = [item.fixture for item in report.fixtures if not item.parity]
|
| return AgentReleaseGateResult(
|
| passed=False,
|
| report=report,
|
| reason=f"Agent diverged from the deterministic floor on: {diverged}",
|
| )
|
|
|