import assert from "node:assert/strict"; import fs from "node:fs"; import path from "node:path"; import test from "node:test"; import { fileURLToPath } from "node:url"; const directory = path.dirname(fileURLToPath(import.meta.url)); const data = JSON.parse(fs.readFileSync(path.join(directory, "see-you-tomorrow-persona-readiness.json"), "utf8")); const byName = Object.fromEntries(data.personas.map((persona) => [persona.name, persona])); test("see-you-tomorrow keeps channel and four persona roles separate", () => { assert.equal(data.channel_is_persona, false); assert.equal(Object.keys(data.current_role_map).length, 4); assert.notEqual(data.current_role_map["ICE-BB-0003"], data.current_role_map["PER-QW001"]); }); test("qiuqiu stays affective, qiwu stays registration-pending, and chaomu stays candidate", () => { assert.equal(byName["秋秋"].architecture_classification, "MEMORY_ROOT_ONLY_INTENTIONALLY_NOT_ARCHITECTURE"); assert.equal(byName["栖梧"].classification, "FORMAL_KERNEL_READY_REGISTRATION_PENDING"); assert.equal(byName["朝暮"].classification, "CANDIDATE_SHELL_ONLY"); }); test("historical qiuqiu and qiwu placeholders cannot become current ids", () => { assert.ok(data.number_tombstones.includes("ICE-GL-ZHI-002_PLACEHOLDER_NOT_CANONICAL")); assert.ok(data.number_tombstones.includes("PER-ZQ001_REQUIRES_SEPARATE_ALIAS_MIGRATION")); assert.ok(data.number_tombstones.includes("ICE-GL-ZHI-001_QIWU_PLACEHOLDER_NOT_CURRENT_CANONICAL")); });