Commit Graph

14577 Commits

Author SHA1 Message Date
kolaente
c16fea46d2 fix: disable echo group 404 auto-registration to keep pre-5.3.0 routing behavior
echo v5.3.0 reverted to v4 behavior where every group with middleware
implicitly registers a 404 route at its prefix. Our route setup creates
multiple groups with the same prefix (rate-limit subgroups of /api/v1),
which now panics with a duplicate-route error at startup.
2026-07-15 12:18:59 +02:00
renovate[bot]
67e9e21178 fix(deps): update module github.com/labstack/echo/v5 to v5.3.0 2026-07-13 08:04:46 +00:00
renovate[bot]
b5a7f68502 fix(deps): update dependency @fortawesome/vue-fontawesome to v3.3.1 2026-07-13 07:48:32 +00:00
renovate[bot]
fc4effa678 fix(deps): update module github.com/yuin/goldmark to v1.8.4 2026-07-12 11:37:03 +00:00
Tink
4425e0d146 fix(attachments): keep blob mime type so pdf previews open inline (#3157) 2026-07-11 18:53:09 +02:00
Tink
b396bad3bb fix(postgres): resolve all statements against the configured schema (#3156) 2026-07-11 18:02:57 +02:00
TowyTowy
efdc675fa7 fix(caldav): compute VTODO DURATION components correctly (#3155) 2026-07-11 17:28:59 +02:00
renovate[bot]
8b4cda2203 chore(deps): update dev-dependencies 2026-07-11 12:21:26 +00:00
renovate[bot]
b6f6ac354a fix(deps): update dependency @sentry/vue to v10.64.0 2026-07-10 19:13:00 +00:00
kolaente
85231284ab feat(auth): add OpenID provider availability monitoring and retry logic (#3145) 2026-07-10 17:52:01 +02:00
Tink
190ff249ab fix(notifications): queue mails only after the notification row is committed (#3150) 2026-07-10 17:50:55 +02:00
renovate[bot]
e992ed594c fix(deps): update tiptap to v3.27.3 2026-07-10 12:52:48 +00:00
renovate[bot]
89133cd074 chore(deps): update actions/stale action to v10.4.0 2026-07-10 12:52:37 +00:00
renovate[bot]
c5f4dde4da chore(deps): update dev-dependencies 2026-07-10 12:52:27 +00:00
renovate[bot]
7c05161a78 chore(deps): update cachix/install-nix-action action to v31.10.7 2026-07-10 12:52:08 +00:00
kolaente
0b70fb2658 fix(cli): drain the mail queue before user commands exit
Mail sending is asynchronous: SendMail only enqueues the message and a
background daemon goroutine performs the actual SMTP delivery. CLI
commands exited as soon as their run function returned, killing the
daemon before the handshake completed, so `user reset-password`,
`user delete` and `user create` reported success without ever
sending their mail.

Add mail.StopMailDaemon which closes the queue and blocks until the
daemon has delivered all remaining messages (with a timeout so a broken
SMTP server can't hang the CLI), and call it from a PersistentPostRun
hook on the user command. The web server's non-blocking behavior is
unchanged.
2026-07-09 17:05:21 +00:00
renovate[bot]
bf820f29bb fix(deps): update module github.com/coreos/go-oidc/v3 to v3.20.0 2026-07-09 17:01:35 +00:00
renovate[bot]
d5f9317d49 fix(deps): update module github.com/wneessen/go-mail to v0.8.1 2026-07-09 16:59:51 +00:00
kolaente
fb55bf2a79 Extract golangci-lint setup into reusable action (#3142) 2026-07-09 15:17:35 +02:00
renovate[bot]
84a4f3e5b4 fix(deps): update module golang.org/x/net to v0.57.0 2026-07-09 11:57:15 +00:00
renovate[bot]
115e30377c fix(deps): update tiptap to v3.27.2 2026-07-09 11:56:03 +00:00
renovate[bot]
f0d2a0ed17 fix(deps): update module golang.org/x/term to v0.45.0 2026-07-09 11:54:49 +00:00
renovate[bot]
b4d2c28624 chore(deps): update dependency undici@6 to v8.7.0 2026-07-09 13:18:22 +02:00
renovate[bot]
e503090f8a fix(deps): update aws-sdk-go-v2 monorepo 2026-07-09 13:15:59 +02:00
renovate[bot]
050d4a881f fix(deps): update module golang.org/x/image to v0.44.0 2026-07-09 13:15:43 +02:00
renovate[bot]
fb79de94d5 chore(deps): update postgres:18 docker digest to 22c89fe 2026-07-08 17:34:31 +00:00
renovate[bot]
407c37a1f5 fix(deps): update module golang.org/x/sync to v0.22.0 2026-07-08 17:34:16 +00:00
renovate[bot]
26cef62e61 fix(deps): update module golang.org/x/sys to v0.47.0 2026-07-08 13:15:37 +00:00
renovate[bot]
f933774195 chore(deps): update dependency undici@7 to v8.7.0 2026-07-08 12:39:43 +00:00
renovate[bot]
58b2e68981 chore(deps): update postgres:18 docker digest to 3111367 2026-07-08 12:39:10 +00:00
renovate[bot]
2d3e8d48ba chore(deps): update dependency go to v1.26.5 2026-07-08 12:38:52 +00:00
renovate[bot]
33666d8fdc chore(deps): update danielroe/provenance-action digest to da28a90 2026-07-08 12:38:15 +00:00
renovate[bot]
9386141912 chore(deps): update ghcr.io/techknowlogick/xgo:go-1.26.x docker digest to b00957d 2026-07-08 07:32:16 +00:00
renovate[bot]
10d780f5cd chore(deps): update pnpm to v11.10.0 2026-07-08 07:32:05 +00:00
renovate[bot]
82ca2a970a fix(deps): update module code.dny.dev/ssrf to v0.3.0 2026-07-08 07:31:51 +00:00
Frederick [Bot]
c529ca0fc3 chore(i18n): update translations via Crowdin 2026-07-08 00:23:08 +00:00
kallegrens
82ee780161 feat(caldav): implement RFC 6578 sync-collection REPORT to sync task deletions
iOS Reminders (and other RFC 6578 clients) never learned about tasks
deleted on the Vikunja side: caldav-go answers unknown REPORT types
with 412, which makes iOS silently stop syncing, and deleted tasks left
no protocol-level trace a client could observe.

Intercept sync-collection REPORTs before caldav-go sees them and answer
per RFC 6578: tasks changed since the sync token as 200 entries and
deleted tasks as 404 entries. Deletion records come from task
soft-deletes, which are kept for 30 days before being purged.

Token edge cases: delta comparisons are inclusive because tokens have
second granularity (re-reported items keep their etag, so clients skip
the download), and tokens older than the soft-delete retention answer
403 + valid-sync-token to force a full resync instead of a delta that
would silently miss purged deletions.
2026-07-07 11:57:04 +00:00
kolaente
c85a56511b fix(tasks): bump project and task updated times when task sub-entities change
Relations, comments, attachments, assignees (via the shared listener)
and label add/remove now advance the project's updated timestamp, and
label changes also advance the task's, so CalDAV ctags and
sync-collection deltas reflect every change that is visible in a VTODO.
2026-07-07 11:57:04 +00:00
kallegrens
c8f136a11b feat(caldav): emit STATUS:NEEDS-ACTION for incomplete todos
Some clients, iOS Reminders among them, classify VTODOs more reliably
when the status is explicit instead of implied by a missing
STATUS:COMPLETED.
2026-07-07 11:57:04 +00:00
Frederick [Bot]
3ac5b29aef [skip ci] Updated swagger docs 2026-07-07 09:51:58 +00:00
Tink
d83e90541c feat(tasks): soft-delete tasks with permanent deletion after 30 days (#3119) 2026-07-07 11:38:33 +02:00
renovate[bot]
63d5263273 fix(deps): update module golang.org/x/text to v0.39.0 2026-07-07 07:26:35 +00:00
renovate[bot]
72d15da6a2 fix(deps): update aws-sdk-go-v2 monorepo 2026-07-06 20:29:54 +00:00
taiwithers
d8b4b49016 fix: use correct label for imported tasks 'project'
Changes the label in the dropdown menu for column mapping CSV task
imports from "Title" to "Project"
2026-07-06 20:19:39 +00:00
Frederick [Bot]
9d3c505e7f [skip ci] Updated swagger docs 2026-07-06 16:26:52 +00:00
kolaente
8a79c30477 chore(search): consolidate scoring comments and deduplicate test helpers
The ranking-gate comment still claimed title and description weigh
equally, which the 1.5x boost made wrong; scoring semantics now live only
at the boost call site. Test subtests share searchTaskPositions instead
of hand-building position maps four times.
2026-07-06 15:45:55 +00:00
kolaente
0986782321 feat(search): boost title matches 1.5x over description matches
With constant-score relevance, 1.5 ranks a title match above a description
match while two matched words (2.0) still beat a single boosted title word,
preserving "more matched words wins". ParadeDB-only; the substring fallback
has no scoring.
2026-07-06 15:45:55 +00:00
kolaente
f980f0424f docs(search): describe the actual constant-score relevance semantics
The fuzzy query shape makes pdb.score a constant-score sum (1.0 per
exact/prefix word-field match, 0.5 per one-edit match), not BM25, and no
field boosting is configured. Correct the comments claiming otherwise.
2026-07-06 15:45:55 +00:00
kolaente
350704573e test(search): pin ParadeDB matching contract with a behavioral test suite
Covers per-token matching across title and description, word-order
independence, description-only matches, and fuzzy(1)-against-token-prefix
matching, including its surprising looseness ("two" matching "world" via
the one-edit prefix "wo"). Skipped on databases without ParadeDB, whose
whole-string substring fallback intentionally matches less.
2026-07-06 15:45:55 +00:00
kolaente
167556ce2b feat(search): add explicit relevance sort field
sort_by=relevance renders as pdb.score(tasks.id) DESC at its requested
position, so clients can express orderings like done,relevance (undone
first, most relevant within each group). The implicit no-sort ranking
reuses the same mechanism via an injected sort param.

When the database or query shape cannot score, relevance params are
dropped and the remaining sorts plus the id tiebreaker apply, so the
field is safe to send unconditionally; getOrderByDBStatement also only
emits pdb.score when ParadeDB is actually available.

The quick-actions search sends sort_by=done,relevance (typed via
TaskFilterParams) and keeps surfacing undone tasks first.
2026-07-06 15:45:55 +00:00