test(engine): complete agent-session-helpers thinking-level resolver set + pi mocks (restart/mcp-pr/triage)

This commit is contained in:
gsxdsm
2026-07-10 22:31:54 -07:00
parent 86aad86f4e
commit 1c3eceec5b
4 changed files with 67 additions and 11 deletions

View File

@@ -16,6 +16,12 @@ vi.mock("../agent-session-helpers.js", () => ({
provider: settings.defaultProvider,
modelId: settings.defaultModelId,
})),
// FNXC:EngineTestDrift 2026-07-11-22:30:
// pr-response-run-ops resolves the merger lane thinking level via
// resolveMergerThinkingLevel (Settings-ThinkingLevel precedence, 2026-07-10).
// The mock must surface it or every PR-response run throws on the missing
// export. Neutral undefined return — no test asserts on thinking level.
resolveMergerThinkingLevel: vi.fn(() => undefined),
}));
vi.mock("../pi.js", () => ({

View File

@@ -132,6 +132,20 @@ vi.mock("../agent-session-helpers.js", async () => {
}
return { provider: undefined, modelId: undefined };
},
// FNXC:EngineTestDrift 2026-07-11-22:30:
// agent-session-helpers gained phase/lane thinking-level + fallback resolvers
// (Settings-ThinkingLevel precedence, 2026-07-10) and an implicit planning
// fallback model resolver. The exercised executor + triage paths import them;
// surface the full set so the next export doesn't re-break this mock.
resolveExecutorThinkingLevel: vi.fn(() => undefined),
resolveExecutorFallbackThinkingLevel: vi.fn(() => undefined),
resolvePlanningThinkingLevel: vi.fn(() => undefined),
resolvePlanningFallbackThinkingLevel: vi.fn(() => undefined),
resolveValidatorThinkingLevel: vi.fn(() => undefined),
resolveValidatorFallbackThinkingLevel: vi.fn(() => undefined),
resolveMergerThinkingLevel: vi.fn(() => undefined),
resolveMergerFallbackThinkingLevel: vi.fn(() => undefined),
resolveImplicitPlanningFallbackModel: vi.fn(() => ({ provider: undefined, modelId: undefined })),
};
});
vi.mock("node:child_process", () => {

View File

@@ -16,6 +16,20 @@ vi.mock("../agent-session-helpers.js", () => ({
createResolvedAgentSession: mockCreateResolvedAgentSession,
extractRuntimeHint: vi.fn(),
resolvePlanningSessionModel: vi.fn().mockReturnValue({ provider: "mock", modelId: "mock-model" }),
// FNXC:EngineTestDrift 2026-07-11-22:30:
// triage.ts planning imports resolvePlanningThinkingLevel +
// resolveImplicitPlanningFallbackModel (Settings-ThinkingLevel precedence +
// implicit fallback model, 2026-07-10). Surface the full resolver set so the
// next export doesn't re-break specifyTask on a missing mock member.
resolveExecutorThinkingLevel: vi.fn(() => undefined),
resolveExecutorFallbackThinkingLevel: vi.fn(() => undefined),
resolvePlanningThinkingLevel: vi.fn(() => undefined),
resolvePlanningFallbackThinkingLevel: vi.fn(() => undefined),
resolveValidatorThinkingLevel: vi.fn(() => undefined),
resolveValidatorFallbackThinkingLevel: vi.fn(() => undefined),
resolveMergerThinkingLevel: vi.fn(() => undefined),
resolveMergerFallbackThinkingLevel: vi.fn(() => undefined),
resolveImplicitPlanningFallbackModel: vi.fn(() => ({ provider: undefined, modelId: undefined })),
}));
vi.mock("../pi.js", () => {

View File

@@ -15,19 +15,41 @@ vi.mock("../agent-session-helpers.js", () => ({
createResolvedAgentSession: mockCreateResolvedAgentSession,
extractRuntimeHint: vi.fn(),
resolvePlanningSessionModel: vi.fn().mockReturnValue({ provider: "mock", modelId: "mock-model" }),
// FNXC:EngineTestDrift 2026-07-11-22:30:
// triage.ts planning imports resolvePlanningThinkingLevel +
// resolveImplicitPlanningFallbackModel (Settings-ThinkingLevel precedence +
// implicit fallback model, 2026-07-10). Surface the full resolver set so the
// next export doesn't re-break specifyTask on a missing mock member.
resolveExecutorThinkingLevel: vi.fn(() => undefined),
resolveExecutorFallbackThinkingLevel: vi.fn(() => undefined),
resolvePlanningThinkingLevel: vi.fn(() => undefined),
resolvePlanningFallbackThinkingLevel: vi.fn(() => undefined),
resolveValidatorThinkingLevel: vi.fn(() => undefined),
resolveValidatorFallbackThinkingLevel: vi.fn(() => undefined),
resolveMergerThinkingLevel: vi.fn(() => undefined),
resolveMergerFallbackThinkingLevel: vi.fn(() => undefined),
resolveImplicitPlanningFallbackModel: vi.fn(() => ({ provider: undefined, modelId: undefined })),
}));
vi.mock("../pi.js", () => ({
describeModel: vi.fn().mockReturnValue("mock-model"),
promptWithFallback: mockPromptWithFallback,
// FNXC:TriageTests 2026-07-02-07:40:
// triage.ts specifyTask now calls formatModelMarkerDetails (from pi.js) to
// build the model-marker log line after the agent session resolves. The mock
// must expose the export so the stuck-requeue planning path can reach
// finalization (moveTask todo / needs-replan) instead of throwing on a
// missing mock member.
formatModelMarkerDetails: vi.fn((model: string) => model),
}));
vi.mock("../pi.js", () => {
// FNXC:EngineTestDrift 2026-07-11-22:30:
// triage.ts specifyTask catch guards `err instanceof ModelFallbackExhaustedError`
// (FN-7559). The pi mock must expose the class so the stuck-requeue planning
// path can finalize instead of throwing on a missing mock member.
class ModelFallbackExhaustedError extends Error {}
return {
describeModel: vi.fn().mockReturnValue("mock-model"),
promptWithFallback: mockPromptWithFallback,
// FNXC:TriageTests 2026-07-02-07:40:
// triage.ts specifyTask now calls formatModelMarkerDetails (from pi.js) to
// build the model-marker log line after the agent session resolves. The mock
// must expose the export so the stuck-requeue planning path can reach
// finalization (moveTask todo / needs-replan) instead of throwing on a
// missing mock member.
formatModelMarkerDetails: vi.fn((model: string) => model),
ModelFallbackExhaustedError,
};
});
function createTask(overrides: Partial<Task> = {}): Task {
return {