B.2 In look() (main 241-243): var bridgeFirst = Promise.resolve(null); + var shared = null; // v-connect-boot-probe-v0: the one look Connect already made (if fresh) if (window.FlConnect && typeof window.FlConnect.probe === 'function') { - bridgeFirst = window.FlConnect.probe({ gesture: true }).then(function (report) { + var ask = (typeof window.FlConnect.bootProbe === 'function') + ? window.FlConnect.bootProbe({ gesture: true }) + : window.FlConnect.probe({ gesture: true }); + bridgeFirst = ask.then(function (report) { + shared = report || null; The helped-Bridge branch inside stays unchanged (Tree paste's via:'fl-connect' kept). B.3 DOORS path. On main (275-281) the non-bridged path is var jobs = DOORS.map(function (d) { return fetchDoor(d.url, 2500).then(...) change fetchDoor(d.url, 2500) -> askDoor(d, shared). AFTER the Tree paste, look() also has the bridged "others" loop return fetchDoor(d.url, 2500).then(function (r) { r.id = d.id; r.name = d.name; return r; }); change that one to askDoor(d, shared) too. Same timeouts, same single tap, same results shape (askDoor adds reused:true on reused answers; nothing reads it yet). B.4 Without FlConnect.bootProbe (older shared core, or a test that loads only local-mind-probe.js) look() fetches exactly as before. All existing Alpha tests stay green. ====================================================================== 5. STEP C (F2): FreeLattice app.html, one shared resolveOllamaBase look ====================================================================== C.1 Where: directly AFTER getOllamaBaseUrl()'s closing brace (main 34329-34331: return FL_OLLAMA_LOCAL; } ) and BEFORE the comment "// v5.43.6 (Opus): the /ollama same-origin proxy probe". Why here and not next to resolveOllamaBase: smoke-connect-port-picker.js extracts resolveOllamaBase's text up to "// Get the current Ollama base URL", and tests/smoke.js regexes getOllamaBaseUrl's body (needs .replace(/\/+$/,'') within 800 chars). Neither body is edited; both are WRAPPED after they are defined. C.2 Add (exact code, Appendix A hunk "@@ -34329,6 +34424,64 @@"): var FL_LOCAL_LOOK_TTL_MS = 5000; var _flResolveNow = resolveOllamaBase; var _flResolveInflight = null; var _flResolveAt = 0; var _flResolveValue = null; function flForgetLocalLook() { ...clears the three... ; FlConnect.forgetBootProbe() if present } function flSeedLocalLook(value) { _ollamaResolvedBase = value || null; _flResolveValue = ...; _flResolveAt = Date.now(); } resolveOllamaBase = function (forceRefresh) { if (_flResolveInflight) return _flResolveInflight; // join if (_flResolveAt && age < TTL && _ollamaResolvedBase === _flResolveValue) // reuse, only if return Promise.resolve(_flResolveValue); // nobody changed it var p = Promise.resolve(_flResolveNow(forceRefresh)).then(...store..., ...clear+rethrow...); _flResolveInflight = p; return p; }; window.flForgetLocalLook = flForgetLocalLook; window.flSeedLocalLook = flSeedLocalLook; The "_ollamaResolvedBase === _flResolveValue" check means any code that writes a new value to _ollamaResolvedBase (or nulls it, like every existing save path) is never hidden by the cache. C.3 Forget on every address change (one line each, all guarded with typeof): flSaveOllamaHost (main ~34426, after _ollamaResolvedBase = null;) flUseBridge (main ~31506, after _ollamaResolvedBase = null;) FLBoxPointer.persist (main ~34506, after try { _ollamaResolvedBase = null; } catch (e3) {}) FLHomeNet.forget (new, step F) fl-connect setManualHost / clearManualHost (step A.3, via forgetLooks) ====================================================================== 6. STEP D (F1 + F3 wiring): FreeLattice app.html, one cold-start owner ====================================================================== D.1 The owner. New inline and before "
Only addresses inside your home network are allowed (like 192.168.x.x). Public internet addresses are always blocked.