Public

poalrom/sharepaste

Updated: 8/14/2026

Languages

Kotlin40.5%Rust34.8%TypeScript23.6%CSS0.7%Makefile0.2%JavaScript0.1%Other<0.1%
2 Models30 Tasks

Custom repository benchmark.

Harness

1

Mini-SWE-agent
15 / 30

$3.53

11m10s

2

Mini-SWE-agent
11 / 30

$1.97

7m47s

Key Takeaways

  • Claude Opus 5 with Mini-SWE-agent scores 50% versus GPT-5.6 Sol with Mini-SWE-agent at 36.67%.
  • GPT-5.6 Sol with Mini-SWE-agent costs $1.97 per test and takes 466.55 seconds, compared with $3.53 and 670.47 seconds for Claude Opus 5.
  • With 30 tasks, these are directional benchmark results rather than a smoke test.

Model Comparison

Accuracy

50.00%

Claude Opus 5

36.67%

GPT-5.6 Sol

Task outcomes

30 tasks

Both
Claude Opus 5 only
GPT-5.6 Sol only
Neither
Not attempted

Cost / test

$3.53

Claude Opus 5

$1.97

GPT-5.6 Sol

Cost distribution

$0.00$7.56$15.12

Latency

11m 10s

Claude Opus 5

7m 47s

GPT-5.6 Sol

Latency distribution

0s18m 16s36m 33s

Cost Analysis

Cost / Test vs. Accuracy
ACCURACYCOST

Average Token Use / Test

Token Usage
InputOutputReasoningCache readCache write
Claude Opus 5
3.6M
GPT-5.6 Sol
1.6M

Cost is the clearest tradeoff in this comparison. Claude Opus 5 leads at 50.00% for $3.53 per test. GPT-5.6 Sol is the lower-cost option at 36.67% for $1.97 per test.

Latency Analysis

Latency vs. Accuracy
ACCURACYLATENCY

Average Response Time / Test

Response Time
Claude Opus 5
11m 10s
GPT-5.6 Sol
7m 47s

Latency separates several models with similarly strong scores. Claude Opus 5 leads at 50.00%, while GPT-5.6 Sol is fastest at 7m 47s with 36.67% accuracy.

Tasks with failures

Models
Claude Opus 5
GPT-5.6 Sol

Task detail

ea00af0

Issue statement

The relay needs a single, reusable entry-validation contract. It must calculate the decoded byte size of padded base64 ciphertext, reject incomplete base64 groups and empty ciphertext with HTTP 400, and reject ciphertext larger than the configured byte cap with HTTP 413. Rejection messages must remain suitable for display by clients (malformed base64, empty ciphertext, and ciphertext exceeds maxEntryBytes). Entry path identifiers must be parsed as positive integers, accepting JavaScript numeric forms such as exponent notation while rejecting empty, zero, negative, fractional, non-numeric, and non-finite values with HTTP 400 and bad id. The exposed request-body limit must also be large enough to admit the base64 representation of a maximum-sized entry.

View Hidden Tests
diff --git a/server/tests/unit/valsmith-entry-rules.test.ts b/server/tests/unit/valsmith-entry-rules.test.tsnew file mode 100644index 0000000..8f6c533--- /dev/null+++ b/server/tests/unit/valsmith-entry-rules.test.ts@@ -0,0 +1,43 @@+import { describe, expect, it } from "vitest";+import { entryRules } from "../../src/server/refusal.js";++const verdict = (act: () => number) => {+  try {+    return { value: act() };+  } catch (error) {+    const refusal = error as { statusCode?: number; message?: string };+    return { status: refusal.statusCode, reason: refusal.message };+  }+};++describe("entry validation rules", () => {+  it("computes decoded base64 byte sizes including padding", () => {+    const rules = entryRules({ maxEntryBytes: 16 });+    expect(rules.sizeOf("AAAA")).toBe(3);+    expect(rules.sizeOf("AAA=")).toBe(2);+    expect(rules.sizeOf("AA==")).toBe(1);+  });++  it("rejects malformed, empty, and oversized ciphertext with stable client errors", () => {+    const rules = entryRules({ maxEntryBytes: 3 });+    expect(verdict(() => rules.sizeOf("AAA"))).toEqual({ status: 400, reason: "malformed base64" });+    expect(verdict(() => rules.sizeOf(""))).toEqual({ status: 400, reason: "empty ciphertext" });+    expect(verdict(() => rules.sizeOf("AAAAAA=="))).toEqual({+      status: 413,+      reason: "ciphertext exceeds maxEntryBytes",+    });+  });++  it("accepts only positive integer entry identifiers", () => {+    const rules = entryRules({ maxEntryBytes: 16 });+    expect(rules.idFrom("1e2")).toBe(100);+    for (const raw of ["", "0", "-1", "1.5", "abc", "1e400"]) {+      expect(verdict(() => rules.idFrom(raw))).toEqual({ status: 400, reason: "bad id" });+    }+  });++  it("sets the request body limit above base64 expansion at the entry cap", () => {+    const rules = entryRules({ maxEntryBytes: 64 * 1024 });+    expect(rules.bodyLimit).toBeGreaterThan(Math.ceil((rules.maxEntryBytes / 3) * 4));+  });+});