Skip to content

[pull] master from diygod:master - #75

Open
pull[bot] wants to merge 3536 commits into
workoho:masterfrom
DIYgod:master
Open

pull[bot] wants to merge 3536 commits into
workoho:masterfrom
DIYgod:master

Conversation

@pull

@pull pull Bot commented Jun 3, 2026 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

@pull pull Bot locked and limited conversation to collaborators Jun 3, 2026
@pull pull Bot added ⤵️ pull merge-conflict Resolve conflicts manually labels Jun 3, 2026
pseudoyu and others added 25 commits October 31, 2026 14:14
A Threads profile with no posts (for example @apple) still embeds its
timeline as "mediaData":{"edges":[]}, but the route threw "Failed to
fetch thread data" whenever it found no thread items, so these profiles
answered 503 just like a username that does not exist. Throw only when
the timeline data is missing, and return the empty feed otherwise, as the
search route does since 965b548.
The `replies` option has done nothing since f936581 moved the route
from the GraphQL threads and replies queries to the profile HTML, which
only carries posts. Read https://www.threads.com/@<user>/replies when the
option is set, and document its real default, false, which it has
always had in code.
The SUUMO, LIFULL HOME'S and アットホーム 賃貸 / 売買 routes that follow all
emit one `_extra`, ResidentialExtra, so a consumer can store, filter and match
their items without per-site code. It lives under suumo because SUUMO is the
first of them, as the shop listing contract lives in temposmart/utils.

Unknown is null, never 0, and site text is kept in `raw` under stable keys.
Only `property_kind` is an interpretation, and only of the site's own 種目
label. `listed_at` comes from 情報公開日 alone, never from an update date, and
`built_ym` needs a full 年月, so 築N年 stays null. 敷金 and 礼金 land in the
months or the yen column, whichever form the site used; only an explicit 無 or
なし becomes 0 in both, and 「-」 stays null because SUUMO prints it both for
none and for not stated. A building height written with a basement
(「RC14階地下1階建」) reads as 14, not 1.

residentialItems turns list units into items. List values are read fresh on
every poll and win, and only the detail-page fields are cached per listing, so
a price change shows on the next poll rather than after the cache expires. A
detail page with no labelled field (a challenge or an error page served with
200) is never cached, and `maxFetches` caps the uncached detail pages one run
may request, for sites that refuse a client after a handful of requests.
/suumo/chintai/:pref/:city reads one 市区町村 area page in its own 新着順
(`po1=09`); the default おすすめ順 puts sponsored rooms first. The area pages
sort by themselves, so the /jj/ search paths robots.txt disallows are not
needed.

Each room row is one item, with the building's 種目, name, 所在地, 交通 and
階建 copied onto it. Each room's own page is then read once, three at a time,
for what the list does not show: 築年月, 構造, 契約期間, 保証会社, 損保,
取引態様 and 情報更新日. SUUMO publishes no 情報公開日, so `listed_at` stays
null and items carry no pubDate; `updated_at` holds the 情報更新日.

Radar hands the route the city as the page prints it (`sc_minato`), and it
ignores function targets, so the handler strips the prefix itself.
/suumo/ms/chuko/:pref/:city reads the area page in 新着・更新順
(`po=1&pj=2`), one item per property card. A card links to its unit several
times (photos, heading), so units are deduplicated on the nc_ id, and the
heading is the agent's catch copy rather than the building name, so it is not
read.

