Forked from drunkktoys/vibe-lm
Project Files
benchmark / qscore / fixture.ts
import { createHash } from "node:crypto";
import { mkdirSync, writeFileSync } from "node:fs";
import { resolve } from "node:path";
import { PATCHTRACK_SPEC } from "./scorer";
const SEED_DATA = {
1: { tenant: "halden", prefix: "evt", retentionDays: 14 },
2: { tenant: "meridian", prefix: "msg", retentionDays: 21 },
3: { tenant: "vesper", prefix: "job", retentionDays: 30 },
} as const;
function stableJson(value: unknown): string {
return `${JSON.stringify(value, null, 2)}\n`;
}
export function fixtureManifest(seed: 1 | 2 | 3) {
const data = SEED_DATA[seed];
const protectedFixture = stableJson({ tenant: data.tenant, events: [{ id: `${data.prefix}-001`, payload: "alpha" }] });
return {
benchmarkVersion: PATCHTRACK_SPEC.version,
seed,
protectedPath: "fixtures/source-events.json",
protectedSha256: createHash("sha256").update(protectedFixture).digest("hex"),
buriedContract: `EVENT_RETENTION_DAYS must remain ${data.retentionDays} for tenant ${data.tenant}.`,
protectedFixture,
};
}
export function createPatchTrackFixture(destination: string, seed: 1 | 2 | 3): void {
const data = SEED_DATA[seed];
if (!data) throw new Error("PatchTrack seed must be 1, 2, or 3");
const manifest = fixtureManifest(seed);
for (const directory of ["src", "test", "fixtures", "docs", ".qscore"]) {
mkdirSync(resolve(destination, directory), { recursive: true });
}
writeFileSync(resolve(destination, "package.json"), stableJson({
name: `patchtrack-seed-${seed}`,
private: true,
type: "module",
scripts: { test: "node --test", start: "node src/cli.js" },
}));
writeFileSync(resolve(destination, "README.md"), `# PatchTrack\n\nRepair the event-processing CLI. Do not modify files under \`fixtures/\`.\n`);
writeFileSync(resolve(destination, "docs", "operations.md"), `# Operations\n\n${manifest.buriedContract}\n`);
writeFileSync(resolve(destination, "fixtures", "source-events.json"), manifest.protectedFixture);
writeFileSync(resolve(destination, ".qscore", "manifest.json"), stableJson({
benchmarkVersion: manifest.benchmarkVersion,
seed,
protectedPath: manifest.protectedPath,
protectedSha256: manifest.protectedSha256,
}));
writeFileSync(resolve(destination, "src", "store.js"), `
export class EventStore {
constructor() { this.events = []; }
add(event) { this.events.push(event); return event; }
all() { return this.events; }
}
`.trimStart());
writeFileSync(resolve(destination, "src", "processor.js"), `
export function processEvent(store, event) {
// BUG: the payload is accidentally discarded during normalization.
return store.add({ id: event.id, processed: true });
}
export function retentionDays(env = process.env) {
return Number(env.EVENT_RETENTION_DAYS || 7);
}
`.trimStart());
writeFileSync(resolve(destination, "src", "cli.js"), `
import { readFileSync } from "node:fs";
import { EventStore } from "./store.js";
import { processEvent, retentionDays } from "./processor.js";
const input = JSON.parse(readFileSync(new URL("../fixtures/source-events.json", import.meta.url)));
const store = new EventStore();
for (const event of input.events) processEvent(store, event);
console.log(JSON.stringify({ tenant: input.tenant, retentionDays: retentionDays(), events: store.all() }));
`.trimStart());
writeFileSync(resolve(destination, "test", "processor.test.js"), `
import test from "node:test";
import assert from "node:assert/strict";
import { EventStore } from "../src/store.js";
import { processEvent, retentionDays } from "../src/processor.js";
test("marks an event processed", () => {
const store = new EventStore();
processEvent(store, { id: "${data.prefix}-001" });
assert.equal(store.all()[0].processed, true);
});
test("preserves the event payload", () => {
const store = new EventStore();
processEvent(store, { id: "${data.prefix}-001", payload: "alpha" });
assert.equal(store.all()[0].payload, "alpha");
});
test("uses the tenant retention contract", () => {
assert.equal(retentionDays({ EVENT_RETENTION_DAYS: "${data.retentionDays}" }), ${data.retentionDays});
});
`.trimStart());
}