• v2.0.80-dev 42ece6622f

    Phandroid v2.0.80-dev Pre-release

    thoralf released this 2026-10-18 23:23:48 +02:00 | 30 commits to main since this release

    Changed

    • Merged upstream Phanpy — 20 commit(s) (see CHANGELOG.phanpy.md for upstream detail):
      • 78ca68d7 new config style for lingui
      • 5fbc3a01 Upgrade deps
      • 651c2421 Update lock file
      • e01ebe59 Rearrange and hide some visibilities
      • 045e3577 Restyle mini translation block
      • f0bb03c4 Actually can share the locale strings
      • cf05b2df i18n updates (ar-SA,ca-ES,cs-CZ,de-DE,eo-UY,es-ES,eu-ES,fa-IR,fi-FI,fr-FR,gl-ES,he-IL,hu-HU,it-IT,ja-JP,kab,ko-KR,lt-LT,nb-NO,nl-NL,oc-FR,pl-PL,pt-BR,pt-PT,ru-RU,th-TH,tok,tr-TR,uk-UA,zh-CN,zh-TW) (#1615)
      • 5840c0e6 Remove this "fix"
      • 6a051937 Experiment: "Hide post metrics"
      • 2dd139cd Experiment: only show usernames
      • dbe778a4 i18n updates (ar-SA,ca-ES,cs-CZ,de-DE,eo-UY,es-ES,eu-ES,fa-IR,fi-FI,fr-FR,gl-ES,he-IL,hu-HU,it-IT,ja-JP,kab,ko-KR,lt-LT,nb-NO,nl-NL,oc-FR,pl-PL,pt-BR,pt-PT,ru-RU,th-TH,tok,tr-TR,uk-UA,zh-CN,zh-TW) (#1617)
      • f90c2f6e Sorry, translators.
      • 4eac7b15 i18n updates (ar-SA,ca-ES,cs-CZ,de-DE,eo-UY,es-ES,eu-ES,fa-IR,fi-FI,fr-FR,gl-ES,he-IL,hu-HU,it-IT,ja-JP,kab,ko-KR,lt-LT,nb-NO,nl-NL,oc-FR,pl-PL,pt-BR,pt-PT,ru-RU,th-TH,tok,tr-TR,uk-UA,zh-CN,zh-TW) (#1618)
      • e2d2f1e4 Names in filtered posts also need subtle treatment
      • c3cddcac Add toggles for hide post metrics and display username
      • 285fb248 Apply metrics hiding for notifications too
      • de2c88d6 Apply display username setting to notifications too
      • 8ca38b7a A little bit of "life" in the carousel dots
      • dc6a27f2 i18n updates (ar-SA,ca-ES,cs-CZ,de-DE,es-ES,eu-ES,fi-FI,fr-FR,pl-PL,zh-CN) (#1619)
      • 15f73bbf Update README.md

    Fixed

    • The upstream sync no longer re-resolves the lockfile from a stale base — the
      outage class that stranded dev at 2.0.79 for two days is closed.

      package-lock.json is now merge=theirs: a merge takes upstream's lock, the
      dependency resolution they actually build and test with, and the sync
      regenerates it only to re-add the fork's eleven overlay entries. The old model
      kept our lock (merge=ours) and re-resolved it from scratch on every merge,
      handing each upstream dependency bump to npm's peer resolver as a fresh coin
      flip: on 2026-10-16 upstream bumped @lingui to ~6.9.1 and npm walked the
      unguarded peerOptional chain (@lingui/vite-plugin →
      @rolldown/plugin-babel → @babel/plugin-transform-runtime) into Babel 8.x
      against the tree's @babel/[email protected] — ERESOLVE, and the sync failed
      eleven consecutive runs while dev sat 20 commits behind upstream. Starting from
      upstream's lock instead, the identical regeneration touches nothing upstream
      owns (measured: 716 entries, 0 changed, 0 removed, 195 added by the overlay;
      verified under npm 9.2 and 11.21). A new guard,
      scripts/phandroid-lockfile-invariant.mjs, fails the run if the regeneration
      changes or drops any upstream-owned entry — the drift can neither crash the
      sync nor ship silently again. Ported to the prod branch as well, so the next
      upstream/production move cannot hit the same wall.

    Changed

    • A failed sync now says why, and for how long it has been failing. The
      lockfile step tees its output into the failure report — the ERESOLVE that
      killed eleven runs was previously only findable by pulling job logs by hand —
      a failed merge lists its conflicted files the same way, and every CI-failure
      issue now carries a trend line ("N consecutive failed run(s); last success:
      run X on …") computed from the run history. Forgejo notifies nobody about
      Actions results, so the issue body is the only alarm channel — and "still
      down" reads differently than "another failure".
    • The sync announces conflict candidates before merging. Files that both
      upstream and the fork changed since the last merge — minus the ones the merge
      drivers own — are printed up front, so the next real conflict shows up in the
      job log and the issue instead of being a surprise mid-merge.
    Downloads