{
  "project": "tannerd.net",
  "current": "6.17.3",
  "releases": [
    {
      "version": "6.17.3",
      "date": "2026-09-13",
      "name": "Warehouse Property Isolation / Multi-Site BigQuery Guard",
      "highlights": [
        "Fixes the remaining cross-site Search Warehouse leak by hard-scoping every BigQuery bulk-export query to the selected Search Console site_url before date anchoring, aggregation, scoring, or rendering.",
        "Makes Search Warehouse cache keys property-aware so a cached tannerd.net result cannot be reused while The Weed Scene or a future site is selected.",
        "Adds a second ownership guard after BigQuery retrieval: foreign URLs are discarded even if an upstream response is malformed, mocked, or misconfigured.",
        "Adds per-site BigQuery overrides such as TWS_BIGQUERY_PROJECT_ID and TWS_BIGQUERY_DATASET_ID while preserving shared global BigQuery credentials/config as the default fallback.",
        "Search Warehouse now reports its bound site key/site_url and discarded cross-site row count for operator verification.",
        "No Search Radar feature is removed; tannerd.net keeps the same Warehouse capability while The Weed Scene and future sites receive isolated Warehouse evidence.",
        "Doctrine: PROPERTY BOUNDARY \u2260 OPTIONAL \u00b7 SHARED DATASET \u2260 SHARED EVIDENCE \u00b7 CACHE \u2260 CROSS-SITE AUTHORITY \u00b7 UNKNOWN \u2260 ZERO."
      ]
    },
    {
      "version": "6.17.1",
      "date": "2026-09-13",
      "name": "Multi-Site Isolation / Extensible Site Profiles",
      "highlights": [
        "Fixes cross-site Search Radar contamination: The Weed Scene no longer inherits tannerd.net calculator intent routes, aliases, static experiment baselines, or site-specific planning copy.",
        "Moves deterministic intent routes and canonical aliases into explicit per-site analysis profiles. tannerd.net keeps the full existing calculator profile; generic sites retain the Known Search Families feature using observed demand discovery rather than tannerd-specific routes.",
        "Makes static experiment configuration site-scoped through the authenticated Search Radar API. Sites with experiments_mode NONE cannot read another site\u2019s local experiment asset.",
        "Makes mission mapping, device intelligence, content briefs, routing provenance, and intervention planning use the selected site base URL and analysis profile.",
        "Refactors the site registry into a data-driven extension point. Future sites are added as registry entries and default to the generic analysis profile unless a deliberate site-specific profile is assigned.",
        "Unknown site keys now fail closed instead of silently falling back to tannerd.net; scheduled capture, Astra site enums, and the operator selector derive from the registered site list.",
        "No Search Radar feature is removed. Existing tannerd.net behavior remains intact while site-specific policy is isolated behind explicit profiles.",
        "Doctrine: SITE PROFILE \u2260 SHARED POLICY \u00b7 UNKNOWN SITE \u2260 TANNERD FALLBACK \u00b7 PROPERTY SWITCH \u2260 CROSS-SITE CONFIG \u00b7 UNKNOWN \u2260 ZERO."
      ]
    },
    {
      "version": "6.17.0",
      "date": "2026-09-13",
      "name": "Multi-Site Search Radar / The Weed Scene",
      "highlights": [
        "Adds first-class monitored-property selection for tannerd.net and theweedscene.com in the private Search Radar console.",
        "Scopes Search Console queries, live sitemap inventory, owned-page fetches, Search Health, Product Fit, competitor exclusion, caches, Black Box recorder state, Astra state/proposals, and scheduled snapshots to the selected property.",
        "Adds The Weed Scene via sc-domain:theweedscene.com with live sitemap inventory and no static experiment configuration; existing tannerd.net behavior remains the default.",
        "Binds The Weed Scene to numeric GA4 Data API property 304011798 by default, while retaining TWS_GA4_PROPERTY_ID as an override and preserving explicit provider-read failure semantics.",
        "Marks The Weed Scene Mantis revenue as UNOBSERVED_NO_PROVIDER_API instead of treating missing Mantis reporting as zero or substituting GA4 ad revenue.",
        "Adds a site argument to the authenticated Astra Search Radar tools and isolates persisted recorder state by Search Console property.",
        "Daily retained snapshot capture is multi-site and fail-soft: one property failure does not erase another property snapshot.",
        "Doctrine unchanged: MULTI-SITE OBSERVATION \u2260 SHARED CAUSALITY. PROPERTY SWITCH \u2260 PERMISSION. UNKNOWN \u2260 ZERO. SHADOW DECISION \u2260 INTERVENTION."
      ]
    },
    {
      "version": "6.16.1",
      "date": "2026-09-12",
      "name": "Mobile Hierarchy / Homepage Reduction",
      "highlights": [
        "Reorders the mobile homepage around user value: hero and primary actions now appear before dashboard-style directory telemetry.",
        "Hides redundant mobile header build telemetry while preserving a visible immutable release witness in the homepage serial row.",
        "Removes the decorative directory waveform and four-step system map from narrow screens; calculator and decision-tool actions become explicit mobile buttons.",
        "Reduces nested mobile framing, spacing, title scale, and dashboard density without changing the desktop control-room visual language.",
        "Experiment Firewall pages remain byte-for-byte unchanged."
      ]
    },
    {
      "version": "6.16.0",
      "date": "2026-09-12",
      "name": "Operator Mode / Search Radar Internal Launch",
      "highlights": [
        "Adds a top-level TODAY / OPERATOR MODE that turns current Search Radar state into one concrete attention lane: research, evidence repair, protected wait, or observation.",
        "Surfaces ready-for-human-research markets, evidence-blocked markets, protected pages, experiment maturity, and the next cheapest useful action without creating a second selector or mutation path.",
        "Adds explicit human-research controls for the current functional market: open the owned page, open a manual Google SERP, and copy a bounded research handoff. Manual research is labeled non-sealed evidence.",
        "Turns SERP provider cooldown and Market Frontier setup gaps into operator-readable repair instructions. DataForSEO payment exhaustion is shown as a provider/billing condition rather than generic missing-market evidence.",
        "Polishes the 50 search-led calculator related-tool blocks into spaced responsive cards and removes repeated generic boilerplate copy from those pages.",
        "Doctrine: OPERATOR MODE \u2260 DECISION AUTHORITY. HUMAN SERP \u2260 SEALED SERP EVIDENCE. EVIDENCE REPAIR \u2260 INTERVENTION. DO THE CHEAPEST USEFUL WORK AVAILABLE NOW."
      ]
    },
    {
      "version": "6.15.45",
      "date": "2026-09-11",
      "name": "Calculator Quality Pass / Depth Before Volume",
      "highlights": [
        "Reworks all 50 search-led calculator pages from thin formula shells into substantive static resources with input guidance, worked examples, interpretation, failure modes, related decisions, and explicit method limits.",
        "Gives 25 priority calculators a deeper editorial treatment and interactive scenario presets, concentrated in concrete/sitework, drywall/paint/finish, mileage reimbursement, paid-search economics, and Search Radar orphan intents for surcharge, extraction rate, and purge cost.",
        "Keeps the five Experiment Firewall protected surfaces byte-identical: /driving/, Fuel Needed, Resale Profit, Seller Net Proceeds, and Shift Pay.",
        "Adds a regression-tested quality manifest and minimum-content gates so future calculator expansion cannot silently regress to thin boilerplate.",
        "Doctrine: DEPTH BEFORE VOLUME. DISTINCT UTILITY BEFORE URL COUNT. FORMULA + CONTEXT + LIMITS > KEYWORD SHELL."
      ]
    },
    {
      "version": "6.15.44",
      "date": "2026-09-11",
      "name": "Deployment Witness / Live Release Confirmation",
      "highlights": [
        "Makes the homepage release witness immutable to the shipped build: visible release text and a machine-readable build-release meta tag are stamped into index.html and are no longer overwritten by a runtime releases.json fetch.",
        "Adds a deploy-time live confirmation contract: the Search Radar Windows deployer reads the expected release directly from the downloaded deploy ZIP, pushes the build, then polls the public homepage until the exact build release is observed.",
        "Updates deploy-trigger.txt on every handoff so Git-connected hosting paths that watch the trigger file receive an explicit release-bearing change alongside deploy.zip.",
        "The deployer always pauses on success and failure, prints expected release, Git commit, and observed live release, and writes a local deploy-last.txt summary instead of silently closing.",
        "Doctrine: GIT PUSH != LIVE DEPLOYMENT. HOMEPAGE WITNESS == SHIPPED BUILD. STALE MANIFEST != RELEASE IDENTITY."
      ]
    },
    {
      "version": "6.15.43",
      "date": "2026-09-11",
      "name": "Free SERP Backfill / Source Diversification",
      "highlights": [
        "Expands SERP_EVIDENCE_ROUTER_V2 across SerpApi, Serper, SearchApi, DataForSEO, and explicitly opt-in experimental self-hosted OpenSERP, while retained per-market evidence remains the first route before external refresh.",
        "Adds generic generation-local provider failover: a failed provider is disabled for the remainder of the run, allowing the next configured provider to backfill unresolved functional markets without repeating the same failure per query.",
        "Adds the hard-disable runtime guard SERP_REALITY_DISABLED_PROVIDERS. A disabled provider is removed from the active route entirely, so SERP_REALITY_DISABLED_PROVIDERS=DATAFORSEO guarantees no DataForSEO fallback even after a prior budget cooldown expires.",
        "Adds SERP_PROVIDER_LEDGER_V1 with per-provider configured state, authority, billing class, search-call count, successes, failures, error class, and explicit UNKNOWN remaining-account credits. Public free-tier claims are never treated as the user account balance.",
        "Adds optional SEARCH_CORROBORATION_V1 through self-hosted OpenSERP and SearXNG. Cross-engine or experimental observations are non-sovereign and cannot silently become verified Google SERP evidence.",
        "Goldmine Synthesis advances to GOLDMINE_SYNTHESIS_V5: EXPERIMENTAL_GOOGLE_SERP observations remain visible but cannot satisfy the positive Google-SERP gate for HIGH_CONVERGENCE.",
        "Full-machine export advances to SEARCH_RADAR_FULL_MACHINE_SNAPSHOT_V9. Doctrine: PROVIDER DIVERSITY \u2260 EVIDENCE INDEPENDENCE. DISABLED PROVIDER \u2260 FALLBACK. EXPERIMENTAL SOURCE \u2260 VERIFIED GOOGLE SERP. PUBLIC FREE TIER \u2260 ACCOUNT BALANCE. UNKNOWN \u2260 ZERO."
      ]
    },
    {
      "version": "6.15.42",
      "date": "2026-09-11",
      "name": "SERP Survival / Zero-Cost Evidence Router",
      "highlights": [
        "Adds SERP_EVIDENCE_ROUTER_V1: current functional-market SERP observations are reused from durable evidence before any paid refresh, with per-row age and FRESH_RETAINED / STALE_RETAINED provenance.",
        "Expands durable SERP storage into a bounded per-market archive so a five-query run does not erase older useful market observations. Default retention is 72h fresh / 14d maximum, configurable at runtime.",
        "Persists provider BUDGET_EXHAUSTED cooldowns. Normal runs skip known-exhausted DataForSEO during cooldown and route directly to SerpApi when configured; force refresh is an explicit operator bypass.",
        "Search Health prioritizes current Goldmine market pages and exports market_coverage selected / inspected / overflow counts so bounded URL Inspection cannot silently omit current research markets.",
        "Dashboard exposes provider calls, evidence route, retained/stale counts, SERP freshness, and Goldmine Search Health coverage.",
        "Full-machine export advances to SEARCH_RADAR_FULL_MACHINE_SNAPSHOT_V8. Doctrine: CACHE FIRST. RETAINED SERP \u2260 CURRENT SERP. BUDGET EXHAUSTION \u2260 MARKET ABSENCE. UNKNOWN \u2260 ZERO."
      ]
    },
    {
      "version": "6.15.41",
      "date": "2026-09-11",
      "name": "Market Identity Independence / Provider-Failure Resilience",
      "highlights": [
        "Adds MARKET_IDENTITY_V1 from owned Search Console functional demand so optional SERP-provider failure cannot erase a functional market.",
        "Goldmine Synthesis V4 enriches stable owned-demand market rows with Search Health, SERP Reality, Product Fit, competitor verification, GA4, economics, and Warehouse evidence.",
        "Classifies SERP provider budget exhaustion explicitly and starts durable retention of successful SERP observations.",
        "A first 6.15.41 run cannot reconstruct pre-release SERP rows that were never persisted; missing SERP/Product Fit/competitor evidence remains unknown while the owned market queue survives.",
        "Doctrine: MARKET IDENTITY \u2260 SERP EVIDENCE. EXTERNAL PROVIDER FAILURE \u2260 MARKET ABSENCE. UNKNOWN \u2260 ZERO."
      ]
    },
    {
      "version": "6.15.40",
      "date": "2026-09-11",
      "name": "Astra Evidence Bridge / Shadow Decision Packet",
      "highlights": [
        "Adds SEARCH_RADAR_SHADOW_PACKET_V1, a compact exact-generation packet built only after the Evidence Barrier is sealed and Goldmine Synthesis completes.",
        "Persists each sealed packet in the Search Radar Recorder with a canonical SHA-256 hash, generation ID, source states, functional-market queue, Experiment Firewall context, and explicit authority limits.",
        "Adds the read-only search_radar_shadow_packet MCP tool and matching Astra REST endpoint. Reading the packet performs zero new Google, DataForSEO, SerpApi, BigQuery, GA4, or AdSense calls.",
        "Shadow packets preserve UNKNOWN_EXPECTED, SETUP_REQUIRED, ERROR, and other missing-evidence states instead of converting them to zero; raw SERP HTML, credentials, and raw query dumps are excluded.",
        "Defines Astra Shadow Decision terminal states: HUMAN_RESEARCH_JUSTIFIED, MORE_EVIDENCE_REQUIRED, PROTECTED_WAIT, and NO_JUSTIFIED_RESEARCH, with at most one selected market.",
        "Full-machine export advances to SEARCH_RADAR_FULL_MACHINE_SNAPSHOT_V6 and includes the exact Astra shadow packet. Doctrine: SHADOW DECISION \u2260 INTERVENTION. ABSTENTION IS VALID. SEALED EVIDENCE \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.39",
      "date": "2026-09-11",
      "name": "Evidence Barrier / Deterministic Synthesis",
      "highlights": [
        "Adds run-generation fencing so overlapping manual, auto-refresh, or startup Radar requests cannot merge evidence from different generations; stale responses are ignored before dashboard state mutation.",
        "Adds EVIDENCE_BARRIER_V1 with terminal states READY, UNKNOWN_EXPECTED, SETUP_REQUIRED, ERROR, NOT_APPLICABLE, and PROTECTED.",
        "Goldmine Synthesis V3 consumes only a deep-cloned sealed packet and fails closed on an explicitly incomplete barrier.",
        "Expected waits such as the first Search Console bulk-export table and pending AdSense approval remain UNKNOWN_EXPECTED rather than zero.",
        "Full-machine export advances to SEARCH_RADAR_FULL_MACHINE_SNAPSHOT_V5 and preserves evidence_barrier metadata.",
        "Doctrine: GENERATION CONSISTENCY \u2260 EVIDENCE COMPLETENESS. UNKNOWN_EXPECTED \u2260 ZERO. SEALED PACKET \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.38",
      "date": "2026-09-11",
      "name": "Goldmine Synthesis V2 / Market Research Queue",
      "highlights": [
        "Adds a deterministic Market Research Queue that combines owned demand, Search Health, SERP Reality, Product Fit, coverage-adjusted competitor evidence, GA4 behavior, economics availability, and Warehouse temporal evidence without creating intervention authority.",
        "Uses lexicographic evidence convergence rather than an opaque keyword-difficulty or goldmine score; the ranking basis is exported for every market.",
        "Preserves missing sources as UNKNOWN rather than coercing them to zero, so pending Keyword Planner, Search Warehouse, AdSense, or GA4 evidence cannot silently penalize or promote a market.",
        "Experiment-protected pages are forced into PROTECTED_OBSERVE / PROTECTED_WAIT regardless of apparent market convergence.",
        "Adds HIGH_CONVERGENCE, MODERATE_CONVERGENCE, EARLY_SIGNAL, OBSERVE, CONTRADICTORY, INSUFFICIENT_EVIDENCE, and PROTECTED_OBSERVE states with explicit human-research readiness.",
        "Full-machine export advances to SEARCH_RADAR_FULL_MACHINE_SNAPSHOT_V4 and carries goldmine_synthesis evidence. Doctrine: CONVERGENCE \u2260 PERMISSION. UNKNOWN \u2260 ZERO. RESEARCH QUEUE \u2260 MONEY MISSION."
      ]
    },
    {
      "version": "6.15.37",
      "date": "2026-09-11",
      "name": "Verification Coverage / Evidence Recovery",
      "highlights": [
        "Continues through the eligible top-result pool when a selected competitor page is blocked, missing, non-HTML, or times out, stopping when the verification target is met or the bounded candidate pool is exhausted.",
        "Never bypasses 403s, authentication, bot protection, or access controls; failed pages remain explicit evidence gaps and replacement attempts move only to the next public SERP result.",
        "Replaces wholesale TOO_LARGE rejection with bounded-prefix inspection capped at 450 KB and explicitly labels those observations OK_TRUNCATED.",
        "Separates coverage confidence from feature confidence and caps competitor-gap evidence when the verified sample is too thin.",
        "Adds candidate-pool, attempted-page, recovery-attempt, truncated-page, and coverage-confidence telemetry to the Product Graph and full-machine export.",
        "Doctrine: COVERAGE \u2260 FEATURE CONFIDENCE. COMPETITOR FEATURE \u2260 REQUIRED FEATURE. PRODUCT GAP \u2260 BUILD MANDATE. VERIFICATION \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.36",
      "date": "2026-09-11",
      "name": "Competitor Capability Verification / Product Graph",
      "highlights": [
        "Adds bounded read-only inspection of public competitor product pages already present in SERP Reality.",
        "Reuses Product Fit capability definitions to distinguish verified, partial, and absent page-level support without executing JavaScript or sending credentials/cookies.",
        "Builds PRODUCT_GRAPH_V1 across the functional market, own product, competitor pages, and observable capabilities.",
        "Rejects private/local URL targets, validates public redirects, limits HTML to 450 KB, applies a 6.5-second timeout, and caches observations for 12 hours.",
        "Doctrine: COMPETITOR FEATURE \u2260 REQUIRED FEATURE. COMMON FEATURE \u2260 USER NEED. PRODUCT GAP \u2260 BUILD MANDATE. VERIFICATION \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.35",
      "date": "2026-09-11",
      "name": "Product Fit Autopsy / Search Appearance Repair",
      "highlights": [
        "Repairs Search Appearance retrieval by grouping only by searchAppearance with page filtering.",
        "Adds read-only Product Fit / Market Autopsy over actual tannerd.net page capabilities and already-fetched SERP text.",
        "Reuses SERP Reality so Product Fit does not trigger an extra paid SERP request.",
        "Doctrine: PRODUCT FIT \u2260 RANKING PERMISSION. SERP TEXT \u2260 VERIFIED COMPETITOR CAPABILITY. FEATURE GAP \u2260 BUILD MANDATE. AUTOPSY \u2260 INTERVENTION."
      ]
    },
    {
      "version": "6.15.34",
      "date": "2026-09-11",
      "name": "Evidence Snapshot / Full-Machine Export",
      "highlights": [
        "Upgrades Search Radar EXPORT JSON from {site, report} to a portable full-machine evidence snapshot containing the canonical report plus Search Warehouse, Search Health, Market Frontier, SERP Reality, and Goldmine Evidence.",
        "Waits for the current non-sovereign evidence reads to settle before export so the downloaded file reflects the rendered machine state rather than racing background modules.",
        "Carries provider/readiness state, functional-market evidence, source ancestry, SERP observations, composition inputs, generated/cache metadata already emitted by modules, observability gaps, and an explicit permission state.",
        "Sanitizes credential-bearing fields before serialization; provider passwords, tokens, API keys, client secrets, customer/login-customer identifiers, and OAuth client identifiers are excluded.",
        "Does not create a new decision engine, selector invocation, persistence authority, Search Commit, experiment action, or mutation path.",
        "Doctrine: SNAPSHOT \u2260 PERMISSION. EXPORT \u2260 INTERVENTION. PORTABLE EVIDENCE \u2260 MUTATION AUTHORITY."
      ]
    },
    {
      "version": "6.15.33",
      "date": "2026-09-11",
      "name": "Functional SERP Reality / Goldmine Evidence",
      "highlights": [
        "Compresses repeated lexical/numeric Search Console variants into functional market seeds before any paid SERP lookup when Market Frontier is unavailable.",
        "Preserves raw exact-query counts and owned-impression evidence underneath each functional market so compression never discards source evidence.",
        "Adds a bounded Goldmine Evidence synthesis over owned demand, SERP composition, click-surface pressure, and optional Keyword Planner market size while explicitly withholding ranking or intervention claims.",
        "Prevents duplicate DataForSEO/SerpApi spend on name/number variants of the same observed functional demand shape.",
        "Improves DataForSEO provider errors by preserving returned provider detail when HTTP requests fail.",
        "Doctrine: VARIATION \u2260 NEW INTENT. FUNCTIONAL MARKET \u2260 EXACT QUERY. GOLDMINE EVIDENCE \u2260 GOLDMINE CLAIM. CONVERGENCE \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.32",
      "date": "2026-09-11",
      "name": "SERP Reality / Result Composition",
      "highlights": [
        "Adds a read-only SERP Reality layer for live Google result composition using either DataForSEO (preferred advanced SERP endpoint) or SerpApi; provider configuration is optional and fails soft.",
        "Prioritizes Market Frontier candidates when available, then Warehouse, Demand Morphology, and Search Console evidence, with a default maximum of five live SERP observations per run and 24-hour in-Worker caching.",
        "Measures only observable composition: top-10 domain diversity, title/query alignment, UGC presence, government/education presence, dated-result staleness cues, AI Overview / answer / local / shopping feature saturation, and click-surface pressure.",
        "Introduces a bounded SERP composition-gap heuristic while explicitly refusing to call it keyword difficulty, domain authority, rank probability, or win probability.",
        "Allows SERP Reality to operate from owned Search Radar seeds even while Google Ads Market Frontier OAuth is temporarily unavailable.",
        "No Money Mission rank, canonical creation, selector invocation, Experiment Firewall change, Search Commit, experiment, or mutation authority is added.",
        "Doctrine: SERP COMPOSITION \u2260 RANKING DIFFICULTY. WEAKNESS HEURISTIC \u2260 WIN PROBABILITY. FEATURE SATURATION \u2260 ZERO CLICKS. UGC PRESENCE \u2260 WEAK CONTENT. SERP REALITY \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.31",
      "date": "2026-09-11",
      "name": "Search Radar Public Identity / OAuth Brand Surface",
      "highlights": [
        "Adds a public /search-radar/ application homepage whose visible app name, title, H1, canonical URL, and SoftwareApplication identity consistently identify Search Radar for OAuth brand verification.",
        "Explains Search Radar functionality, private-console boundary, human-controlled mutation model, Google OAuth use, and Google Ads Keyword Planner research boundary without exposing the private admin console.",
        "Links the application homepage directly to the same-domain Privacy Policy and Terms used by OAuth branding.",
        "Expands the Privacy Policy with explicit Google API data access, use, storage, sharing, retention, revocation, deletion, and Limited Use disclosures.",
        "Adds Search Radar to the sitemap and public page inventory and links the application identity page from About.",
        "Preserves Deployment Guard variable/secret protections and makes no change to Market Frontier, selector, Experiment Firewall, Search Commit, experiment, or mutation authority.",
        "Doctrine: PUBLIC IDENTITY \u2260 PUBLIC CONSOLE. OAUTH AUTHORIZATION \u2260 MUTATION AUTHORITY. DISCLOSURE \u2260 DATA EXPANSION."
      ]
    },
    {
      "version": "6.15.30",
      "date": "2026-09-11",
      "name": "Market Frontier Hardening / Functional Seeds",
      "highlights": [
        "Updates Google Ads API onboarding to the post-September-9 cloud-project access model; developer tokens are no longer required for Market Frontier authority.",
        "Keeps OAuth adwords scope and customer targeting, but reports the OAuth client Google Cloud project as the production API-access boundary.",
        "Compresses repeated lexical, entity-name, pronoun, and numeric variants into functional market seeds before Keyword Planner expansion.",
        "Prefers existing intent-cluster / canonical-page identity for market seeds so repeated fuel-proportion word problems collapse to the fuel-needed-calculator market rather than masquerading as separate opportunities.",
        "Retains raw exact support counts and compression state so seed compression remains inspectable and does not erase underlying observed evidence.",
        "Fails soft with a specific cloud-project access message when KeywordPlanIdeaService is unavailable; Explorer access remains insufficient for planning services.",
        "No Money Mission rank, canonical creation, selector invocation, Experiment Firewall change, Search Commit, experiment, or mutation authority is added.",
        "Doctrine: VARIATION \u2260 NEW INTENT. MARKET SEED \u2260 EXACT QUERY. MARKET SIZE \u2260 OWNED DEMAND. ADS COMPETITION \u2260 ORGANIC DIFFICULTY. FRONTIER \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.29",
      "date": "2026-09-11",
      "name": "Market Frontier / External Demand",
      "highlights": [
        "Adds a read-only Market Frontier layer that expands from already observed Search Console / Warehouse seed queries into external market demand using Google Ads Keyword Planner.",
        "Uses GenerateKeywordIdeas with Google Search, English, and United States targeting by default; provider geography/language are configurable without altering observed Search Radar evidence.",
        "Surfaces average monthly search volume, monthly trend ratio, top-of-page bid ranges, advertiser competition, lexical adjacency to observed demand, and explicit observed-exact vs adjacent-market status.",
        "Treats Google Ads competition strictly as advertiser competition, not organic ranking difficulty; SERP Reality remains the required next layer before any candidate can be called a goldmine.",
        "Caches external market results for 24 hours because Keyword Planning is rate-limited and historical metrics update slowly.",
        "Google Trends is represented only as an alpha-access runway; Search Radar does not scrape or emulate the restricted Trends API.",
        "No Money Mission rank, canonical creation, selector invocation, Experiment Firewall change, or mutation authority is added.",
        "Doctrine: MARKET SIZE \u2260 OWNED DEMAND. ADS COMPETITION \u2260 ORGANIC DIFFICULTY. CPC \u2260 REVENUE. ADJACENCY \u2260 INTENT. FRONTIER \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.28",
      "date": "2026-09-11",
      "name": "Search Health / SERP Eligibility",
      "highlights": [
        "Adds a read-only Search Health layer over current Money Missions, protected experiments, striking-distance surfaces, and pages with observed demand.",
        "Uses the existing Search Console webmasters.readonly OAuth grant to call URL Inspection for the version currently in Google\u2019s index; this is not a live-URL test.",
        "Surfaces index verdict, coverage, robots/indexing state, fetch state, crawl age, Google-selected vs declared canonical, sitemap/referrer evidence, crawler type, and rich-result issues.",
        "Adds bounded Search Analytics searchAppearance evidence so observed SERP feature treatment can be shown alongside technical eligibility without treating it as complete demand.",
        "Caches per-URL inspection results for 12 hours and defaults to 18 prioritized URLs, preserving ample headroom under Google\u2019s 2,000 URL inspections/day/site quota.",
        "Adds an internal CRAWL_STALE heuristic only for actively observed pages at least 45 days since last crawl; it is explicitly not a Google ranking rule.",
        "No Money Mission rank, selector, Experiment Firewall, Intervention Workbench, Search Commit, experiment, or mutation authority is added.",
        "Doctrine: ELIGIBILITY \u2260 RANKING. INSPECTION \u2260 LIVE URL TEST. SEARCH APPEARANCE \u2260 COMPLETE DEMAND."
      ]
    },
    {
      "version": "6.15.27",
      "date": "2026-09-10",
      "name": "Search Warehouse / Long-Tail Miner",
      "highlights": [
        "Adds an optional read-only Search Console Bulk Export \u2192 BigQuery warehouse adapter with a six-hour in-Worker result cache and a 1 GB maximum-bytes-billed guard per query.",
        "Reads exact query \u00d7 URL performance from searchdata_url_impression, anchored to the latest exported data_date and compared across adjacent equal windows.",
        "Adds a Long-Tail Miner that surfaces cross-window-new, accelerating, striking-distance, low-click-capture, and discovery-edge query/page seeds without changing Money Mission rank.",
        "Preserves anonymized-query impressions as an aggregate hidden-demand count while never fabricating their query text.",
        "Adds Search Warehouse status/config visibility and a dedicated private dashboard panel; missing BigQuery configuration fails soft as SETUP_REQUIRED and does not affect normal Search Radar operation.",
        "BigQuery authentication reuses the existing Google OAuth client by default but requires a separate BIGQUERY_REFRESH_TOKEN with BigQuery read scope; BIGQUERY_PROJECT_ID selects the Search Console export project and BIGQUERY_DATASET_ID defaults to searchconsole.",
        "Doctrine: WAREHOUSE \u2260 PERMISSION. VOLUME \u2260 INTENT. LONG-TAIL \u2260 NEW CANONICAL. Warehouse seeds must re-enter the existing evidence and intervention stack before any action."
      ]
    },
    {
      "version": "6.15.26",
      "date": "2026-09-10",
      "name": "Deployment Guard / Binding Preservation",
      "highlights": [
        "Adds keep_vars:true at the top level of wrangler.jsonc so dashboard-managed non-secret bindings survive Wrangler deployments.",
        "Declares required production secrets for Search Radar, GSC, GA4, AdSense, and Astra so Wrangler refuses a deployment when a required secret is absent.",
        "Makes npm run deploy execute the full regression suite first and also passes --keep-vars explicitly as a second preservation guard.",
        "Adds deploy:dry for a checked dry-run build and updates the Windows deployment helper to use --keep-vars.",
        "Adds deployment-safety regression coverage that fails if variable preservation, required-secret declarations, or safe deployment commands are removed.",
        "No search ranking, mission selection, Experiment Firewall, Workbench, revenue semantics, or mutation authority changes.",
        "Doctrine: DEPLOYMENT \u2260 CONFIGURATION DESTRUCTION. MISSING SECRET \u2260 SHIPPABLE RELEASE. SAFETY CHECK \u2260 SEARCH AUTHORITY."
      ]
    },
    {
      "version": "6.15.25",
      "date": "2026-09-10",
      "name": "Revenue Source Readiness / Expected Wait",
      "highlights": [
        "Adds AdSense owned-site readiness inspection through the existing Management API account before interpreting missing page-level revenue rows.",
        "Maps GETTING_READY to a source-level PENDING_APPROVAL state and skips page-report retrieval while the site is not yet READY.",
        "Preserves page economics as unknown rather than zero while AdSense approval is pending; GA4 traffic remains available without being misread as monetization evidence.",
        "Collapses redundant page-level revenue verification chores into one zero-effort WAIT_FOR_ADSENSE_APPROVAL observation condition.",
        "Value Surface marks unprotected pages as ECONOMIC_SOURCE_WAIT instead of VERIFY_MEASUREMENT while source readiness blocks attribution; protected experiment surfaces remain DO_NOT_TOUCH.",
        "When AdSense becomes READY, normal reporting resumes automatically; READY with zero source rows still produces VERIFY_ADSENSE_REPORTING.",
        "Doctrine: SOURCE READINESS \u2260 REVENUE ZERO. EXPECTED WAIT \u2260 MEASUREMENT FAILURE. SITE STATE \u2260 INTERVENTION PERMISSION."
      ]
    },
    {
      "version": "6.15.24",
      "date": "2026-09-10",
      "name": "Intervention Workbench / Surgical Review",
      "highlights": [
        "Adds a human-review-only intervention workspace that remains in STANDBY or RESOLUTION_AVAILABLE until an explicit selector resolution is requested.",
        "A READY_FOR_HUMAN_REVIEW package assembles bounded exact query evidence, Content Topology / routing / observability context, proposal-quality gates, Builder / Breaker review, and current Experiment Firewall state.",
        "Displays a smallest-sufficient-change manifest plus measurement window, success criteria, rollback rule, and release-witness context while explicitly marking the proposed diff as not applied.",
        "RESOLVE WORKBENCH runs the existing full automatic selector exactly once on explicit human request; routine dashboard and retrospective loading run zero selector calls.",
        "The workbench has no deploy, mutation, Search Commit write, or experiment write authority; Search Commit eligibility begins only after a human applies and verifies a live change.",
        "Doctrine: WORKBENCH \u2260 DEPLOYMENT. DIFF \u2260 APPLIED CHANGE. READY_FOR_HUMAN_REVIEW \u2260 AUTHORIZED MUTATION."
      ]
    },
    {
      "version": "6.15.23",
      "date": "2026-09-10",
      "name": "Shift Report / Session Brief",
      "highlights": [
        "Derives one deterministic operator briefing from Temporal Echo, Threadkeeper, Event Horizon, Operator Allocation, Observation Planner, Weather/Phase state, Demand Morphology, Resonance, Evidence Lattice, and Experiment Firewall.",
        "Uses the latest adjacent observed Search Radar states as the change boundary; it does not infer when the human last viewed the dashboard or create user-session history.",
        "Organizes the briefing around WHAT CHANGED, WHAT NEXT, WATCHING, and DO NOT TOUCH, with explicit experiment-protection carry-through and bounded plain-language synthesis.",
        "Adds COPY ASTRA HANDOFF, which copies a bounded doctrine-aware prompt for optional human-triggered Astra review; it makes no automatic Astra or selector call.",
        "Adds a read-only /api/admin/search-radar/shift-report endpoint and compact Shift Report context to Astra state without adding a persistence store, mutation path, or fifth MCP tool.",
        "Doctrine: BRIEF \u2260 SESSION TRACKING. SUMMARY \u2260 EVIDENCE. SALIENCE \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.22",
      "date": "2026-09-10",
      "name": "Parallax / Twin-Frame Delta",
      "highlights": [
        "Extends the Time Dial with PIN A + COMPARE controls for direct overlay of two retained Black Box observations without introducing a new backend history system.",
        "Requires matching search-window length and matching fresh/final state before a twin-frame delta is allowed; incompatible frames remain uncomparable rather than being normalized into a false comparison.",
        "Computes aggregate and shared-page endpoint deltas only where both compact frames actually retain the evidence; A-only/B-only rows are explicitly labeled bounded frame coverage rather than appearance/disappearance.",
        "Adds an Ambient twin-frame overlay with Frame A radius, Frame B radius, shared-page gain/loss treatment, bounded morphology count comparison, and an endpoint event rail while clearing all current-only derived overlays.",
        "Adds no API, persistence store, selector invocation, mission rank, analytical authority, or mutation path; it reuses the Time Dial Black Box frame set.",
        "Doctrine: DELTA \u2260 CAUSE. FRAME MEMBERSHIP \u2260 PRESENCE OR ABSENCE. TWIN-FRAME \u2260 CURRENT STATE."
      ]
    },
    {
      "version": "6.15.21",
      "date": "2026-09-10",
      "name": "Time Dial / Temporal Scrubber",
      "highlights": [
        "Adds TIME DIAL // RETAINED OBSERVATIONS inside Ambient Radar with manual previous/next controls, a scrubber, explicit LIVE return, and bounded one-pass playback from retained history back to current state.",
        "Historical replay renders only evidence physically present in each compact Black Box snapshot: aggregate search metrics, retained page signals, retained query morphology, telemetry/release/window metadata, and contiguous-frame deltas when the prior compatible frame is exactly adjacent.",
        "Clears current-only overlays during replay, including experiment/protection geometry, routing edges, morphology-memory/salience, Wavefront/Weather/Phase Shift, Resonance, Evidence Lattice, Observation Planner, Operator Allocation, Threadkeeper, Event Horizon, and transient data pulses rather than painting present-day state backward onto history.",
        "Treats history gaps and compact-snapshot omission as unknown rather than disappearance; historical nodes do not invoke live autopsy or decision controls.",
        "Adds no API, persistence store, selector invocation, mission rank, analytical authority, or mutation path; it reuses the existing Black Box history request already loaded by the dashboard.",
        "Doctrine: REPLAY \u2260 CURRENT STATE. FRAME \u2260 LIVE STATE. ABSENCE IN A COMPACT FRAME \u2260 DISAPPEARANCE."
      ]
    },
    {
      "version": "6.15.20",
      "date": "2026-09-10",
      "name": "Viewport Engine / Ambient Fit",
      "highlights": [
        "Rebuilds native/full-window Ambient Mode around flex-driven dynamic viewport geometry instead of the fixed 100vh-minus-header assumption that could clip the field after Optical Deck scaling.",
        "Adds browser-local FIT // AUTO / FIELD / DATA framing plus live viewport profiles (BALANCED, ULTRAWIDE, LOW_HEIGHT, STACKED) derived only from the actual rendered panel dimensions.",
        "Decouples Ambient fullscreen optical framing from dashboard COMPACT/COMFORT/LARGE preferences so LARGE dashboard text can remain readable without inflating the fullscreen header or cutting off the field.",
        "Makes the Ambient stage and HUD true min-height:0 flex/grid children with contained HUD scrolling, dynamic 100dvh sizing, ResizeObserver/resize/fullscreenchange resynchronization, and low-height/stacked fallbacks.",
        "Adds no API, persistence store beyond a browser-local fit preference, selector invocation, mission rank, evidence weighting, analytical authority, or mutation path.",
        "Doctrine: FIT \u2260 FILTER. VIEWPORT \u2260 EVIDENCE. FRAMING \u2260 PRIORITY."
      ]
    },
    {
      "version": "6.15.19",
      "date": "2026-09-10",
      "name": "Optical Deck / Legibility System",
      "highlights": [
        "Adds OPTICAL DECK // LEGIBILITY SYSTEM with COMPACT, COMFORT, and LARGE text scales plus STANDARD/ENHANCED contrast controls.",
        "Defaults new browser sessions to COMFORT + ENHANCED CONTRAST and persists the operator optical preference locally across visits without writing analytical state.",
        "Adds a main control-strip TEXT quick-cycle and raises minimum information-bearing microtype sizes so dense subsystem labels remain readable at normal desktop distance.",
        "Preserves the time-machine aesthetic while improving muted-text contrast, line height, control sizing, and minimap visibility; reduced-motion and focus behavior remain unchanged.",
        "Adds no API, persistence store, selector invocation, mission rank, evidence weighting, analytical authority, or mutation path.",
        "Doctrine: SCALE \u2260 SALIENCE. LEGIBILITY \u2260 PRIORITY. PRESENTATION \u2260 EVIDENCE."
      ]
    },
    {
      "version": "6.15.18",
      "date": "2026-09-10",
      "name": "Focus Lens / Progressive Disclosure",
      "highlights": [
        "Adds FOCUS LENS // PROGRESSIVE DISCLOSURE to the Command Deck with FULL MACHINE, NOW, WATCHING, MORPHOLOGY, ECONOMICS, and EXPERIMENTS views.",
        "Focus modes only change presentation: every analytical subsystem continues to render from the same report/retrospective state, and directly navigating to a hidden subsystem restores FULL MACHINE before scrolling.",
        "Dims out-of-lens System Index and minimap targets while preserving them as explicit navigation exits, preventing focus from becoming evidence suppression.",
        "Stores the chosen lens only for the browser session and defaults back to FULL MACHINE in a new session so filtered presentation cannot silently become durable system state.",
        "Adds no API, persistence store, selector invocation, mission rank, analytical authority, or mutation path.",
        "Doctrine: DISCLOSURE \u2260 SUPPRESSION. FOCUS \u2260 AUTHORITY. VIEW \u2260 STATE."
      ]
    },
    {
      "version": "6.15.17",
      "date": "2026-09-10",
      "name": "Command Deck / System Index",
      "highlights": [
        "Adds COMMAND DECK // SYSTEM INDEX as a composition-only operator surface over existing Search Radar state: NOW, WATCHING, and DEEP SYSTEMS.",
        "Synthesizes Observation Planner, Operator Allocation, Continuity, Field Regime, Demand Morphology, Phase Shift, Resonance, and Evidence Lattice into one glanceable control deck without creating new analytical authority.",
        "Adds a deterministic vertical system minimap over existing dashboard panels, with scroll-position tracking and signal highlighting derived from existing panel state rather than fabricated activity.",
        "Adds direct jump navigation from the deck and control strip so the increasingly deep Search Radar stack can be operated without linear full-page scrolling.",
        "Adds no new API, persistence store, MCP tool, selector invocation, mission rank, or mutation path; it reorganizes existing observed state only.",
        "Doctrine: FOCUS \u2260 AUTHORITY. INDEX \u2260 PRIORITY. NAVIGATION \u2260 INTERVENTION."
      ]
    },
    {
      "version": "6.15.16",
      "date": "2026-09-10",
      "name": "Observation Planner / Evidence Acquisition",
      "highlights": [
        "Adds OBSERVATION PLANNER // EVIDENCE ACQUISITION as a read-only scheduler over Evidence Lattice gaps, Operator Allocation, Event Horizon, telemetry health, and Experiment Firewall state.",
        "Ranks the cheapest missing observation first and explicitly allows zero-effort WAIT_FOR_FINAL_WINDOW and ACCUMULATE_DISTINCT_OBSERVATION tasks when time alone can improve evidence.",
        "Promotes source-level AdSense reporting verification ahead of repetitive page-level revenue checks when the live revenue source returns zero rows.",
        "Can recommend an explicit RESOLVE NEXT ACTION only when Operator Allocation says INTERROGATE and no critical observation gap blocks resolution; the planner itself never invokes the selector.",
        "Adds bounded compact Astra Observation Planner context, read-only /api/admin/search-radar/observation-planner, and restrained Ambient observation brackets with zero mutation authority.",
        "Doctrine: OBSERVATION \u2260 INTERVENTION. MORE DATA \u2260 MORE PERMISSION. CHEAPEST EVIDENCE FIRST."
      ]
    },
    {
      "version": "6.15.15",
      "date": "2026-09-10",
      "name": "Evidence Lattice / Observability Depth",
      "highlights": [
        "Adds EVIDENCE LATTICE // OBSERVABILITY DEPTH as a read-only instrumentation-depth lens over Signal Resonance, Morphology Memory, Search Twin routing provenance, GA4 page activity, and observed economic attribution.",
        "Separates source breadth, domain breadth, temporal depth, fresh/final window completeness, engagement visibility, economic visibility, routing provenance, and directional consistency from outcome confidence.",
        "Surfaces explicit measurement gaps rather than silently treating missing telemetry as zero or absence.",
        "Adds bounded compact Astra Evidence Lattice context and read-only /api/admin/search-radar/evidence-lattice with zero selector invocation and no new persistence.",
        "Doctrine: DEPTH \u2260 CONFIDENCE. COVERAGE \u2260 CORRECTNESS. DIVERSITY \u2260 INDEPENDENCE. OBSERVABILITY \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.14",
      "date": "2026-09-10",
      "name": "Resonance / Multi-Signal Convergence",
      "highlights": [
        "Adds RESONANCE // MULTI-SIGNAL CONVERGENCE as a read-only page overlay across already-derived search movement, morphology salience, Wavefront participation, exact routing pressure, GA4 engagement, and observed page-level economic evidence.",
        "Requires at least three active evidence domains and at least two directional channels with 75% dominant agreement for DIRECTIONAL_RESONANCE; directional conflict becomes MIXED_RESONANCE and non-directional co-occurrence remains MULTI_SIGNAL_CONTEXT.",
        "Exposes source families separately from domains so GSC-derived Search, Morphology, Field, and Routing channels retain their shared ancestry and are never presented as statistically independent confirmations.",
        "Unobserved page-level revenue remains unknown and is excluded from economic resonance; GA4 engagement can provide cross-source context without becoming directional proof by itself.",
        "Carries Experiment Firewall state onto every surface; protected resonant surfaces remain DO_NOT_TOUCH / OBSERVE_ONLY and convergence cannot promote a mission or invoke the selector.",
        "Adds a private Resonance panel, bounded compact Astra convergence context, read-only /api/admin/search-radar/signal-resonance, and restrained Ambient Radar resonance rings derived only from active evidence domains.",
        "Doctrine: RESONANCE \u2260 CAUSALITY. CONVERGENCE \u2260 INDEPENDENCE. AGREEMENT \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.13",
      "date": "2026-09-10",
      "name": "Phase Shift / Regime Transition",
      "highlights": [
        "Adds PHASE SHIFT // REGIME TRANSITION as a read-only transition lens over directly contiguous retained Field Regime observations.",
        "Classifies witnessed transitions including WAVE_ONSET, INTENSIFICATION, PERSISTENCE_CROSSED, DIRECTION_REVERSAL, RELAXATION, WAVE_COLLAPSE, QUIET_ONSET, FIELD_REORGANIZATION, STABLE_PHASE, and UNKNOWN_TRANSITION.",
        "History gaps explicitly become UNKNOWN_TRANSITION rather than interpolated movement; a transition requires directly adjacent retained observation dates.",
        "Carries current protected-wave participation into DO_NOT_TOUCH_PROTECTED_PARTICIPANTS so a phase shift never weakens the Experiment Firewall.",
        "Adds a private Phase Shift panel, bounded transition timeline, Ambient Radar phase seam, and event-rail transition witness derived only from retained state.",
        "Adds read-only /api/admin/search-radar/regime-transition plus bounded compact Astra transition context with zero selector invocation, no new MCP tool, and no mutation authority.",
        "Doctrine: PHASE SHIFT \u2260 FORECAST. TRANSITION \u2260 CAUSE. REVERSAL \u2260 ALGORITHM UPDATE. TRANSITION \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.12",
      "date": "2026-09-10",
      "name": "Weather Map / Field Regime",
      "highlights": [
        "Adds WEATHER MAP // FIELD REGIME as a read-only temporal lens over repeated retained Wavefront states, distinguishing transient, emerging, persistent, mixed, localized, quiet, and reversal field regimes.",
        "Persistent expansion or contraction requires three consecutive contiguous retained COHERENT_WAVE observations in the same direction; two is only EMERGING and one remains TRANSIENT.",
        "A directly adjacent opposite Wavefront is labeled DIRECTION_REVERSAL rather than silently folded into a new persistent regime; history gaps break persistence continuity.",
        "Field Regime rebuilds historical Wavefront states from the already-recorded bounded Demand Morphology snapshots and adds no new persistence store.",
        "Adds a private Weather Map panel, retained field timeline, and a restrained Ambient Radar weather band derived only from observed regime state.",
        "Adds read-only /api/admin/search-radar/field-regime plus bounded compact Astra regime context with zero selector invocation, no new MCP tool, and no mutation authority.",
        "Doctrine: REGIME \u2260 ALGORITHM UPDATE. PERSISTENCE \u2260 CAUSE. WEATHER \u2260 FORECAST. REGIME \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.11",
      "date": "2026-09-10",
      "name": "Wavefront / Field Coherence",
      "highlights": [
        "Adds WAVEFRONT // FIELD COHERENCE as a read-only cross-surface lens over directly comparable Morphology Memory page vectors, distinguishing local movement from synchronized site-wide movement.",
        "Declares COHERENT_WAVE only when at least three directional pages exist, at least three agree on one direction, and dominant directional agreement is at least 67%; otherwise the field remains LOCALIZED_SALIENCE, MIXED_FIELD, QUIET_FIELD, or LEARNING_FIELD.",
        "Builds page vectors only from retained shapes present in the immediately prior comparable observation, with explicit impression materiality of max(10, 25% of prior comparable impressions) plus exact-variant and ATTACK-signal movement checks.",
        "Carries Experiment Firewall state onto every page vector and wave participant; protected surfaces remain DO_NOT_TOUCH even when they participate in a coherent wave.",
        "Adds a private Field Coherence panel plus an Ambient Radar wavefront that links only observed wave pages; quiet/local fields do not get decorative site-wide motion.",
        "Adds read-only /api/admin/search-radar/field-coherence and bounded compact Astra wave summaries with zero selector invocation, no new persistence, no fifth MCP tool, and no mutation authority.",
        "Doctrine: COHERENCE \u2260 CAUSALITY. SYNCHRONY \u2260 SHARED CAUSE. WAVE \u2260 PERMISSION. Directional agreement is descriptive, not statistical significance, common cause, opportunity, or authorization."
      ]
    },
    {
      "version": "6.15.10.1",
      "date": "2026-09-10",
      "name": "Ambient Salience State Guard Hotfix",
      "highlights": [
        "Fixes a frontend crash in Ambient Radar introduced in 6.15.10 where morphology_salience was computed inside ambientData() but omitted from the returned data packet, causing renderAmbientField() to read state from undefined.",
        "Returns the bounded morphology salience object as ms and hardens Ambient rendering with empty-object and empty-array defaults so optional derived layers fail quiet instead of throwing.",
        "Adds a static integration contract that asserts the Ambient data packet contains ms and the renderer keeps a fail-safe default.",
        "No Search Radar decision logic, morphology scoring, selector behavior, experiment protection, persistence, or mutation authority changed."
      ]
    },
    {
      "version": "6.15.10",
      "date": "2026-09-10",
      "name": "Salience Field / Morphology Flare",
      "highlights": [
        "Adds SALIENCE FIELD // MORPHOLOGY FLARE as a read-only range-break lens over Morphology Memory so unusual retained shape movement can be separated from ordinary drift without creating a new decision system.",
        "Requires at least three prior contiguous observations with the same window length and fresh/final mode before a flare is eligible; new, gapped, and under-observed shapes remain LEARNING_BASELINE.",
        "Checks exact-query count, ATTACK-signal count, impressions, and observed variation-axis count against each shape's own retained range using explicit materiality thresholds rather than a statistical-significance claim.",
        "Adds MORPHOLOGY_FLARE and LOCKED_FLARE states; experiment-protected flares are OBSERVE_ONLY and cannot clear or compete with the Experiment Firewall.",
        "Adds a bounded salience_score for inspection ordering only; it is not a p-value, forecast, success probability, mission score, or intervention authorization.",
        "Adds a private Salience Field panel and restrained Ambient Radar flare treatment that appears only for a derived active range break; baseline-learning shapes remain visually quiet.",
        "Adds read-only /api/admin/search-radar/morphology-salience and compact Astra flare summaries with zero selector invocation, no raw-query replay, no fifth MCP tool, and no mutation authority.",
        "Doctrine: SALIENCE \u2260 SIGNIFICANCE. FLARE \u2260 OPPORTUNITY. RANGE BREAK \u2260 PERMISSION."
      ]
    },
    {
      "version": "6.15.9",
      "date": "2026-09-10",
      "name": "Morphology Memory / Constellation Drift",
      "highlights": [
        "Adds MORPHOLOGY MEMORY // CONSTELLATION DRIFT as a derived historical comparison over bounded Demand Morphology summaries already stored in Black Box snapshots; no new persistence subsystem is introduced.",
        "Tracks retained shape recurrence, consecutive observation streaks, variant expansion/contraction, ATTACK-field changes, signal gain/loss, and re-observation after gaps using stable deterministic shape IDs.",
        "Adds constellation-level shape-set expansion/contraction and variant-field movement without interpreting shape-count change as proof of a new intent.",
        "Treats compact-snapshot absence as UNKNOWN rather than disappearance because Black Box intentionally retains only bounded top morphology rows; REOBSERVED_AFTER_GAP is descriptive, not proof a shape vanished and returned.",
        "Carries Experiment Firewall protection onto morphology-memory rows so high drift or recurrence can remain LOCKED / OBSERVE and can never compete with an armed or immature experiment.",
        "Adds a private Morphology Memory panel plus subtle Ambient Radar drift rings whose motion reflects recorded shape change rather than decorative activity.",
        "Adds read-only /api/admin/search-radar/morphology-memory and a bounded compact Astra morphology-memory packet with zero selector invocation, no fifth MCP tool, and no mutation authority.",
        "Doctrine: DRIFT \u2260 INTENT. RECURRENCE \u2260 CAUSALITY. ABSENCE \u2260 DISAPPEARANCE. Historical morphology earns context only; every contemplated intervention still re-enters the existing gates."
      ]
    },
    {
      "version": "6.15.8",
      "date": "2026-09-10",
      "name": "Variation Axis / Shape Explainer",
      "highlights": [
        "Extends Demand Morphology in place with VARIATION AXIS / SHAPE EXPLAINER so compact operator context can explain why exact queries collapse into one deterministic shape without creating a parallel ontology or persistence layer.",
        "Derives bounded observed axes including ENTITY_NAME, NUMERIC_VALUES, MONEY_VALUES, PERCENT_VALUES, PRONOUN, UNIT_INFLECTION, and constellation-level SHAPE_STRUCTURE from returned exact query strings only.",
        "Adds per-shape normalized templates, variation profiles, attack-only variation axes, and bounded shape explanations while preserving every verbatim member only in the full evidence surface.",
        "Compact Astra state now exposes structural templates and descriptors for up to four shapes per constellation, but deliberately omits raw member strings so Astra can explain 5\u21921 compression without consuming the exact-query blob.",
        "Black Box compact morphology memory now retains bounded templates and variation-axis summaries so future history can describe how observed query families vary over time without inferring privacy-hidden demand.",
        "Enhances the Constellation Engine panel with visible variation-axis badges and multi-shape explanation cards; the existing Ambient constellation field remains state-encoded rather than decorative.",
        "No new API endpoint, selector invocation, MCP tool, persistence object, mission rank, or mutation authority is added; this is an explanatory extension of DEMAND_MORPHOLOGY_V1.",
        "Doctrine: AXIS \u2260 INTENT. A structural descriptor explains observed differences among returned exact queries; it does not establish a distinct intent, prove latent demand, clear protection, or authorize intervention."
      ]
    },
    {
      "version": "6.15.7",
      "date": "2026-09-10",
      "name": "Constellation Engine / Demand Morphology",
      "highlights": [
        "Adds CONSTELLATION ENGINE // DEMAND MORPHOLOGY as a deterministic read-only layer over returned exact Search Console page+query rows, grouping wording variation into structural query shapes and routed constellations without discarding the source evidence.",
        "Separates raw signal count from distinct observed shape count so templated variants such as named/numeric fuel word problems no longer look like independent intent discoveries merely because wording changed.",
        "Preserves Decision Core, opportunity, Money Mission, Intent Cartography, and selector semantics unchanged; morphology is an inspection/compression lens, not a replacement ranking or decision system.",
        "Adds raw ATTACK \u2192 attack-shape \u2192 constellation compression metrics while retaining representative verbatim queries and explicit current-only observability caveats.",
        "Extends compact Black Box snapshots with bounded shape/constellation summaries so future history can inspect morphology evolution without creating a new persistence subsystem.",
        "Adds a private Constellation Engine panel and Ambient Radar variant-star field whose stars encode observed exact-query multiplicity rather than decorative particles.",
        "Adds read-only /api/admin/search-radar/demand-morphology plus compact Astra morphology context with zero selector invocations, no fifth MCP tool, and no mutation authority.",
        "Doctrine: VARIATION \u2260 NEW INTENT. COMPRESSION \u2260 SUPPRESSION. Every contemplated intervention still re-enters Intent Cartography, Content Topology, Experiment Firewall, Routing Edge Gate, Builder / Breaker, Mission Control, and Decision Finality."
      ]
    },
    {
      "version": "6.15.6",
      "date": "2026-09-10",
      "name": "Event Horizon / Approach Field",
      "highlights": [
        "Adds EVENT HORIZON // APPROACH FIELD as a continuously derived view of distance to already-defined re-evaluation conditions without forecasting Google, demand, revenue, experiment outcomes, or intervention success.",
        "Synthesizes Threadkeeper continuity, Experiment Verdict maturity, Frontier numeric gate distance, Operator Allocation state, Temporal Echo context, and Experiment Firewall protection into bounded per-surface horizons.",
        "Classifies known conditions as REVIEW_NOW, NEAR, APPROACHING, WAITING, LOCKED, or UNKNOWN_DISTANCE and exposes progress only when a real numerator/threshold pair exists.",
        "Experiment maturity horizons can approach while remaining DO_NOT_TOUCH; a mature or review-due thread earns human review, not automatic mutation.",
        "Frontier thresholds that approach on an Experiment Firewall page render LOCKED and suppressed_by_protection; numeric proximity can never compete with active measurement protection.",
        "Adds a private dashboard focus horizon, progress meters, and subtle Ambient Radar horizon rings around surfaces approaching explicit evidence conditions.",
        "Adds read-only /api/admin/search-radar/event-horizon plus compact Astra context with zero selector invocations, no new persistence, no fifth MCP tool, and no mutation authority.",
        "Doctrine: APPROACH \u2260 PREDICTION. Crossing a known horizon only earns re-evaluation through the existing Content Topology, Intervention Gate, Firewall, Routing Edge Gate, Builder / Breaker, Mission Control, Decision Finality, and human review machinery."
      ]
    },
    {
      "version": "6.15.5",
      "date": "2026-09-10",
      "name": "Threadkeeper / Continuity Weave",
      "highlights": [
        "Adds THREADKEEPER // CONTINUITY WEAVE as a derived per-surface storyline over Experiment Firewall, Knowledge Debt, Temporal Echo, Operator Allocation, Search Twin, Search Commit, and experiment evidence already owned by Search Radar.",
        "Weaves bounded lifecycle threads across HUMAN_REVIEW_READY, REVIEW_DUE, CONTINUITY_REPAIR, VERIFY_DUE, INTERROGATION_DUE, MEASURING, MOVING_OBSERVED, WAITING, LEARNING, and WATCHING without creating a shadow Mission Queue.",
        "Each thread exposes what started or sustains it, what the machine is waiting on, the condition that would advance the thread, current touch policy, latest observed echo, operator task, and a bounded evidence timeline.",
        "A mature experiment may become REVIEW_DUE while remaining DO_NOT_TOUCH until human review closes or changes the protected experiment state; maturity is attention evidence, not mutation permission.",
        "Adds a focus thread and continuity loom to the private admin UI plus subtle Ambient Radar continuity orbits around the currently unfolding surface.",
        "Adds read-only /api/admin/search-radar/continuity-threads and compact Astra continuity context with zero selector invocations, no new persistence, no fifth MCP tool, and no mutation authority.",
        "Preserves Operator Economy and Decision Finality: Threadkeeper cannot rescue NO_JUSTIFIED_INTERVENTION_IN_RETURNED_MISSION_LIST or any other terminal no-action state.",
        "Doctrine: THREAD \u2260 MISSION. Continuity salience keeps an evidence thread alive for the operator; it does not create demand, rank missions, forecast outcomes, or authorize intervention."
      ]
    },
    {
      "version": "6.15.4",
      "date": "2026-09-10",
      "name": "Watchtower / Temporal Echo",
      "highlights": [
        "Adds WATCHTOWER // TEMPORAL ECHO to answer what changed between the latest two distinct observed Search Radar states without inventing realtime events.",
        "Compares adjacent site metrics, compact page signals, returned Money Mission membership/rank/directive, routing pressure, experiment verdict maturity, release epochs, and human-witnessed Search Commits.",
        "Labels adjacent rolling-window overlap explicitly; deltas are directional observations and are never treated as independent samples, causal effects, forecasts, or intervention permission.",
        "Adds bounded page_echoes with GAIN / LOSS / MIXED direction and significance scoring for inspection only; entering or leaving the compact observed set is not misrepresented as page creation or demand disappearance.",
        "Adds temporal afterimage rings to Ambient Radar so meaningful page movement is visible as remembered state while the existing current-state nodes, experiment containment, routing flows, value halos, and Attention Vector remain intact.",
        "Extends the Ambient event rail and HUD with semantic temporal echo state while preserving AMBIENT \u2260 REAL-TIME CLAIM and ATTENTION \u2260 AUTHORITY.",
        "Adds read-only /api/admin/search-radar/temporal-echo and compact Astra temporal context with no selector invocation, no new persistence, and no fifth MCP tool.",
        "Doctrine: ECHO \u2260 CAUSE. Temporal Echo is descriptive adjacent-state memory only; every contemplated change still re-enters the existing decision gates."
      ]
    },
    {
      "version": "6.15.3",
      "date": "2026-09-10",
      "name": "Operator Allocation / Attention Vector",
      "highlights": [
        "Adds OPERATOR ALLOCATION // NEXT UNIT OF EFFORT as a derived attention scheduler over Value Surface, current Money Missions, Experiment Firewall protection, Search Twin constraints, and optional selector closure.",
        "Classifies the next operator unit as VERIFY, REVIEW, INTERROGATE, OBSERVE, DO_NOW, or NO_ACTION so the machine can distinguish measurement work, analysis, expensive interrogation, protected waiting, and a genuinely surviving intervention.",
        "Preserves VALUE \u2260 PERMISSION: economic review score may order attention but cannot rescue a terminal decision or authorize content, routing, experiment, Search Commit, or deployment mutation.",
        "Makes DO_NOW structurally dependent on the existing full automatic selector independently returning READY_FOR_HUMAN_REVIEW; DO_NOW still requires human review/application and carries mutation_authority:false.",
        "Adds explicit DO NOT TOUCH protection context for Experiment Firewall surfaces so high-value protected pages remain visible without becoming intervention candidates.",
        "Adds read-only /api/admin/search-radar/operator-allocation with cheap derived attention by default and explicit resolve=1 selector closure, preserving Operator Economy by avoiding selector runs on routine refresh.",
        "Adds RESOLVE NEXT ACTION to the private console; one explicit resolution performs one selector invocation and folds its terminal result back into the allocator.",
        "Extends Ambient Radar with a semantic Attention Vector toward the current next-unit page when available, making the always-open field operational without claiming realtime search updates.",
        "Adds no new persistence and no fifth MCP tool. Doctrine: ATTENTION \u2260 AUTHORITY; all intervention authority remains behind Content Topology, Intervention Gate, Experiment Firewall, Routing Edge Gate, Builder / Breaker, Mission Control, Decision Finality, and human application."
      ]
    },
    {
      "version": "6.15.2",
      "date": "2026-09-10",
      "name": "Ambient Radar / Living Field",
      "highlights": [
        "Adds LIVE FIELD // AMBIENT RADAR as a semantic visualization derived entirely from existing Search Twin, exact routing provenance, Attractor Map, Value Surface, experiment protection, Black Box, Search Commit, and Singularity evidence.",
        "Projects up to 38 current Search Twin surfaces into a deterministic living topology where node position is stable by page identity and visual behavior reflects state, field strength, routing tension, economic review evidence, historical motion, and experiment protection.",
        "Animates only semantic instrumentation: routing flow follows observed wrong-landing edges, protected surfaces receive containment orbits, value surfaces receive bounded halos, and new logical observation windows create one-time snapshot pulses.",
        "Adds an event rail combining stored Black Box snapshots, Search Commits, armed experiments, and detected bends without creating a new persistence system or fabricating event timestamps.",
        "Adds a full-screen Ambient Mode designed for an always-open second-monitor instrument while preserving the existing dashboard, page autopsy actions, and all current decision controls underneath it.",
        "Supports motion pause, prefers-reduced-motion, hidden-tab animation pause, deterministic SVG rendering, and the existing 15-minute auto-refresh path so the ambient layer does not burn CPU or claim sub-window realtime telemetry.",
        "Adds explicit doctrine: AMBIENT \u2260 REAL-TIME CLAIM. Continuous motion renders the latest observed state; only actual logical observation changes create new-data pings.",
        "Preserves every authority boundary: the Living Field is visualization only and cannot create missions, alter gates, arm experiments, write Search Commits, select proposals, or mutate the site."
      ]
    },
    {
      "version": "6.15.1",
      "date": "2026-09-10",
      "name": "Value Surface / Economic Priority Field",
      "highlights": [
        "Adds Value Surface as a derived economic evidence overlay over the existing Search Money Map, current page-level revenue observability, Revenue Witness memory, Experiment Firewall protection, Money Mission context, and Search Twin state.",
        "Preserves Search Money Map as the current opportunity model; Value Surface does not create a duplicate SEO opportunity score or mission selector.",
        "Adds a bounded economic_review_score used only to order human inspection, weighted primarily by the existing Revenue Opportunity Score plus current revenue observability and clean economic-memory depth.",
        "Classifies MEASURING_PROTECTED, VALUE_AT_RISK, EARNING_WITH_UP_OBSERVATION, PROVEN_EARNING_SURFACE, HIGH_VALUE_UNOBSERVED, OBSERVED_ZERO_WITH_TRAFFIC, ECONOMIC_MEMORY_SURFACE, and ECONOMIC_SEED states.",
        "Maps states to operator review lanes such as OBSERVE_ONLY and VERIFY_MEASUREMENT; protected earning surfaces may demand attention but remain explicitly non-mutable.",
        "Summarizes event-level economic memory by direction and latest delta without summing overlapping Search Commit dollar changes.",
        "Uses a dedicated 90-day Black Box economic-memory horizon so short current-search windows do not hide older clean intervention revenue witnesses.",
        "Adds VALUE SURFACE // ECONOMIC PRIORITY FIELD to the private console plus read-only /api/admin/search-radar/value-surface, Retrospective integration, and bounded compact Astra context with no fifth MCP tool.",
        "Doctrine: VALUE \u2260 PERMISSION. selection_authority:false and action_authority:false; economic evidence cannot bypass Content Topology, Intervention Gate, Experiment Firewall, Routing Edge Gate, Builder / Breaker, Mission Control, or Decision Finality."
      ]
    },
    {
      "version": "6.15.0",
      "date": "2026-09-09",
      "name": "Revenue Witness / Intervention Economics",
      "highlights": [
        "Adds Intervention Economics as a derived revenue witness over Black Box snapshots, human Search Commits, and experiment context; it creates no new ledger or mutation authority.",
        "Finds observed page-level revenue windows before a Search Commit and requires a same-basis reporting window fully after the applied change before labeling an economic comparison clean.",
        "Preserves AdSense as revenue-of-record when live and adds explicit GA4 page-row provenance so missing telemetry is not silently treated as observed zero revenue.",
        "Reports per-intervention before/after revenue, sessions, key events, page views, RPM, arithmetic deltas, and UP / DOWN / FLAT direction without converting temporal sequence into ROI or causal attribution.",
        "Carries mature linked experiment context separately and marks whether the experiment design explicitly names a revenue/conversion endpoint; experiment linkage never upgrades temporal observation into automatic causality.",
        "Refuses to sum intervention dollar deltas because rolling windows and repeated interventions can overlap and double-count the same money.",
        "Adds REVENUE WITNESS // INTERVENTION ECONOMICS to the private console, a read-only /api/admin/search-radar/intervention-economics endpoint, Retrospective integration, and a bounded compact Astra summary with no fifth MCP tool.",
        "Doctrine: OBSERVED MONEY \u2260 CAUSED MONEY. Economic evidence can inform human review but cannot generate missions, bypass Decision Finality, or authorize mutation."
      ]
    },
    {
      "version": "6.14.7",
      "date": "2026-09-09",
      "name": "Attractor Map / State Topology",
      "highlights": [
        "Adds Attractor Map as a derived state-topology graph over Local Physics transition evidence; it does not simulate Google or predict page destinations.",
        "Converts observed regime transitions into nodes and directed edges with inbound/outbound counts, self-transition persistence, direct capture, outgoing diversity, recurrence strength, and observed motion context.",
        "Classifies bounded historical state roles including HISTORICAL_ATTRACTOR_CANDIDATE, STICKY_STATE, RECEIVING_BASIN, TRANSITION_HUB, ESCAPE_CORRIDOR, TRANSITION_STATE, and SPARSE_STATE.",
        "Requires repeated observed persistence plus inbound support before a regime can become a historical attractor candidate; attractor means recurrent historical signature only, never a ranking target, probability, causal basin, or forecast.",
        "Adds direct feeder evidence and dominant observed pathways without inferring hidden multi-step causality or future movement.",
        "Places current Search Twin surfaces into the historical topology so operators can inspect the regime each page occupies without converting topology into intervention pressure.",
        "Adds ATTRACTOR MAP // STATE TOPOLOGY to the private console plus a read-only /api/admin/search-radar/attractors endpoint; Retrospective and compact Astra state receive bounded summaries with no fifth MCP tool.",
        "Preserves all authority boundaries: action_authority:false, no new persistence, no mission generation, no belief replacement, no experiment authority, and no mutation authority."
      ]
    },
    {
      "version": "6.14.6",
      "date": "2026-09-09",
      "name": "Domain Model / Local Physics",
      "highlights": [
        "Adds Local Physics as a site-specific historical transition model learned only from tannerd.net Black Box evidence; it does not claim universal SEO rules or simulate Google.",
        "Builds transition pairs from Black Box observations at least seven days apart to reduce repeated counting from rolling Search Console windows before learning page-state motion frequencies.",
        "Classifies historical observations into bounded regimes aligned with existing Search Radar thresholds, then records GAIN / LOSS / STABLE motion, next-regime transitions, and whether a human-witnessed Search Commit occurred inside the interval.",
        "Derives SITE_LOCAL_OBSERVATION tendencies only after repeated comparable transitions, preserving sample count, separated-pair count, confidence, outcome distribution, and next-regime distribution rather than converting frequency into prediction.",
        "Adds current historical analogs that show what followed similar regimes elsewhere in tannerd.net history while explicitly refusing to forecast the current page.",
        "Adds DOMAIN MODEL // LOCAL PHYSICS to the private console and a read-only /api/admin/search-radar/local-physics endpoint; Retrospective and compact Astra state receive bounded summaries.",
        "Preserves authority boundaries: Local Physics is descriptive memory only and cannot create missions, modify Decision Finality, bypass Builder / Breaker, arm experiments, or mutate the site."
      ]
    },
    {
      "version": "6.14.5",
      "date": "2026-09-09",
      "name": "Search Twin / Current State Field",
      "highlights": [
        "Adds Search Twin as a derived present-state projection over evidence Search Radar already owns rather than a parallel ontology, simulated Google model, or forecast engine.",
        "Projects each known surface into one inspectable field combining registered intent ownership, current Search Console demand, Money Mission/value context, exact routing tension, Experiment Firewall protection, historical movement, Singularity bends, Orbit motion, Frontier pressure, beliefs, contradictions, Search Commit history, learned shapes, and open learning loops.",
        "Adds bounded field-strength and dominant-force summaries strictly as attention heuristics; neither is an action score, probability of success, causal attribution, or intervention authority.",
        "Preserves descriptive finality with explicit surface states such as MEASURING_PROTECTED, ORBITING_STOP, CONTRADICTED, FRONTIER_NEAR_GATE, ROUTING_TENSION, BENDING, MOVING_GAIN/LOSS, and OBSERVED_STABLE.",
        "Adds configured intent-ownership and observed wrong-landing relationship edges so the Twin can represent both what a surface is believed to own and where observed routing disagrees.",
        "Adds SEARCH TWIN // CURRENT STATE FIELD to the private console and a read-only /api/admin/search-radar/twin endpoint while also including the Twin in Retrospective and compact Astra state.",
        "Keeps Operator Economy intact: Astra receives only six compact Twin surfaces, no fifth MCP tool is added, and Search Twin cannot generate a mission, bypass a gate, or mutate the site."
      ]
    },
    {
      "version": "6.14.4",
      "date": "2026-09-09",
      "name": "Builder / Breaker Adversarial Review",
      "highlights": [
        "Adds a deterministic Builder / Breaker layer that forces every otherwise-actionable Mission Control package to defend itself against the strongest verified objection before READY_FOR_HUMAN_REVIEW.",
        "Builder assembles a weighted evidence case only from existing gates: experiment clearance, observed query evidence, retrieval completeness, functional identity, Content Topology, class-specific thresholds, routing provenance, and one-primary-variable discipline.",
        "Breaker can veto an actionable case with fatal verified evidence such as ORBITING motion or unresolved high-severity direct contradictions; it can also attach non-fatal cautions from confirmed false-opportunity history, unexplained bends, and learning-continuity gaps.",
        "Makes adversarial review asymmetric by design: Breaker may downgrade an otherwise-actionable plan to ADVERSARIAL_HOLD but may never promote NO_INTERVENTION, HOLD, ROUTE_HOLD, protected, or otherwise terminal decisions.",
        "Adds an on-demand BUILDER / BREAKER // ADVERSARIAL REVIEW instrument that screens the complete returned Money Mission list from cached report-pair evidence and performs direct exact-page revalidation only for a surviving candidate.",
        "Keeps Operator Economy intact: the adversarial console does not call Astra, and Astra's existing search_radar_propose tool receives the adversarial verdict inside the normal plan without adding a fifth MCP tool.",
        "Adds Minimum Viable Intervention semantics: Builder may argue only for the smallest sufficient controlled variable and Breaker may block promotion but may never inflate the intervention."
      ]
    },
    {
      "version": "6.14.3",
      "date": "2026-09-09",
      "name": "Counterfactual Lab / Decision Boundary Engine",
      "highlights": [
        "Adds an on-demand Counterfactual Lab that maps the nearest condition required to earn re-evaluation of each returned Money Mission under the existing Search Radar gates",
        "Distinguishes hard protection locks, numeric evidence thresholds, qualitative coverage changes, functional-identity alignment, routing-edge requirements, evidence completeness, quality-gate clearance, and already-actionable states",
        "Makes NO_INTERVENTION explicitly inelastic to more of the same covered demand: additional impressions alone cannot flip a content-topology no-change decision",
        "Calculates bounded remaining distance only for explicit classifier thresholds such as gap impressions, CTR/snippet impressions, observed ambiguity, and exact routing provenance; threshold crossing triggers re-evaluation only",
        "Runs locally from the private admin console using cached Search Radar evidence and existing deterministic gates; the lab does not call Astra and introduces no mutation authority",
        "Adds COUNTERFACTUAL LAB // DECISION BOUNDARY ENGINE to the private console with current decision, boundary type, distance, required evidence, and re-entry gate for each returned mission",
        "Makes COUNTERFACTUAL != FORECAST executable doctrine: hypothetical evidence is never treated as observed evidence and Decision Finality remains sovereign"
      ]
    },
    {
      "version": "6.14.2",
      "date": "2026-09-09",
      "name": "Belief Registry / Contradiction Detector",
      "highlights": [
        "Adds a derived Belief Registry that materializes explicit scoped claims from the Intent Registry, Experiment Ledger, mature experiment verdicts, confirmed learned shapes, and latest Search Commit page-state witnesses without creating a parallel persistence system",
        "Adds a Contradiction Detector that surfaces canonical-routing disagreement, experiment measurement-ownership contamination, human-declared changes without observed structural fingerprint delta, and current-context challenges to historical experiment learning",
        "Preserves historical experiment truth inside its bounded measurement window: later opposite-direction evidence challenges current applicability but does not rewrite a mature verdict",
        "Requires routing contradictions to return through exact routing provenance and the Routing Edge Gate and requires measurement contradictions to receive integrity review rather than triggering page changes",
        "Adds BELIEF REGISTRY // CONTRADICTION DETECTOR to the private console with explicit belief sources, challenged states, contradiction severity/confidence, and resolution conditions",
        "Extends the compact Astra state packet with only bounded belief and contradiction summaries while keeping the existing four MCP tools and READ + PROPOSE authority",
        "Makes BELIEF != IMMUTABLE TRUTH and CONTRADICTION != INTERVENTION executable product doctrine so incompatible assumptions are surfaced rather than silently carried forward"
      ]
    },
    {
      "version": "6.14.1",
      "date": "2026-09-09",
      "name": "Soft Points / Frontier",
      "highlights": [
        "Adds a derived Soft Points / Frontier layer that ranks below-gate evidence pressure without turning weak signals into recommendations or mutations",
        "Measures page-level evidence accumulation from demand, rank proximity, historical trajectory, persistence, and Money Mission upside while suppressing pages already in the hard Mission Queue",
        "Shows the nearest existing Mission Queue threshold for striking-distance, CTR, intent-alignment, and thin-demand surfaces, but treats threshold crossing only as permission to re-run the normal evidence gates",
        "Preserves Experiment Firewall ownership as PROTECTED_OBSERVE_ONLY and strict Orbit Detector history as ORBIT_STOP so accumulating demand cannot bypass active measurement or stop-and-review semantics",
        "Adds unresolved-intent soft points that preserve coherent observed demand without inventing a canonical page, route, or functional identity from weak evidence",
        "Adds SOFT POINTS // FRONTIER to the private Search Radar console and exposes only compact Frontier summaries through the existing four-tool Astra bridge",
        "Keeps Frontier non-actionable by construction: promotion.eligible is always false and every candidate must re-enter Content Topology, Intervention Gate, Routing Edge Gate, Experiment Firewall, Mission Control, and Decision Finality before any intervention can exist"
      ]
    },
    {
      "version": "6.14.0",
      "date": "2026-09-09",
      "name": "Orbit Detector / Motion Field",
      "highlights": [
        "Adds a derived Orbit Detector over Search Commit, Release Delta, Experiment Ledger, and return-signal history to classify repeated-intervention surfaces as MEASURING, CONVERGING, DIVERGING, ORBITING, or ACCUMULATING",
        "Defines ORBITING strictly: at least three witnessed interventions across seven or more days, at least two comparable return signals, no mature experiment learning, no active measurement window, and no clear net progress",
        "Treats active or immature experiments as MEASURING rather than ORBITING so correct waiting never becomes intervention pressure",
        "Counts mature losses as earned learning instead of misclassifying them as absence of knowledge, preserving the distinction between bad outcome and failed measurement",
        "Adds bounded orbit score, learning yield, direction-flip, repeated-release, and return-motion evidence while explicitly denying causal or statistical-proof semantics",
        "Feeds strict orbit motion into Open Loops only as an ORBITING_MOTION_SEED learning seed; it does not automatically add Knowledge Debt or authorize another page change",
        "Adds ORBIT DETECTOR // MOTION FIELD to the private console and exposes only compact motion summaries through the existing four-tool Astra bridge"
      ]
    },
    {
      "version": "6.13.9",
      "date": "2026-09-09",
      "name": "Singularity Detector / Change-Point Lens",
      "highlights": [
        "Adds a derived Singularity Detector over comparable Black Box snapshot series to identify candidate site-wide and page-level search-surface bends without treating the score as a p-value",
        "Compares short pre/post regimes across impressions, clicks, CTR, and average position using bounded effect scores with explicit minimum snapshot and elapsed-time thresholds",
        "Separates bend detection from origin attribution: nearby Search Commits and release epochs are temporal context only and never establish causality",
        "Classifies bends as expansion, contraction, or mixed; records whether a witnessed intervention, release epoch, or no known change is nearby; and exposes the remaining causal gap explicitly",
        "Feeds unexplained bends into Open Loops only as LEARNING_SEED evidence, not Knowledge Debt and not intervention pressure",
        "Adds SINGULARITY DETECTOR // CHANGE-POINT LENS to the private Search Radar console and a dedicated private read endpoint while preserving the existing four Astra MCP tools",
        "Keeps Operator Economy intact by exposing only a compact Singularity summary to Astra and preserves Decision Finality, Experiment Firewall, Search Commit human authority, and all intervention gates"
      ]
    },
    {
      "version": "6.13.8",
      "date": "2026-09-09",
      "name": "Open Loops / Knowledge Debt / Memory Depth",
      "highlights": [
        "Adds Open Loops as a derived continuity view over Black Box, Search Commit, Experiment Ledger, Difference Engine, and Pattern Typology evidence",
        "Separates ATTENTION_DUE continuity gaps from EXPECTED_WAIT measurement windows, LEGACY_GAP history, and LEARNING_SEED pattern candidates",
        "Defines Knowledge Debt narrowly as avoidable missing continuity in the learning loop; NO_INTERVENTION, HOLD, expected waiting, and pattern seeds do not create page-change pressure",
        "Detects human-applied changes without linked experiments, mature experiments awaiting closure, broken Search Commit links, and missing post-release return signals without inventing history",
        "Adds bounded Memory Depth with snapshot, temporal, intervention-continuity, mature-verdict, and confirmed-pattern components while explicitly denying causal authority to the heuristic",
        "Adds OPEN LOOPS // KNOWLEDGE DEBT to the private Search Radar console and exposes compact summaries through the existing Astra state packet",
        "Preserves the four existing MCP tools, Operator Economy, Experiment Firewall, Decision Finality, Search Commit human authority, and all class-specific intervention gates"
      ]
    },
    {
      "version": "6.13.7",
      "date": "2026-09-09",
      "name": "Difference Engine / Release Delta / Pattern Typology",
      "highlights": [
        "Promotes compact Search Commit page-state fingerprints into a derived Difference Engine that reconstructs BEFORE \u2192 RELEASE \u2192 AFTER \u2192 RETURN SIGNAL",
        "Separates witnessed structural delta from temporal search movement and refuses to infer causality from proximity alone",
        "Adds Pattern Typology learned-shape candidates including successful intent expansion, false opportunity, migration-damage candidates, content-decay candidates, and wrong-landing persistence",
        "Requires mature linked experiment evidence before SUCCESSFUL_INTENT_EXPANSION or FALSE_OPPORTUNITY can be experiment-confirmed",
        "Adds Difference Engine and Pattern Typology instruments to the private Search Radar console while preserving bounded storage and existing mutation authority"
      ]
    },
    {
      "version": "6.13.6",
      "date": "2026-09-09",
      "name": "Operator Economy / Evidence Budget",
      "highlights": [
        "Makes search_radar_propose the preferred low-context operator entry point and preserves complete evidence only when a mission is actually actionable or explicitly requested",
        "Returns a compact decision-critical search_radar_state packet instead of replaying the full internal Money Map, Mission Queue, Search Commit ledger, and Retrospective payload into Work",
        "Compresses terminal NO_ACTION selector results to terminal counts plus concise per-mission outcomes while preserving Decision Finality and all returned mission accounting",
        "Stops duplicating complete MCP tool payloads into both text content and structuredContent; text is now a short status summary and structuredContent carries the evidence object once",
        "Keeps exact page-query rows available on demand and adds operator-economy doctrine discouraging repeated unchanged full-evidence calls",
        "Preserves the existing four MCP tool names, OAuth connection, Astra READ + PROPOSE authority, Experiment Firewall, Search Commit human write boundary, and all class-specific evidence gates"
      ]
    },
    {
      "version": "6.13.5",
      "date": "2026-09-09",
      "name": "Selector Closure / Cached Evidence Evaluation",
      "highlights": [
        "Fixes the automatic full-list selector failure by screening missions against the complete page+query evidence already fetched for the current Radar report instead of re-querying Search Console for every candidate",
        "Uses a two-phase decision path: cached evidence may screen missions, but any surviving candidate must pass a direct exact-page Search Console revalidation before it can be READY_FOR_HUMAN_REVIEW",
        "Evaluates the full returned Money Mission list including Experiment Firewall-protected pages and returns per-mission terminal reasons rather than silently dropping protected missions from selector accounting",
        "Returns an explicit top-level NO_JUSTIFIED_INTERVENTION_IN_RETURNED_MISSION_LIST decision with proposal:null, NO_ACTION finality, terminal counts, and selector error counts when nothing survives",
        "Mission-level evaluation failures fail closed as visible HOLD_EVALUATION_ERROR states instead of aborting the entire selector or falling back to a lower-confidence action",
        "Retains Astra READ + PROPOSE authority, Search Commit human-only mutation boundaries, all class-specific gates, and the existing four MCP tool names"
      ]
    },
    {
      "version": "6.13.4",
      "date": "2026-09-09",
      "name": "Search Commit / Release Witness",
      "highlights": [
        "Adds a durable human-only Search Commit ledger that records what approved intervention was actually put into production rather than inferring application from release timing",
        "Mission Control carries a proposal fingerprint and before-page-state fingerprint, then RECORD APPLIED CHANGE captures human-declared changed regions, release, optional Git SHA, and the live after-page-state witness",
        "Links a witnessed applied intervention to a later Experiment Ledger entry so proposal \u2192 human apply \u2192 release \u2192 experiment \u2192 verdict continuity can be reconstructed",
        "Retrospective and Astra state can read Search Commit history and experiment-link continuity while explicitly refusing causal claims from temporal proximity alone",
        "Decision Finality blocks Search Commit creation for NO_INTERVENTION, HOLD, protected, or unjustified routing plans",
        "Astra remains READ + PROPOSE only: it can read Search Commit history but cannot record commits, apply, deploy, arm, or update experiments; MCP tool names are unchanged"
      ]
    },
    {
      "version": "6.13.3",
      "date": "2026-09-09",
      "name": "Decision Finality / Selector Truth Gate",
      "highlights": [
        "Adds a terminal selection_eligibility decision so NO_INTERVENTION, NO_CHANGE / STOP, HOLD, EXPERIMENT_BLOCKED, and unjustified routing states cannot be re-promoted downstream",
        "Derives proposal_quality from Decision Finality instead of allowing directive-specific quality logic to contradict the Intervention Classifier",
        "Automatic highest-mission selection now evaluates the full returned eligible Money Mission list and requires READY_FOR_HUMAN_REVIEW before returning a proposal",
        "When no mission survives all gates, Astra receives NO_JUSTIFIED_INTERVENTION_IN_RETURNED_MISSION_LIST with proposal:null rather than a misleading fallback recommendation",
        "Mission Control hides and client-side blocks ARM EXPERIMENT unless the current package is terminally eligible for human review",
        "Adds regression coverage reproducing the Target Profit Sale Price NO_INTERVENTION / NO_CHANGE / STOP selector bug"
      ]
    },
    {
      "version": "6.13.2",
      "date": "2026-09-09",
      "name": "Signal Router Provenance / Edge Gate",
      "highlights": [
        "Preserves exact Search Console query-to-landing-page routing provenance instead of exposing only aggregate wrong-page impressions",
        "Adds source-page aggregates and exact query \u2192 observed landing page \u2192 preferred canonical evidence to routed clusters and Money Missions",
        "Adds a fail-closed Routing Edge Gate: aggregate routing loss alone is HOLD; one exact provenance edge and one eligible source mutation surface are required",
        "Checks the actual source mutation surface against the Experiment Firewall, existing target links, page inspectability, Content Topology, and source Intervention Gate",
        "Moves INTERNAL_ROUTING to class-specific evidence logic so target Content Topology cannot substitute for missing routing-edge proof",
        "Astra proposal selection skips ROUTE_HOLD missions rather than inventing a contextual-link source; existing MCP tool names and READ + PROPOSE authority are unchanged",
        "Signal Router UI now surfaces EDGE PROVENANCE with exact wrong-page query rows and source-page counts"
      ]
    },
    {
      "version": "6.13.1",
      "date": "2026-09-09",
      "name": "Experiment Firewall / Intervention Classifier",
      "highlights": [
        "Makes experiment protection fail closed across open/ARMED ledger experiments and immature TOO EARLY verdicts",
        "Blocks competing proposals on every protected page and exposes explicit ARMED_EXPERIMENT / IMMATURE_EXPERIMENT reasons",
        "Adds intervention classes with class-specific evidence thresholds so scope clarification is not confused with content expansion",
        "Prevents a new experiment from being armed on a page already protected by the Experiment Firewall"
      ]
    },
    {
      "version": "6.13.0",
      "date": "2026-09-09",
      "name": "Content Topology / Intervention Gate",
      "highlights": [
        "Inventories current page structure into title, H1, description, calculator inputs, headings, formula/method, worked examples, FAQ/direct answers, and internal routes",
        "Classifies exact observed query coverage as COVERED, PARTIAL, ABSENT, CONFLICT, or UNKNOWN and separates page identity from explanatory sufficiency",
        "Adds an Intervention Gate that returns INTERVENTION_JUSTIFIED, NO_INTERVENTION, or HOLD before Mission Control may draft a page change",
        "Makes no-change a first-class Search Radar decision: redundant content patches and HTML snippets are suppressed when aligned observed demand is already materially covered",
        "Astra proposals now run query evidence \u2192 Intent Cartography \u2192 Content Topology \u2192 Intervention Gate and can skip non-justified IMPROVE missions when choosing the highest justified action",
        "Adds a private Content Topology / Intervention Matrix instrument and INTERVENTION GATE controls to Money Missions"
      ]
    },
    {
      "version": "6.12.9",
      "date": "2026-09-09",
      "name": "Complete Query Evidence / Intent Cartography",
      "highlights": [
        "Adds complete page-query retrieval with Search Analytics API batching plus MCP cursor pagination and explicit COMPLETE/PARTIAL retrieval states",
        "Separates connector retrieval completeness from Search Console privacy/anonymization gaps so missing query strings remain explicitly unknown",
        "Adds Intent Cartography with functional identity, primary-fit queries, query constellations, and identity-conflict detection",
        "Mission Control consumes the complete accessible query set internally, gates proposals on evidence completeness, and prevents adjacent high-volume queries from renaming calculator functionality",
        "Adds a private Query Map panel to Search Radar Mission Control for on-demand exact-query inspection"
      ]
    },
    {
      "version": "6.12.7",
      "date": "2026-09-09",
      "name": "ChatGPT OAuth Redirect CSP Fix",
      "highlights": [
        "Allows the ChatGPT callback origin in the OAuth consent page form-action CSP so Chromium can follow the post-authorization redirect",
        "Keeps the form POST itself same-origin at /oauth/authorize while preserving default-src none and frame-ancestors none",
        "Adds a regression assertion for the ChatGPT callback CSP allowance",
        "Preserves the OAuth trace ledger, OAuth 2.1 PKCE, rotating refresh tokens, MCP transport hardening, and READ + PROPOSE-only authority"
      ]
    },
    {
      "version": "6.12.6",
      "date": "2026-09-09",
      "name": "OAuth Trace Ledger / Authorization Loop Forensics",
      "highlights": [
        "Adds AUTHORIZE_POST_RECEIVED before authorization validation so the browser submit can be distinguished from downstream OAuth failures",
        "Adds a bounded cross-client OAuth trace so ChatGPT re-registration cannot hide the previous client token-exchange stage",
        "Displays the last 10 non-secret OAuth stages on the consent screen with masked client suffixes and allow-listed diagnostic fields only",
        "Preserves OAuth 2.1 PKCE, rotating refresh tokens, MCP transport hardening, and READ + PROPOSE-only authority"
      ]
    },
    {
      "version": "6.12.4",
      "date": "2026-09-09",
      "name": "Astra OAuth Callback Completion / RFC 9207 Issuer Response",
      "highlights": [
        "Adds the required RFC 9207 iss parameter to OAuth authorization responses after the consent gate",
        "Makes the authorization form submit explicitly to /oauth/authorize and hardens bridge-key comparison",
        "Removes the misleading OpenID Connect discovery alias; Search Radar remains OAuth 2.1 only",
        "Preserves PKCE S256, dynamic registration, rotating refresh tokens, resource-bound tokens, and READ + PROPOSE-only authority"
      ]
    },
    {
      "version": "6.12.3",
      "date": "2026-09-09",
      "name": "Astra OAuth Discovery Hardening / ChatGPT MCP Auth",
      "highlights": [
        "Corrected RFC 9728 protected-resource discovery for the path-specific Search Radar MCP resource",
        "MCP 401 challenges now point directly to the canonical path-specific protected-resource metadata URL",
        "Root and path-specific metadata now advertise matching resource identifiers; authorization-server metadata cross-lists the protected MCP resource",
        "Preserves PKCE S256, dynamic client registration, rotating refresh tokens, and READ + PROPOSE-only authority"
      ]
    },
    {
      "version": "6.12.2",
      "date": "2026-09-09",
      "name": "Astra OAuth Gate / Initial ChatGPT MCP Auth",
      "highlights": [
        "Added initial OAuth authorization-code + PKCE flow for the private Astra bridge",
        "Added dynamic client registration, short-lived access tokens, and rotating refresh tokens",
        "Initial discovery implementation required follow-up hardening for ChatGPT path-specific protected-resource validation"
      ]
    },
    {
      "version": "6.11.1",
      "date": "2026-09-09",
      "name": "Fuel Needed Mission #1 / Intent Expansion",
      "highlights": [
        "Executed Search Radar Money Mission #1 on /tools/fuel-needed-calculator/",
        "Added a concise above-calculator answer for gallons-needed intent",
        "Added a 540-mile / 36-MPG worked example and explicit miles \u00f7 MPG formula",
        "Tightened meta description while preserving title, H1, canonical URL and calculator logic for a controlled experiment"
      ]
    },
    {
      "version": "6.11.0",
      "date": "2026-09-09",
      "name": "Experiment Ledger / Cause \u2192 Effect",
      "highlights": [
        "Added persistent Experiment Ledger backed by the Search Radar Durable Object",
        "Mission Control packages can be armed as explicit experiments with recorded baseline, hypothesis, success criteria and rollback rule",
        "Ledger compares current Search Console evidence against the exact recorded baseline and refuses early verdicts",
        "Mature experiments can record WIN, LOSS or HOLD outcomes for future Retrospective learning"
      ]
    },
    {
      "version": "6.10.0",
      "date": "2026-09-09",
      "name": "Retrospective Engine / Memory Synthesis",
      "highlights": [
        "Added Retrospective Engine over persistent Black Box history",
        "Synthesizes past-to-present trajectory without declaring wins before a mature comparison window",
        "Maps release epochs onto a temporal evidence axis",
        "Surfaces page-level gain/loss/stable movement from recorded Search Console evidence"
      ]
    },
    {
      "version": "6.9.6",
      "date": "2026-09-09",
      "name": "Mission Control / Execution Packages",
      "highlights": [
        "Added a dedicated Money Missions Mission Control actuator",
        "One click turns a ranked Money Mission into a page-specific execution package",
        "Execution packages include implementation steps, patch artifact, internal-link candidates, experiment baseline, success criteria and rollback rule",
        "Added a private mission-plan API grounded in current page facts and live Revenue Intelligence evidence"
      ]
    },
    {
      "version": "6.9.5",
      "date": "2026-09-09",
      "name": "Revenue Intelligence / Money Missions",
      "highlights": [
        "Added Money Missions ranked by expected upside using Search Console demand, GA4 behavior, routing loss and observed/unobserved AdSense state",
        "Classifies actions as BUILD, IMPROVE, MONETIZE, ROUTE or WATCH",
        "Treats missing AdSense page rows as unobserved rather than zero revenue",
        "Surfaces a dedicated revenue-action queue in private Search Radar"
      ]
    },
    {
      "version": "6.9.4",
      "date": "2026-09-09",
      "name": "Revenue Attribution / URL Reconciliation",
      "highlights": [
        "Normalized AdSense PAGE_URL variants before attribution",
        "Distinguished NO_SOURCE_ROWS, NO_MATCHES, PARTIAL and FULL attribution states",
        "Stopped treating missing AdSense page rows as zero revenue",
        "Added Revenue Attribution diagnostics to private Search Radar"
      ]
    },
    {
      "version": "6.9.3",
      "date": "2026-09-09",
      "name": "Search Radar Live Revenue Telemetry",
      "changes": [
        "Expanded GA4 page telemetry with engaged sessions, key events, total revenue, aggregate totals, fetch timestamps and page-match coverage",
        "Expanded AdSense page telemetry with CPC, page CTR and impression CTR alongside earnings, RPM, views, impressions and clicks",
        "Added explicit HEURISTIC, GA4 LIVE, ADSENSE LIVE and FULL REVENUE operating modes with three-source reactor status",
        "Hardened revenue-of-record logic so AdSense earnings and GA4 ad revenue are never double counted when both sources are live",
        "Added telemetry coverage diagnostics and richer Revenue Core data to Mission Queue, Money Map, Page Autopsy and Black Box snapshots",
        "Preserved graceful heuristic fallback when optional GA4 or AdSense credentials are absent or unavailable"
      ]
    },
    {
      "version": "6.9.2",
      "date": "2026-09-09",
      "name": "Search Radar Revenue Core",
      "changes": [
        "Added optional live Google Analytics Data API integration for page views, users, sessions and engagement signals",
        "Added optional live AdSense Management API integration for page-level earnings, RPM and ad performance",
        "Rebuilt Search Money Map as a Revenue Opportunity Score combining SEO opportunity, traffic quality, routing loss and monetization value",
        "Revenue signals now influence Mission Queue priority and Page Autopsy",
        "Black Box snapshots now preserve Revenue Core status and revenue summary",
        "Heuristic fallback keeps Search Radar fully functional without any new setup"
      ]
    },
    {
      "version": "6.9.1",
      "date": "2026-09-09",
      "name": "Search Radar Black Box Recorder",
      "changes": [
        "Added zero-setup persistent Search Radar history using a self-provisioning SQLite-backed Durable Object",
        "Added automatic daily final-data capture through a Worker Cron Trigger plus recording on interactive Radar runs",
        "Added a Black Box history instrument with impression/ranking traces and release markers",
        "Moved experiment verdict logic server-side and records verdicts inside persistent snapshots",
        "Added persistent page history to Page Autopsy",
        "Preserved REL 6.8.2 public SEO experiment pages without additional content changes"
      ]
    },
    {
      "version": "6.9.0",
      "date": "2026-09-09",
      "name": "Search Radar Time Machine",
      "changes": [
        "Rebuilt private Search Radar as a full search operating system with a circular Search Surface Radar and deduplicated Mission Queue",
        "Added on-demand Page Autopsy using live Search Console query, device and date dimensions plus page-content inspection",
        "Added Search Money Map prioritization and global/page-level device intelligence",
        "Added dedicated Signal Router visualization with wrong-page impression accounting",
        "Added a visible experiment chamber that preserves REL 6.8.2 baselines and produces verdicts only after complete comparison windows",
        "Added a first-class Intent Registry and stopped gas-mileage queries from fuzzy-routing to EV-vs-gas cost",
        "Preserved all public REL 6.8.2 SEO experiments unchanged"
      ]
    },
    {
      "version": "6.8.3",
      "date": "2026-09-09",
      "name": "Search Radar Intent Router",
      "changes": [
        "Added deterministic intent families so annual mileage, MPG, fuel proportion, commute cost, roofing, rent and other calculator tasks no longer merge on generic words",
        "Added preferred canonical-page routing and explicit CURRENT GOOGLE PAGE \u2192 EXPECTED PAGE diagnostics",
        "Excluded embed URLs and generic directories from preferred SEO landing-page selection when a canonical calculator exists",
        "Added wrong-landing impression counts and expected-page share to Search Radar clusters",
        "Kept all REL 6.8.2 public SEO experiments unchanged so their measurement windows remain clean"
      ]
    },
    {
      "version": "6.8.2",
      "date": "2026-09-09",
      "name": "Closed Loop Optimizer",
      "changes": [
        "Added an experiment ledger that records baseline search metrics and waits for complete post-release windows before judging changes",
        "Improved Search Radar clustering to prevent chained topic merges and cross-check new-module ideas against the actual page inventory",
        "Added a fuel-proportion word-problem mode directly to Fuel Needed based on strong live Search Console demand",
        "Started a Seller Net Proceeds title/snippet CTR experiment while preserving the canonical URL and calculator",
        "Expanded Shift Pay, Reseller Profit and the Driving hub around live striking-distance and rising signals",
        "Preserved read-only Search Console access, noindex admin routes and static-first public routing"
      ]
    },
    {
      "version": "6.8.1",
      "date": "2026-09-09",
      "name": "Chronometric Search Radar",
      "changes": [
        "Rebuilt private Search Radar as a dense retro-futurist chronometric control room",
        "Added Decision Core with cause \u2192 effect recommendations ranked by evidence",
        "Added priority, confidence, action and heuristic click-upside fields to opportunity scoring",
        "Added system-pressure diagnostics for striking distance, CTR leaks, rising queries, new modules and interference",
        "Expanded content briefs with page inputs, headings, internal links, draft answer blocks, guardrails and success checks",
        "Added 15-minute in-browser auto-refresh and JSON snapshot export",
        "Preserved read-only Search Console OAuth, noindex admin routes and static-first public site architecture"
      ]
    },
    {
      "version": "6.8.0",
      "date": "2026-09-09",
      "name": "Search Radar \u2014 Search Console Opportunity Engine",
      "changes": [
        "Added a private noindex Search Radar control room at /admin/search-radar/",
        "Added live Google Search Console API ingest with stable and fresh/partial reporting windows",
        "Added opportunity scoring for striking-distance, CTR leak, rising, new-query and decay signals",
        "Added query clustering, cannibalization detection, hourly Search Console signal bars and page trend scoring",
        "Added one-click content patch briefs that compare observed queries with the current title, H1, description and page text",
        "Kept the public site static-first; only /api/admin/search-radar/* invokes the Worker",
        "Restored missing .well-known agent-skill/discovery assets required by the existing regression suite"
      ]
    },
    {
      "version": "6.7.6",
      "date": "2026-09-09",
      "name": "Homepage title containment",
      "changes": [
        "Size the desktop homepage title relative to its own text column",
        "Allow the adjacent statistics panel to shrink appropriately",
        "Preserve homepage wording, colors, mobile layout and AdSense verification"
      ]
    },
    {
      "version": "6.7.1",
      "date": "2026-09-09",
      "name": "AdSense publisher verification",
      "changes": [
        "Added account verification meta tag to HTML pages",
        "Configured ads.txt with the verified account publisher ID",
        "Ad serving remains disabled pending account setup and approval"
      ]
    },
    {
      "version": "6.7.0",
      "date": "2026-09-09",
      "name": "Fuel, Trip Cost and Resale Calculator Improvements",
      "changes": [
        "Cap pre-trip fuel purchases at available tank capacity and separate route purchases",
        "Validate priority calculator inputs and handle blocked local storage",
        "Add trip MPG sensitivity and resale markdown comparisons",
        "Improve calculator readability, examples and publisher context",
        "Preserve existing API engine and routing"
      ]
    },
    {
      "version": "6.6.1",
      "date": "2026-09-06",
      "name": "Desktop Hero Title Fix",
      "changes": [
        "Constrained the tannerd.net homepage title to a single clean desktop line",
        "Rebalanced the desktop hero grid so the system monitor has its own stable column",
        "Preserved the preferred homepage copy and all mobile containment rules",
        "Preserved V6.6 search consolidation and free-tier static asset routing"
      ]
    },
    {
      "version": "6.6.1",
      "date": "2026-09-06",
      "name": "Search Consolidation",
      "changes": [
        "Added Annual Mileage Calculator from emerging annual-mileage search intent",
        "Expanded Fuel Needed into trip gallons, partial-tank fuel-to-add, reserve and range planning",
        "Aligned Joint Compound with Drywall Mud search language and added a static alias",
        "Expanded dimensional weight, mulch and concrete-cost calculators",
        "Strengthened internal linking for roofing, resale, work/pay and driving clusters",
        "Changed sitemap lastmod only for meaningfully updated pages",
        "Preserved free-tier static asset routing so normal page traffic bypasses Worker quotas"
      ]
    },
    {
      "version": "6.6.1",
      "date": "2026-09-06",
      "name": "Free-Tier Static Asset Rescue",
      "changes": [
        "Normal site and calculator pages now bypass the Worker and use free unlimited static asset delivery",
        "Worker-first routing is limited to REST API, MCP, A2A and genuinely dynamic discovery endpoints",
        "Common aliases moved to static redirects",
        "Discovery Link and Content-Signal headers remain on static assets",
        "Homepage design, mobile menu, Rules, formulas, SEO metadata and public URLs are preserved"
      ]
    },
    {
      "version": "6.6.1",
      "date": "2026-09-06",
      "name": "Exact Homepage Restore",
      "changes": [
        "Restored the exact V6.4 homepage wording requested by the user",
        "Retained V6.5 mobile containment fixes",
        "Added a crawlable accessible mobile menu with direct HTML links",
        "Preserved calculators, Rules, structured data, analytics, API, MCP, A2A and WebMCP"
      ]
    },
    {
      "version": "6.6.1",
      "date": "2026-09-05",
      "name": "Machine Language Restore",
      "changes": [
        "Restored SYSTEM SIGNAL, MODULE BANK, DECISION TOOLS, INPUT MODULE, DECISION CORE and related instrument-panel vocabulary",
        "Kept plain-English descriptions, instructions and SEO copy polished for visitors",
        "Kept real SEO, roadmap and internal development language out of public pages",
        "Preserved V6.5 mobile overflow fixes and responsive layout",
        "Preserved formulas, URLs, structured data, analytics, Rules, API, MCP, A2A and WebMCP"
      ]
    },
    {
      "version": "6.6.1",
      "date": "2026-09-05",
      "name": "Public Copy & Mobile Polish",
      "changes": [
        "Polished visitor-facing copy across the site",
        "Removed roadmap, SEO and development jargon from normal public pages",
        "Fixed homepage mobile overflow and long-title sizing",
        "Kept the instrument-panel design while making labels user-facing",
        "Preserved formulas, URLs, structured data, analytics and agent/API infrastructure"
      ]
    },
    {
      "version": "6.6.1",
      "date": "2026-09-05",
      "name": "Decision Tools \u2014 Search Signal Expansion",
      "changes": [
        "Added eight transparent decision engines selected from emerging organic demand and targeted competitive-gap research",
        "Expanded the human calculator library from 122 to 130 while keeping the stable agent/API registry at 25 tools",
        "Rebuilt the homepage as a Rules-inspired public decision-system instrument panel",
        "Added a 13-engine Decision Tools catalog for humans and machine discovery",
        "Added contextual Next Decision links from organically tested calculator pages",
        "Preserved existing URLs, calculator formulas, API/MCP/A2A/WebMCP behavior and search metadata on established pages"
      ]
    },
    {
      "version": "6.3.0",
      "date": "2026-09-05",
      "name": "Instrument System \u2014 Sitewide",
      "changes": [
        "Extended the Tannerd Rules instrument-panel visual language across the entire public website",
        "Reworked global navigation, footer, page chassis, calculator consoles, outputs, hubs, documentation, templates and embeds",
        "Preserved calculator formulas, SEO titles/descriptions, canonical URLs, structured data and existing application behavior",
        "Added page-type module identification rails across calculator, category, template, API, agent, status and reference pages",
        "Restyled all embedded calculators as compact instrument modules",
        "Rules remains the flagship decision console with matching sitewide design language"
      ]
    },
    {
      "version": "6.2.0",
      "date": "2026-09-05",
      "name": "Rules Instrument Panel",
      "changes": [
        "Retrofuturist technical-instrument redesign of /rules/",
        "Input \u2192 Model \u2192 Rule \u2192 Action system map and live signal board",
        "Decision threshold monitor with profit/ROI/sell/cash/days signals",
        "Cause \u2192 solve \u2192 effect decision trace",
        "User-triggered web comp search and one-tap \u00b115% comp range",
        "Self-contained critical Rules CSS retained for delivery reliability",
        "No test listing data added"
      ]
    },
    {
      "version": "6.1.1",
      "date": "2026-09-05",
      "name": "Rules Mobile Delivery Hotfix",
      "changes": [
        "Inline critical Rules CSS so the app cannot render as unstyled HTML when a stylesheet request is stale or unavailable",
        "Cache-busted Rules assets and hardened the PWA service worker",
        "Fresh production draft namespace prevents older demo/stale active listing values from reappearing",
        "No test listing data is preloaded"
      ]
    },
    {
      "version": "6.1.0",
      "date": "2026-09-05",
      "name": "Tannerd Rules Production Mobile",
      "changes": [
        "Removed all preloaded Marketplace demo/test listing data from the production UI",
        "Mobile-first capture flow with only asking price and resale comp required to start",
        "Installable PWA with offline calculation after first load",
        "Android Web Share Target for sharing listing text/URLs into Tannerd Rules",
        "Clipboard paste and smarter parse status",
        "Market-confidence, cost/risk, and buy-rule settings moved into compact drawers",
        "Decision result now exposes max safe buy, minimum resale required, conservative-case economics, and rule blockers",
        "Native share/copy actions for analysis and resale pack",
        "New-deal flow and clean V2 local storage so prior demo state does not preload"
      ]
    },
    {
      "version": "6.0.0",
      "date": "2026-09-05",
      "name": "Tannerd Rules \u2014 Marketplace Flip",
      "changes": [
        "Launch /rules/ as a fully interactive browser-local Rule",
        "Marketplace Flip demo works immediately with BUY/OFFER/WATCH/PASS decisioning",
        "Paste-listing parser and category risk presets",
        "Rule thresholds for profit, ROI, hourly return, sell probability, capital and days-to-sell",
        "Max safe buy price solver and seller offer generator",
        "Acquisition-to-resale listing pack with repricing floor",
        "Sold reconciliation with predicted-versus-actual results",
        "Local device persistence/history plus GA4 rule events",
        "Machine-readable Rules catalog and aliases"
      ]
    },
    {
      "version": "5.9.0",
      "date": "2026-09-04",
      "name": "Public Google Sheets Distribution",
      "changes": [
        "Five V5.8 decision-engine workbooks are now linked as live public Google Sheets templates",
        "One-click template preview and copy flows",
        "Tracked links inside Google Sheets back to tannerd.net",
        "GA4 template-action and Google-Sheets-referral events",
        "Machine-readable template catalogs",
        "Spreadsheet companion links on all five advanced calculators",
        "Polished homepage spreadsheet-template module"
      ]
    },
    {
      "version": "5.8.0",
      "date": "2026-09-04",
      "name": "Decision Engines & Spreadsheet Template Library",
      "changes": [
        "Five advanced multi-variable decision calculators",
        "Five Google Sheets-compatible spreadsheet templates",
        "New /decision-tools/ authority hub",
        "New /templates/ spreadsheet-template library",
        "122 human calculators total; 25 stable API/agent tools preserved",
        "No claim of global uniqueness; differentiation comes from combining risk, time and hidden-cost variables"
      ]
    },
    {
      "version": "5.7.0",
      "date": "2026-09-04",
      "name": "Polished SEO & Data Build",
      "changes": [
        "Public-facing homepage rewrite",
        "Search-led calculator navigation",
        "GA4 homepage search/click instrumentation",
        "Improved calculator directory search",
        "Breadcrumb/social metadata on proven pages",
        "Developer/agent infrastructure demoted from homepage content"
      ]
    },
    {
      "version": "5.6.0",
      "date": "2026-09-04",
      "name": "Search Signal Amplifier",
      "changes": [
        "Reworked Days Until around the strongest emerging countdown query cluster",
        "Expanded Gas Trip Cost and Fuel Needed around road-trip gas-cost queries",
        "Strengthened Reseller Profit and Seller Net Proceeds intent separation",
        "Expanded Shift Pay and Rent Proration answer content",
        "Added Dates & Countdowns authority hub",
        "Promoted Search Console-proven pages on homepage",
        "Added redirect-only aliases for common guessed search URLs",
        "No mass calculator expansion; existing 117-tool footprint preserved"
      ]
    },
    {
      "version": "5.5.1",
      "date": "2026-09-02",
      "name": "UI & Provenance Hotfix",
      "changes": [
        "Normalized footers across legacy pages",
        "Fixed clipped trust/footer links",
        "Updated stale Formula provenance engine release labels",
        "Updated validation/provenance release metadata"
      ]
    },
    {
      "version": "5.5.0",
      "date": "2026-09-02",
      "name": "Crawl Reliability & External Discovery",
      "changes": [
        "Maximum-discovery robots.txt and Content-Signal policy",
        "Common API/OpenAPI/docs discovery aliases",
        "Live /status/ and /api/v1/discovery-health diagnostics",
        "Crawler-readable /crawler-check/ page",
        "Broad traffic front doors promoted on homepage",
        "Homepage trust-row clipping and duplicate footer fixed",
        "Updated zero-cost GitHub verification kit"
      ]
    },
    {
      "version": "5.4.0",
      "date": "2026-09-02",
      "name": "Zero-Dollar Distribution & Traffic Front Doors",
      "changes": [
        "8 new broad/high-demand calculator pages",
        "33 free calculator embeds with attribution",
        "Tip/Time Card/Paint/Fence/Gravel/Mulch SEO strengthening",
        "GitHub-ready public verification mirror kit",
        "Agent/API layer intentionally kept stable until Search Console proves demand"
      ]
    },
    {
      "version": "5.3.0",
      "date": "2026-09-01",
      "name": "Trust, Provenance & Verifiability",
      "changes": [
        "Public validation cases and live verifier",
        "Publisher identity and About/Standards layers",
        "Source registry",
        "Formula and engine version metadata in API/agent results",
        "Public build provenance and release hashes",
        "Consistent trust navigation"
      ]
    },
    {
      "version": "5.2.0",
      "date": "2026-09-01",
      "name": "Public API Discovery + Agent Utility Pack",
      "changes": [
        "Public API made first-class in normal HTML and Markdown",
        "25 public agent-callable tools",
        "109 human calculators",
        "Business and Energy hubs",
        "9 new calculators and 3 newly exposed agent utilities"
      ]
    },
    {
      "version": "5.1.0",
      "date": "2026-09-01",
      "name": "Citation Flywheel fallback",
      "changes": [
        "Exact share_url human handoff",
        "Prefilled calculator scenarios",
        "GA4 AI-referral events",
        "Analytics Engine binding removed after account access error while preserving agent functionality"
      ]
    },
    {
      "version": "5.0.0",
      "date": "2026-09-01",
      "name": "Citation Flywheel",
      "changes": [
        "Agent results linked directly to exact human scenarios",
        "AI referral instrumentation",
        "Agent citation guidance"
      ]
    },
    {
      "version": "4.0.0",
      "date": "2026-09-01",
      "name": "Agent Mesh",
      "changes": [
        "MCP server",
        "A2A Agent Card and endpoint",
        "Agent Skills",
        "WebMCP"
      ]
    },
    {
      "version": "3.0.0",
      "date": "2026-09-01",
      "name": "Agent API",
      "changes": [
        "Public REST calculator API",
        "OpenAPI 3.1",
        "API Catalog",
        "Markdown negotiation",
        "Link headers"
      ]
    }
  ]
}
