Injected workspace capability
The trusted host binds private-link workspace, connector authorization, and provider-thread scope; model-supplied IDs cannot see or widen it.
CareerVector tool serviceBlueprint · careervector.blueprint-graph/v7
Twenty composable top-level diagrams plus recursively nested 21×21 semantic layers. Nodes descend; boundary arrows cross to neighbours.
Nested layer 1 · control · data · privacy · evidence
A minimal capability surface resolves authorization server-side and funnels bounded reads, public JobCache queries, idempotent typed writes, receipts, and compensating undo through canonical product paths.
The trusted host binds private-link workspace, connector authorization, and provider-thread scope; model-supplied IDs cannot see or widen it.
CareerVector tool serviceBounded projection and clocks for the active surface, job, or document.
CareerVector read modelsEvidence-backed public role/ad results cross the existing privacy seam.
JobCache CoreAllowlist, expected clocks, idempotency, size, cardinality, provenance, and prohibited effects.
CareerVector APIThe existing D1/Yjs operation path performs one atomic write and normal realtime fanout.
CareerVector APIAffected paths, clocks, actor, result, and bounded compensating operation feed chat and UI.
CareerVector D1A new typed write checks current clocks and refuses to overwrite later work.
CareerVector APIChat and affected workspace surfaces observe the same durable result and provenance.
CareerVector workspaceThe trusted host binds private-link workspace, connector authorization, and provider-thread scope; model-supplied IDs cannot see or widen it.
CareerVector tool serviceBounded projection and clocks for the active surface, job, or document.
CareerVector read modelsEvidence-backed public role/ad results cross the existing privacy seam.
JobCache CoreAllowlist, expected clocks, idempotency, size, cardinality, provenance, and prohibited effects.
CareerVector APIThe existing D1/Yjs operation path performs one atomic write and normal realtime fanout.
CareerVector APIAffected paths, clocks, actor, result, and bounded compensating operation feed chat and UI.
CareerVector D1A new typed write checks current clocks and refuses to overwrite later work.
CareerVector APIChat and affected workspace surfaces observe the same durable result and provenance.
CareerVector workspaceCanonical architecture note
Open note ↗The assistant can understand the active workspace, search the public job corpus, and help change career/application state without gaining a filesystem, terminal, raw database, workspace-listing, or arbitrary HTTP capability. A chat action and a direct UI action converge through the same schema, operation policy, canonical D1/Yjs commit, realtime fanout, and audit trail.
| Capability | Input boundary | Output and effect |
|---|---|---|
get_workspace_context |
Authorized workspace plus optional active surface/job/document selector | Bounded canonical projection with clocks and provenance; no secrets, keys, telemetry, or unrelated workspaces |
search_jobcache |
Public search terms and bounded filters | JobCache public role/ad projection with evidence and freshness; no private identity crosses the seam |
apply_workspace_operations |
Host-derived idempotency identity plus model-supplied expected clocks, reason, and a typed non-nested operation batch | Existing canonical commit path; returns before/after clocks, affected paths, provenance, and a reversible receipt or an explicit non-reversible refusal |
undo_workspace_receipt |
One unexpired reversible receipt and current expected clocks | Compensating typed operation through the same canonical commit path; never a database rollback or history rewrite |
Domain workflows may compose these capabilities, but a connector host must not mirror the entire legacy MCP catalogue. A new capability needs a user outcome, schema, privacy classification, authorization rule, idempotency behavior, receipt, failure/recovery path, and tests before it joins the allowlist.
The CareerVector host resolves the private workspace link at its trusted boundary and supplies a
short-lived tool capability containing opaque workspace, connector, thread, audience, expiry,
and nonce scope. The private link itself never enters a prompt or model-visible tool argument.
The tool service never trusts a workspaceId supplied only by the model or browser.
The connector identifier names the reviewed connector instance that holds device/provider
authorization; it is not a person, membership, billing target, or CareerVector account.
Every write includes:
expectedClock values for every touched sub-document;@cv/mutations operation or non-nested atomic batch;actorClass: agent and a valid structured actor ID such as
careervector-assistant:openai:codex or another reviewed provider/connector identity;The existing validation, cardinality, fixed-tier, size, CAS, atomic-batch, JobCache-hook, and
realtime rules remain authoritative. A connector host cannot set force: true, invent a parallel
operation, or write D1/Yjs directly. A stale clock returns a conflict plus a fresh bounded
projection; automatic retries require the model to reconsider the new state rather than replaying
an old mutation blindly.
Read-only tools execute immediately. Low-risk workspace edits may execute immediately only when the operation catalogue can produce a bounded compensating operation. Chat renders the intent, affected fields, result, actor, time, and Undo action, and the affected workspace surface renders the same provenance.
Deletion, workspace-link or provider-credential changes, external communication, submission, purchase, publication, and any operation without a safe compensating form are absent from the initial tool surface. Adding one requires an explicit preview/approval capability and a recovery contract; the assistant cannot turn a chat confirmation phrase into ambient authority.
Undo is a new compensating write, never erasure of the original event. It checks current clocks and fails honestly when later human/agent work would be overwritten. Reversible receipts have a declared retention period and are erased with the workspace.
Workspace and JobCache content is untrusted reference data, never instructions. Tool descriptions and base instructions state this explicitly. The model cannot request hidden context, enumerate workspaces, change tool configuration, fetch arbitrary URLs, or read credentials. Tool outputs are bounded and tagged by source; public corpus text does not gain authority over private writes.
The first canonical contract seam lives in lib/assistant-tools. It emits exactly the four
function-tool definitions above for a connector host while keeping workspace, capability,
request, and originating-event identifiers out of model-visible arguments. Every call
re-verifies an injected short-lived capability; the host resolves durable request/provenance IDs
from trusted thread/turn/call metadata. JobCache search receives no CareerVector scope object.
That executable scope is keyed by opaque workspaceId, connectorId, and provider threadId.
Idempotency and server-owned operation IDs use those three scopes, and the strict verifier rejects
the retired account-principal shape. The connector ID is host-internal and does not expose a
provider credential or grant workspace access independently of the injected capability.
Writes require exact clocks for precisely the sub-documents touched, an injected product-owned
reversible-operation policy, deterministic server-owned operation IDs, actorClass: agent, the
structured CareerVector assistant actor ID, an idempotency store, and a receipt whose request,
provenance, before/after clocks, operation kinds, and unexpired undo window match the attempted
write. Nested batches and caller-supplied force, scope, or operation IDs are rejected. Tool
results are strict JSON and bounded before returning to App Server.
The TUI also has an as-built three-operation local boundary for reading application context,
revision-checked field replacement, and undo. That proves the interaction and connector seam but
still targets application.json; canonical integration must adapt it to this shared contract.
The TypeScript package remains supporting evidence, not a live tool service. No mutation kind is approved by the package itself. The product-owned reversible catalogue, capability issuer/verifier, durable atomic idempotency store, canonical read/search/commit/undo adapters, conflict projection, realtime parity, and UI receipt/Undo presentation remain target work.
force, stale
clocks, duplicate IDs with changed payloads, oversized projections, cross-workspace scope, and
the retired account-scoped capability shape;