Skip to content

Releases: Mininglamp-OSS/octo-server

v1.7.0

27 Jun 05:36
a366ac3

Choose a tag to compare

What's Changed

  • feat(searchetl): scaffold message-search ETL module + cursor table (YUJ-4530 phase 1) by @yujiawei in #365
  • feat(auth): per-request role resolution + tighten high-impact management gates by @an9xyz in #364
  • feat(searchetl): Kafka producer + transaction-split + payload extraction by @yujiawei in #368
  • feat(searchetl): ordered commit + cross-replica run-lock (C3) by @yujiawei in #369
  • feat(messages_search): in-conversation message search via OpenSearch by @BrDing-Rookie in #361
  • feat(manager): refine superAdmin/admin read gates + add /v1/manager/me capability map by @an9xyz in #372
  • fix(messages_search): add OCTO_SEARCH_OS_INSECURE_SKIP_VERIFY for sel… by @BrDing-Rookie in #374
  • feat(app_bot): delegate platform bot management to admin + localize the error/response surface by @an9xyz in #375
  • feat(integration): team group create + existence endpoints for uk_ keys by @an9xyz in #377
  • fix(integration): correct team-group created_at + two #381 follow-ups by @an9xyz in #383
  • feat(search): harden message read path, fail-closed authz, explicit backend by @yujiawei in #385
  • chore(security): allowlist test fixtures in gitleaks config by @yujiawei in #387
  • fix(opanalytics): widen dim columns & resolve Space prefix in private member uids (#392) by @an9xyz in #393
  • feat(space): add paginated member search endpoint for space admins by @an9xyz in #389
  • feat(messages_search): keyword optional on _search/_search_all + empty-search guard (reland #388) by @yujiawei in #395
  • feat(appconfig): emit messages_search_on alongside search_enabled by @yujiawei in #399
  • fix: invalidate offline-push name cache on group/thread rename by @an9xyz in #400
  • docs: add RELEASING.md pointing to org release process by @lml2468 in #402
  • fix: resolve incoming-webhook sender name in offline push by @an9xyz in #412
  • feat(searchetl): enrich producer with SpaceID/Visibles/MessageSeq (contract v2, fail-closed) by @yujiawei in #415
  • feat(searchetl): wire slow-cursor scheduler + Kafka.On lifecycle (safety checkpoint) by @yujiawei in #416
  • chore(octospec): pilot .octospec/ engineering-standard scaffold by @yujiawei in #418
  • fix(space): fall back to real_name + stable placeholder for empty member name (#344) by @yujiawei in #420
  • fix(group/test): bound test DB pool to stop MySQL connection exhaustion (OCT-8) by @lml2468 in #406
  • fix(incomingwebhook): address PR #330 review follow-ups (#297) by @an9xyz in #421
  • chore(octospec): adopt OKF v0.1 frontmatter + index/log by @yujiawei in #422
  • refactor: remove built-in search ETL producer (modules/searchetl) by @yujiawei in #424
  • feat(incomingwebhook): add /multica adapter for multica outbound webhooks by @lml2468 in #427
  • feat(incomingwebhook): add GitLab + Feishu platform adapters (#297 Phase 4) by @an9xyz in #423
  • fix(messages_search): strip Chinese stopwords + MSM 75% to kill multi… by @BrDing-Rookie in #435
  • feat(messages_search): surface mergeForward children as inner_messages by @BrDing-Rookie in #425
  • chore(octospec): fix base path glob + add trust-boundary rule by @yujiawei in #438
  • fix: split health liveness from readiness by @an9xyz in #437
  • fix(messages_search): fall back to raw payload when no keyword highlight by @BrDing-Rookie in #443
  • feat(incomingwebhook): mention support on the native push endpoint by @an9xyz in #445
  • feat(metrics): expose upstream-dependency metrics (DB/Redis pool + object-storage latency) by @an9xyz in #442
  • feat: serve Bot connect plugin package + API URL from backend (#446) by @an9xyz in #447
  • feat(incomingwebhook): caller-supplied mention.entities (directed @-pills) on native push by @an9xyz in #449
  • fix(messages_search): hard-filter system messages (payload.type 1000-2000) from /_search_messages and /_search_around by @BrDing-Rookie in #444
  • feat(incomingwebhook): visible mention render layer — broadcast pills + directed name resolution by @an9xyz in #450
  • refactor(incomingwebhook): harden directed-render guard + wire-seam test (#450 follow-up) by @an9xyz in #451
  • feat(incomingwebhook): deliver to thread (子区) channels by @an9xyz in #454
  • feat(incomingwebhook): add /v1/webhooks push route alias for /v1/incoming-webhooks by @an9xyz in #456
  • fix(bot_api): propagate App Bot token revocation across replicas via shared Redis cache by @an9xyz in #458
  • feat(messages_search): RichText search + virtual sub-doc consumer + narrow /_search payload types by @BrDing-Rookie in #457
  • feat(incomingwebhook): configure @mention on the webhook (create/update) instead of the push body by @an9xyz in #465
  • fix(ci): raise MySQL max_connections to stop flaky test failures by @an9xyz in #466
  • fix(messages_search): allow p2p search for same-Space members and own… by @BrDing-Rookie in #469
  • feat(group): per-hop latency observability for the invite-member flow by @an9xyz in #471
  • test(group): widen invite-latency tracing to the whole POST handler by @an9xyz in #472
  • feat(messages_search): gate image/video in /_search_all by keyword pr… by @BrDing-Rookie in #467
  • feat(metrics): record MySQL/Redis dependency latency via octo-lib observers by @an9xyz in #474
  • feat(incomingwebhook): return localized adapter examples by @an9xyz in #475
  • feat(messages_search): project richtext (type=14) detail from payloadRaw by @BrDing-Rookie in #477
  • test(group): trace invite-members latency with per-segment timing + trace_id by @an9xyz in #479
  • perf: shared avatar render cache to stop CPU starvation under fanout (#480) by @an9xyz in #481
  • feat(group): server-render default group avatars by @an9xyz in #478

New Contributors

Full Changelog: v1.6.1...v1.7.0

1.6.2

24 Jun 10:10

Choose a tag to compare

What's Changed

  • fix: resolve incoming-webhook sender name in offline push @an9xyz (#412)
  • fix(incomingwebhook): address PR #330 review follow-ups (#297) @an9xyz (#421)
  • feat(incomingwebhook): add /multica adapter for multica outbound webhooks @lml2468 (#427)
  • feat(incomingwebhook): add GitLab + Feishu platform adapters (#297 Phase 4) @an9xyz (#423)

Full Changelog: v1.6.1...v1.6.2

1.6.1

13 Jun 09:13
fde79cf

Choose a tag to compare

What's Changed

  • fix(conversation_ext): exclude blacklisted members from thread-ext materialization (fanout + FollowChannel) @yujiawei (#356)
  • fix(bot_api): require active group membership for bot thread endpoints @yujiawei (#357)
  • fix(thread): close subchannel blacklist read/write gates with ExistMemberActive (fast-follow #343) @yujiawei (#345)
  • fix(group): close remaining thread-subscription cleanup gaps + exclude blacklist from subscriber source (续 #27/#332) @yujiawei (#343)
  • fix(avatar): opaque output, dynamic font size, and botfather branding @an9xyz (#349)
  • feat(incomingwebhook): open webhook management to group members and bots @an9xyz (#340)
  • feat(user): server-rendered default avatar with nickname initials @an9xyz (#346)
  • fix(space): prevent ownerless space via member role update @an9xyz (#339)
  • feat(bot_api): resolve channel target (group/thread) by name @jeff-wilson2010 (#337)
  • feat(i18n): localize BotFather command menu via per-request rendering (#335) @an9xyz (#338)
  • fix(group): clean thread_setting on removal and drop latent thread-module cleanup copy @an9xyz (#332)
  • feat(i18n): localize BotFather outbound IM messages (#304) @an9xyz (#316)
  • feat(incomingwebhook): GitHub / WeCom platform adapters on push (Phase 3) @an9xyz (#330)
  • docs(botfather): deprecate server-generated Bot skill @an9xyz (#325)
  • feat(opanalytics): complete P1 dashboard queries @an9xyz (#329)
  • fix(group): unsubscribe removed members from all non-deleted thread channels (#27) @an9xyz (#300)
  • ci: complete reusable caller coverage @lml2468 (#326)
  • fix: add stable bot default avatars @an9xyz (#322)
  • ci: remove pr-contributor-welcome caller @lml2468 (#323)
  • test(opanalytics): harden trend edge cases @an9xyz (#321)
  • feat(opanalytics): add trend and message composition @an9xyz (#317)
  • fix(botfather): always generate lowercase bot IDs (Fixes #302) @caster-Q (#303)
  • ci(codeql): switch to weekly schedule only @lml2468 (#313)
  • feat: return thread status in /sidebar/sync for thread items (#310) @boris-clark (#312)
  • feat(opanalytics): add manual ETL trigger endpoint @an9xyz (#315)
  • feat(incomingwebhook): delivery failure observability + test push + text alias (Phase 2) @an9xyz (#299)
  • feat(incomingwebhook): rich text / image-text blocks on push (Phase 1) @an9xyz (#298)
  • feat(opanalytics): IM operations analytics dashboard (P0) @an9xyz (#308)
  • ci: pass TRIAGE_WEBHOOK_URL to octo-issue-notify @lml2468 (#311)
  • ci: pin .github reusable workflows to @v1 @lml2468 (#306)

CI and Infrastructure

  • feat(usersecret): user external secret alias table + write-only CRUD + resolve @yujiawei (#301)

Full Changelog: v1.6.0...v1.6.1

v1.6.0

06 Jun 09:47
f8581dd

Choose a tag to compare

What's Changed

  • feat(i18n): migrate OIDC bind flow to ResponseErrorL (Part of #170) by @an9xyz in #223
  • feat(i18n): externalize email templates + lang-aware send chain (#221) by @an9xyz in #224
  • fix(message): apply group revoke permission to community topics (#222) by @an9xyz in #226
  • fix(oidc): invalidate current token on logout by @an9xyz in #225
  • docs: add rate-limiting guidance to CLAUDE.md by @an9xyz in #228
  • feat(octo-server): RichText=14 server adapt — plain gen + push alert + search index (Phase 1) by @yujiawei in #232
  • fix: use shared UID limiter for app bot apply by @an9xyz in #234
  • feat(robot/bot_api): bot 群级免@偏好——建表 + owner 写/读/列群 + adapter 读端点 by @yujiawei in #238
  • feat(incomingwebhook): Discord-style group incoming webhooks by @an9xyz in #31
  • feat(robot): mention_pref 写后推 mention_pref_updated 事件 by @yujiawei in #243
  • fix(incomingwebhook): address #246 post-merge follow-ups by @an9xyz in #249
  • fix(message): RichText=14 plain consistency on edit paths (Phase 1) by @yujiawei in #235
  • feat(botfather): UserAPIKeyService + Bot occupancy (bind/unbind) for Octo-link by @an9xyz in #239
  • fix(botfather): make #239 migrations idempotent to stop CrashLoopBackOff by @an9xyz in #253
  • fix(group): rollback MySQL records when IM channel creation fails during CreateGroup by @pkuWMH in #248
  • fix(incomingwebhook): resolve iwh_ sender identity for channel/user/avatar APIs by @an9xyz in #250
  • ci: add -shuffle=on to go test for order-dependency detection by @lml2468 in #260
  • ci: add timeout-minutes to all CI jobs by @lml2468 in #259
  • feat(group): 群级「允许免at」总开关 + bot_api 两轴AND mention_pref by @yujiawei in #263
  • feat(incomingwebhook): soft-delete webhooks so deleted webhooks' historical messages still render by @an9xyz in #258
  • fix(group): expose allow_no_mention in channel serialization + silent toggle by @yujiawei in #264
  • docs: add i18n / error-localization conventions to CLAUDE.md by @an9xyz in #231
  • feat: add OIDC integration exchange by @an9xyz in #256
  • fix(ci): provision WuKongIM for integration tests by @an9xyz in #270
  • docs: add agents guide by @an9xyz in #257
  • feat(i18n): migrate robot module to ResponseErrorL (#267) by @an9xyz in #268
  • feat(i18n): migrate space module to ResponseErrorL (#269) by @an9xyz in #271
  • feat(i18n): migrate small utility modules to ResponseErrorL by @an9xyz in #273
  • feat(i18n): propagate language over gRPC by @an9xyz in #275
  • feat(i18n): migrate bot_api module to ResponseErrorL (#276) by @an9xyz in #277
  • feat(avatar): version avatar object keys for CDN-safe cache busting by @an9xyz in #282
  • test: isolate common login config tests by @an9xyz in #283
  • ci: add Docker lint workflow (hadolint + shellcheck) by @lml2468 in #262
  • ci: add OSV-Scanner vulnerability scanning by @lml2468 in #261
  • feat(i18n): migrate botfather module to ResponseErrorL (#278) by @an9xyz in #279
  • feat(incomingwebhook): layered push rate limiting (local floor + per-IP failure budget) by @an9xyz in #285
  • ci: add history check (reject orphan-branch PRs) by @lml2468 in #286
  • feat(incomingwebhook): make local push floor IP-aware to avoid cross-IP starvation by @an9xyz in #288
  • feat(sidebar): make recent-tab activity filter configurable per channel type by @an9xyz in #291
  • feat(incomingwebhook): runtime master toggle + tunable thresholds via system_setting by @an9xyz in #292
  • feat(incomingwebhook): cache the push hot-path lookups (#284 item 2) by @an9xyz in #293
  • feat(conversation): opt-in recent activity-window filter on /v1/conversation/sync (#294) by @an9xyz in #295

New Contributors

Full Changelog: v1.5.1...v1.6.0

1.5.1

01 Jun 10:45
96530d7

Choose a tag to compare

What's Changed

  • feat(oidc): RP-Initiated Logout — backend issues end_session URL on logout @an9xyz (#217)
  • feat(i18n): migrate modules/category to ResponseErrorL @an9xyz (#214)
  • feat(i18n): migrate modules/workplace to ResponseErrorL @an9xyz (#213)
  • feat(i18n): migrate modules/message to ResponseErrorL (Phase 2.1) @an9xyz (#203)
  • fix(ci): add ready_for_review to check-sprint trigger types @lml2468 (#212)
  • docs: add CLAUDE.md for AI agent coding guidance @yujiawei (#211)
  • fix(robot): bot 事件 mention 归一化(strip 裸 mention.all=1) @yujiawei (#210)
  • fix(ci): finalize PR notification design (remove octo-pr-feed + fix result-notify) @lml2468 (#209)
  • chore(ci): add octo-pr-feed workflow to activate global pr-feed channel @lml2468 (#202)

Full Changelog: v1.5.0...v1.5.1

v1.5.0

30 May 10:08
85787ab

Choose a tag to compare

What's Changed

  • feat(space): extend manager member search to username/email/phone @an9xyz (#200)
  • feat(i18n): migrate modules/group to ResponseErrorL (Phase 2.1) @an9xyz (#198)
  • chore(botfather): update CLI package name to create-openclaw-octo @caster-Q (#196)
  • feat(i18n): complete modules/user migration to ResponseErrorL (manager + friend + login + …) @an9xyz (#197)
  • test+ci(i18n): close Phase 0 verification gaps and wire 0.10 migration gates @an9xyz (#193)
  • fix(category): allow external-group follow into current-space category @an9xyz (#192)
  • feat(i18n): migrate modules/user/api.go to ResponseErrorL (Phase 2.1) @an9xyz (#188)
  • fix: restrict review-feed to ready_for_review and review_requested @lml2468 (#190)
  • feat(appconfig): admin-tunable disable_user_create_space toggle @an9xyz (#189)
  • feat: add pr-review-feed and pr-result-notify caller workflows @lml2468 (#187)
  • feat(i18n): AST extractor + marker pipeline @an9xyz (#186)
  • feat(voice): add POST /local-config/reset proxy + fix 404 handling @ploy-elison (#184)
  • chore(ci): add edited trigger to check-sprint and auto-add workflows @lml2468 (#177)
  • feat(user): expose language preference via /v1/user/* API @an9xyz (#182)
  • feat(i18n): user language resolver + hot cache + late-stage merge @an9xyz (#181)
  • feat(auth): versioned token cache codec + user.language column @an9xyz (#179)
  • feat(voice_adapter): local ASR proxy + security hardening @ploy-elison (#180)
  • feat: migrate thread errors to localized envelope @an9xyz (#176)
  • feat: use OCTO trusted header envs @an9xyz (#178)
  • feat: default i18n language to zh-CN @an9xyz (#175)
  • feat: add i18n request-side utilities @an9xyz (#172)
  • fix: move permissions to workflow top level for pr-contributor-welcome @lml2468 (#169)
  • fix(message): add space_memberships sideband on /v1/conversation/sync @an9xyz (#159)
  • feat: per-space voice feedback settings API @ploy-elison (#168)
  • fix(space): close banned-status TOCTOU on user-side PUT /v1/space/:space_id @an9xyz (#165)
  • feat(space): align user-side PUT /v1/space/:space_id with manager endpoint (#163) @an9xyz (#164)
  • feat(manager): add PUT /spaces/:space_id to update space profile @an9xyz (#158)
  • fix(obo): DM fan-out honors global_enabled without scope rows @yujiawei (#162)
  • fix: align issue template labels with repo label naming convention @lml2468 (#156)
  • feat: add check-sprint-on-merge workflow @lml2468 (#152)

CI and Infrastructure

  • feat: add wkhttp i18n error flow @an9xyz (#174)
  • feat(i18n): add codes registry + go-i18n bundle foundation @an9xyz (#171)
  • feat(file): add awsS3 backend for AWS S3 and S3-compatible storage @an9xyz (#147)

Full Changelog: v1.4.1...v1.5.0

1.4.1

24 May 02:11
6e3264c

Choose a tag to compare

What's Changed

Bug Fixes

  • fix(follow): materialize ext rows for default-followed groups (#151) @an9xyz
  • fix(message): backfill resolved space_id in sync conversation/sidebar responses (#153) @yujiawei (#154)

Full Changelog: v1.4.0...v1.4.1

v1.4.0

23 May 10:11
23236c3

Choose a tag to compare

v1.4.0

Cumulative minor release since v1.3.0. Contains breaking changes — please review the Upgrade notes before deploying.

Highlights

  • Persona Clone / OBO v2feat(bot_api) v0 backend (#82) → v2 fan-out narrowing, persona_prompt, typing indicators, grant mutex (#109); implicit scope + Gate 4 (#121); adapter-side GET /v1/bot/obo-grant (#136); active toggle on grants (#131).
  • OIDC self-service — bind flow for autolink failures (#73); account creation from SSO claims via /bind/create (#93); bind redirect carries provider + Referrer-Policy: no-referrer (#80).
  • Auth — new login.local_off system_setting to disable local-account login when full OIDC is configured (#104).
  • Voice → octo-speech adaptermodules/voice retired, replaced by modules/voice_adapter calling the external octo-speech service (#113). feedback_url in voice config API (#90), request_id in /transcribe response (#67), per-space voice feedback settings API (#130).
  • conv_ext cascade follow — channel → threads cascade with fan-out on new threads (#123).
  • Redis TLSRedisTLS config propagated to all direct go-redis.NewClient call sites (#134).
  • Business-error metric — new Prometheus counter dmwork_http_business_error_total via response-body sniffing (#141).
  • Mention ingress regularisationmention.ais=1 is expanded to mention.uids at ingress; bot reminders filtered accordingly (#144). all → ais rewrite removed from mentionrewrite (#143). @所有AI legacy-adapter compat in AIS broadcast fan-out (#138).

⚠️ Upgrade notes (breaking)

  • Voice module retired. Deploy octo-speech and set SPEECH_SERVICE_URL / SPEECH_API_KEY (plus optional SPEECH_TIMEOUT, SPEECH_MAX_BODY_SIZE, SPEECH_MAX_CONTEXT_LENGTH, SPEECH_MAX_FILE_SIZE, VOICE_FEEDBACK_PRIVACY_URL). Remove the now-unused VOICE_* / ASR_LOG_* env vars. VOICE_MAX_VOICE_CONTEXT_LENGTH is still read as a fallback for SPEECH_MAX_CONTEXT_LENGTH.
  • docker/octo/ and docker/tsdd/ retired. Deployment source-of-truth moves out of this repo — use the dedicated deployment repo / Helm chart instead.
  • Schema: user.phone and user.zone restored to NOT NULL (fixes #54). The migration backfills existing NULL rows to '' first, then ALTER MODIFY — no manual action required; ALTER is INSTANT/INPLACE on MySQL 8 InnoDB.
  • Toolchain: build image bumped from golang:1.20 to golang:1.25-alpine. Rebuild downstream images.
  • OIDC env vars renamed. Use DM_OIDC_PROVIDER_* (issuer / client_id / client_secret / redirect_uri / scopes / require_email_verified / require_pkce / auto_link_by_email / auto_link_by_phone / allow_new_user / clock_skew / http_timeout / sync_interval / sync_concurrency). The legacy DM_OIDC_AEGIS_* aliases are still accepted as fallback. DM_OIDC_RT_ENC_KEY (base64, decodes to 32 bytes) is now required when OIDC is enabled.

What's Changed

  • fix(oidc): always serialize masked_email/masked_phone in /bind/info @an9xyz (#149)
  • fix(mention): expand mention.ais=1 into mention.uids at ingress chokepoint @yujiawei (#144 / #145)
  • feat(metrics): add dmwork_http_business_error_total via response body sniffing @an9xyz (#141)
  • refactor(mentionrewrite): remove all→ais rewrite (GH#142) @yujiawei (#143)
  • fix(robot): @所有AI 兼容旧 adapter — 在 ais 广播 fan-out 中给每个 bot 的 payload 副本追加 uid 到 mention.uids @yujiawei (#138)
  • feat(obo): add GET /v1/bot/obo-grant for adapter-side persona pull @yujiawei (#136)
  • fix(obo): add active field to oboUpdateGrantReq — persona toggle switch (#129) @yujiawei (#131)
  • feat(user): add per-space voice feedback settings API @ploy-elison (#130)
  • chore: add @Mininglamp-OSS/server-maintainers to CODEOWNERS @lml2468 (#128)
  • fix(obo_fanout): decodeMentionGate honors mention.humans (Plan X @所有人) (#125) @yujiawei (#126)
  • feat(conv_ext): cascade follow channel → threads with fanout on new threads @an9xyz (#123)
  • feat(obo): implicit scope + persona_prompt + fan-out Gate 4 @yujiawei (#121)
  • fix: add 'dependencies' label to release-drafter config @lml2468 (#120)
  • fix: pr-contributor-welcome permission pull-requests:write → issues:write @lml2468 (#119)
  • chore: add dependabot config for automated dependency updates @lml2468 (#118)
  • fix(obo): fan-out findActiveGrantsForChannel honors global_enabled for groups @yujiawei (#114)
  • feat(voice): replace voice module with octo-speech adapter @Jerry-Xin (#113)
  • feat(ci): add PR contributor welcome caller @lml2468 (#110)
  • feat(obo): v2 fan-out narrowing + persona_prompt + typing + grant mutex @yujiawei (#109)
  • fix(ci): use _ for unused loop counter to clear shellcheck SC2034 @lml2468 (#107)
  • feat(bot_api): Persona Clone OBO backend v0 (PR-A) @yujiawei (#82)
  • fix(ci): use pull_request_target in octo-pr-feed to fix fork PR notifications @lml2468 (#106)
  • feat(auth): add login.local_off switch to disable local-account login @an9xyz (#104)
  • fix(category): close TOCTOU window in moveGroupToCategory + FollowDM @tongjichao (#79)
  • chore(ci): standardize reusable workflow refs to @main @lml2468 (#100)
  • feat(oidc): self-service account creation from SSO claims via /bind/create @an9xyz (#93)
  • chore(ci): pin octo-issue-feed caller to @v2 @lml2468 (#92)
  • feat(ci): simplify octo-issue-feed to new/reopen only @lml2468 (#91)
  • feat(ci): add release drafter and gated release publish @lml2468 (#89)
  • feat(ci): add CodeQL security scan and Workflow Sanity check @lml2468 (#88)
  • feat(voice): add feedback_url to voice config API @ploy-elison (#90)
  • fix(ci): replace negation filter with positive-pattern filter @lml2468 (#85)
  • fix(pr-feed): use pull_request trigger, pin SHA, add feed_group_id @lml2468 (#59)
  • feat(ci): refine CI + add stale and PR labeler @lml2468 (#84)
  • fix(oidc): bind redirect carries provider + Referrer-Policy no-referrer @an9xyz (#80)
  • feat(oidc): self-service binding for OIDC autolink failures @an9xyz (#73)
  • feat(voice): return request_id in transcribe API response @ploy-elison (#67)

CI / Infrastructure

  • feat(redis): wire RedisTLS config into direct go-redis NewClient sites @an9xyz (#134)

Full Changelog: v1.3.0...v1.4.0

v1.3.0

18 May 15:06
a741a02

Choose a tag to compare

What's Changed

Features

  • feat(common): allow DB overrides for YAML settings by @an9xyz in #76

Fixes

  • fix(user): restore NOT NULL on user.phone / user.zone (issue #54) in #71
  • fix(category): unfollow conversations when a category is deleted in #74
  • fix(common): rich multipart envelope for /test_email to bypass anti-spam silent drops in #78

Full Changelog: v1.2.0...v1.3.0