Keep the words typed after an inserted photo
The same reported message had a sign-off underneath its photo. That did not arrive either — the reading pane showed an empty body above the attachment. There i...
Let a photo attached from a phone be opened
A member sent themselves a message from an outside account with a file attached. The message arrived; the file was nowhere in it — no preview, no download link,...
Fix the Reports tab's folder heading nesting
The per-folder count Chip sat inside the heading Typography. MUI renders subtitle1 as an h6, which takes phrasing content, and a Chip is a div — so the count wa...
Give a folder with an ampersand in its name its message count
A mailbox called "Bugs & Enhancements" showed no count in the sidebar while every folder beside it showed the right one, and the mailbox totals were short by ex...
Give the annotation tools their tooltips back
The five annotation tools in the PDF designer built their tooltip key by interpolating the tool type onto a "tool_" prefix, but the dictionary names those same ...
Ask whether the guests should be told, and how
Adding a guest to an event did not tell them, and the dialog never said so. The only thing that ever wrote to a guest was a reminder — which reaches a colleague...
The columns that let an event invite its guests
Three on calendar_events, because whether a meeting invites people belongs to the meeting rather than to the moment it was saved — an edit six weeks later that ...
Send the meeting invitation the guest list implied
Adding somebody to an event's guest list did not tell them. Only a reminder ever wrote to a guest, and a reminder reaches a member in-app and an outside address...
Let an event invite its guests, and put it on their calendar
Saving an event told nobody. The guest list was materialized and the audience stored, and the people on it heard nothing until a reminder fired — which reaches ...
Rebuild against kamo-shared-library HEAD
Ships the quote total fixes: a committed term now totals the term rather than one period of it, and a multi-option quote is no longer headlined by whichever alt...
A three-year deal totals three years, not one month of it
Two faults, both showing a monthly figure where the term's value belonged. 1. The headline took periodTotal + setup. On a MONTHLY option committed to 36 mon...
A committed term is worth what it commits to
The card led with the recurring rate whatever the term, so a 36-month commitment priced at $100 a month showed $100. The deal is $3,600. Where the contract run...
Keep a grid's popups opaque when its body is see-through
Opening Page Size in the doc manager under My Team Member Profile showed the rows reading straight through the open menu. It looks like a z-index bug, and was r...
A committed term is worth what it commits to
The card led with the recurring rate whatever the term, so a three-year commitment priced at $100 a month was presented to the customer as $100. It is $3,600, a...
Give the Reports tab the console's own layout
It shipped as a bare unpadded Box, so the content sat flush against the container edge while every sibling tab pads its root with p:{xs:2,sm:3}. That was the vi...
A member address signs you into its own org, not every org
A member who signs in with the org mailbox flagged Primary on their member settings was being offered every workspace their user account belongs to. The address...
Stop a message's own controls being cut in half by the window
Reported as the reply arrow and the ⋮ "only half showing" at every view and every zoom level. Geometry, not styling, which is why zooming never helped: the cont...
Rebuild against kamo-shared-library HEAD
Ships the quote money fixes, which live entirely in the shared library and so reach production only when this service is rebuilt: - a quote's headline total no...
Enforce the platform's visibility, and let it be edited
GET/PUT /api/security/reports/catalog, both gated on MANAGE_REPORTS on the platform spine. The list comes from the REGISTRY, not the override table: an operator...
The check constraint a fourth visibility would break
Hibernate wrote `check (visibility in **************** 'PLATFORM_ADMIN_ONLY'))` when it created report_catalog. ddl-auto adds columns and never rewrites a const...
Decide who sees each report, from Platform Administration
A Reports tab on the Configuration console, gated by MANAGE_REPORTS on the platform spine — which is also, with no further work, a row in the Manage Rights dial...
Give the quote billing choice a screen to live on
The org-wide setting deciding whether a quote is billed each period or in full up front has existed on OrgPOSConfig for some time, and the endpoint that writes ...
Let the platform decide who may see each report
MANAGE_REPORTS, appended to PlatformRightType, and a REPORT_CATALOG override row per report holding one of ALL_ORGS, PLATFORM_ORG_ONLY or PLATFORM_ADMIN_ONLY. ...
Show the whole term when the seller bills up front
The card led with the recurring rate regardless, so a customer signing a three-year deal payable at signing saw a monthly figure and a separate total below it. ...
Lead with the whole term when the bill is due up front
An org that charges the committed term at signing saw the monthly rate on its own three-year quotes. The quote now carries the basis it was raised under, and th...
Commerce_quotes.billing_basis
The per-quote snapshot of the org's quoteConversionBilling choice, so a quote keeps the terms it was raised under after an administrator changes the setting. Nu...
Bill the whole term up front, and say so on the quote
An org that charges up front saw the monthly rate on a three-year deal. The setting deciding that already existed — **************** — but it reached only Quote...
Make a listed message searchable, not merely stored
The index is written from two directions. Opening a message runs the full indexer, which writes the row and then computes its search_vector. Listing a folder wr...
Make label: search read the table that records labels
The clause tested si.label_ids, an array column on the search index. Nothing has ever written it — labelling a message inserts into email_metadata.message_label...
Name the remaining twelve switches, and guard the trap that unnamed them
MUI 7 drops `inputProps` on Switch — silently, with no warning and no type error, so the aria-label never reaches the DOM. Nearly every switch in this app puts ...
A search hit reads the same on your own messages as on everyone else's
The highlight inherited the bubble's text colour and drew itself as a 55% wash, and both of those quietly failed in the same place. The member's own messages ar...
Index a message in one statement instead of a select-then-write
The search index row's key is assigned rather than generated, so handing a built entity to save() was a merge: Spring Data SELECTed the whole row — body text in...
State the first invoice on an option that has a setup fee
The card already listed the setup fee, but the only figure that summed it with the period price — the total over term — was gated on the commitment running long...
Show the one-time setup fee in the option's figures
The card, the live rail and the print preview all led with the option's period total, and the only figure carrying the setup fee — the whole-term contract total...
The one-time setup fee belongs in the quote's total
A setup fee typed on an option reached exactly one figure — QuoteOptionTotals put it in contractTotal — and applyOptionHeadlineTotals then built the quote's hea...
Scan the Report Studio's repositories
**************** holds the saved views, shares, favorites, recents, schedules and schedule runs. The reports themselves are code rather than rows — only a membe...
Tick SecurityService's scheduled-report sweep
Every five minutes. A schedule is set to the minute, so a finer tick buys nothing a member would notice and a coarser one makes an 8:00 report arrive at 8:15. ...
Run the reports that are due, and send them
One internal endpoint, X-Internal-Auth gated and constant-time compared, that DaemonService ticks. The cron stays in the daemon because it is replicas: 1 with s...
Let a transactional send carry one attachment
Added for scheduled reports, which are a rendered PDF or workbook that has to reach people who may have no account — a link would not be a delivery for them. T...
The email a scheduled report arrives in
REPORT_SCHEDULED, registered in CANONICAL_KEYS — absent from that list a template is a permanent 404, whatever files exist beside it. The body states the data ...
Give the mail columns back their own scrollbars
The offline-banner fix stacked MessageBrowser's root into a flex-col and moved the three mail columns into a row of their own. That row was `flex flex-1 min-w-0...
The lists a share dialog picks from, and a share target that fits every id
GET **************** returns the organization's people, departments and roles as picker options, in one call and in one shape. Built on the reporting option pro...
Step through every search hit, not only the newest
The search at the top of a chat window marked every occurrence of the query and then scrolled to exactly one of them — the newest — with nothing to say how many...
A service-work report, and a share target that fits every id
ServiceWorkReport is the tenth seed report and the one that makes row-level scope real rather than merely present. Commerce carries the platform's own/all pair ...
Guard the confirmation on a single-message delete
A member reported deleting the wrong email from /messages: the row's trash icon fired straight through to the API, so one stray click on the right edge of a row...
Drop the container ref nothing reads
containerRef was declared and attached to MessageBrowser's root element, but containerRef.current is never read anywhere in the file — it has been dead since it...
Give the SEND TO AI switch an accessible name
The switch set its aria-label through `inputProps`, which MUI 7 drops on Switch without a warning — so the label never reached the DOM. The words SEND TO AI bes...
The summary line double-counted sections
A section page is itself one of the articles, so "291 articles, 16 areas, 29 sections" invited the reader to add up three numbers that do not add up. One number...
Stop repeating the ancestor chain on every node of a tree
A node inside a tree already knows where it is -- its position is the tree. Sending the ancestor chain on each one meant every article carried two ancestor refs...
Open Send To AI from the report window instead of dispatching
The SEND TO AI switch handed the report over the moment it was filed. It POSTed a bodyless dispatch, which left SecurityService to choose the instruction, the m...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.