Compare commits

...

2 Commits

Author SHA1 Message Date
Pablo LION 557c77d42a
Merge e835a78ba7 into b815410904 2026-02-13 08:41:40 -06:00
Pablo LION e835a78ba7 fix: enforce array type for agent principles in schema
Remove string option from principles union type. The template defines
principles as an array (principles: []) and all agent files should use
array format. Block scalar strings that look like lists are a common
source of type confusion.

Adds test fixture for string-format principles (now invalid).

Closes #1594

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:37:47 +01:00
2 changed files with 29 additions and 6 deletions

View File

@ -0,0 +1,26 @@
# Test: Principles as block scalar string instead of array
# Expected: FAIL
# Error path: agent.persona.principles
# Error expected: array
# Error received: string
agent:
metadata:
id: string-principles
name: String Principles
title: String Principles
icon:
hasSidecar: false
persona:
role: Test agent
identity: Test identity
communication_style: Test style
principles: |
- This is a string, not an array
- Each line is part of one string
menu:
- trigger: help
description: Show help
action: display_help

View File

@ -241,12 +241,9 @@ function buildPersonaSchema() {
role: createNonEmptyString('agent.persona.role'),
identity: createNonEmptyString('agent.persona.identity'),
communication_style: createNonEmptyString('agent.persona.communication_style'),
principles: z.union([
createNonEmptyString('agent.persona.principles'),
z
.array(createNonEmptyString('agent.persona.principles[]'))
.min(1, { message: 'agent.persona.principles must include at least one entry' }),
]),
principles: z
.array(createNonEmptyString('agent.persona.principles[]'))
.min(1, { message: 'agent.persona.principles must include at least one entry' }),
})
.strict();
}