fix(schema): enforce 4-digit ids

This commit is contained in:
chahinebrini 2026-06-24 23:29:32 +02:00
parent c00ec16c84
commit 2b5696de82
2 changed files with 15 additions and 3 deletions

View File

@ -8,7 +8,7 @@ export const Role = z.enum(['architect', 'implementer', 'reviewer', 'tester']);
export const DelegationMode = z.enum(['manual', 'suggest', 'auto']);
export const TaskSchema = z.object({
id: z.string().regex(/^TSK-\d+$/),
id: z.string().regex(/^TSK-\d{4}$/),
title: z.string().min(1),
description: z.string().default(''),
status: TaskStatus,
@ -24,7 +24,7 @@ export const TaskSchema = z.object({
});
export const HandoffSchema = z.object({
id: z.string().regex(/^HOF-\d+$/),
id: z.string().regex(/^HOF-\d{4}$/),
fromRole: z.string().min(1),
toRole: z.string().min(1),
fromAgent: z.string().optional(),
@ -39,7 +39,7 @@ export const HandoffSchema = z.object({
});
export const DecisionSchema = z.object({
id: z.string().regex(/^DEC-\d+$/),
id: z.string().regex(/^DEC-\d{4}$/),
title: z.string().min(1),
status: DecisionStatus.default('accepted'),
context: z.string().default(''),

View File

@ -25,4 +25,16 @@ describe('schemas', () => {
});
expect(result.success).toBe(false);
});
it('rejects a task id without exactly 4 digits', () => {
const result = TaskSchema.safeParse({
id: 'TSK-1',
title: 'Implement DNS cache',
description: '',
status: 'open',
createdAt: '2026-06-24T10:00:00Z',
updatedAt: '2026-06-24T10:00:00Z',
});
expect(result.success).toBe(false);
});
});