Bound context: a generalized key→value bag the proxy injects into forwarded requests. A permanent base (static ⊕ env, built at startup with env winning) is overlaid by an optional pushed binding with a TTL; pushed keys win while live and the overlay reverts on expiry. Single active binding.
This is its own leaf crate (rather than living in synapse-proxy) so that
synapse-mcp can depend on it directly: synapse-mcp already needs
synapse-proxy's ContextStore verbatim (no forking) for its own
identity-injection contract, and synapse-proxy's binary needs to depend
on synapse-mcp to wire the MCP gateway listener — putting ContextStore
in synapse-proxy itself would make that a cyclic package dependency,
which Cargo rejects outright. synapse_proxy::context re-exports these
same types so existing import paths are unaffected.