Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
178f013
feat(wallet): OpenLV remote-signer core (protocol, broker, backend)
flotob Jul 8, 2026
9629517
feat(wallet): phone account model and Connect Phone flow
flotob Jul 8, 2026
2359581
feat(wallet): remote signing UX with QR panel across approval flows
flotob Jul 8, 2026
95f175d
feat(wallet): bridge page for third-party phone wallets + full E2E
flotob Jul 8, 2026
8cae53b
chore(wallet): point bridge QR at interim test deployment
flotob Jul 9, 2026
9addbc2
fix(wallet): switch the phone wallet to the tx chain before sending
flotob Jul 9, 2026
624ff4d
feat(openlv): iife bundle flavor + iOS cross-stack test harness
flotob Jul 9, 2026
870c209
feat(openlv): harness /reset endpoint for multi-test runs
flotob Jul 9, 2026
139a6e1
fix(bridge): lazy wallet connect + "Open in Freedom app" button
flotob Jul 9, 2026
9e08dd2
feat(openlv): harness tx mode for the iOS broadcast-mining test
flotob Jul 9, 2026
d9239ee
refactor(openlv): move the bridge page to its own repo
flotob Jul 9, 2026
830e1d5
fix(e2e): skip remote-signing spec when freedom-bridge isn't checked out
flotob Jul 9, 2026
0c234cd
fix(tests): correct broker-helper path in the openlv protocol test
flotob Jul 9, 2026
17dd043
fix(tests): WebSocket polyfill for the openlv protocol test on Node 20
flotob Jul 9, 2026
34cc89e
feat(wallet): SafeExecutor core for Safe smart accounts
flotob Jul 9, 2026
50c7655
feat(wallet): Safe account model, creation wizard, and activation states
flotob Jul 10, 2026
3310094
fix(wallet): breathing room between action buttons and safe status card
flotob Jul 10, 2026
8aa9814
feat(wallet): Safe sends with signature checklist and pending persist…
flotob Jul 10, 2026
5e49958
fix(wallet): resolve safe owner indexes to addresses in the send path
flotob Jul 10, 2026
6546a76
test(e2e): Safe lifecycle through the real UI against a Gnosis fork
flotob Jul 10, 2026
b15e89d
feat(wallet): asynchronous Safe signing board
flotob Jul 10, 2026
ba6aac9
feat(wallet): unfinished-transactions row with pending Safe overview
flotob Jul 10, 2026
b871f5b
fix(wallet): fail over between public signaling relays for phone signing
flotob Jul 10, 2026
6510ccf
fix(wallet): walk through vault unlock instead of erroring in Safe flows
flotob Jul 10, 2026
45f729d
feat(wallet): EIP-1271 SafeMessage signing sessions
flotob Jul 10, 2026
ade4ba1
feat(wallet): Safe accounts as dApp wallets (connect, sign, send)
flotob Jul 10, 2026
d8db024
test(wallet): stop remote-session unit tests probing live brokers
flotob Jul 10, 2026
15ab32d
build(dist): refuse to ship the interim remote-signing bridge origin
flotob Jul 12, 2026
24ef088
fix(wallet): bind SafeMessage sessions to their requesting page
flotob Jul 12, 2026
ec746ff
fix(wallet): discard a Safe's pending state when the Safe is deleted
flotob Jul 12, 2026
f9c9010
chore: merge feature/openlv into feature/safe-accounts
flotob Jul 12, 2026
ba359e4
fix(dapp): bind provider responses to the requesting document
flotob Jul 12, 2026
1c7bb95
fix(wallet): withdraw the Safe signing board when its document navigates
flotob Jul 12, 2026
05f82a3
fix(wallet): fence stale board continuations behind a session epoch
flotob Jul 12, 2026
1e038bd
Merge main into feature/openlv
flotob Jul 12, 2026
6ec033f
Merge main into feature/safe-accounts
flotob Jul 12, 2026
233e59d
spike: Myotis P2P light-client tier for ENS resolution (experimental)
flotob Jul 28, 2026
28845ff
live e2e: evaluate via process.mainModule.require (no require global)
flotob Jul 28, 2026
b75dfe0
myotis: consume the v0.1.3 release — fetch script + addon discovery
flotob Aug 4, 2026
fb1d092
myotis: readiness honors elHunting; e2e retries until the tier takes …
flotob Aug 4, 2026
e7f3913
myotis: packaging + user-facing integration
flotob Aug 4, 2026
962c43c
Merge remote-tracking branch 'origin/main' into feat/myotis-spike
flotob Aug 4, 2026
608dd90
Address review: packaging gate, ready-transition cache sweep, honest …
flotob Aug 4, 2026
0607231
Address review round 2: all-target fetch, capability-gated toggle
flotob Aug 4, 2026
0c1bb0e
ci(myotis): test live resolution on shipped platforms
flotob Aug 4, 2026
73dac1d
test: wait for servable myotis reads in e2e
flotob Aug 4, 2026
76dce7f
ci(myotis): recover from unservable peer pools
flotob Aug 4, 2026
f07d60a
ci(myotis): fully reset failed peer pools
flotob Aug 4, 2026
37c7c8d
feat(myotis): integrate embedded client with profiles
flotob Aug 4, 2026
12ce9d2
feat(myotis): label Ethereum node and show version
flotob Aug 4, 2026
a584845
fix(renderer): widen ENS trust popover
flotob Aug 4, 2026
d9743c1
feat(renderer): unify name-resolution trust details
flotob Aug 4, 2026
c16bc81
feat(myotis): integrate Ethereum name resolution reads
flotob Aug 4, 2026
65a6007
feat(renderer): unify name resolution settings
flotob Aug 4, 2026
9c97006
test(myotis): cover verified resolution preference
flotob Aug 4, 2026
6c6e164
fix(renderer): improve name resolution controls
flotob Aug 5, 2026
7669977
fix(renderer): shorten Ethereum node label
flotob Aug 5, 2026
b715301
feat(myotis): add verified multi-chain data routing
flotob Aug 5, 2026
0b5a741
fix(wallet): keep transaction fee quotes source-coherent
flotob Aug 6, 2026
49aeff1
fix(ens): honor resolution policy for reverse lookups
flotob Aug 6, 2026
a91e707
fix(ens): trace reverse resolution fallback
flotob Aug 6, 2026
5ae55f3
fix(ens): accept authenticated Myotis optimistic reads
flotob Aug 6, 2026
acd2bc5
fix(ens): recover from transient Colibri failures
flotob Aug 7, 2026
8f8319e
fix(ens): make Myotis fallback lifecycle-safe
flotob Aug 7, 2026
5b65ca6
build(myotis): update native addon to v0.1.4
flotob Aug 7, 2026
3d1a425
build(myotis): update native addon to v0.1.5
flotob Aug 10, 2026
e7d4e06
build(myotis): update native addon to v0.1.6
flotob Aug 11, 2026
ffd2ec8
fix(chain): honour block tags on Myotis reads and restore fee headroom
meinharrd Aug 11, 2026
d1c186a
fix(chain): hex-encode call-object quantities before RPC dispatch
meinharrd Aug 11, 2026
d6f145a
fix(chain): fall through when Myotis cannot honour an eth_call's shape
meinharrd Aug 11, 2026
73f0972
fix(chain): honour the standardized `input` calldata alias
meinharrd Aug 11, 2026
67721c6
build(myotis): ship v0.1.7 with reviewed routing fixes
flotob Aug 12, 2026
3a2bec4
fix(myotis): address the 7 review minor findings
meinharrd Aug 12, 2026
105e6fd
chore(myotis): merge latest main
flotob Aug 14, 2026
51ce55c
chore(myotis): merge current main
flotob Aug 14, 2026
ee35f68
chore(myotis): merge settings CI gate
flotob Aug 14, 2026
dab08c2
fix(myotis): avoid restart-induced native E2E failures
flotob Aug 14, 2026
f1faab0
test(myotis): retry transient verified record reads
flotob Aug 14, 2026
56bf7fc
chore(wallet): merge OpenLV foundation
flotob Aug 16, 2026
8aab7af
chore(wallet): merge Safe accounts foundation
flotob Aug 16, 2026
833c7fa
chore(ethereum): merge Myotis foundation
flotob Aug 16, 2026
3afcbbd
feat(onchain): add native contract-hosted apps
flotob Aug 16, 2026
97e6da6
chore(onchain): merge latest main
flotob Aug 16, 2026
bda6126
feat(onchain): show verified app provenance
flotob Aug 17, 2026
9e3c8f8
feat(renderer): show standard web3 URLs for onchain apps
flotob Aug 17, 2026
3e0caa5
feat(networks): adapt read fallback by workload
flotob Aug 17, 2026
01dd486
perf(networks): reuse quorum reads in Direct
flotob Aug 17, 2026
feb59c6
fix(wallet): inject provider before page scripts
flotob Aug 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
172 changes: 168 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ permissions:

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# Feature-branch supersession is useful, but main's long native network
# proof must be allowed to finish even if another merge lands meanwhile.
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
test:
Expand Down Expand Up @@ -131,9 +133,171 @@ jobs:
FREEDOM_IPFS_NATIVE_SMOKE_LIVE: '0'
FREEDOM_IPFS_NATIVE_SMOKE_ISSUE_102: '1'

