Browse Source

merge: fleet-worker route() test matches decider-inherit doctrine

0xDarkMatter 3 weeks ago
parent
commit
8a384bd697
1 changed files with 10 additions and 5 deletions
  1. 10 5
      skills/fleet-worker/tests/run.sh

+ 10 - 5
skills/fleet-worker/tests/run.sh

@@ -200,14 +200,19 @@ if [ -f "$ROUTE" ] && command -v node >/dev/null 2>&1; then
 
 
 const S=JSON.stringify; let P=0,F=0;
 const S=JSON.stringify; let P=0,F=0;
 const eq=(n,g,w)=>{ if(S(g)===S(w)){P++} else {F++;console.error("ROUTE FAIL "+n+" got "+S(g)+" want "+S(w))} };
 const eq=(n,g,w)=>{ if(S(g)===S(w)){P++} else {F++;console.error("ROUTE FAIL "+n+" got "+S(g)+" want "+S(w))} };
-eq("judge",route("judge"),{model:"opus",effort:"high"});
+// Deciders (judge/synthesize) omit model: they INHERIT the session's premium brain
+// (Fable > Opus); pinning would DOWNGRADE on a Fable session. See native-model-routing.md.
+eq("judge inherits model",route("judge"),{effort:"high"});
+eq("synthesize inherits model",route("synthesize"),{effort:"high"});
 eq("scout",route("scout"),{model:"sonnet",effort:"low"});
 eq("scout",route("scout"),{model:"sonnet",effort:"low"});
 eq("unknown->inherit",route("nope"),{});
 eq("unknown->inherit",route("nope"),{});
 const low={total:100000,remaining:()=>10000};
 const low={total:100000,remaining:()=>10000};
-eq("judge low-budget",route("judge",low),{model:"sonnet",effort:"low"});
-eq("scout low-budget",route("scout",low),{model:"haiku",effort:"low"});
+// Deciders are EXEMPT from budget degradation — never under-power a judge under pressure.
+eq("judge exempt under low budget",route("judge",low),{effort:"high"});
+eq("synthesize exempt under low budget",route("synthesize",low),{effort:"high"});
+eq("scout degrades one tier",route("scout",low),{model:"haiku",effort:"low"});
 const okb={total:100000,remaining:()=>50000};
 const okb={total:100000,remaining:()=>50000};
-eq("judge healthy",route("judge",okb),{model:"opus",effort:"high"});
+eq("judge healthy budget",route("judge",okb),{effort:"high"});
 eq("fw yes",useFleetWorker({items:30,selfContained:true,mutatesFiles:true}),true);
 eq("fw yes",useFleetWorker({items:30,selfContained:true,mutatesFiles:true}),true);
 eq("fw small",useFleetWorker({items:3,selfContained:true,mutatesFiles:true}),false);
 eq("fw small",useFleetWorker({items:3,selfContained:true,mutatesFiles:true}),false);
 eq("fw shared",useFleetWorker({items:30,selfContained:false,mutatesFiles:true}),false);
 eq("fw shared",useFleetWorker({items:30,selfContained:false,mutatesFiles:true}),false);
@@ -215,7 +220,7 @@ eq("fw read-only",useFleetWorker({items:30,selfContained:true,mutatesFiles:false
 process.exit(F?1:0);
 process.exit(F?1:0);
 TEST
 TEST
   } > "$RT"
   } > "$RT"
-  node "$RT" >/dev/null 2>&1; ee "route()/useFleetWorker() logic (10 cases)" 0 $?
+  node "$RT" >/dev/null 2>&1; ee "route()/useFleetWorker() logic (12 cases)" 0 $?
 else
 else
   ok "route.js helper test (SKIP — node unavailable or asset absent)"
   ok "route.js helper test (SKIP — node unavailable or asset absent)"
 fi
 fi