Each unit's page is read once for 管理費, 修繕積立金, 所在階, 構造・階建,
向き, 総戸数, 敷地の権利形態, 用途地域, 引渡可能時期 and the 情報提供日, from
the header block and the bdGrayT tables only: the inquiry form on the same
page carries labels of its own. The list's 所在地 wins over the detail's 住所,
which also holds a 「周辺環境」 link label.
/suumo/chukoikkodate/:pref/:city reads the same card layout as the
中古マンション list, which adds 土地面積 and 建物面積: `area_m2` is the
建物面積 and `land_area_m2` the 土地面積. Each house's page adds 構造・工法,
土地の権利形態, 私道負担・道路 and 建ぺい率・容積率, and a structure written
with its height (「木造2階建」) gives both `structure` and `floors_total`.
/homes/chintai/:pref/:city reads the area page in its own 新着順
(`cond[sortby]=newdate`), one item per room row of each building block, with
部屋番号 where the site prints one and the 定期借家 badge. The sponsored rows
at the top of the page sit outside the building blocks and are not read. Each
room's page adds 築年月, 構造, 総戸数, 現況, 入居可能時期, 契約期間, 更新料,
保証会社 and the 情報公開日, which becomes `listed_at`. 敷金 / 礼金 are quoted
in months for some rooms and in yen for others, and each stays in its own
field.

The site sits behind AWS WAF. On 2026-10-31 it answered plain requests with an
empty 202 and `x-amzn-waf-action: challenge` after about fifteen requests in an
hour, and again after about eight in ten minutes, lifting within the hour. The
route reports that as an error naming the challenge rather than as an empty
feed, and does not try to get past it. To stay under it, one poll requests the
list and at most five detail pages it has not cached, and stops requesting for
the rest of the run once the site has challenged it; items past that keep
their list fields until a later poll fills them in.
/homes/mansion/chuko/:pref/:city reads the area page in 新着順, one item per
unit row: 交通, 所在地, 構造, 階数, 築年月 and 総戸数 from the building block,
階, 価格, 間取り, 専有面積 and 主要採光面 from the row, and a 価格更新 note
when the price moved (`raw.price_updated`). The block prints 交通 and 所在地 in
one cell over two lines, which the shared label reader pairs line by line.

Each unit's page is read from its #about 物件概要 only, since the recommended
listings further down carry their own 住所 and 交通: 管理費等, 修繕積立金,
用途地域, 土地権利, 管理, 現況, 引渡し, and the 情報公開日 the page prints as
running text. The 賃貸 route's WAF budget applies. This route has not run end
to end against the live site: both attempts on 2026-10-31 met the challenge,
so its parsers were checked on pages saved from the site that day.
/homes/kodate/chuko/:pref/:city reads the area page in 新着順. A house block
has a single row, so each block is one item: 交通, 所在地, 建築年, 現況 and
主要採光面 from the block, 価格, 間取り, 土地面積 and 建物面積 from its row.
Each house's #about adds 建物構造, 接道状況, 都市計画, 用途地域, 建ぺい率,
容積率, 土地権利, 引渡し and the 情報公開日. The 賃貸 route's WAF budget
applies.
/athome/chintai/:pref/:city renders the list page in a browser, like
rent-store, and reads every room from its `#serverApp-state`: the building's
種目, 所在地, 交通, 階建 and 築年月, and the room's 階, 部屋番号 (about half the
rooms carry one), 賃料, 管理費, 敷金, 礼金, 間取り and 面積. 賃料 is a bare
number of 万円. The site's own list of listings of the same room by other
agents is kept in `raw.same_room_ids`, and the address is kept as the list
prints it, from the 区 on.

The page opens in おすすめ順 (sort 95), which left most of the 新着 rooms past
the item limit; `?sort=33` selects 新着順. The per-room pages are not visited:
one browser navigation per room is what gets a client refused.
/athome/mansion/chuko/:pref/:city reads the 売買 list from the same SSR state,
in 新着順. The site's title is the building name, the 部屋番号 or a floor, then
the 間取り, so it is split into `building_name` and `room_no` and a floor token
is dropped. Prices are bare 万円 numbers, including 「1,580」 and 「1億2,000」,
which would otherwise read as 1億 and 2,000円. For a condominium `tochiMs` is
the whole building's 敷地面積, so it goes to `raw.site_area`, never to
`land_area_m2`.

