Skip to content

v0.9.2

Latest

Choose a tag to compare

@Stupidoodle Stupidoodle released this 28 Aug 11:45
f7b11d6

Patch: jobs.ch and jobup.ch retired their search API β€” followed, and isolated

JobCloud retired /api/v1/public/search on 2026-08-28. Both boards answer 410 Gone with a [] body β€” no deprecation window, and the detail endpoint beside it kept serving, so nothing announced it. Because a board's transport error still propagated out of the multi-board loop, every sdj list crashed with a traceback, not just the Swiss ones.

Two fixes, and the second matters more than the first.

Search follows JobCloud to its new host. Queries now go to job-search-api.<board>/search, the API the site's own frontend calls; details stay where they were. The new host speaks camelCase, so search documents are folded back into the snake-case shape Job.raw has always exposed, with the camelCase originals kept alongside β€” an additive change to the wire contract, not a rename. Rows serve up to 200 per page there instead of 20, so each board now covers 500 postings per search rather than 100, in about a second.

Its parameters are the trap: old names are ignored, not rejected. category-ids[]=106 still answers 200 β€” with the entire unfiltered corpus. A status code proves nothing about a filter here, so the live lane asserts each server-side filter by its effect on the returned rows, on both boards.

One unreachable board no longer aborts the other eight. This is the same gap that made the v0.9.0 MyCareersFuture timeout kill keyword search everywhere, reported then by @Aneek1 in #20. A board that cannot be reached is now skipped and named: sdj list --json and the search_jobs MCP tool report it as boards_failed, the in-band note says the results are partial, and the plain CLI prints it to stderr. Silence was never an option β€” an empty list reads as "searched, nothing matched". If every board fails, the error still raises.

One capability regressed with the endpoint: search rows no longer carry language (languageIds is empty on every row sampled), so --language now excludes jobs.ch and jobup.ch visibly instead of silently dropping their rows. The new host accepts languageIds=de server-side, so this is restorable additively.

310 tests, 93% branch coverage, live lane green on all nine boards.

Full Changelog: v0.9.1...v0.9.2