Ask another project how it solved X

Raise a blocking ask against another project's Chair, get a symbol reference back, and fetch the body — no pasted code.

Prompt#

Ask project checkout how it solved idempotent retries before I write ours.

What the Chair does#

Routes a blocking ask to the running Chair of the named project; that Chair answers with a pointer to the symbol, and your seat fetches the body itself.

MCP calls#

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
})

The other project's Chair answers with a reference, not a paste:

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" }
})

Then you read exactly that body:

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

No Chair running over there? The registry still answers:

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

Expected response#

ask blocks and returns the ask JSON with answer filled in. code_snippet returns {symbol, start_line, end_line, body, file_bytes}. search_shared_symbols returns a JSON array — [] when nothing matches — and every hit carries the registered project it resolves under.

Gotchas#

  • to_project needs that project registered and its Chair running. Otherwise: project "checkout" not registered (orch project list), or no running chair for project "checkout".
  • Cross-project code_snippet is shared scope only. A symbol in another project answers only if it carries an orch:export <Name> — <purpose> comment. Untagged code over there is invisible to you by design; inside your own project you see local symbols too.
  • search_shared_symbols and inspect_symbol answer shared only. The graph tools (trace_path, impact, architecture) read local definitions as well.
  • A timeout is not silence. The ask is marked timeout, the tool returns an error naming the question, and a late answer is refused. Decide for yourself then, and say so in verify_report.
  • options[], when you pass it, is the whole accepted answer set (case-insensitive). Anything outside it is refused, not recorded.
  • Answer with symbol_ref, not pasted code. The pointer is content-free, survives edits, and keeps the other project's source on its own machine.