refactor(planning): remove the original decision trace
CI / policy (push) Successful in 7s
CI / validate (push) Successful in 1m15s
CI / test (push) Successful in 3m18s
CI / benchmark (push) Failing after 5m53s
CI / build (push) Successful in 1m23s
CI / security (push) Successful in 7m6s
CI / policy (pull_request) Successful in 7s
CI / validate (pull_request) Successful in 1m9s
CI / build (pull_request) Successful in 43s
CI / test (pull_request) Successful in 3m19s
CI / images (push) Successful in 3m7s
CI / required (push) Successful in 2s
CI / benchmark (pull_request) Failing after 5m28s
CI / security (pull_request) Successful in 6m37s
CI / images (pull_request) Successful in 3m18s
CI / required (pull_request) Successful in 1s

This commit is contained in:
nessar committed 2026-10-15 20:42:33 +02:00
1 parent ea4256107f
commit d9d9befa12
43 files changed
+729 -8880

No files matched your search

@@ -13,6 +13,8 @@ describe('calendar objectives in the real worker', () => {
let directory: string;
let bundle: string;
const threads = new Set<NodeWorker>();
const messages: string[] = [];
let stopped = 0;
beforeAll(async () => {
directory = mkdtempSync(join(tmpdir(), 'vac-calendar-worker-'));
@@ -30,6 +32,8 @@ parentPort.on('message', (data) => globalThis.self.onmessage({ data }));
});
beforeEach(() => {
messages.length = 0;
stopped = 0;
vi.setSystemTime(new Date('2024-04-01T12:00:00Z'));
class BrowserWorker {
onmessage: ((event: MessageEvent) => void) | null = null;
@@ -37,13 +41,17 @@ parentPort.on('message', (data) => globalThis.self.onmessage({ data }));
private readonly thread = new NodeWorker(bundle);
constructor() {
threads.add(this.thread);
this.thread.on('message', (data) => this.onmessage?.({ data } as MessageEvent));
this.thread.on('message', (data) => {
messages.push(data.type);
this.onmessage?.({ data } as MessageEvent);
});
this.thread.on('error', () => this.onerror?.());
}
postMessage(message: unknown) {
this.thread.postMessage(message);
}
terminate() {
stopped++;
void this.thread.terminate();
}
}
@@ -109,14 +117,19 @@ parentPort.on('message', (data) => globalThis.self.onmessage({ data }));
if (explanation?.kind !== 'PlanExplanation')
throw new Error('Expected a worker explanation');
expect(explanation.placements[0].firstDecisiveObjective).toBe(first);
expect((await calculation.trace)?.phases.map((phase) => phase.name)).toEqual([
'validation',
'obligations',
first,
`optimization:${rules[1].id}`,
'expiry',
'dates',
]);
await calculation.timings;
expect(new Set(messages)).toEqual(
new Set([
'heartbeat',
'progress',
'checkpoint',
'result',
'explanation',
'artifacts',
]),
);
expect(messages.indexOf('result')).toBeLessThan(messages.indexOf('explanation'));
expect(stopped).toBe(1);
const comparison = await calculation.analyzeCounterfactual(plan.placements[0]);
if (comparison.kind !== 'Counterfactual')
throw new Error('Expected a worker comparison');
@@ -169,29 +182,6 @@ parentPort.on('message', (data) => globalThis.self.onmessage({ data }));
name: 'Captured supporting economy',
configuration: OPTIMIZATION_PRESETS.supportingPlacements,
});
const trace = await calculation.trace;
expect(trace?.phases.map(({ name }) => name)).toEqual([
'validation',
'obligations',
`optimization:${rules[0].id}`,
`optimization:${rules[1].id}`,
'expiry',
'dates',
]);
const candidates = trace?.phases.flatMap(({ decisions }) =>
decisions.flatMap(({ candidates }) => candidates),
);
expect(candidates).toContainEqual(
expect.objectContaining({
status: economyFirst ? 'evaluated-rejected' : 'chosen',
dates: ['2026-11-12', '2026-11-13'],
comparison: expect.objectContaining({
firstDecisiveObjective: economyFirst
? 'optimization:economy'
: 'optimization:holiday',
}),
}),
);
const explanation = await calculation.explanation;
if (explanation?.kind !== 'PlanExplanation') throw new Error('Expected an explanation');
if (economyFirst) {