Pin the heads' names query onto users_pkey — /*+ IndexScan(u users_pkey) */ first in the statement, as loadMembers and the org chart's people query; without it the legacy planner seq-scans all of users per head row (KamoCollab CP02 final fix)
Production EXPLAIN (sp00verify, read-only): the unhinted literal plan was a nested loop over Seq Scan on users (106 rows) for 1 and 2 ids; with the hint every p...
**************** — every charter owner table carries every CharterItem column and its owner, from the docs/sql files in order and a dated legacy baseline (KamoCollab CP03 T7)
The program's one cross-table charter DDL guard (master R1-12). It reads every docs/sql/*.sql in filename order and collects what the six owner tables (dept_req...
The hand-applied DDL for the charter ORG layer, the personality and Docstion columns and org archetypes, and its contract test (KamoCollab CP03 T2)
Spec §5.1's block, character for character: the twelve nullable trait/collab columns on the five charter owner tables, org_charter_items (cascading with its org...
The visible listing's inputs come from the org graph — subordinates, AI supervisees and AI members as id strings; the manager and AI supervisor pairs are gone (KamoCollab CP02 T15)
**************** now takes the caller and reads the organization's org graph from the 60 s cache (orgGraphCache.get): - subordinateMemberIds = reports(caller, t...
The manager line reads the org graph — cycle checks on a fresh graph, the directory on the cached one, and a member's own manager needs MANAGE_MEMBER_SECURITY to change (KamoCollab CP02 T12)
- MemberSecurityController: rejectManager keeps the self, org and record-active refusals and tests the loop with **************** the ten-level bound goes. ...
Pin that a same-org Enter-As is refused before any audit row or session (KamoCollab CP00 final fix)
EnterAsController answers 400 'target is current session organization' before ImpersonationAudit.enteredAs runs, on both branches, so no same-org entry can writ...
Reports read the org graph — a TEAM scope and a TEAM share reach the whole subtree, supervised AIs included (KamoCollab CP02 T11)
ReportScopeResolver.reportsTo is reports(member, true) of the cached graph: transitive and unbounded (the old walk stopped after ten levels), following the repo...
Teams at member creation — teamIds on create-team-member, checked before anything is written, joined inside the creation transaction before the first applied rights, announced after the commit (KamoCollab CP01 T14A)
POST **************** (and the /create and /bulk-create paths that share MemberCreationService.create) take an optional teamIds for a person or an AI (master R1...
SecurityService's chat policy reads member facts from the org graph, a graph loaded per snapshot (KamoCollab CP02 T10)
ChatPolicyBeanConfig builds ChatPolicySnapshotLoader with the graph constructor and orgGraphCache::fresh (ruling CP02-T17-3), as MediaService does, so the roste...
Every SecurityService graph write announces the change, the team seam listens, and a ratchet keeps it so (KamoCollab CP02 T8)
Each write path of CP02 spec §3.5 (W1-W15) calls **************** cause) with §5.4.2's causes: member security (roles, department, job title, manager, level, ow...
Teams on the member card and in the directory search — [{id, title}] by title, one team read per page (KamoCollab CP01 T16)
GET /api/security/members/{id}/card names a team member's teams ([] in no team; left out when the read fails, as on the profile). GET **************** gives eac...
Teams in the effective-rights views — the diagnostics cascade's teams level, and Team: sources on the applied rights (KamoCollab CP01 T15)
The diagnostics cascade (GET **************** lists a team member's teams between the job title and the member, {teamId, title, roles, rights}, in the waterfall...
A member's teams from the profile — GET|PUT **************** and teams on the profile and the security view (KamoCollab CP01 T14)
PUT **************** — a team's charter-only save through TeamWriter, announced after the commit (KamoCollab CP01 T13)
The team charter endpoint of spec §5.6/§5.7 on LayerCharterController, beside the role, department and job-title ones: CONFIGURE_SYSTEM or god; the path id, unk...
The TEAM charter layer — a member's teams after the job title, the TEAM subject, teamIds, and team hide markers (KamoCollab CP01 T12)
A member's teams become TEAM layers between the job title and the member, all at one rank and ordered by lower-case title then id; the teams' roles join the ROL...
The team sub-resources (members, rights, roles) and the recalculation endpoint (KamoCollab CP01 T11)
GET|PUT **************** /rights and /roles, and POST **************** (spec §5.7). Reads are open to any session of the org; writes need CONFIGURE_SYSTEM or an...
The failed-recalculation log names the repair path as /teams/{id}/recalculate-rights
SLF4J has no brace escape, so "{{id}}" was logged literally. "{id}" is not a placeholder and prints as written; the test now pins the path an operator would typ...
TeamController — list, create, read, update and delete (KamoCollab CP01 T10)
GET|POST /api/security/teams and GET|PUT|DELETE /api/security/teams/{id} (spec §5.7). Every handler resolves the caller first (401 without an org); reads are op...
The team domain — wire, validation, writer, service and the org-graph seam (KamoCollab CP01 T9)
TeamWire reads a team body tri-state (absent / null / value); TeamValidator checks titles, descriptions, timeouts, roles, rights (normalized as a level), staff-...
SecurityService's org graph beans, the after-commit change publisher, its listener and the two internal routes (KamoCollab CP02 T7)
OrgGraphBeanConfig declares the loader (a read-only TransactionTemplate of its own, Clock.systemUTC()) and the 60 s OrgGraphCache. OrgGraphChangePublisher colle...
Right-table housekeeping covers org_team_rights (KamoCollab CP01 T8)
RoleRightsSyncService names org_team_rights in all three of its lists, so on every boot a frozen CHECK on it is dropped, a row naming a removed right is deleted...
The hand-applied DDL for department heads and the org-graph load indexes, and its contract test (KamoCollab CP02 T1)
The hand-applied DDL for teams, and its contract test (KamoCollab CP01 T2)
**************** is spec §5.1's block verbatim: org_teams, org_team_members, org_team_roles, org_team_rights (type INT4, unique (team_id, type), master CP-D3) a...
Impersonation and Enter-As write access-log rows (KamoCollab CP00 T9)
Both impersonation doors write IMPERSONATION_STARTED (HIGH) in the target's org with logEventSync after every refusal check and before the session is minted; a ...
A created member's activation welcome waits for the commit, so a swallowed 40001 can no longer turn the create into a silent rollback
POST **************** answered 200 with a member id and a user id that never existed (KamoCollab CP00 Task 0, 2026-10-05, sp00verify). The activation welcome ra...
A rename clears the phonetic spelling of the name it changed (SP94-F-1)
The AI's speech pairs the org's CURRENT name with whatever spelling is stored. The Getting-Started wizard renames through PUT /org/{id} without sending a spelli...
SP96 the pin test's real controller takes the charter-change publisher
SP95 T6 (de022c1) added KamoaiEventPublisher to MemberCharterController's constructor after this test was written, so the rebased test no longer compiled (and C...
Cap the org's two phonetic name spellings on the settings PUT (SP94 T4)
titlePhonetic and titleShortPhonetic ride PUT /api/security/org/{id} under the same rights as title/titleShort (ownership or CONFIGURE_SYSTEM, never god-mode on...
A rename reaches the member's mailboxes (SP95 T36)
After a committed change of a person's "First Last", SecurityService posts {previous, current} to EmailService's **************** once per membership of the use...
A charter save reaches the AI runtime at once, and the charter profile names the company (SP95 T6)
**************** now carries a cause. The rights path sends RIGHTS; a committed charter save sends CHARTER for each affected AI member, with the member's curren...
Assigning a computer reads the one member, not the whole organization
HostedComputerAccess.isMember loaded every member of the organization to test one id, and emailOf, called right after it on the same assign path, did the same t...
SP94 DDL for the org's two phonetic name columns, pinned by a contract test
orgs.title_phonetic and orgs.title_short_phonetic, both nullable VARCHAR(255) with no default and no CHECK, the same shape as users.name_phonetic. Hand-applied ...
The AI-dispatch audit trail names people the same way chat does
**************** hand-duplicated MemberDisplayNames' pre-fix precedence (usernameAlias wins unconditionally over the real name), with its own comment warning th...
A colleague's call card for AI calls, and consent to AI calls on one's own profile (SP95 T5)
- GET **************** (X-Internal-Auth): a team member's name, kind, whether they are still here, their effective zone (work site, member, org, UTC), the E...
SP96 the charter's VOICE TTS pin is refused and resolves to nothing
SecurityService picks up the retired pin from shared-lib (Task 14); no SecurityService code read it. Pins the service's side: a member item naming voiceModelId/...
SP96 hire options to leave out the phone extension and the workstation
An AI hire's create body takes aiPhoneExtension and aiWorkstation (JSON booleans, true when absent). A step left out is created SKIPPED with NOT_REQUESTED_AT_HI...
SP96 sex on the member profile and at creation, gated as personal data
GET /api/security/members/{id} names sex (FEMALE, MALE or null) only to a caller who may read it (MemberSexAccess, spec D3); the key is absent for anyone else. ...
SP96 DDL for members.sex, pinned by a contract test
A member's sex is a nullable VARCHAR(16) (FEMALE | MALE, NULL = not specified), hand-applied in SP96 Task 3. The contract test keeps the file re-runnable, with ...
An address on either platform apex signs in to the account holding its twin
The owner signed in on login.kamouniverse.com with the brand's new address and was told "User does not exist". The account's address is Sage@KamoCRM.com. Since ...
Theme folders still showing the retired KamoCRM placeholder move to the KamoUniverse one
Every new org's theme folder is seeded from public/default/. Until today its full logo was the KamoCRM wordmark. The seed is now the KamoUniverse wordmark, buil...
A like is stamped, so it saves
media_obj_reports.date_created is NOT NULL, and the like was built without it: @ColumnDefault only shapes the DDL, so Hibernate wrote NULL and every like failed...
Edit, like and delete one post or note by its own id, never the whole stream
A feed, the organization's (the Clubhouse) or a lead's notes, is ONE POST session and every post or note is a message in it, so every item the feed lists carrie...
New authenticator enrollments are labelled KamoUniverse
The otpauth issuer was the literal "KamoCRM". Only new enrollments change. An existing authenticator entry keeps its label and keeps working, because the code c...
SPF advice recognises kamouniverse.com; the brand's aliases are reserved on both apexes
SPF: kamouniverse.com publishes the same record as spf.kamocrm.com (v=spf1 ip4:47.181.8.84 mx -all), so a customer who wrote include:kamouniverse.com has alread...
Platform fallbacks name the primary apex, not a kamocrm.com literal
Four places kept their own "kamocrm.com" literal as the platform host they fall back to, so they could never follow the brand to kamouniverse.com. Each now read...
Kamouniverse.com is the primary apex, and a domain is verified by where it resolves
"Changed the domain from kamocrm.com to kamouniverse.com on /setup/dns. It said it set it but could not verify anything, and after a refresh it still said kamoc...
One organization can no longer take another's <alias>.kamocrm.com routing
Any member of an organization with no root could add the root victim.kamocrm.com (POST /api/security/domains checked no right). Listing the domains then self-he...
A lead's notes stream, addressed by its guid, keeps the lead's own read rule
Every note on a lead now sends the lead stream's guid on /topic/media/feed/<orgId> (SP99-T3), which any member of the organization may subscribe to. The guid-ad...
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.
