46 lines
3.1 KiB
Markdown
46 lines
3.1 KiB
Markdown
---
|
|
title: T01 summary
|
|
status: done
|
|
files:
|
|
- JobTrackerApi/Controllers/JobApplicationsController.cs
|
|
- JobTrackerApi.Tests/JobApplicationsFollowUpDraftTests.cs
|
|
verification:
|
|
- $HOME/.dotnet/dotnet build JobTrackerApi/JobTrackerApi.csproj
|
|
- $HOME/.dotnet/dotnet test JobTrackerApi.Tests/JobTrackerApi.Tests.csproj --filter JobApplicationsFollowUpDraftTests
|
|
observability_surfaces:
|
|
- 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.
|