Skip to content

Commit aa44d0c

Browse files
authored
Merge pull request #228 from httpsphl/feat/catalog-engineering-roles-2
feat(catalog): eight more engineering roles
2 parents 58b9277 + d4feccf commit aa44d0c

21 files changed

Lines changed: 555 additions & 9 deletions

‎app/src/features/catalog/agency.test.tsx‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ describe("the Bot agency", () => {
3333

3434
fireEvent.click(within(invite).getByRole("button", { name: "See all bots" }));
3535
const dialog = await screen.findByRole("dialog", { name: "Bot agency" });
36-
expect(await within(dialog).findAllByRole("listitem")).toHaveLength(86);
36+
expect(await within(dialog).findAllByRole("listitem")).toHaveLength(94);
3737
});
3838

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

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

131131
fireEvent.click(within(dialog).getByRole("button", { name: "Back to all bots" }));
132-
expect(within(dialog).getAllByRole("listitem")).toHaveLength(86);
132+
expect(within(dialog).getAllByRole("listitem")).toHaveLength(94);
133133
});
134134

135135
test("the same role twice gets another name", async () => {

‎app/src/i18n/en/catalog.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { base } from "./catalogBase";
22
import { contentAndLearning } from "./catalogContent";
33
import { design } from "./catalogDesign";
44
import { engineering } from "./catalogEngineering";
5+
import { engineeringMore } from "./catalogEngineeringMore";
56
import { finance } from "./catalogFinance";
67
import { marketing } from "./catalogMarketing";
78
import { paidMedia } from "./catalogPaidMedia";
@@ -65,5 +66,6 @@ export const catalog = {
6566
...finance,
6667
...paidMedia,
6768
...people,
69+
...engineeringMore,
6870
},
6971
};
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// More engineering roles (spec 26.3): what the owner reads about each. All
2+
// work on the owner's own code, with the Manual mode's approvals.
3+
4+
export const engineeringMore = {
5+
"technical-writer": {
6+
name: "Technical Writer",
7+
role: "Writes clear documentation from the real code and setup: guides, references and how-tos that match what the system does",
8+
summary:
9+
"Writes clear docs from your real code and setup: guides, how-tos and references that stay true",
10+
about:
11+
"Reads your code and runs the commands it documents on a copy, so the steps and the output are real. It writes for one reader at a time: the most common task first, numbered steps, what you should see after each one and what to do when it fails. It tells you what it tested and what it only read.",
12+
when: "When your project has no README, the docs are out of date, or someone new has to take over.",
13+
pairs: "Codebase Guide, for the big picture, and Code Reviewer, to check the technical claims.",
14+
},
15+
"sre-engineer": {
16+
name: "Reliability Engineer",
17+
role: "Makes your service dependable: defines what good looks like, sets up alerts that matter and writes the steps to follow when it breaks",
18+
summary:
19+
"Makes your service dependable: clear targets, alerts that matter and steps to follow when it breaks",
20+
about:
21+
"Turns what your users feel into a few targets in numbers, maps where the service can fail and proposes alerts that mean a person must act now, each with the first thing to check. It writes short runbooks for the usual failures and a blameless review after an incident. It never restarts or changes anything in production on its own.",
22+
when: "When your service goes down too often, or you get alerts you ignore.",
23+
pairs: "DevOps Engineer, for the infrastructure, and Backend Developer, for the fixes in code.",
24+
},
25+
"release-engineer": {
26+
name: "Release Engineer",
27+
role: "Plans and prepares releases: version numbers, change notes, checks before shipping and a way back, without publishing for you",
28+
summary:
29+
"Plans and prepares your releases, with notes, a checklist and a way back, and never ships by itself",
30+
about:
31+
"Reads what changed since the last release, groups it by what users notice and proposes the version number and the notes in plain words. It writes a checklist, the steps to ship and the steps to undo, and says which one is hard to undo. You make the tag, the upload and the announcement yourself, and it never touches your signing keys.",
32+
when: "Before every release of an app, a library or a site.",
33+
pairs: "QA Tester, to run the checklist, and DevOps Engineer, for the pipeline.",
34+
},
35+
"codebase-guide": {
36+
name: "Codebase Guide",
37+
role: "Explains an unfamiliar codebase: the big picture, where things live, how a request flows and where to start changing",
38+
summary:
39+
"Explains an unfamiliar codebase: the big picture, where things live and where to start",
40+
about:
41+
"Tailors a tour to what you need to do, traces one real path from start to end by file and function and points out the conventions, the risky areas and the tests. It says what it is sure of and what it inferred, and ends with a small first task. It only reads; it changes nothing unless you ask.",
42+
when: "When you inherit code, join a project or have to change something you did not write.",
43+
pairs: "Technical Writer, to turn the tour into docs, and Software Architect.",
44+
},
45+
"prompt-engineer": {
46+
name: "Instruction Writer for AI",
47+
role: "Writes and improves the instructions you give to AI models, then tests them on real examples before you rely on them",
48+
summary:
49+
"Writes and improves instructions for AI models and tests them on real examples before you trust them",
50+
about:
51+
"Asks for real examples, including hard ones, writes the instruction with a clear goal, rules, answer format and examples, and tests it, changing one thing at a time. You get a table of results for each version and the weak spots that remain. It warns you when the instruction will read untrusted text that could give orders.",
52+
when: "When an AI feature in your app or workflow gives answers you cannot rely on.",
53+
pairs: "Backend Developer, to wire it in, and QA Tester, to try more cases.",
54+
},
55+
"rapid-prototyper": {
56+
name: "Prototype Builder",
57+
role: "Builds a quick working version of an idea to test it with real people, in the simplest way that works, and says what is faked",
58+
summary:
59+
"Builds a quick working version of your idea to test with real people, and says what is faked",
60+
about:
61+
"Starts from the question the prototype must answer and builds only that, with made-up data and no real accounts. It writes a short test for the people who will try it and a note saying what is faked and what a real version needs, so nobody ships the prototype by accident.",
62+
when: "When you have an idea and want to know if people care before you build it properly.",
63+
pairs: "Designer, for the look, and UX Researcher, to run the test.",
64+
},
65+
"localization-engineer": {
66+
name: "Localization Engineer",
67+
role: "Prepares software for several languages and countries: moves text out of the code, handles dates, numbers and plurals, and checks the result",
68+
summary:
69+
"Prepares your software for several languages and countries and checks that nothing breaks",
70+
about:
71+
"Moves the text out of your code into translation files, with one sentence per key and placeholders instead of joined pieces. It handles plurals, dates, numbers and currencies by the user's region, checks layouts with long words and adds a test that fails when a language is missing a string. It hands the new strings to a translator.",
72+
when: "When you want your app or site in a second language, or a country with different formats.",
73+
pairs: "Translator, for the strings, and Frontend Developer, for the layout.",
74+
},
75+
"refactoring-engineer": {
76+
name: "Code Cleanup Engineer",
77+
role: "Cleans up code in small, safe steps without changing what it does, proving each step with tests",
78+
summary:
79+
"Cleans up your code in small, safe steps without changing what it does, with tests for each step",
80+
about:
81+
"Starts from a reason, makes sure tests exist before it touches anything and then changes one thing at a time, each as its own small commit. It does not mix a cleanup with a behavior change, and it never edits a test just to make a cleanup pass. It lists what it saw but left alone.",
82+
when: "When code is hard to change or understand and you want it better without breaking it.",
83+
pairs: "Code Reviewer, to check each step, and QA Tester, to try the behavior.",
84+
},
85+
};

‎app/src/i18n/es/catalog.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { base } from "./catalogBase";
33
import { contentAndLearning } from "./catalogContent";
44
import { design } from "./catalogDesign";
55
import { engineering } from "./catalogEngineering";
6+
import { engineeringMore } from "./catalogEngineeringMore";
67
import { finance } from "./catalogFinance";
78
import { marketing } from "./catalogMarketing";
89
import { paidMedia } from "./catalogPaidMedia";
@@ -62,5 +63,6 @@ export const catalog: Messages["catalog"] = {
6263
...finance,
6364
...paidMedia,
6465
...people,
66+
...engineeringMore,
6567
},
6668
};
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import type { engineeringMore as en } from "../en/catalogEngineeringMore";
2+
3+
export const engineeringMore: typeof en = {
4+
"technical-writer": {
5+
name: "Redactor técnico",
6+
role: "Escribe documentación clara a partir del código y la configuración reales: guías, referencias y pasos que coinciden con lo que hace el sistema",
7+
summary:
8+
"Escribe documentación clara a partir de tu código y tu configuración reales, que sigue siendo verdadera",
9+
about:
10+
"Lee tu código y ejecuta en una copia los comandos que documenta, para que los pasos y la salida sean reales. Escribe para un lector cada vez: la tarea más común primero, pasos numerados, lo que deberías ver tras cada uno y qué hacer cuando falla. Dice lo que probó y lo que solo leyó.",
11+
when: "Cuando tu proyecto no tiene README, la documentación está vieja o alguien nuevo va a hacerse cargo.",
12+
pairs:
13+
"Guía del código, para el panorama general, y Revisor de código, para comprobar las afirmaciones técnicas.",
14+
},
15+
"sre-engineer": {
16+
name: "Ingeniero de fiabilidad",
17+
role: "Hace tu servicio fiable: define qué es bueno en números, monta alertas que importan y escribe los pasos para cuando falle",
18+
summary:
19+
"Hace tu servicio fiable: metas claras, alertas que importan y pasos para cuando falle",
20+
about:
21+
"Convierte lo que sienten tus usuarios en pocas metas en números, mapea dónde puede fallar el servicio y propone alertas que significan que alguien debe actuar ya, cada una con lo primero que revisar. Escribe guías cortas para los fallos comunes y una revisión sin culpables tras un incidente. Nunca reinicia ni cambia nada en producción por su cuenta.",
22+
when: "Cuando tu servicio se cae demasiado, o recibes alertas que ignoras.",
23+
pairs:
24+
"Ingeniero DevOps, para la infraestructura, y Desarrollador back-end, para las correcciones en el código.",
25+
},
26+
"release-engineer": {
27+
name: "Ingeniero de lanzamientos",
28+
role: "Planifica y prepara lanzamientos: números de versión, notas de cambios, comprobaciones antes de publicar y un camino de vuelta, sin publicar por ti",
29+
summary:
30+
"Planifica y prepara tus lanzamientos, con notas, lista de comprobación y camino de vuelta, y nunca publica solo",
31+
about:
32+
"Lee lo que cambió desde el último lanzamiento, lo agrupa por lo que notan los usuarios y propone el número de versión y las notas en palabras sencillas. Escribe una lista de comprobación, los pasos para publicar y los pasos para deshacer, y dice cuál es difícil de deshacer. La etiqueta, la subida y el anuncio los haces tú, y nunca toca tus claves de firma.",
33+
when: "Antes de cada lanzamiento de una app, una biblioteca o un sitio.",
34+
pairs: "Tester, para ejecutar la lista, e Ingeniero DevOps, para la cadena de publicación.",
35+
},
36+
"codebase-guide": {
37+
name: "Guía del código",
38+
role: "Explica un código desconocido: el panorama general, dónde está cada cosa, cómo recorre una petición el sistema y por dónde empezar a cambiar",
39+
summary:
40+
"Explica un código desconocido: el panorama general, dónde está cada cosa y por dónde empezar",
41+
about:
42+
"Adapta la visita a lo que necesitas hacer, sigue un camino real de principio a fin por archivo y función y señala las convenciones, las zonas de riesgo y las pruebas. Dice de qué está seguro y qué dedujo, y termina con una primera tarea pequeña. Solo lee; no cambia nada si no se lo pides.",
43+
when: "Cuando heredas código, entras en un proyecto o tienes que cambiar algo que no escribiste.",
44+
pairs: "Redactor técnico, para convertirlo en documentación, y Arquitecto de software.",
45+
},
46+
"prompt-engineer": {
47+
name: "Redactor de instrucciones para IA",
48+
role: "Escribe y mejora las instrucciones que das a modelos de IA y las prueba con ejemplos reales antes de que confíes en ellas",
49+
summary:
50+
"Escribe y mejora instrucciones para modelos de IA y las prueba con ejemplos reales antes de que confíes",
51+
about:
52+
"Pide ejemplos reales, también difíciles, escribe la instrucción con un objetivo claro, reglas, formato de la respuesta y ejemplos, y la prueba cambiando una cosa a la vez. Recibes una tabla de resultados de cada versión y los puntos débiles que quedan. Avisa cuando la instrucción va a leer un texto externo que podría dar órdenes.",
53+
when: "Cuando una función de IA en tu app o flujo da respuestas en las que no puedes confiar.",
54+
pairs: "Desarrollador back-end, para conectarlo, y Tester, para probar más casos.",
55+
},
56+
"rapid-prototyper": {
57+
name: "Creador de prototipos",
58+
role: "Monta rápido una versión que funciona de una idea para probarla con personas reales, de la forma más simple, y dice qué es de mentira",
59+
summary:
60+
"Monta rápido una versión de tu idea para probarla con personas reales y dice qué es de mentira",
61+
about:
62+
"Parte de la pregunta que el prototipo debe responder y construye solo eso, con datos inventados y sin cuentas reales. Escribe una prueba corta para quienes lo van a probar y una nota que dice qué es de mentira y qué necesita una versión real, para que nadie publique el prototipo por error.",
63+
when: "Cuando tienes una idea y quieres saber si a la gente le importa antes de construirla bien.",
64+
pairs: "Diseñador, para el aspecto, e Investigador de usuarios, para dirigir la prueba.",
65+
},
66+
"localization-engineer": {
67+
name: "Ingeniero de localización",
68+
role: "Prepara el software para varios idiomas y países: saca el texto del código, trata fechas, números y plurales y comprueba el resultado",
69+
summary: "Prepara tu software para varios idiomas y países y comprueba que nada se rompe",
70+
about:
71+
"Saca el texto de tu código a archivos de traducción, con una frase por clave y marcadores en lugar de trozos pegados. Trata plurales, fechas, números y monedas según la región del usuario, comprueba el diseño con palabras largas y crea una prueba que falla cuando falta un texto en un idioma. Entrega los textos nuevos a un traductor.",
72+
when: "Cuando quieres tu app o sitio en un segundo idioma, o en un país con formatos distintos.",
73+
pairs: "Traductor, para los textos, y Desarrollador front-end, para el diseño.",
74+
},
75+
"refactoring-engineer": {
76+
name: "Ingeniero de limpieza de código",
77+
role: "Ordena el código en pasos pequeños y seguros, sin cambiar lo que hace, demostrando cada paso con pruebas",
78+
summary:
79+
"Ordena tu código en pasos pequeños y seguros, sin cambiar lo que hace, con pruebas en cada paso",
80+
about:
81+
"Parte de un motivo, se asegura de que existan pruebas antes de tocar nada y cambia una cosa a la vez, cada una en un commit pequeño. No mezcla una limpieza con un cambio de comportamiento y nunca modifica una prueba solo para que la limpieza pase. Lista lo que vio y dejó quieto.",
82+
when: "Cuando el código es difícil de cambiar o de entender y quieres mejorarlo sin romperlo.",
83+
pairs: "Revisor de código, para comprobar cada paso, y Tester, para probar el comportamiento.",
84+
},
85+
};

‎app/src/i18n/pt-BR/catalog.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { base } from "./catalogBase";
33
import { contentAndLearning } from "./catalogContent";
44
import { design } from "./catalogDesign";
55
import { engineering } from "./catalogEngineering";
6+
import { engineeringMore } from "./catalogEngineeringMore";
67
import { finance } from "./catalogFinance";
78
import { marketing } from "./catalogMarketing";
89
import { paidMedia } from "./catalogPaidMedia";
@@ -62,5 +63,6 @@ export const catalog: Messages["catalog"] = {
6263
...finance,
6364
...paidMedia,
6465
...people,
66+
...engineeringMore,
6567
},
6668
};

0 commit comments

Comments
 (0)