Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

extensions/the-system/__tests__/board-summary.test.ts

Raw
import assert from "node:assert/strict";
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import path from "node:path";
import { afterEach, describe, it } from "vitest";
import { boardSummaryBlock } from "../board-summary.ts";

const roots: string[] = [];
const write = (root: string, relative: string, content: string) => {
	const target = path.join(root, relative);
	mkdirSync(path.dirname(target), { recursive: true });
	writeFileSync(target, content);
};

const project = (board: string): string => {
	const root = mkdtempSync(path.join(tmpdir(), "system-board-summary-"));
	roots.push(root);
	for (const file of ["SYSTEM.md", "MISSION.md", "RULES.md"])
		write(root, `.system/${file}`, `# ${file}\n`);
	write(root, ".system/config.json", '{"prefix":"PX","schemaVersion":0}');
	write(root, ".system/board.json", board);
	write(
		root,
		".system/specs/PX-SPEC-SPEC0001-contract/index.md",
		"---\nid: PX-SPEC-SPEC0001\ntype: spec\ntitle: Contract\n---\n\n# Contract\n",
	);
	write(
		root,
		".system/plans/PX-PLAN-PLAN0001-build/index.md",
		"---\nid: PX-PLAN-PLAN0001\ntype: plan\ntitle: Build\nspec: PX-SPEC-SPEC0001\nstatus: approved\n---\n\n# Build\n",
	);
	write(
		root,
		".system/issues/PX-ISSUE-ISSUE001-bug/index.md",
		"---\nid: PX-ISSUE-ISSUE001\ntype: issue\ntitle: Bug\nspecs:\n  - PX-SPEC-SPEC0001\n---\n\n# Bug\n",
	);
	return root;
};

afterEach(() => {
	for (const root of roots.splice(0))
		rmSync(root, { recursive: true, force: true });
});

describe("board summary block", () => {
	it("counts tracked items and lists unfinished work with provenance", () => {
		const now = Date.parse("2026-03-22T12:00:00.000Z");
		const root = project(
			JSON.stringify({
				schemaVersion: 0,
				items: {
					"PX-PLAN-PLAN0001": {
						state: "done",
						updatedAt: "2026-03-20T12:00:00.000Z",
						source: "agent",
						note: "exec verified",
					},
				},
			}),
		);
		const block = boardSummaryBlock(root, now) ?? "";
		assert.match(block, /# The System board state/);
		assert.match(
			block,
			/specs 1 todo, 0 done\. plans 0 todo, 1 done\. issues 1 open, 0 done\./,
		);
		assert.match(block, /- PX-SPEC-SPEC0001 · Contract · todo · default/);
		assert.match(block, /- PX-ISSUE-ISSUE001 · Bug · open · default/);
		assert.doesNotMatch(block, /PX-PLAN-PLAN0001/);
	});

	it("shows entry source, age, and note for unfinished items", () => {
		const now = Date.parse("2026-03-22T12:00:00.000Z");
		const root = project(
			JSON.stringify({
				schemaVersion: 0,
				items: {
					"PX-SPEC-SPEC0001": {
						state: "todo",
						updatedAt: "2026-03-21T12:00:00.000Z",
						source: "agent",
						note: "slice one only",
					},
				},
			}),
		);
		assert.match(
			boardSummaryBlock(root, now) ?? "",
			/- PX-SPEC-SPEC0001 · Contract · todo · agent 1 day ago · slice one only/,
		);
	});

	it("stays silent when the board is unreadable", () => {
		const root = project('{"schemaVersion":9,"items":{}}');
		assert.equal(boardSummaryBlock(root), undefined);
		rmSync(path.join(root, ".system/board.json"));
		assert.equal(boardSummaryBlock(root), undefined);
	});
});