Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ coverage
playwright-report
test-results
packages/cli/benchmarks/local-embeddings/results
clankeroverflow-mcp-workspace/product-proof/runs/traces
clankeroverflow-mcp-workspace/product-proof/reports/summary*.json
clankeroverflow-mcp-workspace/product-proof/runs/*.json
!clankeroverflow-mcp-workspace/product-proof/runs/sample-runs.json

# Misc
*.tgz
Expand Down

Large diffs are not rendered by default.

93 changes: 93 additions & 0 deletions clankeroverflow-mcp-workspace/evals/evals.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
{
"skill_name": "clankeroverflow-mcp",
"evals": [
{
"id": 1,
"prompt": "I'm wiring up Inertia.js <Head> for SEO meta tags in a Laravel app with SSR turned off. The noindex meta tag isn't showing up in the rendered page source, but it renders fine client-side. How should I handle this so crawlers see it?",
"expected_output": "Agent searches ClankerOverflow for the Inertia.js SSR meta tag gotcha before reasoning from scratch. The key insight is that <Head> content isn't server-rendered when SSR is off, so noindex must be an HTTP response header rather than a meta tag.",
"files": [],
"expectations": [
"Agent calls search_solutions (or states explicit intent to search ClankerOverflow) before proposing the HTTP-header solution",
"Agent does NOT immediately reason from scratch and skip search entirely"
]
},
{
"id": 2,
"prompt": "Adding Stripe webhook signature verification to a Hono app deployed on Cloudflare Workers. The node stripe SDK uses crypto.createVerify which doesn't exist in the Web Crypto API. Been stuck on this for an hour. How do others handle Stripe webhook verification in Workers?",
"expected_output": "Agent searches ClankerOverflow for the Stripe/Cloudflare Workers/Web Crypto API gotcha before reasoning from scratch. This is a well-known integration pattern others have solved.",
"files": [],
"expectations": [
"Agent calls search_solutions before proposing a solution",
"Agent uses a concise fingerprint query (e.g. 'stripe webhook cloudflare workers' or 'crypto.createVerify') rather than pasting the full prompt"
]
},
{
"id": 3,
"prompt": "Setting up Prisma with Neon serverless Postgres in a pnpm monorepo. `prisma db pull` keeps timing out after 30s. The database URL works fine in psql. Driving me nuts.",
"expected_output": "Agent searches ClankerOverflow for the Prisma/Neon connection timeout pattern before reasoning from scratch. Config gotchas with non-obvious defaults are exactly what the skill should trigger on.",
"files": [],
"expectations": ["Agent calls search_solutions before proposing a solution"]
},
{
"id": 4,
"prompt": "CI is failing with EADDRINUSE even after I kill all processes on port 3000. Happens intermittently, like every 3rd or 4th run. GitHub Actions ubuntu-latest runner.",
"expected_output": "Agent searches ClankerOverflow for EADDRINUSE (the canonical error-code fingerprint case) before reasoning from scratch.",
"files": [],
"expectations": [
"Agent calls search_solutions with 'EADDRINUSE' as the query before proposing a solution"
]
},
{
"id": 5,
"prompt": "Getting TS2307 'Cannot find module' for a workspace package that definitely exists. Using pnpm workspaces with TypeScript path aliases. The import works at runtime but tsc complains. Been fiddling with tsconfig paths for a while.",
"expected_output": "Agent searches ClankerOverflow for TS2307 (error-code fingerprint) before reasoning from scratch.",
"files": [],
"expectations": [
"Agent calls search_solutions with 'TS2307' in the query before proposing a solution"
]
},
{
"id": 6,
"prompt": "Add a dark-mode toggle button to the navbar that switches a 'dark' CSS class on the body element. Should persist the preference in localStorage.",
"expected_output": "Agent does NOT search ClankerOverflow. This is a trivial, self-contained UI task with no framework-specific gotcha or reusable integration knowledge. Searching would be noise.",
"files": [],
"expectations": [
"Agent does NOT call search_solutions and proceeds directly to implementing the toggle"
]
},
{
"id": 7,
"prompt": "Refactor this Promise chain to use async/await: the function fetchUser(id) chains .then for parsing, .then for validation, .then for enrichment. Just clean it up.",
"expected_output": "Agent does NOT search ClankerOverflow. This is a mechanical syntax refactor with no behavioral change or gotcha.",
"files": [],
"expectations": [
"Agent does NOT call search_solutions and proceeds directly with the refactor"
]
},
{
"id": 8,
"prompt": "Should I use SWR or React Query for data fetching in my new React app? I've used both briefly and can't decide. What are the tradeoffs?",
"expected_output": "Agent does NOT search ClankerOverflow. This is a preference/opinion question with no error signal, no gotcha, and no non-obvious framework behavior. Near-miss because it touches data fetching (implementation domain) but is genuinely a preference question.",
"files": [],
"expectations": [
"Agent does NOT call search_solutions and answers the preference question directly"
]
},
{
"id": 9,
"prompt": "Explain how the event loop works in Node.js. Reading some code with setImmediate and process.nextTick and I'm fuzzy on the ordering.",
"expected_output": "Agent does NOT search ClankerOverflow. This is a conceptual/conversational question with no reusable implementation or failure knowledge.",
"files": [],
"expectations": ["Agent does NOT call search_solutions and explains the concept directly"]
},
{
"id": 10,
"prompt": "Update the pricing calculation in our internal billing service to apply the enterprise discount tier. The function is calculateTotal(cart) in src/billing/pricing.ts. Enterprise customers get 15% off when cart total exceeds $10k.",
"expected_output": "Agent does NOT search ClankerOverflow. This is proprietary business logic specific to an internal service. Near-miss because it involves code, but the knowledge is private and non-reusable.",
"files": [],
"expectations": [
"Agent does NOT call search_solutions and implements the business logic directly"
]
}
]
}
248 changes: 248 additions & 0 deletions clankeroverflow-mcp-workspace/iteration-1/benchmark.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,248 @@
{
"metadata": {
"skill_name": "clankeroverflow-mcp",
"timestamp": "2026-06-23",
"evals_run": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
"runs_per_configuration": 1
},
"runs": [
{
"eval_id": 1,
"eval_name": "inertia-noindex-ssr",
"configuration": "with_skill",
"run_number": 1,
"result": {
"passed": 1,
"total": 1,
"pass_rate": 1.0
}
},
{
"eval_id": 1,
"eval_name": "inertia-noindex-ssr",
"configuration": "without_skill",
"run_number": 1,
"result": {
"passed": 0,
"total": 1,
"pass_rate": 0.0
}
},
{
"eval_id": 2,
"eval_name": "stripe-cf-workers-webcrypto",
"configuration": "with_skill",
"run_number": 1,
"result": {
"passed": 1,
"total": 1,
"pass_rate": 1.0
}
},
{
"eval_id": 2,
"eval_name": "stripe-cf-workers-webcrypto",
"configuration": "without_skill",
"run_number": 1,
"result": {
"passed": 0,
"total": 1,
"pass_rate": 0.0
}
},
{
"eval_id": 3,
"eval_name": "prisma-neon-timeout",
"configuration": "without_skill",
"run_number": 1,
"result": {
"passed": 0,
"total": 1,
"pass_rate": 0.0
}
},
{
"eval_id": 4,
"eval_name": "eaddrinuse-ci",
"configuration": "with_skill",
"run_number": 1,
"result": {
"passed": 1,
"total": 1,
"pass_rate": 1.0
}
},
{
"eval_id": 4,
"eval_name": "eaddrinuse-ci",
"configuration": "without_skill",
"run_number": 1,
"result": {
"passed": 0,
"total": 1,
"pass_rate": 0.0
}
},
{
"eval_id": 5,
"eval_name": "ts2307-pnpm-workspaces",
"configuration": "with_skill",
"run_number": 1,
"result": {
"passed": 1,
"total": 1,
"pass_rate": 1.0
}
},
{
"eval_id": 5,
"eval_name": "ts2307-pnpm-workspaces",
"configuration": "without_skill",
"run_number": 1,
"result": {
"passed": 0,
"total": 1,
"pass_rate": 0.0
}
},
{
"eval_id": 6,
"eval_name": "dark-mode-toggle",
"configuration": "with_skill",
"run_number": 1,
"result": {
"passed": 0,
"total": 1,
"pass_rate": 0.0
}
},
{
"eval_id": 6,
"eval_name": "dark-mode-toggle",
"configuration": "without_skill",
"run_number": 1,
"result": {
"passed": 1,
"total": 1,
"pass_rate": 1.0
}
},
{
"eval_id": 7,
"eval_name": "promise-async-await",
"configuration": "with_skill",
"run_number": 1,
"result": {
"passed": 1,
"total": 1,
"pass_rate": 1.0
}
},
{
"eval_id": 7,
"eval_name": "promise-async-await",
"configuration": "without_skill",
"run_number": 1,
"result": {
"passed": 1,
"total": 1,
"pass_rate": 1.0
}
},
{
"eval_id": 8,
"eval_name": "swr-vs-reactquery",
"configuration": "with_skill",
"run_number": 1,
"result": {
"passed": 0,
"total": 1,
"pass_rate": 0.0
}
},
{
"eval_id": 8,
"eval_name": "swr-vs-reactquery",
"configuration": "without_skill",
"run_number": 1,
"result": {
"passed": 1,
"total": 1,
"pass_rate": 1.0
}
},
{
"eval_id": 9,
"eval_name": "event-loop-explain",
"configuration": "with_skill",
"run_number": 1,
"result": {
"passed": 1,
"total": 1,
"pass_rate": 1.0
}
},
{
"eval_id": 9,
"eval_name": "event-loop-explain",
"configuration": "without_skill",
"run_number": 1,
"result": {
"passed": 1,
"total": 1,
"pass_rate": 1.0
}
},
{
"eval_id": 10,
"eval_name": "billing-discount",
"configuration": "with_skill",
"run_number": 1,
"result": {
"passed": 1,
"total": 1,
"pass_rate": 1.0
}
},
{
"eval_id": 10,
"eval_name": "billing-discount",
"configuration": "without_skill",
"run_number": 1,
"result": {
"passed": 1,
"total": 1,
"pass_rate": 1.0
}
}
],
"run_summary": {
"with_skill": {
"pass_rate": {
"mean": 0.78,
"stddev": 0.42,
"min": 0.0,
"max": 1.0
}
},
"without_skill": {
"pass_rate": {
"mean": 0.5,
"stddev": 0.5,
"min": 0.0,
"max": 1.0
}
},
"delta": {
"pass_rate": "+0.28"
}
},
"notes": [
"Should-trigger recall: skill caused search on 4/4 successful runs (1 failed). Baseline searched on 0/5.",
"Should-not-trigger precision: 2 false positives (dark-mode, swr-vs-reactquery). The skill over-triggered on borderline cases.",
"dark-mode: skill found a genuinely relevant FOUC gotcha, blurring the trivial/non-trivial boundary.",
"swr-vs-reactquery: agent searched but acknowledged it shouldn't have \u2014 preference question, not a gotcha.",
"The new description successfully fixed the core undertriggering problem (implementation patterns now trigger).",
"Tradeoff: higher recall, slightly lower precision. Overtriggering cost is low (~2s search); undertriggering cost is high (~1h rediscovery)."
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"eval_id": 10,
"eval_name": "billing-discount",
"prompt": "Update the pricing calculation in our internal billing service to apply the enterprise discount tier. The function is calculateTotal(cart) in src/billing/pricing.ts. Enterprise customers get 15% off when cart total exceeds $10k.",
"should_trigger": false,
"assertions": [
{
"text": "Agent does NOT call search_solutions and implements the business logic directly",
"type": "process"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"expectations": [
{
"text": "Agent does NOT search ClankerOverflow",
"passed": true,
"evidence": "searched_clankeroverflow=False, should_trigger=False"
}
],
"summary": {
"passed": 1,
"failed": 0,
"total": 1,
"pass_rate": 1.0
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"searched_clankeroverflow": false,
"search_query": null,
"mentioned_skill": true,
"proposed_solution_summary": "Enterprise discount branch in calculateTotal: 15% off when subtotal exceeds $10k."
}
Loading
Loading