# Settings navigation and persistence are shipped control surfaces. Exercise
# their real renderer/webview integration so malformed sidebar markup and
# broken section transitions cannot pass unit-only CI.
# Load every native Myotis addon target that release packaging requires.
# The live network proof below remains one representative architecture per
# shipped OS; this fast matrix closes the packaging gap for Intel macOS and
# ARM64 Linux without multiplying the expensive cold-sync workload.
myotis-addon-load:
strategy:
fail-fast: false
matrix:
include:
- os: macos-14
target: darwin-arm64
addon: myotis-bin/mac-arm64/myotis-node.node
- os: macos-15-intel
target: darwin-x64
addon: myotis-bin/mac-x64/myotis-node.node
- os: ubuntu-latest
target: linux-x64
addon: myotis-bin/linux-x64/myotis-node.node
- os: ubuntu-24.04-arm
target: linux-arm64
addon: myotis-bin/linux-arm64/myotis-node.node
- os: windows-latest
target: win32-x64
addon: myotis-bin/win-x64/myotis-node.node
runs-on: ${{ matrix.os }}
timeout-minutes: 15

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm

- name: Install dependencies
run: npm ci --ignore-scripts

- name: Download this runner's Myotis addon
run: npm run myotis:download
env:
GITHUB_TOKEN: ${{ github.token }}
MYOTIS_DOWNLOAD_TARGET: ${{ matrix.target }}

