Skip to content

feat(ui): use a Polkadot App account locally from the debug panel - #362

Merged
johnthecat merged 23 commits into
mainfrom
feat/local-wallet
Oct 9, 2026
Merged

johnthecat merged 23 commits into
mainfrom
feat/local-wallet

Conversation

@johnthecat

@johnthecat johnthecat commented Oct 9, 2026 •

Copy link
Copy Markdown
Collaborator

Signing and accounts are the only difference between a pairing host and a signing host, so the debug panel's new Wallet tab swaps the host role: paste the Polkadot App recovery phrase, the page reloads, and every app on the domain boots its core as a signing host that signs without the phone. The entropy is stored encrypted under a non-extractable key in the protocol frame on host.<domain>, the username is read from People, "Replace" takes another phrase, and "Forget" (or logging out) switches back. The signing host comes from the published @parity/truapi-host testing bundle through a small Vite plugin, so normal users never download it.

Also in this PR:

  • The published signing host has no permission authorization methods, so products could not mount. signing-host-permissions.ts keeps them in memory until the upstream fix, fix(truapi-host): serve the host surface from a signing worker host trinity-user-agents#1358, ships in a release, then it is deleted.
  • The account button and popover mark a local account.
  • The debug panel gets top-level tabs (TrUAPI, Resolution, Archive, Diagnostics, Wallet), reopens on the last one, and its views are built from shared components.

Testing:

  • Unit tests for every unit, plus a functional test that switches an app to a local wallet, opens the product, checks a second origin and switches back.
  • Manually: switched to local with a real phrase, signed in host-playground without the phone, switched back.

The wallet read gets a 5 s budget, failure reasons are a closed set, a failed identity save is reported once as identity-save, and a failed switch back shows an inline error.
…-host does

The signing host in @parity/truapi-host 0.24.0 has no permission authorization
methods, so every product mount threw and the app showed "Domain can't be
reached". A local wallet core now keeps the statuses in memory for the page.
Remove signing-host-permissions.ts when the upstream release lands.
Resolution, Archive, Diagnostics and Wallet are not about TrUAPI calls, so they
become top-level tabs beside a TrUAPI tab that holds the event list, timeline,
filters and detail pane. Lists, buttons, tabs, filters and the detail pane's
generic parts move into shared components.
@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Bundle Size Report

Eager path (module entry + modulepreloaded chunks):

Path Raw Brotli Gzip
host/(eager path) 409.7 KB (+3.3 KB) 140.0 KB (+1.4 KB) 159.9 KB (+1.7 KB)
host/landing/(eager path) 345.9 KB (+3.2 KB) 117.3 KB (+1.3 KB) 134.4 KB (+1.6 KB)
sandbox/(eager path) 241.9 KB 69.4 KB (-50 B) 80.4 KB (+1 B)

Chunks over 500 KB:

