From 81c14729b04eca07781f3484a8edd52df495bb82 Mon Sep 17 00:00:00 2001 From: FilipBl4gojevic <84703395+FilipBl4gojevic@users.noreply.github.com> Date: Fri, 31 Jul 2026 13:14:54 +0200 Subject: [PATCH] docs: mainnet cutover complete - both hosted instances run the keyless build (deployed 2026-07-31) David dispatched the mainnet cutover this morning: deploy-mainnet.yml ran successfully at 2026-07-31T11:00:06Z-11:01:20Z, deploying commit 04e410b (the PR #11 merge, itself the tip of main after PRs #9/#10/#11 all merged 10:39:29Z-10:39:59Z the same morning). Testnet had already auto-deployed the identical commit at 10:40:01Z-10:41:50Z. The non-custodial migration is now complete on both hosted instances, not just in the code - the exact moment the prior docs pass's deliberately-hedged notice was written for. Verified directly before writing anything, not taken on faith from the dispatch: git/gh confirm the merge timestamps and that both deploy workflow runs targeted 04e410b exactly; the custody grep and safety.ts's absence were reconfirmed on this exact commit; both hosted endpoints (https://mcp.vector.mainnet.apexfusion.org/sse and the testnet equivalent) were probed directly with a bare curl request and both returned HTTP 401 right now - meaningful evidence on its own, since the pre-PR#8 image had no auth at all, so a 401 today proves post-migration code is what's actually running, not just what the deploy logs claim. - README.md: the deployment-status callout rewritten with the dated, both-networks-current facts, replacing the custody caveat with an access caveat - both instances require a bearer token from the operators now (an access control, not a custody signal; neither instance would accept a mnemonic from an authenticated caller either, since the tool schemas that would carry one no longer exist). The connect command now shows the bearer-token header syntax, verified against Claude Code's own current `claude mcp add` documentation before writing it (`--transport sse` accepts `--header "Authorization: Bearer "`, same as `--transport http`). The security notice rescoped from "this codebase, not every deployment" to a dated claim: complete in this codebase and on both hosted instances as of the 2026-07-31 cutover deploy specifically, explicitly not a "forever" claim - a future deploy is a separate operational action. - packages/signer/README.md: the two passages scoped to "this codebase" in the prior docs pass now scoped to "any instance running the 2026-07-31 deploy or later," mainnet included, with the same access-control caveat about the bearer token. - docs/architecture/non-custodial-split.md: PR-sequence row 9 (mainnet cutover) gets the same landed-marker style as rows 6-8, dated; section 11's rollout paragraph gets its one now-historical clause corrected to past tense with a dated annotation appended, following the established forward-only annotation convention rather than rewriting the paragraph. Open public access (no token, per-IP rate limiting) remains a planned follow-up, not yet an open PR or branch - checked directly (gh pr list, git branch -a) rather than assumed, and stated in the docs as planned, not implied as already in progress. --- README.md | 52 +++++++++++++----------- docs/architecture/non-custodial-split.md | 4 +- packages/signer/README.md | 18 ++++---- 3 files changed, 40 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index 4678eaf..eb4aeff 100644 --- a/README.md +++ b/README.md @@ -15,35 +15,41 @@ Hosted instances run on both networks, exposing all 24 tools: | Mainnet | `https://mcp.vector.mainnet.apexfusion.org/sse` | | Testnet | `https://mcp.vector.testnet.apexfusion.org/sse` | -> **Deployment status differs by network.** Testnet auto-deploys from `main` on every merge, so -> it tracks this codebase closely. **Mainnet stays on its last custodial image until a -> deliberate cutover deploy ships** - that deploy is a separate, future step, not automatic and -> not implied by any merge (see [docs/architecture/non-custodial-split.md](docs/architecture/non-custodial-split.md), -> section 11, "Rollout"). Until it ships, treat the mainnet instance's signing tools as -> custodial: assume they may still accept a mnemonic as a tool-call parameter, and prefer -> self-hosting this release or the testnet instance instead. +> **Deployment status: both networks are current.** Both hosted instances run today's +> completed migration: testnet since the 2026-07-31 morning merges (auto-deployed from +> `main`), mainnet since a deliberate cutover deploy the same day (see +> [docs/architecture/non-custodial-split.md](docs/architecture/non-custodial-split.md), section +> 11, "Rollout", for the full history). **Both hosted instances currently require a bearer +> token from the operators to connect** - that is an access control, not a custody one: +> neither instance accepts a mnemonic from any caller, token or not. Open public access +> (per-IP rate limiting, no token required) is a planned follow-up, not yet shipped. Self-host +> this release for tokenless access today. -Connect from Claude Code in one command (testnet shown - swap in the mainnet URL once the -cutover deploy described above ships): +Connect from Claude Code in one command. Both hosted instances require a bearer token from the +operators (contact the Apex Fusion team for one): ```bash -claude mcp add --transport sse vector-mcp https://mcp.vector.testnet.apexfusion.org/sse +claude mcp add --transport sse vector-mcp https://mcp.vector.mainnet.apexfusion.org/sse \ + --header "Authorization: Bearer " ``` -> **Security notice: as of this release, the non-custodial migration is complete in this -> codebase.** No tool in this repository accepts a mnemonic, private key, or any other key -> material. Every `build_*` tool constructs an unsigned transaction from a wallet *address* -> only, and every signing operation happens locally on your own machine, through the local -> signer companion. Broadcast the signed result with `vector_submit_transaction` - your seed -> phrase never leaves your machine, and no server running this release ever holds one. This is -> enforced mechanically in the code, not just by convention: the builder's custody boundary test -> scans every source file for key-material vocabulary against an allowlist that is now empty and -> pinned at size zero, so a future change cannot silently reintroduce a mnemonic parameter -> without failing that test by name. -> **This is a claim about the code, not about every deployment of it** - see the deployment -> status note above the connect command, and +Self-hosting (below) needs no token and gives every caller open access to your own instance. + +> **Security notice: the non-custodial migration is complete, in this codebase and on both +> hosted instances, as of the 2026-07-31 cutover deploy.** No tool in this repository accepts a +> mnemonic, private key, or any other key material. Every `build_*` tool constructs an unsigned +> transaction from a wallet *address* only, and every signing operation happens locally on your +> own machine, through the local signer companion. Broadcast the signed result with +> `vector_submit_transaction` - your seed phrase never leaves your machine, and no server +> running this release ever holds one. This is enforced mechanically in the code, not just by +> convention: the builder's custody boundary test scans every source file for key-material +> vocabulary against an allowlist that is now empty and pinned at size zero, so a future change +> cannot silently reintroduce a mnemonic parameter without failing that test by name. +> **This describes this release and the 2026-07-31 deploy specifically** - a later deploy is a +> separate operational action, not automatically covered by this notice; see the deployment +> status note above and > [docs/architecture/non-custodial-split.md](docs/architecture/non-custodial-split.md) for the -> full rollout plan. +> full rollout history. Self-hosting instructions are below. diff --git a/docs/architecture/non-custodial-split.md b/docs/architecture/non-custodial-split.md index 1c5dced..15e3f3b 100644 --- a/docs/architecture/non-custodial-split.md +++ b/docs/architecture/non-custodial-split.md @@ -191,7 +191,7 @@ TDD throughout: failing test before implementation, every PR. | **6** | **Family 1 — wallet/tx keyless.** Mnemonics removed; `build_*` tools land ✅ **(landed — this PR)** | **yes** | | **7** | **Family 2 — agent registry keyless.** Drops `@ts-nocheck` from `agent-network.ts` ✅ **(landed — this PR)** | yes | | **8** | **Family 3 — self-improvement keyless.** Ref-UTxO env config carried over from the custodial code; the suspected CBOR encoding issue closed as no-bug (audit #10, golden-pinned against a live on-chain token) ✅ **(landed — this PR)** | yes | -| **9** | Mainnet cutover: README, security-page correction, deliberate `workflow_dispatch` | — | +| **9** | Mainnet cutover: README, security-page correction, deliberate `workflow_dispatch` ✅ **(landed — deployed 2026-07-31)** | — | **PR 4 is the review that matters.** It is additive, self-contained, and *is* the security boundary. It breaks nothing while it is reviewed. @@ -223,7 +223,7 @@ PR 4 and PR 5 both depend on the workspace split (PR 3) and can proceed in paral ## 11. Rollout -Testnet auto-deploys on push to `main` (`deploy.yml`) and **is the proving ground** — breaking it from PR 6 onward is expected and useful signal. Mainnet deploys only by manual `workflow_dispatch` and **stays on the last custodial image until PR 9**. This uses the existing CI split as designed; no new infrastructure. +Testnet auto-deploys on push to `main` (`deploy.yml`) and **is the proving ground** — breaking it from PR 6 onward is expected and useful signal. Mainnet deploys only by manual `workflow_dispatch` and **stayed on the last custodial image until PR 9** ✅ **(cutover deployed 2026-07-31, both networks now run the same image)**. This uses the existing CI split as designed; no new infrastructure. ## 12. Findings from local verification diff --git a/packages/signer/README.md b/packages/signer/README.md index b7aaf67..3e866a3 100644 --- a/packages/signer/README.md +++ b/packages/signer/README.md @@ -165,10 +165,11 @@ over-counts, which refuses too much rather than too little. and the smoke tests above). **Nothing is left open in the code: this was the last custodial family.** The non-custodial migration described in [`docs/architecture/non-custodial-split.md`](../../docs/architecture/non-custodial-split.md) - is complete in this codebase. It is not yet complete on every deployment: the mainnet hosted - instance stays on its last custodial image until a deliberate cutover deploy ships (see that - document's rollout section). Until then, pair this signer with a self-hosted or testnet - builder if you want the guarantee above to actually hold - not the mainnet one. + is complete in this codebase, and as of the 2026-07-31 cutover deploy, on both hosted + instances too: pair this signer with a self-hosted builder, the testnet instance, or the + mainnet instance now, since any of them running the 2026-07-31 deploy or later carries the + guarantee above. Both hosted instances currently require a bearer token from the operators + to connect - that is an access control, separate from the custody guarantee above. ## Running it @@ -195,11 +196,10 @@ example): ``` Register it alongside the builder so an agent has both sets of tools available. This pairing -keeps your mnemonic off any server running this release, for every family it exposes: wallet, -transaction, smart-contract, agent-registry, and self-improvement alike - as long as that -server is actually running this release. The mainnet hosted instance is not, yet: see the -deployment status note in the root README before assuming this covers it. See the last bullet -under Known limitations above for the full evidence. +keeps your mnemonic off any server running the 2026-07-31 deploy or later, for every family it +exposes: wallet, transaction, smart-contract, agent-registry, and self-improvement alike. Both +hosted instances qualify now, and so does any self-hosted deployment of this release. See the +last bullet under Known limitations above for the full evidence. ## Testing