# Changelog of Weibo Post Detail Scraper (`opspilot.cc/weibo-post-detail-scraper`) Actor

- **URL**: https://apify.com/opspilot.cc/weibo-post-detail-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/opspilot.cc/weibo-post-detail-scraper.md

## Changelog

### \[0.2] - 2026-10-12

- The run can no longer be killed by the key-value store. Under
  `LIMITED_PERMISSIONS` — how Apify's automated QA and every API-triggered run
  starts an Actor — opening the store is refused with HTTP 403
  (`KeyValueStoreCollectionClient.getOrCreate`, path `/v2/key-value-stores`).
  That call sat in a `||` fallback chain and was never inside a `try/catch` of
  ours, so the throw ended the run with exit code 91 and a reported FAILED run
  with zero items. Every store open now goes through a wrapper that returns a
  no-op store instead of throwing, so the free-run counter and the run SUMMARY
  degrade and the actual work proceeds.
- The gate store's name-to-id lookup no longer depends on the store still being
  on the first page. There is no GET-by-name endpoint, so the lookup pages
  through `/v2/key-value-stores`; it used a fixed `limit=50`, which silently
  stopped containing gate stores once the account passed 50 of them — and the
  account creates a new default store on every run, so that list grows on its
  own. The lookup now pages (100 per page, up to 20 pages).

## CHANGELOG — Weibo Post Detail Scraper

### 0.1.3 - 2026-08-21

- **Rebrand (no API change)**: rename internal client to `UpstreamClient`; env vars `TIKHUB_API_KEY` / `TIKHUB_BASE_URL` → `UPSTREAM_API_KEY` / `UPSTREAM_BASE_URL`; file `src/tikhub_client.js` → `src/upstream_client.js`. Per our internal SOP §100 (no upstream name in user-facing surfaces), existing 0.1.2 runs keep working until the next push.
- **Fix (bonus)**: `test/integration.js` was the hot-search template (called `fetchTrendTop` + `intervalSeconds`); replaced with two post-detail-specific tests covering `fetchPostDetail` (single post object) and `fetchPostComments` (first page). 7/7 unit + 2/2 integration tests PASS.

### 0.1.2 - 2026-08-20

- **Fix**: `keyValueStore.setValue('SUMMARY', {...})` requires `JSON.stringify` + `contentType: 'application/json'`.
- **Fix**: free-run counter switched to `JSON.stringify(current + 1)` write / parse-on-read.
- **Verified**: `apify call` SUCCEEDED, 1 detail + ~30 first-page comments pushed.

### 0.1.1 - 2026-08-20

- Re-push with README fix (real Actor ID `vgIzEKOSpFKlEDVo5`).
- Followed §99 (no self Actor ID in mutual-reference table).

### 0.1.0 - 2026-08-20

- Initial push SUCCEEDED.
- Actor ID `vgIzEKOSpFKlEDVo5`.
- Free tier 5 runs/day limit enforced via KV counter.
- Detail shape: `data.data` (post object directly).
- Comments shape: `data.data.data[]` + `max_id` + `max_id_type`. §41 pagination via `maxId + maxIdType` dual-field (no cookie, no cursor-only).
- `maxPages` hard-capped at 10 ≈ 150 comments total.
- 7/7 unit tests PASS.
