diff --git a/backend/src/modules/activity/entities/activity.entity.ts b/backend/src/modules/activity/entities/activity.entity.ts
index 2a32fab..79653c3 100644
--- a/backend/src/modules/activity/entities/activity.entity.ts
+++ b/backend/src/modules/activity/entities/activity.entity.ts
@@ -28,6 +28,7 @@ export type ActivityType =
| 'task.assignees_changed'
| 'task.due_changed'
| 'task.edited'
+ | 'task.checkpoint_reported'
| 'task.file_removed'
| 'task.removed';
diff --git a/backend/src/modules/task/task.service.ts b/backend/src/modules/task/task.service.ts
index 0d25a19..3f76c3f 100644
--- a/backend/src/modules/task/task.service.ts
+++ b/backend/src/modules/task/task.service.ts
@@ -1420,6 +1420,15 @@ export class TaskService {
}),
);
+ // 활동 적재 — 중간 점검 보고
+ await this.activity.record({
+ projectId: project.id,
+ actorId: actingUserId,
+ type: 'task.checkpoint_reported',
+ payload: { taskTitle: task.title },
+ taskSeq: task.seq,
+ });
+
// 지시자에게 알림(행위자=작업자는 자동 제외)
await this.notification.notify({
recipientIds: task.issuer ? [task.issuer.id] : [],
diff --git a/frontend/src/stores/activity.store.ts b/frontend/src/stores/activity.store.ts
index fb1e8a3..6b0cf44 100644
--- a/frontend/src/stores/activity.store.ts
+++ b/frontend/src/stores/activity.store.ts
@@ -100,6 +100,8 @@ function toProjectActivityItem(api: ApiActivity): ProjectActivityItem {
}
case 'task.edited':
return { ...base, tone: 'task', icon: 'pencil', html: `${actor}님이 ${title} 업무를 수정했습니다` }
+ case 'task.checkpoint_reported':
+ return { ...base, tone: 'task', icon: 'check', html: `${actor}님이 ${title} 업무의 중간 점검을 보고했습니다` }
case 'task.file_removed':
return {
...base,
diff --git a/frontend/src/stores/task.store.ts b/frontend/src/stores/task.store.ts
index 7545534..e1dd542 100644
--- a/frontend/src/stores/task.store.ts
+++ b/frontend/src/stores/task.store.ts
@@ -159,6 +159,8 @@ function toTaskActivityView(api: ApiActivity): ActivityView {
}
case 'task.edited':
return { tone: '', icon: 'check', html: `${actor}님이 업무를 수정했습니다`, time }
+ case 'task.checkpoint_reported':
+ return { tone: 'blue', icon: 'check', html: `${actor}님이 중간 점검 상태를 보고했습니다`, time }
case 'task.file_removed':
return { tone: '', icon: 'paperclip', html: `${actor}님이 첨부 파일을 삭제했습니다`, time, file: pstr(p, 'fileName') }
default:
diff --git a/frontend/src/types/activity.ts b/frontend/src/types/activity.ts
index d86aeb2..0a92829 100644
--- a/frontend/src/types/activity.ts
+++ b/frontend/src/types/activity.ts
@@ -16,6 +16,7 @@ export type ApiActivityType =
| 'task.assignees_changed'
| 'task.due_changed'
| 'task.edited'
+ | 'task.checkpoint_reported'
| 'task.file_removed'
| 'task.removed'