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),