Журнал изменений
Что мы выпустили — автоматически из истории коммитов, обновляется еженедельно.
Неделя с 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