test(FN-4787): regression tests for heartbeat identity snapshot
Fusion-Task-Id: FN-4787 Fusion-Task-Lineage: 9f174f4f-d305-4779-ba0d-562f2eab064c
This commit is contained in:
committed by
gsxdsm
parent
7cdd27feae
commit
b57d3bcc0c
79
packages/engine/src/__tests__/identity-snapshot.test.ts
Normal file
79
packages/engine/src/__tests__/identity-snapshot.test.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
import { createHash } from "node:crypto";
|
||||
import type { Agent } from "@fusion/core";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { buildIdentitySnapshot } from "../agent-heartbeat.js";
|
||||
|
||||
function makeAgent(overrides: Partial<Agent> = {}): Agent {
|
||||
const now = new Date().toISOString();
|
||||
return {
|
||||
id: "agent-1",
|
||||
name: "Snapshot Agent",
|
||||
role: "engineer",
|
||||
state: "idle",
|
||||
createdAt: now,
|
||||
updatedAt: now,
|
||||
metadata: {},
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
function shortHash(value: string): string {
|
||||
return createHash("sha256").update(value).digest("hex").slice(0, 8);
|
||||
}
|
||||
|
||||
describe("buildIdentitySnapshot", () => {
|
||||
it("renders loaded soul and instructions hashes", () => {
|
||||
const soul = "I deeply care about reliability.";
|
||||
const instructions = "Always run tests before done.";
|
||||
const snapshot = buildIdentitySnapshot({
|
||||
agent: makeAgent({ soul }),
|
||||
resolvedInstructions: { status: "loaded", value: instructions },
|
||||
workspaceMemory: { status: "unset" },
|
||||
});
|
||||
|
||||
expect(snapshot).toContain(`- soul: loaded (${soul.length} chars, sha256:${shortHash(soul)})`);
|
||||
expect(snapshot).toContain(`- instructions: loaded (${instructions.length} chars, sha256:${shortHash(instructions)})`);
|
||||
});
|
||||
|
||||
it("renders empty soul when configured as whitespace", () => {
|
||||
const snapshot = buildIdentitySnapshot({
|
||||
agent: makeAgent({ soul: " " }),
|
||||
resolvedInstructions: { status: "unset" },
|
||||
workspaceMemory: { status: "unset" },
|
||||
});
|
||||
|
||||
expect(snapshot).toContain("- soul: empty");
|
||||
});
|
||||
|
||||
it("renders unset soul when undefined", () => {
|
||||
const snapshot = buildIdentitySnapshot({
|
||||
agent: makeAgent(),
|
||||
resolvedInstructions: { status: "unset" },
|
||||
workspaceMemory: { status: "unset" },
|
||||
});
|
||||
|
||||
expect(snapshot).toContain("- soul: unset");
|
||||
});
|
||||
|
||||
it("renders instructions load-error distinctly", () => {
|
||||
const snapshot = buildIdentitySnapshot({
|
||||
agent: makeAgent(),
|
||||
resolvedInstructions: { status: "load-error" },
|
||||
workspaceMemory: { status: "unset" },
|
||||
});
|
||||
|
||||
expect(snapshot).toContain("- instructions: load-error");
|
||||
expect(snapshot).not.toContain("- instructions: unset");
|
||||
});
|
||||
|
||||
it("prefers workspace memory with source label when inline memory is absent", () => {
|
||||
const workspaceMemory = "Persist durable architecture constraints.";
|
||||
const snapshot = buildIdentitySnapshot({
|
||||
agent: makeAgent({ memory: undefined }),
|
||||
resolvedInstructions: { status: "unset" },
|
||||
workspaceMemory: { status: "loaded", value: workspaceMemory },
|
||||
});
|
||||
|
||||
expect(snapshot).toContain(`- memory: loaded (${workspaceMemory.length} chars, sha256:${shortHash(workspaceMemory)}, source: workspace)`);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user