diff --git a/public/release-manifest.json b/public/release-manifest.json index 0627d5f..faab20d 100644 --- a/public/release-manifest.json +++ b/public/release-manifest.json @@ -38,28 +38,28 @@ }, "contractSet": { "setAlgorithm": "CA_CONTRACT_SET_V1", - "setDigest": "sha256:104bab24221f6d1a4c5fa7df68f5d027d227325a88fa507ebfcccebb439eb7c4", + "setDigest": "sha256:cdcfb628a502d71596f1162726eb395aad0f5f92cf05fd77d304f8e51c81b2fc", "packages": [ { "packageId": "@tech-log/management-contract", "version": "1.0.0", "digest": "sha256:72650735061fde627f5037571eb986cb758f44a546f065c88408399f8eec4a55", "runtimeProtocolVersion": 1, - "sourceRevision": "0ffbc28" + "sourceRevision": "ef49d3a" }, { "packageId": "@tech-log/public-contract", "version": "2.1.0", - "digest": "sha256:79949b286e2b4d28333d3376945960a319d247b675b23a73f50b75ce10994c5e", + "digest": "sha256:7eb668e39e279e49767306dd36e1dd51302071c39d78495d21307bbd9676220e", "runtimeProtocolVersion": 1, - "sourceRevision": "0ffbc28" + "sourceRevision": "ef49d3a" }, { "packageId": "@tech-log/studio-contract", "version": "3.1.0", "digest": "sha256:18dd46898be64b07f7e826409d19347512613ee2e22420028a4a0644f50f37dd", "runtimeProtocolVersion": 1, - "sourceRevision": "0ffbc28" + "sourceRevision": "ef49d3a" } ] } diff --git a/src/features/tech-log/application/ports/public-content-queries.ts b/src/features/tech-log/application/ports/public-content-queries.ts index 375f986..5028a52 100644 --- a/src/features/tech-log/application/ports/public-content-queries.ts +++ b/src/features/tech-log/application/ports/public-content-queries.ts @@ -173,7 +173,7 @@ export type PublicTopic = { */ export type LatestRecordEntry = { id: string; - entryType: "CASE" | "REFERENCE" | "PROJECT_ACTIVITY" | "RELEASE"; + entryType: "CASE" | "REFERENCE" | "QUESTION" | "PROJECT_ACTIVITY" | "RELEASE"; title: string; summary: string; path: string; diff --git a/src/features/tech-log/contracts/management/canonical-source.json b/src/features/tech-log/contracts/management/canonical-source.json index 05f7eff..4642375 100644 --- a/src/features/tech-log/contracts/management/canonical-source.json +++ b/src/features/tech-log/contracts/management/canonical-source.json @@ -2,7 +2,7 @@ "packageId": "@tech-log/management-contract", "version": "1.0.0", "digest": "sha256:72650735061fde627f5037571eb986cb758f44a546f065c88408399f8eec4a55", - "sourceRevision": "0ffbc28", + "sourceRevision": "ef49d3a", "operationIds": [ "createCaseDraft", "getCaseForEdit", diff --git a/src/features/tech-log/contracts/public/canonical-source.json b/src/features/tech-log/contracts/public/canonical-source.json index 538cf49..61433d0 100644 --- a/src/features/tech-log/contracts/public/canonical-source.json +++ b/src/features/tech-log/contracts/public/canonical-source.json @@ -1,8 +1,8 @@ { "packageId": "@tech-log/public-contract", "version": "2.1.0", - "digest": "sha256:79949b286e2b4d28333d3376945960a319d247b675b23a73f50b75ce10994c5e", - "sourceRevision": "0ffbc28", + "digest": "sha256:7eb668e39e279e49767306dd36e1dd51302071c39d78495d21307bbd9676220e", + "sourceRevision": "ef49d3a", "operationIds": [ "getPublicSite", "getPublicHome", diff --git a/src/features/tech-log/contracts/public/generated.ts b/src/features/tech-log/contracts/public/generated.ts index 321c040..1c7f5a1 100644 --- a/src/features/tech-log/contracts/public/generated.ts +++ b/src/features/tech-log/contracts/public/generated.ts @@ -454,7 +454,7 @@ export interface components { }; LatestEntry: { /** @enum {string} */ - entryType: "CASE" | "REFERENCE" | "PROJECT_ACTIVITY" | "RELEASE"; + entryType: "CASE" | "REFERENCE" | "QUESTION" | "PROJECT_ACTIVITY" | "RELEASE"; title: string; summary: string; path: string; diff --git a/src/features/tech-log/contracts/public/public-api.openapi.yaml b/src/features/tech-log/contracts/public/public-api.openapi.yaml index 28dd4f5..1631d17 100644 --- a/src/features/tech-log/contracts/public/public-api.openapi.yaml +++ b/src/features/tech-log/contracts/public/public-api.openapi.yaml @@ -1022,6 +1022,7 @@ components: enum: - CASE - REFERENCE + - QUESTION - PROJECT_ACTIVITY - RELEASE title: diff --git a/src/features/tech-log/contracts/studio/canonical-source.json b/src/features/tech-log/contracts/studio/canonical-source.json index 6ae8885..c014d8b 100644 --- a/src/features/tech-log/contracts/studio/canonical-source.json +++ b/src/features/tech-log/contracts/studio/canonical-source.json @@ -2,7 +2,7 @@ "packageId": "@tech-log/studio-contract", "version": "3.1.0", "digest": "sha256:18dd46898be64b07f7e826409d19347512613ee2e22420028a4a0644f50f37dd", - "sourceRevision": "0ffbc28", + "sourceRevision": "ef49d3a", "operationIds": [ "getStudioSession", "getStudioDashboard", diff --git a/src/features/tech-log/presentation/public/components/public-document-header.tsx b/src/features/tech-log/presentation/public/components/public-document-header.tsx index e988cad..ed98b68 100644 --- a/src/features/tech-log/presentation/public/components/public-document-header.tsx +++ b/src/features/tech-log/presentation/public/components/public-document-header.tsx @@ -19,7 +19,13 @@ export function PublicDocumentHeader({ record }: { record: PublicRecord }) { {kindLabels[record.kind]} - {record.topic} + {/* + 주제 페이지가 아니라 그 주제로 거른 탐색으로 보낸다. `/topics/:slug` 는 세 개를 + 하드코딩해 두고 있어 실제 주제는 무엇이든 404 가 되고, 설명·범위·대표 기록이 전부 + 비어 있어 지금 채울 내용도 없다. 독자가 여기서 기대하는 것 — 같은 주제의 기록 목록 — + 은 탐색 필터가 그대로 준다. + */} + {record.topic} {record.projectTitle} diff --git a/src/features/tech-log/presentation/public/pages/home-page.tsx b/src/features/tech-log/presentation/public/pages/home-page.tsx index 1569dd7..c4a3f5d 100644 --- a/src/features/tech-log/presentation/public/pages/home-page.tsx +++ b/src/features/tech-log/presentation/public/pages/home-page.tsx @@ -50,6 +50,11 @@ function optionalString(value: unknown): string | undefined { * 릴리스는 Publication 파이프라인을 거치지 않아 그 투영에 행이 없다. 그래서 릴리스만 따로 읽어 * 시간순으로 합친다. */ +const latestTypeLabels: Readonly> = { + PROJECT_ACTIVITY: "PROJECT ACTIVITY", + QUESTION: "OPEN QUESTION", +}; + async function getLatestEntries( publicContent: PublicContentQueries, ): Promise { @@ -60,7 +65,8 @@ async function getLatestEntries( const recordTimeline: LatestEntry[] = records.map((entry) => ({ id: entry.id, - typeLabel: entry.entryType === "PROJECT_ACTIVITY" ? "PROJECT ACTIVITY" : entry.entryType, + // 목록의 다른 이름들과 같은 자리에 놓이므로 표기도 같은 규칙을 쓴다 — 대문자에 공백. + typeLabel: latestTypeLabels[entry.entryType] ?? entry.entryType, title: entry.title, summary: entry.summary, date: dateLabel(entry.publishedAt),