Zorky CRMZorky CRM
EN|RU
@ekaterinovikova

Журнал изменений

Что мы выпустили — автоматически из истории коммитов, обновляется еженедельно.

Неделя с 20 июля 2026 г.

9 новых9 исправлений
  • fixrescoremirror rematch's semantic-less model (revert Finding-1 semantic add) — rescore-with-semantic disagreed with the incremental scorer (base oscillates) + penalized terse JDs (jobserve 16→3). Consistency > per-match accuracy
  • fixrescoreto_jsonb(:v ::bigint) needs the SPACE — ':v::bigint' makes SQLAlchemy text() misparse '::' as a bind colon (syntax error). This was the working form originally
  • fixrescorerestore to_jsonb(:v::bigint) cast — to_jsonb needs a typed arg (bare :v → 'could not determine type'). SELECT int4-TOP was the real DataError fix
  • fixrescoreTOP sentinel = int4 max (vacancies.id is int4; 9999999999 overflowed asyncpg int4 bind → DataError); drop param ::bigint casts
  • fixrescoresentinel TOP cursor + single 'id < :cur' — the ':cur=0 OR id<:cur' dual-context broke asyncpg type inference (empty result); DESC sweep now works
  • featrescoreDESC sweep (recent-first) + batch 200 + every 10min — jobserve/recent get taxonomy in first hour, not ~3 days into an ASC sweep of 26k
  • fixconsilium8 verified bugs from bug-hunt — rescore semantic-drift/dismissed/rejected-stubs (HIGH), tg dead-rearm gate, add_channels ON CONFLICT, careerjunction salary regex, hireline en-split, greatuganda ref_id hash, ghana body-stack gate, fuzu int-coerce, taxonomy partial not reported. Rejected 2 false-positives (IT-gate \b, hireline numeric ref)
  • featmatchcron task_rescore_matches every 20min — full-base cursor sweep applies taxonomy retroactively (verified: jobserve hot 12→16)
  • featmatchtask_rescore_matches — retroactive rescore of existing matches (applies taxonomy to 1.35M matches; rematch is incremental). Cursor-swept, batched, trigger via /api/tasks/rescore
  • featafrica+greatugandajobs (UG) + ghanacurrentjobs (GH) parsers, IT-gated (general boards); bizcommunity needs browser-capture (deferred)
  • featcareerjunctionnew parser — South Africa IT board (SSR cards, 100% company + salary/location)
  • featfuzunew parser — East/West Africa (KE/UG/NG) tech board, SSR React props, 100% company + description
  • featgithub-sourcing+LATAM candidate locations (MX/BR/AR/CO/CL/PE × focused stack) — pairs GetOnBoard/Hireline vacancy side
  • feathirelinenew parser — MX + remote-LATAM tech board (SSR cards, 100% company + salary), WorkerTask registered
  • fixgetonbrdpopulate company via &expand[]=company (was 0% company — LATAM tech board, real employers)
  • featmatchstack umbrella↔specific taxonomy (cloud⊃azure, dynamics⊃d365) — jobserve 0-hot fix, stack 50→70+ lifts ~74→83 over hot line
  • fixtgrecheck task re-arms 'dead' too (was legacy-status orphan, froze live channels like tzprofi_job 1590msgs)
  • fixtgadd_channels now creates a resolver assignment (was orphan tg_channels row → never scraped)

Неделя с 13 июля 2026 г.