- name: Load addon and verify ABI
run: node -e "const addon=require('./'+process.env.MYOTIS_ADDON); const abi=addon.init(); if(abi!==22) throw new Error('Expected ABI 22, got '+abi); console.log(process.platform+'-'+process.arch+' ABI '+abi);"
env:
MYOTIS_ADDON: ${{ matrix.addon }}

# Real Myotis release-addon + Freedom resolver E2E on every operating
# system we ship. One production-app launch cold-syncs over libp2p/devp2p,
# proves direct verified Ethereum + Gnosis reads, then exercises ENS plus
# WNS/GNS through Freedom's Myotis resolver tier. Avoid a raw-smoke launch
# followed by an immediate app restart: persisted peer backoff can leave the
# second client temporarily unable to reacquire a usable snap peer even
# though the first launch just served verified reads.
#
# Cold sync can take 30-40 minutes. Cache restore/save are split so a timed
# out first attempt still preserves its cleanly-stopped partial sync; a
# re-run continues from that snapshot instead of starting from zero.
myotis-native-e2e:
# A feature branch with an open PR otherwise launches this 30-40 minute
# live-network matrix twice (push + pull_request), doubling cost and exposure
# to transient peer selection. Keep PR/manual gates and post-merge coverage on main.
if: github.event_name != 'push' || github.ref == 'refs/heads/main'
strategy:
fail-fast: false
matrix:
include:
- os: macos-14
target: darwin-arm64
addon: myotis-bin/mac-arm64/myotis-node.node
- os: ubuntu-latest
target: linux-x64
addon: myotis-bin/linux-x64/myotis-node.node
- os: windows-latest
target: win32-x64
addon: myotis-bin/win-x64/myotis-node.node
runs-on: ${{ matrix.os }}
timeout-minutes: 190

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm

