Adapter doesn't write __end__ events — moderator returns END and tick produces executed=[]. Now tester checks: did at least one tick execute, then quiesced = completed.
This commit is contained in:
@@ -123,43 +123,36 @@ export function createMetaTesterRole(opts: {
|
||||
hash,
|
||||
});
|
||||
|
||||
// Tick until __end__ or maxTicks
|
||||
let reachedEnd = false;
|
||||
// Tick until workflow quiesces (executed=[]) or maxTicks
|
||||
let completed = false;
|
||||
let tickCount = 0;
|
||||
let lastError: string | null = null;
|
||||
let didExecute = false;
|
||||
|
||||
for (let i = 0; i < maxTicks; i++) {
|
||||
tickCount++;
|
||||
try {
|
||||
const r = await rule.tick();
|
||||
if (r.executed.length === 0) {
|
||||
// Check if we reached __end__
|
||||
const events = await testStore.getAfter(0);
|
||||
const endEvt = events.find((ev: any) => ev.kind === `${wf.name}.__end__`);
|
||||
if (endEvt) {
|
||||
reachedEnd = true;
|
||||
// No more work — if we executed at least once, workflow is done
|
||||
if (didExecute) {
|
||||
completed = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Check for __end__ in executed
|
||||
const events2 = await testStore.getAfter(0);
|
||||
const endEvt2 = events2.find((ev: any) => ev.kind === `${wf.name}.__end__`);
|
||||
if (endEvt2) {
|
||||
reachedEnd = true;
|
||||
break;
|
||||
}
|
||||
didExecute = true;
|
||||
} catch (err: any) {
|
||||
lastError = err.message;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (reachedEnd) {
|
||||
if (completed) {
|
||||
results.push({ name: wf.name, pass: true, detail: `completed in ${tickCount} ticks` });
|
||||
} else if (lastError) {
|
||||
results.push({ name: wf.name, pass: false, detail: `error: ${lastError}` });
|
||||
} else {
|
||||
results.push({ name: wf.name, pass: false, detail: `did not reach __end__ in ${tickCount} ticks` });
|
||||
results.push({ name: wf.name, pass: false, detail: `did not complete in ${tickCount} ticks` });
|
||||
}
|
||||
} finally {
|
||||
await testStore.close();
|
||||
|
||||
Reference in New Issue
Block a user