Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions app/src/features/catalog/agency.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ describe("the Bot agency", () => {

fireEvent.click(within(invite).getByRole("button", { name: "See all bots" }));
const dialog = await screen.findByRole("dialog", { name: "Bot agency" });
expect(await within(dialog).findAllByRole("listitem")).toHaveLength(44);
expect(await within(dialog).findAllByRole("listitem")).toHaveLength(52);
});

test("a crew with only its chief invites the owner to pick bots, and a click adds one", async () => {
Expand Down Expand Up @@ -82,7 +82,7 @@ describe("the Bot agency", () => {
await openCrewWithChief();
fireEvent.click(screen.getByRole("button", { name: "Bot agency" }));
const dialog = await screen.findByRole("dialog", { name: "Bot agency" });
expect(await within(dialog).findAllByRole("listitem")).toHaveLength(44);
expect(await within(dialog).findAllByRole("listitem")).toHaveLength(52);

fireEvent.click(within(dialog).getByRole("button", { name: "Marketing & sales" }));
expect(within(dialog).getAllByRole("listitem")).toHaveLength(18);
Expand Down Expand Up @@ -129,7 +129,7 @@ describe("the Bot agency", () => {
expect(addCalls(fake)[0]).toMatchObject({ templateId: "code-reviewer" });

fireEvent.click(within(dialog).getByRole("button", { name: "Back to all bots" }));
expect(within(dialog).getAllByRole("listitem")).toHaveLength(44);
expect(within(dialog).getAllByRole("listitem")).toHaveLength(52);
});

test("the same role twice gets another name", async () => {
Expand Down
3 changes: 2 additions & 1 deletion app/src/i18n/en/catalog.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { base } from "./catalogBase";
import { engineering } from "./catalogEngineering";
import { marketing } from "./catalogMarketing";
import { product } from "./catalogProduct";

Expand Down Expand Up @@ -46,5 +47,5 @@ export const catalog = {
pairs: "Works well with",
technical: "What the bot is told when it starts",
},
roles: { ...base, ...product, ...marketing },
roles: { ...base, ...product, ...marketing, ...engineering },
};
78 changes: 78 additions & 0 deletions app/src/i18n/en/catalogEngineering.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// Engineering roles (spec 26.3): what the owner reads about each.

export const engineering = {
"software-architect": {
name: "Software Architect",
role: "Designs how a system fits together and records the decisions, trade-offs and risks",
summary: "Designs how the parts of a system fit together and writes down why",
about:
"Decides with you how a piece of software should be structured, picks the simplest design that meets your needs and writes down each important decision with its reasons, costs and risks. It designs; it does not write the product's code.",
when: "Before you build something big, or when a system has become hard to change.",
pairs:
"Developer, Frontend, Backend and Mobile Developers, who build from the design, and Security Reviewer.",
},
"frontend-developer": {
name: "Frontend Developer",
role: "Builds and fixes the part of a site or app that people see and use, fast on a phone and usable by everyone",
summary: "Builds the screens people use, fast on a phone and usable by everyone",
about:
"Builds and fixes pages, forms and menus, thinking about phones first, keyboards, screen readers and slow connections. It checks its work in a real browser and runs the project's tests.",
when: "When a site or an app needs a new screen, or what exists is slow or confusing.",
pairs: "Designer, who draws the screens, and Backend Developer, who provides the data.",
},
"backend-developer": {
name: "Backend Developer",
role: "Builds and fixes the server side: APIs, data handling, background jobs and their tests",
summary: "Builds the part behind the screen: APIs, data and background jobs, with tests",
about:
"Builds and fixes what runs behind the screen: servers, APIs, data rules and jobs, with tests and with attention to what happens when something fails. It never runs changes against live data without asking you.",
when: "When your product needs to save, process or share data, or connect to another service.",
pairs: "Database Engineer, for the data, and Frontend Developer, who uses its APIs.",
},
"mobile-developer": {
name: "Mobile Developer",
role: "Builds and fixes phone apps and checks them on realistic screens, networks and devices",
summary: "Builds and fixes phone apps, thinking about small screens, slow networks and battery",
about:
"Builds and fixes phone apps with small screens, bad networks, interruptions and permissions in mind. It tells you honestly what it could not test without a real device, and it never touches your store accounts or signing keys.",
when: "When you want an app for phones, or the one you have is slow or crashes.",
pairs: "Designer, for the screens, Backend Developer, for the API, and QA Tester.",
},
"database-engineer": {
name: "Database Engineer",
role: "Designs tables, writes and speeds up queries and plans safe changes to a database",
summary: "Designs your database, makes queries fast and changes data without losing any",
about:
"Designs how your data is stored, makes slow queries fast by measuring first and plans every change so that it can be undone, with a backup first. It tests on a copy and never runs anything destructive on live data.",
when: "When a database is slow, messy, or has to change without losing anything.",
pairs: "Backend Developer, who applies the changes, and Data Engineer, who loads the data.",
},
"devops-engineer": {
name: "DevOps Engineer",
role: "Sets up builds, tests, deployments and monitoring, and keeps pipelines and servers healthy",
summary: "Automates building, testing and shipping, and keeps it all running and watched",
about:
"Makes shipping software safe and boring: automatic builds and tests, repeatable deployments, logs and alerts, and a way back for each release. It asks before anything touches a live system and never asks you to paste passwords into the chat.",
when: "When releasing is manual and scary, or something keeps breaking in production.",
pairs:
"Backend Developer, for what the service needs, and Security Reviewer, for access and secrets.",
},
"security-reviewer": {
name: "Security Reviewer",
role: "Reviews your own code and setup for security weaknesses and explains how to fix them",
summary: "Looks for security holes in your own code and setup and explains how to fix them",
about:
"Reviews your own code and setup for weaknesses, explains each one in plain words with how serious it is and the smallest fix. It works defensively, only on what is yours, and never repeats a secret it finds. It thinks harder than most bots, so it uses a bit more of your plan.",
when: "Before you launch, after a big change, or when you handle other people's data.",
pairs: "Developer and DevOps Engineer, who apply the fixes, and Code Reviewer.",
},
"data-engineer": {
name: "Data Engineer",
role: "Builds reliable pipelines that move, clean and store data so that analysts can trust it",
summary: "Builds the pipes that bring clean, trustworthy data to where you analyze it",
about:
"Builds the paths data takes from where it is created to where it is analyzed: it collects, cleans and checks it at every step and stops when something looks wrong instead of passing bad numbers on. It keeps your originals untouched.",
when: "When your numbers live in many places or you cannot trust your reports.",
pairs: "Database Engineer, for where to store it, and Data Analyst, who uses the result.",
},
};
3 changes: 2 additions & 1 deletion app/src/i18n/es/catalog.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type { Messages } from "../en";
import { base } from "./catalogBase";
import { engineering } from "./catalogEngineering";
import { marketing } from "./catalogMarketing";
import { product } from "./catalogProduct";

Expand Down Expand Up @@ -43,5 +44,5 @@ export const catalog: Messages["catalog"] = {
pairs: "Combina bien con",
technical: "Lo que recibe el bot cuando empieza",
},
roles: { ...base, ...product, ...marketing },
roles: { ...base, ...product, ...marketing, ...engineering },
};
83 changes: 83 additions & 0 deletions app/src/i18n/es/catalogEngineering.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import type { engineering as en } from "../en/catalogEngineering";

export const engineering: typeof en = {
"software-architect": {
name: "Arquitecto de software",
role: "Diseña cómo encaja un sistema y registra las decisiones, los intercambios y los riesgos",
summary: "Diseña cómo encajan las partes de un sistema y escribe el porqué",
about:
"Decide contigo cómo debe estructurarse un software, elige el diseño más simple que cubre lo que necesitas y escribe cada decisión importante con sus motivos, costos y riesgos. Diseña; no escribe el código del producto.",
when: "Antes de construir algo grande, o cuando un sistema se volvió difícil de cambiar.",
pairs:
"Desarrollador, Desarrollador front-end, back-end y móvil, que construyen a partir del diseño, y Revisor de seguridad.",
},
"frontend-developer": {
name: "Desarrollador front-end",
role: "Construye y arregla la parte de un sitio o app que la gente ve y usa, rápida en el móvil y usable por todos",
summary: "Construye las pantallas que la gente usa, rápidas en el móvil y usables por todos",
about:
"Construye y arregla páginas, formularios y menús, pensando primero en el móvil, el teclado, los lectores de pantalla y las conexiones lentas. Comprueba su trabajo en un navegador de verdad y ejecuta las pruebas del proyecto.",
when: "Cuando un sitio o una app necesita una pantalla nueva, o lo que existe es lento o confuso.",
pairs: "Diseñador, que dibuja las pantallas, y Desarrollador back-end, que da los datos.",
},
"backend-developer": {
name: "Desarrollador back-end",
role: "Construye y arregla el lado del servidor: APIs, manejo de datos, tareas en segundo plano y sus pruebas",
summary:
"Construye la parte que está detrás de la pantalla: APIs, datos y tareas en segundo plano, con pruebas",
about:
"Construye y arregla lo que corre detrás de la pantalla: servidores, APIs, reglas sobre datos y tareas, con pruebas y con atención a lo que pasa cuando algo falla. Nunca ejecuta cambios en datos reales sin preguntarte.",
when: "Cuando tu producto necesita guardar, procesar o compartir datos, o conectarse a otro servicio.",
pairs:
"Ingeniero de bases de datos, para los datos, y Desarrollador front-end, que usa las APIs.",
},
"mobile-developer": {
name: "Desarrollador móvil",
role: "Construye y arregla apps de móvil y las comprueba en pantallas, redes y dispositivos realistas",
summary:
"Construye y arregla apps de móvil, pensando en pantallas pequeñas, redes lentas y batería",
about:
"Construye y arregla apps de móvil pensando en pantallas pequeñas, redes malas, interrupciones y permisos. Te dice con honestidad lo que no pudo probar sin un dispositivo real, y nunca toca tus cuentas de tienda ni tus claves de firma.",
when: "Cuando quieres una app para móviles, o la que tienes es lenta o se cierra sola.",
pairs: "Diseñador, para las pantallas, Desarrollador back-end, para la API, y Tester.",
},
"database-engineer": {
name: "Ingeniero de bases de datos",
role: "Diseña tablas, escribe y acelera consultas y planifica cambios seguros en una base de datos",
summary: "Diseña tu base de datos, hace rápidas las consultas y cambia datos sin perder nada",
about:
"Diseña cómo se guardan tus datos, acelera las consultas lentas midiendo antes y planifica cada cambio para poder deshacerlo, con copia de seguridad primero. Prueba en una copia y nunca ejecuta nada destructivo sobre datos reales.",
when: "Cuando una base de datos está lenta, desordenada o tiene que cambiar sin perder nada.",
pairs:
"Desarrollador back-end, que aplica los cambios, e Ingeniero de datos, que carga los datos.",
},
"devops-engineer": {
name: "Ingeniero DevOps",
role: "Monta compilaciones, pruebas, despliegues y monitoreo, y mantiene sanos los procesos y los servidores",
summary: "Automatiza compilar, probar y publicar, y mantiene todo funcionando y vigilado",
about:
"Hace que publicar software sea seguro y sin drama: compilaciones y pruebas automáticas, despliegues repetibles, registros y alertas, y una forma de volver atrás en cada versión. Pregunta antes de tocar cualquier sistema real y nunca te pide pegar contraseñas en el chat.",
when: "Cuando publicar es manual y da miedo, o algo se rompe siempre en producción.",
pairs:
"Desarrollador back-end, para lo que el servicio necesita, y Revisor de seguridad, para accesos y secretos.",
},
"security-reviewer": {
name: "Revisor de seguridad",
role: "Revisa tu propio código y tu configuración en busca de fallos de seguridad y explica cómo corregirlos",
summary: "Busca fallos de seguridad en tu código y tu configuración y explica cómo corregirlos",
about:
"Revisa tu código y tu configuración en busca de fallos, explica cada uno con palabras sencillas, su gravedad y la corrección más pequeña. Trabaja a la defensiva, solo sobre lo que es tuyo, y nunca repite un secreto que encuentre. Piensa más a fondo que la mayoría de los bots, así que gasta un poco más de tu plan.",
when: "Antes de lanzar, después de un cambio grande, o cuando manejas datos de otras personas.",
pairs: "Desarrollador e Ingeniero DevOps, que aplican las correcciones, y Revisor de código.",
},
"data-engineer": {
name: "Ingeniero de datos",
role: "Construye procesos fiables que mueven, limpian y guardan datos para que los analistas puedan confiar en ellos",
summary: "Construye las tuberías que llevan datos limpios y fiables hasta donde los analizas",
about:
"Construye los caminos que recorren los datos desde donde nacen hasta donde se analizan: los recoge, limpia y comprueba en cada paso y se detiene cuando algo parece mal, en vez de pasar números malos. Mantiene tus originales intactos.",
when: "Cuando tus números están en muchos sitios o no confías en tus informes.",
pairs:
"Ingeniero de bases de datos, para dónde guardar, y Analista de datos, que usa el resultado.",
},
};
3 changes: 2 additions & 1 deletion app/src/i18n/pt-BR/catalog.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type { Messages } from "../en";
import { base } from "./catalogBase";
import { engineering } from "./catalogEngineering";
import { marketing } from "./catalogMarketing";
import { product } from "./catalogProduct";

Expand Down Expand Up @@ -43,5 +44,5 @@ export const catalog: Messages["catalog"] = {
pairs: "Combina bem com",
technical: "O que o bot recebe quando começa",
},
roles: { ...base, ...product, ...marketing },
roles: { ...base, ...product, ...marketing, ...engineering },
};
Loading
Loading