Release v0.3.0: paginate stash + sha1-keyed soft-delete
Summary
Two fixes from one bug report (Daanvr's "stash files missing" report → T425756):
-
fetchStashedFilesnow paginates. The previous code made a singlemystashedfilesAPI call with nomsflimit— MediaWiki's hard default cap (10) silently truncated the list before the UI ever saw it. Anyone with >10 stash files lost everything past the first page. Now usesmsflimit=500and follows themsfcontinuetoken until exhausted, with a 5000-item safety cap. -
Soft-delete state is keyed by sha1 instead of filekey. Filekey is per-stash-entry and not stable across stash regenerations / re-uploads, so a hide could vanish on reload. The canonical store is
hiddenSha1s; legacyhiddenFilekeysentries are migrated on bootstrap by joining with the current stash'sfilekey → sha1map.hiddenSha1sis content-permanent (a re-upload of the same bytes inherits any prior soft-delete).
cleanupAfterPublish also clears both sha1 and filekey hide entries on publish.
Phabricator: T425756
Test plan
-
npm run buildclean. -
API probe:
mystashedfiles?msflimit=max→ 25 entries (Daanvr's account); default no-limit call → 10 entries with continue token. Confirms the bug. - Headless chromium load → 25 stash rows in the rendered DOM (was 8 before fix). All filekeys match the live API response.
- Visual + interactive test by maintainer (force-reload, soft-delete persistence across reload).
Versioning
-
0.1.0→0.3.0(MINOR; combined feature fix, no breaking external API). -
package.jsonandsrc/config.jsAPP_USER_AGENTbumped together. -
CHANGELOG.md[Unreleased]promoted to[0.3.0] — 2026-05-08.
Merge order
This branch was cut off main before MR !1 (merged) (Beta indicator). Recommend merging !1 (merged) first so version progression is 0.1.0 → 0.2.0 → 0.3.0 chronologically. If !1 (merged) lands first, the only conflict in this MR will be the CHANGELOG.md [Unreleased] block + the [0.2.0] entry — straightforward to resolve (keep both entries).
Out of scope (deliberately)
- Stash item
idredesign (still derived from filekey). The fix repairs cross-session persistence; in-session matching already worked. -
filenamescache is still filekey-keyed (separate follow-up if it matters; not the cause of the reported bug).