FLINT_NEXT_CONNECT_BOOT_PROBE_F1_F2_F3_F4_v0.1 CHANGELOG 2026-09-29 4:38 PM MDT: FLINT_HEAL_MODEL_CHOICE_SURVIVES_RELOAD_v0.1.1_tiny.txt now lands AFTER the Tree paste and BEFORE this paste. Appendix A (app.html) and Appendix B (fl-connect.js) are unchanged and still apply with plain git apply on current main + Tree stand-in + that heal (the heal's hunks sit in FLActiveModel, applyReady, flTestLMStudio, the Cascade and the older auto paths; none share context with F1-F4). F1 never picks a model, so it keeps the person's choice. Appendix D (the FL smoke) gains one F1 block: the owner source never writes a model, a cold start with fl_ollamaModel=qwen2.5 and fl_modelSource=user leaves both, and the heal's guard is present (ensure(), honor(), the Cascade asks honor, no FLActiveModel.set(models[0], ..., 'user')). That block needs the heal, so this smoke fails if the heal was skipped. Walk W1b added. The docs appendices (G, H) append at the end or above '## Out of scope for this brick'; if a hunk is rejected because the heal's section is there, add by text. CHANGELOG 2026-09-29 2:28 PM MDT: re-check commands and the copy step now name ~/FreeLattice and ~/FreeLattice-Alpha (no content change). PRs #124/#122/#123 touch none of this paste's code files (app.html, index.html, fl-connect.js, Alpha pages); Flint.html and ledger inserts go by text: right above

and right above "## Out of scope". Local paths: FreeLattice is ~/FreeLattice and the Tree (repo Chaos2Cured/FreeLattice-Alpha, site thelatticetree.com) is ~/FreeLattice-Alpha on Flint's machine. Wherever this paste says "theLatticeTree" it means that repo; "../FreeLattice" from inside ~/FreeLattice-Alpha is correct as written. CHANGELOG 2026-09-28 9:36 PM MDT: FLINT_HEAL_MODEL_CHOICE_STICKS_v0.1_tiny.txt lands after the env heal and BEFORE the Tree paste. Text anchors in this paste are unchanged, and Appendix A (app.html) and Appendix B (fl-connect.js) still apply with plain git apply after env heal + model choice heal + Tree (verified; offsets only). Line shifts from that heal: app.html +21 from settingsSetMode, +23 from flSaveOllamaHost/FLBoxPointer/owAutoDetect/FLAutoModel onward; fl-connect.js remember() +7, open() and below +33 to +38. Its markUserChoice records Ollama taps as the user's choice; this paste's rememberLmStudio -> flUseLmStudioMind already records LM Studio taps, so they agree. Ledger and sister-doc appendices: insert by text (both heals add entries above '## Out of scope'). One cold-start look (F2), one cold-start owner (F1), LM Studio as a first-class mind in Connect (F3), and Kirk's home-network switch for the Chat Box field (F4). Both repos. Shared fl-connect.js stays byte-identical. Marker: v-connect-boot-probe-v0 Smoke (FL): SMOKE_OK connect boot probe v0.1 (docs/scripts/smoke-connect-boot-probe.js) Smoke (Alpha): SMOKE_OK connect boot probe alpha v0.1 (docs/modules/connect-boot-probe.test.js) From: Kirk (asked 2026-09-28, 8:49 PM MDT), prepared by Grok Bot for Flint Temperature: green braided gold, one lantern lit at the door instead of ten, and a second porch light that only turns on for the house next door. ====================================================================== 0. READ THIS FIRST: order, mains, locks ====================================================================== 0.1 Order (do not reorder): 1) FLINT_HEAL_AGENT_BRIDGE_ENV_v0.1.1_tiny.txt (FreeLattice only, security, goes first) 2) FLINT_NEXT_TREE_ANY_MODEL_v0.1.txt (both repos; adds mergeFound, MODEL_CAP, doorNameFor, chosenModelName, aria-pressed, is-chosen, bridged look asks other DOORS, tryAddress 127.0.0.1 only) 2b) FLINT_HEAL_MODEL_CHOICE_SURVIVES_RELOAD_v0.1.1_tiny.txt (FreeLattice app.html + shared fl-connect.js one Look again; lands after Tree) 3) THIS paste (both repos) This paste anchors on what the Tree paste adds. It reuses mergeFound, doorNameFor, chosenModelName and the aria-pressed / is-chosen mark. It never re-adds them. 0.2 Mains checked just before writing (re-check before anchoring): FreeLattice (Chaos2Cured/FreeLattice) main = 7db2d94 "ci: Update Primer deployment state" This is a primer-only CI commit on top of a80c8e4 (#121). App code is identical to a80c8e4. All app.html line numbers below are 7db2d94 = a80c8e4 lines. theLatticeTree (Alpha) main = 395c761 "layer: connect heal v0.4 (Settings Connect visible at 390px) (#83)" docs/modules/fl-connect.js is byte-identical on both mains today (cmp clean). After the env heal and the Tree paste land, line numbers move. Anchor on the quoted TEXT, not the numbers. Numbers are given as "main N" (7db2d94 / 395c761) and, for fl-connect.js, "post-Tree ~N" (from a faithful simulation of the Tree paste; the real Tree merge may differ by a few lines). Re-check commands: git -C ~/FreeLattice fetch origin && git -C ~/FreeLattice log --oneline -3 origin/main git -C ~/FreeLattice-Alpha fetch origin && git -C ~/FreeLattice-Alpha log --oneline -3 origin/main cmp ~/FreeLattice/docs/modules/fl-connect.js ~/FreeLattice-Alpha/docs/modules/fl-connect.js grep -n "mergeFound\|chosenModelName\|doorNameFor" ~/FreeLattice/docs/modules/fl-connect.js (must show the Tree paste landed before you start step A) 0.3 Locks (every one holds; the smoke checks most of them): - Layer, never delete. Old code paths stay; they step aside when the new owner is present. - Root sw.js byte-identical to main. docs/sw.js untouched. (git diff --name-only shows neither.) - index.html byte-identical to docs/app.html (FreeLattice). Copy after every app.html edit. - Shared docs/modules/fl-connect.js byte-identical across both repos. - No conflict markers anywhere. Every inline and before "

This computer only
F.2 CSS. After #flBoxPointerStatus[data-fl-box-status="unreachable"] { color: #f87171; } (main 2039): .fl-homenet (full-width flex row, 0.72rem, muted), .fl-homenet-mode (#a5f3fc), .fl-homenet-switch (min-height 32px, tap target), input 18px accent #34d399, .fl-homenet-line / .fl-homenet-refusal full width, refusal in gold. (Appendix A first hunk.) F.3 FLHomeNet module. Insert right ABOVE the FLBoxPointer header block // ═══... // FLBoxPointer — v5.79.41-chat-box-pointer (main 34432), i.e. after window.flSaveOllamaHost = flSaveOllamaHost;. Header comment states the ranges, the refusals and the future hook (exact text in Appendix A). API: zoneOf(raw) 'this' | 'home' | 'public' | 'name' | 'invalid', from new URL(...).hostname isOn() localStorage fl_homeNet === 'on' allows(raw) 'this' always; 'home' only while on; a '/'-relative same-origin proxy path (/ollama) is allowed because it never leaves the page's own origin address() fl_homeNet_addr useAddress(raw, kind) home + on only: writes fl_homeNet_addr and fl_ollamaHost (or fl_lmstudioHost for kind 'lmstudio' / port 1234), then forget() refusalFor(raw) plain sentences, each ending "Nothing was sent.": public: "That address is on the public internet, so it is blocked. Nothing was sent." name: "Type the number address, like 192.168.1.50. A name can point anywhere, so names are not used. Nothing was sent." home while off: "That is a computer on your home network. Turn on \"Also use a computer on my home network\" beside the Box field in Chat to use it. Nothing was sent." invalid: "That does not look like an address. Nothing was sent." setOn(on) one tap. On: fl_homeNet='on', remembered address written back. Off: fl_homeNet removed, non-loopback fl_ollamaHost / fl_lmstudioHost removed, fl_homeNet_addr kept. Then forget(), say(''), paint(), FLBoxPointer.syncFromStorage, input value, noteStatus. migrate() once (fl_homeNet_seen), per choice C8. init() migrate + paint + bind the switch 'change' once. paint() mode words ("This computer only" / "This computer and my home network"), checkbox + aria-checked, the line (textContent = LINE, hidden unless on), Box placeholder ("127.0.0.1:11434" / "192.168.1.50"). say(msg) #flHomeNetRefusal textContent + hidden. LINE Kirk's line, exact. Also: window.flHomeNetAllowsBase(b) (small helper for other callers). F.4 getOllamaBaseUrl wrapper. In the same block as C.2, after it: var _flBaseUrlNow = getOllamaBaseUrl; getOllamaBaseUrl = function () { var b = _flBaseUrlNow(); if FLHomeNet exists and !FLHomeNet.allows(b): flManualBaseFirst() || (fl_bridgePort, not 11434 -> http://127.0.0.1:) || FL_OLLAMA_LOCAL return b; }; So a public or (switch-off) home address saved anywhere is never used for chat. F.5 FLBoxPointer: persist(norm) first lines: refuse (return false) when !FLHomeNet.allows(norm.host); record a home host into fl_homeNet_addr. Plus the flForgetLocalLook line (C.3). probe(raw) after the "Need a URL or IP" invalid return: when !FLHomeNet.allows(norm.host): paint('unreachable', 'Not used'); FLHomeNet.say(FLHomeNet.refusalFor(norm.host)); return { status: 'refused', ... } BEFORE any fetch. Otherwise FLHomeNet.say(''). init(): first line FLHomeNet.init(). F.6 flSaveOllamaHost (Settings > Ollama Address, main 34412): if (!flWriteOllamaHostLoopbackOnly(val)) { -> var _flHomeOk = false; try { if (FLHomeNet && FLHomeNet.zoneOf(val) === 'home' && FLHomeNet.isOn()) _flHomeOk = FLHomeNet.useAddress(val, 'ollama'); } catch (eHn) {} if (!_flHomeOk && !flWriteOllamaHostLoopbackOnly(val)) { and after the unchanged v0.4 refusal text, append ' ' + FLHomeNet.refusalFor(val) (guarded). All FLHomeNet uses are typeof-guarded so the v0.4 vm test (which loads this function alone) stays green. flSaveLMStudioHost (main 34700): refuse disallowed values with the same words into #lmstudioTestResult; a home value while on goes through useAddress(val, 'lmstudio'). getLMStudioBase wrapper after window.flSaveLMStudioHost: a disallowed saved host falls back to 'http://127.0.0.1:1234'. F.7 Why no confirm and no approval screen: the switch itself is the consent, it is visible next to the field it governs, it is remembered, and one tap undoes it. The line under it says the rule in plain words. The refusal says what happened ("Nothing was sent."). ====================================================================== 9. TESTS, SMOKE LINES, DOCS, LEDGER ====================================================================== 9.1 FreeLattice: new docs/scripts/smoke-connect-boot-probe.js (full file: Appendix D). Prints "SMOKE_OK connect boot probe v0.1". Covers: F2 three bootProbe callers -> one Ollama tags fetch + one LM Studio fetch, same report; reuse inside BOOT_TTL_MS with zero new fetches; fresh:true looks again; setManualHost forgets; no timers in bootProbe. F2 resolveOllamaBase wrapper (extracted from app.html, run in vm): three callers one look, reuse, flForgetLocalLook, a value written elsewhere is never hidden, flSeedLocalLook. F1 every old boot timer steps aside (detectOnLoad, flBridgeDetectBoot, boot owAutoDetect, Zero-Click, autoDiscover, goConnect); appBooted called; switchTab notes tabs; landing decides deep link / picked tab first; welcome never lands over Connect or late; toast checks #flWelcomeOverlay and #tab-connect; #flOllamaToastText exists. F1 owner runtime in vm: exactly one look, exactly one voice, chip painted, cache seeded, discovery memory keeps LM Studio; silent while Connect shows; deep link read. F1 keeps the person's model: the owner never writes fl_ollamaModel/fl_modelSource; a cold start with qwen2.5 chosen ('user') leaves both; the v0.1.1 guard is in place (needs that heal). F3 Connect never asks a home-network LM Studio; both doors listed; render shows both "X is ready, pick a mind" cards with data-flc-door="lmstudio" and no false download card; LM Studio alone is a real mind; FreeLattice tap -> fl_provider lmstudio, fl_lmstudioHost 127.0.0.1:1234, fl_ollamaHost untouched, flUseLmStudioMind hook, chosenDoor 'lmstudio'; Tree tap merges as 'LM Studio' /v1/models and Ollama tap unchanged; owAutoDetect has no "LM Studio detected!" and says "Yes, choose a mind" via textContent; status labels say LM Studio. F4 zone table (this/home/public/name incl. 172.32 public, 169.254.169.254 public, 100.64 public, [fd00::1] public, 3232235777 home, 0x7f.1 this); default off; allows; setOn on/off/on round trip with the address kept; Kirk's LINE exact; migration of old public (set aside) and home (switch on) addresses; getOllamaBaseUrl wrapper; Box field refuses public and switch-off home with ZERO fetches and says why; asks the home box while on and remembers it; Settings save off/on/public-on; switch markup and words. Locks: index.html === docs/app.html; root sw.js === origin/main:sw.js; neither sw.js in the diff; no confirm( / em dash / bare * origin / data-carrying innerHTML in added lines; no conflict markers in docs, index.html, tests; every inline script parses; fl-connect parses. Mutation check done while building: removing the in-flight join, the owner gates, the LM Studio branch, or the FLHomeNet refusal each makes this smoke fail. 9.2 Optional tests/smoke.js block (assert(name, cond) style), if you want the ALL count to move: assert('boot probe: FlConnect.bootProbe shared', /function bootProbe\(opts\)/.test(flConnectSrc)); assert('boot probe: FlColdStart owner', /window\.FlColdStart = \(function/.test(appHtml)); assert('boot probe: home-network line exact', appHtml.indexOf('Only addresses inside your home network are allowed (like 192.168.x.x). Public internet addresses are always blocked.') !== -1); assert('boot probe: 169.254 not a home range', !/a === 169 && b === 254\) return 'home'/.test(appHtml)); (Use whatever variable names tests/smoke.js already has for app.html and fl-connect.js.) Not required: the prototype kept tests/smoke.js unchanged and it reports ALL 3597 CHECKS PASSED. 9.3 Alpha: new docs/modules/connect-boot-probe.test.js (full file: Appendix E). Prints "SMOKE_OK connect boot probe alpha v0.1". Loads the shared fl-connect.js and local-mind-probe.js in one vm: Connect's bootProbe then Garden's look() -> LM Studio asked once and direct Ollama asked once in total, Find still lists Ollama and LM Studio; an LM Studio tap merges as 'LM Studio' at http://127.0.0.1:1234/v1/models; without mergeFound the fallback entry keeps /v1/models; lmStudioBase stays 127.0.0.1. After the Tree paste, add one case: a helped-Bridge stub + LM Studio -> the bridged "others" loop reuses the shared LM Studio answer (one /v1/models fetch in total). 9.4 Docs. FreeLattice: new docs/library/CONNECT_BOOT_PROBE_v0.md (full text: Appendix F). Alpha: append a "## Connect boot probe v0.1" section to docs/library/CONNECT_PORT_PICKER_SISTER_v0.md (Appendix G). 9.5 Ledger (FreeLattice docs/library/FRACTAL_FAMILY_LEDGER_v0.md). Insert right ABOVE the line ## Out of scope for this brick after the "---" that closes the newest entry (the env heal v0.1.1 entry if it landed first, else Connect heal v0.4): ### 2026-09-28 · Flint · family builder · Connect boot probe v0.1 (F1, F2, F3, F4) Layers one cold-start look on FreeLattice: `FlConnect.bootProbe()` shares one in-flight promise with a 5 second cache for Connect, the toast, autoDiscover, Zero-Click and the Bridge detect (F2) · `window.FlColdStart` owns the cold start and speaks once, never over Connect or the welcome overlay (F1) · LM Studio is a first-class door in Connect with tap to choose, and the badge stops saying "Yes, use Ollama" when LM Studio answered (F3) · Kirk's home-network switch: "This computer only" by default, "Also use a computer on my home network" when on, private IPv4 only, public always refused, one tap reverts (F4). Returning cold boot went from about 38 local requests to 16 (one Bridge scan instead of three, and LM Studio asked once). Shared `fl-connect.js` matches Alpha byte for byte. Soft leave root sw.js identical to main; docs/sw.js untouched. Soft paste: Named five stay five · Family uncapped · Quiet Room shut. Love: the house looks once, speaks once, and only opens the side door Kirk chose. **Temperature:** green braided gold, one lantern lit at the door instead of ten, and a second porch light that only turns on for the house next door. Soft door: [`CONNECT_BOOT_PROBE_v0.md`](CONNECT_BOOT_PROBE_v0.md) · [`../modules/fl-connect.js`](../modules/fl-connect.js). Marker `v-connect-boot-probe-v0`. --- ====================================================================== 10. ACCEPTANCE (run all; paste the tails in the PR) ====================================================================== FreeLattice (repo root): cp docs/app.html index.html && cmp index.html docs/app.html && echo INDEX_OK git diff --quiet origin/main -- sw.js docs/sw.js && echo SW_OK node docs/scripts/smoke-connect-boot-probe.js # SMOKE_OK connect boot probe v0.1 node docs/scripts/smoke-agent-bridge-lock.js # SMOKE_OK agent bridge env heal v0.1.1 + lock v0.1 for f in docs/scripts/smoke-connect-*.js docs/scripts/smoke-bridge-*.js; do node "$f" >/dev/null 2>&1 && echo "PASS $f" || echo "FAIL $f"; done node tests/smoke.js | tail -3 # ALL 3597 CHECKS PASSED (or more with 9.2) grep -rnE '^(<<<<<<<|=======|>>>>>>>)( |$)' docs index.html tests || echo NO_MARKERS Known pre-existing failures on main 7db2d94, unchanged by this paste (they fail on main too; do not "fix" them here): smoke-carry-forward, smoke-connect-card-yesno-wizard, smoke-fable-tech, smoke-phone-shine, smoke-proof-60s. Everything else in docs/scripts/smoke-connect-* and smoke-bridge-* passed on the prototype, including smoke-connect-heal-v0.4 (watch for the words "confirm()" and em dashes in any comment you add; it scans app.html additions). 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 + + + +
@@ -68589,6 +69000,8 @@ document.addEventListener('click', function(e) { try { var fromHash = !!(ev && ev.type === 'hashchange'); if (_flcUserMoved && !fromHash) return; + // v-connect-boot-probe-v0 (F1): the cold-start owner already landed Connect once + try { if (!fromHash && window.FlColdStart && FlColdStart.landed() === 'connect') return; } catch (eL0) {} var hash = (location.hash || '').replace(/^#/, ''); var q = ''; try { q = new URLSearchParams(location.search || '').get('tab') || ''; } catch (e0) {} @@ -68611,6 +69024,154 @@ document.addEventListener('click', function(e) { window.addEventListener('hashchange', goConnect); })(); +