Skip to content

feat: ai-observability test apps + evaluator rubric - #3358

Open
marco-g-pm wants to merge 1 commit into
mainfrom
claude/wizard-ai-observability-tests-45fb4e
Open

feat: ai-observability test apps + evaluator rubric#3358
marco-g-pm wants to merge 1 commit into
mainfrom
claude/wizard-ai-observability-tests-45fb4e

Conversation

@marco-g-pm

@marco-g-pm marco-g-pm commented Aug 4, 2026

Copy link
Copy Markdown

What

Nine PostHog-less test fixtures for wizard ai-observability, plus an AIO-specific rubric for the PR evaluator.

Matches the context-mill updates PostHog/context-mill#319 and the docs updates PostHog/posthog#75976

Test apps (apps/ai-observability/)

Each app exists to test one thing the others don't:

  • anthropic/python-weather — the baseline: tool span, single-trace inferred session
  • anthropic/node-weather — multi-turn: one trace per turn, one session across turns
  • openai/python-weather — same flow, OpenAI shape; canary for stale SDK resolves
  • openai/node-weather — same flow, single-turn Node
  • openai/python-docs-rag — embeddings; hardest session (no field to read)
  • groq/node-chat — provider named by baseURL, not package
  • openai-agents/python-travel-triage — tracing processor; the SDK emits the tree
  • vercel-ai/nextjs-support-chat — per-request identity; framework bootstrap
  • manual-capture/node-http-chat — hand-built tree; must reuse the existing client

The four weather apps implement the identical get_weather round trip from Anthropic's tool-use docs, so a diff between any two isolates one variable (SDK, language, or conversation structure).

Each README states the session → trace → span → generation tree the app must produce. Runs are graded on emitted events, not the diff — every failure mode observed while building these produced plausible-looking code and a broken tree (session on a dropped key, fresh trace id per call, missing flush).

Conventions: wrapper-first (posthog.ai.* / @posthog/ai, per-call identity) with three legitimate exceptions (openai-agents → tracing processor, vercel-aiexperimental_telemetry, manual-capture → nothing to wrap); every app gets a session — the graded property is cardinality; spans come from tool registration, never hand-authored wrappers.

Evaluator (services/pr-evaluator/)

  • prompts/evaluation-ai-observability.md — 28-item rubric over the existing four dimensions, targeting the looks-right-data-wrong failure class: exact $ai_session_id key, shared trace id per request, identity scope (per-call vs Resource), flush on CLIs, dependency versions that actually provide the imported modules, no fabricated structure
  • Registered under the ai-observability command id; wizard-ci infers it from the app path

🤖 Generated with Claude Code

Nine PostHog-less fixtures for `wizard ai-observability`, one per
instrumentation shape (wrapper, tracing processor, experimental_telemetry,
manual capture) across Python and Node. Each README states the
session -> trace -> span -> generation tree the app must produce; runs are
graded on emitted events, not the diff.

Adds the ai-observability rubric to pr-evaluator and registers it, plus the
manifest entry so wizard-ci infers the command from the app path.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@marco-g-pm
marco-g-pm marked this pull request as ready for review August 4, 2026 21:26
@marco-g-pm
marco-g-pm requested a review from a team as a code owner August 4, 2026 21:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant