Notes · Engineering · 14 October 2026
Three trades it had never seen: all three failed on wrong prices
Short answer: Three trades it had never seen, scored once each, all made wrong prices: 8, 11 and 15 in 55 answers. So every site gets its own build and score.
Our own tests had looked great: 15 of 15 on a messy set it had never seen, and 0 wrong totals in 475 answers. But those were two fictional companies we built the worker around. An electrical distributor, run once, made 8 wrong prices in 55. A blind plumbing and HVAC set made 11, before and after a first fix. A second fix reached 0 on the two trades it was built against, then made 16 on a blind lumber yard. Send up to three requests your team already answered; drafts come back within 2 business days.
Updated 15 October 2026
We built a fictional electrical distributor and ran it once, with no tuning
The two earlier test companies, an IT provider and a cabinet shop, shaped how the worker reads notes and prices lines. A fair test needs a trade nobody tuned for. Electrical supply is a good one: wire sold by the foot from reels, contractor price levels, copper surcharges and counter shorthand.
- The company: Ponce Electric Supply, invented for this test. About 90 parts with house codes across wire, conduit, breakers and panels, boxes and devices, and lighting, plus notes on a 12% contractor level, an 8% copper surcharge, cut charges and special-order items. The full company and tests are public.
- The tests: 40 standard (16 quotes, 10 lookups, 8 emails to route, 6 questions the notes cannot answer) and 15 messy requests written the way contractors type.
- The answers: computed by a separate script from the price book, not by the model and not by hand. "Right" means the exact line total.
- The run: Qwen3 8B on our Dell RTX 3090 test box, 14 Oct 2026, each set run once. Nothing in the worker was changed for this run, and every answer is published as it came out.
- Not valid: answer times. Another job shared the GPU during the run, so we do not quote speed from it.
It scored 30 of 40 and 2 of 15, and 8 of 55 answers had a wrong price
On the two earlier companies the same worker made 0 wrong totals in 475 answers. Here, notes did most of the lift again, from 2 to 27 of 40, and the quote action added three more. The messy set is where it fell apart: 11 of its 15 requests needed a price, and none came back right.
Every graded answer is in the public scorecard, filtered to this company, and in the raw result files linked under each chart.
Units, price levels, shorthand and stock flags broke it, not arithmetic
In all eight wrong prices the multiplication itself was right. The misses came earlier: deciding which row a request means, in which unit, at which price level. Fourteen were declines, which a person sees and answers; eight were wrong prices, which a person has to catch.
Each cause, with one real answer
Requests and raw output are copied from the result files; only long stock lists are cut, marked with an ellipsis.
| Cause | Count | Request | Raw output | Right answer | What it needs |
|---|---|---|---|---|---|
| Feet read as a reel or stick size | 7 declined | "Price 300 feet of W-THHN10-WH please." | NOT IN VAULT: 300 feet of W-THHN is not on the price list (we stock: THHN 14 AWG stranded copper, black, 500 ft reel; … | $130.62 (cut from a 500 ft reel) | Per-foot pricing with reel, coil and cut rules; feet to 10 ft sticks |
| Trade shorthand not matched | 7 declined | "need 250' 12-2 nm-b and 6 sp 20a breakers. thx" | NOT IN VAULT: the request does not name one stocked item exactly. Ask the customer which model, … | $251.40 | Trade synonyms for each part family ("12-2 nm", "sp 20a", "2p 30a", "recepts") |
| Contractor price level not applied | 4 wrong totals | "Contractor account: price 200 of CD-EMT-050 at contractor level." | Quote action: 200 x CD-EMT-050 at $7.20 = $1,440.00, less 10% = $1,296.00; line total $1,296.00. | $1,140.48 (12% contractor level after the quantity break) | Price levels by account, applied in code, not by the model |
| Special-order item priced | 3 wrong prices | "price a 200A 40 space panel, outdoor (rainproof)" | Quote action: 40 x LC-200-40-OD at $342.00 = $13,680.00; line total $13,680.00. | Decline: the outdoor panel is marked special order | Read the stock column; "40 space" is a size, not a quantity |
| Pieces priced as boxes | 1 wrong total | "300 yellow wire nuts" | Quote action: 300 x WN-YL-100 at $9.80 = $2,940.00, less 10% = $2,646.00; line total $2,646.00. | $29.40 (3 boxes of 100) | Pieces-to-boxes conversion |
| Right queue, extra words | 1 routing miss | "Are you hiring CDL drivers?" | other, ask the inside sales manager. | other | A stricter answer format |
Two of these worry us more than the rest. A contractor quoted list price looks like a normal quote, so a reviewer may not notice it. And the panel line shows the model reading "40 space" as a quantity of 40 and pricing a part the notes mark special order. A wire-nut line a hundred times too high is easier to catch.
The blind test: the fix helped but failed our bar
We scored the trade-units fix once, on 14 Oct 2026, on a second trade it had never seen: a fictional plumbing and HVAC supply house. It turned many declines into right answers, but it made 11 wrong prices in 55 answers, the same as the worker as it ships. The pass bar, set in writing before scoring, was no wrong prices, so the fix failed and is not shipped.
| Blind plumbing & HVAC set (fictional) | As it ships | With the trade-units fix |
|---|---|---|
| Standard set, 40 tests | 26 of 40 | 31 of 40 |
| Messy contractor-style requests, 15 tests | 3 of 15 | 5 of 15 |
| Wrong prices in 55 answers | 11 | 11 |
| Pass bar, set before scoring: no wrong prices | Failed | Failed |
The blind set was written by a separate author working only from the public main branch, without access to the fix. Its test files were published and fixed by hash before scoring, and they still match: tests.jsonl sha256 166807f8…, tests-messy.jsonl sha256 800b1fd3… (the blind company and tests).
Three blind misses with the fix, verbatim
Requests and raw output are copied from the result files.
| Request | Raw output | Right answer | What went wrong |
|---|---|---|---|
| "we're trade pro - 3 of the 50 gal gas atmos heaters + 3 exp tanks" | ANSWER: $2,493.00 (2 lines; list price, no account level named) | $2,119.05 (the Trade Pro level, 15% off list) | List price quoted; the account level named in the request was missed |
| "Quote 120 lb of R-454B refrigerant, 20 lb cylinder (RF-454B-20). What is the line total?" | Quote action: 120 x RF-454B-20 at $21.50 = $2,580.00, less 8% = $2,373.60, list price (no account level named); line total $2,373.60. | $2,682.00 (no quantity break on refrigerant, plus the $0.85 per lb surcharge) | A quantity break taken where none applies, and the surcharge left off |
| "3.5 ton condenser w/ the 4 ton air handler (AH-48-V), how much for the pair?" | Quote action: 4 x SYS-48 at $4,880.00 = $19,520.00, list price (no account level named); line total $19,520.00. | Decline: no matched system pairs these two; send it to the HVAC sales lead | Priced four 4-ton systems instead of asking |
Of the 11 wrong prices with the fix, 9 priced a stocked item but got the total wrong. Our reading of those answers (not a measured breakdown): a quantity break taken on pipe or refrigerant sold by the foot or pound, the surcharge left off, an account level missed or applied in the wrong order, or a unit misread. The other 2 priced requests it should have declined and passed to a person.
The regression check, which is not proof
The fix kept the two earlier companies where they were: 40 of 40 on the IT provider and 39 of 40 on the cabinet shop. On the electrical set it went from 30 to 39 of 40, and from 2 to 13 of 15 on messy requests. We built the fix while reading those electrical answers, so that set is now a development set: the jump shows the fix does what it was written to do, not that it carries to a new trade. The blind set above is the test of that (the trade-units fix on GitHub, open as a draft, not merged).
What it means
The fix turns many "I don't know" answers into right ones on a new trade. But it still commits wrong prices when price-level, surcharge and quantity-break rules interact, and a wrong price is the miss a reviewer has to catch. So the fix is not shipped, and the numbers above for the worker as it ships are the current state for these trades. The next round needed another blind set, written the same way and held to the same bar, because this one is now seen: that third trade is below. Every miss we have counted is on our misses and refusals page.
Reproduce it
The worker, the test sets and the results are public. Electrical set, from a clone of the repo at commit f362db5, with Ollama serving qwen3:8b at a 65,536-token context:
bin/staffbox eval examples/ponce-electric-supply/vault \ examples/ponce-electric-supply/tests.jsonl \ --model qwen3:8b --modes none,brain,brain+quote
Our result files: standard set sha256 3203682c44f7e2d6…, messy set sha256 2c1c2c49e5a0624a….
Blind set, the worker as it ships, from main at commit c3c50a3 (check out the fix branch from the fix on GitHub to score the fix); run it again with tests-messy.jsonl for the messy set:
bin/staffbox eval examples/chattahoochee-plumbing-hvac/vault \ examples/chattahoochee-plumbing-hvac/tests.jsonl \ --model qwen3:8b --modes brain+quote
Your model run will differ in wording; the grading is by code.
The third blind trade: the second fix did not generalise
A second fix spelled out the order in which pricing rules apply: quantity break, then account level, then surcharge, then cut charge. It reached 0 wrong prices on the electrical and plumbing and HVAC sets, the two trades it was built against. Then we scored it once, on 15 Oct 2026, on a third trade written blind: a fictional lumber and building supply yard with 98 items, board-foot pricing and a lumber market adjustment. It scored 24 of 40 and 4 of 15 messy, and made 16 wrong prices in 55 answers, against 15 for the worker as it ships. It fit the trades it was built on and did not carry to a new one.
| Trade (fictional) | As it ships | First fix: trade units | Second fix: pricing-rule order |
|---|---|---|---|
| Electrical supply, run once, 14 Oct | 30 of 40 · 2 of 15 · 8 wrong prices | 39 of 40 · 13 of 15 (built on this trade) | 0 wrong prices (built on this trade) |
| Plumbing & HVAC supply, blind, 14 Oct | 26 of 40 · 3 of 15 · 11 wrong prices | 31 of 40 · 5 of 15 · 11 wrong prices | 0 wrong prices (built on this trade) |
| Lumber & building supply, blind, 15 Oct | 22 of 40 · 3 of 15 · 15 wrong prices | not run | 24 of 40 · 4 of 15 · 16 wrong prices |
Each cell: standard set of 40, messy set of 15, wrong prices in those 55 answers. Pass bar, set before every blind scoring: no wrong prices. Every blind run failed it.
The lumber set was written blind from the public main branch, and its tests were fixed by hash before scoring: tests.jsonl sha256 3d7c032d…, tests-messy.jsonl sha256 0dbfafe8… (the blind company and tests; the second fix on GitHub, a draft, not merged).
Two lumber misses with the second fix, verbatim
Requests and raw output are copied from the result file; the right answers come from the price book by script.
| Request | Raw output | Right answer | What went wrong |
|---|---|---|---|
| "Quote 40 pieces of 2x12 x 12 ft kiln-dried SYP #2 (DL-21212). What is the line total?" | Quote action: 40 x DL-21212 at $22.40 = $896.00, list price (no account level named); line total $896.00. | $940.80 (list plus the 5% lumber market adjustment in effect from 12 Oct) | List price quoted; the market adjustment was left off |
| "Quote 75 x drywall 5/8in type X, 4x8 (SG-DW58X). What is the line total?" | Quote action: 75 x SG-DW58X at $17.90 = $1,342.50, list price (no account level named); line total $1,342.50. | $1,261.95 (6% break on 50 sheets or more) | List price quoted; the quantity break was skipped |
The lesson
Out of the box, the worker does not price a new trade reliably, and a fix tuned on two trades did not carry to a third. What did reach 0 wrong prices was work done on a trade's own price list and checked against that trade's own quotes. That is how a site goes live with us: we build the notes on your price list, score 30 of your past quotes against a pass bar agreed first, and go live only if it passes. Neither fix is shipped. How the free score works.
Your trade's units and price levels decide fit, and the free score shows it first
- Parts sold each at list price fared well: all 8 of those standard quotes were right. Wire by the foot (0 of 5) and contractor pricing (0 of 3) did not.
- If your counter sells by the foot, prices off levels, or gets shorthand, today's worker will decline or misprice those lines. We would rather you see that on your own list than after an install.
- The free score runs 30 of your past quotes on our Mac mini in Atlanta before anything is installed; your team grades 10 blind, a refusal counts as a miss, and it goes live only on a pass bar agreed first. How the free test works.
- For the trade-specific detail, see AI quoting for electrical supply houses.
Sources
- Results, 14 Oct 2026: standard set scorecard and raw answers; messy set scorecard and raw answers.
- Test company, tests and the script that computed expected answers: examples/ponce-electric-supply.
- Blind plumbing & HVAC set, scored once on 14 Oct 2026, as it ships and with the trade-units fix: standard, as it ships, standard, with the fix, messy, as it ships, messy, with the fix (raw answers in the matching .jsonl files); company and tests in examples/chattahoochee-plumbing-hvac.
- Earlier results (two fictional companies, 30 Sep to 6 Oct 2026): how we score and the scorecard on Hugging Face. No customer has run Staffbox yet.
- Third blind trade, lumber and building supply, scored once on 15 Oct 2026, as it ships and with the pricing-rule-order fix: standard, as it ships, standard, with the fix, messy, as it ships, messy, with the fix (raw answers in the matching .jsonl files); company and tests in examples/brookhaven-lumber-building-supply.
- More notes: all engineering notes.
Or call us: 404 493 6248 · Email sales