import { H as HeadMetaTag, l as HeadLinkTag } from '../installSeoHead-CuVdVCis.js'; export { m as HeadScriptTag, o as HeadTagOverrides, I as InstallSeoHeadOptions, R as ResolvedHeadTags, B as SEO_HEAD_ROUTE_HAS_NO_META, q as SeoHeadClientLike, t as SeoHeadEntryLike, u as SeoHeadInput, v as SeoHeadPageRoute, w as SeoHeadPagesManifest, x as SeoHeadResolution, y as SeoHeadResolutionReason, C as SeoHeadRouteHasNoMeta, p as SeoHeadRouteLike, S as SeoHeadRouterLike, b as buildHeadTags, k as buildSeoHeadRouteMap, f as escapeJsonLd, z as findDuplicateNormalizedPaths, A as formatDuplicateNormalizedPaths, g as generateJsonLd, a as generateOpenGraphMeta, c as generateTwitterMeta, j as installSeoHead, h as isManagedLinkRel, i as isManagedMetaTag, n as normalizeSeoHeadPath, d as renderHeadTags, r as resolvePageSeo, s as spliceHeadHtml, e as stripManagedHeadTags } from '../installSeoHead-CuVdVCis.js'; import { Z as PageRouteEntry } from '../vitepressTransform-CZ_IB3dq.js'; export { A as AI_BOTS, y as BlogMeta, x as BreadcrumbCrumb, v as BuildLlmsParams, u as BuildRobotsParams, B as BuildSitemapParams, E as ContentConfig, C as CreateSeoTransformPageDataOptions, D as DcsRobotsOptions, F as FaqSource, ag as NormalisedFaq, af as NormalisedReview, ai as PostalAddressGap, ab as REQUIRED_POSTAL_ADDRESS_FIELDS, R as ResolvedPageOverrides, ah as ReviewSchemaParts, z as ReviewSource, a2 as RouteEmissionRules, a3 as RouteExclusionReason, w as SchemaObject, S as SeoPageContext, r as SeoPageTypeRule, t as VitePressHeadConfig, V as VitePressPageData, q as absolutizeUrl, j as breadcrumbTrailFromRoute, k as buildBlogPosting, h as buildBreadcrumbList, l as buildFaqPage, g as buildGlobalGraph, a4 as buildHasCredential, f as buildLlmsTxt, m as buildReviewSchemaParts, e as buildRobotsTxt, a as buildSitemapXml, b as buildVitePressSeoHead, c as createSeoTransformPageData, d as defaultRelativePathToRoute, ac as deriveSameAs, o as filterRealFaq, n as filterRealReviews, a8 as findBusinessLicense, a6 as findGlobalSchemasOfType, a5 as findLocalBusinessSchema, a9 as findPostalAddressGaps, p as findReviewItemsForPage, aa as formatPostalAddressGapReport, a7 as graphAbsorbs, ad as graphIds, ae as isLocalBusinessType, a0 as isRouteEmitted, i as isRouteIndexable, _ as loadPagesManifest, $ as parsePagesManifest, a1 as routeExclusionReason, s as slugToTitle } from '../vitepressTransform-CZ_IB3dq.js'; import { a as HeadObservation, H as HonestyMode } from '../headHonesty-OzxvLuwd.js'; export { B as BakedHead, g as HeadHonestyError, l as HeadHonestyExecution, k as HeadHonestyNotRunError, p as HeadHonestyOptions, o as HeadHonestyViolation, m as HonestyModeInput, b as assertHeadHonesty, h as assertHeadHonestyExecuted, d as decodeHtmlEntities, e as extractBakedHead, i as findHeadHonestyExecutionFaults, f as findHeadHonestyViolations, j as formatHeadHonestyExecutionReport, c as formatHeadHonestyReport, n as normalizeHeadText, r as resolveHonestyMode } from '../headHonesty-OzxvLuwd.js'; import 'vue'; /** * THE SWEEP-ONCE HALF OF `installSeoHead` — the fix for DEFECT F-A * (Q-453 = A, decided 2026-08-11; C-603). * * THE DEFECT, IN ONE SENTENCE. Unhead removes only the side effects it OWNS. * The baked managed tags were written into the served HTML by the build-time * emitter before any JavaScript ran, so Unhead never owned them and never * removes them — which means a managed tag present in the BAKED head and ABSENT * from the runtime entry is left stranded in the DOM for the rest of the * session, while every tag the new route DOES declare moves correctly. * Measured live across the fleet: a stale `meta keywords` on five sites and a * stale `article:published_time` on iron-oak * (`.docs/analysis/installseohead-defect-fa-explainer-2026-08-11.md` §2). * * THE FIX. On the FIRST matched in-app navigation, remove the baked managed * tags that the incoming head input does not re-declare. From that moment the * runtime is the sole owner of the managed head and Unhead's own reconciliation * (proven correct by the C-362 fixture, on both shipped versions) handles every * subsequent navigation. One sweep is therefore not a budget — it is * SUFFICIENT, and §"WHY ONCE IS ENOUGH" below is the argument. * * ── THE FOUR REFUSALS ────────────────────────────────────────────────────── * * S1 NEVER SWEEP JSON-LD. This is the failure mode Q-453 named explicitly * when it chose option A. `