Files
jobtrackingapp/.gsd/milestones/M001/slices/S03/tasks/T01-SUMMARY.md
T

3.1 KiB

title, status, files, verification, observability_surfaces
title status files verification observability_surfaces
T01 summary done
JobTrackerApi/Controllers/JobApplicationsController.cs
JobTrackerApi.Tests/JobApplicationsFollowUpDraftTests.cs
$HOME/.dotnet/dotnet build JobTrackerApi/JobTrackerApi.csproj
$HOME/.dotnet/dotnet test JobTrackerApi.Tests/JobTrackerApi.Tests.csproj --filter JobApplicationsFollowUpDraftTests
GET /api/jobapplications/{id}/followup-draft
POST /api/jobapplications/{id}/send-followup
GET /api/correspondence/{jobId}
JobTrackerApi.Tests/JobApplicationsFollowUpDraftTests.cs

Strengthened follow-up draft generation so it now consumes imported thread context and saved application package material instead of relying mostly on job summary text.

What changed

  • JobTrackerApi/Controllers/JobApplicationsController.cs
    • expanded FollowUpDraftDto to expose contextSummary, contextSignals, threadSubject, and last-correspondence metadata for the workspace
    • added helpers to parse the saved application-answer draft from notes, derive reply-style subjects from the latest thread, and assemble follow-up context signals from recruiter/package/thread state
    • enriched GetFollowUpDraft(...) so the AI prompt now includes imported correspondence context, recruiter details, saved tailored CV / cover letter / recruiter message / application-answer material, and thread-stage cues
    • improved the fallback body so it still reflects saved/thread context when AI output is unavailable
  • JobTrackerApi.Tests/JobApplicationsFollowUpDraftTests.cs
    • added focused backend proof that follow-up draft generation reflects imported thread and saved package state

Diagnostics

  • Call GET /api/jobapplications/{id}/followup-draft and inspect contextSummary, contextSignals, threadSubject, lastCorrespondenceFrom, and lastCorrespondenceAt to confirm the draft is grounded in saved package material plus imported correspondence.
  • Call POST /api/jobapplications/{id}/send-followup only after editing the returned draft; this is the authoritative manual-send/log boundary surface for the slice.
  • Use GET /api/correspondence/{jobId} after a manual send/log to confirm the outbound follow-up appears back in the job timeline rather than remaining transient UI-only state.
  • Re-run dotnet test JobTrackerApi.Tests/JobTrackerApi.Tests.csproj --filter JobApplicationsFollowUpDraftTests when follow-up prompt assembly, DTO shape, or fallback behavior changes.

Verification Evidence

Check Command Exit code Verdict Duration
Backend build $HOME/.dotnet/dotnet build JobTrackerApi/JobTrackerApi.csproj 0 PASS 00:00:03
Focused backend follow-up test $HOME/.dotnet/dotnet test JobTrackerApi.Tests/JobTrackerApi.Tests.csproj --filter JobApplicationsFollowUpDraftTests 0 PASS 00:00:01

Important caveat

  • The original task had to fall back to an isolated harness because JobTrackerApi.Tests.csproj was missing required framework/package references. During slice closeout, the test project was repaired so the plan-level filtered command now runs directly in this worktree again.