Changelog
Qué hay de nuevo.
Cada mejora de la plataforma, a medida que se envía.
· kamo-internal
Equipos en el formulario creador, para una persona y para un alquiler AI (KamoCollab CP01 T24A)
/settings/team-member/new gains Teams on its Role card: a multiple pick over los equipos de la organización (el cliente de equipos), ofrecidos a quien pueda cambiar los equipos de un miembro en el perfil (teamsEditAtCreate, el campo de Equipos posiciónPuerta derecha: MANAGE MEMBER SECURITY), y oculta de otra manera. Las elecciones salir como teamIds, para una persona y para un alquiler AI (aiHirePayload mantiene ellos); sin elección, sin llave. Rechazo de los equipos (400/403/409 con muestra en el campo y en la bandera, en el diccionario palabras donde las tiene, NO incluido. Una vista previa de alquiler de AI ahora incluye los equipos elegidos, la capa TEAM que empezará con. La vida resumen nombres de los equipos.
· kamo-shared-library
Enlaces de Tendencia — deriva entero, el mínimo-move inverso con la carga de dos plazos, y las dos puertas (KamoCollab CP03 T5)
Las tendencias de debilidad son "controles propios, vinculados y opción para ser completamente independiente" (decisión del propietario 6). TendencyLinks.LINKS sostiene los siete enlaces de CP03 spec §5.4; deriva es 2,5 x (s - pivot) redondeado medio arriba en enteros; inverso redondea la suma de destino una vez y lleva una abrazada término es déficit al otro término (reglas CP03-T5-1..3).
· kamo-internal
Los equipos de un miembro en la tarjeta de posición del perfil, guardados en la ruta del lado miembro, y los equipos de nombres de las pistas de cascada (KamoCollab CP01 T24)
La tarjeta de posición gana equipos bajo el título de trabajo: fichas para cada espectador de la tarjeta, una selección múltiple de los equipos de la organización para una seguridad administrador, guardado como {teamIds} a PUT ******************* (miembro del Punto Final). Equipos que el perfil no podía leer no se ofrecen para edición, por lo que un ahorro nunca reemplaza a los equipos que nadie vio (CP01-T14-4). Un rechazo muestra en el campo en las palabras del diccionario donde las tiene. El miembro los equipos de nombres de las fichas de seguridad, y el equipo: las fuentes obtienen un tono propio.
· kamo-shared-library
El registro de rasgos de 60 teclas, el grupo predeterminado y el vocabulario Docstion (KamoCollab CP03 T4)
Personalidad TraitKey lleva un TraitSpec por clave (familia, tipo, rango, default, opciones, claves conectadas, grupo UI, unidad, adaptabilidad, teclas de etiqueta), REGISTRY VERSION cp03-1, desdeName y la elecciónLabelKey; PersonalityDefaults sostiene el CHANNEL ORDER, ETIQUETTE and DECISION PRIORITY defaults of spec 5.3.4. El paquete collab añade CollabKind y los tres enums de nivel restrictivo más los desencadenantes de escalada. Clases puras, sin frijoles; nada las lee todavía.
· SecurityService
El DDL aplicado a mano para la capa ORG de alquiler, las columnas de personalidad y docencia y los arquetipos de org, y su prueba de contrato (KamoCollab CP03 T2)
Spec §5.1's block, character for character: the twelve nullable trait/collab columnas sobre las cinco tablas de propietarios, org charter items (cading with su org), org personality archetypes (unique title per org, case-insensible) y sus elementos (encaminando con el arquetipo), y un arquetipo parcial ref índice por tabla de propietario para el control de uso en arquetipo. La tarea 3 lo aplica.
· kamo-internal
La pestaña Equipos en Configuración Esencial, en el menú de configuración, en la página de aterrizaje Ajustes y en la barra de administración de casa (KamoCollab CP01 T23)
/settings/essential?tab=teams monta TeamManager después de los títulos de Job, con sus ayuda columna (propósito, características con la cascada de derechos, mejores prácticas, la Artículo de flete). El menú de configuración gana { clave: 'teams' después del trabajoTitles, la página de aterrizaje una tarjeta de Equipos al lado de Departamentos y títulos de Job, y el hogar admin bar una entrada de Equipos después de Títulos de Trabajo (master R1-37). Pruebas: esencialSetupExposure pins R1-37 (cada entrada de menú de configuración esencial tiene una tarjeta de aterrizaje y una entrada de la barra de administración, en orden de menú); resuelve las llaves de cada tarjeta de aterrizaje construidas a tiempo, que check-i18n-keys no pueden ver; equiposTab marca el lugar, componente y ayuda de la pestaña.
· kamo-internal
Diálogo del equipo de TeamManager — nombre, hora, miembros y plomo, descripción y carta, roles y derechos, guardados en una sola llamada (KamoCollab CP01 T22)
Añadir Equipo, Editar cada fila y la llamada del estado vacío a la acción abrir un diálogo: el nombre, la sesión timeout, los miembros (chips, y el selector miembro se inauguró en los miembros actuales), el líder (elegido de esos miembros, "Sin plomo" permitido), la descripción con su contador, CharterEditor en el TEAM nivel, los papeles asociados con ninguno forzado (D15), y los derechos directos a través de PermissionGroups. Un POST o PUT envía cada campo; NO SPECIFIED nunca es enviado. Una negativa se dice en sus propias palabras, su campo cuando tiene uno; derechosRecalculado: ofertas falsas Recalcular permisos. El refresco en vivo pausa mientras el diálogo está abierto. El selector multi-seleccionista gana inicialPicked: se abre a las personas ya elegidas, y su respuesta es la Toda la selección.
· SecurityService
Las entradas de la lista visible provienen del gráfico de org - subordinados, AI supervisa y miembros de AI como cadenas id; el gerente y los pares de supervisor AI se han ido (KamoCollab CP02 T15)
Ahora toma la llamada y lee el mensaje. organigrama de org de la caché de 60 s (orgGraphCache.get): - subordinadosMemberIds = reportes(caller, true) que son récord-activos y no sintético, sólo con el derecho subordinado y no el derecho all-org; - aiSuperviseeIds = los nodos AI cuyo supervisor es el que llama (nunca); - aiMemberIds = cada nodo AI; - orgMemberIds (todavía toda la página web) y nombres como antes. Ya no llama acceso.managerPairs o aiMembers.artificialMembers for visibilidad. VisibilidadInputs.toBody() envía los tres sets como cadenas en su lugar de gerentePairs y aiSupervisorPairs. **************** TeamMemberRepo dependencia se eliminan. Un gerente medio inactivo ya no oculta los informes debajo de ellos (D19); un miembro TERMINATED cuyo registro todavía está activo mantiene un subordinado, como el El filtro activo los mantuvo. ComputeService acepta los conjuntos desde CP02 T14 (desplegado); T16 elimina su par caminar sólo después de que esto sea en vivo.
· SecurityService
GET /api/security/org-chart — la gente org gráfica del gráfico de org: miembros del equipo que no son sintéticos, inactivos marcados, departamentos con sus cabezas, equipos con sus pistas, cada id una cadena y ningún nivel, papel o derecho (KamoCollab CP02 T13)
· kamo-internal
TeamManager, la mesa de equipos — filas, estados de carga y eliminar (KamoCollab CP01 T21)
La tabla de la ficha Equipos (spec § 5.10, D22), como JobTitleManager enumera los títulos de trabajo: equipo (título y primera línea de la descripción), miembros, plomo, requisitos, roles asociados, derechos directos y timeout, con el CommerceSkeleton, EmptyState and ErrorState-with-Retry states. Eliminar ConfirmaciónDiálogo nombrando el recuento del miembro; se dice un rechazo Equipos.errores palabras, de lo contrario la sentencia del servicio. Vivir useOrgChanges(['teams', 'member-security']), pausado mientras la confirmación está abierto; cada carga está numerada, por lo que un refresco en vuelo cuando una tierra eliminada no puede traer la fila de vuelta. Nada lo monta hasta el Task 23 añade la pestaña; La tarea 22 añade los botones Añadir y Editar con su diálogo.
· SecurityService
La línea de gestión lee el gráfico de org — cheques de ciclo en un gráfico fresco, el directorio en el caché, y el propio administrador de un miembro necesita MANAGE MEMBER SECURITY para cambiar (KamoCollab CP02 T12)
- MemberSecurityController: rejectManager mantiene el yo, el org y el disco-activo rechazos y pruebas del bucle con **************** El límite va. touchesMemberSecurity gana managerId, en comparación con el departamento (sólo un cambio real necesita el derecho; un id no legible cuenta como uno) (D21, D22). - ManagerStepHandler: el cheque de bucle del paso MANAGER es la misma prueba en un Gráfico cargado dentro de su transacción; MANAGER OF y la profundidad atada. - TeamMemberDirectoryController: un gráfico en caché por página, leído sólo cuando una fila pide; directReports = reportes (id, false), así que las AI supervisadas cuentan; la pista de selección = candidato == miembro o gerenteChain(candidate) contiene miembro.
· kamo-internal
Los equipos cliente —tipos, TeamsApiError y las diez llamadas sobre los relés del equipo (KamoCollab CP01 T20)
app/lib/teams/teamsApi.ts: Team, TeamDetail, TeamMemberRow, TeamRef, TeamWrite, TeamSaved; parseTeam (tolerante: ids as strings, missing lists [], a right whose right configuración no es GRANTED o NUKE caído); EquiposApiError(mensaje, estado, razón, campo, miembroId), leído del cuerpo o el envoltorio de detalles del proxy, con sólo una frase escrita para la gente como su mensaje; y listTeams, getTeam, createTeam, updateTeam, deleteTeam, getTeamMembers, setTeamMembers, RecalculateTeamRights, getMemberTeams, setMemberTeams sobre autenticado Trae. con credenciales: 'incluye'.
· kamo-internal
El cliente de alquiler conoce TEAM, y los equipos de relés BFF (KamoCollab CP01 T19)
CharterLevel gana TEAM y CharterSubjeto al equipo de un miembro hipotéticoIds; SaveLayer... Dos relés: /api/security/teams/** (GET, POST, PUT, DELETE) y ¿Qué? (GET, PUT), cada uno a través forwardToApi y reléUpstream, segmentos recodificados y segmentos de puntos se negaron. vitest recopila ahora app/api/**/ tests , donde se encuentra la prueba de relé.
· SecurityService
Los informes leen el gráfico de org: un alcance de TEAM y una parte de TEAM llegan a todo el subárbol, IAs supervisadas incluidas (KamoCollab CP02 T11)
ReportScopeResolver.reportsTo is reports(member, true) of the cached graph: transitive and sin límites (la vieja caminata se detuvo después de diez niveles), siguiendo la línea de reportaje, por lo que un AI con ningún gerente está en el equipo de su supervisor. Una parte de TEAM alcanza al administrador sus nombres clave y todo el mundo debajo de ellos a cualquier profundidad (sólo llegó a sus informes directos). No hay reporte que nombre un equipo derecho y no existe ninguna cuota TEAM, por lo que la producción no se cambia.
· SecurityService
Equipos en la creación de miembros — teamIds on create-team-member, verificados antes de que se escriba algo, unidos dentro de la transacción de creación antes de los primeros derechos aplicados, anunciados después del compromiso (KamoCollab CP01 T14A)
¿Qué? (y el /crear y /bulk-crear caminos que comparten MemberCreationService.create) tomar un equipo opcionalIds para una persona o un AI (master R1-36). Absente, null y [] no nombre equipo y no necesita derecho, por lo que una creación sin equipos no se cambia. - Revisado después de los cheques AI y antes de la búsqueda del usuario, cada negativa con el equipo de campo nada escrito: 400 INVALID FIELD, 403 NO REALIZADO sin MANAGE MEMBER SECURITY o un abierto ventana de dios (Creator.maySetTeams, llena de creadorOf), 400 NOT A TEAM MEMBER para un miembro base, 409 TOO MANY TEAMS over 25 (no read), 400 TEAM NOT FOUND for another org's or an unknown team, 400 TOO MANY MEMBERS para un equipo completo (TeamValidator.newMemberTeams). - Escrito por TeamWriter.joinNewMember, MANDATORY sin @RetryOnDbConflict, a través del nuevo equipos. NewMemberTeams, justo después del ahorro del miembro y antes del espejo, el primero aplicado derechos (que incluyen el nivel TEAM) y el alquiler de un AI; flushed, never caught: a member never existe con la mitad de sus equipos. Un 40001 es recortado enteramente por el callador (el existente 503 RETRY). - TeamService.afterCommit le dice al TeamChangeListeners una vez que la creación se compromete, nunca después de un rollback; la bienvenida se queda después del commit (a8966fd). Rulings CP01-T14A-1..3; master CP-D96.
· kamo-internal
El filtro de registro de acceso ofrece impersonación y entradas (KamoCollab CP00 T11)
SecurityService escribe ahora IMPERSONATION STARTED, IMPERSONATION ENDED y ENTER AS en el registro de acceso del org. La lista de eventos (accesoLogEvents.ts, que el filtro y la cuadrícula leen) refleja la biblioteca compartida enum y gana los tres, en su orden, dicho en las palabras del diccionario. Una nueva prueba abre el filtro en sí y mantiene los tres a AccessLogEventType; el parser de Java enum se mueve en sharedLibPath así que ambas pruebas la comparten.
· SecurityService
SecurityService's chat policy reads member facts from the org graph, a graph loaded per snapshot (KamoCollab CP02 T10)
ChatPolicyBeanConfig construye ChatPolicySnapshotLoader con el gráfico constructor y orgGraphCache:fresh (regling CP02-T17-3), como MediaService lo hace, así que las anotaciones de chat de la lista y la tarjeta miembro lee la misma hechos como cualquier otra pregunta de jerarquía. El repositorio de hechos de chat legado ya no se inyecta; el colib común lo elimina en la tarea 18. ChatPolicyBeanConfigTest: los hechos del cargador son MemberFactsFromGraph of the grafito fresco() regresa para el org id (nunca get()); ningún conjunto activo pide no grafito; el servicio mantiene su instantánea hasta invalidada; un caché de 59 s el gráfico no se utiliza; y el alambre de frijoles en un contexto sin repositorio legado, donde el editor y el oyente NATS cada uno hace la siguiente instantánea leer una nuevo gráfico. ReferenciaOrgGraph se hace público con los miembros() y build().
· SecurityService
Un departamento tiene una cabeza — PUT ************* su escritor, y el nombre de la cabeza y de pie en el departamento lee (KamoCollab CP02 T9)
· SecurityService
Cada gráfico de SecurityService anuncia el cambio, el equipo escucha, y un ratchet lo mantiene así (KamoCollab CP02 T8)
Cada ruta de escritura de CP02 spec §3.5 (W1-W15) llama ************* causa) con las causas del §5.4.2: seguridad de los miembros (roles, departamento, título de trabajo, gerente, nivel, propietario, tipo miembro), el perfil PUT (status, inteligencia, AI supervisor, en comparación con los valores leer antes del ahorro), creación de miembros, registro, org crear y salir, AI jubilado, el alquiler MANAGER step, departments, job titles, role delete, and portal and billing member creation. El espejo del proveedor de seguridad anuncia su propia organización (regulado CP02-T8-1). OrgGraphTeamChangeListener implementa CP01's TeamChangeListener costura con causa TEAM. OrgGraphPublisherCoverageTest (D15) falla cuando un archivo escribe un hecho gráfico sin el editor, fuera de COVERED BY SEAM (teams/TeamWriter.java) y ALLOWED (con razones), nombrando el archivo, la línea y el patrón.
· SecurityService
Equipos en la tarjeta miembro y en la búsqueda del directorio — [{id, title}] por título, un equipo leyó por página (KamoCollab CP01 T16)
Get /api/security/members/{id}/card names a team member's teams ([] in no team; left out when the read fails, como en el perfil). ¿Qué? da a cada equipo de fila sus equipos de uno encontrarTeamRefsByMemberIdIn for the page's team members (TeamService.teamsOfMembers, which teamsOf now uses, so hay una regla de orden); la fila de un miembro plano no tiene equipos y no se le pregunta. /ai-miembros y /Los objetivos de la personificación no cambian.
· SecurityService
Equipos en las vistas de los derechos efectivos — nivel de equipos de la cascada de diagnóstico y equipo: fuentes sobre los derechos aplicados (KamoCollab CP01 T15)
La cascada de diagnóstico (GET ******************* lista el miembro de un equipo equipos entre el título de trabajo y el miembro, {teamId, título, roles, derechos}, en el orden de la cascada; el derechos de la vista de seguridad aplicados "Team: "Team: "Team: "Team: "Team:" título " después del trabajo título y antes del propio miembro. Un lector, equipos. TeamLevelSources: los equipos de TeamLevels, entonces sus roles y derechos directos; una consulta para un miembro en ningún equipo, ninguna para un cliente.
· SecurityService
Los equipos de un miembro del perfil — GETTENPUT **************** y los equipos en el perfil y la vista de seguridad (KamoCollab CP01 T14)
· SecurityService
PUT **************** – la carta de un equipo solo ahorra a través de TeamWriter, anunciada después del compromiso (KamoCollab CP01 T13)
The team charter endpoint of spec §5.6/§5.7 on LayerCharterController, along the papel, departamento y puestos de trabajo: CONFIGURE SYSTEM o dios; el camino id, desconocido equipo y otro equipo de org son los 404 TEAM NOT FOUND (regling CP01-T13-1); charterItems es necesario y [] se aclara; TeamWriter.updateCharter valida los artículos como la capa TEAM en su transacción, luego TeamService. despuésWrite anuncia el ahorro una vez. Una edición de cartas no recalcula a nadie y no es un hecho gráfico. Respuestas {charterItems}. The team path-id rule (canonical UUID text, else 404 with no lookup, CP01-T10-1) se mueve de TeamController a TeamWire.pathTeamId para que ambos controladores lo compartan.
· SecurityService
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 ROLE layer. Only staff are looked up, with one indexed query, so a member in no team resolves exactly as before (pinned against layers and effective items captured on the unchanged loader; no stamp hash, R1-1). A TEAM subject resolves its roles (rank 0), then the team's layer, with the dialog's unsaved roles, description, title and items. CharterSubject gains teamIds (a hypothetical member's teams); a team of another org, as a TEAM subject or in teamIds, is 404 SUBJECT_NOT_FOUND and none of its items or roles are read (Review Focus 4). CharterReferenceValidator finds team charter items: a TEAM marker may hide role, department and job-title items, a MEMBER marker may hide a team's item, and a team item of another org is SUPPRESS_TARGET_NOT_FOUND. **************** used TEAM as its unknown level; TEAM became a level in cp01:5, so it now uses PLANET.
· kamo-internal
"Llamas de miembros del equipo AI" en su propio perfil (SP95 T27)
El perfil de una persona gana una tarjeta en su sala de trabajo: si su los miembros del equipo AI de la organización pueden llamarlos, y en cuál de sus números. El interruptor gira un consentimiento permanente en el número elegido (el primero por defecto) o apagado, y elegir otro número mientras que está en movimiento el consentimiento allí; ambos a salvo a la vez a través del nuevo BFF relé de la ruta de contacto de SecurityService. Un consentimiento dejado en número que ya no está en el perfil lee como fuera, con "Tu número cambiado"; un perfil sin número pide uno primero. La tarjeta dice un llamada solicitada en un chat se permite incluso cuando esto está apagado, y re-reads cuando el registro del miembro cambia en otro lugar. Un administrador de seguridad ve la tarjeta de un colega sólo de lectura, captado para alguien más y nombrar quién puede cambiarlo. Las puertas son aiCallsView (self or MANAGE MEMBER SECURITY, on a save person who is a miembro del equipo) y aiCallsEdit (la persona que ellos mismos), con una fila de paleta.
· kamo-internal
"Llamas de miembros del equipo AI" en su propio perfil (SP95 T27)
El perfil de una persona gana una tarjeta en su sala de trabajo: si su los miembros del equipo AI de la organización pueden llamarlos, y en cuál de sus números. El interruptor gira un consentimiento permanente en el número elegido (el primero por defecto) o apagado, y elegir otro número mientras que está en movimiento el consentimiento allí; ambos a salvo a la vez a través del nuevo BFF relé de la ruta de contacto de SecurityService. Un consentimiento dejado en número que ya no está en el perfil lee como fuera, con "Tu número cambiado"; un perfil sin número pide uno primero. La tarjeta dice un llamada solicitada en un chat se permite incluso cuando esto está apagado, y re-reads cuando el registro del miembro cambia en otro lugar. Un administrador de seguridad ve la tarjeta de un colega sólo de lectura, captado para alguien más y nombrar quién puede cambiarlo. Las puertas son aiCallsView (self or MANAGE MEMBER SECURITY, on a save person who is a miembro del equipo) y aiCallsEdit (la persona que ellos mismos), con una fila de paleta.
· SecurityService
El equipo sub-resources (miembros, derechos, roles) y el endpoint de recalculación (KamoCollab CP01 T11)
Ten paciencia. /derechos y /roles, y PUESTOS ******************* (especie § 5.7). Las lecturas son abierto a cualquier sesión de la org; escribe necesidad CONFIGURE SYSTEM o un abierto Dios, mirado antes de que el equipo sea buscado. Cada PUT reemplaza su una lista requerida a través de TeamWriter, ejecuta TeamService. después deWrite y responde a la lista como se lee ahora con derechosRecalculado: miembros recalcula quién se unió y quién dejó sólo, derechos y roles del equipo miembros. La recalculación responde {recalculado: n}, el miembro cuenta, y un fracaso es un 500 que no filtra nada.
· kamo-internal
SP96 la tarjeta de voz AI en el perfil, y la sección VOICE de la carta sin el pin TTS
La sala de identidad de un miembro de AI gana su tarjeta de voz: una línea por discurso modelo que puede utilizar, en el orden que los intenta, con la voz que habla ahora y cómo fue elegido, el modelo usó primero, un modelo sin voz de su sexo, y voz que cambia la próxima vez que habla, con ¿Por qué? Un espectador AIService permite cambiarlo elige otra voz (una ventana de diálogo) las voces que se adapten) o el modelo utilizado primero; ambos guardar a la vez a través de los nuevos relés BFF de los puntos finales de voz miembros de AIService. El tarjeta lee sus voces de nuevo cuando el sexo salvado cambia. Su puerta, aiVoiceView, es la regla de lectura de AIService, y tiene una fila de paleta. La sección VOICE del editor de cartas es sólo texto de estilo: el selector TTS y el catálogo de voz de alquiler (llamada cliente y ruta BFF) se han ido, la sección dice que la voz es elegida en el perfil, y un artículo todavía Llevar un pin de voz está marcado como compartido-lib lo rechaza.
· kamo-internal
SP96 la tarjeta de voz AI en el perfil, y la sección VOICE de la carta sin el pin TTS
La sala de identidad de un miembro de AI gana su tarjeta de voz: una línea por discurso modelo que puede utilizar, en el orden que los intenta, con la voz que habla ahora y cómo fue elegido, el modelo usó primero, un modelo sin voz de su sexo, y voz que cambia la próxima vez que habla, con ¿Por qué? Un espectador AIService permite cambiarlo elige otra voz (una ventana de diálogo) las voces que se adapten) o el modelo utilizado primero; ambos guardar a la vez a través de los nuevos relés BFF de los puntos finales de voz miembros de AIService. El tarjeta lee sus voces de nuevo cuando el sexo salvado cambia. Su puerta, aiVoiceView, es la regla de lectura de AIService, y tiene una fila de paleta. La sección VOICE del editor de cartas es sólo texto de estilo: el selector TTS y el catálogo de voz de alquiler (llamada cliente y ruta BFF) se han ido, la sección dice que la voz es elegida en el perfil, y un artículo todavía Llevar un pin de voz está marcado como compartido-lib lo rechaza.
· AIService
El breve lidera el propósito de un equipo con el nombre del equipo (KamoCollab CP01 T17)
Una línea TEAM PURPOSE ahora lee "Como miembro del equipo {title}: ", después de la título de trabajo, como el ROLE, DEPARTAMENTO y JOB TITLE conduce. VERSION stays (D19): ningún breve tiene una capa TEAM todavía, así que nada necesita recompilar.

Tu universo está esperando.
Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.
Gratis para siempre: no se requiere tarjeta de crédito