Skip to content

v0.9.0 β€” MyCareersFuture (Singapore), first community board

Choose a tag to compare

@Stupidoodle Stupidoodle released this 26 Aug 05:20
· 11 commits to main since this release

MyCareersFuture (Singapore) β€” the first community-contributed board

Singapore's government job portal joins as the ninth board and third platform, contributed by @Aneek1 in the project's first external PR (#18). Nine boards, eight countries.

  • ~9,000 active IT postings from MyCareersFuture (Workforce Singapore), via its public JSON API β€” no auth, no scraping.
  • Search-driven, like jobs.ch/jobup.ch: the API caps results at 100 rows per page, so queries pass server-side, newest first, with a small default page budget (SDJ_MYCAREERSFUTURE_PAGES, default 3).
  • Salary is published β€” monthly SGD on the wire, annualized by the adapter β€” and postings carry a skills array, so --min-salary, --tech, and --remote all filter normally (remote maps from the wire's Telecommuting arrangement, the only flexible-work value that means where rather than when).
  • --visa, --level, --workload exclude the board visibly, per the filter-parity contract: no sponsorship field exists (Singapore employers apply for a specific work pass after the fact), the board's own position levels have no honest mapping onto the shared level enum, and no workload percentage exists on the wire.
  • No native apply β€” apply instructions live in the posting itself, so direct-apply refuses with the real posting URL, same as jobs.ch/jobup.ch.
  • New cv/sg.md CV conventions bundled with the skill, covering the work-pass landscape (EP/S Pass/LOC) and Fair Consideration Framework context.

Post-merge hardening: MyCareersFuture rows now declare language: en (English-only platform by policy β€” previously --language en would have silently dropped them), and the registry's contract-alias lookup gained one explicit branch per platform so a future platform can't silently inherit another's aliases.

All wire-shape claims re-verified live before merge: limit cap (100; 200 is a 400), zero-based paging, salary/skills presence 100/100 on the newest page, and the posting URLs render.

291 tests, 93% branch coverage, CI on Python 3.9 + 3.14, zero runtime dependencies.

Full Changelog: v0.8.0...v0.9.0