File Raw Brotli Gzip
host/assets/truapi_provider_bg.wasm 4.01 MB 955.7 KB 1.27 MB
host/assets/truapi_server_bg.wasm 2.70 MB 731.0 KB 965.5 KB
host/assets/truapi_signing_bg.wasm 2.92 MB 791.8 KB 1.02 MB
host/assets/truapi_verifiable_bg.wasm 4.89 MB 4.61 MB 4.64 MB
Total 16.30 MB (+2.99 MB) 7.62 MB (+812.8 KB) (compression rate: 53%) 8.53 MB (+1.05 MB)
All files
File Raw Brotli Gzip
host/.well-known/apple-app-site-association 505 B 505 B 505 B
host/.well-known/assetlinks.json 2.1 KB 343 B 427 B
host/assets/AccountContent.js 2.4 KB (+406 B) 1.1 KB (+140 B) 1.2 KB (+145 B)
host/assets/AnchoredContent.js 2.1 KB 823 B 900 B (-1 B)
host/assets/AuthButton.css 1.5 KB (+98 B) 535 B (+24 B) 633 B (+27 B)
host/assets/AuthButton.js 4.5 KB (+251 B) 1.8 KB (+83 B) 2.1 KB (+110 B)
host/assets/AuthModal.css 3.4 KB 814 B 958 B
host/assets/AuthModal.js 8.0 KB 2.9 KB (+1 B) 3.2 KB (-1 B)
host/assets/Button.js 2.1 KB 946 B 1.1 KB (+1 B)
host/assets/ChainsContent.js 7.3 KB 2.4 KB (-14 B) 2.7 KB (-8 B)
host/assets/ChatDock.js 2.3 KB (-1 B) 1.1 KB (+5 B) 1.2 KB
host/assets/ChatDock.css 464 B (-5 B) 464 B (-5 B) 464 B (-5 B)
host/assets/ChatPanel.css 5.8 KB 1.3 KB (+4 B) 1.5 KB
host/assets/ChatPanel.js 20.6 KB 6.4 KB (+1 B) 7.2 KB (-3 B)
host/assets/Chip.js 435 B 435 B 435 B
host/assets/DropdownMenu.js 2.5 KB 1.2 KB (+9 B) 1.3 KB (-4 B)
host/assets/DropdownMenu.css 788 B 788 B 788 B
host/assets/DropdownMenuSurface.js 2.0 KB 911 B 1.0 KB (-1 B)
host/assets/FloatingLayer.js 2.6 KB 1.1 KB (+1 B) 1.2 KB (-1 B)
host/assets/IconButton.js 1.3 KB 626 B (-3 B) 739 B
host/assets/LandingAuth.js 238 B 238 B 238 B
host/assets/LandingNav.js 2.8 KB 1.3 KB (+1 B) 1.5 KB (-3 B)
host/assets/LandingNav.css 1.5 KB 477 B (-6 B) 581 B
host/assets/LandingPart.js 648 B 648 B 648 B
host/assets/LandingRecents.js 2.6 KB 1.1 KB (+12 B) 1.2 KB (-5 B)
host/assets/LandingRecents.css 1.3 KB 458 B (-1 B) 578 B (-2 B)
host/assets/LoadingScreen.js 3.8 KB (+1 B) 1.7 KB (-7 B) 2.0 KB (-4 B)
host/assets/LoadingScreen.css 3.3 KB (+3 B) 1.0 KB (+2 B) 1.2 KB
host/assets/LogoWordmark.css 15.5 KB (-1.6 KB) 3.0 KB (-185 B) 3.4 KB (-195 B)
host/assets/Modal.js 2.7 KB 1.0 KB (-2 B) 1.1 KB
host/assets/ModalLayer.js 5.0 KB 2.1 KB (+1 B) 2.3 KB (-2 B)
host/assets/PermissionsContent.js 4.5 KB 1.7 KB (-7 B) 1.9 KB (-1 B)
host/assets/Popover.js 4.3 KB 1.8 KB (+19 B) 1.9 KB (+3 B)
host/assets/PopoverSurface.js 1.3 KB 618 B (-22 B) 706 B (+1 B)
host/assets/SectionLabel.js 1.1 KB 399 B (-1 B) 451 B
host/assets/SegmentedControl.js 1.5 KB 743 B (+3 B) 831 B (+1 B)
host/assets/SessionStore.js 35.3 KB (+432 B) 9.6 KB (+50 B) 12.1 KB (+126 B)
host/assets/SettingsContent.js 9.7 KB 3.2 KB 3.6 KB (+6 B)
host/assets/SettingsContent.css 4.1 KB 1014 B (+7 B) 1.2 KB (+3 B)
host/assets/ShieldIcons.js 1.2 KB 460 B 530 B
host/assets/Spinner.js 241 B 241 B 241 B
host/assets/StatusDot.css 563 B 563 B 563 B
host/assets/StatusDot.js 563 B 563 B 563 B
host/assets/Surface.js 1.6 KB 688 B 773 B
host/assets/Topbar.astro_astro_type_script_index_0_lang.js 468 B 468 B 468 B
host/assets/TopbarActions.js 9.6 KB (+29 B) 3.4 KB (+17 B) 3.7 KB (+8 B)
host/assets/TopbarActions.css 1.3 KB 481 B 589 B (-1 B)
host/assets/TopbarReveal.css 683 B 683 B 683 B
host/assets/TopbarReveal.js 804 B 804 B 804 B
host/assets/UrlPill.astro_astro_type_script_index_0_lang.js 528 B 528 B 528 B
host/assets/UrlPillShield.js 4.6 KB 1.6 KB (-3 B) 1.8 KB (-6 B)
host/assets/UrlPillShield.css 956 B 956 B 956 B
host/assets/VerificationContent.js 1.3 KB 618 B (-6 B) 719 B (-1 B)
host/assets/Well.js 1.2 KB 531 B 614 B
host/assets/_md.js 1.6 KB (-2 B) 799 B (+1 B) 867 B (-1 B)
host/assets/_u64.js 768 B 768 B 768 B
host/assets/account.js 1.1 KB 549 B (+1 B) 629 B (-1 B)
host/assets/active.CPsmhfHv.js 238 B 238 B 238 B
host/assets/app-roots.js 351 B 351 B 351 B
host/assets/auth-controller.js 5.1 KB 1.9 KB (+1 B) 2.2 KB (-1 B)
host/assets/auth.js 386 B 386 B 386 B
host/assets/base.js 4.6 KB 1.9 KB 2.0 KB
host/assets/bitswap.js 12.1 KB (+61 B) 4.2 KB (+30 B) 4.7 KB (+34 B)
host/assets/blake2.js (×2) 12.7 KB (-485 B) 4.9 KB (-188 B) 5.6 KB (-183 B)
host/assets/bridge.js 125.2 KB (+1.5 KB) 28.6 KB (+354 B) 34.3 KB (+445 B)
host/assets/broken.js 248 B 248 B 248 B
host/assets/browser.js 22.6 KB 7.4 KB 8.4 KB
host/assets/chain-sync.js 2.9 KB 1.2 KB 1.3 KB
host/assets/chat-panel.js 2.7 KB 1.0 KB (+15 B) 1.1 KB (+1 B)
host/assets/cid-cache.js 2.0 KB 888 B (+16 B) 963 B
host/assets/client.js (×2) 14.4 KB (+453 B) 5.3 KB (+82 B) 5.8 KB (+107 B)
host/assets/create-store.js 107.6 KB 32.2 KB (-41 B) 36.1 KB (-1 B)
host/assets/db.js 2.3 KB (+96 B) 809 B (+14 B) 941 B (+19 B)
host/assets/device.js 235 B 235 B 235 B
host/assets/dist.js 65 B 65 B 65 B
host/assets/dot-url.js 232 B 232 B 232 B
host/assets/dotli-debug-bus.js (×2) 798 B 798 B 798 B
host/assets/drag.js 430 B 430 B 430 B
host/assets/error-copy.js 259 B 259 B 259 B
host/assets/errors.js (×3) 3.4 KB 1.9 KB 2.0 KB
host/assets/fetch.js 64.8 KB 16.7 KB (-6 B) 19.3 KB (+1 B)
host/assets/fit.js 584 B 584 B 584 B
host/assets/focus.js 1.3 KB 531 B 676 B
host/assets/html.js 435 B 435 B 435 B
host/assets/idle.js 323 B 323 B 323 B
host/assets/in-sheet.js 64 B 64 B 64 B
host/assets/index.css 11.9 KB (-2 B) 2.7 KB (+1 B) 3.0 KB
host/assets/index.astro_astro_type_script_index_0_lang.js 35.5 KB (+23 B) 11.9 KB (+18 B) 13.2 KB (+7 B)
host/assets/ipfs.js 954 B 954 B 954 B
host/assets/landing.css 7.7 KB 1.5 KB (-6 B) 1.8 KB (+2 B)
host/assets/landing.astro_astro_type_script_index_0_lang.js 206 B 206 B 206 B
host/assets/lazy.js (×2) 3.3 KB (+2.5 KB) 1.9 KB (+1.1 KB) 2.0 KB (+1.2 KB)
host/assets/loading.js 268 B 268 B 268 B
host/assets/local-wallet-core.js 3.1 KB 1.4 KB 1.5 KB
host/assets/log.js 1.6 KB 699 B 798 B
host/assets/manifest-types.js 3.6 KB 1.1 KB 1.3 KB
host/assets/manifest.js 20.9 KB 6.9 KB (+3 B) 7.6 KB (+2 B)
host/assets/metrics.js 2.0 KB 882 B 992 B
host/assets/modal-stack.js 681 B 681 B 681 B
host/assets/mount.js (×2) 141.4 KB (+20.6 KB) 41.5 KB (+7.0 KB) 48.7 KB (+8.8 KB)
host/assets/mount.css (×2) 22.2 KB (-2.0 KB) 5.2 KB (-38 B) 5.9 KB (-72 B)
host/assets/network-health.js 3.2 KB 1.3 KB (+2 B) 1.4 KB (+4 B)
host/assets/network-monitor.js 2.8 KB 1.1 KB (+1 B) 1.2 KB (+1 B)
host/assets/network.js (×2) 4.6 KB 2.1 KB 2.3 KB
host/assets/perf.js 148 B 148 B 148 B
host/assets/permission-changes.js 340 B 340 B 340 B
host/assets/permissions.js (×2) 4.4 KB 1.8 KB 2.0 KB
host/assets/phone.Bu6jif0Q.js 307 B 307 B 307 B
host/assets/preload-helper.js 1.4 KB 664 B 792 B
host/assets/product-frame-layout.js 1.0 KB 475 B (+6 B) 537 B
host/assets/product.js 422 B 422 B 422 B
host/assets/proofs.js 26.0 KB 7.6 KB (+7 B) 8.3 KB (+2 B)
host/assets/provider.js 22.2 KB 5.9 KB 6.7 KB (+1 B)
host/assets/recent-labels.js 787 B 787 B 787 B
host/assets/reduced-motion.js 97 B 97 B 97 B
host/assets/resolve.js 4.5 KB 1.8 KB (+17 B) 2.0 KB
host/assets/rolldown-runtime.js 716 B 716 B 716 B
host/assets/root.js 444 B 444 B 444 B
host/assets/rpc-chain.js 28.9 KB 9.3 KB 10.2 KB (+3 B)
host/assets/rpc-resolve.js 2.3 KB 989 B (+4 B) 1.1 KB
host/assets/runtime-config.js 4.8 KB 1.5 KB (-1 B) 1.7 KB
host/assets/scale-ts.js 4.8 KB 1.9 KB 2.1 KB
host/assets/scale.js 2.2 KB 999 B 1.1 KB
host/assets/settings-actions.js 10.1 KB (-1.5 KB) 3.6 KB (-561 B) 4.0 KB (-627 B)
host/assets/settings-glyph.js 283 B 283 B 283 B
host/assets/settings.js 353 B 353 B 353 B
host/assets/sha2.js 1.9 KB 968 B 1.1 KB
host/assets/shared-mode.js (×2) 1.8 KB 833 B (+4 B) 936 B (+1 B)
host/assets/signing-worker.js (×2) 40.1 KB 9.1 KB 10.3 KB
host/assets/spans.js 793 B (+28 B) 793 B (+28 B) 793 B (+28 B)
host/assets/src.js 80.0 KB (+32 B) 25.1 KB (+31 B) 27.7 KB (+19 B)
host/assets/startup.css 5.6 KB 1.7 KB 1.9 KB
host/assets/startup.js 11.9 KB (+27 B) 4.2 KB (+16 B) 4.8 KB (+13 B)
host/assets/toasts.js 4.5 KB 1.6 KB (+1 B) 1.8 KB (+1 B)
host/assets/topbar.BFyo0oR4.js 2.0 KB 854 B 980 B
host/assets/topbar-status.js 2.2 KB 908 B (+1 B) 1.0 KB
host/assets/topbar.Bq-n4Klp.js 196 B 196 B 196 B
host/assets/topbar.js 575 B 575 B 575 B
host/assets/truapi_provider_bg.wasm 4.01 MB 955.7 KB 1.27 MB
host/assets/truapi_server_bg.wasm 2.70 MB 731.0 KB 965.5 KB
host/assets/truapi_signing_bg.wasm 2.92 MB 791.8 KB 1.02 MB
host/assets/truapi_verifiable.js 14.3 KB 2.8 KB 3.2 KB
host/assets/truapi_verifiable_bg.wasm 4.89 MB 4.61 MB 4.64 MB
host/assets/twoX.js 8.5 KB 3.0 KB (+10 B) 3.3 KB (+2 B)
host/assets/ui.js 3.9 KB 1.4 KB (+2 B) 1.6 KB (-2 B)
host/assets/url-pill.js 382 B 382 B 382 B
host/assets/use-store.js 366 B 366 B 366 B
host/assets/utils.js 3.5 KB 1.4 KB 1.5 KB
host/assets/verify.js (×2) 12.9 KB (-1.9 KB) 4.4 KB (-876 B) 4.8 KB (-1.2 KB)
host/assets/wallet-boot.js 800 B 800 B 800 B
host/assets/wallet-mode.js 184 B 184 B 184 B
host/assets/wallet-switch.js 628 B 628 B 628 B
host/assets/web.js (×2) 93.5 KB 29.2 KB (-4 B) 32.1 KB
host/assets/worker-runtime.js (×2) 37.2 KB 8.8 KB 10.0 KB
host/favicon.svg 1.8 KB 1.8 KB 1.8 KB
host/host-sw.js 9.6 KB (+254 B) 2.6 KB (+89 B) 2.9 KB (+55 B)
host/host_version.json 109 B 109 B 109 B
host/icon-192.png 12.5 KB 12.5 KB 12.5 KB
host/icon-512.png 42.8 KB 42.8 KB 42.8 KB
host/index.html 53.4 KB (+621 B) 12.8 KB (+84 B) 15.0 KB (+116 B)
host/landing.html 38.4 KB (+1.3 KB) 9.6 KB (+173 B) 11.4 KB (+207 B)
host/manifest.webmanifest 441 B 441 B 441 B
host/workbox.js 14.8 KB 4.6 KB 5.1 KB
sandbox/app-sw.js 5.1 KB 1.9 KB (+3 B) 2.2 KB (-1 B)
sandbox/assets/bitswap-bridge.js 1.2 KB 584 B (-7 B) 672 B (-1 B)
sandbox/assets/fetch.js 4.0 KB 1.4 KB 1.6 KB (-1 B)
sandbox/assets/index.css 10.3 KB 2.6 KB (-1 B) 2.9 KB (-2 B)
sandbox/assets/index.js 237.9 KB 68.0 KB (-50 B) 79.2 KB (+2 B)
sandbox/assets/mount.css 15.6 KB 3.0 KB (-3 B) 3.4 KB (-1 B)
sandbox/assets/mount.js 66.6 KB 21.9 KB (-25 B) 24.2 KB (+3 B)
sandbox/favicon.svg 1.8 KB 1.8 KB 1.8 KB
sandbox/host_version.json 108 B 108 B 108 B
sandbox/index.html 1.7 KB 400 B (-4 B) 616 B (+1 B)
Total 16.30 MB (+2.99 MB) 7.62 MB (+812.8 KB) (compression rate: 53%) 8.53 MB (+1.05 MB)

