fix: tester detects completion by quiescence, not __end__ event
CI / test (push) Has been cancelled

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:
2026-04-18 08:10:59 +00:00
parent 1ba77929e6
commit b533094792
@@ -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();