chore: complete tech log product identity
@@ -3,7 +3,7 @@ name: frontend-quality-gates
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [develop]
|
||||
branches: [main]
|
||||
tags: ["v*"]
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 46 KiB |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://clean-architecture-frontend.local/schemas/dependency-inventory.schema.json",
|
||||
"$id": "https://tech-log-frontend.local/schemas/dependency-inventory.schema.json",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://clean-architecture-frontend.local/schemas/supply-chain-verification.schema.json",
|
||||
"$id": "https://tech-log-frontend.local/schemas/supply-chain-verification.schema.json",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"dependencyDiff": {
|
||||
|
||||
@@ -21,7 +21,7 @@ const ARTIFACT_SCHEMA_DEFINITIONS = Object.freeze([
|
||||
},
|
||||
{
|
||||
relativePath: "schemas/artifacts/dependency-inventory.schema.json",
|
||||
id: "https://clean-architecture-frontend.local/schemas/dependency-inventory.schema.json",
|
||||
id: "https://tech-log-frontend.local/schemas/dependency-inventory.schema.json",
|
||||
schema: dependencyInventoryArtifactSchema,
|
||||
},
|
||||
{
|
||||
@@ -31,7 +31,7 @@ const ARTIFACT_SCHEMA_DEFINITIONS = Object.freeze([
|
||||
},
|
||||
{
|
||||
relativePath: "schemas/artifacts/supply-chain-verification.schema.json",
|
||||
id: "https://clean-architecture-frontend.local/schemas/supply-chain-verification.schema.json",
|
||||
id: "https://tech-log-frontend.local/schemas/supply-chain-verification.schema.json",
|
||||
schema: supplyChainVerificationArtifactSchema,
|
||||
},
|
||||
] as const);
|
||||
|
||||
@@ -76,7 +76,7 @@ export function renderCiWorkflow(contract: CiGateContract): string {
|
||||
"",
|
||||
"on:",
|
||||
" push:",
|
||||
" branches: [develop]",
|
||||
" branches: [main]",
|
||||
' tags: ["v*"]',
|
||||
" pull_request:",
|
||||
" workflow_dispatch:",
|
||||
|
||||
@@ -270,7 +270,7 @@ const provenance = {
|
||||
],
|
||||
},
|
||||
runDetails: {
|
||||
builder: { id: "local:clean-architecture-frontend-template" },
|
||||
builder: { id: "local:tech-log-frontend" },
|
||||
metadata: { invocationId: "LOCAL_UNSIGNED" },
|
||||
},
|
||||
materials: {
|
||||
|
||||
@@ -304,7 +304,7 @@ export async function verifyLocalSupplyChainEvidence(
|
||||
}
|
||||
|
||||
export const LOCAL_EVIDENCE_VERIFIER_ID =
|
||||
"clean-architecture-frontend-template/local-evidence-verifier";
|
||||
"tech-log-frontend/local-evidence-verifier";
|
||||
export const LOCAL_EVIDENCE_VERIFIER_VERSION = "1";
|
||||
export {
|
||||
LOCAL_EVIDENCE_POLICY_INPUT_PATHS,
|
||||
|
||||
@@ -10,7 +10,7 @@ import {
|
||||
export const PROVIDER_FUTURE_SKEW_MS = 5 * 60 * 1_000;
|
||||
export const PROVIDER_MAX_LIFETIME_MS = 2 * 60 * 60 * 1_000;
|
||||
export const PROMOTION_VERIFIER_ID =
|
||||
"clean-architecture-frontend-template/promotion-verifier";
|
||||
"tech-log-frontend/promotion-verifier";
|
||||
export const PROMOTION_VERIFIER_VERSION = "3";
|
||||
|
||||
const sha256 = z.string().regex(/^[a-f0-9]{64}$/u);
|
||||
|
||||
@@ -3,7 +3,7 @@ import { INSTALLED_MESSAGE_CATALOGS } from "../../features/installed-feature-mes
|
||||
const PLATFORM_KO_MESSAGES = {
|
||||
"common.unavailable": "요청한 문구를 표시할 수 없습니다.",
|
||||
"common.processing": "처리 중…",
|
||||
"common.appName": "Frontend Skeleton",
|
||||
"common.appName": "Tech Log",
|
||||
"common.noDisplayValue": "표시 정보 없음",
|
||||
"action.retry": "다시 시도",
|
||||
"action.reauth": "로그인",
|
||||
@@ -41,7 +41,7 @@ const PLATFORM_KO_MESSAGES = {
|
||||
"shell.session.integrationFailed": "연동 필요",
|
||||
"shell.session.actionFailed": "세션 작업을 완료하지 못했습니다.",
|
||||
"route.APP_HOME.navigation": "홈",
|
||||
"route.APP_HOME.title": "Clean Architecture Frontend",
|
||||
"route.APP_HOME.title": "Tech Log",
|
||||
"route.EXAMPLES_PLATFORM.navigation": "플랫폼 구성",
|
||||
"route.EXAMPLES_PLATFORM.title": "플랫폼 구성",
|
||||
"route.EXAMPLES_UI.navigation": "UI 구성요소",
|
||||
@@ -158,7 +158,7 @@ export type MessageKey = keyof typeof KO_MESSAGES;
|
||||
const PLATFORM_EN_MESSAGES = {
|
||||
"common.unavailable": "This message is unavailable.",
|
||||
"common.processing": "Processing…",
|
||||
"common.appName": "Frontend Skeleton",
|
||||
"common.appName": "Tech Log",
|
||||
"common.noDisplayValue": "No display value",
|
||||
"action.retry": "Try again",
|
||||
"action.reauth": "Sign in",
|
||||
@@ -196,7 +196,7 @@ const PLATFORM_EN_MESSAGES = {
|
||||
"shell.session.integrationFailed": "Integration required",
|
||||
"shell.session.actionFailed": "The session action could not be completed.",
|
||||
"route.APP_HOME.navigation": "Home",
|
||||
"route.APP_HOME.title": "Clean Architecture Frontend",
|
||||
"route.APP_HOME.title": "Tech Log",
|
||||
"route.EXAMPLES_PLATFORM.navigation": "Platform composition",
|
||||
"route.EXAMPLES_PLATFORM.title": "Platform composition",
|
||||
"route.EXAMPLES_UI.navigation": "UI components",
|
||||
|
||||
@@ -40,7 +40,7 @@ export default function HomePage() {
|
||||
<section className="ui-page">
|
||||
<PageHeader
|
||||
eyebrow="프로젝트 시작점"
|
||||
title="Clean Architecture Frontend"
|
||||
title="Tech Log"
|
||||
description="도메인을 추가하기 전에 실행 구조와 범용 사용자 경험을 확인할 수 있는 중립적인 스켈레톤입니다."
|
||||
/>
|
||||
<div className="readiness-grid" aria-label="구현 준비 상태">
|
||||
|
||||
@@ -71,7 +71,7 @@ describe("generic application router", () => {
|
||||
await screen.findByRole("heading", { name: "UI 구성요소", level: 1 }),
|
||||
).toBeVisible();
|
||||
expect(window.location.pathname).toBe("/examples/ui");
|
||||
expect(document.title).toBe("UI 구성요소 · Frontend Skeleton");
|
||||
expect(document.title).toBe("UI 구성요소 · Tech Log");
|
||||
await waitFor(() =>
|
||||
expect(
|
||||
screen.getByRole("heading", { name: "UI 구성요소", level: 1 }),
|
||||
|
||||
@@ -62,7 +62,7 @@ describe("production runtime application tree", () => {
|
||||
|
||||
expect(
|
||||
await screen.findByRole("heading", {
|
||||
name: "Clean Architecture Frontend",
|
||||
name: "Tech Log",
|
||||
}),
|
||||
).toBeVisible();
|
||||
expect(
|
||||
|
||||
@@ -3,7 +3,7 @@ import { expect, test } from "../support/browser/strict-browser-test.ts";
|
||||
test("boots the public app shell", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await expect(page.getByRole("heading", { level: 1 })).toHaveText(
|
||||
"Clean Architecture Frontend",
|
||||
"Tech Log",
|
||||
);
|
||||
await expect(page.getByRole("navigation", { name: "주요 탐색" })).toBeVisible();
|
||||
await expect(page.getByRole("main")).toBeVisible();
|
||||
|
||||
@@ -228,7 +228,7 @@ describe("reference feature page states", () => {
|
||||
expect(
|
||||
await screen.findByRole("heading", {
|
||||
level: 1,
|
||||
name: "Clean Architecture Frontend",
|
||||
name: "Tech Log",
|
||||
}),
|
||||
).toBeVisible();
|
||||
});
|
||||
@@ -284,7 +284,7 @@ describe("reference feature page states", () => {
|
||||
expect(
|
||||
await screen.findByRole("heading", {
|
||||
level: 1,
|
||||
name: "Clean Architecture Frontend",
|
||||
name: "Tech Log",
|
||||
}),
|
||||
).toBeVisible();
|
||||
});
|
||||
|
||||
@@ -6,7 +6,7 @@ name: frontend-quality-gates
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [develop]
|
||||
branches: [main]
|
||||
tags: ["v*"]
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
@@ -59,7 +59,7 @@ function passingAssessment(): any {
|
||||
generatedAt: "2026-08-02T00:00:00.000Z",
|
||||
status: "PASS" as const,
|
||||
verifier: {
|
||||
id: "clean-architecture-frontend-template/local-evidence-verifier",
|
||||
id: "tech-log-frontend/local-evidence-verifier",
|
||||
version: "1",
|
||||
sourceSha256: digest("verifier source"),
|
||||
},
|
||||
@@ -1490,7 +1490,7 @@ function syntheticSignedPromotionBundle() {
|
||||
verifiedAt: "2026-08-02T01:00:00.000Z",
|
||||
status: "PASS",
|
||||
verifier: {
|
||||
id: "clean-architecture-frontend-template/promotion-verifier",
|
||||
id: "tech-log-frontend/promotion-verifier",
|
||||
version: "3",
|
||||
},
|
||||
run,
|
||||
@@ -1806,7 +1806,7 @@ async function createArchivedAssessmentFixture(): Promise<{
|
||||
const assessment = localEvidenceAssessmentArtifactSchema.parse({
|
||||
...passingAssessment(),
|
||||
verifier: {
|
||||
id: "clean-architecture-frontend-template/local-evidence-verifier",
|
||||
id: "tech-log-frontend/local-evidence-verifier",
|
||||
version: "1",
|
||||
sourceSha256: supplyChainDigest(
|
||||
policyInputs.filter(({ path: policyPath }) => verifierPaths.has(policyPath)),
|
||||
|
||||
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 396 KiB After Width: | Height: | Size: 392 KiB |