Commit: 99a60a2

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

⚡ Performance Report

Cold Start

Overall: 🔴 regressed  |  p50: 7.72s → 11.74s (+52.1%)  |  p95: 8.52s → 12.75s (+49.6%)  |  Mann-Whitney: z=4.40 ✅ significant

Phase breakdown
Phase Base p50 PR p50 p50 Δ Base p95 PR p95 p95 Δ Verdict
End-to-end 7.72s 11.74s +4.03s (+52.1%) 8.52s 12.75s +4.23s (+49.6%) 🔴 regressed
Host total 5.52s 8.83s +3.31s (+60.1%) 6.30s 9.67s +3.37s (+53.5%) 🔴 regressed
Name resolution 5.34s 8.53s +3.19s (+59.6%) 6.08s 9.35s +3.26s (+53.6%) 🔴 regressed
App total 2.13s 2.93s +793ms (+37.2%) 2.82s 3.05s +225ms (+8.0%) 🔴 regressed

Warm Start

Overall: 🔴 regressed  |  p50: 427ms → 532ms (+24.6%)  |  p95: 528ms → 558ms (+5.7%)  |  Mann-Whitney: z=3.81 ✅ significant

Phase breakdown
Phase Base p50 PR p50 p50 Δ Base p95 PR p95 p95 Δ Verdict
End-to-end 427ms 532ms +105ms (+24.6%) 528ms 558ms +30ms (+5.7%) 🔴 regressed
Host total 138ms 191ms +53ms (+38.4%) 199ms 205ms +6ms (+3.0%) 🔴 regressed
App total 266ms 308ms +42ms (+15.8%) 309ms 319ms +10ms (+3.2%) 🔴 regressed

