init: llm-wiki-haness 하네스 설계
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "ca-skeleton-frontend/a11y-report.schema.json",
|
||||
"title": "artifacts/tests/a11y.json",
|
||||
"description": "pnpm test:a11y 산출물. accessibility-baseline 이 생산하고 test-taxonomy 가 FE-GATE-009 blocking 판정에 소비한다. impact 어휘는 axe-core 의 4단계를 그대로 쓴다(minor/moderate/serious/critical).",
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"required": ["ranAt", "routes", "blockingCount", "nonBlockingCount"],
|
||||
"properties": {
|
||||
"ranAt": { "type": "string", "format": "date-time" },
|
||||
"routes": {
|
||||
"type": "array",
|
||||
"description": "측정 대상은 sample route 다(FE-NFR-009 context). 제품 route 가 아니다.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["routeId", "violations"],
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"routeId": { "type": "string" },
|
||||
"violations": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["ruleId", "impact", "nodeCount"],
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"ruleId": { "type": "string" },
|
||||
"impact": { "enum": ["minor", "moderate", "serious", "critical"] },
|
||||
"nodeCount": { "type": "integer", "minimum": 1 },
|
||||
"helpUrl": { "type": "string" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"blockingCount": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"description": "impact 가 serious 또는 critical 인 violation 수. 0 이 아니면 FE-GATE-009 FAIL."
|
||||
},
|
||||
"nonBlockingCount": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"description": "impact 가 moderate 또는 minor 인 violation 수. report-only backlog."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "ca-skeleton-frontend/build-manifest.schema.json",
|
||||
"title": "artifacts/release/build-manifest.json",
|
||||
"description": "pnpm build 산출물. 세 branch 가 각각 다른 필드 집합을 제안하던 것을 합집합으로 확정한다 — bootstrap(FE-NFR-C04 build context), build-bundle(SLSA provenance), release-cache(release coherence 입력). 필드 추가·rename 은 Schema Owner 단독 결정이며 소비 branch 는 imports pin 으로 따라온다.",
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"required": ["buildId", "commit", "builtAt", "buildContext", "assetManifestHash"],
|
||||
"properties": {
|
||||
"buildId": {
|
||||
"type": "string",
|
||||
"description": "release 식별자. build-bundle D7 provenance 최소선."
|
||||
},
|
||||
"commit": {
|
||||
"type": "string",
|
||||
"description": "빌드 대상 commit sha. build-bundle D7."
|
||||
},
|
||||
"builtAt": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"description": "빌드 완료 시각(UTC ISO-8601)."
|
||||
},
|
||||
"buildContext": {
|
||||
"type": "object",
|
||||
"description": "FE-NFR-C04. hub §14.1 'context 가 없는 숫자는 evidence 로 인정하지 않는다' 를 만족시키는 최소 build context. bootstrap 이 제안한 nodeVersion/pnpmVersion/runnerImage 를 한 객체로 묶었다.",
|
||||
"required": ["nodeVersion", "packageManagerVersion", "runnerImage"],
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"nodeVersion": { "type": "string" },
|
||||
"packageManagerVersion": { "type": "string" },
|
||||
"runnerImage": { "type": "string" }
|
||||
}
|
||||
},
|
||||
"assetManifestHash": {
|
||||
"type": "string",
|
||||
"description": "hashed asset set 의 집계 해시. release-cache 가 release coherence 판정 입력으로 소비한다."
|
||||
},
|
||||
"assets": {
|
||||
"type": "array",
|
||||
"description": "산출된 hashed static asset 목록.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["path", "contentHash", "bytes"],
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"path": { "type": "string" },
|
||||
"contentHash": { "type": "string" },
|
||||
"bytes": { "type": "integer", "minimum": 0 }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"$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 }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "ca-skeleton-frontend/release-verification.schema.json",
|
||||
"title": "artifacts/release/verification.json",
|
||||
"description": "pnpm verify:release 산출물. release-cache 가 생산하고 compat-governance 가 version tuple 호환 판정에 소비한다. FE-GATE-015 의 'mismatch detected / coherent set passes' 판정 근거.",
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"required": ["checkedAt", "activeReleaseId", "releaseTuple", "coherent"],
|
||||
"properties": {
|
||||
"checkedAt": { "type": "string", "format": "date-time" },
|
||||
"activeReleaseId": {
|
||||
"type": "string",
|
||||
"description": "현재 활성 release. hub §11.1 telemetry allowlist 의 active_release_id 와 같은 값이지만, telemetry attribute 명명(snake_case)과 artifact 필드 명명(camelCase)은 별개 규약이다."
|
||||
},
|
||||
"releaseTuple": {
|
||||
"type": "object",
|
||||
"description": "coherence 판정 대상 조합. 하나라도 서로 다른 release 를 가리키면 DEPLOY_MISMATCH 다.",
|
||||
"required": ["htmlReleaseId", "assetManifestHash", "configVersion", "releaseManifestId"],
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"htmlReleaseId": { "type": "string" },
|
||||
"assetManifestHash": { "type": "string" },
|
||||
"configVersion": { "type": "string" },
|
||||
"releaseManifestId": { "type": "string" },
|
||||
"apiContractVersion": { "type": "string" }
|
||||
}
|
||||
},
|
||||
"coherent": {
|
||||
"type": "boolean",
|
||||
"description": "true 면 FE-GATE-015 PASS."
|
||||
},
|
||||
"mismatchKind": {
|
||||
"enum": ["DEPLOY_MISMATCH", "RELEASE_MANIFEST_FAILURE", "CONFIG_INCOMPATIBLE", null],
|
||||
"description": "coherent=false 일 때의 실패 종류. raw payload 는 담지 않는다."
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user