v0.3.0 — compare payloads, hosted smoke, critic-can-lose
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, statusrefused. - 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> }.