Lukewarm Start (different site, same session)

Overall: 🔴 regressed  |  p50: 10.22s → 14.85s (+45.2%)  |  p95: 10.66s → 17.31s (+62.4%)  |  Mann-Whitney: z=4.40 ✅ significant

Phase breakdown
Phase Base p50 PR p50 p50 Δ Base p95 PR p95 p95 Δ Verdict
End-to-end 10.22s 14.85s +4.62s (+45.2%) 10.66s 17.31s +6.65s (+62.4%) 🔴 regressed
Host total 6.83s 9.99s +3.17s (+46.4%) 7.16s 10.52s +3.37s (+47.0%) 🔴 regressed
Name resolution 5.55s 7.84s +2.29s (+41.2%) 5.87s 8.46s +2.60s (+44.3%) 🔴 regressed
App total 3.20s 4.87s +1.66s (+51.8%) 3.88s 7.36s +3.48s (+89.8%) 🔴 regressed

Commit: 99a60a2  |  Outliers (>2x best) discarded before stats

Views now compose shared parts instead of their own styles: Pane, Stack,
Columns, Inline, Bar, Note, EmptyState, CodeBlock, CopyValue, TextArea,
ErrorText, LinkButton, Resizer and the event parts (Timestamp, DirectionArrow,
MethodTag, LayerBadge). The resizers split into the generic Resizer and the
panel's edge and splitter integrations.

