27 lines
2.3 KiB
Markdown
27 lines
2.3 KiB
Markdown
# ADR-0003: v1.1 scope (feel-alive features + killer demo)
|
|
|
|
Status: accepted (2026-07-30)
|
|
|
|
## Features
|
|
|
|
1. **Email reply tracking (read-only)**: IMAP poll (stdlib imaplib, env `IMAP_HOST/PORT/USER/PASS`, flag `EMAIL_WATCH_ENABLED` default false) every 15 min via scheduler. New messages matched to applications by contact domain/company; cheap-LLM classify into `interview_invite | rejection | question | noise`. Result stored as `suggestion` rows; user confirms card moves (state transitions stay user-gated per ADR-0001, no auto-move in v1.1).
|
|
2. **Notifications**: `NotificationChannel` interface; v1.1 implementations: `LogChannel` (default), `WebhookChannel` (generic POST to user URL, documented Hermes-webhook example). Triggers: daily digest (07:30), interview-invite suggestion. Payload: text + data JSON.
|
|
3. **Agency duplicate detection**: deterministic similarity (packages/matching with rapidfuzz: normalized employer name match OR token_set_ratio(title)>=85 AND token_set_ratio(description)>=80 -> same cluster). No LLM. `cluster_id` groups postings; API surfaces alternates ("same role via 3 agencies").
|
|
4. **CV tailoring per posting**: strong-class task `cv_tailor` -> tailored CV variant JSON (reordered skills, rephrased bullets toward posting keywords, unchanged facts — hallucination guard: only reorder/rephrase existing content, never invent). Stored as artifact(kind=cv) variant linked to application. ATS keyword report: deterministic keyword coverage (tokenizer intersection, no LLM).
|
|
5. **Deadline radar**: cheap extraction task `deadline_extract` during scoring; nullable `apply_by date` on job_posting (migration 004); /today adds `deadlines` strip (next 7 days).
|
|
|
|
## Rules kept
|
|
|
|
- Approval gate untouched; email watch is read-only.
|
|
- Zero-config still works: everything above degrades to mock/log/no-op.
|
|
- No paid-provider fallback for cheap classes.
|
|
|
|
## v1.1 delivery shape
|
|
|
|
Wave A (parallel, no shared files):
|
|
- WA1 apps/api: email watch + notifications + suggestion endpoints (owns main.py/schemas.py/migrations this wave)
|
|
- WA2 packages/matching (new) + packages/llm-gateway (mock additions only)
|
|
|
|
Wave B (after merge):
|
|
- WB1 apps/api: dedupe integration + cv-tailor + deadline endpoints (owns main.py etc.)
|
|
- WB2 apps/web: v1.1 UI (suggestions inbox strip, cluster alternates, tailor button + variant viewer, deadlines strip, notification settings stub)
|