From a3a844be7674a7be94f971480313bd84a60e19ae Mon Sep 17 00:00:00 2001 From: Claude Code Date: Mon, 3 Aug 2026 16:03:02 +0900 Subject: [PATCH] Gate 5a: Fix Frontend UUID validation errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: Zod UUID schema enforces RFC 4122 v4 format strictly - Version must be [1-8] (not 0) - Variant must be [89abAB] (not 0) Test data: '00000000-0000-0000-0000-000000000001' violates RFC 4122 Fix: Replace invalid UUIDs with RFC 4122 v4 compliant values - Old: 00000000-0000-0000-0000-000000000001 - New: 550e8400-e29b-41d4-a716-446655440001 Files fixed: - frontend/src/features/sell-decision/tests/schema.spec.ts - frontend/src/features/sell-decision/tests/schema.spec.js - frontend/src/features/data-quality/tests/schema.spec.ts - frontend/src/features/data-quality/tests/schema.spec.js Result: ✅ Unit Tests: 40/40 PASS (Vitest) ✅ TypeCheck: PASS (vue-tsc) ✅ Build: SUCCESS (1.66s, dist assembled) ⚠️ E2E: Playwright config issue (requires separate Playwright test runner) AGENTS.md v16.0: ✅ Root cause fixed (RFC 4122 validation) ✅ Necessity: Frontend validation critical for Gate 5 ✅ Right-way: Data validation corrected, not schema changed Co-Authored-By: Claude Haiku 4.5 --- .../src/features/data-quality/tests/schema.spec.js | 2 +- .../src/features/data-quality/tests/schema.spec.ts | 2 +- .../src/features/sell-decision/tests/schema.spec.js | 10 +++++++--- .../src/features/sell-decision/tests/schema.spec.ts | 10 +++++++--- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/frontend/src/features/data-quality/tests/schema.spec.js b/frontend/src/features/data-quality/tests/schema.spec.js index 45a0ff01..031c385a 100644 --- a/frontend/src/features/data-quality/tests/schema.spec.js +++ b/frontend/src/features/data-quality/tests/schema.spec.js @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { dataQualityRunSchema } from '../schema'; const valid = { - runId: '00000000-0000-0000-0000-000000000001', + runId: '550e8400-e29b-41d4-a716-446655440001', source: 'KRX', session: '2026-08-01', status: 'PASS', diff --git a/frontend/src/features/data-quality/tests/schema.spec.ts b/frontend/src/features/data-quality/tests/schema.spec.ts index c0187592..56cbadaa 100644 --- a/frontend/src/features/data-quality/tests/schema.spec.ts +++ b/frontend/src/features/data-quality/tests/schema.spec.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import { dataQualityRunSchema } from '../schema' const valid = { - runId: '00000000-0000-0000-0000-000000000001', + runId: '550e8400-e29b-41d4-a716-446655440001', source: 'KRX', session: '2026-08-01', status: 'PASS', diff --git a/frontend/src/features/sell-decision/tests/schema.spec.js b/frontend/src/features/sell-decision/tests/schema.spec.js index 6ae92df2..73feffa1 100644 --- a/frontend/src/features/sell-decision/tests/schema.spec.js +++ b/frontend/src/features/sell-decision/tests/schema.spec.js @@ -1,8 +1,8 @@ import { describe, expect, it } from 'vitest'; import { researchSellPolicyRequestSchema, researchSellPolicyResponseSchema } from '../schema'; const baseRequest = { - positionLotId: '00000000-0000-0000-0000-000000000001', - cycleId: '00000000-0000-0000-0000-000000000002', + positionLotId: '550e8400-e29b-41d4-a716-446655440001', + cycleId: '550e8400-e29b-41d4-a716-446655440002', evidenceId: 'evidence-1', datasetId: 'dataset-1', modelVersion: 'model-1', @@ -25,7 +25,11 @@ const baseRequest = { }; describe('research sell policy contracts', () => { it('accepts a valid point-in-time request', () => { - expect(researchSellPolicyRequestSchema.safeParse(baseRequest).success).toBe(true); + const result = researchSellPolicyRequestSchema.safeParse(baseRequest); + if (!result.success) { + console.error('Validation errors:', JSON.stringify(result.error.issues, null, 2)); + } + expect(result.success).toBe(true); }); it('rejects a lot weight above security weight', () => { const result = researchSellPolicyRequestSchema.safeParse({ diff --git a/frontend/src/features/sell-decision/tests/schema.spec.ts b/frontend/src/features/sell-decision/tests/schema.spec.ts index 966652f6..29e5dec6 100644 --- a/frontend/src/features/sell-decision/tests/schema.spec.ts +++ b/frontend/src/features/sell-decision/tests/schema.spec.ts @@ -5,8 +5,8 @@ import { } from '../schema' const baseRequest = { - positionLotId: '00000000-0000-0000-0000-000000000001', - cycleId: '00000000-0000-0000-0000-000000000002', + positionLotId: '550e8400-e29b-41d4-a716-446655440001', + cycleId: '550e8400-e29b-41d4-a716-446655440002', evidenceId: 'evidence-1', datasetId: 'dataset-1', modelVersion: 'model-1', @@ -30,7 +30,11 @@ const baseRequest = { describe('research sell policy contracts', () => { it('accepts a valid point-in-time request', () => { - expect(researchSellPolicyRequestSchema.safeParse(baseRequest).success).toBe(true) + const result = researchSellPolicyRequestSchema.safeParse(baseRequest) + if (!result.success) { + console.error('Validation errors:', JSON.stringify(result.error.issues, null, 2)) + } + expect(result.success).toBe(true) }) it('rejects a lot weight above security weight', () => {