The panel reopens on the last picked tab, kept in localStorage like the dock.
A local wallet offers Replace, which takes another phrase, and Forget, which
goes back to Polkadot App, in place of a single "Use Polkadot App".
… test gets room on CI

Storybook now registers the truapi signing worker plugin, as the host does, so
its build resolves the local wallet's worker import. Stack reads its form
handler inside the event handler, which silences a Solid untracked-read warning.
@johnthecat
johnthecat merged commit e6b9295 into main Oct 9, 2026
16 checks passed
@johnthecat
johnthecat deleted the feat/local-wallet branch October 9, 2026 15:03
replghost added a commit that referenced this pull request Oct 12, 2026
Brings the restacked PolkaVM runtime (#185 at 483646a, main with the #362
local signer, old browser test wallet removed) under the JamPeerTransport
layer.

- bridge.ts: keep the JAM WebTransport-unavailable notice import; the
  sandbox checker panel is now loaded lazily by the parent, so its eager
  import is dropped.
- README: take the parent's local-truapi paragraph and SDK provenance text;
  the JAM permission and transport documentation is unchanged.
- vendor: re-vendor host-rust-core #1010 at its recorded revision c2908ec3
  with the standard upstream build-wasm.mjs (web: runtime; testing:
  wasm-signing-host + test-host), so main's signing worker has wasm/testing.
  @parity/truapi rebuilt byte-identical (archive 81f2c412, client d9ece616).
