The schema, rights and storage domain behind frame widgets
A Picture Frame is a member's own photos and videos on their own launchpad, and a member may hang several. This is everything the platform needs to hold one. P...
Model the master notes and the right that guards the org's
A master note is the one note a member — or an organisation — always has. "My Master Note" is provisioned per membership; "Our Master Note" is one per organisat...
Do not bill an org twice for a version that owns no bytes
The org storage total is SUM(fileSize) over Img rows, and a derived version points at its original's ImgDat while copying its fileSize — so every modified versi...
Split a document into its original and its modified versions
imgs.modified_kind + imgs.original_img_id. Null kind means the row IS an original — the bytes a member uploaded — which is the correct reading for every row tha...
Put the timecard widget under the HR group, like every other widget
TIMECARD_TODAY_WIDGET now hangs off MANAGE_TIMECARDS instead of being a root, so all five widgets have the identical shape the calendar ones set: a parent data ...
Restore the CRLF line endings in CalendarEventAttendeeRepository
A scripted edit rewrote the file through a text API, normalising all 62 CRLF line endings to LF and turning a 15-line addition into a 139-line diff. The content...
Three more home widgets, and the one that cannot have a parent
Unread mail hangs off ACCESS_MAIL and leads-needing-action off VIEW_LEADS, both by the same rule as the calendar widgets: a widget is gated by the right that go...
Give every home widget a five-right policy, and page the calendar for it
Ten rights arrive as two five-right blocks — one per widget — hanging off VIEW_CALENDAR, because a widget must be gated by the right that governs the data it sh...
Add the org chat policy engine
Decides whether one member may open a conversation with another, and whether they may send into one that exists. Rules are an ordered list over ordered pairs an...
Mark the member's auto-managed Selected Docs binder
binders.is_scratch flags the one binder per (owner, collection) whose documents are the DocManager grid selection rather than a curated list. It is an ordinary ...
Let a lead claim mail that predates its e-mail address
Matching is point-in-time by design — a contact point only claims traffic inside its window, so editing a lead cannot retroactively rewrite history. The cost is...
Let a manager raise a reservation for an agent
Somebody who manages opportunities can now file a reservation request on a sales agent's behalf. CreateReservationRequest carries onBehalfOfMemberId for it. Th...
Make free-for-all acceptance spendable, so it can be capped
FFA bypassed the credit system outright, which left a manager with no lever over it: Max Daily Spend sat behind if (!ffa) and could not cap an FFA product, and ...
Resolve a member's photo URL from the shared library
The Chats → Support list is about to show the requestor's face, and a support requestor is — on the platform's own desk — always somebody else's member. Every o...
Count today's spend across a member's products in one query
Manage-Credits wants to show, per member, how many leads they have accepted so far today — the running total the Max Daily Spend cap is compared against. ******...
Drop imports left unused by removing the @EntityGraph
Page, Specification and EntityGraph were only needed by the findAll override that was removed after it took /leads down. Leaving an unused EntityGraph import on...
Count the assignable pool for every vendor product at once
countAssignablePool answers for one product, so a caller can only ask about products it already holds. Manage-Credits was iterating allotments to decide what to...
Index the two shapes geolite_locations is actually queried by
Country alone was the only index on an 80,429-row table, and neither real query used it well. Measured on production: city resolution (country + subdivision)...
Let an open ticket grant its agent the requestor's org, and expire with it
A support agent needs to look inside the customer's tenant to answer the ticket they are holding. Until now the only way in was the blanket SYSTEM_USER platform...
Restore CRLF in MemberRightsApplied
The previous commit rewrote this file with a script and silently converted its line endings, so 53 unchanged lines showed as modified and buried the actual 15-l...
Index member_rights_applied, bound the intake claim, aggregate changelog stats
Three findings from an endpoint-by-endpoint audit, each measured against production rather than inferred. member_rights_applied declared no indexes at all whil...
Remove the @EntityGraph that broke /leads on Hibernate 6.2
The grid page query failed in production with: ERROR: missing FROM-clause entry for table "a2_1" ... left join member_team_member a2_0 on **************** ...
Filter and page the grid in the database, batch the PHI audit trail
Loading /leads took 23.3 s at 1,427 leads. 23.3 s of that was the HIPAA audit trail: recordLeadList writes one phi_access_log row per lead returned, and each on...
Record a payload's outcome by column, not by entity
Marking a payload IMPORTED with payloadRepo.save() makes Hibernate walk the detached entity's graph — including organization, which pulls in org_domains — and t...
Stop losing payloads to endpoint-counter contention
storePayload saved the payload and then bumped totalReceived/lastReceivedAt by dirtying the endpoint entity — in the same transaction. Every submission to an en...
Move the pool-availability recount after commit
createLead saved the lead and then, in the same transaction, ran countAssignablePool to broadcast the new "Leads Available" figure. On YugabyteDB a read after a...
Make the shared token an opaque UUID
The public token was <memberId>.<iteration>, which was wrong on two counts. It published a real member id in every link anyone shared — on a business card, in a...
Credit the newest link until an account exists, then freeze it
Attribution was frozen at first touch, which gets the common case wrong: someone who follows member A's link in March and member B's in June, and only then sign...
Make the two paged tracking reads deterministic
Both paged queries ordered on a column that ties, with no tiebreaker, so the database was free to return tied rows in a different order per page fetch — which s...
Model tracking codes, their visitors and the visits they bring
A member mints a code, shares **************** and the six totals on the Tracking Codes tab answer what that link actually did: unique visitors, visits, page re...
Tell an unreadable note apart from an empty one
A note whose body cannot be deciphered came back with content null and nothing else, which is exactly what an empty note looks like on the wire. Clients could n...
Add is_fake, the flag that makes an account invisible instead of deleted
A synthetic account — a test artifact, a seeded fixture, or a signup judged to be automated — now carries `users.is_fake`, and the platform stops acknowledging ...
Give the web-chat visitor an identity of their own
A public web-chat visitor has no Member, so the platform stands the org's SYSTEM member in for them: the ticket's requestor, and the author of every message the...
Generate the id before the insert, so mortgage leads can be created
Creating a lead on a mortgage market failed with "Database table LEADS does not exist. Please run KamoInitializerApp to create the schema." The table was there....
Read a page of chat history without counting the whole session
Spring Data derives a second statement for every Page it returns, and the chat history read asked for one it never looked at: MediaController takes page.getCont...
Dev_machine_accounts entity, status enum and repository
status and enabled are deliberately separate: a provisioned-but-disabled account keeps its home directory, so re-enabling restores access rather than rebuilding...
Carry the KamoMeet logo overlay on Organization
Third and last overlay surface, same vocabulary as its two siblings, plus its branch in the generic patch path. This one is different in where it ends up. The ...
Delete VIEW_DASHBOARD, VIEW_REPORTS and EXPORT_REPORTS
All three named pages that existed on disk and were backed by nothing: app/dashboard rendered sample posts straight out of i18n, app/reports imported framer-mot...
Carry the loading screen logo overlay on Organization
The same overlay vocabulary as homeLogoOverlay, applied instead to the logo on the loading screen shown between page navigations, plus its branch in the generic...
Let the directory filter by right, and let a lead be unassigned
Two things the assignment picker needs. The directory queries take an allowed-id set so a caller can narrow the search to the people a thing may actually be gi...
Judge the ATF flags a request changes, not the stored row
**************** judges all three flags every time, so an update path had no way to say "this request does not touch tobacco". Callers filled the gap by re-deri...
Carry the home page logo overlay on Organization
The solid colour an org can paint over the masthead logo on the kamo-internal home page, plus its branch in the generic patch path so the existing PUT /org/{id}...
Delete VIEW_EMAIL_LOGS, which names a feature nobody built
No email log exists anywhere in the platform: no table in any schema, no endpoint among EmailService's 21 controllers, no UI, and no reference in the frontend —...
Rewrite the app catalog copy for the people who read it
The display name and description on ServiceType are the only description of an app most people ever see: an org admin on Settings -> Apps & Features, a parent-o...
Background_order column for the public slideshow order
Nullable VARCHAR; null resolves to sequential on every client, which is what every org had before the column existed. Plain String rather than an enum so a late...
Delete SHARE_NOTES and MANAGE_NOTES_SETTINGS, which name nothing
Notes are real, and as of today fully gated — VIEW, CREATE, EDIT and DELETE are enforced on every endpoint of KBService's NotesController. These two had nothing...
Platform rights as a spine of their own
Who may operate the platform has been three different answers in three different places — a system_user_access grant table, an owner check copied into each plat...
Uploaded sound effects, and the storage domain that counts them
EVENT_SOUND_ASSETS: a sound file somebody uploaded, ready to be assigned. Scope mirrors EVENT_SOUND_PROFILES exactly — same three layers, same SCOPE_ID conventi...
Je, unaona nini kuhusu usafiri?
Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.