# LOOM 0.15.89 — Real-time AI replies, honest locations, profiles in Users

- **Bridge 1.1.0 — two lanes:** visitor chats run in their own lane and are never stuck behind
  conversation summaries or lead extraction (previously “End chat” → new chat waited for the whole
  summary). Admin → AI shows a banner with a download button when your bridge is out of date.
- **No forced model reloads:** LOOM no longer sends a context size unless you set one (new default
  0 = Ollama's own setting). A size different from what another app on the same Ollama uses made
  Ollama reload the model on every switch. Admin explains this next to the setting.
- **Smaller background jobs:** summaries and extraction write less (250 / 300 tokens).
- **Names:** test words (“Test”, “hi”, “asdf”, “admin”…) are never stored as a name; an already-saved
  junk name gives way to the signed-in account's name (kept in history).
- **New conversations start fresh:** returning visitors are recognised by name and contact details
  only; the assistant is told not to bring up earlier visits.
- **Journeys location from LOOM's network records** (correcting 0.15.86's claim that LOOM stores no
  IPs): approximate city / region / country / postal / ISP and the network address, with a fresh
  lookup in the detail view.
- **Users tab shows the Profile Vault** (“Captured profile”) for every person, with sources, history
  and edit — including browser profiles folded into the account they signed into.

# LOOM 0.15.88 — Leaner AI prompts

- **Combined mode no longer adds a second persona:** projects in “combined” context mode get LOOM's
  knowledge but not the LOOM assistant's “You are the LOOM assistant…” instruction, which conflicted
  with the project's own persona and lengthened every prompt. Admin → AI explains what combined
  mode costs.
- **Lighter lead extraction:** reads the last 12 messages instead of 40, and is skipped entirely after
  messages that can't contain new details (“ok”, “thanks”, “hi”) — one model call per turn instead
  of two in those cases.

# LOOM 0.15.87 — Faster, measurable AI replies; signed-in visitors are recognised

- **Signed-in visitors are known:** their Profile Vault is seeded from the LOOM account (username →
  first name, e.g. “MichaelYebba” → “Michael”; email), so the assistant greets them by name and starts
  with what it knows. Generated identifiers (“acct_…”, guest labels) are never used as names.
- **Bridge 1.0.3:** keeps the model loaded for 30 minutes between chats (no cold reloads), and sends
  progress from a background thread so it never stops reading the model's output.
- **Chat replies jump the queue** ahead of background extraction and summaries; faster job pickup.
- **Timing breakdown on every reply** (Admin → AI): waited for bridge, model load, read prompt
  (tokens), wrote (tokens), network/site.
- **Context-window warning** when instructions + notes + history + reply don't fit (Ollama would
  silently drop the instructions).

# LOOM 0.15.86 — Accurate visit times, location, and quick profile access in Journeys

- **No more “0s” visits:** time on site now uses the visitor's own clock, page-hide signals, and
  presence heartbeats (~5 s). Server receipt times alone collapsed batched actions to 0 seconds and
  ignored how long a single page stayed open. Unmeasurable visits say “time unknown”.
- **“Left before the page loaded”** journeys: visits that start but never get as far as a user
  action are now listed and attributed (ad click, search term) from the landing URL — useful for
  spotting slow landing pages on paid traffic.
- **CDN location headers:** visitor-location headers (Cloudflare, Vercel, CloudFront) are recorded
  on session start (correction in 0.15.89: LOOM does keep per-browser network history); Journeys shows city / region / country, otherwise the device timezone in plain
  words with a “not your timezone” flag.
- **Open profile** button on every journey (works before anything is captured; admins can start the
  profile themselves).

# LOOM 0.15.85 — Profile Vault, smarter intake, live Journeys

- **Profile Vault:** a persistent, growing profile per visitor (name, email, phone, business,
  industry, location, website, preferred contact, best time, interests, notes) filled from AI chats,
  request forms and admin edits, with per-field history so corrections never lose data. Hard match
  only (same browser or signed-in account); browser profiles fold into the account when the visitor
  signs in. Reused for “Welcome back, {name}!”, chats that start with known details, and form prefill
  (`ctx.profile.mine()`). Docs: PROFILE-VAULT-STANDARD.md.
- **Journeys:** OWNER / ADMIN detection by account links with “Hide system owner” and “Hide
  administrators” (on by default); “Hide marked visitors” (display-only); names and businesses in
  the list; profile card in each journey; new **People** view with readable profile cards, edit and
  delete; **Past hour**, **Past 6 hours**, and a **Live** view with active visitors and an activity feed.
