Empezar a contribuir

Qué instalar, cómo está organizado el repositorio, los comandos del día a día y las reglas de cambio.

ImplementadoSin versión del tren todavía

Implementado. Esta página describe el flujo de trabajo del repositorio. Las reglas de cada zona viven en los CLAUDE.md anidados y en .claude/rules/; esta página es el mapa de entrada.

Qué instalar

La toolchain (Bun exacto de .bun-version, Zig 0.17.0 de native/zig/build.zig.zon, Docker con Compose v2, el submódulo docs/references/quic-zig) la prepara y la comprueba scripts/dev/bootstrap.sh: ver Puesta en marcha de un nodo. El recorrido entero, de desarrollar a publicar, está en Ciclo de vida.

Mapa del repositorio

DirectorioQué hay
apps/Servicios Elysia @styx/*-svc, la web, y el contenido de la documentación (apps/docs)
packages/Núcleo compartido @styx/*, plugins propios y componentes de interfaz
native/Data plane en Zig (media-core, media-daemon, transmux, libav-bridge)
protocols/Protocolos binarios entre Bun y Zig
spikes/Experimentos desechables: los hallazgos pasan a ADR, fixtures o contratos y el código se elimina
integrations/Adaptadores de sistemas externos
tools/Herramientas permanentes promovidas de experimentos (harness de gates, soak)
scripts/Guardas y generadores
docs/Gobernanza interna: ADR, tickets, planes, evidencia, revisiones. Su primer nivel está cerrado
deploy/, docker/Compose y Dockerfiles por servicio (los Dockerfiles no están en deploy/)

apps/docs/ (el sitio de documentación) y docs/ (la gobernanza) son cosas distintas: el sitio se genera de la gobernanza y del código, nunca al revés.

Comandos del día a día

ComandoQué hace
bun install --frozen-lockfileDependencias del workspace, sin tocar bun.lock
bun run typecheckComprueba tipos de cada proyecto de references por separado (un tsgo sin más no recorre las referencias)
bun run lintoxlint
bun run testVitest de la raíz. No recoge apps/cli (bun run --cwd apps/cli test, con el runner de Bun) ni la integración de apps/identity-svc
bun run format:checkPrettier
bun run buildEl build de cada workspace: Rolldown + .d.ts en paquetes, bundle AOT en servicios, Vite en web y docs, binario compilado en apps/cli
bun run check:roadmapLas guardas de gobernanza (ver guardas)
bun run check:contextLa jerarquía de contexto coincide con el árbol real
zig build y zig build testDesde native/zig/: el daemon y sus tests. El build de la raíz no cubre Zig
bun run test:zig:tsanCarril de TSAN del data plane
bun run docs:gen / docs:checkGenera o comprueba la referencia generada de la documentación
bun run release:planQué versión saldría para cada componente y por qué (ver Ciclo de vida)
bun run dev / dev:ts / dev:zigdev lanza el script dev de todos los workspaces; dev:ts y dev:zig abren una sesión de mks-dev-session, que no es dependencia del repo y hay que tenerlo instalado aparte

Un servicio no arranca suelto con su bun run dev sin su configuración: la base de datos (DATABASE_URL), la identidad del bus (SPIRE_SEED, SPIRE_KEYRING, SPIRE_NATS_NKEY_SEED), el proveedor OIDC en identity-svc o el socket del daemon, según el servicio. La lista está en la cabecera de su src/bootstrap.ts. Cómo levantar la pila entera en local está en Puesta en marcha de un nodo.

Reglas de cambio

  • Quirúrgico. Toca sólo lo que el cambio pide: ni refactor adyacente ni mejoras cosméticas ni borrar código muerto sin acuerdo. Si nadie llama a un símbolo, se borra en lugar de marcarlo como obsoleto.
  • Cada capa termina en un consumidor real. No se crean esqueletos ni capas vacías.
  • No se contradice un ADR bloqueado sin una decisión explícita del propietario del proyecto.
  • Commits pequeños, en español, con el nodo del roadmap entre corchetes (por ejemplo [#track/docs]), sin coautoría ni atribución de herramientas, uno por paso verde. La preparación (staging) es explícita por ruta.
  • Nada de estado en los CLAUDE.md: ni el estado de un gate, ni la cola de tickets, ni hashes de commits. Eso se lee de sus fuentes (styx.model.yml, los tickets, el registro de progreso).
  • bun.lock sólo lo regenera el Bun de .bun-version (lockfile v2); CI y las imágenes instalan con --frozen-lockfile.
  • Sin licencias GPL en dependencias.
  • El nombre del producto es Styx; el nombre «Wraith Media» sólo aparece en documentos históricos que no se editan.

Antes de tocar una zona, lee su CLAUDE.md (apps/, apps/web/, packages/, packages/plugins/, native/, native/zig/, protocols/, docs/) y las reglas de .claude/rules/ que cargan por ruta.