Skip to content

Releases: TurtleByte-IN/mailrules

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 16:05
6e4fb31

Changelog

  • 6e4fb31 Merge pull request #61 from TurtleByte-IN/fix/mai-264-mark-read-with-trash
  • 9de7ddb Merge remote-tracking branch 'origin/main' into fix/mai-264-mark-read-with-trash
  • e2499ef Merge pull request #60 from TurtleByte-IN/fix/mai-262-batch-cleanup-moves
  • 8f04768 Keep "Also mark as read" when a built rule moves mail to Trash (MAI-264)
  • 706beb2 Cleanup Sort and undo move mail in batches, not one email at a time (MAI-262)
  • 06511ab Merge pull request #59 from TurtleByte-IN/fix/mai-253-removed-member-signs-in
  • 9939f17 A removed team member can sign in again; forgetting counts only members (MAI-253, MAI-254)
  • 13f4556 Merge pull request #58 from TurtleByte-IN/feature/mai-246-company-sign-in
  • a52c4df Company sign-in for the Team plan: the add-on in Plan and billing, the setup link in Settings (MAI-246)
  • 8a2dbae Merge pull request #56 from TurtleByte-IN/fix/mai-247-team-seats-invites
  • 3be236b Merge branch 'main' into fix/mai-247-team-seats-invites
  • bcc1443 Merge pull request #57 from TurtleByte-IN/fix/mai-241-first-sort-flakes
  • 925420b Merge branch 'main' into fix/mai-241-first-sort-flakes
  • 576636b Merge remote-tracking branch 'origin/main' into fix/mai-247-team-seats-invites
  • 49485ee Merge pull request #55 from TurtleByte-IN/fix/mai-250-checkout-inline-styles
  • c7cdfba Team seats: one count, invitations add a seat, freed seats given back, no invitation to an existing account (MAI-247, MAI-248, MAI-249)
  • 4c57a34 imaptest: announce at IDLE start what changed since the last command
  • 17a76a0 Let a billing checkout ask for inline styles in the CSP (MAI-250)
  • 032fab7 Merge pull request #54 from TurtleByte-IN/fix/mai-251-hosted-test-summary-error
  • 3075ee6 Hosted: a failed test summary no longer shows the operator's mail-server error
  • 01a0064 Merge pull request #53 from TurtleByte-IN/fix/mai-244-summary-skips-undone
  • 4bb011b Merge branch 'main' into fix/mai-244-summary-skips-undone
  • 5f9d106 Merge pull request #51 from TurtleByte-IN/fix/mai-243-reload-keeps-page
  • 4a5653a Merge branch 'main' into fix/mai-243-reload-keeps-page
  • 9636d28 Merge pull request #52 from TurtleByte-IN/fix/mai-242-cloud-settings-wording
  • 7a92ebb Settings: hosted users see no self-host settings (MAI-242)
  • c7e580f Open the screen an address without the hash names (/rules)
  • e6da12f Summary email: an email whose latest actions were all undone is not counted as sorted (MAI-244)
  • c81ae40 Merge pull request #50 from TurtleByte-IN/feature/mai-234-team-plan
  • 99b58d7 Web: regenerate the API client
  • 8d70361 Plan status for every role; audit log forgets a removed member's address
  • 559ad64 Docs: the team migration is 0029
  • c5a9862 Audit: a rule's draft reply setting
  • 3700752 Merge origin/main (draft replies) into the team plan
  • a115e22 Number the team migration after draft replies' 0028
  • 26cf0df Merge pull request #49 from TurtleByte-IN/feature/mai-233-draft-reply-hook
  • 37e931b Merge remote-tracking branch 'origin/main' into feature/mai-233-draft-reply-hook
  • 79ac8aa Merge remote-tracking branch 'origin/main' into feature/mai-234-team-plan
  • d1e86c5 Merge pull request #48 from TurtleByte-IN/feature/mai-239-otel-export
  • 78c5c5f Team plan in the daemon: roles, members, invitations, seats, audit log (MAI-234)
  • b8c1217 Postgres 0028: replace mailrules_tenants as its owner, the definer
  • 4e354e7 Lint: compare test errors with errors.Is
  • 48c52a1 gofmt
  • 2e610b1 Draft replies through a module: a rule setting, an outbox the module writes from, the reply saved in Drafts and undoable (MAI-233)
  • 32b162c telemetry: optional OpenTelemetry export of the metrics and the log (MAI-239)
  • 952ee57 Merge pull request #47 from TurtleByte-IN/feature/mai-236-log-redact-addresses
  • 381753f Redact email addresses from the log when LOG_REDACT_ADDRESSES is on (MAI-236)
  • e09369f Merge pull request #46 from TurtleByte-IN/feature/mai-238-activity-action-filter
  • f4e93ec Guide: describe the Activity Action filter
  • 3c66f91 Activity: filter by the action taken
  • 4894504 Merge pull request #45 from TurtleByte-IN/feature/mai-227-module-error-sink
  • b2e2ce0 Merge branch 'main' into feature/mai-227-module-error-sink
  • 8c08a0d ext: hand every logged error and recovered panic to a module (MAI-227)
  • 5a1366e Merge pull request #44 from TurtleByte-IN/chore/mai-232-web-bundle-budget-icons
  • 4551924 web: gzip bundle-size budget in make check; PNG and apple-touch icons
  • 32e20c5 Merge pull request #43 from TurtleByte-IN/feature/mai-218-gmail-app-password-workspace-tile
  • 16c602c Merge branch 'main' into feature/mai-218-gmail-app-password-workspace-tile
  • 908d551 Merge pull request #42 from TurtleByte-IN/chore/mai-215-code-of-conduct
  • 39be094 Gmail is an app password in every build; one-click Google is a separate Google Workspace tile
  • 3312c69 Add a code of conduct (Contributor Covenant 2.1)
  • 909f014 Merge pull request #41 from TurtleByte-IN/feature/mai-216-module-key-provider
  • 52fd28f Module key provider: a module holds the key that wraps tenant data keys (MAI-216)
  • 0352156 Merge pull request #40 from TurtleByte-IN/fix/mai-214-concurrent-writers-flake
  • 6373ad1 Index the references to messages and decisions; make the concurrent-writers test deterministic (MAI-214)
  • de43657 Merge pull request #39 from TurtleByte-IN/feature/mai-150-4-daemon-wiring
  • 39c9305 Run the hosted build on Postgres: app, worker and owner URLs
  • 6533ed2 Merge pull request #38 from TurtleByte-IN/feature/mai-150-3-tenant-keys
  • 1706c79 Tenant data keys: each tenant's secrets under its own key, wrapped by a KeyProvider (MAI-150)
  • fe70b0f Merge pull request #37 from TurtleByte-IN/feature/mai-150-2-postgres-rls
  • 46d8554 Merge origin/main (MAI-210 plans) into feature/mai-150-2-postgres-rls; plans on Postgres (0024 twin), plan-end sweep per tenant
  • 861659c WIP: Postgres store with row-level security (MAI-150)
  • 6278e08 Merge pull request #36 from TurtleByte-IN/feature/mai-210-tenant-plan-billing
  • 40a70ef A build that sells plans starts only with a mail server; nothing is deleted before a warning was delivered
  • 9e348f0 Merge origin/main into feature/mai-210-tenant-plan-billing
  • 1caa667 Plans per tenant set by a billing module: limits, features, Plan and billing, read-only and the end of a plan (MAI-210)
  • 55fe442 Merge pull request #35 from TurtleByte-IN/feature/mai-150-1-dialect-shim
  • 0369804 Store: every statement through one binding layer; viewer ids bound, RETURNING ids (MAI-150)
  • 0284a80 Merge pull request #33 from TurtleByte-IN/feature/mai-188-tenant-limits
  • a051d71 Merge origin/main into feature/mai-188-tenant-limits
  • eaa5b9a gofmt; number the allowance migration 0023
  • 5fdc0ac Merge pull request #34 from TurtleByte-IN/feature/mai-176-person-moved-hook
  • 73e1029 First-cleanup grant: cleanup checks draw on a one-time grant before the monthly allowance
  • 20cf938 actions: Present only reads a mailbox (MAI-176)
  • e79bd41 Activity: ask about emails moved in another mail app; docs (MAI-176)
  • 249d862 Moves: daemon worker, questions API and end-to-end tests (MAI-176)
  • c56c35e Merge origin/main into feature/mai-176-person-moved-hook
  • 907fde0 WIP: move wa...