- **AI intake fixes:** questions are budgeted by turns (not wording), so discovery can't loop; asking
  for a human reopens contact details and skips the rest; extraction can no longer store
  placeholders (“no timeline specified”), echoed field descriptions, or false “declined” answers;
  corrections use the newest value; the assistant is told never to invent the visitor's situation.
- **Chat widget:** fast letter-by-letter reveal with a blinking cursor (no artificial delay), faster
  polling, sends the browser id so chats link to journeys and profiles; “End chat” stays on one line.
- **AI bridge 1.0.2:** retries once when Ollama drops a request (“Remote end closed connection”).

# LOOM 0.15.84 — User Journeys

- **New Admin → Journeys tab:** every visitor's path through a project, rebuilt from the Action
  Registry — ad source and search term, device, entry page, a readable timeline, goals reached /
  started / missed, what they submitted (with email delivery status), AI chat summaries, and an
  outcome (lead / engaged / browsed / bounced). Search, filters (source, outcome, device, entry
  page, minimum actions, ad pages only), headline stats, CSV export, viewer-timezone ranges.
- **Bot and low-quality detection:** Google's AdsBot landing-page checks, crawlers, headless and
  automated browsers, and instant non-ad exits are hidden by default (one checkbox to show them).
  Ad bounces always stay visible.
- **Journey hints** for user actions (`journey: {label, milestone, icon}`) and project `journeys`
  goals. Docs: USER-JOURNEYS-STANDARD.md; reserved detail keys documented in LOOM-ACTION-SCHEMA.md.
- **Times read naturally:** absolute times show the viewer's zone as a generic name (“ET”, not
  “EDT”/“EST”).

# LOOM 0.15.83 — AI conversations end properly and stop going in circles

- **Session lifecycle:** chats close when the visitor presses **End chat**, when the assistant wraps
  up (hidden `[[END]]` signal), or after an idle timeout (default 20 minutes, Admin → AI). Idle
  chats are swept automatically during normal traffic. Closing writes an owner-facing summary and
  sends **one final email** (configurable: leads only / every chat / off). Ended chats are never
  reused — the next message starts a fresh session; the widget shows “Chat ended · Start a new chat”.
- **No repeated questions:** LOOM tracks what the assistant already asked; each checklist item is
  asked at most once (per-field `max_asks`, `ask_match`, natural `ask` phrasing).
- **No repeated replies:** near-duplicate replies are regenerated once before the visitor sees them.
- **Better sampling defaults:** repeat penalty, top-p, temperature 0.6 for chat.
- **Fix:** job lookups could briefly miss a job while it moved between queue folders, causing a rare
  “not found” in the chat.
- Admin → AI: idle timeout, final-email setting, conversation status, end reason, and summary.
- The “complete details” follow-up email now goes out when the conversation ends (with summary)
  instead of when the checklist completes.

# LOOM 0.15.82 — Owner files survive project upgrades

- **`preserve_on_replace`** in `project.default.json`: folders that hold the site owner's own files
  (e.g. `assets/reviews`, `assets/founder`) are carried over when a project is upgraded with
  Replace Safely, copied back from the automatic rollback snapshot. New package files win on name
  conflicts; code locations and paths outside the project are refused. Import results report how
  many files were preserved. Docs: Public Experience Standard §8.

# LOOM 0.15.81 — AI intake checklist: assistants keep going until the lead is complete

- **`capture.ask_for`** — an ordered intake checklist. Before each reply LOOM gives the model a
  private, freshly computed note: collected so far, declined, and the next single item to ask for.
  Small local models follow this far more reliably than a long static prompt.
- **Declined items** are detected by the extraction pass (`"declined"`), stored in
  `captureDeclined`, shown in Admin → AI, and never asked again.
- **Instant contact capture:** email addresses and phone numbers are recognised the moment a
  message arrives (pattern match), so the checklist is never a turn behind on contact details.
- **`capture.notify_update`** — one follow-up “complete details” lead email when every checklist
  item is collected or declined; the first email still goes out as soon as `notify_when` is met.
- Includes AI bridge 1.0.1 diagnostics from 0.15.80.

# LOOM 0.15.80 — AI bridge 1.0.1: plain-language connection diagnostics

- The bridge now names exactly what is wrong instead of “Cannot reach LOOM/Ollama”:
  Ollama not running (with the fix: open the Ollama app or run `ollama serve`), Ollama running
  but no models (`ollama pull llama3.1:8b`), the LOOM site unreachable, or an old bridge key.
  It keeps retrying automatically and says so.
- Safe console output on older Windows terminals.
- Download a fresh bridge from Admin → AI to get 1.0.1 (bridges from 0.15.77–0.15.79 keep working).

