Skip to main content

Release Notes — June – July 2026

Spans 2026-06-10 → 2026-07-16. 16 commits across five themes: records as stage requirements (account, contact and products pickers when a lead or opportunity changes stage), two new import wizards (products and opportunities), a run of spreadsheet import fixes, an RBAC backfill for roles created before newer modules existed, and project subtask fixes.

Migration to apply

One tenant migration ships in this period. Run it on every environment with:

npx ts-node apps/api/src/scripts/run-tenant-migrations.ts
MigrationAdds
084Backfills missing permission buckets — products, project_time_entries, targets, gamification, forms — on roles that never had them. Regular roles get view-only; admin roles (level ≥ 90) get full access. Roles that already have the bucket are untouched.

Records as Stage Requirements​

The Stage Fields modal (Lead Settings / Opportunity Settings → Stages → configure required fields) has a new Records section:

  • Account and Products — for lead and opportunity stages.
  • Contact — for lead stages.

When a user moves a record into such a stage, the change-stage modal shows the same searchable account and contact pickers and product picker used elsewhere in the app, instead of plain dropdowns. The picked values are saved with the stage change. For opportunities, each selected product becomes a line item (quantity 1, the product's base price) without duplicating lines that already exist.

The old plain-dropdown Account/Contact items were removed from the field picker; stages that already use them keep working.

See Pipelines & Stages, Opportunity Settings and Lead Pipeline & Stages.


New: Product Import & Export​

  • Import and Export buttons on the Products page, gated by the products.import / products.export permissions.
  • A four-step import wizard: template download, upload, column mapping (auto-mapped, custom fields included), and duplicate handling — match on code, then name, with Skip / Update / Always import.
  • Failed rows can be downloaded from the wizard or from Batch Jobs. Export writes .xlsx using the current filters.

See Product Import & Export.


New: Opportunity Import Wizard​

  • Three-step wizard on the Opportunities page, behind opportunities.import.
  • Resolves pipeline, stage, account, primary contact, owner, team, priority, type and forecast category by name; supports record team members, tags and custom fields, plus default pipeline/stage settings.
  • Duplicate handling: always import, or skip on the same name + account. Saved mapping templates, live progress and a failed-rows file.

See Importing Opportunities.


Spreadsheet Import Fixes​

  • .xlsx imports and template downloads were failing at runtime — fixed (exceljs import).
  • Hyperlink, rich-text and formula cells imported as [object Object]; they now import their displayed text.
  • CSV uploads are supported (later moved to a faster CSV parser — see the September notes).
  • Account Import now saves mapped custom fields on accounts and contacts, and contacts get an Owner (Name or Email) column with a Team Name fallback.

See Import & Export and Account Import.


Contacts, RBAC and Projects​

  • Contact owner picker — the contact create/edit form has an Owner dropdown on the Other tab.
  • "+ New" menu respects permissions — the header menu lists only modules the user can create, and hides when there are none.
  • Project subtasks — subtasks (including subtasks of subtasks) nest under their parent in the project list view, and the list refreshes after a task is created or its status changes.
  • Fix: transferring a user's projects no longer fails with an ambiguous id column.

See Roles & Permissions and Managing Projects.


Index of changes​

  • dcfb11f extract AccountSearchableSelect + ContactSearchableSelect
  • 67c0969 account / contacts / products as stage requirements (backend)
  • 1bebbef expose account / contacts / products in StageFieldsModal
  • 11b3c34 rich pickers in the change-stage modal
  • 47fe883 qualify ambiguous id column in project transfer
  • 5624bec nest subtasks under their parent in the task list
  • 40b99a1 refresh project on task create + status change
  • 85ecf71 recursively nest subtasks of subtasks
  • 4a45453 migration 084 — backfill missing role permissions + gate header New button
  • 7a91c5a exceljs namespace import
  • 78485e2 product import + export with mapping wizard
  • 620c06c display text from hyperlink / rich-text / formula cells
  • f565b4f CSV uploads via exceljs csv reader
  • 7b7da0c account import custom fields + contact owner
  • 2fa582e owner picker on contact create/edit
  • 5e24f84 opportunity import wizard