Read more

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 09 Oct 01:11
2d5a0fe

Changelog

  • 2d5a0fe Merge pull request #8 from TurtleByte-IN/feature/mai-133-hosted-sign-in-tenants
  • 0ccd605 Build with Go 1.27.2: five net/http fixes govulncheck requires; the Dockerfile's golang tag must match go.mod's toolchain (MAI-152)
  • 8d25b74 Plug-in point: public and webhook routes, module sign-in and sign-out, ending an identity's sessions; HTTP tenant-isolation tests (MAI-133)
  • 0af72f6 Operator keys go only to the operator's endpoint; a member's summary goes to their own address once the team has two (MAI-133)
  • f1fc86b Web: Continue sign-in through a module, sign-in errors, module sign-out, shared-with-team switch (MAI-133)
  • bedef91 Tenants own rules, settings and usage; each mailbox has an owner and a shared switch (MAI-133)

v0.1.4

Choose a tag to compare

@github-actions github-actions released this 08 Oct 22:16
69d309e

Changelog

  • 69d309e Merge pull request #6 from TurtleByte-IN/chore/mai-135-verify-release-before-latest
  • c193b96 Merge branch 'main' into chore/mai-135-verify-release-before-latest
  • f0a237a Merge pull request #7 from TurtleByte-IN/chore/fix-sortcutshort-deadlock
  • 37645cb Worker test: a run cut short ends the account's context instead of calling Stop while holding the account, which deadlocked when the supervisor had just woken; reverts the drain-time change, which was not the cause
  • 7d16043 Merge pull request #5 from TurtleByte-IN/chore/mai-136-coverage-floor
  • c496521 MAI-135: a release is installed and run on every platform before it becomes the latest, the image gets latest and the cask reaches the tap
  • d910faf MAI-136: make check fails when internal/rules, internal/pipeline or internal/actions falls below 80% statement coverage

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 08 Oct 20:10
9eac5e9

