init: llm-wiki-haness 하네스 설계

This commit is contained in:
DongHyeonka
2026-07-24 14:21:35 +09:00
parent 42bf3db4fd
commit 6c53ded9cb
2436 changed files with 194486 additions and 1 deletions
@@ -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 는 담지 않는다."
}
}
}