# LOOM 0.15.79 — Projects stay standalone: recommendations instead of hard requirements

- **`recommends` in project manifests** (and `compatibility.recommendedLoomVersion` in bundles):
  informational compatibility that never blocks import. Backup & Restore shows 🟡 plus the
  project's plain-language notes about which features are limited on this installation.
  `requires` remains for things a project genuinely cannot run without.
- **Chat panel is private to session replay** (`data-loom-private`): what visitors type into the
  AI chat is never captured by interaction replay; conversations are stored only by LOOM AI.
- Docs: Public Experience Standard §7 rewritten around the “projects are standalone” principle.

# LOOM 0.15.78 — Chat auto-hide and settings-safe project upgrades

- **AI chat hides itself live.** The chat widget re-checks the model host every 45 s and whenever the
  tab becomes visible: the launcher disappears when the bridge goes offline and returns when it
  reconnects. An open conversation is never removed; the visitor gets an offline notice with the
  project's fallback instead.
- **Replace Safely keeps Administrator-entered module settings** (contact details, IDs, copy)
  when a project is upgraded. Module on/off states still come from the new package. Previously an
  upgrade reset those settings to the package defaults.
- Release process: every re-issued build now gets a new version number (0.15.77 had been
  re-issued with these two changes; 0.15.78 is the correctly versioned release).

# LOOM 0.15.77 — LOOM AI: local models through a bridge, layered assistants, saved conversations

- **LOOM AI core plugin** (off by default). Admin → **AI** tab with guided setup: install Ollama,
  download a pre-configured `loom-ai-bridge.py`, watch it connect live, choose models, test.
- **Bridge transport:** the model host connects out to LOOM (long-poll jobs, streamed progress);
  no inbound ports. Bearer key stored as a hash; regenerate/revoke in Admin. Direct-URL mode for
  same-machine/tunnel setups.
- **LOOM assistant** on LOOM pages with preloaded LOOM knowledge; **project assistants** inherit it
  with per-project model, persona, greeting, knowledge, and context mode (project / combined / LOOM).
  Knowledge entries toggle on/off without losing text.
- **Conversations saved at every step:** visitor message before queuing (even offline), assistant
  reply on job completion server-side, structured capture after every turn with history.
- **Lead capture:** projects declare capture fields and `notify_when`; qualifying conversations are
  submitted once through the Project Email Gateway with transcript and ad attribution.
- **Reusable chat widget** (`engine/loom-ai-chat.js`, `ctx.ai.mountChat`): themeable, accessible,
  hides itself when the model host is offline, hands unsent text to a project fallback.
- **Project Email Gateway:** `require_any` field groups (e.g. email *or* phone), internal
  submissions for AI leads, and ad attribution (`gclid`/`gbraid`/`wbraid`/`utm_*`) stored with every
  submission and shown in the notification email.
- Docs: `docs/AI-STANDARD.md`.

# LOOM 0.15.76 — Public Experience: Public Website Mode, Public Router, Silent Visitors & Project Email

Engine-level capabilities that let any project run as a standalone public website. All default
**OFF**; projects that declare nothing behave exactly as on 0.15.75.

- **Public Website Mode** (per project). Hides LOOM chrome and, while the project owns the
  domain, LOOM Home/docs/release documents from visitors (plain 404; Administrators keep access;
  `/admin/` always reachable). Hiding is presentation only — authorization is unchanged.
- **Public Router.** `index.php` is now the front controller for every non-file request.
  The domain-landing project can own clean URLs (`/about`, `/services/<slug>`, `/blog/**`) with
  server resolution, so deep links, refreshes and crawlers get real responses and real 404s.
  Non-landing projects can mount at `/<slug>/…`. Reserved namespaces are derived from the release
  tree; conflicting declarations are rejected and shown in Admin. Nginx example included.
- **Route Context API** (`window.LoomRoute`, module `ctx.route`): `href`, `url`, `path`,
  `navigate`, `onChange`, plus `publicBaseUrl`, `projectInternalUrl`, `currentPublicPath`, … in
  `LOOM_MOUNT_CONTEXT`. Projects no longer reverse-engineer their URL.
- **Fix:** the domain-landing project's `canonicalProjectUrl` is now the public root URL instead
  of the internal `/projects/_instance/app/` URL (which leaked into project-built links).
- **Fix:** `/about` (and other extensionless LOOM pages) were unreachable on 0.15.75 because the
  friendly `/<slug>/` rewrite caught them first.