35 новых43 исправлений
  • feattg+UK terms to tg-search discovery (auto-find UK job channels)
  • featsourcingUK Reddit vacancies + UK GitHub candidates
  • fixscraperjobs.ac.uk keyword search (it-jobs category yielded 0)
  • featscraperjobs.ac.uk parser + expand Adzuna GB queries (free UK volume)
  • featscrapercord + hackajob parsers (browser-captured sources)
  • featscrapermachinelearningjobs + cloudcomputingjobs (JSON Feed, one parser)
  • featscraperContractorUK parser (UK IT day-rate contracts, 2-hop JSON-LD)
  • fixseolegacy sitemap-en/ru must apply the same noindex gate as core
  • fixssrserver skeleton over false-negative on the 5 sibling data pages (B1 sweep)
  • fixdeploysmoke's "empty #root" was a pipefail+SIGPIPE false positive
  • fixssrrender skeleton, not "not found", when data is absent server-side (B1)
  • featssrwarm top research + niche routes (B2)
  • fixssrnever cache an empty-#root render; serve it degraded + monitored
  • fixseoSSR-render head for founder-essay + cookies pages
  • fixpublicdrop stale founder-essay TODO, add Telegram contact
  • fixpubliclocalize the GDPR data-subject request form (RU/EN)
  • fixadminthe crypto chip stopped being about crypto in July
  • fixadminmap Vacancy.primary_role — the direction chips 500'd without it
  • fixadmindirection chips filter by role, not by free-text over the JD
  • featadminsplit AdOps out of the monetization chip as its own toggle
  • fixadminkeep DeFi yield farming out of the monetization chip
  • featadminmonetization + AEO/GEO keyword chips on vacancies and candidates
  • fixseoship a real favicon.ico — Yandex has reported it missing since June
  • fixseodate live-data sitemap pages off the feed, not a frozen constant
  • fixseo404 unknown resource paths instead of serving the SPA shell
  • fixseodrop the JobPosting LD from noindex vacancy pages
  • fixstackgate the six keywords that are also ordinary English words
  • fixstackmatch tech keywords as words — 54% of every stack was prose
  • fixworkua,geekjobextract the employer, city and salary that were always there
  • fixclassifierrecover Amazon's SDE title and plain QA variants from Other
  • fixscrapersretire the _scrape_generic title-and-link cohort (11 boards)
  • fixdeployrefuse to deploy over uncommitted edits; retire the seek WorkerTask
  • featsourcingcommit the Kaggle candidate sourcer (was live but untracked)
  • fixglassdoorguard also catches cards that parse a title but no href
  • fixworkdaycorrect 404 job URLs (+/site prefix) + keep non-IT (talent pool)
  • featworkday+25 enterprise tenants via careers-redirect discovery (18->43)
  • featworkdayenterprise collector via careers-redirect discovery (18 tenants)
  • featats+33 Greenhouse + 5 Lever net-new slugs (mass-checked)
  • featashby+39 premier AI/dev-tools/fintech slugs (mass-checked)
  • featatsSmartRecruiters WHOLESALE feed via global job search
  • featziprecruiternew parser via JSON-LD ItemList (US aggregator)
  • featindeedre-enable WorkerTask now that mosaic-JSON parse works (24/query)
  • fixindeedrevive via mosaic JSON parse (dead since 2026-04-23)
  • fixstartupjobsrevive via Algolia backend (was 6 rows ever)
  • featgdpraudit candidate PDF exports to pii_audit_log (7-yr hold)
  • fixgdprschedule candidate retention + fix integer=boolean crash
  • fixmatcherdeterministic role-group pick in _check_role_gate
  • fixmatcherdeterministic primary-language pick (was PYTHONHASHSEED-flaky)
  • fixscraperscapture per-job source_url on 8 channels (were empty)
  • fixglassdoorcapture per-job source_url (was 100% empty) — parse serp cards
  • featfrontend #8per-route ErrorBoundary — page crash no longer whiteouts the app
  • fixworkeradd @monitored_cron + _CRON_SLA to task_sg_employers_harvest
  • featjobicydedicated task_jobicy_scrape cron, off the fleet (CF concurrency-fragile)
  • fixjobicyfetch api.v2 through Cloudflare via Scrapling + <pre> JSON extract
  • feathhadd task_hh_scrape to _CRON_SLA watchdog (14h)
  • feathhdedicated staggered cron task_hh_scrape, off the scrape_all fleet
  • fixhhscope search by area per country (kz/uz returned RU serp)
  • fixhhparse inline serp-state JSON instead of captcha-walled detail pages
  • fixscrapercoerce list salary_currency to scalar in JobResult
  • fixscraperpin high-value greenhouse slugs outside shuffle-cap + honest laborx ceiling
  • fixbuiltinrevive silently-dead parser (URL format moved) + all 10 cities
  • featats+22 EU relocation-friendly company slugs (~2113 vacancies)
  • featadminwork_format filter (office/hybrid/remote) on vacancy list + fix t.me @-leak
  • featgreenhouseadd Bugcrowd + Synack security slugs (~24 vacancies)
  • featgreenhouseadd Jane Street + Jump Trading quant slugs (~310 vacancies)
  • featscraperGameDev boards — gamesjobsdirect + hitmarker (IT-filtered)
  • featscraperLaborX crypto freelance vacancies (offers filtered)
  • fixdeploy.shscope backup umask so git reset writes world-readable files
  • featgeolast-resort location aliases for country resolution
  • fixdeploy.shwait for docker healthcheck, not a fixed 25s window
  • featworkercron enrich candidate country/city from GitHub profile location
  • featworkercron backfill of candidate country from city
  • fixfl.ruparse project titles, not the "Откликнуться" button
  • fixdedupATS /apply URL tail collapsed all of a company's jobs into one key
  • featdbdrop duplicate role trigram GIN index (migration 095)
  • featworkerunblock event loop in companies.py registry imports
  • featdbindex vacancies.source_url + categories (migration 094)
  • featscraperEU defense Workday feeder (defense.* vertical) + clearance gate

Неделя с 6 июля 2026 г.