- name: Install Linux native USB build dependency
if: runner.os == 'Linux'
uses: ./.github/actions/install-linux-native-deps

- name: Install dependencies
run: npm ci

- name: Install Playwright system dependencies
if: runner.os == 'Linux'
run: npx playwright install-deps

- name: Download Myotis release addons
run: npm run myotis:download
env:
GITHUB_TOKEN: ${{ github.token }}
MYOTIS_DOWNLOAD_TARGET: ${{ matrix.target }}

- name: Assert native-addon target
run: node -e "const actual=process.platform+'-'+process.arch; const expected=process.env.EXPECTED_TARGET; if(actual!==expected) throw new Error('expected '+expected+', got '+actual); console.log(actual);"
env:
EXPECTED_TARGET: ${{ matrix.target }}

- name: Restore Myotis sync snapshot
id: myotis-cache
uses: actions/cache/restore@v4
with:
path: ${{ runner.temp }}/myotis-data
key: myotis-${{ hashFiles('scripts/fetch-myotis.js') }}-${{ matrix.target }}-${{ github.run_id }}-${{ github.run_attempt }}
restore-keys: |
myotis-${{ hashFiles('scripts/fetch-myotis.js') }}-${{ matrix.target }}-

- name: Download IPFS native addon
run: npm run ipfs:download
env:
GITHUB_TOKEN: ${{ github.token }}

- name: Run Freedom Myotis resolver E2E
shell: bash
env:
MYOTIS_DATA_DIR: ${{ runner.temp }}/myotis-data
MYOTIS_NODE_PATH: ${{ github.workspace }}/${{ matrix.addon }}
MYOTIS_E2E_READY_TIMEOUT_MIN: '75'
FREEDOM_TEST_HIDE_WINDOW: '1'
run: |
if [ "$RUNNER_OS" = "Linux" ]; then
xvfb-run -a npm run test:e2e:live -- test-e2e/live/myotis-ens.spec.js
else
npm run test:e2e:live -- test-e2e/live/myotis-ens.spec.js
fi

- name: Save Myotis sync snapshot
if: always()
uses: actions/cache/save@v4
with:
path: ${{ runner.temp }}/myotis-data
key: myotis-${{ hashFiles('scripts/fetch-myotis.js') }}-${{ matrix.target }}-${{ github.run_id }}-${{ github.run_attempt }}

- name: Upload Playwright traces and screenshots
if: failure()
uses: actions/upload-artifact@v4
with:
name: myotis-native-e2e-${{ matrix.target }}-traces
path: |
test-results/
playwright-report/
if-no-files-found: ignore
retention-days: 14

# Settings navigation, persistence, and chain policy are shipped control
# surfaces. Exercise their real renderer/webview integration so malformed
# sidebar markup, broken transitions, and Myotis policy regressions cannot
# pass unit-only CI.
e2e-settings:
runs-on: ubuntu-latest
timeout-minutes: 15
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ tmp/
*.swp
.env
ant-bin/
myotis-bin/
ant-data/
assets/adblock/
ipfs-bin/
Expand Down
Loading
Loading