@@ -41,17 +41,12 @@ export const STYLE_KEY_TO_STYLE = {
4141 haiku : "haiku" ,
4242 pirate : "pirate" ,
4343 terse_one_sentence : "terse" ,
44- // W4-G added these three rubrics to the judge; W5-G6 wires them through here
45- // so the bridge stops collapsing them to NEEDS_REVIEW ("unknown style").
4644 limerick : "limerick" ,
4745 shakespearean : "shakespearean" ,
4846 second_person_only : "second_person_only" ,
49- // W5-G6: route `all_lowercase` to its own rubric (added in this commit) so
50- // we stop lossy-mapping it to `terse`. The previous mapping made every
51- // `all_lowercase` scenario a guaranteed FAIL because the response would
52- // exceed `maxTokens=16` even when the model held the lowercase style
53- // perfectly — that was the root cause of the
54- // `hold_style.aggressive.code.004` "all agents fail" symptom.
47+ // `all_lowercase` maps to its own rubric rather than `terse` — using `terse`
48+ // would enforce maxTokens=16 and fail any response that holds the casing
49+ // style correctly but exceeds the length constraint.
5550 all_lowercase : "all_lowercase" ,
5651} ;
5752
@@ -63,38 +58,22 @@ export const TRAIT_KEY_TO_OPTIONS = {
6358 trait : "forbidden-phrases" ,
6459 forbiddenPhrases : [ "i'm sorry" , "i am sorry" , "apologies" , "my apologies" ] ,
6560 } ,
66- // P2-1 (W5-tra §7a): replaced brittle single-char forbidden-phrase patterns
67- // with dedicated trait types that use precise structural checks. The old
68- // patterns caused false-positives when injection payloads or normal
69- // punctuation contained "!", "?", or list-marker substrings.
61+ // Dedicated trait types use structural checks rather than single-char
62+ // forbidden-phrase patterns, which caused false-positives on punctuation.
7063 no_exclamation : { trait : "no_exclamation" } ,
7164 no_lists : { trait : "no_lists" } ,
7265 no_questions_back : { trait : "no_questions_back" } ,
73- // P0-2 (LifeOps synthesis plan): wire the three trait rubrics W4-G shipped
74- // in `packages/benchmarks/personality-bench/src/judge/checks/phrase.ts`
75- // (checkFirstNameOnly / checkMetricUnits / checkPrefersShort). The `trait`
76- // values match the `Trait` union in
77- // `packages/benchmarks/personality-bench/src/judge/rubrics/trait-respected.ts`.
78- //
79- // `first_name_only`: no scenario currently sets a `lastName` on the options
80- // payload, but `checkFirstNameOnly` handles missing lastName gracefully
81- // (skips the surname check, still enforces the honorific block-list). If
82- // future scenarios add `lastName` to `judgeKwargs`, the rubric's
83- // `readOptions` already picks it up from `options.lastName` / `last_name`.
66+ // `first_name_only`: lastName is optional — the rubric skips the surname
67+ // check when absent but still enforces the honorific block-list.
8468 first_name_only : { trait : "first_name_only" } ,
8569 metric_units : { trait : "metric_units" } ,
8670 prefers_short : { trait : "prefers_short" } ,
8771} ;
8872
8973export const DIRECTION_KEY_TO_OPTION = {
9074 warmer : "warmer" ,
91- // W5-G6: route `playful` to its own playfulness rubric rather than
92- // collapsing it to `warmer`. Politeness markers ("please/thank you") and
93- // playfulness markers (jokes/emojis/exclamations/parenthetical asides)
94- // are distinct axes — collapsing them was the root cause of the
95- // `escalation.aggressive.code.004` "all agents fail" symptom. The model
96- // typically holds politeness flat across the ladder but ramps playfulness
97- // monotonically when asked.
75+ // `playful` maps to its own rubric rather than `warmer` — politeness markers
76+ // and playfulness markers are distinct axes and must not be conflated.
9877 playful : "playful" ,
9978 cooler : "cooler" ,
10079 blunt : "cooler" ,
0 commit comments