refactor(rebrand): rename & rebrand CI → CIAgent across all source and test files

- Type renames: CIConfig → CIAgentConfig, DEFAULT_CI_CONFIG → DEFAULT_CIAGENT_CONFIG
- Type renames: CiMetadata → CIAgentMetadata, ParsedCiCommit → ParsedCIAgentCommit
- Function renames: initCI → initCIAgent, isCIInitialized → isCIAgentInitialized
- Function renames: extractCiBlock → extractCIAgentBlock, parseCiBlock → parseCIAgentBlock
- Class renames: CiFiles → CIAgentFiles
- Import paths: ci-files.js → ciagent-files.js
- Directory paths: .ci/ → .ciagent/ across all source and test files
- Check names: ".ci directory exists" → ".ciagent directory exists"
- Check names: "CI config valid" → "CIAgent config valid"
- Temp dir names: ci-*-test- → ciagent-*-test-
- CLI examples: "ci init" → "ciagent init"
- Fix deepMerge infinite recursion bug in config.ts
- ---ci---/---/ci--- block markers preserved unchanged
- All 31 test suites, 370 tests passing

---ci---
phase: 1
milestone: v0.5
plan: 07
task: 07-01-01
status: execute
---/ci---
This commit is contained in:
Jon Chery
2026-05-29 18:01:13 +00:00
parent e31afe3b59
commit 4a58aa1657
51 changed files with 505 additions and 465 deletions
+22 -22
View File
@@ -1,11 +1,11 @@
import { CommitBuilder } from "../core/commit-builder.js";
import { extractCiBlock, parseCiBlock } from "../core/commit-parser.js";
import { CiMetadata } from "../types/commit-meta.js";
import { extractCIAgentBlock, parseCIAgentBlock } from "../core/commit-parser.js";
import { CIAgentMetadata } from "../types/commit-meta.js";
describe("CommitBuilder", () => {
describe("buildCiBlock", () => {
it("builds minimal ci block", () => {
const ci: CiMetadata = { phase: 1, milestone: "v1.0", status: "execute" };
const ci: CIAgentMetadata = { phase: 1, milestone: "v1.0", status: "execute" };
const block = CommitBuilder.buildCiBlock(ci);
expect(block).toContain("phase: 1");
@@ -14,19 +14,19 @@ describe("CommitBuilder", () => {
});
it("builds ci block with project", () => {
const ci: CiMetadata = { phase: 1, milestone: "v1.0", status: "execute", project: "task-api" };
const ci: CIAgentMetadata = { phase: 1, milestone: "v1.0", status: "execute", project: "task-api" };
const block = CommitBuilder.buildCiBlock(ci);
expect(block).toContain("project: task-api");
});
it("builds ci block without project when not set", () => {
const ci: CiMetadata = { phase: 1, milestone: "v1.0", status: "execute" };
const ci: CIAgentMetadata = { phase: 1, milestone: "v1.0", status: "execute" };
const block = CommitBuilder.buildCiBlock(ci);
expect(block).not.toContain("project:");
});
it("builds ci block with decisions", () => {
const ci: CiMetadata = {
const ci: CIAgentMetadata = {
phase: 1,
milestone: "v1.0",
status: "execute",
@@ -49,7 +49,7 @@ describe("CommitBuilder", () => {
});
it("builds ci block with lessons", () => {
const ci: CiMetadata = {
const ci: CIAgentMetadata = {
phase: 1,
milestone: "v1.0",
status: "complete",
@@ -63,7 +63,7 @@ describe("CommitBuilder", () => {
});
it("builds ci block with compound", () => {
const ci: CiMetadata = {
const ci: CIAgentMetadata = {
phase: 1,
milestone: "v1.0",
status: "complete",
@@ -82,7 +82,7 @@ describe("CommitBuilder", () => {
});
it("builds ci block with escalations", () => {
const ci: CiMetadata = {
const ci: CIAgentMetadata = {
phase: 3,
milestone: "v1.0",
status: "execute",
@@ -103,7 +103,7 @@ describe("CommitBuilder", () => {
});
it("builds ci block with requirements", () => {
const ci: CiMetadata = {
const ci: CIAgentMetadata = {
phase: 1,
milestone: "v1.0",
status: "complete",
@@ -122,12 +122,12 @@ describe("CommitBuilder", () => {
describe("round-trip: build then parse", () => {
it("round-trips a simple ci block", () => {
const ci: CiMetadata = { phase: 1, milestone: "v1.0", status: "execute" };
const ci: CIAgentMetadata = { phase: 1, milestone: "v1.0", status: "execute" };
const block = CommitBuilder.buildCiBlock(ci);
const fullMessage = `feat(P01): test\n\n---ci---\n${block}\n---/ci---\n\nBody text`;
const extracted = extractCiBlock(fullMessage)!;
const parsed = parseCiBlock(extracted)!;
const extracted = extractCIAgentBlock(fullMessage)!;
const parsed = parseCIAgentBlock(extracted)!;
expect(parsed.phase).toBe(1);
expect(parsed.milestone).toBe("v1.0");
@@ -135,7 +135,7 @@ describe("CommitBuilder", () => {
});
it("round-trips decisions", () => {
const ci: CiMetadata = {
const ci: CIAgentMetadata = {
phase: 1,
milestone: "v1.0",
status: "execute",
@@ -152,8 +152,8 @@ describe("CommitBuilder", () => {
const block = CommitBuilder.buildCiBlock(ci);
const fullMessage = `feat(P01): test\n\n---ci---\n${block}\n---/ci---`;
const extracted = extractCiBlock(fullMessage)!;
const parsed = parseCiBlock(extracted)!;
const extracted = extractCIAgentBlock(fullMessage)!;
const parsed = parseCIAgentBlock(extracted)!;
expect(parsed.decisions).toHaveLength(1);
expect(parsed.decisions![0].id).toBe("D-001");
@@ -163,7 +163,7 @@ describe("CommitBuilder", () => {
});
it("round-trips compound with lessons", () => {
const ci: CiMetadata = {
const ci: CIAgentMetadata = {
phase: 2,
milestone: "v1.0",
status: "complete",
@@ -177,8 +177,8 @@ describe("CommitBuilder", () => {
const block = CommitBuilder.buildCiBlock(ci);
const fullMessage = `compound(P02): test\n\n---ci---\n${block}\n---/ci---`;
const extracted = extractCiBlock(fullMessage)!;
const parsed = parseCiBlock(extracted)!;
const extracted = extractCIAgentBlock(fullMessage)!;
const parsed = parseCIAgentBlock(extracted)!;
expect(parsed.compound!.category).toBe("auth");
expect(parsed.compound!.problem).toBe("Token replay attacks");
@@ -186,11 +186,11 @@ describe("CommitBuilder", () => {
});
it("round-trips project field", () => {
const ci: CiMetadata = { phase: 1, milestone: "v1.0", status: "execute", project: "task-api" };
const ci: CIAgentMetadata = { phase: 1, milestone: "v1.0", status: "execute", project: "task-api" };
const block = CommitBuilder.buildCiBlock(ci);
const fullMessage = `feat(task-api/P01): test\n\n---ci---\n${block}\n---/ci---`;
const extracted = extractCiBlock(fullMessage)!;
const parsed = parseCiBlock(extracted)!;
const extracted = extractCIAgentBlock(fullMessage)!;
const parsed = parseCIAgentBlock(extracted)!;
expect(parsed.project).toBe("task-api");
});