import assert from "node:assert/strict"; import { readFileSync } from "node:fs"; import test from "node:test"; import { homeSurface as pageSource } from "./home-surface.ts"; const rowSource = readFileSync(new URL("../src/components/chat-message-row.tsx", import.meta.url), "utf8"); const contentSource = readFileSync(new URL("../src/components/chat-message-content.tsx", import.meta.url), "utf8"); const globalStyles = readFileSync(new URL("../src/app/globals.css", import.meta.url), "utf8"); test("assistant messages fold the user-facing Technique Audit Table and never remount the internal panel", () => { assert.doesNotMatch(rowSource, /EvidenceAuditPanel/); assert.doesNotMatch(rowSource, /claimStatus=\{message\.techniqueTruth\}/); assert.doesNotMatch(rowSource, /workflowReceipt=\{message\.workflowReceipt\}/); assert.match(contentSource, /TechniqueAuditDisclosure/); // 原值总展示 receipt;新值寒暄明确无 auditRows,咨询保持原字段。 assert.match(rowSource, /auditRows=\{smalltalk \? undefined : message\.agentExecutionReceipt\?\.techniqueAuditTable\}/); // 原值: 读 evidence-audit-panel 源码并断言内部表文案,以及 globals.css 里 .evidence-audit-panel / .raw-evidence-receipt 存在 // 新值: 删掉这些正向断言。聊天行不得挂内部面板,读者侧 TechniqueAuditDisclosure 与 .technique-audit / .markdown-table 保留 // 原因: 内部面板组件与对应死样式已删除,否定合同不放宽 assert.match(globalStyles, /\.technique-audit >/); assert.match(globalStyles, /\.markdown-table/); }); test("consult responses persist workflow receipt headers for evidence rendering", () => { assert.match(pageSource, /x-jyotish-workflow-route/); assert.match(pageSource, /x-jyotish-workflow-status/); assert.match(pageSource, /x-jyotish-precise-timing/); assert.match(pageSource, /x-jyotish-missing-layers/); assert.match(pageSource, /workflowReceipt/); });