503 Commits
Author SHA1 Message Date
YoursFunny 153b43c84d chore: bump version to 1.9.4 v1.9.4 2026-10-31 18:56:27 +08:00
YoursFunny 132fdd2999 fix: reply the edit-before-forward prompt to the post's own media message
One user message carrying several links opens one prompt per post; every
prompt used to reply to that shared link message, so they were
indistinguishable. The prompt now replies to the first media message it
edits, falling back to the link message when there is none.
2026-10-31 18:53:29 +08:00
YoursFunny 8f6e78395b Merge pull request #9 from TheFunny/dependabot/cargo/parking_lot-0.13.0
build(deps): bump parking_lot from 0.12.5 to 0.13.0
2026-10-31 18:52:09 +08:00
YoursFunny 190cfd5e4b Merge pull request #13 from TheFunny/dependabot/cargo/rusqlite-0.41.0
build(deps): bump rusqlite from 0.40.2 to 0.41.0
2026-10-31 18:50:52 +08:00
dependabot[bot] f11ceb29e1 build(deps): bump rusqlite from 0.40.2 to 0.41.0
Bumps [rusqlite](https://github.com/rusqlite/rusqlite) from 0.40.2 to 0.41.0.
- [Release notes](https://github.com/rusqlite/rusqlite/releases)
- [Changelog](https://github.com/rusqlite/rusqlite/blob/master/Changelog.md)
- [Commits](https://github.com/rusqlite/rusqlite/compare/v0.40.2...v0.41.0)

---
updated-dependencies:
- dependency-name: rusqlite
  dependency-version: 0.41.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-31 10:48:52 +00:00
YoursFunny 1ec78b1c8d Merge pull request #11 from TheFunny/dependabot/cargo/html-escape-0.3.0
build(deps): bump html-escape from 0.2.15 to 0.3.0
2026-10-31 18:47:19 +08:00
YoursFunny d7bec116bf Merge pull request #12 from TheFunny/dependabot/cargo/tokio-1.54.1
build(deps): bump tokio from 1.53.3 to 1.54.1
2026-10-31 18:47:02 +08:00
YoursFunny 214b51de28 Merge pull request #10 from TheFunny/dependabot/github_actions/Swatinem/rust-cache-2.9.3
build(deps): bump Swatinem/rust-cache from 2.9.2 to 2.9.3
2026-10-31 18:46:56 +08:00
YoursFunny d132885fdc Merge pull request #8 from TheFunny/dependabot/github_actions/docker/login-action-4.7.0
build(deps): bump docker/login-action from 4.6.0 to 4.7.0
2026-10-31 18:46:51 +08:00
dependabot[bot] 0d35109f45 build(deps): bump tokio from 1.53.3 to 1.54.1
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.53.3 to 1.54.1.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.53.3...tokio-1.54.1)

---
updated-dependencies:
- dependency-name: tokio
  dependency-version: 1.54.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-29 10:15:15 +00:00
dependabot[bot] 6b6f1f6437 build(deps): bump html-escape from 0.2.15 to 0.3.0
Bumps [html-escape](https://github.com/magiclen/html-escape) from 0.2.15 to 0.3.0.
- [Commits](https://github.com/magiclen/html-escape/compare/v0.2.15...v0.3.0)

---
updated-dependencies:
- dependency-name: html-escape
  dependency-version: 0.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-29 10:15:09 +00:00
dependabot[bot] 50c71f516b build(deps): bump Swatinem/rust-cache from 2.9.2 to 2.9.3
Bumps [Swatinem/rust-cache](https://github.com/swatinem/rust-cache) from 2.9.2 to 2.9.3.
- [Release notes](https://github.com/swatinem/rust-cache/releases)
- [Changelog](https://github.com/Swatinem/rust-cache/blob/master/CHANGELOG.md)
- [Commits](https://github.com/swatinem/rust-cache/compare/6323deb102c322ba6fcbdcafc7e3dddab59af2b6...d1527c8f67ef9af357290475d4af4b0fab8f12e0)

---
updated-dependencies:
- dependency-name: Swatinem/rust-cache
  dependency-version: 2.9.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-29 10:15:04 +00:00
dependabot[bot] 8d46879fed build(deps): bump parking_lot from 0.12.5 to 0.13.0
Bumps [parking_lot](https://github.com/Amanieu/parking_lot) from 0.12.5 to 0.13.0.
- [Release notes](https://github.com/Amanieu/parking_lot/releases)
- [Changelog](https://github.com/Amanieu/parking_lot/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Amanieu/parking_lot/compare/parking_lot-v0.12.5...parking_lot-v0.13.0)

---
updated-dependencies:
- dependency-name: parking_lot
  dependency-version: 0.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-29 10:15:03 +00:00
dependabot[bot] cd719eba3a build(deps): bump docker/login-action from 4.6.0 to 4.7.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 4.6.0 to 4.7.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/dbcb813823bdd20940b903addbd779551569679f...81c6f93d4bc991e510b342a00b419b3bb4efc5c6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-29 10:14:55 +00:00
YoursFunny 47c0cb97ee chore: bump version to 1.9.3 v1.9.3 2026-10-26 22:53:36 +08:00
YoursFunny 5a76d4992a fix(deps): clear the RustSec advisories blocking the audit gate
zip 8.6.0 -> 9.1.2 with default-features = false, features = ["deflate"]: ugoira frame zips are stored/deflate only, so the default codec set was dead weight — and its zstd 0.13 stack (RUSTSEC-2026-0391, -0395..-0406, -0410) has no fixed release inside zip <=9.0.0's ^0.13.3 pin. ctutils 0.4.2 (RUSTSEC-2026-0385) leaves with zip's aes-crypto feature.

tokio 1.53.3 (RUSTSEC-2026-0386), rustls-webpki 0.103.16 (RUSTSEC-2026-0382), webpki-roots 1.0.10 (RUSTSEC-2026-0381).

cargo audit on the new lock reports only the unmaintained dotenv (RUSTSEC-2021-0141) and proc-macro-error2 (RUSTSEC-2026-0173) warnings, which denyWarnings: false does not fail on. A new pixiv test pins that both stored and deflate ugoira frames decode with the reduced zip feature set.
2026-10-26 22:35:51 +08:00
YoursFunny 97b85a10ad Merge pull request #7 from TheFunny/dependabot/cargo/cargo-patch-ea1b67aa16
build(deps): bump the cargo-patch group across 1 directory with 2 updates
2026-10-26 22:02:24 +08:00
dependabot[bot] 82b5268021 build(deps): bump the cargo-patch group across 1 directory with 2 updates
Bumps the cargo-patch group with 2 updates in the / directory: [serde_json](https://github.com/serde-rs/json) and [tokio](https://github.com/tokio-rs/tokio).


Updates `serde_json` from 1.0.151 to 1.0.154
- [Release notes](https://github.com/serde-rs/json/releases)
- [Commits](https://github.com/serde-rs/json/compare/v1.0.151...v1.0.154)

Updates `tokio` from 1.53.1 to 1.53.2
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.53.1...tokio-1.53.2)

---
updated-dependencies:
- dependency-name: serde_json
  dependency-version: 1.0.154
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-patch
- dependency-name: tokio
  dependency-version: 1.53.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-15 10:14:36 +00:00
YoursFunny fca3f4ae96 ci: gate the docker test run on should-build again
The previous change ran the gate on every non-PR push; but a release
pushes branch and tag together, so docker.yml fires two runs for the one
commit and both gated the suite — the duplication that change set out to
remove. Require should-build: on a release the master run is build=false
(the commit is already tagged), so only the tag run tests.
2026-10-14 23:42:43 +08:00
YoursFunny 0d06d4d31b fix(deps): bump rustls to 0.23.46 for RUSTSEC-2026-0346..0349
Four advisories dated 2026-10-14 hit rustls 0.23.45 (a brotli
certificate-decompression allocation, a ServerHello key-exchange
downgrade, and two more), all fixed in 0.23.46, and cargo audit fails the
CI gate on them. Only rustls changes in the lock (version + checksum).
The remaining audit findings (dotenv/proc-macro-error2 unmaintained,
yoke-derive yanked) are warnings the action leaves non-fatal.
2026-10-14 23:42:32 +08:00
YoursFunny dfb2ccae3e ci: run the offline suite once per commit
ci.yml also triggered on push to master/tags, so every such push ran the
suite twice: once standalone, once as docker.yml's publish gate. Drop the
push trigger; the gate becomes the only master/tag run, and docker waits
on it — one suite run per commit, and a red suite still blocks the image.

The gate runs on every non-PR push (its own `changes` job skips a
docs-only diff), so a push touching no build input is still tested. A
release tag runs the live-network suite through the gate, via an explicit
`live` input computed by the caller (the called workflow's github.ref is
not a dependable tag check).
2026-10-14 23:17:16 +08:00
YoursFunny 3b955cf321 fix(queue): gate post-send side effects on the row's lease
A handler whose row was re-leased while it sat between heartbeats (a
>=120 s stall) still ran the channel forward, opened the edit prompt and
released the keep-alive temp media the new holder was using; only the
terminal write was token-guarded, which left the side effects to run
twice. The lease is now exposed to the handler on a task-local
(Lease/lease_still_held) and the completion path re-reads it, since the
loss may have gone unnoticed by the heartbeat. The forward retry is gated
the same way.
2026-10-14 22:10:36 +08:00
YoursFunny 632cbb7c89 fix(callback): settle the prompt when a forward fails partway
A Permanent forward failure kept the prompt live, so the next Confirm
rebuilt the task with forward_offset 0 and copied the batches that had
already reached the channel a second time. A failure whose task offset is
non-zero now settles the prompt (as the retryable path does); a failure
that copied nothing still leaves it live for a retry.
2026-10-14 22:10:36 +08:00
YoursFunny 2ffe647939 fix(settings): drop a link send whose chat settings could not be read
The pipeline read settings through get(), which degrades a failed read to
defaults. A send then went out with the chat's channel forward and
edit-before-forward silently ignored, and the task it built carried those
defaults into the retry payload. try_get() is the strict read; an
unreadable row now drops the send and tells the user.
2026-10-14 22:10:36 +08:00
YoursFunny 3a944c1361 fix(queue): keep a running attempt through a failed lease heartbeat
A heartbeat write error abandoned the attempt at once. The lease is still
valid until locked_until, so the attempt was dropped for nothing: the row
was recovered later and the task re-ran from the start, although its side
effects (a sent album, a copied post) may already have happened. A failed
beat now retries at the next tick; the attempt is abandoned only once the
next beat could land at or past the last confirmed expiry.
2026-10-14 22:10:35 +08:00
YoursFunny 7fbe144b57 fix(ci): gate docker publish on the offline test suite
docker.yml pushed the image for tags and master without waiting for the
test job, so a red commit could still be published. ci.yml is now also a
workflow_call target; docker depends on its result. The gate run has its
own concurrency group and never cancels a superseded run, so a docs-only
follow-up cannot drop the image of the code commit before it. The live
job is skipped for the gate call.
2026-10-14 22:10:35 +08:00
YoursFunny a7d4d1af8c fix: derive the photo decode cap so one photo's peak fits the memory budget 2026-10-14 22:10:35 +08:00
YoursFunny 51f451d78f fix: default compose WEBHOOK to false and leave RUST_LOG unset 2026-10-14 22:10:35 +08:00
YoursFunny c937a66e5f fix: admit adapter temp media in the local-path guard 2026-10-14 22:10:34 +08:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> b42d41eaa4 build(deps): bump the cargo-patch group across 1 directory with 2 updates (#5)
Bumps the cargo-patch group with 2 updates in the / directory: [thiserror](https://github.com/dtolnay/thiserror) and [rand](https://github.com/rust-random/rand).


Updates `thiserror` from 2.0.20 to 2.0.21
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/2.0.20...2.0.21)

Updates `rand` from 0.10.2 to 0.10.3
- [Release notes](https://github.com/rust-random/rand/releases)
- [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-random/rand/compare/0.10.2...0.10.3)

---
updated-dependencies:
- dependency-name: thiserror
  dependency-version: 2.0.21
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-patch
- dependency-name: rand
  dependency-version: 0.10.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-05 18:57:46 +08:00
YoursFunny 8063777962 chore: bump version to 1.9.2 v1.9.2 2026-09-25 03:12:07 +08:00
YoursFunny ac10b8715c docs: sync template limits and live-test count 2026-09-25 02:12:17 +08:00
YoursFunny 517e1362a5 docs: document template storage limits 2026-09-25 01:49:31 +08:00
YoursFunny 50299bacbb fix: redact user-controlled log fields 2026-09-25 01:49:31 +08:00
YoursFunny 9d40f3bc50 fix: bound template storage and callback data 2026-09-25 01:49:31 +08:00
YoursFunny 2045c3cea1 fix: keep photo memory permit until processing ends 2026-09-25 01:49:30 +08:00
YoursFunny 09656810fe fix: prune persisted expired prompts 2026-09-25 01:49:30 +08:00
YoursFunny 786bafca42 fix: account for photo processing peak memory 2026-09-25 01:49:30 +08:00
YoursFunny 18da6e97c2 fix: reject oversized local media before upload 2026-09-25 01:49:29 +08:00
YoursFunny 7b816d4153 fix: split long message forwards 2026-09-25 01:49:29 +08:00
YoursFunny d8b9a06453 fix: bound direct command fetches 2026-09-25 01:40:09 +08:00
YoursFunny 4e0f1b834e fix: restrict media download hosts 2026-09-25 01:40:09 +08:00
YoursFunny 21437d1843 fix: bound queue panic retries 2026-09-25 01:11:28 +08:00
YoursFunny a54029c19b fix: propagate startup repair database errors 2026-09-25 01:06:09 +08:00
YoursFunny c6120b7cc0 fix: make sqlite migrations atomic 2026-09-24 21:47:48 +08:00
YoursFunny 7b4e273533 fix: bound site JSON response bodies 2026-09-24 21:25:03 +08:00
YoursFunny 6a87583cc0 fix: honor bsky HLS retry-after 2026-09-24 21:01:36 +08:00
YoursFunny 1ba64e858d fix: enforce inline result limit centrally 2026-09-24 21:00:00 +08:00
YoursFunny 008d31b9bd test: cover inline answer edge cases 2026-09-24 20:57:08 +08:00
YoursFunny 66ec14662c style: simplify inline answer returns 2026-09-24 20:57:08 +08:00