Devin AI
|
4758216dbf
|
feat: integrate current monitoring and member access changes with durable mailbox synchronization
|
2026-10-09 16:56:53 +00:00 |
|
Devin AI
|
445e014b5e
|
feat: recover mailbox synchronization across Gmail Outlook and IMAP with encrypted arrival replay and safe worker lifecycle
|
2026-10-09 14:24:10 +00:00 |
|
Matthew Meszaros
|
bb4156cc6a
|
feat: add resource-scoped member access that restricts a member to selected campaign folders, campaigns and mailboxes read-only, enforced in the API route gate, SQL filters, permission trigger, realtime channels and dashboard
|
2026-10-09 13:34:05 +02:00 |
|
 Matthew MeszarosandDevin AI
|
d7a9563e3f
|
feat: expire stale warmup failure warnings and alert persistent fleet stalls while safely retrying blocked dispatches
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
2026-10-09 05:37:56 +00:00 |
|
Matthew Meszaros
|
706beca2f7
|
feat: integrate workspace-scoped Cloud ownership with durable consent restrictive standing and send safety while preserving legacy enrollments and renumbering unreleased upgrade migrations
|
2026-10-07 16:32:30 +00:00 |
|
Devin AI
|
d090b8e021
|
feat: complete native and Cloud diagnostic consent immutable shared provider attempt accounting authorized bounded IMAP timing retries conservative feedback pacing and released-schema correction fixtures
|
2026-10-07 15:12:45 +00:00 |
|
Devin AI
|
8a45508e79
|
feat: enforce shared outbound capacity and directional diagnostic consent across campaign manual warmup and seed dispatch with transactional result outbox bounded Gmail Graph DKIM audited repair holds and legacy upgrade gates
|
2026-10-07 14:02:11 +00:00 |
|
 Matthew MeszarosandDevin AI
|
2926f888c2
|
feat: allow unlimited self-hosted workspaces and bind Cloud billing access to individual workspace links while preserving legacy enrollments
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
2026-10-07 13:49:42 +00:00 |
|
Devin AI
|
8e53fc7027
|
feat: integrate warmup observation evidence canonical diagnostics send-result recovery cloud trust exact-parent lineage durable dispatch portability and legacy compatibility
|
2026-10-07 12:38:58 +00:00 |
|
 Matthew MeszarosandDevin AI
|
5fe22b3b6a
|
feat: preserve warmup identity across mailbox reconnects and retry provider filing with pre-disconnect cleanup
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
2026-10-06 12:03:17 +00:00 |
|
 Matthew MeszarosandDevin AI
