Preguntarle a otro proyecto cómo resolvió X

Levanta un ask bloqueante al Chair de otro proyecto, recibe una referencia a un símbolo y trae el cuerpo — sin código pegado.

Prompt#

Pregúntale al proyecto checkout cómo resolvió los reintentos idempotentes antes de que yo escriba los nuestros.

Qué hace el Chair#

Enruta un ask bloqueante al Chair corriendo del proyecto nombrado; ese Chair responde con un puntero al símbolo, y tu asiento trae el cuerpo por su cuenta.

Llamadas MCP#

ask({
  "question":   "How does checkout make provider retries idempotent?",
  "context":    "we need the same guarantee in billing; found no shared symbol for it",
  "to_project": "checkout",
  "timeout_sec": 600
})

El Chair del otro proyecto responde con una referencia, no con un pegado:

ask_answer({
  "id": 41,
  "answer": "One idempotency key per attempt, stored before the call. See the symbol.",
  "by": "checkout-chair",
  "symbol_ref": { "project": "checkout",
                  "path": "internal/pay/retry.go", "line": 88, "symbol": "RetryIdempotent" }
})

Y entonces lees exactamente ese cuerpo:

code_snippet({ "symbol": "RetryIdempotent", "project": "checkout", "max_lines": 120 })

¿No hay Chair corriendo allá? El registro igual responde:

search_shared_symbols({ "query": "idempotent retry", "project": "checkout", "limit": 10 })
inspect_symbol({ "name": "RetryIdempotent" })

Respuesta esperada#

ask bloquea y devuelve el JSON del ask con answer lleno. code_snippet devuelve {symbol, start_line, end_line, body, file_bytes}. search_shared_symbols devuelve un arreglo JSON — [] cuando no hay coincidencias — y cada hit trae el proyecto registrado bajo el que resuelve.

Trampas#

  • to_project exige ese proyecto registrado y su Chair corriendo. Si no: project "checkout" not registered (orch project list), o no running chair for project "checkout".
  • code_snippet entre proyectos es solo alcance shared. Un símbolo de otro proyecto responde únicamente si lleva un comentario orch:export <Name> — <purpose>. El código sin etiquetar de allá te es invisible por diseño; dentro de tu propio proyecto sí ves los símbolos locales.
  • search_shared_symbols e inspect_symbol responden solo shared. Las herramientas de grafo (trace_path, impact, architecture) además leen las definiciones locales.
  • Un timeout no es silencio. El ask queda marcado timeout, la herramienta devuelve un error nombrando la pregunta, y una respuesta tardía se rechaza. Ahí decides tú, y lo dices en verify_report.
  • options[], si lo pasas, es el conjunto completo de respuestas aceptadas (sin distinguir mayúsculas). Cualquier cosa fuera de ahí se rechaza, no se registra.
  • Responde con symbol_ref, no con código pegado. El puntero no lleva contenido, sobrevive a las ediciones y deja el código del otro proyecto en su propia máquina.