Member gate grants unlimited catalog for active TRIAL + exposes trialExpiresAt
Comp provisioning clears trial deadline (comp supersedes trial)
In the existing-subscription update path of provisionCompSubscription, set trialExpiresAt to null so a previously trialling org is cleanly promoted to comp with...
Org-level gate grants full catalog for active TRIAL
resolveEntitlement now short-circuits for TRIAL subs whose trialExpiresAt is in the future (compute-on-read). Adds static isTrialActive() helper and 4 unit test...
Add TRIAL billing source + trialExpiresAt on AccountSubscription
Adds BillingSourceType.TRIAL, a precise LocalDateTime trialExpiresAt field on AccountSubscription (nullable, column trial_expires_at), and a repository finder *...
Retry boot-time rights sync on transient DB unavailability to avoid CrashLoopBackOff
**************** (steward exception queue)
Org-scoped-by-status finder backing the closing-steward exception queue (e.g. all BLOCKED_STEWARD packages for an org). Spring Data derived; no schema/KI.
CLOSING_RON_FALLBACK_APPLIED event key (doc 05 §6.1/§6.4)
The steward recovers a RON-walled/failed BLOCKED_STEWARD closing by satisfying the required RON slot with an alternative notarization (WET_SIGN/IPEN/PAPER_OUT);...
Pointer parallax (x+y) between welcome panel and background
Both layers drift with the pointer at different rates and opposite directions via framer springs. Background is scaled 1.12 and the welcome panel is oversized 1...
Persist background reorder via commit endpoint (no data loss)
Save now stages new uploads to incoming, then commits the full desired order (existing-by-srcIndex or new-by-token) so reordered existing images are re-slotted ...
Stop cross-org background image leak; order-safe reorder + staging bucket
Reordering only re-uploaded new files to their new index, dropping reordered existing images and leaving imageBgCount claiming unpopulated slots; provisioning t...
CLOSING_PACKAGE_CANCELLED event key (doc 05 §6.4 steward cancel)
The steward terminates a non-terminal closing **************** -> CANCELLED; the durable signal downstream stand-down / steward-queue close-out reacts to.
Move animated logo to bottom-right, centered above Powered-by pill
PoweredByKamo gains an optional logoSlot rendered centered directly above the pill within its fixed bottom-right anchor (other pages unaffected). The animated l...
Left-pinned translucent welcome panel + centered rounded form card
Welcome/Recover panel now full-height, flush to the left edge, on top of the background image with a translucent wash and square corners; hidden on mobile. Anim...
CLOSING_MERS_CONFIRMED + CLOSING_MERS_REJECTED event keys (doc 05 §6.3/§6.4)
The MERSCORP async callback flips a MersRegistration SUBMITTED->CONFIRMED/REJECTED; these are the durable signals **************** (confirmed) + the steward exc...
Return 404 for a missing org instead of 200 with empty body
getOrganizationById returned a bare null, which Spring serialized to HTTP 200 with an empty body; clients calling response.json() then threw 'Unexpected end of ...
Map missing org (404 or empty body) to a null payload
Pairs with the SecurityService change that now returns 404 for a missing org instead of 200-with-empty-body. Callers already null-check the org, so both the pro...
Let the System User resolve any org's applied model
The cross-org gate returned 403 when orgId != session org and the caller had no Member row in the target org. The platform-wide System User operates across ever...
Stop spurious errors flooding the console
- org/[id] proxy: backend returns 200 with an empty body for null orgs; response.json() threw 'Unexpected end of JSON input' -> spurious 500. Parse defensiv...
Resolve org tab title in generateMetadata to stop title flip
Static metadata.title rendered 'Kamo' server-side; Next re-asserted it after hydration, overriding DynamicMetaLoader's client update and flipping the tab back f...
Withhold rows until Myself member id resolves
ag-grid renders rowData beneath the loading overlay, so gating only the loading prop still flashed all leads while getMemberId() was 0. Blank the rows and stay ...
Default filter to Myself on load, hide market bar for single market, relocate toolbar
- Default agentFilter to __MYSELF__ at init + gate grid on userInfo load so it no longer flashes All Leads - Single market: auto-select it and hide the market-t...
§6.1 RON legal-wall grain — **************** (frozen WORM) + CLOSING_STEP_BLOCKED event
The property state is frozen identity on the closing package (a closing's property does not move) and is the grain the §6.1 RON state-eligibility legal wall rea...
URI-encode WOPISrc + trust all api.* WOPI hosts (multi-tenant)
Opening a doc for a non-kamocrm tenant failed with 'unauthorized WOPI host'. Docs's alias_groups only trusted api.kamocrm.com (the Docs-deployment env hardcoded...
CLOSING_MERS_SUBMITTED event key (doc 05 §6.3)
The MERS signal: a MersRegistration **************** was appended for the loan (append-only, MIN never overwritten). Additive open String key (no DDL).
Use k1m1 registry/API 192.168.4.22 (drop deprecated WireGuard IPs)
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