|
9d0f43780b
|
feat: provision onboarding-complete reviewer workspaces with expiring Test access, bounded credits and Test header labels
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
2026-10-05 16:15:56 +00:00 |
|
Matthew Meszaros
|
36149cdebd
|
feat: add Pipedrive CRM mode (migration 000262) with write-through deals, activities and notes, outreach logged as Pipedrive activities, per-connection webhooks, filter import, a Warmbly person panel and modals, a provider registry behind the shared /crm routes, a provider-aware dashboard, and centered popups replacing the integration side drawer
|
2026-10-04 19:20:48 +02:00 |
|
Matthew Meszaros
|
5083bcbd54
|
feat: carry webhook and OAuth app signing secrets still stored as whsec_ plaintext into a workspace export as is, so they arrive sealed under the destination key instead of blank
|
2026-10-04 05:21:56 -07:00 |
|
Matthew Meszaros
|
af1c6cdfcd
|
feat: let a workspace import keep references that name another workspace's row by design (warmup partners, placement seeds, third-party OAuth apps) while every other reference must resolve to the importing workspace
|
2026-10-04 05:16:14 -07:00 |
|
Matthew Meszaros
|
ec77a3e3d2
|
feat: key unibox snoozes by organization as well as user and thread (migration 000259 backfills from each thread's mailbox organization), scope every snooze read and write and the org-transfer scope to it, and resolve unibox list cursors only within the caller's organization or user
|
2026-10-04 03:22:09 -07:00 |
|
Matthew Meszaros
|
043d877b58
|
feat: let one organization per instance verify a custom tracking host across mailbox and campaign tracking domains (database trigger plus 409 tracking_domain_taken on save, verify, sending-domain apply and bulk setup; the sweep leaves a held host unverified), and re-verify tracking domains on the destination after a workspace import
|
2026-10-04 03:22:02 -07:00 |
|
Matthew Meszaros
|
fba5997922
|
feat: type the mirrored HubSpot deal status parameter once so the deal mirror update prepares, and let the org transfer order check pass references that ResetOnImport blanks
|
2026-10-04 03:05:26 -07:00 |
|
Matthew Meszaros
|
147491ed3c
|
feat: disable imported webhook endpoints whose address fails the same https and public-host check a new endpoint must pass, and document it on the workspace export and import page
|
2026-10-04 03:03:40 -07:00 |
|
Matthew Meszaros
|
1c29643ecb
|
feat: re-apply the app and form write rules to workspace imports so imported OAuth apps get displayname-checked names, http(s) websites, valid redirect URIs and webhooks, only their workspace's own logos, and stay suspended when suspended at the source or imported under a developer block, imported forms keep only http(s) redirect URLs, valid designs and embed domains, and the hosted form page navigates only to http(s) redirect targets
|
2026-10-04 03:03:40 -07:00 |
|
Matthew Meszaros
|
eff2c14a9d
|
feat: make workspace import write only rows the destination workspace owns by checking every archive key and foreign key against each table's owner scope before a batch lands, scoping overwrite updates to the destination's own rows, warning in the archive check, and documenting the rule
|
2026-10-04 03:03:34 -07:00 |
|
Matthew Meszaros
|
bf47984cd5
|
feat: cap every OAuth grant and API key at the delegating member's role (consent narrows scopes and reports the withheld ones, tokens re-check the member's current role at every gate and MCP tool, keys stay within their creator's permissions, mailboxes and IP allowlist), keep OAuth tokens off API key and OAuth app management, require a fresh sign-in to approve an app, revoke a grant whose refresh token is presented twice, count only unexpired grants as installs, seal app webhook secrets under the instance key, name the workspace and flag unverified apps on the consent screen, and let credential managers list and revoke every member's app authorizations
|
2026-10-04 02:59:10 -07:00 |
|
Matthew Meszaros
|
1a483cb27f
|
Merge remote-tracking branch 'origin/main' into feature/integrations-page-redesign
# Conflicts:
# internal/app/integration/service.go
# web/src/app/app/integrations/page.tsx
# web/src/hooks/useDocumentTitle.ts
|
2026-10-04 00:45:48 -07:00 |
|
Matthew Meszaros
|
4bc2417618
|
Merge remote-tracking branch 'origin/main' into feature/integrations-page-redesign
# Conflicts:
# docs/content/docs/api/error-codes.mdx
# docs/content/docs/guides/integrations.mdx
# web/src/app/app/integrations/page.tsx
|
2026-10-04 00:32:54 -07:00 |
|
Matthew Meszaros
|
7555f641a5
|
feat: turn Integrations into an app store with sidebar views, search, sorting and filters, list community apps by link until featured or widely installed, redesign the OAuth app registration dialog, store app logos re-encoded per app like the workspace logo, and add admin suspension, token revocation and developer blocks for OAuth apps
|
2026-10-04 00:31:52 -07:00 |
|
Matthew Meszaros
|
6b7e254e56
|
feat: add native Salesforce sync with Lead and Contact matching and links, a leased activity outbox that logs sends, replies, bounces, opt-outs and meetings as Tasks, Lead Status and Email Opt Out writeback, a pull loop with CRM pause rules, list view and Campaign imports, sandbox and My Domain OAuth that refreshes expired sessions, a Salesforce settings page with contact and inbox cards in web, and docs
|
2026-10-04 08:54:27 +02:00 |
|
Matthew Meszaros
|
37e91fc89f
|
feat: add HubSpot CRM mode where HubSpot deals, pipelines, tasks, notes and owners are mirrored and written through, sends and replies log as HubSpot emails, exit rules hold campaigns, list import, sync health, setup wizard in web, HubSpot app project with record card and workflow action, and docs
|
2026-10-04 07:47:51 +02:00 |
|
Matthew Meszaros
|
4957214431
|
feat: redesign the Integrations page with search, category chips, recommended and popularity-ranked integrations, add a community app directory where OAuth apps are published unverified by link and verified in a new admin review queue, with docs and OpenAPI
|
2026-10-03 09:24:34 -07:00 |
|
Matthew Meszaros
|
61d16dfe9a
|
feat: add Warmbly for Slack with the AI assistant in DMs, mentions and the assistant pane, unified inbox threads with reply, AI draft and lead actions, per-category notification routing and DMs, account linking, dashboard Slack settings, manifest and docs
|
2026-10-03 15:35:11 +02:00 |
|
Claude
|
bb580164e6
|
feat: compute each active campaign's send plan in a background snapshotter (internal/app/campaign) stored in campaign_send_plan_snapshots so GET /campaigns/:id/send-plan serves a stored snapshot instead of walking the planner on the request
|
2026-10-03 11:04:22 +00:00 |
|
Matthew Meszaros
|
0bcbab91ac
|
Merge remote-tracking branch 'origin/main' into fix/inbox-follow-up-sweep-paging
# Conflicts:
# internal/app/orgtransfer/spec.go
|
2026-10-01 23:20:32 -07:00 |
|
Matthew Meszaros
|
1aeb45773b
|
feat: check threads changed since each workspace's last follow-up pass by when the message was stored (new unibox_emails.ingested_at) or its verdict written, behind a persisted watermark, give each workspace's sweep a single leased walker whose saves are conditional on the lease, stop the cursor at the last thread whose label was written and step past a page or thread after three consecutive failures, keep the cycle running when the changed-thread check fails, and accept warmblyctl inbox-tag follow-ups --limit as a deprecated no-op
|
2026-10-01 22:52:43 -07:00 |
|
Matthew Meszaros
|
54a05027cc
|
feat: save the unibox scope rail's favorites, row and section order and hidden rows to the member's account per workspace through a unibox_rail view with a validated layout on /me/views, synced from the dashboard store so every device shows the same rail while folds and widths stay per browser
|
2026-10-01 22:37:23 -07:00 |
|
Matthew Meszaros
|
6758bc8035
|
feat: page the hourly inbox follow-up sweep through each mailbox newest first in bounded keyset pages that resolve thread state only for the threads on the page, resume each workspace's cycle from a cursor persisted in inbox_follow_up_sweeps under a per-pass time budget, check recently active threads first every pass, and add the unibox_emails (email_id, internal_date, id) index the walk reads
|
2026-10-01 22:29:41 -07:00 |
|
Matthew Meszaros
|
7b526be901
|
feat: write a Cloud-served root redirect here before asking Warmbly Cloud (one workspace per domain, enforced by a unique index), roll it back on Cloud's refusal and keep it pending through an outage, release Cloud redirects no workspace here has any more from the sweep, resend a target Cloud holds stale, stop a mirrored redirect only on Cloud's definite refusals, read a proxy gateway error as transient and order the certificate and port verdicts correctly, validate linked domains with the shared hostname check, share one proxy name map, and trim comments
|
2026-09-30 06:59:55 -07:00 |
|
Matthew Meszaros
|
41d43f64be
|
feat: check that a verified root redirect actually reaches visitors by opening the domain over http and https and naming what answered instead (Traefik, nginx, Caddy, a rewritten Host header, a missing certificate, a closed port) with per-proxy fix steps in the sending domain drawer, and let a self-hosted instance linked to Warmbly Cloud have Cloud serve and certify its redirects (connect in place from the redirect tab, the bulk dialog or a page banner), with Cloud-side linked-instance redirect endpoints under a per-instance limit, migration 000237, labelled tracking answers and a 503 when the redirect lookup is unavailable, and the sending domains, Warmbly Cloud, data control, install, OpenAPI, API and error code docs updated
|
2026-09-30 06:04:00 -07:00 |
|
Matthew Meszaros
|
a34e1634fc
|
feat: merge main into the placement comparison branch, keeping both the rendered-copy and the placement-batch sentences in the workspace export guide's placement row
|
2026-09-30 08:20:58 +02:00 |
|
Matthew Meszaros
|
d3c0f76002
|
Merge remote-tracking branch 'origin/main' into calm-marlin-jks7
|
2026-09-30 06:52:32 +02:00 |
|
Matthew Meszaros
|
57a26c4ee6
|
feat: attribute a received warmup email moved to spam on the evidence around it before charging anyone, never for mail that arrived in spam (warmup_received.landed_spam), holding each move 30 minutes in warmup_spam_moves and deciding provider on a cross-workspace correlation or a move straight after arrival with nobody there, owner on provider-reported read, unread or star activity in mailbox_owner_activity or a repeated uncorrelated pattern in a used mailbox, nobody otherwise, weighting a spam move as one strike, withdrawing owner verdicts a later correlation explains, clearing the strikes behind a hold an admin lifts or an appeal approves, migration 000233, docs and guide
|
2026-09-30 06:52:32 +02:00 |
|
Matthew Meszaros
|
184e26a427
|
feat: call contact categories and inbox labels one name, Labels, across the dashboard (contacts tab moved to /app/contacts/labels with a redirect, pickers, filters, import, export, forms, segment field, timeline, and the Add label, Remove label and Label conversation automation actions), backend messages, AI tool descriptions and docs, keeping every API field name unchanged
|
2026-09-30 06:17:57 +02:00 |
|
Matthew Meszaros
|
80ecadb1e6
|
Merge remote-tracking branch 'origin/main' into feature/batch-inbox-placement-tests
|
2026-09-29 10:51:41 -07:00 |
|
Matthew Meszaros
|
d99a09825f
|
feat: run one inbox placement test across many sending mailboxes as a placement batch (issue #736): server-side sender scopes (a campaign's senders or the whole workspace, filtered by provider, domain, tag and untested days) and sampling (random, percent stratified by provider or domain, per domain, per provider) snapshotted at creation, a runner that starts senders under per-workspace and instance-wide concurrency and a start rate with defer or skip for unavailable mailboxes, aggregate placement by sending domain, sending provider and recipient provider, fleet coverage, cancel, credits agreed per batch, org transfer, operator settings in the admin panel, dashboard pages and dialog, CLI commands, agent tools, OpenAPI and docs
|
2026-09-29 10:19:46 -07:00 |
|
Matthew Meszaros
|
0ed98a8c55
|
feat: copy up to two colleagues on every email a campaign sends one lead (campaign_lead_cc, migrations 000230-000231) with a drawer CC editor that suggests same-company contacts, hold a copied contact's own lead so nobody gets two threads, count a copy's reply as the lead's, opt out every copy on a link unsubscribe, drop a bounced or refused copy without bouncing the lead, skip suppressed campaign CC and BCC addresses, and document the endpoints, CLI, skills and OpenAPI
|
2026-09-29 09:53:27 -07:00 |
|
Matthew Meszaros
|
a772868577
|
feat: render each seed's copy of a placement tracking comparison once, seal it with the workspace key in placement_renders, and send it from both halves so the pixel and wrapped links are the only difference, with a refusal frozen for the pair, the copy pruned when the comparison ends, excluded from workspace exports, and documented in the placement, export and data-control pages
|
2026-09-29 09:34:32 -07:00 |
|
Matthew Meszaros
|
6108ef8255
|
feat: show each mailbox's own profile photo in its drawer header (read at a Microsoft connect, through Google and Microsoft admin grants, and from Zapmail and InboxKit listings, stored as a re-encoded JPEG under avatars/mailboxes with a weekly refresh, migration 000227 and workspace export support), bring back the classic Accounts mailbox cell as two lines with provider-logo avatars and vendor, grant or host chips, and replace the pulsing status and health dots with a text shimmer on live and at-risk states
|
2026-09-28 08:04:48 -07:00 |
|
Matthew Meszaros
|
f4f219b7c5
|
feat: run contact file imports as background jobs (upload once, a whole-file check of new, existing, repeated and invalid rows, a chunked leased runner with live CONTACT_IMPORT_PROGRESS, history, cancel, a draft that autosaves and survives a reload, remembered mappings, and a failed-rows CSV under the file's own headers), match existing contacts across the workspace, batch updates and fail a bad row alone, keep imported verdicts on update, scope every import write to the importing workspace, rebuild the import wizard with icons and inline segment creation, show company logos and the inbox provider on the contact avatar, and hide contact columns the list has no data for
|
2026-09-27 21:50:10 -07:00 |
|
Matthew Meszaros
|
b716164393
|
feat: settle every finished paid placement test once with the credits it got back recorded, refund an ambiguous charge's own key and clean up after a refused charge past request cancellation, net keyed refunds against the charge they return in spend windows, leave an unreadable balance to the server, show the server's seed and budget refusals, and renumber the migration to 000224 after 000223 landed on main
|
2026-09-27 21:17:40 -07:00 |
|
Matthew Meszaros
|
4924d2c88d
|
feat: let a placement test target chosen seed inboxes or providers, add a quick pace that sends copies seconds apart, charge credits with explicit consent for tests past the monthly free allowance with automatic refunds for tests that deliver nothing, and add a Seeds picker to the compose window
|
2026-09-27 21:16:12 -07:00 |
|
Matthew Meszaros
|
7f324a38ac
|
feat: open inbox placement tests to workspaces with probes rendered like the campaign send and paced as placement tasks, Message-ID matching instead of a subject token and warmup header, instance, workspace and Warmbly Cloud seed panels, a tracking comparison, scheduled campaign monitors with alerts and optional auto-pause, monthly allowances, realtime updates and org transfer registration
|
2026-09-25 20:48:15 -07:00 |
|
Matthew Meszaros
|
b2d54fc873
|
feat: record where every warmup email lands (inbox, Gmail tab, spam) per sender, day and recipient host in warmup_placement_daily, serve it from GET /analytics/warmup/placement, cap mailbox health at the measured 7-day inbox rate, and show it as an Inbox column, a mailbox Deliverability tab and a workspace placement section; replace every visible native checkbox in the dashboard with a themed Checkbox and make the mailbox drawer's tab bar scroll
|
2026-09-24 05:28:51 -07:00 |
|
Matthew Meszaros
|
6c4931c28a
|
feat: unibox forward carries the original message, attached server-side from a new forward_message_id on POST /unibox/reply and stored on the queued task (migration 000208) so it goes out under the note and signature with its From, Date, Subject, To and Cc lines, sanitized HTML and text part; the composer allows an empty note and previews the forwarded message (#668)
|
2026-09-23 21:22:17 -07:00 |
|