`property_type` is the page's own type. A unit labelled
「リフォーム・リノベーション」 keeps that label in `raw.syumoku` and as a tag,
the オーナーチェンジ flag becomes a tag too, and 表面利回り goes to
`raw.yield`. 管理費, 修繕積立金 and the 情報公開日 are only on the unit's page
and stay null.
/athome/kodate/chuko/:pref/:city reads the house list from the same SSR
state, in 新着順. For a house `tochiMs` is its own 土地面積, so it becomes
`land_area_m2`, and a 種目 more precise than the page's (中古テラスハウス) is
kept in `raw.syumoku` and as a tag.
…enewed

residentialItems cached each listing's detail-page fields with tryGet's
default, which renews the entry every time it is read. A listing that stays
on the first page is read on every poll, so its detail-only fields kept the
value of the first read for as long as it stayed there: SUUMO's 売買
管理費 and 修繕積立金, the 情報更新日, the 現況. A change to them never reached
a consumer.

Cache them for a fixed six hours instead. The list fields are still read
fresh on every poll, and at the default 20 items a page costs about three
or four extra detail requests an hour once the cache is warm, within the
five-per-run budget LIFULL HOME'S keeps.
collectPairs read a cell's text with only <br> as a line break, so
LIFULL HOME'S cells built from several <p> or <div> ran together:
情報公開日 read '2026/10/1616日前 公開' and 現況 '居住中実際に見てみたい無料…',
with the page's button text glued to the value. The dates only parsed
because HOME'S pads the day; an unpadded '2026/9/5' next to '3日前' would
have been read as the 53rd.

Put each block element (div, p, dd, li, …) on its own line. Inline markup
stays joined, so '<span>8,998</span>万円' is still '8,998万円' and
'40.41m<sup>2</sup>' still '40.41m2'. The breaks are inserted on the parsed
fragment rather than by a regex over the HTML, because HOME'S writes '>'
inside attribute values (data-action="click->…").

Checked on eight pages saved from SUUMO and HOME'S on 2026-11-01: every
SUUMO detail and list field is unchanged, and on HOME'S only multi-part
cells changed, each now one part per line.
… no name

residentialTitle fell back from the building name to the 種目, which is the
same for every item of a feed, so houses came out as '中古一戸建て 2LDK'
over and over: 10 of the 20 on SUUMO's 世田谷区 中古一戸建て page on
2026-11-01 have no 物件名. Use the address before the 種目, so each of them
is named by where it is.
parseHomesDetail always returned listed_at and updated_at, null when the
page had no date, so a detail page that yielded nothing still carried two
keys. residentialItems only refuses to cache a detail with no key at all,
so such a page was cached as the answer for the cache lifetime and the
listing kept its list fields only. This happened on 2026-11-01 with the
page HOME'S serves when several agents list one unit, which the route did
not read (fixed next).

Leave a date out when it is not found, so an empty page comes back empty
and is retried on the next poll.
…ne unit

The 中古マンション and 中古一戸建て routes read a unit's 物件概要 from #about.
When several agents list the same unit (「取扱う会社が N 社あります」), LIFULL
HOME'S serves an older layout without #about: the header block
(.mod-detailTopSale) carries 価格, 管理費等, 修繕積立金 and 情報公開日, and a
spec table (.mod-bukkenSpecDetail) the rest. On 2026-11-01 the 港区 unit
b-1548200003299 had moved to that layout, and the route read nothing from
it.