- **Project shell** uses an absolute `<base href>` so nested public URLs load modules correctly.
- **Route index** (`public_experience.route_index`): server-side title, description, canonical,
  robots, Open Graph/Twitter, JSON-LD (`graph` shared nodes, `{{base}}`/`{{url}}` tokens) and a
  noscript fallback on first byte. `sitemap.xml` lists project routes at real public URLs.
- **Visitor identity modes:** `standard`, `silent` (no identity UI; invisible Guest), `permanent`.
- **Project-scoped guest-overlap relaxation** (`guestOverlap: silent-permit`), re-verified
  server-side per request in `identity-hub.php`. Global overlap protection unchanged.
- **Owner access pill** for confirmed admins when LOOM chrome is hidden.
- **Project favicon** injected server-side (`branding.favicon_asset`); `branding.favicon_url`
  added to project profile payloads.
- **Project Email Gateway:** projects declare mail events; Administrators enable them and set
  recipients in Admin → Email. Same-origin + HMAC page tokens, honeypot, hashed-network and
  per-project rate limits, declared-field validation, durable submission storage before
  delivery, Reply-To to the validated visitor address, delivery status + system log tagging.
  `loom_email_send()` gained optional per-message `fromName`/`replyTo`.
- **Project requirements:** `requires.loom` / `requires.capabilities` in `project.default.json`
  and `compatibility.minimumLoomVersion` in bundles. Backup & Restore preview shows ✅/⛔ and
  apply refuses incompatible projects. `api/version.php` lists engine capabilities.
- **Admin:** new Public Experience card (Project Settings) and Project email card (Email tab)
  showing where each effective value comes from.
- Docs: `docs/PUBLIC-EXPERIENCE-STANDARD.md`, `docs/PROJECT-EMAIL-GATEWAY-STANDARD.md`,
  `docs/nginx-public-router.conf.example`.

# LOOM 0.15.75 — Project Privacy, Canonical Access Identities & Live Avatars

- Added System-Owner-only Public/Private project visibility. Public projects are marked with a globe; private projects are marked with a lock for authorized viewers.
- Private projects are omitted server-side from project discovery for unauthorized viewers and rejected with a generic 404 before project metadata/shell output, preventing page-load glimpses.
- Private project-owned assets are emitted with signed project/path URLs and return generic 404s when probed without a valid signature, closing the static-branding/media discovery gap.
- Added System-Owner grant/revoke controls for giving specific permanent users or active standalone Guests access to private projects. Existing LOOM Admin / Project Admin authority remains valid for its scoped project.
- Delegated-access grants follow a Guest when that identity is promoted into a permanent account, preventing access loss during account creation.
- Access Manager now uses canonical visible display names everywhere and excludes attached browser lineage, claimed Guest histories, and standby future-Guest shells from grant selectors.
- Portable User/Guest bundles now include private-project view grants and identity cleanup removes those grants alongside the person.
- Generic project leaderboard responses resolve current avatar URLs live from LOOM profile/project identity state, with avatar-state cache versioning so avatar changes propagate to project leaderboards.
- LOOM Home shows explicit `🌐 Public` / `🔒 Private` project visibility state; only the System Owner receives the visibility toggle.

# LOOM 0.15.74 — Project Module Completion State

- Fixed the project-shell `Loading project modules…` fallback remaining visible after every real module had finished loading.
- Action Runtime now authoritatively dismisses the shell waiting state when initial runtime startup reaches ready, so existing Instance Projects are repaired without modifying their instance-owned shell files.
- New/baseline project shells use a stronger completed-state CSS rule and no longer depend on child-count MutationObserver heuristics.
- The waiting element remains available when runtime startup actually fails, preserving useful startup-error feedback.

# LOOM 0.15.73 — Core UX Consistency Polish

- Backup & Restore removes its redundant in-page Admin button; the permanent global shell remains the single Admin navigation affordance.
- Static shell links such as Admin now use the exact same global-control geometry, icon sizing, spacing, hover/focus treatment, and responsive height as Home, Share, Profile, and Switch User.
- Admin Users receives a quieter integrated Refresh control with real busy feedback, improved directory-row hover/selection states, and smoother search/filter control rhythm.
- Backup & Restore adopts the standard LOOM green primary/active-state language instead of a one-off blue accent.
- Shared LOOM-owned Admin surfaces receive a restrained form/button/empty-state consistency pass without changing project-owned branding or application UI.

# LOOM 0.15.72 — Permanent Account Identity Collapse

