lib/mix/tasks/openagents.persona.verify_promotion.ex

main at 436d37facc96 · 937 B

defmodule Mix.Tasks.Openagents.Persona.VerifyPromotion do
  use Mix.Task

  @shortdoc "Verify persona source and regression evidence before promotion"

  @impl Mix.Task
  def run([report_path]) do
    Mix.Task.run("app.start")

    with {:ok, contents} <- File.read(report_path),
         {:ok, report} <- Jason.decode(contents),
         manifest <- OpenAgents.Persona.SourceManifest.load!(),
         persona <- OpenAgents.Persona.current!(),
         corpus <- OpenAgents.Persona.Evaluation.Corpus.load!(),
         :ok <-
           OpenAgents.Persona.Evaluation.ReleaseGate.validate(persona, manifest, corpus, report) do
      Mix.shell().info("promotion evidence passed for #{persona.id} on #{report["model_id"]}")
    else
      {:error, reason} -> Mix.raise("persona promotion blocked: #{inspect(reason)}")
    end
  end

  def run(_arguments),
    do: Mix.raise("usage: mix openagents.persona.verify_promotion REPORT_PATH")
end