diff --git a/packages/core/src/evaluation/providers/targets.ts b/packages/core/src/evaluation/providers/targets.ts index c7a9b88aa..1e53f05cb 100644 --- a/packages/core/src/evaluation/providers/targets.ts +++ b/packages/core/src/evaluation/providers/targets.ts @@ -908,7 +908,6 @@ export type ResolvedTarget = * here automatically makes it valid in targets.yaml without a separate update. */ export const COMMON_TARGET_SETTINGS = [ - 'use_target', 'runtime', 'batch_requests', 'subagent_mode_allowed', diff --git a/packages/core/src/evaluation/validation/targets-validator.ts b/packages/core/src/evaluation/validation/targets-validator.ts index 5842d5d36..3a17ce05c 100644 --- a/packages/core/src/evaluation/validation/targets-validator.ts +++ b/packages/core/src/evaluation/validation/targets-validator.ts @@ -347,6 +347,7 @@ function validateUnknownSettings( 'env', 'grader_target', 'judge_target', + 'use_target', 'workers', '$schema', 'targets', @@ -695,17 +696,23 @@ export async function validateTargetsFile(filePath: string): Promise { + it('rejects use_target on authored target definitions', async () => { const filePath = path.join(tempDir, 'templated-use-target.yaml'); await writeFile( filePath, `targets: - id: default + provider: mock use_target: "{{ env.AGENT_TARGET }}" - id: grader use_target: "{{ env.GRADER_TARGET }}" @@ -424,34 +425,23 @@ targets: `, ); - const originalAgentTarget = process.env.AGENT_TARGET; - const originalGraderTarget = process.env.GRADER_TARGET; - Reflect.deleteProperty(process.env, 'AGENT_TARGET'); - Reflect.deleteProperty(process.env, 'GRADER_TARGET'); - - try { - const result = await validateTargetsFile(filePath); + const result = await validateTargetsFile(filePath); - expect(result.valid).toBe(true); - expect( - result.errors.some( - (error) => - error.severity === 'error' && - error.message.includes("Missing or invalid 'provider' field"), - ), - ).toBe(false); - } finally { - if (originalAgentTarget === undefined) { - Reflect.deleteProperty(process.env, 'AGENT_TARGET'); - } else { - process.env.AGENT_TARGET = originalAgentTarget; - } - if (originalGraderTarget === undefined) { - Reflect.deleteProperty(process.env, 'GRADER_TARGET'); - } else { - process.env.GRADER_TARGET = originalGraderTarget; - } - } + expect(result.valid).toBe(false); + expect(result.errors).toContainEqual( + expect.objectContaining({ + severity: 'error', + location: 'targets[0].use_target', + message: expect.stringContaining("'use_target' field has been removed"), + }), + ); + expect(result.errors).toContainEqual( + expect.objectContaining({ + severity: 'error', + location: 'targets[1].use_target', + message: expect.stringContaining("'use_target' field has been removed"), + }), + ); }); it('rejects legacy env interpolation in target YAML', async () => {