feat: add passive mission lifecycle and cross-service actions #13

Open
dv wants to merge 1 commits from backend-canonical-fix into staging
Owner

Summary

Implements passive mission lifecycle support and adds the cross-service passive action layer requested for GrowQR. Service feedback is now converted into concrete follow-up mission actions instead of sitting as disconnected feedback.

Passive mission lifecycle

  • Added backend support for passive mission templates, active mission instances, mission actions, and mission artifacts.
  • Added onboarding/default mission seeding so users can receive passive mission context after onboarding.
  • Added idempotent lifecycle helpers so repeated onboarding/retry flows do not duplicate active missions.

Passive actions implemented

  • Resume Analysis -> Interview Practice Setup

    • Trigger: resume.analysis.completed
    • Creates an interview-service suggestion to practice explaining strongest resume proof/projects.
  • Interview Feedback -> Resume Upgrade Draft

    • Trigger: interview.feedback.generated
    • Creates a resume-service approval action to draft stronger bullets from weak areas, missing proof, and story issues.
  • Roleplay Feedback -> Communication Drill + Story Bank Update

    • Trigger: roleplay.feedback.generated
    • Creates a story_bank_update artifact plus an interview-service communication/story-bank drill suggestion.

Reducer coverage

Passive actions are wired through all active mission reducers:

  • Interview to Offer
  • Career Transition
  • Promotion Readiness
  • Salary Negotiation War Room
  • Personal Brand Opportunity Engine

Audit notes

  • Confirmed the reducers listen to the canonical service events emitted by the service gateway and Redis consumer:
    • resume.analysis.completed
    • interview.feedback.generated
    • roleplay.feedback.generated
  • Confirmed generated actions include sourceEventId and deterministic idempotencyKey values.
  • Confirmed existing mission action persistence mirrors actions into mission suggestions and preserves duplicate protection.
  • Rebased this branch on current origin/staging before pushing.

Verification

Ran after the final rebase:

  • npm run test:passive-actions
  • npm run test:onboarding
  • npm run test:missions
  • npm run typecheck
  • npm run build
  • git diff --check

All passed.

## Summary Implements passive mission lifecycle support and adds the cross-service passive action layer requested for GrowQR. Service feedback is now converted into concrete follow-up mission actions instead of sitting as disconnected feedback. ## Passive mission lifecycle - Added backend support for passive mission templates, active mission instances, mission actions, and mission artifacts. - Added onboarding/default mission seeding so users can receive passive mission context after onboarding. - Added idempotent lifecycle helpers so repeated onboarding/retry flows do not duplicate active missions. ## Passive actions implemented - **Resume Analysis -> Interview Practice Setup** - Trigger: `resume.analysis.completed` - Creates an interview-service suggestion to practice explaining strongest resume proof/projects. - **Interview Feedback -> Resume Upgrade Draft** - Trigger: `interview.feedback.generated` - Creates a resume-service approval action to draft stronger bullets from weak areas, missing proof, and story issues. - **Roleplay Feedback -> Communication Drill + Story Bank Update** - Trigger: `roleplay.feedback.generated` - Creates a `story_bank_update` artifact plus an interview-service communication/story-bank drill suggestion. ## Reducer coverage Passive actions are wired through all active mission reducers: - Interview to Offer - Career Transition - Promotion Readiness - Salary Negotiation War Room - Personal Brand Opportunity Engine ## Audit notes - Confirmed the reducers listen to the canonical service events emitted by the service gateway and Redis consumer: - `resume.analysis.completed` - `interview.feedback.generated` - `roleplay.feedback.generated` - Confirmed generated actions include `sourceEventId` and deterministic `idempotencyKey` values. - Confirmed existing mission action persistence mirrors actions into mission suggestions and preserves duplicate protection. - Rebased this branch on current `origin/staging` before pushing. ## Verification Ran after the final rebase: - `npm run test:passive-actions` - `npm run test:onboarding` - `npm run test:missions` - `npm run typecheck` - `npm run build` - `git diff --check` All passed.
dv added 1 commit 2026-06-27 22:36:29 +00:00
dv added 1 commit 2026-06-29 16:46:40 +00:00
dv changed title from Make onboarding ledger canonical and trigger curator side effects to feat: add passive mission lifecycle 2026-06-29 16:47:41 +00:00
dv added 1 commit 2026-06-29 17:49:32 +00:00
dv changed title from feat: add passive mission lifecycle to feat: add passive mission lifecycle and cross-service actions 2026-06-29 17:50:52 +00:00
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin backend-canonical-fix:backend-canonical-fix
git checkout backend-canonical-fix
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: growqr-app/growqr-backend#13
No description provided.