| … | … | @@ -747,7 +747,12 @@ export async function bootMultiDevice ({ storage, dids = [], deviceMnemonic = nu |
| 747 | 747 | if (node.overlay) for (const conn of swarm.connections) { try { node.overlay.attachProtocol(Protomux.from(conn)); logOverlayAttachResult(node.did, node.overlay); if (node.reconcile) node.reconcile() } catch (err) { logOverlayAttachFail(node.did, err) } } |
| 748 | 748 | console.log(JSON.stringify({ msg: 'multi-did: serving DID', did: node.did, handle: d.handle || null, controlKey: node.control ? node.control.serverKey : null })) |
| 749 | 749 | } catch (e) { |
| 750 | | console.error(JSON.stringify({ msg: 'multi-did: failed to boot DID', did: d.did, error: e.message })) |
| 750 | // WITH THE STACK. A per-DID boot failure is reported by MESSAGE alone on every node in the fleet, |
| 751 | // including a phone with no filesystem access and no debugger — so `Cannot read properties of |
| 752 | // undefined (reading 'length')` named a JS idiom and nothing else, and localizing it meant guessing |
| 753 | // at shapes and rebuilding an APK per guess. The message is the one thing that cannot identify the |
| 754 | // site; the stack is free and is the whole diagnosis. |
| 755 | console.error(JSON.stringify({ msg: 'multi-did: failed to boot DID', did: d.did, error: e.message, stack: e.stack })) |
| 751 | 756 | } |
| 752 | 757 | } |
| 753 | 758 | await swarm.flush().catch(() => {}) |