Read #about and those two blocks, and nothing else of the page: the
recommended listings further down carry their own 住所 and 交通. On that
page the unit now gets 25 fields instead of none, and the #about pages read
the same as before.
The 賃貸 route read label pairs from the whole detail page, first occurrence
winning. Its dialogs (#initial-cost-dialog and the like) sit outside #main
and carry labels of their own, so the right values only won because the
spec happens to come first in the document. Read #main instead. On a page
saved on 2026-11-01 it gives the same 31 fields with the same values as the
whole page.
All three LIFULL HOME'S routes sit behind the same AWS WAF, and the
中古マンション and 中古一戸建て routes already say so with antiCrawler: true.
The 賃貸 route said false.
The 賃貸, 中古マンション and 中古一戸建て feeds were titled by the city slug
alone ('アットホーム 賃貸 (minato-city)'), unlike the SUUMO and LIFULL HOME'S
feeds, which name both. Title them '(tokyo/minato-city)' the same way.
The 貸店舗 feed keeps its title, so its subscribers see no change.
The namespace still described アットホーム as 貸店舗・事業用物件 only, though
it now also carries the 賃貸, 中古マンション and 中古一戸建て routes.
When a listing has no photo, SUUMO's list shows a stand-in from its own
image server ('…/jj/resizeImage?src=gazo%2Fbukken%2Fsystem%2Fimg%2FDummy_Photo_021_132_99.jpg').
The routes passed it on as the item's image, so a reader showed the same
dummy photo for every such listing: 5 of 20 houses on the 新宿区
中古一戸建て page on 2026-11-01.

Add photoUrl to the shared residential module: it gives undefined for a
site's stand-in (Dummy_Photo, no-image) and resolves anything else against
the site, and the SUUMO 賃貸 and 売買 lists now read their photos through it.
…ve path

When a building has no photo, LIFULL HOME'S's list carries a relative
placeholder ('/search/assets/img/default/common/thumb/no-image_208x138.png?v=…')
in the building photo's data-original, and a unit with no photo of its own
falls back to it. The routes passed the relative path on as the item's
image, which no feed reader can load, and a consumer that checks for an
absolute URL rejected the whole item: 4 of 111 HOME'S items on 2026-11-01,
among them b-35007120000707 on the 港区 中古マンション page.

Read the building and unit photos through photoUrl: the placeholder gives
no image, and any other relative path is resolved against the site, as the
link already is.
…g name

When an agent gives no 物件名, SUUMO's 賃貸 list titles the building with its
first station, height and age, for example
'東京メトロ丸ノ内線 新宿三丁目駅 9階建 築46年'. The route read that as
`building_name`, so items were titled with it, and a consumer matching units
by building name merged different buildings that share a station (three
rooms under one such title had 築年月 1980-04, 1980-04 and 1981-08) while
missing the building's real listings elsewhere. 4 of 20 buildings on the
新宿区 page on 2026-11-01 had such a title.

Recognise the '<線> <駅>駅 N階建 築N年' (or 新築) shape, keep it in
`raw.site_title`, and leave `building_name` null, so the item is titled by
its address. Real names on the same page are unchanged.
DIYgod and others added 30 commits November 9, 2026 10:05
The video list API path shares one anonymous visitor cookie through
cache.tryGet, and every cache hit renewed its expiry. A busy instance reads
it hundreds of times an hour, so the cookie made at the 2026-11-07 deploy
served every request from then on, and Bilibili's risk control answered it
with -352 more and more often: the route's success rate fell from 60-90 %
on 2026-11-08 to almost 0 early on 2026-11-09. The upload search fallback
then got HTTP 412 and browser mode timed out after 20 s.

- Cache the visitor cookie for 30 minutes and do not renew it on use.
- When the video list API answers -352, make a new cookie, retry once and
  keep the new cookie for the requests that follow. Renew at most once a
  minute per instance (globalCache.claim), so that a risk control turning
  every cookie away does not cost three more requests per request.
- Stop renewing the cached WBI keys on use as well, since Bilibili rotates
  them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This reverts commit 3a3f1f8.

The rotation did not raise the success rate: in the first 20 minutes on
the Worker the video list API still answered -352 to about 80 % of the
requests, and the renewal never fired. It also lets the cached visitor
cookie and WBI keys expire, so the Worker has to fetch new ones from
finger/spi and x/web-interface/nav, while Bilibili now answers the
Worker's requests to nav (and x/web-interface/card,
recArchivesByKeywords) with HTTP 412. Once the entries cached before the
deploy expired, the video, video-all, hot-search and live-search routes
could lose their WBI keys altogether. Restore the previous behaviour
while a safer approach is worked out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ue (#23822)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…3826)

Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 3.0.3 to 3.0.4.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](softprops/action-gh-release@efb3536...8a0cd65)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 3.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [amannn/action-semantic-pull-request](https://github.com/amannn/action-semantic-pull-request) from 6.1.1 to 6.1.2.
- [Release notes](https://github.com/amannn/action-semantic-pull-request/releases)
- [Changelog](https://github.com/amannn/action-semantic-pull-request/blob/main/CHANGELOG.md)
- [Commits](amannn/action-semantic-pull-request@48f2562...2252a14)

---
updated-dependencies:
- dependency-name: amannn/action-semantic-pull-request
  dependency-version: 6.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the hono group with 1 update: [@scalar/hono-api-reference](https://github.com/scalar/scalar/tree/HEAD/integrations/hono).


Updates `@scalar/hono-api-reference` from 0.12.17 to 0.12.18
- [Release notes](https://github.com/scalar/scalar/releases)
- [Changelog](https://github.com/scalar/scalar/blob/main/integrations/hono/CHANGELOG.md)
- [Commits](https://github.com/scalar/scalar/commits/HEAD/integrations/hono)

---
updated-dependencies:
- dependency-name: "@scalar/hono-api-reference"
  dependency-version: 0.12.18
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: hono
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the msw group with 1 update: [msw](https://github.com/mswjs/msw).


Updates `msw` from 3.0.3 to 3.0.4
- [Release notes](https://github.com/mswjs/msw/releases)
- [Changelog](https://github.com/mswjs/msw/blob/main/CHANGELOG.md)
- [Commits](mswjs/msw@v3.0.3...v3.0.4)

---
updated-dependencies:
- dependency-name: msw
  dependency-version: 3.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: msw
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [tsdown](https://github.com/rolldown/tsdown) from 0.23.4 to 0.23.5.
- [Release notes](https://github.com/rolldown/tsdown/releases)
- [Commits](rolldown/tsdown@v0.23.4...v0.23.5)

---
updated-dependencies:
- dependency-name: tsdown
  dependency-version: 0.23.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [undici](https://github.com/nodejs/undici) from 8.12.3 to 8.12.4.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](nodejs/undici@v8.12.3...v8.12.4)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 8.12.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [@j178/prek](https://github.com/j178/prek) from 0.5.9 to 0.5.10.
- [Release notes](https://github.com/j178/prek/releases)
- [Changelog](https://github.com/j178/prek/blob/main/CHANGELOG.md)
- [Commits](j178/prek@v0.5.9...v0.5.10)

---
updated-dependencies:
- dependency-name: "@j178/prek"
  dependency-version: 0.5.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [@vercel/nft](https://github.com/vercel/nft) from 1.11.0 to 1.11.1.
- [Release notes](https://github.com/vercel/nft/releases)
- [Commits](vercel/nft@1.11.0...1.11.1)

---
updated-dependencies:
- dependency-name: "@vercel/nft"
  dependency-version: 1.11.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [imapflow](https://github.com/postalsys/imapflow) from 2.10.0 to 2.10.2.
- [Release notes](https://github.com/postalsys/imapflow/releases)
- [Changelog](https://github.com/postalsys/imapflow/blob/master/CHANGELOG.md)
- [Commits](postalsys/imapflow@v2.10.0...v2.10.2)

---
updated-dependencies:
- dependency-name: imapflow
  dependency-version: 2.10.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the nix group with 2 updates: [devenv](https://github.com/cachix/devenv) and [nixpkgs](https://github.com/NixOS/nixpkgs).


Updates `devenv` from `0d6c556` to `9655d32`
- [Release notes](https://github.com/cachix/devenv/releases)
- [Commits](cachix/devenv@0d6c556...9655d32)

Updates `nixpkgs` from `0bb2eed` to `1d06008`
- [Commits](NixOS/nixpkgs@0bb2eed...1d06008)

---
updated-dependencies:
- dependency-name: devenv
  dependency-version: 9655d320b8f9df74dbecf681f52a7334574606c3
  dependency-type: direct:production
  dependency-group: nix
- dependency-name: nixpkgs
  dependency-version: 1d060086d60cb76a40cf37109f979d88a5bd6396
  dependency-type: direct:production
  dependency-group: nix
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [eslint-plugin-yml](https://github.com/ota-meshi/eslint-plugin-yml) from 3.9.0 to 3.10.0.
- [Release notes](https://github.com/ota-meshi/eslint-plugin-yml/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-yml/blob/master/CHANGELOG.md)
- [Commits](ota-meshi/eslint-plugin-yml@v3.9.0...v3.10.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-yml
  dependency-version: 3.10.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [@notionhq/client](https://github.com/makenotion/notion-sdk-js) from 5.30.0 to 5.31.0.
- [Release notes](https://github.com/makenotion/notion-sdk-js/releases)
- [Commits](makenotion/notion-sdk-js@v5.30.0...v5.31.0)

---
updated-dependencies:
- dependency-name: "@notionhq/client"
  dependency-version: 5.31.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [rate-limiter-flexible](https://github.com/animir/node-rate-limiter-flexible) from 11.2.3 to 11.3.0.
- [Release notes](https://github.com/animir/node-rate-limiter-flexible/releases)
- [Commits](animir/node-rate-limiter-flexible@v11.2.3...v11.3.0)

---
updated-dependencies:
- dependency-name: rate-limiter-flexible
  dependency-version: 11.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [jsdom](https://github.com/jsdom/jsdom) from 30.1.3 to 31.0.0.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Commits](jsdom/jsdom@v30.1.3...v31.0.0)

---
updated-dependencies:
- dependency-name: jsdom
  dependency-version: 31.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [rolldown](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown) from 1.2.16 to 1.3.0.
- [Release notes](https://github.com/rolldown/rolldown/releases)
- [Changelog](https://github.com/rolldown/rolldown/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rolldown/rolldown/commits/v1.3.0/packages/rolldown)

---
updated-dependencies:
- dependency-name: rolldown
  dependency-version: 1.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…pdates (#23829)

Bumps the opentelemetry group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@opentelemetry/exporter-prometheus](https://github.com/open-telemetry/opentelemetry-js) | `0.300.0` | `0.301.0` |
| [@opentelemetry/exporter-trace-otlp-http](https://github.com/open-telemetry/opentelemetry-js) | `0.300.0` | `0.301.0` |
| [@opentelemetry/resources](https://github.com/open-telemetry/opentelemetry-js) | `3.0.0` | `3.1.0` |
| [@opentelemetry/sdk-metrics](https://github.com/open-telemetry/opentelemetry-js) | `3.0.0` | `3.1.0` |
| [@opentelemetry/sdk-trace](https://github.com/open-telemetry/opentelemetry-js) | `3.0.0` | `3.1.0` |



Updates `@opentelemetry/exporter-prometheus` from 0.300.0 to 0.301.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-js/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-js/blob/main/CHANGELOG.md)
- [Commits](open-telemetry/opentelemetry-js@experimental/v0.300.0...experimental/v0.301.0)

Updates `@opentelemetry/exporter-trace-otlp-http` from 0.300.0 to 0.301.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-js/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-js/blob/main/CHANGELOG.md)
- [Commits](open-telemetry/opentelemetry-js@experimental/v0.300.0...experimental/v0.301.0)

Updates `@opentelemetry/resources` from 3.0.0 to 3.1.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-js/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-js/blob/main/CHANGELOG.md)
- [Commits](open-telemetry/opentelemetry-js@v3.0.0...v3.1.0)

Updates `@opentelemetry/sdk-metrics` from 3.0.0 to 3.1.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-js/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-js/blob/main/CHANGELOG.md)
- [Commits](open-telemetry/opentelemetry-js@v3.0.0...v3.1.0)

Updates `@opentelemetry/sdk-trace` from 3.0.0 to 3.1.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-js/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-js/blob/main/CHANGELOG.md)
- [Commits](open-telemetry/opentelemetry-js@v3.0.0...v3.1.0)

---
updated-dependencies:
- dependency-name: "@opentelemetry/exporter-prometheus"
  dependency-version: 0.301.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry
- dependency-name: "@opentelemetry/exporter-trace-otlp-http"
  dependency-version: 0.301.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry
- dependency-name: "@opentelemetry/resources"
  dependency-version: 3.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry
- dependency-name: "@opentelemetry/sdk-metrics"
  dependency-version: 3.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry
- dependency-name: "@opentelemetry/sdk-trace"
  dependency-version: 3.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 11.10.0 to 11.11.0.
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)
- [Commits](getsentry/sentry-javascript@11.10.0...11.11.0)

---
updated-dependencies:
- dependency-name: "@sentry/node"
  dependency-version: 11.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…#23830)

Bumps the oxc group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@oxlint/plugins](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint-plugins) | `1.90.0` | `1.91.0` |
| [oxfmt](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt) | `0.75.0` | `0.76.0` |
| [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint) | `1.90.0` | `1.91.0` |
| [oxlint-plugin-eslint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint-plugin-eslint) | `1.90.0` | `1.91.0` |
| [oxlint-tsgolint](https://github.com/oxc-project/tsgolint) | `7.0.2005` | `7.0.2006` |



Updates `@oxlint/plugins` from 1.90.0 to 1.91.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.91.0/npm/oxlint-plugins)

Updates `oxfmt` from 0.75.0 to 0.76.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxfmt/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxfmt_v0.76.0/npm/oxfmt)

Updates `oxlint` from 1.90.0 to 1.91.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.91.0/npm/oxlint)

Updates `oxlint-plugin-eslint` from 1.90.0 to 1.91.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint-plugin-eslint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.91.0/npm/oxlint-plugin-eslint)

Updates `oxlint-tsgolint` from 7.0.2005 to 7.0.2006
- [Release notes](https://github.com/oxc-project/tsgolint/releases)
- [Commits](oxc-project/tsgolint@v7.0.2005...v7.0.2006)

---
updated-dependencies:
- dependency-name: "@oxlint/plugins"
  dependency-version: 1.91.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxfmt
  dependency-version: 0.76.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint
  dependency-version: 1.91.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint-plugin-eslint
  dependency-version: 1.91.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint-tsgolint
  dependency-version: 7.0.2006
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: oxc
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…updates (#23824)

* chore(deps-dev): bump the cloudflare group across 1 directory with 4 updates

Bumps the cloudflare group with 4 updates in the / directory: [@cloudflare/vitest-plugin](https://github.com/cloudflare/workers-sdk/tree/HEAD/packages/vitest-plugin), [@cloudflare/workers-types](https://github.com/cloudflare/workerd), [cf](https://github.com/cloudflare/cf/tree/HEAD/packages/cli) and [wrangler](https://github.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler).


Updates `@cloudflare/vitest-plugin` from 1.5.1 to 1.6.0
- [Release notes](https://github.com/cloudflare/workers-sdk/releases)
- [Changelog](https://github.com/cloudflare/workers-sdk/blob/main/packages/vitest-plugin/CHANGELOG.md)
- [Commits](https://github.com/cloudflare/workers-sdk/commits/@cloudflare/vitest-plugin@1.6.0/packages/vitest-plugin)

Updates `@cloudflare/workers-types` from 5.20261103.1 to 5.20261106.1
- [Release notes](https://github.com/cloudflare/workerd/releases)
- [Changelog](https://github.com/cloudflare/workerd/blob/main/RELEASE.md)
- [Commits](https://github.com/cloudflare/workerd/commits)

Updates `cf` from 1.0.0-beta.27 to 1.0.0-beta.28
- [Release notes](https://github.com/cloudflare/cf/releases)
- [Changelog](https://github.com/cloudflare/cf/blob/main/packages/cli/CHANGELOG.md)
- [Commits](https://github.com/cloudflare/cf/commits/cf@1.0.0-beta.28/packages/cli)

Updates `wrangler` from 4.157.0 to 4.158.0
- [Release notes](https://github.com/cloudflare/workers-sdk/releases)
- [Commits](https://github.com/cloudflare/workers-sdk/commits/wrangler@4.158.0/packages/wrangler)

---
updated-dependencies:
- dependency-name: "@cloudflare/vitest-plugin"
  dependency-version: 1.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: cloudflare
- dependency-name: "@cloudflare/workers-types"
  dependency-version: 5.20261106.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: cloudflare
- dependency-name: cf
  dependency-version: 1.0.0-beta.28
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: cloudflare
- dependency-name: wrangler
  dependency-version: 4.158.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: cloudflare
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump pnpm to 12.18.0

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [docker/login-action](https://github.com/docker/login-action) from 4.7.0 to 4.8.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](docker/login-action@81c6f93...8aa5831)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 4.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
BBC News Labs shut down in early November 2026. www.bbc.co.uk/rdnewslabs/news
now only meta-refreshes to the BBC R&D journalism topic, and the search index
the route read (projectId ipages-newslabs) returns no hits at all, so the feed
can never have items again. The namespace had no other route.
Forecast pages such as 降水量预报, 气温预报, 大风预报 and 全球雨雪落区预报
put only the lead time in data-time ("024小时") and the issue time in the
label under each image ("11/09 21:00"). The route parsed data-time, so every
item had an invalid date and a guid like #2026/024小时 that stayed the same
from one issue to the next, and readers never saw a new forecast.

Treat these pages like the hourly lead-time forecasts from #23822: one item
per issue, dated from the label plus the year in the image path. Take the
image the page marks as active rather than the first one, so 48小时 to
168小时 降水量预报 keep their own lead time instead of all showing the 24
hour image. For the sea fog and sea wind pages that image is still the first.
* feat(route/ndss-symposium): add optional full abstract mode

* fix(route/ndss-symposium): trim description and use p-map

Keep the route description to what the abstract parameter does, and
replace the hand-written batch helper with p-map.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(route/ndss-symposium): cache parsed program abstracts

Parse the detailed program page inside the cache callback and cache the
title-to-abstract entries instead of the raw HTML.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: DIYgod <i@diygod.me>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
gov.cn folded the 部门政务 list into 政务联播. /lianbo/bumen/index.htm (and
the 地方 sub-list) now only redirect to the homepage with a script, so
/gov/cn/news/bm found no .infolist entries and returned an empty feed.

政务联播 loads its list from /lianbo/YAOWENLIEBIAO.json, the same format the
route already reads for 要闻 and 滚动, so bm goes through getLatestNews with
the /lianbo/ base. The .infolist branch that only bm used is gone, and the
docs table now names the category 政务联播.
The category in /nytimes/rss/:cat? is optional, but the handler put the
param straight into the feed URL, so /nytimes/rss asked for
rss.nytimes.com/services/xml/rss/nyt/undefined.xml and failed with a 404.
Fall back to the HomePage feed, the same one the example uses, and list it
as the parameter default the way the book route does.
Al Jazeera Chinese has closed. Every chinese.aljazeera.net path now
301-redirects to the Arabic site's China topic (www.aljazeera.net/china),
so /aljazeera/chinese/* found no cards and returned an empty feed.

Drop chinese from the language map, the language tables and tips of the
news, rss and tag routes, and the chinese.aljazeera.net radar rules.
Arabic and English are unchanged.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

⤵️ pull merge-conflict Resolve conflicts manually

Projects

None yet

Development

Successfully merging this pull request may close these issues.