import assert from "node:assert/strict"; import { onboardingMissionInstanceId, selectOnboardingMissionIds, } from "../src/missions/lifecycle.js"; const userA = "user_abc123"; assert.deepEqual( selectOnboardingMissionIds({ onboarding: { goal: "I need internship interview prep" } }), ["interview-to-offer", "personal-brand-opportunity-engine"], "default onboarding should start interview-to-offer plus personal brand", ); assert.deepEqual( selectOnboardingMissionIds({ onboarding: { goal: "I want to negotiate my offer and compensation" } }), ["salary-negotiation-war-room", "personal-brand-opportunity-engine"], "salary/offer context should prioritize the negotiation mission", ); assert.deepEqual( selectOnboardingMissionIds({ preferences: { onboarding: { goal: "I need a career transition into product" } } }), ["career-transition", "personal-brand-opportunity-engine"], "preferences onboarding context should be read when selecting missions", ); assert.deepEqual( selectOnboardingMissionIds({ preferences: { onboarding: { goal: "Build LinkedIn visibility and network" } } }), ["personal-brand-opportunity-engine", "interview-to-offer"], "brand/networking context should not duplicate the personal-brand mission", ); assert.equal( onboardingMissionInstanceId(userA, "interview-to-offer"), onboardingMissionInstanceId(userA, "interview-to-offer"), "onboarding mission instance ids must be deterministic for idempotent retries", ); assert.notEqual( onboardingMissionInstanceId(userA, "interview-to-offer"), onboardingMissionInstanceId("user_other", "interview-to-offer"), "onboarding mission instance ids must be scoped by user", ); console.log("mission-lifecycle tests passed"); process.exit(0);