- package-lock.json: parent's lock regenerated with the sandbox's vendored
  @parity/truapi dependency.
replghost added a commit that referenced this pull request Oct 12, 2026
Merges feat/pvm-wasm 483646a (main with #362's local signer, the reverted old wallet dropped).

- Re-vendor host-rust-core #709 at a0711ac2 with upstream's standard build-wasm.mjs: pairing-only wasm/web (runtime) plus wasm/testing (wasm-signing-host, test-host) for #362's signing worker. JS dist is byte-identical to the previous vendor.
- Chat's custody transport joins the local-wallet request methods served by the host frame; its old shared-wallet revision fence goes with the old wallet.
- Old-wallet-bound wiring (custody lease and contacts in page-core/SessionStore, wallet-in-other-tab page) is dropped here and re-expressed on #362 in the following commits.
- The local signing core passes the Coinage instance for Chat payments.
replghost added a commit that referenced this pull request Oct 12, 2026
Native Chat's private slots (main purse, device records, file chunks, product index), its attachment sources and the contacts directory now sit beside #362's local signing core instead of the removed test wallet. Polkadot App sessions are unchanged: their Chat stays on the phone and these slots stay refused.

- The host frame's custody lease is keyed by the local wallet record (a domain-separated SHA-256 of its entropy). Every operation rechecks the stored record, replacing the old shared-wallet revision fence, so forgetting or replacing the wallet ends the lease.
- Custody's own Web Lock gives single-tab exclusivity: leases are per token, a replacement core of the same page queues behind its predecessor, and another tab is refused as busy after a bounded wait. Acquisition runs beside boot, so only Chat operations wait on it and a refused tab's other products keep working.
- page-core creates the Chat host only for a local wallet core, shares custody storage and files across connections, scopes contact pickers per connection, binds contacts after activation and releases custody on dispose.
replghost added a commit that referenced this pull request Oct 12, 2026
Merges the restacked #291 (feat/jam-peer-transport-on-seity 5b791ae) into the Media integration layer. #291's new layers win (main's local wallet from #362, Chat custody under it, receiving revocation); the Media layer's own changes (5677871..e65c77c) are reapplied on top:

- Media TURN: nginx route, private include and deploy-nginx key handling kept on #291's deploy-nginx; the receiving nginx step passes the TURN secrets and the TURN smoke follows it. The identity proxy #291 dropped is not resurrected here; it returns with the wallet layer.
- Core storage compare-exchange and the permission refresh fan-out are ported onto #291's SessionStore (local option) and page core. Media connections and the notification host account follow the page core; the protocol frame's shared-auth slot locks and custody compareExchange are ported onto its flattened handlers.
- Semantic conflict: #255's local-wallet Chat custody wrapper now implements the Media storage contract (compareExchangeCoreStorage through custody for Chat slots, the host store otherwise; coreStorageChanged passes through), with a unit test.
- The old #238 wallet inspector and bridge-wallet.test.ts stay removed.
- Vendor: #335's own #1217 vendor kept for this merge; rebuilt in a separate commit.
- Docs: Media TURN and advertisement-lookup sections kept; #291's restack wording otherwise.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant