theLatticeTree (repo root): cmp docs/modules/fl-connect.js ../FreeLattice/docs/modules/fl-connect.js && echo SHARED_OK node docs/modules/connect-boot-probe.test.js # SMOKE_OK connect boot probe alpha v0.1 for t in docs/modules/*.test.js; do node "$t" >/dev/null 2>&1 && echo "PASS $t" || echo "FAIL $t"; done (prototype: all 15 Alpha module tests pass, including local-mind-probe, fl-connect, connect-heal-v04, garden-rooms, garden-thread) Prototype results (built on 7db2d94 / 395c761 with a faithful simulation of the Tree paste's fl-connect.js changes): both new smokes green; all FL connect/bridge smokes green except the five pre-existing failures above; tests/smoke.js ALL 3597 CHECKS PASSED; index == app; sw.js untouched; fl-connect.js identical across the two worktrees. ====================================================================== 11. WALK CHECKLIST (390x844 and 1280x900; Chrome; fake or real Ollama + LM Studio) ====================================================================== W1 Returning person (fl-welcomed true, last tab Chat), cold reload: - count requests to 127.0.0.1 in DevTools for 9s: about 16 (was 38). One full Bridge scan. - exactly ONE voice: the toast naming the real doors; no Chat suggest banner at the same time. - at 390px the toast is one tidy card (max 92vw), not a tall column. - tap the toast -> Connect, both cards: "Ollama is ready, pick a mind", "LM Studio is ready, pick a mind". W1b Returning person who chose the SECOND model (qwen2.5) in Connect, cold reload: - fl_ollamaModel is still qwen2.5, fl_modelSource still user; send a chat: the POST model is qwen2.5. W2 New person, cold freelattice.com/#connect: - lands on Connect once; no toast; no welcome overlay on top; about 12 requests (was 73). - tap another tab during boot: it stays there (no yank back to Connect or Garden). W3 Tap an LM Studio model in Connect: - fl_provider = lmstudio, fl_lmstudioHost = 127.0.0.1:1234, fl_ollamaHost unchanged (null), the tapped button has aria-pressed="true" and .is-chosen, status reads "Local · ", chat sends to 127.0.0.1:1234/v1/chat/completions. - tap an Ollama model afterwards: the mark moves to the Ollama card. W4 Chat Box field (Chat > the Box row): - default shows "This computer only", the switch off, the line hidden. - type 8.8.8.8 -> "That address is on the public internet, so it is blocked. Nothing was sent." and ZERO network requests. - type 192.168.1.50 with the switch off -> the home-network sentence, ZERO requests. - turn the switch on -> Kirk's line appears; type 192.168.1.50 once -> it is asked and saved (fl_homeNet_addr, fl_ollamaHost 192.168.1.50:11434); reload -> still on, still there. - turn the switch off (one tap) -> back to 127.0.0.1:11434; turn it on -> the address returns without retyping. - 8.8.8.8 with the switch ON is still refused. W5 Settings > Ollama Address: 192.168.1.50:11434 refused while off (v0.4 words + switch sentence); saved while on; 203.0.113.5 refused either way. W6 theLatticeTree: Settings > Connect lists LM Studio as its own card; Garden "Find local minds" right after Connect opens does not ask LM Studio a second time (DevTools); tapping an LM Studio model in Connect marks it and Find's list agrees ("LM Studio"). Screenshots from the prototype walk (for reference, not committed): W1 main vs boot at 390, W1 toast 390/1280, W1b toast tapped -> Connect, W2 main vs boot #connect, W3 LM Studio tapped, W4 switch off refused / on (390 and 1280). ====================================================================== 12. PRS ====================================================================== FreeLattice PR title: layer: one cold-start look, LM Studio in Connect, home-network switch (v-connect-boot-probe-v0) Body (short): F2 FlConnect.bootProbe (one in-flight look, 5s cache) + resolveOllamaBase join. F1 window.FlColdStart owns cold start: one look, land once, one voice. Old timers step aside. F3 LM Studio is a first-class door in Connect; no false "Yes, use Ollama"; LM Studio status words. F4 Kirk's switch: This computer only by default; "Also use a computer on my home network"; private IPv4 only (10/8, 172.16/12, 192.168/16); 169.254, names, public always refused; remembered; one tap reverts; future hook for signed remote minds. Settings address follows the same switch. Cold boot 38 -> 16 local requests; #connect 73 -> 12. Smoke: SMOKE_OK connect boot probe v0.1. Locks: root sw.js == main, docs/sw.js untouched, index == app, fl-connect.js == Alpha, no markers, inline scripts parse, textContent, no bare *, no confirm(). Depends on: env heal v0.1.1 (merged first) and Tree any-model v0.1. theLatticeTree PR title: layer: one shared look for Connect and Find, LM Studio door in Connect (v-connect-boot-probe-v0) Body (short): Shared fl-connect.js byte-identical with FreeLattice. local-mind-probe look() joins FlConnect.bootProbe and reuses its LM Studio / direct Ollama answer. LM Studio taps merge as the LM Studio door (/v1/models). Test: SMOKE_OK connect boot probe alpha v0.1. Depends on Tree any-model v0.1. Never push to main directly. Never force-push. Merge FreeLattice first, then Alpha, and re-run the cmp on both mains after merge. ====================================================================== 13. HELD BACK / NEXT (not in this paste) ====================================================================== - BrowseModels.init (app.html ~55045) still makes its own /api/tags call at boot. Next: read FlConnect.peekBootProbe() first. (It is the second tags call in W1.) - The 8s Connect loop still uses a fresh probe every tick when the panel is open; fine, it is the person's own look. - Home network for Alpha: not added (C7). - Signed remote minds: hook only (C10). No code path, no widened ranges. - Connect's own port field still accepts only a port on 127.0.0.1 (v0.4 rule unchanged). ====================================================================== APPENDIX A: FreeLattice docs/app.html, full exact diff vs main 7db2d94 (git apply --check clean on 7db2d94; index.html gets the same bytes by copy) ====================================================================== diff --git a/docs/app.html b/docs/app.html index fa946fa..b4fd82e 100644 --- a/docs/app.html +++ b/docs/app.html @@ -2037,6 +2037,13 @@ header .mantra { #flBoxPointerStatus[data-fl-box-status="ready"] { color: #34d399; } #flBoxPointerStatus[data-fl-box-status="cors-blocked"] { color: #fbbf24; cursor: pointer; } #flBoxPointerStatus[data-fl-box-status="unreachable"] { color: #f87171; } +/* v-connect-boot-probe-v0 (F4): home-network switch under the Box field */ +.fl-homenet { flex: 1 1 100%; display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; font-size: 0.72rem; color: var(--text-muted); font-family: Georgia, serif; } +.fl-homenet-mode { color: #a5f3fc; } +.fl-homenet-switch { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; cursor: pointer; } +.fl-homenet-switch input { width: 18px; height: 18px; accent-color: #34d399; } +.fl-homenet-line, .fl-homenet-refusal { flex: 1 1 100%; margin: 0; line-height: 1.45; } +.fl-homenet-refusal { color: var(--gold, #e8b019); } .chat-overflow-btn { background: transparent; border: none; @@ -11749,6 +11756,8 @@ input:checked + .sf-slider:before { transform: translateX(16px); } transform: translateX(-50%) translateY(0); } .fl-ollama-toast .fl-toast-icon { font-size: 1.2rem; } +/* v-connect-boot-probe-v0: honest door names need room on a phone */ +.fl-ollama-toast { width: max-content; max-width: min(92vw, 440px); box-sizing: border-box; } .fl-ollama-toast .fl-toast-close { margin-left: 12px; background: none; @@ -16507,6 +16516,13 @@ textarea.ag-input { min-height: 60px; resize: vertical; font-family: inherit; } + +
+ This computer only + + + +