From 536c67a9f6fe87aa3d273a811989983267ff139b Mon Sep 17 00:00:00 2001 From: karti-ai <176560021+karti-ai@users.noreply.github.com> Date: Fri, 28 Aug 2026 16:30:31 -0700 Subject: [PATCH] CI: install the browser the prerender pass needs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pnpm build ends in prerender, which drives a real chromium. Without the install step the build failed on its very last action, after typecheck, the contract gates and the tests had all gone green — the most expensive place to discover a missing dependency. --- .github/workflows/ci.yml | 6 ++ public/traces/wordle/base-on-s5.json | 98 ++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 public/traces/wordle/base-on-s5.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bdd9731..7679d46 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,6 +26,12 @@ jobs: test "$(pnpm -v)" = "11.21.0" || { echo "pnpm $(pnpm -v) != 11.21.0"; exit 1; } - run: CI=true pnpm install --frozen-lockfile + + # `pnpm build` ends in the prerender pass, which drives a real browser. + # Without this the build fails at the very last step, after everything + # else has passed, with a Playwright message about installing browsers. + - run: pnpm exec playwright install --with-deps chromium + - run: pnpm typecheck - run: pnpm check - run: pnpm test diff --git a/public/traces/wordle/base-on-s5.json b/public/traces/wordle/base-on-s5.json new file mode 100644 index 0000000..cbfa286 --- /dev/null +++ b/public/traces/wordle/base-on-s5.json @@ -0,0 +1,98 @@ +{ + "runId": "base-on-s5", + "seed": 5, + "model": "brain-qwen38-dspark", + "capturedAt": "2026-08-28", + "rewards": { + "solved": 1.0, + "economy": 1.0, + "consistency": 0.8 + }, + "metrics": { + "guesses_used": 4.0, + "rejected_replies": 1.0, + "reference_depth": 4.0, + "turns_granted": 6.0, + "inconsistent_guesses": 1.0 + }, + "truncated": false, + "outcome": "solved", + "answer": "filly", + "turns": [ + { + "reply": "\n\n[crane]", + "reasoning": "We need respond to user: \"Enter your guess to begin.\" We need play word-guessing game. Need output only square-bracketed token? Prompt says Think it through, then give your guess as the only square-bracketed token in your reply, like [crane]. The game reads first bracketed token and ignores everything else, so do not put any other words in brackets.\nWe need choose first guess. No feedback yet. Need likely common 5-letter word maximizing information. Common Wordle first guesses: crane, slate, raise, adieu, audio, crane. We need only bracketed token. Could choose [crane]. Need ensure no other brackets. Final only [crane].\nNeed maybe think? Final no analysis.\n", + "call": { + "promptTokens": 183, + "completionTokens": 162, + "reasoningTokens": null, + "durationMs": 5977, + "finishReason": "stop" + }, + "info": { + "guess": "crane", + "observation": "C R A N E\nX X X X X\n\nYou have 5 guesses left." + } + }, + { + "reply": "\n\n[shout]", + "reasoning": "The feedback for \"crane\" is all X, meaning none of the letters C, R, A, N, E are in the word.\n\nI need to guess a 5-letter word without C, R, A, N, E.\nAvailable letters: B, D, F, G, H, I, J, K, L, M, O, P, Q, S, T, U, V, W, X, Y, Z.\n\nLet's pick a common word with common letters not in CRANE.\nCommon letters: S, T, O, L, I, D, M, H, P, B, U, G, F, Y.\nLet's try \"STOOL\"? No, repeated letters might be okay but let's pick distinct ones.\n\"SHOUT\" - S, H, O, U, T. None are in CRANE.\n\"POUND\" - P, O, U, N (N is out).\n\"GUIDE\" - G, U, I, D, E (E is out).\n\"BLOOD\" - B, L, O, D.\n\"BLUSH\" - B, L, U, S, H.\n\"SHOUT\" is a good 5-letter word. S, H, O, U, T.\nLet's check if any are in CRANE: C, R, A, N, E. No.\nLet's use [shout].\nWait, \"shout\" has S, H, O, U, T. All very common.\nAnother option: \"fluid\" - F, L, U, I, D.\nAnother: \"plumb\" - P, L, U, M, B.\nLet's go with [shout].\n", + "call": { + "promptTokens": 220, + "completionTokens": 386, + "reasoningTokens": null, + "durationMs": 14141, + "finishReason": "stop" + }, + "info": { + "guess": "shout", + "observation": "S H O U T\nX X X X X\n\nYou have 4 guesses left." + } + }, + { + "reply": "", + "reasoning": "I need to use Wordle-like logic. We have 4 guesses left. Previous guesses:\ncrane: all X, so c,r,a,n,e absent.\nshout: all X, so s,h,o,u,t absent.\nNeed guess a 5-letter word with none of c,r,a,n,e,s,h,o,u,t.\nAllowed letters: b,d,f,g,i,j,k,l,m,p,q,v,w,x,y,z.\nNeed common 5-letter words. Since many vowels gone (a,e,o,u), only i and y remain as vowels. Need a 5-letter word likely with i/y. Need maximize info.\nCandidate words using allowed letters: \"bidet\" has e,t absent no. \"blimp\" b l i m p all allowed. Good. \"gimli\"? \"glide\" e absent. \"swims\" s absent. \"swill\" s absent. \"skill\" s absent. \"skimp\" s absent. \"skiff\" s absent. \"twink\" t absent. \"fjeld\"? \"fjeld\" f j e l d no e. \"bijou\" b i j o u no. \"billy\" b i l l y allowed. \"billy\" is word? proper? maybe. \"billy\" common enough? \"biddy\" b i d d y allowed. \"biddy\" word. \"bidet\" no. \"bidly\"? \"bidet\" no. \"bigly\" b i g l y allowed. \"bigly\" adverb? maybe. \"bilge\" e. \"binge\" e. \"binky\" b i n k y n absent. \"blimp\" all allowed and common. It tests b,l,i,m,p.\nOther candidates: \"gimel\" e. \"gimpy\" g i m p y allowed. \"gimpy\" common? yes. \"gimlet\" e,t. \"glink\" g l i n k n absent. \"glib\" 4. \"glide\" e. \"glyph\" g l y p h h absent. \"gully\" g u l l y u absent. \"gumbo\" u,o. \"gulch\" u,h,c. \"gym\" 3. \"gymn?\" \"gymn?\" no.\n\"plywood\" 7. \"pippy\" p i p p y allowed. \"pinky\" n. \"pimps\" s. \"pimps\" no. \"pimps\" s. \"pimps\" absent. \"pimps\" no.\n\"vixen\" e,x? v i x e n no. \"vivid\" v i v i d allowed. \"vivid\" common. \"villi\" v i l l i allowed? plural villi. \"villi\" word. \"villi\" maybe uncommon. \"villi\" tests v,i,l. \"vivid\" tests v,i,d.\n\"zippy\" z i p p y allowed. \"zippy\" common? yes.\n\"zloty\" z l o t y no.\n\"yokel\" o,e.\n\"yucky\" u,c,k.\n\"yolky\" o.\n\"yummy\" u,m,m,y.\n\"zesty\" e,s,t.\nNeed guess. Since only 4 guesses, choose a word with broad letters. Need identify possible word. Absent letters are huge: c r a n e s h o u t. That's 10 letters. Remaining 16: b d f g i j k l m p q v w x y z.\nCommon 5-letter words with only these:\n- blimp\n- biddy\n- bigly\n- bimbo? o no\n- billy\n- bidet no\n- biff? 4\n- biffs? s no\n- biffy? b i f f y allowed. \"biffy\" word? maybe.\n- bight? h,t no\n- bight no\n- bight\n- bilge no e\n- billy\n- binky no n\n- blimp\n- blimy? b l i m y allowed? \"blimy\" means blimp? maybe not.\n- blini? b l i n i n no\n- blips? s no\n- blimp\n- blimy\n- blype? no\n- bly? \n- bobby? o no\n- bodhi? o,h\n- bodge? o,e\n- bogey? o,e\n- bogus? o,g,u,s\n- booby? o\n- boffo? o\n- bogie? o,e\n- bogey\n- bogg? \n- bogy? o\n- boing? o,n,g\n- boise? o,s,e\n- bolus? o,u,s\n- bomb? 4\n- bombs? o,s\n- bongo? o,n,g\n- bonny? o,n\n- boppy? o\n- bop? \n- boppy no o\n- boppy\n- borax? o,r,a,x\n- boss? o,s\n- botch? o,t,c,h\n- bough? o,u,g,h\n- bouge? o,u,e\n- bouse? o,u,s,e\n- bowed? o,e,w,d\n- bowel? o,e,l\n- boxer? o,x,e,r\n- boxy? o\n- boyar? o,y,a,r\n- bract? b,r,a,c,t\n- brain? r,a,n\n- brand? r,a,n,d\n- brake? r,a,k,e\n- brash? r,a,s,h\n- brass? r,a,s,s\n- brat? r,a,t\n- bravo? r,a,v,o\n- braw? r,a,w\n- brawn? r,a,w,n\n- bread? r,e,a,d\n- break? r,e,a,k\n- brine? r,i,n,e\n- bring? r,i,n,g\n- brink? r,i,n,k\n- briny? r,i,n,y\n- broad? r,o,a,d\n- broil? r,o,i,l\n- broke? r,o,k,e\n- brood? r,o,o,d\n- broom? r,o,o,m\n- broth? r,o,t,h\n- brown? r,o,w,n\n- brush? r,u,s,h\n- brute? r,u,t,e\n- bubal? u,b,a,l\n- budge? u,d,g,e\n- budgy? u,d,g,y\n- buff? 4\n- bugg? \n- buggy? u,g,g,y\n- bugle? u,g,l,e\n- build? u,i,l,d\n- built? u,i,l,t\n- bulge? u,l,g,e\n- bulk? 4\n- bulks? u,l,k,s\n- bulky? u,l,k,y\n- bull? 4\n- bulls? u,l,l,s\n- bully? u,l,l,y\n- bumpy? u,m,p,y\n- bunch? u,n,c,h\n- bungh? u,n,g,h\n- bunke? u,n,k,e\n- bunks? u,n,k,s\n- bunt? u,n,t\n- bunts? u,n,t,s\n- bunt? \n- bunts\n- burin? u,r,i,n\n- burst? u,r,s,t\n- bused? u,s,e,d\n- buses? u,s,e,s\n- buster? 6\n- busy? u,s,y\n- butch? u,t,c,h\n- butte? u,t,t,e\n- butty? u,t,t,y\n- buyer? u,y,e,r\n- bylaw? y,l,a,w\n- byres? y,r,e,s\n- byss? \n- c? no c\n- d? \nCommon with allowed: \"dinky\" d i n k y n no. \"dippy\" d i p p y allowed. \"dippy\" common. \"dilly\" d i l l y allowed. \"dilly\" word. \"dippy\" tests d,i,p,y. \"dicky\" c,k no. \"didot\" o,t. \"dield\" e. \"diele\" e. \"digby\"? \"digby\" d i g b y allowed? maybe name. \"digox\" o. \"diker\" r. \"dikes\" k,e,s. \"dilly\". \"dippy\". \"dippy\" maybe.\n\"divvy\" d i v v y allowed. \"divvy\" common? verb. \"divan\" a,n. \"divot\" o,t. \"divvy\" good, tests d,i,v,y.\n\"doily\" o. \"dolly\" o. \"donny\" o,n. \"doppy\" o. \"dopy\" o. \"dorky\" o,r,k. \"dormy\" o,r,m. \"dory\" o,r. \"dotty\" o,t,t. \"doubt\" o,u,b,t. \"douce\" o,u,c,e. \"dough\" o,u,g,h. \"doul?\" \"doura\" o,u,r,a. \"douse\" o,u,s,e. \"dowry\" o,w,r,y. \"downy\" o,w,n,y. \"dozen\" o,z,e,n. \"drab\" r,a,b. \"drach\" r,a,c,h. \"drago", + "call": { + "promptTokens": 257, + "completionTokens": 2048, + "reasoningTokens": null, + "durationMs": 103774, + "finishReason": "length" + }, + "info": { + "guess": null, + "observation": "That guess was not accepted: no bracketed guess found.\nIt did not use up a turn. You have 4 guesses left." + } + }, + { + "reply": "\n\n[Filmy]", + "reasoning": "I need to provide a guess in brackets. Let me analyze what I know so far.\n\nGuessed:\n1. crane - all X (C, R, A, N, E not in word)\n2. shout - all X (S, H, O, U, T not in word)\n\nSo letters NOT in the word: C, R, A, N, E, S, H, O, U, T\n\nThat's 10 letters eliminated. Remaining letters: B, D, F, G, I, J, K, L, M, P, Q, V, W, X, Y, Z\n\nI need a 5-letter word using only these letters. Let me think of common 5-letter words:\n\n- BILLY (B, I, L, Y) - wait, that's 5 letters: B-I-L-L-Y. But L appears twice.\n- GUILD (G, U, I, L, D) - U is eliminated\n- BILGE (B, I, L, G, E) - E is eliminated\n- FILMY (F, I, L, M, Y) - all available!\n- GIMEL - not common\n- BILLY - B, I, L, L, Y - all available\n- GILLY - not a word\n- BILGE - E eliminated\n- BILLY - B, I, L, L, Y - all available letters\n- BILGE - E eliminated\n- BILLY - works\n- BILGE - no\n- BILLY - B, I, L, L, Y\n- BILLY is a word (as in Billy the goat, or a name)\n- BILLY - all letters available\n- BILLY - B, I, L, L, Y - 5 letters, all in remaining set\n\nWait, let me think of better common words:\n- BILLY - not super common as a standalone\n- FILMY - F, I, L, M, Y - all available! This is a good common word.\n- BILLY - B, I, L, L, Y\n- GILTY - not a word\n- GILDS - S eliminated\n- GILGY - not a word\n- BILGE - E eliminated\n- BILLY - B, I, L, L, Y\n- BILLY - B, I, L, L, Y\n\nLet me think of common 5-letter words with only B, D, F, G, I, J, K, L, M, P, Q, V, W, X, Y, Z:\n- BILLY (B,I,L,L,Y)\n- FILMY (F,I,L,M,Y)\n- BILGE - E no\n- GILDS - S no\n- GILGY - no\n- BILLY\n- BILLY\n- BILLY\n\nWait, what about:\n- BILLY - B, I, L, L, Y - all available\n- BILLY\n- BILLY\n\nHmm, let me think of more:\n- BILLY\n- BILLY\n- BILLY\n\nCommon 5-letter words:\n- BILLY - not the most common\n- FILMY - F, I, L, M, Y - all available! Good word.\n- BILLY - B, I, L, L, Y\n- BILLY\n- BILLY\n\nWhat about:\n- BILLY\n- BILLY\n- BILLY\n\nLet me think more carefully:\n- BILLY - B,I,L,L,Y\n- FILMY - F,I,L,M,Y\n- BILLY\n- BILLY\n\nOther options:\n- BILLY\n- BILLY\n- BILLY\n\nWait, what about:\n- BILLY\n- BILLY\n- BILLY\n\nLet me think of words:\n- BILLY\n- BILLY\n- BILLY\n\nOK let me just think of common 5-letter words using only B,D,F,G,I,J,K,L,M,P,Q,V,W,X,Y,Z:\n- BILLY (B,I,L,L,Y) - all available\n- FILMY (F,I,L,M,Y) - all available\n- BILLY\n- BILLY\n- BILLY\n- BILLY\n\nWhat about:\n- BILLY\n- BILLY\n- BILLY\n- BILLY\n\nLet me think:\n- BILLY\n- BILLY\n- BILLY\n\nHmm, what about:\n- BILLY\n- BILLY\n- BILLY\n\nI think FILMY is a good choice. It's a common word and uses 5 different letters (F, I, L, M, Y) which gives me maximum information.\n\nActually, let me also consider:\n- BILLY - B, I, L, L, Y (has repeated L, less info)\n- FILMY - F, I, L, M, Y (all different, more info)\n- BILLY\n- BILLY\n\nWhat about:\n- BILLY\n- BILLY\n- BILLY\n\nLet me think of other words:\n- BILLY\n- BILLY\n- BILLY\n- BILLY\n\nWords with these letters:\n- BILLY\n- BILLY\n- BILLY\n- BILLY\n\nOK, I'll go with FILMY. It's a common adjective, uses 5 distinct letters, and all are in the remaining pool.\n\nWait, actually let me reconsider. What about words like:\n- BILLY\n- BILLY\n- BILLY\n\nHmm, what about:\n- BILLY\n- BILLY\n- BILLY\n\nLet me think of 5-letter words:\n- BILLY (B,I,L,L,Y)\n- BILLY\n- BILLY\n- BILLY\n\nI'll go with FILMY.\n", + "call": { + "promptTokens": 299, + "completionTokens": 1322, + "reasoningTokens": null, + "durationMs": 35276, + "finishReason": "stop" + }, + "info": { + "guess": "filmy", + "observation": "F I L M Y\nG G G X G\n\nYou have 3 guesses left." + } + }, + { + "reply": "\n\n[Filly]", + "reasoning": "Let me analyze the feedback:\n\nF I L M Y\nG G G X G\n\n- F = G (correct letter, correct position) \u2192 F is in position 1\n- I = G (correct letter, correct position) \u2192 I is in position 2\n- L = G (correct letter, correct position) \u2192 L is in position 3\n- M = X (not in the word) \u2192 M is not in the word\n- Y = G (correct letter, correct position) \u2192 Y is in position 5\n\nSo the word is: F I L _ Y\n\nI need to find the 4th letter. Let me think of 5-letter words matching FIL_Y:\n\n- FILMY - that was the guess, but M was X, so it's not FILMY\n- FILLY - F I L L Y - that's a word! A filly is a young female horse.\n\nLet me check: FILLY\n- F = G \u2713\n- I = G \u2713\n- L = G \u2713\n- L = ? (was X for M, but L hasn't been tested in position 4)\n- Y = G \u2713\n\nYes, FILLY should work!\n", + "call": { + "promptTokens": 336, + "completionTokens": 260, + "reasoningTokens": null, + "durationMs": 7247, + "finishReason": "stop" + }, + "info": { + "guess": "filly", + "observation": "F I L L Y\nG G G G G\n\nYou have 2 guesses left." + } + } + ] +}