Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

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

Raw
import assert from "node:assert/strict";
import { describe, it } from "vitest";
import {
	boardStateFor,
	boardStateForInitialization,
	boardStateSource,
	emptyBoardState,
	parseBoardState,
	updateBoardState,
} from "../board-state.ts";
import type { BundleDocumentRecord, DocumentMetadata } from "../documents.ts";
import { SystemDocumentError } from "../documents.ts";

const document = (metadata: DocumentMetadata): BundleDocumentRecord => ({
	path: `.system/${metadata.type}s/${metadata.id}-fixture/index.md`,
	metadata,
	frontmatter: new Map(),
});
const spec = document({
	id: "PX-SPEC-SPEC0001",
	type: "spec",
	title: "Contract",
});
const planA = document({
	id: "PX-PLAN-PLAN0001",
	type: "plan",
	title: "Build",
	spec: spec.metadata.id,
	status: "approved",
});
const planB = document({
	id: "PX-PLAN-PLAN0002",
	type: "plan",
	title: "Test",
	spec: spec.metadata.id,
	status: "approved",
});
const issue = document({
	id: "PX-ISSUE-ISSUE001",
	type: "issue",
	title: "Bug",
	specs: [spec.metadata.id],
});
const documents = [spec, planA, planB, issue];
const at = "2026-03-20T12:00:00.000Z";

describe("board state", () => {
	it("defaults specs and plans to todo and issues to open", () => {
		const board = emptyBoardState();
		assert.equal(boardStateFor(board, spec.metadata), "todo");
		assert.equal(boardStateFor(board, planA.metadata), "todo");
		assert.equal(boardStateFor(board, issue.metadata), "open");
	});

	it("keeps spec state manual while requiring every existing plan done", () => {
		let board = emptyBoardState();
		assert.throws(
			() =>
				updateBoardState(
					board,
					documents,
					spec.metadata.id,
					"done",
					"manual",
					at,
				),
			(error: unknown) =>
				error instanceof SystemDocumentError &&
				error.code === "board.spec-plans",
		);
		board = updateBoardState(
			board,
			documents,
			planA.metadata.id,
			"done",
			"manual",
			at,
		);
		board = updateBoardState(
			board,
			documents,
			planB.metadata.id,
			"done",
			"manual",
			at,
		);
		assert.equal(boardStateFor(board, spec.metadata), "todo");
		board = updateBoardState(
			board,
			documents,
			spec.metadata.id,
			"done",
			"manual",
			at,
		);
		assert.equal(boardStateFor(board, spec.metadata), "done");
	});

	it("allows a planless spec done and never lets issues demote it", () => {
		let board = updateBoardState(
			emptyBoardState(),
			[spec, issue],
			spec.metadata.id,
			"done",
			"manual",
			at,
		);
		board = updateBoardState(
			board,
			[spec, issue],
			issue.metadata.id,
			"open",
			"manual",
			at,
		);
		assert.equal(boardStateFor(board, spec.metadata), "done");
	});

	it("reopening one plan demotes its spec without changing sibling plans", () => {
		let board = emptyBoardState();
		for (const id of [planA.metadata.id, planB.metadata.id, spec.metadata.id])
			board = updateBoardState(board, documents, id, "done", "manual", at);
		board = updateBoardState(
			board,
			documents,
			planA.metadata.id,
			"todo",
			"manual",
			at,
		);
		assert.equal(boardStateFor(board, spec.metadata), "todo");
		assert.equal(boardStateFor(board, planB.metadata), "done");
	});

	it("round-trips agent entries with notes and clears them on later writes", () => {
		let board = updateBoardState(
			emptyBoardState(),
			documents,
			planA.metadata.id,
			"done",
			"agent",
			at,
			" exec verified: 12 tests pass ",
		);
		assert.deepEqual(board.items[planA.metadata.id], {
			state: "done",
			source: "agent",
			updatedAt: at,
			note: "exec verified: 12 tests pass",
		});
		assert.deepEqual(parseBoardState(boardStateSource(board), "PX"), board);
		board = updateBoardState(
			board,
			documents,
			planA.metadata.id,
			"todo",
			"manual",
			at,
		);
		assert.deepEqual(board.items[planA.metadata.id], {
			state: "todo",
			source: "manual",
			updatedAt: at,
		});
	});

	it("rejects unknown sources and oversized notes", () => {
		const entry = (extra: string) =>
			`{"schemaVersion":0,"items":{"${planA.metadata.id}":{"state":"done","source":${extra}}}}`;
		assert.throws(
			() => parseBoardState(entry(`"robot","updatedAt":"${at}"`), "PX"),
			(error: unknown) =>
				error instanceof SystemDocumentError && error.code === "board.source",
		);
		assert.throws(
			() =>
				parseBoardState(
					entry(`"agent","updatedAt":"${at}","note":"${"x".repeat(201)}"`),
					"PX",
				),
			(error: unknown) =>
				error instanceof SystemDocumentError && error.code === "board.note",
		);
		assert.throws(
			() =>
				parseBoardState(entry(`"agent","updatedAt":"${at}","why":"x"`), "PX"),
			(error: unknown) =>
				error instanceof SystemDocumentError && error.code === "board.keys",
		);
	});

	it("parses strict schema 0 and directly rewrites version mismatches", () => {
		const current = updateBoardState(
			emptyBoardState(),
			documents,
			issue.metadata.id,
			"done",
			"assess",
			at,
		);
		assert.deepEqual(parseBoardState(boardStateSource(current), "PX"), current);
		const mismatched = boardStateSource(current).replace(
			'"schemaVersion": 0',
			'"schemaVersion": 9',
		);
		assert.equal(
			boardStateForInitialization(mismatched, "PX").sourceSchemaVersion,
			9,
		);
		assert.throws(
			() => parseBoardState(mismatched, "PX"),
			(error: unknown) =>
				error instanceof SystemDocumentError && error.code === "board.version",
		);
	});
});