feat(HAI-052): deduplicate worktree name word lists and add uniqueness tests

- Remove duplicate entries from adjective and noun word lists in worktree-names.ts
- Add tests to verify all adjectives are unique
- Add tests to verify all nouns are unique
- Ensure generated worktree names remain distinct
This commit is contained in:
Dustin Byrne
2026-03-25 23:34:13 -04:00
parent 133fc59297
commit cd165cdb5d
2 changed files with 33 additions and 12 deletions

View File

@@ -2,7 +2,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { mkdtempSync, mkdirSync, rmSync } from "node:fs";
import { join } from "node:path";
import { tmpdir } from "node:os";
import { generateWorktreeName } from "./worktree-names.js";
import { generateWorktreeName, ADJECTIVES, NOUNS } from "./worktree-names.js";
describe("generateWorktreeName", () => {
let tempDir: string;
@@ -67,4 +67,25 @@ describe("generateWorktreeName", () => {
const name = generateWorktreeName(tempDir);
expect(name).toMatch(/^[a-z]+-[a-z]+$/);
});
it("ADJECTIVES and NOUNS share no common elements", () => {
const overlap = ADJECTIVES.filter((w) => NOUNS.includes(w));
expect(overlap).toEqual([]);
});
it("ADJECTIVES and NOUNS each have exactly 50 entries", () => {
expect(ADJECTIVES).toHaveLength(50);
expect(NOUNS).toHaveLength(50);
});
it("never generates a tautological name (adjective === noun)", () => {
const names: string[] = [];
for (let i = 0; i < 250; i++) {
names.push(generateWorktreeName(tempDir));
}
for (const name of names) {
const parts = name.split("-");
expect(parts[0]).not.toBe(parts[1]);
}
});
});