Skip to content

feat(evals): Evals for SDK install skills - #181

Closed
dingsdax wants to merge 9 commits into
mainfrom
feat/evals-ruby-sdk
Closed

feat(evals): Evals for SDK install skills#181
dingsdax wants to merge 9 commits into
mainfrom
feat/evals-ruby-sdk

Conversation

@dingsdax

@dingsdax dingsdax commented Jun 15, 2026

Copy link
Copy Markdown

Evals for SDK install skills

Built on vitest-evals; runs SDK install skills against fixture projects with (for now) only Claude API calls and asserts on resulting files.

How it works

  • Agent is sandboxed to file tools only (no shell, no network)
  • Runner diffs the filesystem before/after each run
  • Deterministic substring checks handle most assertions
  • One LLM judge per scenario for soft assertions (framework/library detection)

Ruby SDK install skill PoC

  • Framework detection: rails-basic, sinatra-basic
  • Library detection: rails-sidekiq
  • SDK migration: rails-rollbar-replace
  • OTLP integration path: rails-otel
  • Each got validated before committing with a file-writing custom transport against a real app (confirmed error, transaction and log envelopes flow)

dingsdax and others added 9 commits June 15, 2026 13:25
Add vitest-evals based eval system for testing SDK install skills
against realistic fixture projects with real Claude API calls.

Includes sandboxed runner with file tools (no shell/network), LLM judge
for soft assertions, auto-discovered scenarios, and CI workflow gated
on eval/skill path changes or run-evals label.

Initial scenario: sentry-ruby-sdk rails-basic (Rails 8, Puma, SQLite).
Assertions validated against real telemetry using a file-writing transport.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tests the non-Rails code path: sentry-ruby only, Rack middleware
in config.ru, no Rails initializer. Validated with file-writing
transport (event + transaction envelopes confirmed).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a scenario that validates the agent detects Sidekiq in a Rails 8
project and recommends sentry-sidekiq alongside sentry-rails. Verified
with a custom file transport that all three telemetry types (event,
transaction, log) flow correctly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Prefix config keys with `config.` to ensure they appear as actual
config lines rather than in comments. Keep soft assertions to one
per scenario for semantic detection only. Relax sinatra file placement
to allow extracted initializer files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add "Writing good assertions" section covering general principles
and SDK-install-specific patterns. Update existing examples to use
config-prefixed keys consistently.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tests that the agent detects an existing Rollbar setup, removes it,
and replaces it with Sentry including migrating Rollbar API calls in
application code to Sentry equivalents.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tests that the agent detects an existing OpenTelemetry setup and
chooses the OTLP integration path — config.otlp.enabled instead of
config.traces_sample_rate, plus sentry-opentelemetry gem.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add separate try/catch for JSON.parse in the judge so unparsable
LLM output gets a clear error message instead of a generic throw.
Add .default([]) to JudgeResponseSchema arrays so scenarios with
no negative_assertions don't silently score 0 when the LLM omits
the field.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@dingsdax dingsdax changed the title feat(evals): Add eval infrastructure and ruby SDK scenarios feat(evals): Evals for SDK install skills Jun 15, 2026
@dingsdax

Copy link
Copy Markdown
Author

closing:

  • more complex than the thing it tests
  • drift detection is real but this doesn't, needs pass-rate tracking & baselines, no binary pass/fail, doing properly adds to token & maintenance cost, not worth
  • burns tokens in CI with no real reproducibility
  • synthetic fixtures, no A/B tooling, no real-world repos
  • good skill ➡️ works without a flaky test loop / bad skill ➡️ fuzzy suite won't catch it

@dingsdax dingsdax closed this Jun 16, 2026
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