Complete S03 runtime closure and S04 control loop

This commit is contained in:
2026-03-24 11:33:55 +01:00
parent 0cacb4e51b
commit 8890906231
17 changed files with 588 additions and 74 deletions
+3 -3
View File
@@ -7,9 +7,9 @@ S03 directly owns active requirements **R004**, **R007**, and **R008**. The main
## Must-Haves
- Follow-up draft generation in `JobTrackerApi/Controllers/JobApplicationsController.cs` uses imported correspondence, recruiter details, and saved application package material deliberately enough that the draft responds to the real thread stage instead of generic reminders.
- The job workspace in `job-tracker-ui/src/components/JobDetailsDialog.tsx` presents follow-up drafting as job-tied working context, including visible thread/package grounding and editable draft state before manual send.
- The slice preserves the explicit manual-send boundary: the app may draft and log what was sent, but it must not auto-send or silently dispatch anything.
- [x] Follow-up draft generation in `JobTrackerApi/Controllers/JobApplicationsController.cs` uses imported correspondence, recruiter details, and saved application package material deliberately enough that the draft responds to the real thread stage instead of generic reminders.
- [x] The job workspace in `job-tracker-ui/src/components/JobDetailsDialog.tsx` presents follow-up drafting as job-tied working context, including visible thread/package grounding and editable draft state before manual send.
- [x] The slice preserves the explicit manual-send boundary: the app may draft and log what was sent, but it must not auto-send or silently dispatch anything.
## Proof Level
@@ -0,0 +1,34 @@
---
title: S03 summary
status: done
verification:
- $HOME/.dotnet/dotnet build JobTrackerApi/JobTrackerApi.csproj
- docker run --rm -v "$PWD":/src -w /src mcr.microsoft.com/dotnet/sdk:9.0 bash -lc '...dotnet test /tmp/followuptests/FollowUpTests.csproj...'
- CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/job-details-followup-drafts.test.tsx
- CI=true npm --prefix job-tracker-ui run build
- Browser UAT on built branch UI via localhost:3001 against localhost:5202
---
S03 turned follow-up drafting into a real thread-aware workspace flow.
Delivered:
- stronger backend follow-up draft context in `JobTrackerApi/Controllers/JobApplicationsController.cs`
- imported correspondence, recruiter details, saved package material, and saved application-answer content now inform the follow-up draft
- follow-up responses expose context summary, context signals, thread subject, and last-correspondence metadata for the workspace
- reply-style subjects now reuse the active thread where available
- focused backend proof in `JobTrackerApi.Tests/JobApplicationsFollowUpDraftTests.cs`
- verifies the follow-up draft reacts to imported thread and saved package state
- stronger Follow-up tab in `job-tracker-ui/src/components/JobDetailsDialog.tsx`
- surfaces why the draft exists now
- shows thread/package grounding explicitly
- keeps manual-send behavior clear and editable
- focused frontend proof in `job-tracker-ui/src/job-details-followup-drafts.test.tsx`
- verifies thread grounding, editable draft state, and manual send/log behavior
- runtime browser proof
- built branch UI served locally on `localhost:3001`
- logged into the local app, opened the seeded job, verified the Follow-up tab showed thread/package grounding, sent a manual follow-up, and confirmed it logged back into Correspondence
Net effect:
- imported correspondence and saved package material now feed useful follow-up drafting instead of sitting in separate surfaces
- the manual-send boundary remains intact
- the job workspace can now carry the user from imported thread context to reviewed draft to logged outbound follow-up