Repository navigation
v0.8.0 β contract & workload filters
Contract-type and workload filters, parity-checked on every board
Two new filter dimensions, both honoring the v0.7 parity contract (served, folded, or visibly excluded β never a silent empty result):
--contractβpermanentΒ·temporaryΒ·freelanceΒ·internshipΒ·apprenticeshipΒ·supplementary. Works on every board: each platform maps its own taxonomy onto these shared aliases. The devitjobs family maps itsjobType(aContractposting answers to bothfreelanceandtemporaryβ the platform folds those into one value); jobs.ch/jobup.ch filter server-side through their own employment-type taxonomy, mapped id-by-id against the labels the site renders and verified identical on both boards.--workload <pct>β postings that offer that workload percent (e.g.--workload 80). jobs.ch/jobup.ch publish structured workload ranges and filter server-side β which matters on a search-driven board, where post-fetch filtering would waste the 2,000-row result window. The devitjobs wire carries no workload percentages, so those boards are excluded visibly (boards_excluded+ note), exactly like a salary filter on jobs.ch.- Summary rows now carry
contractandworkload_from/workload_to(additive, omit-empty).list_boards/sdj boardsreport each board's contract aliases as data.
Both dimensions are covered by the registry-driven parity matrix (test_filter_parity.py) β a future board fails CI until it declares what it can and cannot serve.
250 tests, 93% branch coverage, CI on Python 3.9 + 3.14, zero runtime dependencies.
Full Changelog: v0.7.0...v0.8.0