From 4c59151e3704f0643c1ff86b2d2bb2132842ea43 Mon Sep 17 00:00:00 2001 From: -Puter <22245429+puterhimself@users.noreply.github.com> Date: Mon, 13 Jul 2026 19:46:26 +0530 Subject: [PATCH] Avoid duplicate Course scoring events --- scripts/course-matchmaking-routes.test.ts | 5 ++--- src/services/course-events.ts | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts/course-matchmaking-routes.test.ts b/scripts/course-matchmaking-routes.test.ts index ec694af..3e60359 100644 --- a/scripts/course-matchmaking-routes.test.ts +++ b/scripts/course-matchmaking-routes.test.ts @@ -30,9 +30,8 @@ try { assert.equal(recorded.length, 1); assert.equal((recorded[0].mission as Record).missionId, "mission-1"); const progress = buildCourseGatewayEvent({ userId: "user_test", action: "record_swipe", body: { params: { video_id: "video-1", anchor_id: "anchor-1", curatorTaskId: "task-3", missionId: "mission-3" } }, result: { status: "completed", messages: [{ type: "agent_data", data: { watch_pct: 0.8 } }] } }); - assert.equal(progress.type, "course.progress_recorded"); - const projected = extractQscoreSignals({ type: progress.type, payload: progress.payload, id: "evt-course", userId: "user_test", source: progress.source, category: "service", mission: progress.mission ?? null, subject: progress.subject ?? null, correlation: progress.correlation ?? null } as never); - assert.ok(projected.some((signal) => signal.signalId === "courses.completion_rate"), "record_swipe must project course progress"); + assert.equal(progress.type, "course.task_finished"); + assert.equal(extractQscoreSignals({ type: progress.type, payload: progress.payload, id: "evt-course", userId: "user_test", source: progress.source, category: "service", mission: progress.mission ?? null, subject: progress.subject ?? null, correlation: progress.correlation ?? null } as never).length, 0); assert.equal(progress.payload.courseId, "anchor-1"); assert.equal(progress.payload.lessonId, "video-1"); const nonProgress = buildCourseGatewayEvent({ userId: "user_test", action: "get_feed", body: { params: {} }, result: { status: "completed", messages: [] } }); diff --git a/src/services/course-events.ts b/src/services/course-events.ts index df7df9e..3dd7800 100644 --- a/src/services/course-events.ts +++ b/src/services/course-events.ts @@ -24,7 +24,7 @@ export function buildCourseGatewayEvent(input: { userId: string; action: string; return { userId: input.userId, source: "course-a2a-gateway", - type: input.result.status === "error" ? "course.request.failed" : progressAction ? "course.progress_recorded" : "course.task_finished", + type: input.result.status === "error" ? "course.request.failed" : "course.task_finished", payload, correlation, mission: missionId || missionInstanceId || stageId ? { missionId, instanceId: missionInstanceId, stageId, source: pick(params.source) ?? "curator-v1" } : undefined,