validation.test.ts
1032 bytes
1import { describe, it } from "node:test";
2import assert from "node:assert/strict";
3import { SimpleFrontmatterCodec } from "./parser.ts";
4import { deriveSkillMetadata, getDuplicateFrontmatterKeys, hasDuplicateDisableModelInvocation } from "./validation.ts";
5
6const codec = new SimpleFrontmatterCodec();
7
8describe("frontmatter validation", () => {
9 it("reports duplicate top-level frontmatter keys", () => {
10 const doc = codec.parse([
11 "---",
12 "name: handoff",
13 "description: Compact the conversation.",
14 "disable-model-invocation: true",
15 "argument-hint: What next?",
16 "disable-model-invocation: true",
17 "---",
18 "",
19 ].join("\n"));
20
21 assert.deepEqual(getDuplicateFrontmatterKeys(doc), ["disable-model-invocation"]);
22 assert.equal(hasDuplicateDisableModelInvocation(doc), true);
23 assert.deepEqual(deriveSkillMetadata("/skills/handoff/SKILL.md", doc).diagnostics, [
24 { severity: "warning", message: "Duplicate frontmatter key: disable-model-invocation" },
25 ]);
26 });
27});