Files
jobtrackingapp/.gsd/milestones/M001/slices/S05/tasks/T01-SUMMARY.md
T
cesnimda 9adbde3f5e feat(S05/T01): Unified workflow trust signals across the API, table, da…
- JobTrackerApi/Controllers/JobApplicationsController.cs
- JobTrackerApi.Tests/JobApplicationsWorkflowSignalsTests.cs
- job-tracker-ui/src/jobWorkflowSignals.ts
- job-tracker-ui/src/components/JobTable.tsx
- job-tracker-ui/src/components/DashboardView.tsx
- job-tracker-ui/src/components/RemindersView.tsx
- job-tracker-ui/src/workflow-trust-signals.test.tsx
2026-03-24 14:28:01 +01:00

6.6 KiB

id, parent, milestone, provides, key_files, key_decisions, patterns_established, observability_surfaces, duration, verification_result, completed_at, blocker_discovered
id parent milestone provides key_files key_decisions patterns_established observability_surfaces duration verification_result completed_at blocker_discovered
T01 S05 M001
Shared workflow trust/action signals for overview and readiness surfaces
JobTrackerApi/Controllers/JobApplicationsController.cs
JobTrackerApi.Tests/JobApplicationsWorkflowSignalsTests.cs
job-tracker-ui/src/jobWorkflowSignals.ts
job-tracker-ui/src/components/JobTable.tsx
job-tracker-ui/src/components/DashboardView.tsx
job-tracker-ui/src/components/RemindersView.tsx
job-tracker-ui/src/workflow-trust-signals.test.tsx
Treated saved application answers as explicit workflow state via WorkflowSignal instead of inferring package readiness from generic notes text.
Overview surfaces must derive routing, labels, and grouping from workflowSignal plus jobWorkflowSignals.ts, not from followUpReason string matching.
GET /api/jobapplications/reminders
GET /api/jobapplications/{id}/readiness
job-tracker-ui/src/jobWorkflowSignals.ts
job-tracker-ui/src/workflow-trust-signals.test.tsx
JobTrackerApi.Tests/JobApplicationsWorkflowSignalsTests.cs
2h 10m passed 2026-03-24T14:02:04+01:00 false

T01: Centralize workflow trust signals across overview and readiness surfaces

Unified workflow trust signals across the API, table, dashboard, and reminders.

What Happened

I verified the local controller and UI code first, found that the backend already had the beginnings of a WorkflowSignal contract, and confirmed the remaining drift was on the consumer side: JobTable, DashboardView, and RemindersView still fell back to followUpReason parsing or raw notes/tailoredCvText heuristics.

On the backend, I fixed the broken RulesEngine.Decision type references so the controller compiled again, kept the saved-application-answer block parsing as the package-readiness source of truth, and added focused tests proving two things: generic notes do not satisfy saved-answer readiness, and reminders/readiness now expose normalized workflow routing metadata for both package work and follow-up work.

On the frontend, I completed the shared type contract by adding WorkflowSignal to job-tracker-ui/src/types.ts, extended ReadinessResponse to surface that signal, and rewrote job-tracker-ui/src/jobWorkflowSignals.ts as the one shared helper for overview routing, labels, and reminder grouping.

I then updated the three overview surfaces to consume that helper directly. JobTable now drives urgency chips, primary actions, and the readiness filter from workflowSignal instead of raw notes or followUpReason. DashboardView now chooses reminder labels/routes from the same helper. RemindersView now groups jobs and opens workspace tabs from workflowSignal rather than parsing reason text.

To keep the existing integrated coverage useful, I also updated src/daily-control-loop.test.tsx to the new contract so the broader slice-level regression continues to validate the overview loop instead of enforcing the old heuristic behavior.

Verification

I ran the focused T01 backend and frontend checks from the task plan and both passed. I also ran the slice-level verification commands relevant at this stage: the broader focused UI regression bundle now passes, the production build passes, and the only remaining slice-level failure is the missing src/end-to-end-trust-loop.test.tsx, which belongs to T02 and is expected for this intermediate task.

Verification Evidence

# Command Exit Code Verdict Duration
1 dotnet test JobTrackerApi.Tests/JobTrackerApi.Tests.csproj --filter JobApplicationsWorkflowSignalsTests 0 pass 3.62s
2 CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/workflow-trust-signals.test.tsx 0 pass 3.37s
3 CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/end-to-end-trust-loop.test.tsx 1 fail 0.62s
4 CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/correspondence-gmail-import.test.tsx src/job-details-generated-drafts.test.tsx src/job-details-followup-drafts.test.tsx src/daily-control-loop.test.tsx 0 pass 4.62s
5 CI=true npm --prefix job-tracker-ui run build 0 pass 12.73s

Diagnostics

Inspect GET /api/jobapplications/reminders and GET /api/jobapplications/{id}/readiness to confirm workflowSignal.actionKey, workspaceTab, followMode, and package/interview/follow-up booleans. On the UI side, inspect job-tracker-ui/src/jobWorkflowSignals.ts and run src/workflow-trust-signals.test.tsx to catch any routing/grouping drift. Failures now surface as deterministic targeted test failures instead of silent string-parsing mismatches.

Deviations

I also corrected a pre-existing controller compile issue (RulesEngine.Decision vs. FollowUpDecision) and updated the existing src/daily-control-loop.test.tsx regression so it validates the new shared workflow contract instead of the retired heuristic behavior.

Known Issues

  • src/end-to-end-trust-loop.test.tsx does not exist yet, so that slice-level verification command still fails until T02 adds the integrated trust-loop proof.
  • The React test runs emit React Router future-flag warnings, but they are warnings only and did not affect pass/fail outcomes.

Files Created/Modified

  • JobTrackerApi/Controllers/JobApplicationsController.cs — fixed the follow-up decision type usage while preserving and exposing the normalized workflow signal contract.
  • JobTrackerApi.Tests/JobApplicationsWorkflowSignalsTests.cs — added focused backend proofs for package-gap vs. generic-notes handling and normalized reminder routing metadata.
  • job-tracker-ui/src/types.ts — added the shared WorkflowSignal type and extended readiness responses to carry it.
  • job-tracker-ui/src/jobWorkflowSignals.ts — centralized workflow routing, labels, and reminder grouping for overview surfaces.
  • job-tracker-ui/src/components/JobTable.tsx — switched next-action chips/buttons and readiness filtering to the shared workflow signal.
  • job-tracker-ui/src/components/DashboardView.tsx — switched reminder labels/routes to the shared workflow signal helper.
  • job-tracker-ui/src/components/RemindersView.tsx — switched grouping and open-action routing to workflow signal metadata.
  • job-tracker-ui/src/workflow-trust-signals.test.tsx — added focused frontend regression coverage proving overview surfaces stay aligned.
  • job-tracker-ui/src/daily-control-loop.test.tsx — updated the broader loop regression to the shared workflow contract.