Files
fusion/scripts/__tests__/replace-seeded-workflow-prompts.test.mjs
gsxdsm 2209c57dd6 chore(engine): remove workflow-step mock routing + stale FN-5482 docs
Drops the "workflow-step" MockSessionPurpose enum value and the
workflowStepId / workflowStepTemplateId plumbing through
agent-runtime, agent-session-helpers, mock-provider, executor, and
merger. The seeded-workflow-prompts script loses its FN-5205
rationale comment + test (no longer applicable now that workflow
steps run through the regular session purposes).

Also strips the stale FN-5482 architecture-invariant bullet from
AGENTS.md and the corresponding audit-event line from
docs/architecture.md (the self-healing reclaim invariant they
described no longer holds).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 03:09:00 -07:00

99 lines
3.8 KiB
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
import { mkdtempSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import { join, resolve } from "node:path";
import { execFileSync, spawnSync } from "node:child_process";
import { URL, fileURLToPath } from "node:url";
const root = resolve(fileURLToPath(new URL("../../", import.meta.url)));
const scriptPath = join(root, "scripts/replace-seeded-workflow-prompts.mjs");
const coreDistPath = join(root, "packages/core/dist/types.js");
function ensureCoreDist() {
try {
execFileSync("node", ["-e", `import(${JSON.stringify(coreDistPath)})`], { stdio: "pipe" });
} catch {
execFileSync("pnpm", ["--filter", "@fusion/core", "build"], { cwd: root, stdio: "pipe" });
}
}
function runSql(dbPath, sql) {
return execFileSync("sqlite3", [dbPath, sql], { encoding: "utf8" });
}
function createDb(pathname, rows = []) {
runSql(pathname, "CREATE TABLE workflow_steps (id TEXT PRIMARY KEY, name TEXT NOT NULL, prompt TEXT, updatedAt TEXT);");
for (const row of rows) {
const prompt = String(row.prompt ?? "").replace(/'/g, "''");
const name = String(row.name ?? "").replace(/'/g, "''");
const updatedAt = String(row.updatedAt ?? "2026-01-01T00:00:00.000Z").replace(/'/g, "''");
runSql(
pathname,
`INSERT INTO workflow_steps (id, name, prompt, updatedAt) VALUES ('${row.id}','${name}','${prompt}','${updatedAt}');`,
);
}
}
test("replaces seeded workflow prompts and remains idempotent", async () => {
ensureCoreDist();
const { WORKFLOW_STEP_TEMPLATES } = await import(coreDistPath);
const browserPrompt = WORKFLOW_STEP_TEMPLATES.find((entry) => entry.id === "browser-verification")?.prompt;
assert.ok(browserPrompt);
const tempDir = mkdtempSync(join(tmpdir(), "fn4493-script-"));
const dbPath = join(tempDir, "fusion.db");
try {
createDb(dbPath, [
{
id: "WS-004",
name: "Browser Verification",
prompt: "legacy browser prompt",
updatedAt: "2026-01-01T00:00:00.000Z",
},
]);
const runCheckStale = spawnSync("node", [scriptPath, `--db=${dbPath}`, "--check"], {
encoding: "utf8",
cwd: root,
});
assert.equal(runCheckStale.status, 0);
assert.match(runCheckStale.stdout, /WS-004: differs/);
const run1 = spawnSync("node", [scriptPath, `--db=${dbPath}`], { encoding: "utf8", cwd: root });
assert.equal(run1.status, 0);
assert.match(run1.stdout, /WS-004: updated/);
const promptValue = runSql(dbPath, "SELECT prompt FROM workflow_steps WHERE id='WS-004';").trimEnd();
const updatedAtValue = runSql(dbPath, "SELECT updatedAt FROM workflow_steps WHERE id='WS-004';").trim();
assert.equal(promptValue, browserPrompt);
assert.notEqual(updatedAtValue, "2026-01-01T00:00:00.000Z");
const run2 = spawnSync("node", [scriptPath, `--db=${dbPath}`], { encoding: "utf8", cwd: root });
assert.equal(run2.status, 0);
assert.match(run2.stdout, /WS-004: no-op, already up to date/);
const runCheck = spawnSync("node", [scriptPath, `--db=${dbPath}`, "--check"], { encoding: "utf8", cwd: root });
assert.equal(runCheck.status, 0);
assert.match(runCheck.stdout, /no-op/);
} finally {
rmSync(tempDir, { recursive: true, force: true });
}
});
test("reports skipped when seeded rows are absent", () => {
ensureCoreDist();
const tempDir = mkdtempSync(join(tmpdir(), "fn4493-script-empty-"));
const dbPath = join(tempDir, "fusion.db");
try {
createDb(dbPath, []);
const run = spawnSync("node", [scriptPath, `--db=${dbPath}`], { encoding: "utf8", cwd: root });
assert.equal(run.status, 0);
assert.match(run.stdout, /WS-004: not present, skipping/);
assert.match(run.stdout, /WS-006: not present, skipping/);
assert.match(run.stdout, /Updated 0 row\(s\), skipped 2, no-op 0/);
} finally {
rmSync(tempDir, { recursive: true, force: true });
}
});