mirror of
https://github.com/prdlk/jobyssey.git
synced 2026-11-09 08:27:42 +00:00
docs(claude): clarify Fastmail requirement and add Twenty CRM sync steps to rank and scraper docs
This commit is contained in:
1 parent
1884510414
commit
12f7f4d9dc
3 files changed
+26
-1
No files matched your search
@@ -196,6 +196,16 @@ Scraper-based portal CLIs rot silently: when a portal changes its markup, the pa
|
||||
|
||||
**Probe-only mode (`/scrape health`).** Skip Steps 1-4 and this step's free pass (there is no fresh run to scan); instead probe every installed portal directly - enabled ones by default, a disabled one only when named explicitly (e.g. `/scrape health jobnet`). Each portal gets the sentinel probe above, the degraded criteria applied to whatever it returns, and - since the user explicitly asked for diagnosis - one `detail` fetch on the first result of each healthy portal (description must be readable decoded text; a failure downgrades to degraded). Report all statuses in this mode, including healthy. Volume stays bounded: one search, at most one retry, at most one detail per portal.
|
||||
|
||||
### Step 4.9: Twenty CRM Catch-Up (silently optional)
|
||||
|
||||
The CRM pipeline starts at `ranked` (a scraped-but-unranked job is not yet an opportunity - `/rank` Step 4.5 is what promotes it), but a scrape run is still a natural moment to keep Twenty current. If the Twenty MCP tools (`execute_tool` meta-tool / `mcp__twenty_*` devices) are available in this session - never probe via shell, and skip this step with one report line when they are not:
|
||||
|
||||
1. **Catch-up delta:** find `seen_jobs.json` entries with status `ranked` or `expired` whose posting URL has no Opportunity in Twenty (page `find_many_opportunities` for the URL map). Sync them per the `/sync-twenty` contract (companies → opportunities → fit notes; batches ≤ 20; dedup on posting URL / normalized company name). This heals any gap left by a `/rank` run that executed while Twenty was unreachable.
|
||||
2. **Expiry refresh:** entries this run re-encountered whose stored status is `expired` but whose CRM `stage` is not `EXPIRED` get a stage update via `upsert_many_opportunities` with the explicit `id` (assert zero creates).
|
||||
3. Add one line to the Step 5 summary: `Twenty CRM: <N> caught up, <E> expired (or: skipped - not connected).`
|
||||
|
||||
This step never blocks the scrape: any Twenty failure is one report line, and the next `/rank` or `/sync-twenty` run picks up the same delta (all three dedup on the same keys, so nothing ever duplicates).
|
||||
|
||||
### Step 5: Present Results
|
||||
|
||||
Present new jobs in a table sorted by fit (high first). When Step 1b skipped
|
||||
|
||||
Reference in new issue
Block a user