openpencil/crates
Kayshen-X 7c4f38cd4e fix(mcp): authenticate the live endpoint and degrade the bootstrap cache
The live MCP endpoint on 127.0.0.1 was a bypass of the collaboration
admission model. Its per-instance token authenticated only the ping probe
and shutdown, so document reads and writes were available to any local
process, and nothing validated Origin or Host — a page in a browser on the
same machine could reach it by DNS rebinding. During a session that is the
shared document, not just this user's file.

Every stateful call now requires the instance token, compared without an
early exit. Host must be a numeric loopback literal on the bound port, and
an Origin, when present, must match it; a request with no Origin still
works, which is what real CLI clients send. OPTIONS, initialize, and ping
stay tokenless so CLI discovery keeps working, and CollabGatePolicy is
untouched — this sits in front of it.

The `op` CLI did not send the token, so authenticating tool calls would
have returned 401 for every `op` invocation against a live editor. The
token was already in the port file next to the port; it is now resolved
with the port and travels as a header. Ping and shutdown keep their
existing tokenless wire contract.

Bootstrap cache: reads now degrade like writes already did. An unreadable
or corrupt cache leaves this start with no anti-rollback generation floor,
which is the position an absent cache has always left it in, and which the
threat model already accepts because deleting the file achieves the same
thing with no more privilege than corrupting it. Refusing bought no
security and cost the ability to collaborate at all. The tests state the
price plainly: with no floor the lower-generation document is accepted,
and `rollback_floor_armed` has to report it.

Threat model: correct an overstatement. Peer admission requires the remote
ticket's subject to equal the local account, so the product pairs only
devices of one account today. A relay operator reconstructs which devices
of an account sync and when — not a cross-account collaboration graph.
Also records that the relay reads exactly one field out of the ticket it
verifies, the expiry, which makes the identity disclosure gratuitous
rather than load-bearing, and states what a minimized credential would and
would not buy.
2026-08-01 12:23:09 +08:00
..
op-acp fix(editor): async hygiene — safe block_on, bounded acp channels, thread teardown 2026-07-26 13:19:34 +08:00
op-ai feat(agent): surface a quality credential after generation 2026-07-28 00:29:39 +08:00
op-ai-skills feat(agent): honor root dimensions requested in the prompt 2026-07-31 21:05:55 +08:00
op-auth-bridge fix(auth): isolate bundled runtime symbol 2026-07-29 22:38:54 +08:00
op-cli fix(mcp): authenticate the live endpoint and degrade the bootstrap cache 2026-08-01 12:23:09 +08:00
op-codegen refactor: typed error enums across the whole workspace 2026-07-27 21:09:06 +08:00
op-collab feat(editor): surface collab conflict details and replay discarded edits 2026-08-01 12:15:30 +08:00
op-collab-policy-file fix(collab): harden p2p collaboration against resource exhaustion 2026-08-01 09:48:23 +08:00
op-collab-relay-client fix(collab): close review follow-ups and align the reauth budget test 2026-08-01 11:42:10 +08:00
op-collab-relay-control-plane fix(collab): harden p2p collaboration against resource exhaustion 2026-08-01 09:48:23 +08:00
op-collab-relay-locator-server fix(collab): harden p2p collaboration against resource exhaustion 2026-08-01 09:48:23 +08:00
op-collab-relay-protocol feat(collab): ship public relay collaboration 2026-07-29 21:42:33 +08:00
op-collab-relay-server fix(collab): close review follow-ups and align the reauth budget test 2026-08-01 11:42:10 +08:00
op-collab-smoke fix(collab): harden p2p collaboration against resource exhaustion 2026-08-01 09:48:23 +08:00
op-collab-transport fix(collab): harden p2p collaboration against resource exhaustion 2026-08-01 09:48:23 +08:00
op-config-store test(desktop): keep persistence tests out of the real user config 2026-07-28 00:29:39 +08:00
op-design-lint refactor: final 800-line sweep across editor, mcp, services, and tool crates 2026-07-26 22:34:37 +08:00
op-editor-core feat(editor): surface collab conflict details and replay discarded edits 2026-08-01 12:15:30 +08:00
op-editor-host-core feat(collab): add authenticated p2p collaboration 2026-07-29 00:06:58 +08:00
op-editor-ui feat(editor): surface collab conflict details and replay discarded edits 2026-08-01 12:15:30 +08:00
op-figma refactor: typed error enums across the whole workspace 2026-07-27 21:09:06 +08:00
op-git
op-host-desktop fix(mcp): authenticate the live endpoint and degrade the bootstrap cache 2026-08-01 12:23:09 +08:00
op-host-native feat(panels): round out the prompt center with web, dashboard, component and modify entries 2026-07-31 21:06:56 +08:00
op-host-services fix(mcp): authenticate the live endpoint and degrade the bootstrap cache 2026-08-01 12:23:09 +08:00
op-host-web feat(ai): add prompt center 2026-07-30 09:00:40 +08:00
op-host-web-server refactor: dedupe cross-crate code and converge hardcoded literals 2026-07-26 11:24:22 +08:00
op-html refactor: typed error enums across the whole workspace 2026-07-27 21:09:06 +08:00
op-i18n feat(editor): surface collab conflict details and replay discarded edits 2026-08-01 12:15:30 +08:00
op-mcp fix(mcp): tolerate a trailing separator on a program DSL line 2026-07-31 21:00:50 +08:00
op-opmerge chore(sync): integrate origin/v0.8.2 interactions and retry batch 2026-07-18 13:11:52 +08:00
op-orchestrator fix(agent): stop landing pages from scaffolding as sidebar dashboards 2026-07-31 21:06:11 +08:00
op-pen-loader fix(canvas): adopt stack semantics for layout:none and retire the flow bandaid 2026-07-28 22:11:59 +08:00
op-process-io
op-rpc-transport fix(mcp): authenticate the live endpoint and degrade the bootstrap cache 2026-08-01 12:23:09 +08:00
op-smoke feat(agent): add a fixed-input modify mode to the smoke harness 2026-07-31 21:06:35 +08:00
op-util feat(collab): add authenticated p2p collaboration 2026-07-29 00:06:58 +08:00
op-web-sdk refactor: typed error enums across the whole workspace 2026-07-27 21:09:06 +08:00
CLAUDE.md feat(collab): add authenticated p2p collaboration 2026-07-29 00:06:58 +08:00