{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "ca-skeleton-frontend/bundle-report.schema.json", "title": "artifacts/performance/bundle.json", "description": "pnpm check:bundle 산출물. build-bundle 이 생산하고 web-vitals 가 FE-NFR-001/FE-NFR-002 판정에 소비한다. 두 branch 가 서로 다른 필드 명명(camelCase vs snake_case)을 제안하던 co-owned 스키마를 이 파일 하나로 확정한다.", "type": "object", "additionalProperties": true, "required": ["context", "buildId", "commit", "runner", "initialJsGzipBytes", "chunks"], "properties": { "context": { "type": "string", "const": "FE-NFR-C04", "description": "측정 context ID. bundle 측정은 build context 에서만 유효하다." }, "buildId": { "type": "string" }, "commit": { "type": "string" }, "runner": { "type": "object", "description": "FE-NFR-C04 재현 메타데이터. build-manifest.schema.json 의 buildContext 와 같은 값을 담는다.", "required": ["nodeVersion", "packageManagerVersion", "runnerImage"], "additionalProperties": true, "properties": { "nodeVersion": { "type": "string" }, "packageManagerVersion": { "type": "string" }, "runnerImage": { "type": "string" } } }, "initialJsGzipBytes": { "type": "integer", "minimum": 0, "description": "initial JS(app) gzip 바이트. FE-NFR-001 판정 입력." }, "chunks": { "type": "array", "description": "chunk 별 gzip 크기. FE-NFR-002 판정 입력.", "items": { "type": "object", "required": ["chunkId", "kind", "gzipBytes"], "additionalProperties": true, "properties": { "chunkId": { "type": "string" }, "kind": { "enum": ["initial", "lazy"] }, "gzipBytes": { "type": "integer", "minimum": 0 } } } } } }