- Permanent-account promotion no longer surfaces the pre-created future Guest generation as a second visible person. Future Guest generations are reserved as `standby` until an explicit sign-out or Guest selection activates them.
- Admin Users and portable-person export hide standby Guest shells while preserving the claimed Guest History, aliases, browser lineage, avatars, project participation, project state, and activity under the permanent account.
- Existing 0.15.68–0.15.71 split records are repaired idempotently when their empty post-claim generation has never accumulated project payload.
- Explicit sign-out / Switch User activates the reserved Guest generation on demand, preserving the intended fresh-Guest workflow without duplicating the person at promotion time.

# LOOM 0.15.71 — Loader, Admin UX & Navigation Reliability

- Project loaders no longer render an empty secondary flying pill when the project wordmark has only one meaningful line.
- LOOM Home project mutations carry the active client identity through authorization, and `project-manager.php` reads JSON identity context before access checks, eliminating false 403s for authorized System Owner/Admin project identity saves.
- Active tabs use high-contrast light selected surfaces with dark text across Home, Admin, and Backup & Restore.
- Native file pickers receive shared LOOM production styling instead of browser-default chrome.
- Backup & Restore removes redundant Home navigation and gives its Admin control an explicit settings icon.
- The permanent animated LOOM brand at the top-left of the global shell is now a keyboard-accessible Home link using the same canonical Home URL resolver as the normal Home control.

# LOOM 0.15.70 — Clean Core Baseline

- Removed the final bundled concrete-project migration payload from LOOM core. Release archives now contain engine code, generic project infrastructure, templates, and upgrade tombstones only.
- Genericized leaderboard defaults and project-branding examples so core APIs/docs no longer imply a specific product project.
- Removed installation-specific usernames and project names from permanent product documentation/comments.
- Preserved only deployment tombstones required to remove obsolete release-owned paths during safe in-place upgrades; tombstones never target `instance/**`.
- Rebuilt the deployment manifest from the sanitized tree and re-audited the release for user/project-specific identifiers and assets.

# LOOM 0.15.70 — Canonical Release Watch + Production UI

- Release Watch derives the running client release from canonical boot evidence and only announces a strictly newer semantic release.
- Same-version fingerprint churn no longer creates false update banners or reload loops.
- LOOM-owned Home, Admin, Backup & Restore, Activity, Referrals, Setup, Registry, project-shell, Header, Showcase, and Footer surfaces share a production-grade UI system while project-owned branding remains independent.

# LOOM 0.15.68 — Portable Guests + System Owner migration bootstrap

- Standalone Guests became first-class portable people alongside permanent accounts.
- Blank-install bootstrap can restore a verified prior System Owner portable bundle while issuing fresh destination Administrator credentials.
- Project + Data exports remain project-owned vertical slices; person bundles remain identity-owned horizontal slices across projects.

# LOOM 0.15.67 — Runtime liveness and identity recursion recovery

- Removed cyclic global-profile/project-identity resolution that could exhaust PHP workers.
- Added recursion fuses, deployment-marker cleanup, bounded startup retries, and non-blocking deployment-status UX.

# LOOM 0.15.66 — Home and identity runtime recovery

- Restored Home bootstrap helpers and hardened visible-name resolution so internal allocation handles cannot become presentation names.
- Hardened storage access in sandboxed frames and made Admin Users avatar resolution scope-relative.

# LOOM 0.15.65 — Dynamic project identity inheritance

- Project identities explicitly distinguish live global inheritance from intentional project overrides.
- Project-specific presentation can no longer contaminate the global identity cache.

# LOOM 0.15.64 — Authoritative module positioning

- Project module position indexes became authoritative at runtime with deterministic collision handling and soft default composition positions.

# LOOM 0.15.63 — Visible positioning controls + canonical Admin identity

- Project Settings exposed module position indexes directly and Admin chrome was aligned with the canonical visible identity.

# LOOM 0.15.62 — Identity/media hygiene + project discovery

- Factory identity wipe gained exhaustive media cleanup and orphan-media reconciliation.
- Built-in avatar presets were normalized, project search/pagination was added, deep-linked project user scopes were fixed, and human-facing timestamps became viewer-local.

# LOOM 0.15.61 — Portable Users + scoped Backup & Restore

- Backup & Restore was split into Global LOOM, Projects, and Users.
- Single-user portable bundles capture the canonical identity ownership graph and restore create/merge-only without stealing unrelated identities.

# Earlier core history

Earlier 0.15.x and 0.12.x work established clean-instance releases, Instance Projects, project import/export, identity continuity, permissions, Admin tooling, HTML Framer, module discovery/composition, deployment gating, backup/restore, project branding, and persistence adapters. Concrete product-project development history is intentionally not retained in the clean core changelog. Deployment tombstones in `.loom-deployment.json` remain the sole source of obsolete release-path cleanup semantics required for upgrades.
