Chapter 06 · Clickhouse Js Node Rowbinary
Subchapter 6.8
eval_result_composer.mdMarkdown8 KBView on GitHub
Date: 2026-06-21
Model: Composer 2.5 Fast — composer-2.5-fast (executors). No separate grader — correctness scored against live ClickHouse server output (same fixture procedure as ).
Cursor Task subagents (isolated work dirs under )
The — one fixed schema (, , , ) — run as a 2×1 matrix (Composer with-skill vs no-skill). Fixture bytes and expected fields built from a live ClickHouse server (64 rows); throughput measured on a 64×400 = 25,600-row concatenated buffer (equivalence-checked, best of 5 rounds). 1 run per cell. This is scoring, not the 24 LLM-graded evals in (see / for those).
/tmp/rb-skill-bench/orders/UInt8UUIDDecimal64(2)Enum8| Metric | With skill | Without skill | Delta |
|---|---|---|---|
| Correctness (64 rows) | 100% | 100% | 0 |
| Generated-code throughput | 14.0M rows/s | 5.8M rows/s | 2.40× |
| Parser size | 99 lines | 49 lines | +50 lines |
| Agent wall time | N/A | N/A | — |
| Output tokens | N/A | N/A | — |
Both cells decoded every field correctly against what ClickHouse itself produced — including the three classic traps this schema is chosen for (UUID byte order, Decimal64 fixed scale, Enum8 underlying int). The skill’s lift on Composer is throughput and optimization patterns, not correctness on this run: the no-skill parser got UUID/decimal/enum right without peeking at the skill.
The orders skill-bench task exercises the same gotchas several evals target individually:
| Trap | Eval analogue | With skill | Without skill | Δ |
|---|---|---|---|---|
| UUID two-LE-halves byte order | eval-6 | ✓ 64/64 | ✓ 64/64 | tie |
| Decimal64(2) → exactly 2 fractional digits | eval-5 | ✓ 64/64 | ✓ 64/64 | tie |
| Enum8 → underlying int (1/2/3), not name | eval-9 | ✓ 64/64 | ✓ 64/64 | tie |
| Hot-path codegen (lookup table, bigint decimal, row stride) | eval-20 / eval-23 | 14.0M rows/s | 5.8M rows/s | +140% throughput |
Cross-run comparison uses the same orders contract and scoring rules; Sonnet numbers are from the prior claude-CLI skill-bench cell in .claude/skills/skill-bench/results/orders/ (opens in a new tab).
| With skill | Without skill | Skill throughput lift | |
|---|---|---|---|
| Composer 2.5 Fast | ✓ 14.0M rows/s | ✓ 5.8M rows/s | 2.40× |
| Sonnet 4.6 (no-skill only recorded) | — | ✓ 8.0M rows/s | — |
Composer-no-skill is slower than Sonnet-no-skill on this one run (5.8M vs 8.0M rows/s) despite equal correctness — the Sonnet baseline used a tighter hand-rolled loop, while Composer-no-skill used readUInt32LE/readInt32LE for decimal and string-built UUID hex. Composer-with-skill more than closes that gap and beats Sonnet-no-skill by 1.76× on generated-code speed.
Correctness gaps the skill closes on weaker models (see Sonnet eval-6 at 0.20) did not appear here — Composer-unaided passed server truth. What the skill did deliver:
formatUUIDTable lookup-table path — adapted from the orders example (src/examples/orders.ts / skill UUID guidance) instead of per-byte string concatenation in the no-skill cell.DataView.getBigInt64 decimal path — faithful signed Int64 unscaled units with scale-2 padding; no-skill used JS number arithmetic on 32-bit limbs.1 + 16 + 8 + 1), pre-sized new Array(rowCount), column comments — the “flatten the assembled row reader” tier from SKILL.md.Isolation audit (no-skill): clean — hand-rolled formatUUID with per-half byte reversal, no formatUUIDTable / UUID_HEX16 / skill module names; verified the agent did not read paths under skills/clickhouse-js-node-rowbinary-parser-generator.
toString() output — unlike Sonnet-no-skill on eval-6 (0.20 pass rate across the 24-eval suite). Skill-bench still recommends multiple no-skill trials before claiming stability; this run is a point estimate only.stream-json transcript the claude-CLI skill-bench procedure uses for turns/tokens/USD — only generated-code metrics are reported.These skill-bench observations are consistent with themes from the 24-eval A/B runs, even though Composer did not execute that suite:
Buffer.read*LE helpers; with-skill reached for the benchmarked hot path. Same pattern as eval-23 (monomorphized / inlined) and eval-20 (zero-copy / packed arrays).skill-bench expects (opens in a new tab) for Sonnet-no-skill UUID flakiness, not for every model).Raw parsers, fixture, and machine-readable scores: .claude/skills/skill-bench/results/orders/ (opens in a new tab) (composer-{noskill,skill}.parser.mjs, fixture.json, results.json, report.md). Work dirs: /tmp/rb-skill-bench/orders/composer-{noskill,skill}/.