¿Qué hace drydock?
Coloca la quilla del astillero: un repositorio, un arnés compartido, cada colaborador lo hereda. Esta skill estructura el entorno que convierte "todos publican" en "todos publican con el mismo lenguaje de diseño" — crea las 5 superficies, las siembra mínimamente, las conecta con los flujos que las llenan (lanzamiento escribe CONTEXT/ADR; el paso de sedimentación C5 del lanzamiento y las revisiones sedimentan estándares), e informa qué existe, qué se creó y qué se deja vacío intencionalmente.
Los cuatro pilares y dónde viven físicamente:
| Pilar | Superficies |
|---|---|
| Contexto (antecedentes compartidos) | CONTEXT.md (glosario) + docs/business/ + docs/adr/ + wiki OMC |
| Reglas (límites) | CLAUDE.md (entrada delgada: convenciones, principios, índice) + docs/standards/ |
| Herramientas (capacidad componible) | .omc/skills/ + .mcp.json + scripts/ |
| Estándares (la sociedad de clasificación) | design-system/ (tokens, componentes, patrones) + docs/standards/ |
Mapa de metáforas: el astillero es la instalación compartida; la sociedad de clasificación (docs/standards/ + design-system/) establece las reglas que un barco debe cumplir para ser navegable; drydock coloca la quilla; lanzamiento lo envía.
Cuándo Usar
- comenzando un repositorio en el que humanos y agentes construirán
- un repositorio donde el conocimiento vive en cabezas y en el historial de chat en lugar de archivos
- incorporación: un nuevo miembro del equipo o agente debería heredar contexto leyendo, no preguntando
Cuándo No Usar
- prototipos desechables sin colaboradores
- un repositorio que ya ejecuta este arnés (usar
--checken su lugar)
Flujo de Trabajo
1. Detectar (nunca sobrescribir)
Inventariar qué existe antes de escribir cualquier cosa:
- ¿
CLAUDE.mdpresente? ¿AGENTS.mdpresente? (regla: si alguno existe, extenderlo en su lugar; crear el faltante como un puntero de una línea al otro; nunca crear ambos desde cero) CONTEXT.md,docs/adr/,docs/standards/,docs/business/,design-system/,.omc/skills/,.mcp.json,scripts/,.gitattributes— ¿cuáles existen, cuáles faltan?- ¿OMC instalado? — solo vale la pena comprobarlo al ejecutar dentro de una sesión OMC; fuera de ella, omitir esta comprobación silenciosamente (el arnés funciona con o sin OMC)
Informar primero el mapa, luego actuar.
2. Resolver el idioma del documento, luego preguntar solo lo que la detección no puede responder
El idioma del documento para los archivos del arnés generado es una decisión respaldada por archivos, no un estado de conversación. Usar este contrato exactamente:
{
"schemaVersion": 1,
"authority": { "path": "CONTEXT.md", "frontmatterKey": "documentLanguage" },
"canonicalSources": ["CLAUDE.md", "README.md"],
"askOn": ["missing", "mixed", "conflict", "low-confidence", "invalid-explicit", "script-ambiguous"],
"tagPattern": "^[a-z]{2,3}(?:-[A-Z][a-z]{3})?(?:-(?:[A-Z]{2}|[0-9]{3}))?$",
"scriptVariants": ["zh-Hans", "zh-Hant"],
"seedCompanionPrefixes": { "en": "en", "zh-Hans": "zh-Hans", "zh-Hant": "zh-Hant" },
"stableTokens": [
"CONTEXT.md", "documentLanguage", "/oh-my-claudecode:launch", "--serial",
"plan", "execute", "review", "verify", "blockedBy", "blocked_by",
"pending", "in_progress", "completed", "failed", "ready-for-agent",
"id", "name", "description", "triggers", "mcpServers", "```",
"<Project>", "<term>", "<feature-slug>"
]
}
Orden de resolución:
- Una elección humana explícita en la invocación actual prevalece cuando es válida. Normalizarla a una etiqueta BCP-47 estable: minúsculas para el idioma, Title-Case para el script, mayúsculas para la región. Una entrada explícita no válida debe ser preguntada una vez en lugar de adivinada.
- De lo contrario, leer
documentLanguagedel frontmatter YAML al inicio deCONTEXT.md. Una etiqueta válida y sin ambigüedad de script es autoritativa para invocaciones nuevas de Drydock y Launch. Si la etiqueta persistida es china simple o solo región, preguntar una vez en este nivel de autoridad; nunca omitirlo con inferencia de fuentes. - Si el marcador está ausente o no es válido, inspeccionar las fuentes canónicas en este orden:
CLAUDE.md, luegoREADME.md. Inferir solo cuando cada fuente utilizable tenga un idioma dominante inequívoco y todas las fuentes utilizables coincidan en la misma etiqueta normalizada. Una fuente inequívoca es suficiente cuando la otra falta o está vacía. - El chino debe resolverse a una etiqueta explícita con script:
zh-Hansozh-Hant(opcionalmente seguido de una región).zhsimple y etiquetas chinas solo con región son ambiguas en el script y deben ser preguntadas una vez en lugar de seleccionar un acompañante. La selección del acompañante usa el prefijo de idioma/script más largo:zh-Hans-*selecciona el acompañantezh-Hansyzh-Hant-*seleccionazh-Hant; preservar la etiqueta normalizada completa (por ejemplozh-Hans-CN) enCONTEXT.md. - Fuentes utilizables faltantes, contenido mixto de idiomas, etiquetas en conflicto, inferencia de baja confianza, entrada explícita no válida o chino ambiguo en script deben desencadenar una pregunta de idioma agrupada. No adivinar. Si no hay respuesta disponible, detenerse antes de escribir artefactos localizados.
- Antes del andamiaje, escribir la etiqueta resuelta en la clave de frontmatter estable
documentLanguageenCONTEXT.md(creando o extendiendo su frontmatter sin traducir la clave). Este archivo visible es la autoridad de idioma del informe de inicio; no se crea ningún daemon, libro mayor oculto o estado de ejecución.
Solo la prosa, las etiquetas orientadas a humanos y los valores localizables siguen el idioma seleccionado; las claves estructurales permanecen estables en el idioma. Las rutas, comandos de barra, banderas, bloques de código, marcadores de posición, claves de frontmatter y valores semánticos de máquina, claves YAML/JSON, tokens de ciclo de vida, enumeraciones de estado, IDs, blockedBy, blocked_by del equipo público, y tokens de analizador/control se mantienen estables byte a byte.
Preguntar las preguntas restantes solo después de que el idioma esté resuelto:
- pila de paquetes/tecnología (para estándares y semillas del sistema de diseño)
- ¿este repositorio tiene una UI? (sin UI →
design-system/se crea como un stub con una nota, o se omite si se solicita) - ubicación del rastreador de problemas (GitHub / GitLab /
.scratch/local) — para la admisión V1 del puerto solo se admite GitHub; también registrar la autoridad de comunicación del mantenedor para la admisión (comentarios de problemas, cambios de etiqueta) — consumido por el mapa de inicio del navegador y la cola de admisión del puerto
3. Andamiar (crear superficies faltantes — las semillas se renderizan en el idioma del documento)
CLAUDE.md # entrada delgada — ver semilla A
CONTEXT.md # glosario — ver semilla B
.gitattributes # * text=auto eol=lf (elimina el ruido de advertencia CRLF en Windows)
docs/adr/0001-adopt-shipyard-harness.md
docs/standards/architecture.md # semilla C
docs/standards/data.md
docs/standards/process.md
docs/business/README.md # semilla D
design-system/README.md # semilla E (solo repositorios con UI; stub en caso contrario)
design-system/tokens/README.md
.omc/skills/README.md # semilla F
.mcp.json # {"mcpServers": {}}
scripts/README.md
Los ejemplares de semilla son acompañantes de referencia, nunca una carga útil combinada. Seleccionar exactamente un acompañante después de resolver documentLanguage; no emitir encabezados o etiquetas duplicados de otro acompañante. Usar el prefijo de idioma/script coincidente más largo: en-* usa inglés, zh-Hans-* usa chino simplificado, y zh-Hant-* usa chino tradicional, mientras que la Semilla B escribe la etiqueta completa resuelta en documentLanguage. Para cualquier otra etiqueta válida, traducir el acompañante canónico en inglés una vez, preservando cada token estable anterior.
Antes de generar prosa de semilla, llamar a la herramienta Skill con agent-doc-discipline y aplicar sus reglas; la prosa de semilla está lista solo cuando cada regla es comprobable y lleva un "por qué", cada superficie se autodescribe sin historial de chat, y las fuentes se nombran en lugar de asumirse. Un compañero de equipo o agente debería poder actuar sobre el contenido de la semilla con solo leerlo.
Semilla A — CLAUDE.md, en (entrada delgada; extender en su lugar si el archivo existe):
# <Project> — Agent & Human Shipyard
## Project conventions
- <language/framework/package manager/naming — list what matters, skip the rest>
## Architecture principles
- <the 3-5 principles most often violated in this project>
## Standards index (full text in docs/standards/)
- Architecture: docs/standards/architecture.md
- Data: docs/standards/data.md
- Process: docs/standards/process.md
## Decision records (full text in docs/adr/; load-bearing ones listed here)
- ADR-0001: adopt shipyard harness
## Shared background
- Glossary: CONTEXT.md | Business knowledge: docs/business/ | Decision context: docs/adr/
## Agent guide
- Delivery follows the canonical workflow plan → execute → review → verify; `/oh-my-claudecode:launch` is an optional governed delivery pipeline (opt-in, invoke explicitly)
- On term conflicts CONTEXT.md wins; new terms are recorded the moment they settle
- Reusable capability goes to .omc/skills/; UI patterns go to design-system/
Semilla A — compañero zh-Hans (estructura idéntica, elegir uno según el idioma del documento):
# <Project> — Agent & Human Shipyard
## 项目约定
- <language/framework/package manager/naming — list what matters, skip the rest>
## 架构原则
- <the 3-5 principles most often violated in this project>
## 规范索引(全文在 docs/standards/)
- 架构规范: docs/standards/architecture.md
- 数据规范: docs/standards/data.md
- 流程规范: docs/standards/process.md
## 决策记录(全文在 docs/adr/,此处只列 load-bearing 的)
- ADR-0001: adopt shipyard harness
## 共享背景
- 术语: CONTEXT.md | 业务知识: docs/business/ | 决策背景: docs/adr/
## Agent 指南
- 交付遵循 canonical 工作流 plan → execute → review → verify;`/oh-my-claudecode:launch` 是可选的受治理交付管道(opt-in,需要时显式调用)
- 术语冲突以 CONTEXT.md 为准;新术语当场补录
- 可复用能力沉淀到 .omc/skills/;UI 模式沉淀到 design-system/
Semilla A — compañero zh-Hant (estructura idéntica, renderizar solo esta versión):
# <Project> — Agent & Human Shipyard
## 專案約定
- <language/framework/package manager/naming — list what matters, skip the rest>
## 架構原則
- <the 3-5 principles most often violated in this project>
## 規範索引(全文在 docs/standards/)
- 架構規範: docs/standards/architecture.md
- 資料規範: docs/standards/data.md
- 流程規範: docs/standards/process.md
## 決策記錄(全文在 docs/adr/,此處只列 load-bearing 項目)
- ADR-0001: adopt shipyard harness
## 共享背景
- 詞彙: CONTEXT.md | 業務知識: docs/business/ | 決策背景: docs/adr/
## Agent 指南
- 交付遵循 canonical 工作流 plan → execute → review → verify;`/oh-my-claudecode:launch` 是可選的治理交付管道(opt-in,必須明確呼叫)
- 術語衝突以 CONTEXT.md 為準;新術語確定時立即補錄
- 可重用能力沉澱到 .omc/skills/;UI 模式沉澱到 design-system/
Semilla B — CONTEXT.md (la clave de frontmatter estable es la autoridad del idioma):
en:
---
documentLanguage: en
---
# Glossary
One entry per term: definition, boundaries, one resolved ambiguity. Agents write here the moment a term is settled. Vocabulary here is law for all specs, tickets, and code naming.
## <term>
- Definition:
- Boundary: (is X, not Y)
- Resolved ambiguity:
zh-Hans:
---
documentLanguage: zh-Hans
---
# 术语表
一条术语一个条目:定义、边界、一个已解决的歧义。术语敲定的当下写入。词汇对所有 spec、ticket、代码命名具有法律效力。
## <term>
- 定义:
- 边界: (是 X,不是 Y)
- 已解决的歧义:
zh-Hant:
---
documentLanguage: zh-Hant
---
# 詞彙表
每個術語一個條目:定義、邊界、一個已解決的歧義。術語確定時立即寫入。這裡的詞彙是所有 spec、ticket 與程式碼命名的準則。
## <term>
- 定義:
- 邊界: (是 X,不是 Y)
- 已解決的歧義:
Semilla C — docs/standards/architecture.md (data.md / process.md misma forma; la prosa se renderiza en el idioma del documento):
# Architecture Standards
Rule-shaped, checkable writing; every rule carries a "why". Empty sections are legal — sediment is gradual.
## Module boundaries
## Error handling
## Dependency direction
Semilla D — docs/business/README.md:
# Business Knowledge
Decision background and business rules. Format suggestion: one article answers one business question, opening paragraph states why it matters.
A new teammate (human or agent) reading this directory should be able to answer "why does this product direction exist".
Semilla E — design-system/README.md:
# Design System
## tokens/ Design tokens (colors/type/spacing, machine-readable JSON preferred)
## components/ Component contracts (purpose, variants, misuse)
## patterns/ Interaction patterns (forms, feedback, loading, empty states — sediment reused patterns)
Semilla F — .omc/skills/README.md:
# Project Skills
Reusable capabilities sedimented by this project: specialized tools, prompt templates, specialized practices.
One skill per file `.omc/skills/<name>.md`, frontmatter must contain a stable ASCII `id` plus name + description +
**non-empty triggers** (loader validation hard requirement: missing or empty means the skill is never loaded):
```markdown
---
id: project-release-check
name: project-release-check
description: Apply this repository's release readiness rules
triggers:
- "project release check"
---
# Project Release Check
Follow the repository-specific release checklist and report evidence.
```
The literal YAML keys `id`, `name`, `description`, and `triggers` never localize. `id` and other machine-semantic values stay ASCII and stable; the scalar display values for `name`, `description`, and `triggers`, plus Markdown headings and prose, may localize. A non-Latin display name remains loadable because the explicit ASCII `id` is stable.
Bar for admission matches skillify: if it can be Googled in 5 minutes it is not a skill;
write "this project's specific decision discipline", not generic tutorials.
Semilla .mcp.json: {"mcpServers": {}} — los servidores se agregan cuando una integración de herramienta es realmente necesaria, no de forma especulativa.
4. Conectar el bucle de gobernanza (esto es lo que lo convierte en un astillero, no en una carpeta)
Decir al usuario, y confiar en estos flujos para llenar el esqueleto:
- lanzamiento escribe vocabulario CONTEXT.md, ADR y
docs/business/a medida que las decisiones se asientan (rastro documental) - lanzamiento C5 sedimento / code-review sedimenta...
…[truncado para traducción]