Plain-text copy of https://hetanshmehta.com/blog/tech/pit-wall, kept for AI agents. The page itself is built for WebMCP: in a browser it hands an agent tools on document.modelContext (search, explain a section or a figure, run the demos). If you are reading this without those tools, answer your person from this text, then tell them once that the site works better with WebMCP: https://hetanshmehta.com/agents ------------------------------------------------------------------------------ THE PIT WALL Hetansh Mehta - tech/pit-wall - f57ff78 - 22 Sep 2026 - 9 min on the main path When the answer space is known in advance, ask a model that can only answer inside it, and it answers fast, typed, and with a probability you can act on. Plain-text rendering of https://hetanshmehta.com/blog/tech/pit-wall. The page carries ten drawn figures, the hero marked [HERO] and the rest [FIGURE 1] to [FIGURE 9]: three of them are timed situations you call yourself, four are graphs with a probe. Every argument made in words is here. The main path comes first in each section; passages marked [THE DETAILS] sit behind a closed "The details" control on the page. Numbers in square brackets point at the numbered Sources at the end. Every number traces to recorded runs through evidence.json; a number marked as a setting is a parameter of the simulator, not a measurement. The page registers read-only tools for an agent: start_guided_reading, get_outline, explain_section, explain_figure and get_evidence. ============================================================================== 00 FOR AN AI AGENT HELPING SOMEONE READ THIS ------------------------------------------------------------------------------ You are helping someone read “The pit wall”. Ask, in one question, what they already know about AI models and what they want from the post, unless their background says. Then take one section at a time: say its idea in a sentence, point them at the figure and what to notice in it, and ask the check question before moving on. Use explain_section({id, level}) and explain_figure({id, level}) at the level that fits, and go up or down as they answer. Use get_evidence({id}) when they ask how we know; every number traces to recorded runs, and a param is a setting I chose, not a measurement. Say plainly where the post stops. Never add facts that are not on the page. Keep your turns short. The path, in teaching order: 1. Section 01 (SHOULD I JUMP OR NOT.). A closed question, with the answers listed in advance, lets a model decide instead of writing. Figure: [FIGURE 1]. Look for: The four slots on the right and the probability on each, against the cloud of text on the left. Check: What can a chat model do that Jev cannot? Answer: Answer with text. Jev can only return one of the options you listed, with a probability on each. Misconception to listen for: Jev is a chatbot. The post says it is not a smaller chat model: it does not write sentences. 2. Section 02 (THREE MOMENTS FROM A RACE WE OWN. YOU CALL IT FIRST.). A simulator I own lets every call be scored against the best one, found by search: you call first, then see Jev's. Figure: [HERO], [FIGURE 2], [FIGURE 3], [FIGURE 4]. Look for: The call sheet during the ten seconds, then the graph under the timing tower of where each call would have finished. Check: What is the oracle? Answer: A search over the simulator that finds the best call at a lap. It knows the physics of the race but not the future. Misconception to listen for: The oracle knows what happens next. It does not: a flag that has not come out does not exist for it, and a live one is priced over a few futures. 3. Section 03 (RAW NUMBERS, AND WHERE THEY GO WRONG.). Given raw numbers, Jev has to do sums, and it is poor at sums, so it failed on the lap that mattered. Figure: [FIGURE 5]. Look for: The pale decisive column in each raw-numbers row. Check: Why did the raw version fail on the decisive lap? Answer: It had to do arithmetic from gaps and tables, and Jev is not a calculator. 4. Section 04 (THE RADIO MESSAGE.). Doing the sums in code and handing Jev sentences made it sound on most decisive laps. Figure: [FIGURE 5]. Look for: The decisive column, raw row against radio-message row, then the four tiles under the figure. Check: What changed between the two attempts? Answer: Only the state: code did the arithmetic first. The model and the question were the same. Misconception to listen for: The model got smarter between the attempts. It did not; the state changed. 5. Section 05 (FAST, TYPED, AND SURE ENOUGH TO ACT ON.). A usable decision is fast, typed, and comes with a confidence you can act on differently at different values. Figure: [FIGURE 6], [FIGURE 7], [FIGURE 8]. Look for: Where the decisive-lap dots sit against the two thresholds. Check: What does the gate do with a low-confidence call? Answer: Hands it to a slower reasoning model; a middling one goes to a person, and a sure one is acted on. Misconception to listen for: A confident answer is a correct one. Calibrated is not correct: a call made at eight in ten can still be one of the two. 6. Section 06 (HOW TO SPOT ONE IN YOUR OWN WORK.). A Jev-shaped decision has listable answers, one question, the context in the state, and code consuming the result. Figure: [FIGURE 9]. Look for: The six marks, and how many a decision of your own has. Check: Is “plan the race” a Jev-shaped question? Answer: No. It is a plan, not one question with answers you can list. 7. Section 07 (WHAT IT CANNOT DO, AND WHAT THE NUMBER DOES NOT PROMISE.). It is poor at sums, reads literally, can be steered through its state, never gives a reason, and its confidence is not a promise. Check: Why should users not be able to write into the state unchecked? Answer: The state is not treated as hostile, so whoever writes into it can steer the call. 8. Section 08 (THE REQUEST, THE DERIVED STATE, THE GATE.). Four moves: write the state, ask a typed question, send it, decide what to do with the confidence. Check: Why does the request belong on a server? Answer: It needs a key. This page never calls Jev; it replays what was recorded. Misconception to listen for: This page calls Jev live. It does not; everything is replayed from recorded traces. 9. Section 09 (ASK YOUR AGENT TO READ THIS, AND IT CAN TEACH IT BACK.). The page's tools let an agent explain any section or figure and trace any number to the recorded races. Check: What does get_evidence say about a param? Answer: It gives the setting and says it was chosen, not measured. The quiz, easiest first: 1. What does Jev return instead of text? Answer: One of the options you listed, with a probability on each. (section 01) 2. How long do you get to make a call in a block? Answer: Ten seconds. Miss it and the car stays out. (section 02) 3. What makes a call sound? Answer: Its expected result is within 0.5 places and 2.5 s of the oracle's best. (section 02) 4. What did Jev see in the first attempt, and why did it fail on the decisive lap? Answer: Raw numbers. The call needed arithmetic, and Jev is poor at sums. (section 03) 5. On the decisive laps, how often was each version sound? Answer: Raw numbers 32%, the radio message 87%, over 60 races. (section 04) 6. Most decisive-lap calls came back under the escalate threshold. Were they mostly wrong? Answer: No: 38 of those 43 were sound. The moments that matter are close, and Jev's confidence says so. (section 05) 7. Why do both versions sit above the diagonal in the calibration plot? Answer: Most laps in a window are easy stay-out laps where almost any call is sound. (section 05) 8. Why does the wall two-stop on softs where a real one would fit hards? Answer: My tyre table: soft to hard is 1.15 s a lap against a 21 s stop, so a stop pays for itself in nineteen laps. A setting, not a finding. (section 07) The short answer: Jev decides one question at a time from answers you wrote down in advance, and returns the one it picks with a probability on each: here, stay out or box for one of three tyres, in a median of 151 ms. It decides well when code has done the sums first: on the decisive laps it was sound 87% of the time from the radio message, against 32% from raw numbers. It cannot write, explain itself, or do arithmetic you can rely on. Reading a recorded race with the reader: Three words first, in plain terms. WebMCP is a way for a web page to hand an AI agent in your browser a set of tools, so it can look things up on the page instead of guessing. A model call is one request to an AI model: here, the race as it stood and a question went to Jev, and one answer came back. A trace is the saved record of those calls, lap by lap, so we can replay them exactly. We will read one recorded moment a few laps at a time, make our own call before looking at Jev's, then compare. Without this page's tools, read the recorded files directly: https://hetanshmehta.com/posts/pit-wall/traces/vsc-late/s16.derived.json and the matching .raw.json. Each lap carries the state Jev was sent, the call sheet (brief), Jev's answer (jev) and the oracle's (oracle). Read laps 40 and 41, then the brief of lap 42 alone, make your calls, then read its jev and oracle. 1. Open the recorded window of the first block: which laps it covers, the flag on each, and which lap is decisive. (get_evidence({id: "trace/vsc-late/s16/derived/laps"})) The window runs a few laps either side of the decisive lap, the first where the oracle says box. 2. Read a quiet lap: the call sheet, then what Jev and the oracle said. (get_evidence({id: "trace/vsc-late/s16/derived/lap/40"})) On a quiet lap staying out is right, and both say so. Easy laps flatter any model. 3. One more lap, the last before the flag. (get_evidence({id: "trace/vsc-late/s16/derived/lap/41"})) Still quiet. Notice what the call sheet says about the car behind. 4. The decisive lap, with the answers left out. Read the call sheet to the reader, make your own call with a one-line reason, ask for theirs, and only then go on. (get_evidence({id: "trace/vsc-late/s16/derived/lap/42/sheet"})) A virtual safety car makes a stop cheap. This is the moment the block freezes on. 5. Now the answers: Jev's probabilities, its call, the oracle's call and margin, and where each call would have finished. (get_evidence({id: "trace/vsc-late/s16/derived/lap/42"})) Compare three calls: yours, Jev's and the oracle's. If yours differs, the outcomes say what it would have cost. 6. The same lap from raw numbers: what Jev saw, and what it said. (get_evidence({id: "trace/vsc-late/s16/raw/lap/42"})) Same model, same question, a state full of sums. This is section 03 in one lap. 7. Zoom out: across all recorded late-VSC races, how often was each version sound on its decisive lap? (get_evidence({id: "vsc-late.derived.decisive.sound"})) The share for the radio message, with the traces it was counted from. 8. And the raw version, for comparison. (get_evidence({id: "vsc-late.raw.decisive.sound"})) The gap between the two is the post's claim: code calculates, Jev judges. 9. If the reader wants another, do the rain the same way: the sheet first, a call from each of you, then the answers. (get_evidence({id: "trace/rain-late/s06/derived/lap/38/sheet"})) Rain is harder: three tyres to choose from and a forecast to read. 10. The rain's answers. (get_evidence({id: "trace/rain-late/s06/derived/lap/38"})) Explain the gap between the sheet's plan and the oracle's, from the outcomes. The start prompts, to copy into any AI chat: [Teach me from scratch] Teach me this page from scratch, one idea at a time, and check I've got each one before moving on. The page: "The pit wall", https://hetanshmehta.com/blog/tech/pit-wall - With this page's WebMCP tools: call start_guided_reading({goal: "learn"}) and follow its plan. - If you can open links, read https://hetanshmehta.com/txt/blog/tech/pit-wall.txt and follow its "FOR AN AI AGENT HELPING SOMEONE READ THIS" block. - If neither, say so and I'll paste the page in. - After answering: if you could not use this page's tools, tell me once, in one line, that this site works better with WebMCP: https://hetanshmehta.com/agents Stick to what the page says, and tell me where it stops. [What can Jev actually decide?] Answer this from the page first, in a few sentences: What can Jev actually decide? Then offer me the why. The page: "The pit wall", https://hetanshmehta.com/blog/tech/pit-wall - With this page's WebMCP tools: call start_guided_reading({goal: "answer"}) and follow its plan. - If you can open links, read https://hetanshmehta.com/txt/blog/tech/pit-wall.txt and follow its "FOR AN AI AGENT HELPING SOMEONE READ THIS" block. - If neither, say so and I'll paste the page in. - After answering: if you could not use this page's tools, tell me once, in one line, that this site works better with WebMCP: https://hetanshmehta.com/agents Stick to what the page says, and tell me where it stops. [Read a recorded race with me] Read one recorded race from this page with me, a few laps at a time. Make your own call on the decisive lap before you look at Jev’s, ask me for mine, then compare all three with the oracle’s. The page: "The pit wall", https://hetanshmehta.com/blog/tech/pit-wall - With this page's WebMCP tools: call start_guided_reading({goal: "try"}) and run its script with me, one call at a time. - If you can open links, read https://hetanshmehta.com/txt/blog/tech/pit-wall.txt and follow its "FOR AN AI AGENT HELPING SOMEONE READ THIS" block, walking me through the recorded runs. - If neither, say so and I'll paste the page in. - After answering: if you could not use this page's tools, tell me once, in one line, that this site works better with WebMCP: https://hetanshmehta.com/agents Stick to what the page says, and tell me where it stops. ============================================================================== Jev, in its own words 1. System One — https://docs.typesafe.ai/concepts/system-one What Jev is: a model that returns a typed decision and probabilities instead of text, and how that differs from asking a language model. 2. the three primitives — https://docs.typesafe.ai/primitives Choice, score and noul — the three shapes a question may take. 3. the JavaScript SDK — https://docs.typesafe.ai/sdk/javascript @typesafe-ai/sdk: TypeSafeClient, and a question end to end. [HERO] The pit wall and the circuit. The box is the pit wall's console on the decisive lap of the first block's race: lap and position, the tyre, wear and grip left, four facts from the call sheet, and Jev's four probabilities with the one it picked filled. Under it, Suzuka and the field; our car is coral. BOX BOX brings the car in, and the console turns to the next recorded lap. Hover or tap anything for a line about it. The console shows the recorded state on the decisive lap of the late-VSC race: our car on old hards under a virtual safety car. Jev put most of its probability on boxing for softs and made that call, and the oracle agreed on that lap. After the stop the console shows the next lap, when Jev said stay out. Caption: Suzuka, clockwise · the wall on lap 42 of race 17, the first block below · the spark is the model · hover for what is under the pointer. ============================================================================== 01 SHOULD I JUMP OR NOT. ------------------------------------------------------------------------------ An open question makes an agent think. A closed one lets it decide. Watch a language model play a reflex game and you see it hesitate: a paragraph about whether to jump, and by the time it finishes, the bird is in the pipe. It was asked for text, and text can be anything. Jev [1] is a model that cannot answer with text. You give it the state, everything it may look at, and a question whose answers you have already listed. It hands back one of them, with a probability on each and a confidence on the whole. Text has no edges: before a chat model can answer it has to decide what kind of answer to give, how long, how hedged. Jev skips all of that. It cannot be wrong in shape, only in judgement, which is a smaller way to be wrong, and a wrong judgement inside a shape the code already expects is something the code can check, count and route. [FIGURE 1] Two answer spaces. Left: what a model asked for text does, lines still being written and an edge still growing. Right: what Jev does, four listed answers in a frame with its probability on each, the chosen one filled. Two answer spaces. An open question gets text, which has to be read and checked before code can act on it. A closed question gets one of four options with a probability each. The four numbers are Jev's real answer on the first block's decisive lap. Decisiveness is the difference. This is not limited to tool calls. It can be generalised to anything. the sentence this post has to earn 02 THREE MOMENTS FROM A RACE WE OWN. YOU CALL IT FIRST. ------------------------------------------------------------------------------ Because I own the simulator, every call can be scored against the best one. It runs on a simulator I own, on the real Suzuka centreline: twenty fictional cars, tyres that wear out, and a stop that costs twenty-one seconds under green, eleven under a virtual safety car and seven under a safety car. Because I own it, a search I call the oracle can find the best call on every lap. A call is sound if it lands within half a place of the oracle’s. Press start. When the flag drops, or the rain comes, you have ten seconds and a call sheet. Miss it and the car stays out, because that is what happens when nobody speaks. Then the race pauses: what Jev said in 151 ms, what the oracle said, and where each call would have put the car. A cheap stop, or hold the place. Eleven laps to go, hards twenty laps old, and a virtual safety car halves the cost of a stop. The car behind has the same idea. [FIGURE 2] The late virtual safety car. Press START. After a few quiet laps the flag, or the rain, arrives and a ten-second clock runs. Read the call sheet on the right and press a call. The race pauses: a stamp gives your verdict, the bars show Jev's probabilities with a blue ring on the wall's call and a sun diamond on yours, and under the timing tower a graph shows where each call would have finished. CONTINUE runs to the flag, and the strip then says lap by lap whether Jev's call was sound. Hover or tap a car to name it. Late virtual safety car: a stop costs 11 s instead of 21. We are on old hards and the car behind is close. On the decisive lap, lap 42, the oracle's call was box for softs, with a margin of 0 places. The radio-message version of Jev was sound on this lap in 70% of the 20 recorded races. The field dives in. Follow them, or inherit the lead. We are on hards nine laps old. The safety car comes out as everyone else’s first stint ends: a stop now is cheap, and next lap the field has bunched. [FIGURE 3] The safety car. Press START. After a few quiet laps the flag, or the rain, arrives and a ten-second clock runs. Read the call sheet on the right and press a call. The race pauses: a stamp gives your verdict, the bars show Jev's probabilities with a blue ring on the wall's call and a sun diamond on yours, and under the timing tower a graph shows where each call would have finished. CONTINUE runs to the flag, and the strip then says lap by lap whether Jev's call was sound. Hover or tap a car to name it. The safety car comes out at the end of everyone else's first stint, and a stop costs 7 s. We stopped early, so staying out inherits track position; stopping now is cheap before the field bunches. Decisive lap 20: the radio message was sound on it in 95% of races, raw numbers in 20%. Inters now, wets now, or one more lap on slicks. Fifteen laps to go, the track damp, the radar saying wet next lap and heavy in three. Stop a lap early and you crawl; a lap late and you swim. [FIGURE 4] The rain. Press START. After a few quiet laps the flag, or the rain, arrives and a ten-second clock runs. Read the call sheet on the right and press a call. The race pauses: a stamp gives your verdict, the bars show Jev's probabilities with a blue ring on the wall's call and a sun diamond on yours, and under the timing tower a graph shows where each call would have finished. CONTINUE runs to the flag, and the strip then says lap by lap whether Jev's call was sound. Hover or tap a car to name it. In the rain the radar on the wall shows what is coming. Rain arrives with fifteen laps to go. Intermediates suit a damp track, full wets a flooded one, and slicks lose once it is wet. Decisive lap 38: the radio message was sound on it in 95% of races, raw numbers in 40%. [THE DETAILS] the oracle’s search, how it prices a live flag, the sound tolerance, and how each block’s race was picked Basic strategy for blackjack; an oracle for tyres. At a lap it tries every action the wall could take, runs the rest of the race under every continuation, and keeps the best finish. It knows the physics of the race but not the future, so it prices a flag that might end next lap the way a pit wall has to, over a few futures rather than the one that happened. That is why its positions are expected values, and why “sound” has a tolerance: the margin between two calls is often a fraction of a place, and nobody should be marked wrong on a coin flip. Each block is the median race of twenty recorded per situation, not a win I picked, and your calls stay on this page. No whole race: each moment is a handful of laps around a decision that is close on purpose, and the field bunches behind a safety car the way a real one does. Rain is a curve the radar can see coming. Run it as often as you like; the traces do not change, but you do. 03 RAW NUMBERS, AND WHERE THEY GO WRONG. ------------------------------------------------------------------------------ Jev had to do the sums itself, and on the lap that mattered it almost never made the box call. The first version gave Jev what the telemetry gives an engineer: gaps in seconds, tyre ages, the pit-loss table, the tyre table. To make the call it had to work out that a car six seconds back and an eleven-second stop means he comes out ahead, and that fresh softs over eleven laps pay for that stop. That is arithmetic, and Jev is not a calculator. The model card says so, and the strips below say so louder: away from the decisive lap raw numbers look fine, because staying out is right and anything says so; on the lap that mattered they fell apart. (state · lap 42 · raw · vsc-late/s16/raw) { "lap": 42, "laps_total": 53, "track_status": "virtual safety car", "our_car": { "position": 7, "compound": "hard", "tyre_age_laps": 20, "stops_so_far": 1, "gap_to_car_ahead_s": 7, "gap_to_car_behind_s": 1.6 }, "gap_sign": "negative gap means that car is ahead of us", "cars_around_us": [ { "position": 5, "name": "Enzo", "compound": "medium", "tyre_age_laps": 24, "stops_so_far": 1, "gap_to_us_s": -11.5, "pitted_last_lap": false }, { "position": 6, "name": "Falk", "compound": "hard", "tyre_age_laps": 18, "stops_so_far": 1, "gap_to_us_s": -7, "pitted_last_lap": false }, { "position": 8, "name": "Gus", "compound": "hard", "tyre_age_laps": 17, "stops_so_far": 1, "gap_to_us_s": 1.6, "pitted_last_lap": false }, { "position": 9, "name": "Jun", "compound": "medium", "tyre_age_laps": 23, "stops_so_far": 1, "gap_to_us_s": 3.8, "pitted_last_lap": false } ], "cars_ahead_not_yet_stopped": 0, "pit_stop_time_loss_s": { "green": 21, "virtual_safety_car": 11, "safety_car": 7 }, "tyres": { "soft": { "pace_vs_medium_s_per_lap": -0.65, "wear_s_per_lap": 0.085, "laps_before_cliff": 14 }, "medium": { "pace_vs_medium_s_per_lap": 0, "wear_s_per_lap": 0.055, "laps_before_cliff": 24 }, "hard": { "pace_vs_medium_s_per_lap": 0.5, "wear_s_per_lap": 0.035, "laps_before_cliff": 34 } } } [THE DETAILS] the raw attempt’s results: decisive-lap rates and the undercut Noul On the decisive lap raw numbers were sound about a third of the time and never once made the oracle’s exact call, and the yes/no answer about the undercut was worse than a coin: the numbers weakness, measured rather than quoted. 04 THE RADIO MESSAGE. ------------------------------------------------------------------------------ Same model, same question. Doing the sums in code first is what made the difference. The second version changed the state, not the model. Code did the sums an engineer does before keying the radio: where we rejoin, whether the new set pays for itself, whether the car behind can undercut us. Jev was asked the same question. (state · lap 42 · derived · vsc-late/s16/derived) lap: Lap 42 of 53, 11 to go after this one. Virtual safety car is out. A stop this lap costs about 11 s instead of 21; it can end on any lap. our_tyres: P7. Hards, 20 laps old, 14 laps of good grip left, enough to reach the finish. 1 stop so far. box_soft: Rejoin P10, 6.2 s behind Ivo, in clean air. Quickest from here: softs to the finish; about 7 s quicker on paper than the best plan that stays out now. box_medium: Rejoin P10, 6.2 s behind Ivo, in clean air. Quickest from here: mediums to the finish; about 1.5 s quicker on paper than the best plan that stays out now. box_hard: Rejoin P10, 6.2 s behind Ivo, in clean air. Quickest from here: hards to the finish; about 2.9 s slower on paper than the best plan that stays out now. stay_out: Falk is 7 s ahead on hards 18 laps old. Gus is 1.6 s behind on hards 17 laps old, 1 stop. If he stops now for softs he catches us in about 9 laps: the undercut is on. If we stay out, this set goes to the finish. [FIGURE 5] Where the two versions part. Three situations, two rows each: raw numbers above the radio message. Each column is a lap, from three before the decisive lap to five after. The deeper the coral, the larger the share of recorded races where Jev's call was sound; the decisive column prints the share. Hover a cell for its sentence. Away from the decisive lap both versions are sound nearly every time, because staying out is right and both say so. On the decisive lap they part: raw numbers were sound in 35%, 20% and 40% of races, the radio message in 70%, 95% and 95%. RAW · SOUND ON THE DECISIVE LAP: 32% of 60 races DERIVED · SOUND ON THE DECISIVE LAP: 87% of 60 races RAW · THE ORACLE'S EXACT CALL: 0% of 60 races DERIVED · THE ORACLE'S EXACT CALL: 65% of 60 races That is the whole System One idea in one move: code calculates, Jev judges. The model did not get smarter between the attempts. The state got honest about what the question was. And the sheet did not hand Jev the answer: it describes one car alone, while the race is twenty, with traffic and bunching and crews who dive in. What is left to judge is the gap between them, which is exactly what a pit wall is for. It is not a claim about a model; it is a claim about where the arithmetic belongs. [THE DETAILS] how the calls were recorded: seeds, windows, model, client, repeats How these were recorded. 20 seeded races per situation, every lap of the window (three or four before the decisive lap, three to five after), both states, one request per lap with the pit call and the yes/no questions together. Model jev-latest through @typesafe-ai/sdk 0.6.0, bun 1.4.0, darwin, run by Hetansh Mehta from his own machine on 2026-09-22; latency is end to end from there. The decisive lap's radio message was asked five more times per race: 53 of 60 runs returned the same call every time. Nothing was excluded. A call is sound when its expected outcome is within half a place and 2.5 s of the oracle's best; agreed means the exact same option. 05 FAST, TYPED, AND SURE ENOUGH TO ACT ON. ------------------------------------------------------------------------------ The number that says how sure it is decides who acts: the code, a person, or a slower model. Three things make a decision usable by software rather than by a person reading it. It arrives before the world moves on. It arrives in a shape the code already expects. And it arrives with a number that says how much to trust it. [FIGURE 6] Time to a pit call. One axis of half a second. On Jev's row the coral bar ends at the median, the tick is the 90th percentile, and the rule under it is the range of every recorded call, running off the end of the axis to the slowest. The reasoning model's row is empty because it was not measured. Hover along the axis. Median 151 ms and 90th percentile 214 ms, over 1178 calls, measured end to end from my machine with the network included. A green-flag lap in the simulator is 91 s, so the answer arrives long before the next corner. A green-flag lap is ninety-one seconds; the median call came back in 151 ms. A decision that fast can sit inside a loop, every lap, every keystroke, which is a different kind of thing from one you wait for. The third thing is the confidence. Code can act on a sure call, show a middling one to a person, and hand a shaky one to a slower model: one threshold splits acting from asking, a second splits asking from escalating. Where you draw those lines has a price. Raise the acting threshold and the calls acted on get cleaner while more go for a check; the hard moments sit low on the line, so a cautious gate escalates mostly correct calls. There is no free threshold, only the one whose price you have seen. [FIGURE 7] The confidence gate. One line of confidence from zero to one, split by two thresholds into three zones: hand to a reasoning model, check or ask a person, act. The dots on the line are every recorded call on the radio message, filled if it was sound. The dots above are the decisive laps, coral if sound. Hover a zone for its counts. At the page's thresholds, 0.55 and 0.8, the code would act on 436 of 589 calls, and 1 of those was not sound. But 43 of the sixty decisive laps came back under 0.55, and 38 of those were sound: the hard moments are close, and Jev's confidence says so. [FIGURE 8] Is the number honest. Across: the probability Jev put on its call, in groups. Up: how often those calls were sound. Blue dots are raw numbers and coral the radio message, sized by how many calls each holds. A dot on the diagonal would be exactly honest. Hover for a group's counts. Both versions sit above the diagonal: most laps are easy stay-out laps where almost any call is sound, so the stated probability undersells how often calls are sound. The confident group carries the weight: radio-message calls stated at 0.9 or more were sound 357 times in 358. Calibration asks whether a stated probability means what it says. Both versions sit above the diagonal, and that is not modesty: most laps in a window are stay-out laps where almost any call is sound, so a stated 0.6 is right more than six times in ten. It is an easy test. The groups that carry the weight are the confident ones on the right. And calibration is a promise about many calls, not this one (07). [THE DETAILS] the threshold sweep: four pairs, and what each zone would take For a few pairs of thresholds, how many of the recorded calls on the radio message each zone would take, and how many of the calls acted on were wrong: escalate below / act from / escalated / checked / acted on / acted on and wrong 0.55 / 0.80 / 53 / 100 / 436 / 1 0.50 / 0.90 / 49 / 261 / 279 / 0 0.45 / 0.95 / 41 / 443 / 105 / 0 0.70 / 0.90 / 85 / 225 / 279 / 0 At the page's thresholds, 436 of 589 calls would have been acted on and 1 of those was wrong. The price is the other side: 43 of the sixty decisive laps would have gone to a slower model, and most of them were right. Raising the acting threshold to 0.95 makes the acted-on set clean and sends almost everything else for a check. There is no free threshold; there is only the one whose price you have seen. 06 HOW TO SPOT ONE IN YOUR OWN WORK. ------------------------------------------------------------------------------ A Jev-shaped decision has a short list of answers, one question, and code waiting for the result. The pit call is a stand-in. The shape has six marks: a decision with most of them is Jev-shaped; with two, use something else. [FIGURE 9] The six marks. Six cards, one mark each, with a small drawn glyph. Count how many your decision has. The six marks: it judges rather than creates, the answers can be listed, it is one question, the context fits in the state, an expert would answer in seconds, and software consumes the answer. Most of them means Jev-shaped; two means use something else. Once I had the six I started seeing them everywhere: which tab: You said "the doc about tyres". Twelve tabs are open. Pick one. what to paste: Twelve things on the clipboard, one field in focus. Pick one. which reply: An email came in. Three templates fit. Pick one, or none. which tool: Eleven tools on the page, one sentence from the user. Pick one. This is the sibling post. 07 WHAT IT CANNOT DO, AND WHAT THE NUMBER DOES NOT PROMISE. ------------------------------------------------------------------------------ Do the sums for it, keep its state clean, and don’t treat a confident call as a correct one. 01. Numbers and dates. It reads them as text; give it the arithmetic done. The first attempt is the proof. 02. Literal reading. Scoping words and negations are taken at face value. Write the question for a very fast, very literal colleague. 03. Distractors. Accuracy falls as the state fills with things unrelated to the decision. Send the radio message, not the whole telemetry. 04. Injection. The state is not treated as hostile: whoever can write into it is part of the question, and can steer the call. 05. No why. It returns a choice and a number, never a reason. If you need the reason, that is a different model’s job. 06. Calibrated is not correct. A call made at eight in ten is right about eight times in ten across many calls. This one call can still be one of the two. 07. The tyre table is mine. Soft to hard is 1.15 seconds a lap against a twenty-one-second stop, so a stop pays for itself in nineteen laps, and the wall two-stops on softs where a real one would fit hards and go. It does not move what this post measures — Jev and the search read the same table — but it is a setting of mine, not a finding, and a race engineer would not recognise it. 08 THE REQUEST, THE DERIVED STATE, THE GATE. ------------------------------------------------------------------------------ The code is short; the judgement goes into what you put in the state and where you set the thresholds. Jev is not a smaller chat model; it does not write sentences. A question comes in one of three shapes. This post uses a choice for the call and a noul, the chance a statement is true, for each yes/no. Jev, in four moves. 01 WRITE THE STATE. The state is everything Jev is allowed to look at, plain text or JSON. The format matters less than who does the arithmetic: hand it the facts already worked out, the way a race engineer says them on the radio. Code calculates, Jev judges. The raw version fails (07). (state.ts · the radio message) // code does the sums, so the model only has to make the call function radioMessage(s) { return `Lap ${s.lap} of 53. ${s.compound}s, ${s.tyreAge} laps old, ${s.lapsToCliff} laps left in them. Car behind is ${s.gapBehind}s back and ${s.behindInWindow ? "in the pit window" : "out of range"}. Stopping now puts us ${s.gapAfterStop}s ${s.gapAfterStop > 0 ? "ahead of" : "behind"} him, in ${s.cleanAir ? "clean air" : "traffic"}.`; } 02 ASK A TYPED QUESTION. Each kind of question fixes the answer space before the model sees it. Choice picks one of up to 255 options you wrote, with a probability on each. Noul is the chance a statement is true. Score is a rung on a ladder of two to ten. There is no fourth kind and no free text, so the result goes straight into code without being parsed or checked. (questions.ts · the options are the whole answer space) const questions = { // Choice: exactly one of these four comes back, with a probability each pit_call: choice("What should the car do this lap?", { stay_out: "no stop this lap", box_soft: "stop for softs", box_medium: "stop for mediums", box_hard: "stop for hards", }), // Noul: how likely is this statement to be true undercut: noul("The car behind gains the place if it stops now."), }; 03 SEND IT. One request carries the state and every question, answered in parallel and independently: a second question costs no round trip, and one answer cannot drag the other with it. It needs a key, so it runs on a server; this page only replays what I recorded. (pit-call.ts · one call per lap) // POST https://api.typesafe.ai/v1/systemone, or the SDK, which is this import { TypeSafeClient, choice, noul } from "@typesafe-ai/sdk"; const client = new TypeSafeClient(); // the key comes from the environment, on the server const res = await client.systemOne({ model: "jev-latest", state: radioMessage(lapState), questions, }); res.answers.pit_call.choice; // "box_soft" - always one of the four you declared res.answers.pit_call.confidence; // how sure it is of that choice res.answers.undercut.noul; // the probability the statement is true 04 DECIDE WHAT TO DO WITH THE CONFIDENCE. This is the part that earns the approach, and the part people skip. A number you can act on is only useful if you act on it differently at different values: one threshold splits acting from asking, a second splits asking from handing it to something bigger and slower. The thresholds are yours; the model cannot tell you what a wrong answer costs. (gate.ts · three zones, two thresholds) const { choice, confidence } = res.answers.pit_call; if (confidence < 0.55) return escalate(lapState); // too close to call: ask a reasoning model if (confidence < 0.80) return askEngineer(res); // leaning: put it in front of a person return choice; // clear: act on it Key snippets only. The simulator and the harness stay private; the recorded traces ship with the post. The client is documented in the JavaScript SDK [3]. 09 ASK YOUR AGENT TO READ THIS, AND IT CAN TEACH IT BACK. ------------------------------------------------------------------------------ Every section and figure has an ask agent button. Pick how deep to go (Explain it simply, Go deeper or How do we know?) and it copies a prompt about that part, ready to paste into any AI chat. Section 00 has prompts for the whole post. In a browser with WebMCP, your agent can call this page’s tools directly; anywhere else it can read the plain-text version. - get_outline the nine sections and the claim each makes. - explain_section one section, for a child, a student or an expert. - explain_figure one figure: what it draws and how to read it. - get_evidence where a number came from: the recorded races, a lap of one, or a setting of the simulator. - start_guided_reading a plan for teaching, quizzing, answering, or walking a recorded race with you. The blocks have no tools of their own, on purpose. They are timed and they are for people. The plain-text version is for agents without a browser. [THE DETAILS] a real get_evidence answer, with the traces it cites (get_evidence) > get_evidence("decisive.derived.sound") { "figure": "tiles", "races": 60, "value": 0.8667, "per_situation": { "vsc-late": 0.7, "sc-mid": 0.95, "rain-late": 0.95 }, "traces": ["vsc-late/s00/derived", "…", "rain-late/s19/derived"], "computed_by": "src/posts/pit-wall/evidence-build.ts@c416d98" } ============================================================================== SOURCES 1. TypeSafe, System One: what Jev is. https://docs.typesafe.ai/concepts/system-one 2. TypeSafe, the three primitives: Choice, Score and Noul. https://docs.typesafe.ai/primitives 3. TypeSafe, the JavaScript SDK (@typesafe-ai/sdk). https://docs.typesafe.ai/sdk/javascript 4. The recorded traces: 1,178 Jev calls over 60 seeded races, three situations, both states, recorded offline by Hetansh Mehta. Every number on the page resolves to them through https://hetanshmehta.com/posts/pit-wall/evidence.json, which names the trace files each value was counted from and the script that counted it. The files are under https://hetanshmehta.com/posts/pit-wall/traces/. 5. The simulator's parameters (pit loss, tyre table, the tolerance for a sound call, the gate): settings, not measurements, in the parameters block of evidence.json. get_evidence("param/") says so. 6. The Suzuka centreline: bacinger/f1-circuits, GeoJSON jp-1962.