Complete S03 runtime closure and S04 control loop
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# S04: Daily control loop surfaces
|
||||
|
||||
**Goal:** Make the job table, reminders view, and dashboard behave like one daily control loop so the user can scan what needs attention and jump directly into the right job workspace state.
|
||||
**Demo:** Starting from the job table or reminders/dashboard, the user can identify the highest-priority jobs, jump straight into the relevant job workspace tab (for example Tailored CV or Follow-up), and use those surfaces as a coherent daily review flow.
|
||||
|
||||
S04 directly owns active requirements **R005**, **R006**, **R007**, **R009**, and **R010**. The main risk is that the app already has all three surfaces but they still behave as adjacent pages instead of a loop: dashboard mostly reports metrics, reminders opens a separate modal, and the table only partially exposes what action is actually due. This slice should make the same underlying reminder/readiness signals actionable from the daily-entry surfaces without inventing a second workflow or weakening the individual-first job workspace model.
|
||||
|
||||
## Must-Haves
|
||||
|
||||
- The job table makes it easier to see which jobs need follow-up or package work and jump directly into the right workspace state.
|
||||
- Dashboard and reminders surfaces expose the highest-priority jobs as actionable entries, not just passive summaries.
|
||||
- The daily loop remains individual-first and routes the user into the existing job workspace rather than creating a separate control system.
|
||||
|
||||
## Proof Level
|
||||
|
||||
- This slice proves: integration
|
||||
- Real runtime required: yes
|
||||
- Human/UAT required: yes
|
||||
|
||||
## Verification
|
||||
|
||||
- `CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/daily-control-loop.test.tsx`
|
||||
- `CI=true npm --prefix job-tracker-ui run build`
|
||||
- Manual UAT: from the table, reminders page, and dashboard, identify a job needing attention, jump into the correct job workspace tab, and confirm the flow feels like one coherent daily review loop.
|
||||
|
||||
## Observability / Diagnostics
|
||||
|
||||
- Runtime signals: reminders counts, dashboard attention cards, and table urgency chips should all route into the same workspace state instead of diverging.
|
||||
- Inspection surfaces: `job-tracker-ui/src/components/JobTable.tsx`, `job-tracker-ui/src/components/DashboardView.tsx`, `job-tracker-ui/src/components/RemindersView.tsx`, and the routed job workspace opened through `/jobs?open=...&tab=...`.
|
||||
- Failure visibility: the focused UI test should make broken routing or missing actionable surfaces obvious; browser UAT should confirm that the routed job workspace lands on the expected tab.
|
||||
- Redaction constraints: no new logging of private job notes or correspondence content.
|
||||
|
||||
## Integration Closure
|
||||
|
||||
- Upstream surfaces consumed: `GET /api/jobapplications`, `GET /api/jobapplications/reminders`, `GET /api/jobapplications/analytics-overview`, and the existing job workspace in `job-tracker-ui/src/components/JobDetailsDialog.tsx`.
|
||||
- New wiring introduced in this slice: action-oriented routing from daily overview surfaces into the existing job workspace state.
|
||||
- What remains before the milestone is truly usable end-to-end: S05 still needs full live-loop revalidation across import, package drafting, follow-up drafting, and daily review.
|
||||
|
||||
## Tasks
|
||||
|
||||
- [x] **T01: Turn reminders and dashboard into actionable entry surfaces** `est:4h`
|
||||
- Why: S04 fails if dashboard/reminders only summarize state without helping the user move into the next job-level action.
|
||||
- Files: `job-tracker-ui/src/components/DashboardView.tsx`, `job-tracker-ui/src/components/RemindersView.tsx`, `job-tracker-ui/src/App.tsx`
|
||||
- Do: add actionable attention cards/lists to the dashboard, route reminders actions into the existing job workspace state instead of a separate modal loop, and preserve the individual-first control flow through `/jobs`.
|
||||
- Verify: `CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/daily-control-loop.test.tsx`
|
||||
- Done when: the dashboard and reminders surfaces clearly show what needs attention and can open the correct job workspace state directly.
|
||||
- [ ] **T02: Make the job table expose the right next action and prove the daily loop** `est:4h`
|
||||
- Why: The table is the first surface the user sees each day, so it has to make urgency legible and connect cleanly into the same routed job workspace flow.
|
||||
- Files: `job-tracker-ui/src/components/JobTable.tsx`, `job-tracker-ui/src/daily-control-loop.test.tsx`
|
||||
- Do: tighten job-table urgency/action affordances for follow-up and package work, reuse the routed workspace-open mechanism, and add focused UI coverage proving the table/reminders/dashboard loop lands in the right job workspace state.
|
||||
- Verify: `CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/daily-control-loop.test.tsx`
|
||||
- Done when: the table surfaces the right next action clearly and the focused UI test proves the daily loop routing across overview surfaces.
|
||||
|
||||
## Files Likely Touched
|
||||
|
||||
- `job-tracker-ui/src/components/DashboardView.tsx`
|
||||
- `job-tracker-ui/src/components/RemindersView.tsx`
|
||||
- `job-tracker-ui/src/components/JobTable.tsx`
|
||||
- `job-tracker-ui/src/App.tsx`
|
||||
- `job-tracker-ui/src/daily-control-loop.test.tsx`
|
||||
p.test.tsx`
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
title: S04 summary
|
||||
status: done
|
||||
verification:
|
||||
- CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/daily-control-loop.test.tsx
|
||||
- CI=true npm --prefix job-tracker-ui run build
|
||||
- Browser UAT on built branch UI via localhost:3001 against localhost:5202
|
||||
---
|
||||
|
||||
S04 turned the table, dashboard, and reminders into a coherent daily control loop.
|
||||
|
||||
Delivered:
|
||||
- routed workspace entry helper in `job-tracker-ui/src/jobWorkspaceRoute.ts`
|
||||
- actionable dashboard attention section in `job-tracker-ui/src/components/DashboardView.tsx`
|
||||
- reminders flow routed into the existing `/jobs` workspace in `job-tracker-ui/src/components/RemindersView.tsx`
|
||||
- clickable urgency chips in `job-tracker-ui/src/components/JobTable.tsx` that jump straight into follow-up or tailored-CV work
|
||||
- focused UI proof in `job-tracker-ui/src/daily-control-loop.test.tsx`
|
||||
|
||||
Browser verification:
|
||||
- verified dashboard `Follow up` action opened the real job workspace on the Follow-up tab in the built branch UI
|
||||
- verified reminders `Open` routed back into the same job workspace flow
|
||||
- verified S03 follow-up flow remained intact when entered from the daily overview surfaces
|
||||
|
||||
Net effect:
|
||||
- the job table is now a clearer first-stop overview
|
||||
- reminders and dashboard no longer strand the user in secondary surfaces
|
||||
- overview surfaces now route into one workspace model instead of competing loops
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
estimated_steps: 4
|
||||
estimated_files: 3
|
||||
skills_used:
|
||||
- react-best-practices
|
||||
- test
|
||||
---
|
||||
|
||||
# T01: Turn reminders and dashboard into actionable entry surfaces
|
||||
|
||||
**Slice:** S04 — Daily control loop surfaces
|
||||
**Milestone:** M001
|
||||
|
||||
## Description
|
||||
|
||||
Make the dashboard and reminders page show high-priority jobs as direct entry points into the existing job workspace state instead of acting like passive summaries or separate modal loops.
|
||||
|
||||
## Steps
|
||||
|
||||
1. Audit the current dashboard and reminders surfaces to identify where reminder/readiness information is already available but not actionable.
|
||||
2. Add direct job-open actions that route into `/jobs` with the correct workspace tab and optional follow-up mode.
|
||||
3. Replace reminder-modal detours with routed job-workspace entry where it improves flow coherence.
|
||||
4. Cover the new routed-entry behavior in a focused UI test.
|
||||
|
||||
## Must-Haves
|
||||
|
||||
- [ ] Dashboard shows actionable jobs needing attention now.
|
||||
- [ ] Reminders routes into the existing job workspace state rather than creating a separate loop.
|
||||
- [ ] Focused UI coverage proves routed entry from overview surfaces.
|
||||
|
||||
## Verification
|
||||
|
||||
- `CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/daily-control-loop.test.tsx`
|
||||
- `CI=true npm --prefix job-tracker-ui run build`
|
||||
|
||||
## Inputs
|
||||
|
||||
- `job-tracker-ui/src/components/DashboardView.tsx` — current analytics dashboard.
|
||||
- `job-tracker-ui/src/components/RemindersView.tsx` — current reminders page.
|
||||
- `job-tracker-ui/src/App.tsx` — route shell and navigation structure.
|
||||
|
||||
## Expected Output
|
||||
|
||||
- `job-tracker-ui/src/components/DashboardView.tsx` — actionable attention cards or lists.
|
||||
- `job-tracker-ui/src/components/RemindersView.tsx` — routed job-workspace entry flow.
|
||||
- `job-tracker-ui/src/daily-control-loop.test.tsx` — focused proof for overview-to-workspace routing.
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: T01 summary
|
||||
status: done
|
||||
files:
|
||||
- job-tracker-ui/src/components/DashboardView.tsx
|
||||
- job-tracker-ui/src/components/RemindersView.tsx
|
||||
- job-tracker-ui/src/jobWorkspaceRoute.ts
|
||||
- job-tracker-ui/src/daily-control-loop.test.tsx
|
||||
verification:
|
||||
- CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/daily-control-loop.test.tsx
|
||||
- CI=true npm --prefix job-tracker-ui run build
|
||||
---
|
||||
|
||||
Turned dashboard and reminders into actionable entry surfaces instead of dead-end summaries.
|
||||
|
||||
What changed:
|
||||
- `job-tracker-ui/src/jobWorkspaceRoute.ts`
|
||||
- added a single helper for routed job-workspace entry with `open`, `tab`, and optional `followMode`
|
||||
- `job-tracker-ui/src/components/DashboardView.tsx`
|
||||
- added a `Needs Follow-up` action section driven by reminder jobs
|
||||
- wired dashboard actions into the shared routed job-workspace flow
|
||||
- `job-tracker-ui/src/components/RemindersView.tsx`
|
||||
- replaced the separate reminder modal loop with routed entry into `/jobs`
|
||||
- reminders now open the relevant workspace state directly instead of creating another local workflow
|
||||
- `job-tracker-ui/src/daily-control-loop.test.tsx`
|
||||
- added focused proof that dashboard and reminders route into the right workspace flow
|
||||
|
||||
Verification:
|
||||
- Focused daily-loop test passed
|
||||
- Frontend build passed
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
estimated_steps: 4
|
||||
estimated_files: 2
|
||||
skills_used:
|
||||
- react-best-practices
|
||||
- test
|
||||
---
|
||||
|
||||
# T02: Make the job table expose the right next action and prove the daily loop
|
||||
|
||||
**Slice:** S04 — Daily control loop surfaces
|
||||
**Milestone:** M001
|
||||
|
||||
## Description
|
||||
|
||||
Strengthen the job table so the first daily view shows what action is actually due and can jump directly into the right job workspace tab.
|
||||
|
||||
## Steps
|
||||
|
||||
1. Audit the existing job-table row chips and actions against the reminder/readiness data already available.
|
||||
2. Add clearer action affordances for follow-up and package work that route into the same job workspace state used by dashboard/reminders.
|
||||
3. Fold the table interactions into the focused daily-loop test.
|
||||
4. Verify the routed-table behavior and build output.
|
||||
|
||||
## Must-Haves
|
||||
|
||||
- [ ] Job-table urgency signals are actionable, not just decorative.
|
||||
- [ ] Table actions route into the same workspace state used by reminders/dashboard.
|
||||
- [ ] The focused UI test proves the table participates in the same daily loop.
|
||||
|
||||
## Verification
|
||||
|
||||
- `CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/daily-control-loop.test.tsx`
|
||||
- `CI=true npm --prefix job-tracker-ui run build`
|
||||
|
||||
## Inputs
|
||||
|
||||
- `job-tracker-ui/src/components/JobTable.tsx` — current table and row actions.
|
||||
- `job-tracker-ui/src/daily-control-loop.test.tsx` — focused loop test from T01.
|
||||
|
||||
## Expected Output
|
||||
|
||||
- `job-tracker-ui/src/components/JobTable.tsx` — clearer next-action affordances.
|
||||
- `job-tracker-ui/src/daily-control-loop.test.tsx` — proof that the table participates in the routed daily loop.
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
title: T02 summary
|
||||
status: done
|
||||
files:
|
||||
- job-tracker-ui/src/components/JobTable.tsx
|
||||
- job-tracker-ui/src/daily-control-loop.test.tsx
|
||||
verification:
|
||||
- CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/daily-control-loop.test.tsx
|
||||
- CI=true npm --prefix job-tracker-ui run build
|
||||
---
|
||||
|
||||
Made the job table expose the next action directly and prove the daily loop end-to-end.
|
||||
|
||||
What changed:
|
||||
- `job-tracker-ui/src/components/JobTable.tsx`
|
||||
- follow-up and CV status chips now route directly into the right job workspace tab
|
||||
- the table participates in the same routed workspace flow as dashboard and reminders
|
||||
- `job-tracker-ui/src/daily-control-loop.test.tsx`
|
||||
- expanded the focused test to prove the table chip routes into the follow-up workspace and that reminders can route into the tailored-CV workspace
|
||||
|
||||
Verification:
|
||||
- Focused daily-loop test passed
|
||||
- Frontend build passed
|
||||
Reference in New Issue
Block a user