Skip to content

v0.3.0 — compare payloads, hosted smoke, critic-can-lose

Choose a tag to compare

@pabloalvarez99 pabloalvarez99 released this 14 Aug 19:58
· 7 commits to main since this release
dc80188

agentic-rag-research v0.3.0 — compare, hosted contract, critic can lose

Date: 2026-08-14
Hosted: https://pax-agentic-rag.vercel.app (Vercel project pax-agentic-rag only)

What this release proves

A hiring manager can put two finished runs next to each other after a serverless recycle
forgets in-memory ids. Compare is on payloads, not server ids
(ADR-0005). The free-path critic can still lose
when notes exist but are off-topic. Hosted contract smoke is a script + transcript, not a
flaky network CI job.

Surface

Endpoint / page Role
POST /v1/research Bounded research run (unchanged)
GET /v1/research/stream SSE plan → retrieve → note → critique
GET /v1/runs/{id} Stored artifact (in-process, ephemeral)
GET /v1/runs/{id}/run.json Full run download (compare input)
GET /v1/runs/{id}/trace.json Trace-only download
POST /v1/runs/compare Typed diff of two payloads
/compare Load two files; side-by-side + API diff
scripts/hosted_smoke.ps1 health · done · refuse · stream · compare

Evidence

python -m pytest -q
python -m agentic_rag.evals.run
# expect pass_rate 1.0, billed_usd 0.0, 18/18
pwsh scripts/hosted_smoke.ps1 -BaseUrl https://pax-agentic-rag.vercel.app
  • Identical fixtures → empty, byte-stable compare response.
  • Refused vs done → typed field diffs (status, stop_reason, …).
  • Golden critic-notes-exist-not-success: notes present, status refused.
  • Multi-hop sequence: critique after retrieve-1 precedes and justifies retrieve-2.

Honesty

  • Fixture retriever only on the public host. No live-web research claim.
  • HTTP to production-rag stays opt-in; CI never points at a production-rag Vercel host.
  • Control metrics only — steps, stop reasons, citation presence, refused_unanswerable.
  • No OpenAI required for tests or the free path.

Upgrade notes

Clients that only downloaded trace.json should also keep run.json if they want to
compare after recycle. Compare request body is { "left": <RunArtifact>, "right": <RunArtifact> }.