Changelog

  • 9eac5e9 Merge pull request #4 from TurtleByte-IN/chore/watch-test-missed-idle-gap
  • 9e7e627 Accounts watch test: a second delivery wakes the watcher when the test server never announced the first, which it does not for mail landing just before IDLE
  • da85742 Merge pull request #3 from TurtleByte-IN/feature/mai-132-keep-rules-of-removed-mailbox
  • 6626409 Merge pull request #2 from TurtleByte-IN/fix/mai-129-account-condition-by-address
  • 1654fe2 MAI-132: removing a mailbox keeps its rules: a rule for it only is switched off and marked until it gets a mailbox or new conditions, and account conditions naming it are rewritten, so the rules file still exports
  • 3570ce1 MAI-129: a rules file names the mailboxes in account conditions by address, and an import refuses an address no connected mailbox has or two have, and a number
  • 48917e3 MAI-100: README shows the demo GIF and links to mailrules.app with UTM tags
  • 87070ad Worker test: a run cut short by Stop uses a short drain time, so a slow runner does not outwait the test
  • d2469d8 MAI-43: the answer to starting a cleanup check is the check as it began, not however far its run got in the meantime

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 08 Oct 18:13

Changelog

  • 78b63d8 MAI-43: a sort frees its mailbox before it is marked finished, so the next run can start as soon as the screen says done; watch test waits up to 15 s for IMAP push
  • e9e8d19 MAI-123: Compose passes MAILRULES_TRUSTED_PROXIES and MAILRULES_NEW_MASTER_KEY, and a test fails when a setting is missing from it
  • 6d17892 Merge branch 'feature/mai-43-manual-run-any-mailboxes-rules' into chore/oss-wave-integration
  • 4d528b8 Merge branch 'fix/mai-120-lost-master-key-detection' into chore/oss-wave-integration
  • 69ff77b Merge branch 'fix/mai-121-admin-password-change-reset' into chore/oss-wave-integration
  • 86d7bf9 Merge branch 'fix/mai-122-proxy-login-rate-limit' into chore/oss-wave-integration
  • 4cdf7a4 Merge branch 'feature/mai-14-rewrite-rule-with-ai' into chore/oss-wave-integration
  • 01ef47f Merge branch 'fix/mai-112-web-copy-and-presets' into chore/oss-wave-integration
  • d5b82ef Merge branch 'fix/mai-116-yaml-roundtrip-and-fallback-warning' into chore/oss-wave-integration
  • 9cd6016 Merge branch 'fix/mai-124-cli-accounts-compose-version' into chore/oss-wave-integration
  • d949740 MAI-43: run Cleanup by hand on any mix of mailboxes and rules
  • 0f11c35 MAI-120: refuse to replace a lost master.key while the database holds stored secrets
  • bdf5144 MAI-121: change the admin password while signed in (POST /api/auth/password) and reset it from the host (mailrules users reset-password)
  • f9122db MAI-115: drop the redundant current-model line under the Model field
  • 42746a1 MAI-116: YAML export and import keep defaults and each rule's mailbox
  • 76cbdaf MAI-124: serve picks up mailboxes added with the CLI; MAI-123: compose passes the omitted settings; MAI-126: one version form (no leading v), compose passes VERSION
  • c3214c3 MAI-122: count failed sign-ins per real client behind a trusted proxy (MAILRULES_TRUSTED_PROXIES), and per email
  • 232081f MAI-115: rule Model list can show and set openai:, ollama: and name:model values
  • 4cf3978 MAI-117: say when the fallback model is not active
  • 8afccca MAI-112, MAI-119: wizard Connect step no longer claims to go live; Zoho region choice
  • 3fc38d8 MAI-106: Cold sales template skips senders you have replied to
  • ea23aa5 MAI-114: Rules subtitle states the real evaluation order and links the guide
  • 85776bd MAI-113: Activity detail shows the configured snippet retention in days

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 08 Oct 14:35

