Files
AgentCompany/tests/unit/task-completion.test.ts
T
ZacharyZhang-NY b772e1c758 Build the current workspace snapshot on native CI runners
This branch snapshots the in-progress desktop workspace so GitHub-hosted Windows and Linux runners can package the same source tree that already passes local verification on macOS.

Constraint: Local Apple Silicon Docker/Wine packaging crashes before Windows artifacts are produced
Rejected: Publish from the incomplete base repo state | remote typecheck failed because current source additions were missing
Confidence: medium
Scope-risk: broad
Directive: Treat this branch as a build snapshot only; do not merge it without reviewing the unrelated workspace changes it contains
Tested: local typecheck, lint, workspace typecheck, unit tests, integration tests, e2e smoke, macOS signed release upload
Not-tested: Native Windows/Linux artifacts before this CI run
2026-04-04 03:28:14 -04:00

195 lines
6.1 KiB
TypeScript

import { describe, expect, it } from "vitest";
/**
* Tests for non-code task deliverable enforcement in automation-service.ts.
*
* When a run completes successfully on a non-code task (research, content),
* the system checks whether the agent produced a tangible deliverable
* (knowledge entry, document, or substantial comment). If not, the task
* stays in_progress and the manager is notified.
*/
type TaskType = "code" | "research" | "content" | "management" | "general";
interface DeliverableCheckInput {
taskType: TaskType;
hasKnowledgeEntry: boolean;
hasDocument: boolean;
hasSubstantialComment: boolean;
}
/**
* Standalone deliverable-check logic extracted for testability.
* Mirrors the checkRunProducedDeliverable function inside automation-service.ts.
*/
function needsDeliverableCheck(taskType: TaskType): boolean {
return taskType === "research" || taskType === "content";
}
function hasDeliverable(input: DeliverableCheckInput): boolean {
if (!needsDeliverableCheck(input.taskType)) {
// Code/management/general tasks don't require deliverable check
return true;
}
return input.hasKnowledgeEntry || input.hasDocument || input.hasSubstantialComment;
}
/**
* Determines the next status after a successful run.
* Returns { nextStatus, comment } for how the task should be advanced.
*/
function determinePostRunStatus(input: DeliverableCheckInput): {
nextStatus: "in_review" | "in_progress";
comment: string;
} {
if (!needsDeliverableCheck(input.taskType)) {
return {
nextStatus: "in_review",
comment: "Run completed successfully. Awaiting review.",
};
}
if (hasDeliverable(input)) {
return {
nextStatus: "in_review",
comment: "Run completed with deliverable. Awaiting review.",
};
}
return {
nextStatus: "in_progress",
comment: `${input.taskType} task run completed but no deliverable artifact was detected. Flagging for manager review.`,
};
}
describe("non-code task deliverable enforcement", () => {
describe("needsDeliverableCheck", () => {
it("returns false for code tasks", () => {
expect(needsDeliverableCheck("code")).toBe(false);
});
it("returns true for research tasks", () => {
expect(needsDeliverableCheck("research")).toBe(true);
});
it("returns true for content tasks", () => {
expect(needsDeliverableCheck("content")).toBe(true);
});
it("returns false for management tasks", () => {
expect(needsDeliverableCheck("management")).toBe(false);
});
it("returns false for general tasks", () => {
expect(needsDeliverableCheck("general")).toBe(false);
});
});
describe("determinePostRunStatus", () => {
it("advances code tasks to in_review unconditionally", () => {
const result = determinePostRunStatus({
taskType: "code",
hasKnowledgeEntry: false,
hasDocument: false,
hasSubstantialComment: false,
});
expect(result.nextStatus).toBe("in_review");
expect(result.comment).toContain("Awaiting review");
});
it("advances general tasks to in_review unconditionally", () => {
const result = determinePostRunStatus({
taskType: "general",
hasKnowledgeEntry: false,
hasDocument: false,
hasSubstantialComment: false,
});
expect(result.nextStatus).toBe("in_review");
});
it("advances management tasks to in_review unconditionally", () => {
const result = determinePostRunStatus({
taskType: "management",
hasKnowledgeEntry: false,
hasDocument: false,
hasSubstantialComment: false,
});
expect(result.nextStatus).toBe("in_review");
});
it("keeps research task in_progress when no deliverable exists", () => {
const result = determinePostRunStatus({
taskType: "research",
hasKnowledgeEntry: false,
hasDocument: false,
hasSubstantialComment: false,
});
expect(result.nextStatus).toBe("in_progress");
expect(result.comment).toContain("no deliverable artifact");
expect(result.comment).toContain("manager review");
});
it("advances research task to in_review when knowledge entry exists", () => {
const result = determinePostRunStatus({
taskType: "research",
hasKnowledgeEntry: true,
hasDocument: false,
hasSubstantialComment: false,
});
expect(result.nextStatus).toBe("in_review");
expect(result.comment).toContain("deliverable");
});
it("advances research task to in_review when document exists", () => {
const result = determinePostRunStatus({
taskType: "research",
hasKnowledgeEntry: false,
hasDocument: true,
hasSubstantialComment: false,
});
expect(result.nextStatus).toBe("in_review");
});
it("advances research task to in_review when substantial comment exists", () => {
const result = determinePostRunStatus({
taskType: "research",
hasKnowledgeEntry: false,
hasDocument: false,
hasSubstantialComment: true,
});
expect(result.nextStatus).toBe("in_review");
});
it("keeps content task in_progress when no deliverable exists", () => {
const result = determinePostRunStatus({
taskType: "content",
hasKnowledgeEntry: false,
hasDocument: false,
hasSubstantialComment: false,
});
expect(result.nextStatus).toBe("in_progress");
expect(result.comment).toContain("no deliverable artifact");
});
it("advances content task to in_review when document exists", () => {
const result = determinePostRunStatus({
taskType: "content",
hasKnowledgeEntry: false,
hasDocument: true,
hasSubstantialComment: false,
});
expect(result.nextStatus).toBe("in_review");
});
it("advances content task when any deliverable exists", () => {
const result = determinePostRunStatus({
taskType: "content",
hasKnowledgeEntry: true,
hasDocument: false,
hasSubstantialComment: false,
});
expect(result.nextStatus).toBe("in_review");
});
});
});