51 новых7 исправлений
  • featssrcache /research/** pages + raise SSR cpu 0.5->1.0
  • fixgeodisambiguate Georgia (US state vs country) — Atlanta/GA->US, Tbilisi->GE
  • featsourcingrandom page-offset for sustained pool growth (orgs+repos)
  • featsourcing+AI/ML talent layer via GitHub (huggingface/openai/deepmind/... orgs+repos)
  • featsourcing+core repo-contributors layer (cpython/go/rust/postgres/node/... core devs)
  • featcandidates-uiCIS/EE prime-relocation filter chip (tag=cis_relocation)
  • fixcandidatesgithub source filter also matches github_org (expert-org sourcing)
  • featsourcing+Open Source Foundation layer (python/rust/go/node/django/postgres/LF orgs)
  • featsourcing+Open Collective maintainers layer (admin github links)
  • featsourcing+GitHub Sponsors layer (top sponsorable maintainers via GraphQL)
  • featsourcingflag CIS/EE-located expert candidates (cis_relocation category)
  • featsourcingexpert-org candidate layer (CNCF/K8s/Apache maintainers)
  • featPotentia parser — NZ IT-specialist recruiter (static HTML jCard grid)
  • featsurface contact_linkedin in Companies BD table (764 populated, was API-only)
  • featpre-push lint — WorkerTask.scrape_fn_name must resolve on scraper package
  • fixre-export 5 more silently-dead parsers (betsson/celestar/konnekt/netbet/winamax)
  • fixre-export scrape_seek_nz/scrape_seek_au in _main.py (dispatch was failing)
  • featsurface AEWV visa_accredited in Companies BD page (filter + badge)
  • fixregister task_nz_visa_accreditation in functions list (enqueue-able)
  • featAEWV visa-accreditation enrichment for NZ companies (relocation filter)
  • fixReddit fetch — Arctic Shift primary (fresh), correct /api/posts/search path
  • featrevive Reddit scraper as active parser + add NZ subs + freshness guard
  • featNZ VC-portfolio companies feeder (141 startups from Icehouse/GD1/Movac/Punakaiki/Pacific Channel)
  • featNZ insurtech companies feeder (Ando Insurance, Delta, Initio, Montoux, Fidelity Life, +Quashed/Tower enrich)
  • featNZ fintech companies feeder (Sharesies, Harmoney, First AML, Akahu, +9)
  • featNZ SaaS-layer companies in nz_named_tech feeder (Xero, Pushpay, Serko, Datacom, Kami)
  • featNZ named deep-tech employer feeder (Halter, Tracksuit, Rocket Lab, Dawn, Soul Machines, Seequent)
  • featAWS Partner Network NZ-office companies feeder (finder API cracked)
  • featadd cloud/AWS terms to tech_stack (cloud-role detection lens)
  • featAuckland (SmartRecruiters) + Waikato & Victoria (Oracle ORC) vacancy parsers
  • featUniversity of Otago (Taleo) + Canterbury (PageUp) vacancy parsers
  • featLIKTA (LV) + INFOBALT (LT) IT-association member feeders
  • featCV.ee (CV-Online Estonia) job-board parser (same CV-Online API)
  • featCVonline.lt job-board parser (same CV-Online frontend API)
  • featCV.lv (CV-Online Latvia) job-board parser via frontend JSON API
  • featCVbankas.lt job-board parser (Lithuania IT vacancies)
  • featLithuania LPT + Latvia IAUI gambling-operator feeders
  • featPoland licensed-bookmaker seed (companies registry)
  • featCzech MF legal gambling-operator feeder (XLSX, stdlib-parsed)
  • featBelgium + Estonia gambling-operator feeders (companies registry)
  • featEstonia MTA gambling-operator feeder (companies registry)
  • featNetherlands KSA licensed-operator seed (companies registry)
  • featGreece HGC licensed-operator feeder (Playwright, SharePoint register)
  • featadd Armenia licensed operators to CIS-hub seed
  • featGeorgia RS gambling permit-holder feeder (companies registry)
  • featSerbia UIS licensed gambling-organizer feeder (companies registry)
  • featCIS-relocation hubs named seed (Caucasus/Balkans iGaming+IT)
  • featRomania ONJN licensed-operator feeder (Playwright, JS anti-bot)
  • featGermany GGL whitelist online-operator feeder (companies registry)
  • featPortugal SRIJ licensed-operator feeder (companies registry)
  • featDenmark (Spillemyndigheden) + Italy (ADM) licensed-operator feeders
  • featSpain DGOJ licensed-operator feeder (companies registry)
  • fixrevive web3career via token-free JSON-LD (was dead since 2026-04-11)
  • featSEEK region-slicing to bypass ~490/query API cap
  • featSEEK AU/NZ job-board feeders (open search API)
  • featadd NZ Crown Research Institutes shared Workday to harvester
  • featiGaming operator + Malta job-board ATS feeders (NetBet, Winamax/WTTJ, Konnekt, Betsson)
  • featcompanies registry expansion + enrichment pipeline + MGA/iGaming feeders + interview scheduling

Неделя с 29 июня 2026 г.

45 новых17 исправлений
  • featcompaniesiFX EXPO exhibitors via Swapcard SSR enumeration (+69)
  • featcompaniesfloorplan.live financial editions (31->37, +431)
  • featcompaniesexpand floorplan.live shows 6->31 (+2318 companies)
  • featcompaniesiGaming Business directory feeder (~963 companies)
  • featscraperVideoslots/Immense Malta iGaming careers (FlareSolverr)
  • featatsJobvite ATS support + LeoVegas Malta (73 jobs, 19 in Sliema)
  • featatsMalta iGaming ATS discovery layer + Malta country resolver
  • fixtgcold-channel catch-up window — stop 3h cutoff dropping day-old posts
  • fixtground-robin catch-up so cold/non-joined channels stop starving
  • featigamingTeamtailor scraper for Malta Tier-2 (EveryMatrix+SoftSwiss)
  • fixtg-recheckre-arm proven-readable inactive channels (were stuck forever)
  • featats-pollinactive_q 20->5 to speed active-board rotation
  • fixats-polllower max_poll 80->40 to fit the 600s task timeout
  • fixats-polldisable Phase A Google-dork discovery (was timing out the whole poll)
  • fixats-pollpoll unchecked slugs before active to end time-starvation
  • featleverEU-instance fallback in _fetch_lever_jobs
  • featalertsserver-side watchdog for research cache warm
  • fixresearchbackground cache-warm cron to fix /research/* SSR timeouts
  • featcrypto-layereToro (Comeet) + Deriv (Zoho Recruit) scrapers
  • fixworkableresolve country from flat top-level city/country
  • featcycypruswork.com board (466 IT) + CySEC on daily cron
  • featcyjobsinforex.com forex board + CySEC register company feeder
  • featcyitjobs.cy Cyprus IT board (public Azure JSON API)
  • feattgseed 3 verified-live Cyprus job channels (cyprusit/jobsincyprus/igamingjobs)
  • featvacanciesdenormalized best_match_score column — sub-second top-match feed
  • fixvacanciesraise exclude_status max_length 50->120 for active-feed list
  • featvacanciesactive-feed partial index + exclude archived/duplicate from Все
  • featvacanciesmatches(vacancy_id,score) idx — top_match_score sort 52s->5s
  • fixmatchbulk matcher excludes non-IT pool vacancies (track='it')
  • featvacanciesnon-IT talent pool (track column) + 3-way routing
  • featsgadd OCBC (Workday, all markets) to bank harvest
  • featsgfoundit.sg job board via JSON middleware API
  • featcrondaily named-employer harvest (Standard Chartered + DBS/UOB)
  • featsgStandard Chartered harvest (SuccessFactors, Taleo retired)
  • featatsRevolutPeople adapter (Aspire) + SG-fintech backfill
  • fixscraperjobsdb append site-country to city so SG resolves
  • featscraperjobsdb Singapore via sg.jobstreet.com SG-Main
  • fixscraperstrip Adzuna recruiter-code prefix from company name
  • featadminclickable company links on vacancy detail + matches page
  • featadminclickable company links everywhere -> /companies?q=<name>
  • featpublichome title -> Global Tech Labor Market Map 2026
  • featsgDBS/UOB bank Workday harvest -> SG IT vacancies (matchable)
  • featsgpoll Quant/HFT boards with primary_role+stack -> matchable (383 vac)
  • featsgQuant/HFT ATS slugs — Jane Street/IMC/Tower/Jump (+5)
  • fixatsset primary_role at insert in task_ats_smart_poll persist
  • fixvacanciesbackfill primary_role on ATS-sourced vacancies (8100)
  • featsgSea Group/Shopee SG harvest — 460 SG IT via workatsea ATS
  • featsgTikTok Singapore harvest — 640 SG IT vacancies (joinbytedance API)
  • featsgAmazon Singapore harvest — 105 SG IT vacancies
  • featsgpersist AI Layer ashby boards (openai/snowflake/cohere) — 1021 jobs/31 SG
  • featsgGovernment Tech harvest — PublicServiceCareers Workday (556 SG IT vacancies)
  • featsgAI Layer ATS slugs — OpenAI/Cohere/Snowflake (ashby) +3
  • featsgSmartRecruiters SG company harvest via SPA-search intercept (+32)
  • featsgATS web-dork round 2 (ai/ml + banking/payments) — +22 slugs
  • featsgseed 16 SG/fintech/crypto/quant ATS slugs via web-dork search
  • fixatsreserve discovery slots in poll budget — never-checked slugs no longer starve
  • featsgpoll_startupsg_ats — persist the 12 discovered ATS slugs' jobs
  • featsgconcurrent ATS bridge over startupsg sites — 12 live slugs
  • feattg+jobs_NFT global web3 channel; remotejobss/remotedevjobs in SEED
  • featsgSG tech-company GitHub orgs -> candidate contributors
  • fixby-loaderCyrillic-aware name_norm (companies.normalize_name nukes Cyrillic)
  • fixfrontendcountry filter dropdown — add SG/HK/TH/IN/SEA + CIS/Baltics geos

Неделя с 22 июня 2026 г.

47 новых32 исправлений
  • featsgA*STAR vacancy parser (SuccessFactors API, ~647 deep-tech roles)
  • feattg+9 live SG job/tech channels (sgtechcareers/techinsg/sgcryptojobs/...)
  • feattg+3 live SG dev-communities (nushackers/singaporejs/datasciencesg)
  • featsgATS bridge — SG companies w/ website -> ats_companies (discovered_via=sg_companies)
  • feattg+8 live Singapore job channels (itjobssg/sgcareers/sgdeveloperjobs/glints...)
  • fixsg-meetupsocial-group filter in loader + restore full harvest JSON + guide
  • featsgMyCareersFuture parser (gov.sg job portal JSON API)
  • featgithub-sourcingadd Singapore to candidate location matrix
  • fixstackoverflowhtml-unescape location + docs(hk) SO revived / Kaggle blocked
  • fixstackoverflow-sourcingdrop stale SE API filter (was 400 -> 0 candidates)
  • fixctgoodjobsstrip <strong> highlight tags from job titles
  • feathkCTgoodjobs + cpjobs parsers (JSON APIs, plain HTTPS)
  • featgithub-sourcingadd Hong Kong to candidate location matrix
  • fixjobsdbswitch to SEEK jobsearch JSON API (HTML path Akamai-dead)
  • feathkATS bridge (companies->ats_companies) + 2 live HK TG channels
  • fixhk-loaderresolve JSON dir from /app/config (container) with fallbacks
  • fixtgmark permanently-dead usernames dead in resolver (was infinite churn)
  • fixoutreachdynamic source dropdown in Companies registry
  • featoutreachcountry-breakdown widget on Companies page
  • featoutreachVARA crypto-licensee feeder into companies table (Alina admin)
  • featuaedetect SmartRecruiters in careers resolver + poll-loop branch
  • fixuaelocal import random shadowed module-level in dork discovery
  • featuaebroaden ATS-discovery to all IT verticals + raise cap 300->800
  • fixats/srcap 40 postings/board + sleep 0.3->0.1 — fit 120s budget
  • feathhwire OAuth client_credentials scaffold (revive prep)
  • featgeoworld-cities completeness pass (~95 cities)
  • featgeoadd Balkan/Baltic/CEE cities to country resolver
  • featgeoadd Caucasus/Central-Asia/CIS cities to country resolver
  • fixjustjoinrewrite for v2 paginated API (was 0 fresh)
  • featats/sr+KSA SmartRecruiters boards (fenix/jisr/noonacademy)
  • fixats/oracletighten IT gate + add KSA tenants
  • featatsOracle Recruiting Cloud parser for Gulf enterprises
  • featatsadd MENA SmartRecruiters boards for UAE vacancy harvest
  • featcompanies+Hub71 directory — 316 Abu Dhabi startups (301 with websites)
  • fixscrapeset timeout=5400 on cron(task_scrape_all) — cron ignores func() timeout
  • fixcompaniesplain loading state (TableSkeleton needs SkeletonColumn[])
  • fixcompaniesTableSkeleton columns prop
  • featcompaniesRegistry tab on /companies — persistent registry for Alina (MVP 0e)
  • fixcompaniessurging only on real growth from non-zero baseline (not first-run artifact)
  • featcompaniescollect+monitor service + admin API + worker cron (MVP 0b-0e backend)
  • featcompaniesmigration 082 + Company model — collect+monitor employers (BD MVP)
  • featuaeATS-discovery Gulf/fintech/crypto dorks + 13 verified UAE/MENA TG channels
  • fixworkerfreshness decay timeout 120→300 — kills self-deadlock
  • fixparsertrudvsem — percent-encode Cyrillic query (ascii codec crash dropped 4 queries/run)
  • fixscraperaise task_scrape_all timeout 60→90min + lower greenhouse cap 40→20
  • fixpubliccookie banner no longer overlaps page content
  • fixseoapply difficulty supply-floor to role report pages (tab/page consistency)
  • fixseodedup duplicate Product Manager role (remove product-manager-2)
  • fixseodifficulty tab — supply floor + anchor-fix platform/data-architect
  • featseo+5 roles out of no_data — pool-side anchor-wins + fullstack AND-logic
  • featseosupply_anchors — pull 12 dev-roles out of no_data without inflating demand
  • fixsalary-explorercompact difficulty table on narrow phones
  • featsalary-explorerpre-warm roles-difficulty cache on startup
  • featsalary-explorerhiring-difficulty tab (easy <-> hard to fill)
  • fixsalary-explorercrash on null-salary roles + searchable role dropdown
  • featparserjobs.ge — Georgia IT board (P3, fills Caucasus gap)
  • fixseorole index gate uses stable content-floor, not decaying score
  • featp2persist employer company on web+ATS vacancy insert
  • fixgeoATS insert path resolves country at parity with web (P1.2)
  • fixpublichome-stats counts only status=open vacancies (G5 honest headline)
  • featparsers+1 source — Landing.jobs (Portugal/EU tech, public JSON API)
  • featsourcing+1 candidate source — DEV.to active dev-bloggers (public Forem API)
  • fixparsersBrighterMonday — page 1 uses bare URL (?page=1 serves card-less page)
  • featparsers+2 sources — Techcareer (Turkey IT) + BrighterMonday (Kenya/East Africa IT)
  • featparsers+2 sources — TopDev (Vietnam IT) + Hirist (India IT)
  • featparsers+5 sources (Staff.am, Bulldogjob, Wuzzuf, golang.cafe, Workable) + eJobs dept 58
  • fixparsersGlints — drop FlareSolverr, direct GraphQL POST works from server IP
  • featparsers+2 sources — eJobs.ro (Romania IT API) + Glints (SEA GraphQL via cf-harvest)
  • featparsers+1 source — Kalibrr (SEA tech, public JSON API)
  • featparsers+2 sources — Get on Board (LatAm JSON API) + python.org Jobs RSS
  • featparsers+5 sources — Recruitee ATS (+dynamic discovery), DEV.bg, HelloWorld.rs, MyJobMag, Programathor
  • featsources+7 Adzuna country feeds — breadth expansion (#9 track 1)
  • featgeodata-driven country index-gate — the geo-page system (TZ Фаза 1)
  • fixmatchercanonicalize stack aliases in _norm_stack (#6b)
  • featgeocountry_source provenance column (migration 080) — TZ_GEO_AXIS Phase 0
  • featseoSalary Explorer /research/salary-explorer — compare + calculator (closes visual-layer program)
  • fixseouse locative country name in per-country salary page copy
  • featseoper-country salary pages /research/salaries/country/{slug} (Фаза 3)
  • featresearchsalary trends by country & stack (Фаза 4 visual layer)

Неделя с 15 июня 2026 г.

26 новых19 исправлений
  • featcontactpublic /contact page (lead form + channels + people + legal)
  • fixswstop intercepting navigations (v3)
  • fixswbump cache to v2 + stop precaching apex '/'
  • feathomeapex / is the public landing (auth-aware RootGate)
  • feathomepublic landing at apex / (company, charts, directions, terms)
  • featblogpublic founder-voice /blog (config-driven, SSR, SEO)
  • fixcacheno-cache on index.html so deploys reach cached browsers
  • fixrssimport PUBLIC_BASE in rss_feed (NameError 500)
  • fixrole_clause else-branch was self-clobbered by the replace pass
  • fixadd cross_role param to _compute_sub_pool_stats signature
  • fixssrhydration mismatch from raw </> in methodology text
  • fixssrhydration mismatch (React #418) on research pages
  • featapplycandidate value-prop block on /apply (lemon takeaway #5)
  • fixcrypto.jobsderive title/company from SEO slug
  • fixcryptojobslistparse __NEXT_DATA__, fix source label
  • fixalertsdistinct dedup key for never-yield alert
  • fixdevbyvacancies moved to jobs.devby.io subdomain
  • featseonoindex aggregated job-detail pages + drop them from sitemaps (SEO #5)
  • featseofooter Research column → link unique research pages site-wide (SEO #4)
  • featseosegment sitemap into core (unique) + jobs (low-prio) — SEO #3
  • feathrshow full candidate profile on 'Мои заявки' cards
  • fixparserbump Telethon 1.43.2 → 1.44.0 (TypeNotFoundError on new TG schema)
  • feathr«Мои заявки» screen for HR — requested candidates + approved contacts
  • feathrscoped HR-trial accounts + screen for sales_lead
  • featrbacallow sales_lead to approve/deny intro requests (_DECIDE_ROLES)
  • featuxtoast instead of alert + bulk template preview in outreach queue (backlog #8)
  • fixcandidateslog_action called with positional user/action → 500 on tag + interactions
  • featuxone-click contact logging in candidate panel (Alina backlog #7)
  • featuxbulk export contacts (clipboard + CSV) from candidate list (Alina backlog #6)
  • featrbacallow assigning sales_lead via user admin API (_ASSIGNABLE_ROLES)
  • featrbacscoped sales_lead role for Alina — trimmed menu, least-privilege
  • featuxlast-contact badge in candidate list + contacts in outreach queue (Alina Tier-2)
  • featuxone-click copy-contact + write-in-TG from match (Alina Tier-1)
  • feathrauto-reveal contacts to HR on approved intro request
  • featpublic"Откликнуться" CTA on job cards in the /jobs list
  • feathradmin queue for intro requests + clean HR nav
  • fixhrintro-status banners rendered \u escapes as literal text
  • feathr"Запросить интро" button in candidate detail for hr role
  • feathrLevel 2 — "request intro" flow + admin manual gate
  • feathrhr role — masked, default-deny candidate view for free HR test
  • fixhndecode HTML entities + derive candidate name from résumé/LinkedIn URL
  • featvacanciesboard filter — hide un-matchable low-info vacancies
  • fixmatchescalibrate score-band labels to real distribution
  • fixcandidateslinkify candidate source to real profile URL
  • fixmatcherpass B calibration — relax confidence + stack-coverage caps

Неделя с 8 июня 2026 г.

37 новых15 исправлений
  • featdiagnostic§E rewrite engine — actionable alternatives
  • feattaxonomydomain_cluster=web3 — orthogonal domain axis (#2 Web3 audit)
  • fixparserspopulate apply_url for jobstash/jobhive (Web3 contact gap)
  • feat+26 substring-safe web3 tokens + non-blocking github restack
  • featsourcing+11 verified crypto-company ATS slugs (Web3 vacancy expansion)
  • featsourcinggithub restack backfill — deepen existing thin candidate stacks
  • featresearchverified-supply block on public /research/{slug} pages
  • feattaxonomywire P0 AI/LLM + DataEng dictionaries (niche review)
  • featprecision-gategated supply on /api/candidates (mirror of /api/vacancies)
  • fixsourcingdeepen github candidate stack from repo topics + description/name
  • fixenrichexpand stack→roles map for CIS stacks (1C/Bitrix/analyst/devops/ml literals)
  • fixenrichstack→roles for sourced candidates regardless of description gate
  • featanalyticsowner collection-overview dashboard — daily intake by direction
  • featadmingated-supply panel on dashboard (Главная)
  • featadmin/api/analytics/gated-supply endpoint (precision-gated supply per cluster)
  • featsourcingadd P0 AI/LLM queries to GitHub matrix (HF probe was negative)
  • featsourcingadd P0 Data queries to Habr Career matrix (CIS data engineers)
  • featsourcingadd P0 (DevOps/Data/MLOps) queries to GitHub matrix
  • featprecision-gatesplit supply counters broad/gated (dashboard + top_match) (1a)
  • featprecision-gategate bot /hot /matches /status + add gate_sql helper (1a)
  • featprecision-gategate the has_hot_match vacancy toggle (1a)
  • featprecision-gatewire gate into /api/matches (1a)
  • featprecision-gatedemo/supply eligibility layer (separate from matcher)
  • fixdata-clusterenrich _STACK_ROLES + classifier Data direction
  • fixmatcheradd data tokens to rematch _DIRECTION_KEYWORDS pre-filter
  • fixmatcherdrop clickhouse from data tokens (false-positive fix)
  • fixmatcheradd data direction to stack fallback (DataEng unlock)
  • featreedadd transformation queries (REED_TRANSFORMATION_QUERIES)
  • featadzunaadd transformation queries without it-jobs category
  • featnicheexpand _TRANSFORMATION_TERMS (~40 -> ~80 phrases)
  • featnicheTransformation / Change Management toggle on vacancies + candidates
  • fixssrexclude cache-warmer renders from render stats
  • featssrcache warmer keeps public job-list slots perpetually hot
  • fixssrcache English pages + add jobs-list to SSR cache
  • fixhydrationuse createRoot for non-SSR shell to kill React #418
  • fixcsprefresh stale script-src hashes for Metrika + theme inline scripts
  • featsalesPDF buttons in SalesCandidatePanel (client / full)
  • fixmatcherconfidence denominator stack+role (65), not +grade (80)
  • fixdiagnosticdefensible supply sensor — no false No-supply (v1.1)
  • featpublichiring-check CTA on vs-competitor pages (distribution)
  • featpublichiring-check CTA on employer research pages (distribution)
  • featdiagnosticconfirmed outcome capture on proof page (§K learning loop)
  • featpublichiring-check in header nav (distribution)
  • featemailinbound IMAP sync — phase 2a backend foundation
  • featemailsend outreach suggestion via email (phase 1b)
  • featemailoutbound SMTP send — config + test (email-sync phase 1)
  • feat2fafrontend — login 2FA step + /security enroll/disable page
  • featauthopt-in TOTP 2FA — backend (migration 074 + endpoints + login gate)
  • featdiagnosticlearning loop — feedback capture + repeat_request outcome (layer 3)
  • fixdiagnostictransition_rate = reached_new / viewed (was reached/forwarded → >1)
  • featdiagnosticForward Rate metrics — endpoint + admin page (layer 2)
  • featpublicHiring Reality Check lead-magnet form (/hiring-check)

Неделя с 1 июня 2026 г.

31 новых17 исправлений
  • featdiagnosticpublic one-page proof /p/{token} + proof_views/forward tracking
  • featdiagnosticvacancy text parser + POST /api/diagnostic/parse
  • fixstabilityconsilium top-3 — fail-soft taxonomy loader, guard int() bulk, rate-limit diagnostic
  • fixdiagnosticsupply stack-filter bypass — compute min_match in Python
  • fixdiagnosticasyncpg param types — split cost SQL (grade/any), CAST stack to jsonb
  • featdiagnosticVacancy Diagnostic MVP — cost/supply sensors + POST /api/diagnostic
  • fixcountrydetect_country_from_text returns None not 'EN' sentinel
  • featsignalsPhase 4 — github contributors of target repos (source #3, stacking)
  • featsignalsPhase 3b — candidate-signals sales page (Alina's shortlist)
  • featsignalsPhase 3a — candidate-signals sales API
  • featsignalsPhase 2 — crates.io Rust/crypto maintainers (source #2)
  • fixsignalscatch concatenated <pkg>bot release accounts (turbobot/vitebot)
  • fixsignalscatch release-robots + org/role mailboxes (ioredis-robot, fb/opensource@)
  • fixsignalspackage-author identity = personal email, not repo/org github
  • fixsignalsdrop bot/org accounts from package-maintainer mining
  • featsignalsPhase 1 — npm/PyPI maintainers -> candidates + candidate_signals
  • featsignalsmigration 071 candidate_signals — proof-of-work talent graph
  • fixashbypoller used dead GraphQL endpoint → swap to REST posting-api
  • featalertsdata-driven dead-source detection (P3) — catch silent parsers
  • fixschemasmake nullable-in-DB fields Optional — stop list-endpoint 500s
  • featcandidatessource filter prefix-matches per-login sourcing families
  • featcandidatesweb3 filter toggle — surface the web3 "hidden market" for Alina
  • featruForkLog HUB (WP-JSON) + gorodrabot (HTML) crypto boards — pre-consilium
  • featsourcingtask_habr_sourcing — RU candidates from Habr Career
  • featsourcingHabr Career candidate parser (RU resumes) — WIP module
  • featfilter«💴 Цифровой рубль / CBDC» toggle on vacancies + candidates
  • featnichefindweb3 board via Next.js __NEXT_DATA__ + add to crypto toggle
  • featgetro+jobs.bnbchain.org ecosystem board (collection 3788, 82 jobs)
  • featsourcingexpand GitHub candidate matrix from web3-only to all stacks
  • featvacanciescrypto_only filter + admin "Крипто-источники" toggle
  • fixconsiderkeep only pantera-capital (crypto-pure), drop paradigm-xyz
  • featconsiderscrape crypto-VC boards via Consider public API (paradigm/pantera)
  • featgetro+jobs.jumpcrypto.com board (collection 20916, 253 jobs/27 cos)
  • featgetroscrape ~11 web3 ecosystem+VC boards via one public API parser
  • featrsscryptocurrencyjobs.co via FlareSolverr (Cloudflare-gated, 75 items)
  • fixrssdrop hireweb3 feed — needs headless, urllib gets 0 items
  • featrssadd 3 verified web3 RSS feeds (remote3, jobicy-blockchain, hireweb3)
  • featpublicadd required dofollow Remote OK backlink to footer
  • fixscrapededupe ATS WorkerTasks — were registered twice (double-scrape)
  • fixdeploydon't abort on transient empty-#root smoke flake
  • featadminadd Blockchain/Web3 to candidate/vacancy direction filter
  • fixsourcingnever insert NULL country (CandidateResponse requires str)
  • featsourcingcountry-name fallback for github candidate locations
  • fixsourcingcorrect roles + country mapping for github candidates
  • fixsourcingincremental per-query persist (durability + cron-timeout-safe)
  • featsourcingGitHub web3 candidate sourcing (ToS-safe, authenticated)
  • featscopecrypto_slugs run #3 — +6 verified crypto cos from CoinGecko top-600
  • featparserregister Phase-2 ATS-direct + non-IT filter for greenhouse/lever

Неделя с 25 мая 2026 г.

48 новых31 исправлений
  • fixscraperactually wire is_nav_label into dou/superjob (c2b2fa3 only added the dead helper)
  • fixscraperdrop site-nav labels from dou/superjob titles
  • fixingestblocklist 24 non-IT junk TG chats/birzhas in _process_single_message
  • fixingestdrop crypto-P2P-scam posts at TG sink (junk-filter)
  • featscriptsBench B — Other-reclassify backfill + harvest loop
  • featclassifierBench B — generic-IT title recovery (Other-only recall)
  • featscopePhase 2 expansion — +14 crypto cos, smartrecruiters parser, drop conflux FP
  • fixparserdrop speculative 'open application' posts from web3 sources
  • fixjobstashannual->monthly salary normalization (B5 salary bug)
  • featparserPhase 2 step1 — ashby ATS ingest for crypto scope slugs
  • featscopePhase 2 — CoinGecko crypto-company ATS slugs for greenhouse/lever
  • featparserB5 — jobstash crypto-native consumer + share non-IT role gate
  • fixjobhivedrop non-engineering business roles from web3 gate
  • featparserB4 — add web3 queries to hh.ru parser
  • fixparserB3 jobhive — title-only web3 filter (precision-first)
  • featparserB3 — jobhive ATS aggregate consumer (crypto/web3 subset)
  • fixparserB1 gap — add *-engineer blockchain core variants
  • fixscriptsrestore assign_channels.py — was syntax-corrupted in git
  • featparserB2 — add 26 Web3/blockchain TG channels + retag @web3hiring
  • featparserB1 — recognize Web3 stack + enrich Blockchain classification
  • fixgrafanafixed Y-axis max on dashboard panels (err_rate 0-1, pool 0-100)
  • featsecuritylogin timing-defense + noindex API docs (P2 #5)
  • fixuitheme-independent ErrorBoundary fallback colors (P2 #3)
  • featresearchempty-state guard in Bar/HorizontalBar charts (P2 #2)
  • featalertsbackend exception-rate check (P2 #1)
  • featalertsshell+cron+Telegram reliability alerts reading docker logs (P0#6/P1#2/#7)
  • featseodaily seo_health_check cron wrapper + Telegram alert (P1 #8)
  • fixobservabilitydb_pool_stats at WARNING so it reaches logs (P1 #7 follow-up)
  • featobservabilityperiodic web DB-pool utilization metric (P1 #7)
  • featapirate-limit expensive public endpoints + docker whitelist (P1 #6)
  • featresearchRedis-backed shared cache for research aggregations (P1 #5)
  • featssr+dbSSR fetch timeout + per-request statement_timeout (P1 #4)
  • featssr404 for ghost job/research entity routes (P1 #3)
  • featssr503+X-SSR-Degraded on render error + render-stats to Loki (P1 #1+#2)
  • featpre-pushfrontend typecheck gate, only when frontend/ in push (P0 #1 mac-side)
  • fixdeployper-route retry + spacing in playwright smoke (P0 #5 follow-up)
  • fixdeployrobust smoke retries + correct nginx-proxy restart (P0 #2 follow-up)
  • featresiliencechunk-load self-heal + telemetry to Loki (P0 #6)
  • featdeployPlaywright headless post-deploy smoke (P0 #5)
  • featssrnamespace Redis cache keys by BUILD_ID (P0 #4)
  • featssrboot-time integrity gate — 503 refuse-to-serve on bad build (P0 #3)
  • featdeployatomic deploy_frontend.sh — restart ssr + browser-smoke (P0 #2)
  • featdeployvalidate_frontend_build.py — build-integrity gate (P0 #1)
  • featscorecardsinterview scorecards UI in candidate detail (Sprint 18/19)
  • featscorecardsinterview scorecards CRUD (Sprint 18/19) — backend
  • fixscreeningapply endpoint used user.email (no such attr) → user.id
  • fixscreeningtoast kind 'ok', drop TableSkeleton (cards), var(--primary)
  • featscreeningAI Screening workspace page (Sprint 19 — C+A+B frontend)
  • featscreeningexpose AI screening on match API + apply-to-candidate endpoint
  • featscreeningdeterministic visible-AI-screening engine (Sprint 19, core)
  • fixfounderbyline was stale "draft under review" on published essay
  • featfounderpublish D8 essay — flip from staged to public (D1 distribution)
  • featfounderweave first-person conviction into D8 essay Frame (Graham passed)
  • featfounderD8 reasoning-first essay SSR page (STAGED noindex)
  • feattgclassify TG vacancies at insert (primary_role + consistent direction)
  • fixworkerfall back to legacy direction for primary_roles with no taxonomy page
  • fixworkerderive vacancy direction from primary_role at web-ingestion
  • featsecurityweekly SCA via VPS cron — pip-audit + npm audit (A5/S28.3/D61)
  • fixbackupB2 off-site push failed silently under cron (PATH) — A4/S28.2/D60
  • featprivacyhonest analytics §7 + /privacy/cookies page + webvisor off (A3/S28.1/D59)
  • fixclassifierrescue scores stack-only, not description prose
  • featclassifierstack-signal rescue for min_core-gated "Other" rows
  • fixpublicstrip t.me/domain links from public vacancy text (A+ catch-all)
  • fixclassifybackfill vacancy direction from role-classifier when classify_direction is None
  • fixworkertask_auto_match matches recent entities (30-min fresh matches)
  • featmatches«Свежие матчи» preset for the sales work queue
  • featuiS20.1 CardSkeleton on Analytics + DealKanban (D53, HB#4 Step 4)
  • featdemodemo_viewer PII-masked role + central default-deny guard (D38, HB#4 Step 3)
  • fixchangelogdrop superseded legal identity from public changelog
  • featchangelogpublic /changelog SSR page auto-from-git (D55, HB#4 Step 1)
  • featanalyticsTalent Source radar from CV work-history (S14.1)
  • featscriptsbackfill_prior_employments — enrich existing candidates (S14.1)
  • fixstorageaccept RTF content under application/msword (.doc uploads)
  • featparserwork-history extraction (S14.1) — candidates.prior_employments
  • fixscraperNULLIF guard so grade-enrichment never writes empty string
  • fixparsernormalize resume grade to lowercase canonical form
  • fixparserad-CTA junk filter no longer drops vacancies with «Пишите @recruiter»
  • feati18nLatin display alias «1с»→«1C» for EN tech lists
  • fixpublicrate-limiter bucketed on docker peer IP → site-wide empty-state