¿Qué es un topic?
Un topic es la unidad atómica de contexto en Driftless. Conecta una porción de tu sistema con el conocimiento compartido del equipo sobre ella. La porción puede ser TypeScript, Python, Rust, Go, docs, config, infraestructura, o un flujo de trabajo que abarca varios repos. Un topic tiene:| Field | Description |
|---|---|
| slug | id único en kebab-case dentro del workspace (ej.: auth-flow, billing-webhook) |
| title | Nombre corto para mostrar a humanos: un sustantivo como el nodo de un diagrama (Auth, Billing). Manténlo en una o dos palabras; la explicación va en what/content, nunca en el title |
| what | Resumen corto de lo que hace este código |
| how | Nota corta (1-3 oraciones) sobre el mecanismo o el enfoque. La explicación extensa va en content, no aquí |
| decisions | Por qué se tomaron las decisiones (decisiones de arquitectura) |
| gotchas | Trampas, casos límite, cosas que se van a romper |
| invariants | Reglas que siempre deben cumplirse |
| required_checks | Checks a correr antes de cambiar este código |
| ownership | Equipo o individuo responsable |
| content | Cuerpo libre completo (Markdown). Puede incluir diagramas, snippets de código, referencias |
| anchors | Patrones, archivos y repos que ligan este topic al código |
| tags | Categorías del workspace para descubrimiento y filtrado (ej.: auth, billing): filtra con context list/search --tag <name>, el parámetro tags de MCP, o los chips del dashboard. Precréalas y cúralas en el registro (driftless tags) |
| relations | Links tipados a otros topics |
| classification | Estado (reviewed, draft) |
content ES el topic. Los campos estructurados (gotcha / decision / invariant / check) son highlights opcionales que se ponen encima. Agrega uno solo cuando quieras que esa cosa específica se le muestre a la máquina (el bot de PR, el brief de un futuro agente). Usa tags para etiquetar y agrupar topics.
Crea tu primer topic
Empieza con el topic útil más pequeño: una nota durable que explique un área lo suficientemente bien para que un humano o agente futuro pueda trabajar ahí.Anclar topics al código
Los topics se conectan al código mediante patrones glob y rutas de archivo. Esto es agnóstico del lenguaje: Driftless matchea rutas, no ASTs. Cuando el código anclado cambia, el topic entra en drift.✓ pattern "src/auth/**" matches 12 files: anchor sano⚠ over-broad anchor: el patrón matchea más de 100 archivos; considera dividirlo✗ pattern "src/nonexistent/**" matches 0 files: bloqueado; arregla el glob
Clasificación de topics
Un topic es content-first: el cuerpo markdowncontent ES el topic. Usa tags para etiquetar y agrupar topics. El único eje de confianza es status.
Status: ciclo de vida de gobernanza
Una nota se vuelve Knowledge una vez que se fusiona:draft → proposed → reviewed → archived. reviewed es Knowledge; la respuesta de lectura lleva governance.authoritative. Los agentes proponen; fusionar es un acto de owner/admin (un agente lo corre solo cuando se le pide explícitamente). Ver Gobernanza.
| Status | Meaning |
|---|---|
draft | Capturado, todavía sin fusionar: una pista (una Nota), no verdad |
proposed | En revisión |
reviewed | Knowledge: un owner/admin lo fusionó (o un agente lo hizo a pedido suyo); el agente lo trata como verdad |
archived | Retirado |
orphaned | Impulsado por código (repo borrado), ortogonal a la gobernanza |
Visibilidad
Un topic vive en el workspace y es visible para todos sus miembros. La excepción es una Nota privada (un draft conis_private puesto), visible solo para su creador hasta que se ponga en revisión o se le quite la marca. ¿Necesitas aislamiento entre grupos? Usa un workspace aparte.
Relaciones tipadas
Los topics se conectan entre sí mediante relaciones tipadas, construyendo un grafo semántico:| Relation | Meaning |
|---|---|
depends_on | El topic A depende de B |
relates_to | Asociación general |
supersedes | El topic B reemplaza a A |
blocks | A no puede avanzar hasta que B esté hecho |
implements | A es la implementación del patrón descrito en B |
documents | A documenta o explica B |
risk_for | A introduce un riesgo para B |
Wiki-links
Usa la sintaxis[[slug]] dentro de cualquier campo de texto libre (what, how, decisions, gotchas, invariants, content). La API las parsea automáticamente en referencias hacia adelante y hacia atrás.
billing-webhook como stripe-webhook-ingest se mostrarán mutuamente en sus referencias cuando se consulten.
Contexto entre repos
Un topic puede abarcar varios repositorios. Cuando corresdriftless context update <slug> desde cualquier repo, ese repo se agrega a la lista where_repos del topic. Los topics acumulan repos de forma orgánica sin cableado manual.
Usa un solo topic entre repos cuando el mismo concepto realmente abarca varios repos, por ejemplo billing-contracts a través de un repo de API, un repo de worker y un repo de frontend. Usa topics separados más relaciones cuando cada repo tiene sus propios detalles de implementación, por ejemplo billing-api depends_on:billing-worker.
Para ligar explícitamente el repo actual a un topic:
