Publish curated projectbrain source from 88fab8df1542019289e947f092c2b387e0825c60

This commit is contained in:
Public Source Publisher committed 2026-10-04 15:47:50 +00:00
1 parent 48e72d07e0
commit eca2891b07
45 files changed
+2697 -328

No files matched your search

+26 -1
View File
@@ -3,7 +3,7 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
import { loadEnv } from "../src/config/env.js";
import { compareAutoModeProjectRows, createProjectBrainMcpServer } from "../src/mcp/autonomyServer.js";
import { autonomyRetryDelayMinutes, canResumeAutonomyLease, classifyAutonomyBlocker, enqueueAutonomyTaskInState, evaluateAutonomyRunBudget, isAutonomyLeaseOwner, normalizeAutonomyState, parseRoadmapMarkdown, releaseActiveAutonomyLease, retryAutonomyBlockerIfDue } from "../src/repositories/autonomyRepository.js";
import { autonomyRetryDelayMinutes, canResumeAutonomyLease, classifyAutonomyBlocker, enqueueAutonomyTaskInState, evaluateAutonomyRunBudget, isAutonomyLeaseOwner, normalizeAutonomyState, parseRoadmapMarkdown, releaseActiveAutonomyLease, reorderAutonomyQueueInState, resetAutonomyQueueOrderInState, retryAutonomyBlockerIfDue } from "../src/repositories/autonomyRepository.js";
import { autonomyHeartbeatSlotId, compactAutonomyState, resolveAutonomyHeartbeat, summarizeAutonomyProject } from "../src/services/autonomyRuntime.js";
const env = loadEnv({
@@ -99,6 +99,25 @@ describe("Auto Mode state safety", () => {
expect(queued.state.roadmap?.phases[1].items[1].title).toBe("Lopend werk");
});
it("persists an exact owner-defined order for pending executable work only", () => {
const roadmap = parseRoadmapMarkdown("## Fase\n- [ ] A\n- [ ] B\n- [ ] C");
roadmap.phases[0].items[2].scope = "future";
const current = normalizeAutonomyState({ enabled: true, roadmap }, "owner");
const [a, b] = current.roadmap!.phases[0].items;
const reordered = reorderAutonomyQueueInState(current, [b.id, a.id], "owner");
expect(reordered.roadmap?.phases[0].items[0].manualOrder).toBe(1);
expect(reordered.roadmap?.phases[0].items[1].manualOrder).toBe(0);
expect(reordered.roadmap?.phases[0].items[2].manualOrder).toBeUndefined();
expect(reordered.events.at(-1)?.type).toBe("autonomy.queue.reordered");
expect(() => reorderAutonomyQueueInState(current, [a.id], "owner")).toThrow("AUTO_MODE_QUEUE_CHANGED");
const automatic = resetAutonomyQueueOrderInState(reordered, "owner");
expect(automatic.roadmap?.phases.flatMap((phase) => phase.items).every((item) => item.manualOrder === undefined)).toBe(true);
expect(automatic.events.at(-1)?.type).toBe("autonomy.queue.order_reset");
});
it("derives the public status from durable facts instead of stale stored copy", () => {
expect(normalizeAutonomyState({ enabled: true, status: "running" }).status).toBe("waiting_roadmap");
expect(normalizeAutonomyState({}).profile).toBe("normal");
@@ -305,8 +324,11 @@ describe("Auto Mode MCP surface", () => {
"list_auto_mode_projects",
"heartbeat_auto_executor",
"get_auto_mode_state",
"get_runner_claim_health",
"configure_auto_mode",
"import_auto_roadmap",
"reorder_auto_queue",
"reset_auto_queue_order",
"resume_auto_mode",
"claim_auto_work",
"report_auto_work",
@@ -314,6 +336,9 @@ describe("Auto Mode MCP surface", () => {
expect(advertisedTools.find((tool) => tool.name === "claim_auto_work")?.inputSchema).toMatchObject({
required: expect.arrayContaining(["project_id", "run_id"]),
});
expect(advertisedTools.find((tool) => tool.name === "reorder_auto_queue")?.inputSchema).toMatchObject({
required: expect.arrayContaining(["project_id", "item_ids"]),
});
expect(advertisedTools.find((tool) => tool.name === "configure_auto_mode")?.inputSchema).toMatchObject({
properties: expect.objectContaining({ max_work_items_per_run: expect.any(Object), max_run_minutes: expect.any(Object), max_recovery_minutes: expect.any(Object), pause_after_current: expect.any(Object), scheduling_policy: expect.any(Object) }),
});