Changelog

  • 91ca9ef Docs: user guide in docs/guide, with the settings reference generated from internal/config

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 08 Oct 13:32

Changelog

  • cede310 Release: give the Homebrew tap token as a bare .Env reference, the only form GoReleaser accepts for tokens
  • 4298a6c Contributing: outside pull requests are not accepted for now; issues are welcome and security reports go through private vulnerability reporting
  • 62d72af Undoing a Cleanup batch, the last hour or what a rule did today now asks first, saying how many emails go back when known and that dry-run does not stop an undo, while one email's Undo stays one click (MAI-109)
  • 55f187c Merge feature/mai-99-summary-email
  • 8e1d956 You can now get a daily or weekly summary email of what MailRules sorted per rule, what it trashed and what waits in Needs review, with links back into the app, sent through your own SMTP server and set up, tested and previewed in Settings (MAI-99)
  • 4d1f994 The free build no longer includes Suggest from my mail: its engine moves to the hosted build, which adds it through the new public plug-in package ext, while the free build hides the tab and answers its route with not_available (MAI-96)
  • f43afba Merge fix/mai-65-light-contrast
  • e0c8143 Activity groups each day's rows by when MailRules acted on them, newest first, shows that time on the row and the arrival date in the details, calls its first tile "Acted on today" so "Sorted" means the same as on the Overview, and a rule added from a template says "Added from the Receipts template" instead of quoting words the user never said (MAI-74, MAI-71, MAI-73)
  • 7092bb1 Input borders, the Connecting dot, the idle bar and muted text on the selected nav item now meet WCAG AA contrast in light mode. MAI-65
  • c57a832 Merge fix/mai-41-tester-limit-and-tabs
  • e64974d The tester and scan boxes take their bounds from the daemon, a draft card says how many emails it was really tested on, and the Add rules tabs are real tabs for screen readers and the keyboard (MAI-41, MAI-42, MAI-54)
  • 0c5b43f Rules name the folder a trash rule's mail really goes to, a No rule row shows the model's confidence that no rule applies in its chip as in its reason, Settings labels keep their space before the dot, Select all and Select none in a cleanup check act on the rows the rule filter shows, a late Settings load no longer overwrites newer values, and connecting a mailbox no longer logs a Svelte warning (MAI-72, MAI-78, MAI-79, MAI-47, MAI-58, MAI-39)
  • 3da7312 Cleanup shows what a check would do as a chart, with Choose emails opening the list in a short scrolling box (MAI-93)
  • 48744b8 README: install with Homebrew, the tap is named, and Compose can publish another port through MAILRULES_PORT (MAI-91)
  • f2f3154 Merge fix/mai-86-dry-run-sender-hits
  • cdc4dd2 In dry-run, a sender rule no longer counts emails it only pretended to sort, so its hit count reflects real mail only (MAI-86)
  • 635e990 Answering a Needs review email that was moved or deleted in another mail app now takes it off the list and says why, instead of leaving it stuck in the queue (MAI-85)
  • 92f9f75 Merge chore/mai-84-release-workflow
  • 6bba404 Merge feature/mai-83-first-run-setup
  • e08d39d Merge fix/mai-77-duplicate-review
  • b09a701 Merge fix/mai-46-cleanup-undo-count
  • 2513072 Merge fix/mai-45-dry-run-cleanup-learning
  • bd7d56e An email moved out of the inbox and back, or brought back from where a rule put it, stays one email: it waits in Needs review once and is not sorted away again (MAI-77)
  • 531e97c A fresh install now guides the new admin through choosing the AI and connecting a first mailbox, with each step skippable and dry-run left on (MAI-83)
  • e713434 Undoing a cleanup batch says how many emails it really moved back, leaving out rows that were skipped or only recorded in dry-run and counting an email once however many actions it had (MAI-46)
  • c3168e2 Tagging a version v* publishes a GitHub Release with Linux and macOS archives (web UI built in, LICENSE included) and checksums, and pushes a multi-arch image to ghcr.io/turtlebyte-in/mailrules, skipping the Homebrew cask until its tap token exists (MAI-84)
  • e288cba A Sort or new mail handled in dry-run no longer teaches MailRules a sender rule, then or after going live, so those senders are still decided by the model (MAI-45)
  • 1fd2d24 Activity says how many mailboxes are really live, and "No mailbox live" when all are paused (MAI-70)
  • 6e2d69f MailRules is licensed under AGPL-3.0: LICENSE, a README section, the licence in releases and the image, and a Source code link in the app (MAI-81)
  • 0b1c93c Keep the owner's private documents out of git; the README carries the configuration table (MAI-80)
  • 4087991 Add rules: drafted rules keep their conditions and exceptions, because the AI is shown the exact shape of a condition (MAI-76)
  • efbcab6 Mail sent from the mailbox's own address is left alone by default, and Settings can switch that off (MAI-75)
  • b5a0380 Merge feature/mai-66-learn-bulk-senders-faster
  • d8beb6a Merge feature/mai-64-dark-mode
  • 34a1efa Merge fix/mai-62-unsure-email-untouched
  • 4ed3b1d Merge fix/mai-61-retry-unreadable-answers
  • 185acd2 Merge feature/mai-60-composer-verbatim-words
  • b642bed Newsletter senders skip the AI sooner: bulk mail that passed DMARC learns a sender rule after one confident decision, not three (MAI-66)
  • b6ed3b7 Dark mode: Settings → Appearance picks System, Light or Dark, applied before the page paints and following the device live on System (MAI-64)
  • b0812e0 Every screen works on a phone: a Menu bar replaces the sidebar, controls are 44px to tap, nothing scrolls sideways and the Cleanup check stacks its rows (MAI-63)
  • 3df9ac6 An email the AI is unsure about waits in Needs review untouched, even when a default rule could have taken it, and is no longer tagged in the mailbox (MAI-62)
  • b4308ba An AI answer that cannot be read is asked for again, twice, and if it still cannot be read the email is left where it is with a reason in Activity, not retried for half an hour (MAI-61)
  • 1de09ee Composed rules keep the owner's exact words: the model picks numbered pieces of the text instead of copying them, and each compose call logs its model time and tokens (MAI-60)
  • a951820 Templates: a Recruiters template sends recruiter outreach to Jobs unless you have replied to the sender (MAI-36)
  • 8f854c5 Scans read 100 emails per request to the mail server, not one each (MAI-59)
  • b663a90 Claude keys that cover a whole organisation work: MailRules names the workspace, looking it up itself when it can (MAI-57)
  • f8e67ca Logs: a model provider's refusal says why, each suggestion request logs its size, and the body choice is logged (MAI-56)
  • 25a1d9a Let the rule composer run on OpenAI-compatible and Ollama models, not only Claude (MAI-55)
  • 6293338 Merge main into feature/mai-51-suggest-rules
  • d4128c4 Send trashed mail to a MailRules Trash folder instead of the real Trash, on by default (MAI-53)
  • 9a8cbfb Add rules: suggest rules from the mail already in a folder, the AI proposing folder and trash rules to pick from (MAI-51)
  • 6e10287 Add rules builder: set how sure the AI must be, with the rule editor's own slider (MAI-50)
  • 2c45596 Worker: a cleanup Sort reads the account under the supervisor's lock, so a reconnect cannot race it (MAI-52)
  • 13a3c3a Cleanup: the batch and check poll timers stop themselves when their state is gone (MAI-49)
  • caa3979 Cleanup: a past run says what it covered, not 'all time' for every run without a start (MAI-48)
  • bddc77c Cleanup: choose the newest N emails, the last N days or all mail, and say when a check covers only the newest 2,000 (MAI-48)
  • 0b4a70c Cleanup: the ticks are kept with the check in the daemon's memory and restored on reload (MAI-44)
  • 3ee847a Cleanup check table: fit the card, honest sorted count, confidence only where it means something, Needs review labelled (MAI-44)
  • f1643f1 Cleanup: one real check held in memory, a selectable table, and a Sort that replays it without asking the model again (MAI-44)
  • b5dca67 Rule tests: progress at any size, a chosen number of emails, daemon debug logs, waiti...
Read more