from pathlib import Path
import subprocess,sys
out=Path(__file__).resolve().parent; src=Path('/Users/yixiay/Downloads/123/597084-fix-code-2026-11-04/code')
baseline=Path('/Users/yixiay/Documents/codexWorkSpace/issues/output/597084-review/impact-2026-11-04/source')
if '--baseline' in sys.argv: src=baseline
label='red' if '--baseline' in sys.argv else 'green'; java=out/'batch-src'; classes=out/'batch-classes'; classes.mkdir(exist_ok=True)
def save(p,s):
 p=java/p;p.parent.mkdir(parents=True,exist_ok=True);p.write_text(s)
save(Path('cn/jojo/cc/biz/service/english/dict/EnglishPublishBizService.java'),'''package cn.jojo.cc.biz.service.english.dict; import cn.jojo.cc.biz.model.bo.english.BatchPublishResultBo; public interface EnglishPublishBizService { BatchPublishResultBo publishPendingWords(Long c,int n,Object o); BatchPublishResultBo publishPendingPhrases(Long c,int n,Object o); }''')
save(Path('cn/jojo/cc/worker/task/BaseScheduleJobHandler.java'),'''package cn.jojo.cc.worker.task; public class BaseScheduleJobHandler {static final Object SYSTEM=new Object();}''')
save(Path('com/xxl/job/core/handler/annotation/XxlJob.java'),'''package com.xxl.job.core.handler.annotation; public @interface XxlJob {String value();}''')
save(Path('com/xxl/job/core/biz/model/ReturnT.java'),'''package com.xxl.job.core.biz.model; public class ReturnT<T> {public static final int FAIL_CODE=500; public final int code;public final T content;public ReturnT(T c){code=200;content=c;}public ReturnT(int c,T m){code=c;content=m;} public String toString(){return code+":"+content;}}''')
save(Path('cn/jojo/cc/worker/task/BatchProbe.java'),'''package cn.jojo.cc.worker.task;
import cn.jojo.cc.biz.service.english.dict.*;import cn.jojo.cc.biz.model.bo.english.*;import java.util.*;
public class BatchProbe {
 static class FakePublish implements EnglishPublishBizService {int total=250,wordWrites,phraseWrites;boolean allFail;List<String> batches=new ArrayList<>();
  BatchPublishResultBo page(String type,Long c,int n){batches.add(type+":"+c+":"+n);int size=Math.min(n,Math.max(0,total-c.intValue()));var b=new BatchPublishResultBo();b.setScannedCount(size);b.setSuccessCount(allFail?0:size);b.setFailedCount(allFail?size:0);b.setNextCursor(c+size);b.setFinished(size<n);if(type.equals("words"))wordWrites+=size;else phraseWrites+=size;return b;}
  public BatchPublishResultBo publishPendingWords(Long c,int n,Object o){return page("words",c,n);}public BatchPublishResultBo publishPendingPhrases(Long c,int n,Object o){return page("phrases",c,n);}
 }
 static void run(String p,int total,boolean fail)throws Exception{var fake=new FakePublish();fake.total=total;fake.allFail=fail;var task=new EnglishBatchPublishTask();var f=EnglishBatchPublishTask.class.getDeclaredField("englishPublishBizService");f.setAccessible(true);f.set(task,fake);var result=task.batchPublish(p);System.out.println("param="+p+", result="+result+", words="+fake.wordWrites+", phrases="+fake.phraseWrites+", batches="+fake.batches);boolean valid=p==null||p.startsWith("limit=150")||p.startsWith("limit=2,");if(valid && result.code!=200)throw new AssertionError("valid rejected");if(!valid && (result.code!=500||fake.wordWrites!=0||fake.phraseWrites!=0))throw new AssertionError("invalid parameter wrote data");if(p!=null&&p.startsWith("limit=150")&&fake.wordWrites!=150)throw new AssertionError("limit ignored");if(p!=null&&p.startsWith("limit=2,")&&(fake.wordWrites+fake.phraseWrites)!=2)throw new AssertionError("limit ignored");}
 public static void main(String[]args)throws Exception{run("limit=0,type=words",250,false);run("0",3,false);run(",,,",3,false);run("limit=-1",3,false);run("type=invalid",3,false);run("limit=150,type=words",250,false);run("limit=2,type=phrases",250,false);run(null,3,false);run("limit=2,type=words",3,true);}
}''')
m2=Path.home()/'.m2/repository'; jars=[m2/p for p in ['org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar','org/projectlombok/lombok/1.18.36/lombok-1.18.36.jar','org/springframework/spring-context/6.2.0/spring-context-6.2.0.jar','org/springframework/spring-beans/6.2.0/spring-beans-6.2.0.jar','org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar']];cp=':'.join(map(str,jars))
files=list(java.rglob('*.java'))+[src/'api/admin-worker/src/main/java/cn/jojo/cc/worker/task/EnglishBatchPublishTask.java', Path('/Users/yixiay/Downloads/123/597084-fix-code-2026-11-04/code/application/src/main/java/cn/jojo/cc/biz/model/bo/english/BatchPublishResultBo.java'),baseline/'application/src/main/java/cn/jojo/cc/biz/model/bo/english/EnglishTaskFailureBo.java']
r=subprocess.run(['javac','-cp',cp,'-processorpath',str(jars[1]),'-d',str(classes),*map(str,files)],capture_output=True,text=True);(out/'compile-batch.txt').write_text(r.stdout+r.stderr);print('javac_exit',r.returncode)
if r.returncode: print(r.stdout+r.stderr);raise SystemExit(r.returncode)
r=subprocess.run(['java','-cp',str(classes)+':'+cp,'cn.jojo.cc.worker.task.BatchProbe'],capture_output=True,text=True);(out/(label+'-batch.txt')).write_text(r.stdout+r.stderr+'exit='+str(r.returncode)+'\n');print(r.stdout+r.stderr,'exit=',r.returncode);raise SystemExit(r.returncode)
