LLM Pack club48sa

Site : club48sa

Usage

Ce document sert de contexte compact pour un humain ou un LLM externe. Il duplique l’essentiel de la base machine en Markdown lisible.

Pack JSON

{
  "site": "club48sa",
  "market": {
    "primary_market": "ch",
    "target_countries": [
      "ch",
      "fr"
    ],
    "seo_scope": "national"
  },
  "context_pack": {
    "site_key": "club48sa",
    "task": "external llm pack",
    "lessons": [
      {
        "id": 198,
        "site_key": "club48sa",
        "category": "ctr_optimization",
        "lesson": "Several visible pages have low CTR. Prioritize title, meta description, and intent alignment refreshes before creating net new content.",
        "confidence": "high",
        "source": "feedback_loop",
        "status": "validated",
        "details_json": {
          "pages": [
            {
              "ctr": 0.0,
              "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "clicks": 0,
              "position": 8.424242424242424,
              "top_query": "rendement club deal immobilier",
              "impressions": 33
            }
          ]
        },
        "created_at": "2026-06-10 00:01:15.818738+00:00",
        "updated_at": "2026-06-10 00:01:16.145755+00:00",
        "details": {
          "pages": [
            {
              "ctr": 0.0,
              "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "clicks": 0,
              "position": 8.424242424242424,
              "top_query": "rendement club deal immobilier",
              "impressions": 33
            }
          ]
        }
      }
    ],
    "sops": [
      {
        "id": 194,
        "site_key": "club48sa",
        "scope": "site",
        "name": "adaptive-feedback-playbook",
        "version": 13,
        "status": "draft",
        "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
        "source": "feedback_loop",
        "created_at": "2026-06-10 00:01:15.872763+00:00",
        "updated_at": "2026-06-10 00:01:15.872763+00:00",
        "confidence_score": 0,
        "confidence_label": "low"
      }
    ],
    "recent_memory": [
      {
        "id": 340,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 194,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 13,
              "site_key": "club48sa",
              "created_at": "2026-06-10 00:01:15.872763+00:00",
              "updated_at": "2026-06-10 00:01:15.872763+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7d37273e1040>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7d372567a8d0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-06-10 00:01:16.104102+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 194,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 13,
              "site_key": "club48sa",
              "created_at": "2026-06-10 00:01:15.872763+00:00",
              "updated_at": "2026-06-10 00:01:15.872763+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7d37273e1040>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7d372567a8d0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      },
      {
        "id": 333,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 190,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 12,
              "site_key": "club48sa",
              "created_at": "2026-06-09 00:01:10.836448+00:00",
              "updated_at": "2026-06-09 00:01:10.836448+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 49
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x761de5e99be0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x761de5e985f0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-06-09 00:01:11.056519+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 190,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 12,
              "site_key": "club48sa",
              "created_at": "2026-06-09 00:01:10.836448+00:00",
              "updated_at": "2026-06-09 00:01:10.836448+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 49
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x761de5e99be0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x761de5e985f0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      },
      {
        "id": 326,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 184,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 11,
              "site_key": "club48sa",
              "created_at": "2026-06-08 00:00:58.012278+00:00",
              "updated_at": "2026-06-08 00:00:58.012278+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 47
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7e6094fdb380>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7e6095039580>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-06-08 00:00:58.263551+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 184,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 11,
              "site_key": "club48sa",
              "created_at": "2026-06-08 00:00:58.012278+00:00",
              "updated_at": "2026-06-08 00:00:58.012278+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 47
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7e6094fdb380>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7e6095039580>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      },
      {
        "id": 319,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 175,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 10,
              "site_key": "club48sa",
              "created_at": "2026-06-06 00:01:06.209302+00:00",
              "updated_at": "2026-06-07 00:01:14.218067+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 46
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x70633de3b2f0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x70633de54950>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-06-07 00:01:14.449215+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 175,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 10,
              "site_key": "club48sa",
              "created_at": "2026-06-06 00:01:06.209302+00:00",
              "updated_at": "2026-06-07 00:01:14.218067+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 46
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x70633de3b2f0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x70633de54950>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      },
      {
        "id": 312,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 175,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 10,
              "site_key": "club48sa",
              "created_at": "2026-06-06 00:01:06.209302+00:00",
              "updated_at": "2026-06-06 00:01:06.209302+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 45
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x76ba3d899fa0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x76ba3d8994c0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-06-06 00:01:06.423699+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 175,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 10,
              "site_key": "club48sa",
              "created_at": "2026-06-06 00:01:06.209302+00:00",
              "updated_at": "2026-06-06 00:01:06.209302+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 45
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x76ba3d899fa0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x76ba3d8994c0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      },
      {
        "id": 305,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 166,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 9,
              "site_key": "club48sa",
              "created_at": "2026-06-04 00:01:07.476205+00:00",
              "updated_at": "2026-06-05 00:01:18.597690+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 43
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f9720510560>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f9720513740>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-06-05 00:01:18.841864+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 166,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 9,
              "site_key": "club48sa",
              "created_at": "2026-06-04 00:01:07.476205+00:00",
              "updated_at": "2026-06-05 00:01:18.597690+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 43
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f9720510560>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f9720513740>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      },
      {
        "id": 298,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 166,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 9,
              "site_key": "club48sa",
              "created_at": "2026-06-04 00:01:07.476205+00:00",
              "updated_at": "2026-06-04 00:01:07.476205+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 42
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x77e22dfe02c0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x77e22bc15fd0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-06-04 00:01:07.710149+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 166,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 9,
              "site_key": "club48sa",
              "created_at": "2026-06-04 00:01:07.476205+00:00",
              "updated_at": "2026-06-04 00:01:07.476205+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 42
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x77e22dfe02c0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "club48sa",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x77e22bc15fd0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      }
    ],
    "recent_outcomes": [],
    "recent_observations": [
      {
        "id": 1383,
        "site_key": "club48sa",
        "source_type": "technical_audit",
        "subject_key": "club48sa",
        "payload_json": {
          "gsc": {
            "ok": true,
            "checked": true,
            "message": "Connexion GSC OK",
            "payload": {
              "sample_rows": 1,
              "properties_count": 5,
              "resolved_property": "https://www.club48sa.ch"
            },
            "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
            "sitemap_submission_ready": true
          },
          "pages": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch",
              "error": "",
              "noindex": false,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "redirected": false,
              "robots_meta": "",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            }
          ],
          "robots": {
            "ok": true,
            "url": "https://www.club48sa.ch/robots.txt",
            "error": "",
            "sitemaps": [
              "https://www.club48sa.ch/sitemap.xml"
            ],
            "blocks_all": false,
            "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
            "status_code": 200
          },
          "status": "ok",
          "checked": true,
          "sitemap": {
            "ok": true,
            "checked": [
              {
                "ok": true,
                "url": "https://www.club48sa.ch/sitemap.xml",
                "error": "",
                "root_tag": "urlset",
                "url_count": 18,
                "valid_xml": true,
                "status_code": 200,
                "child_checked": [],
                "child_sitemaps": [],
                "listed_sample_urls": [
                  "https://www.club48sa.ch/",
                  "https://www.club48sa.ch/blog",
                  "https://www.club48sa.ch/contact",
                  "https://www.club48sa.ch/mentions-legales",
                  "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                  "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                  "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                  "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                  "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                  "https://www.club48sa.ch/blog/club-investisseurs",
                  "https://www.club48sa.ch/blog/investissement-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                  "https://www.club48sa.ch/blog/club-investissement-prive",
                  "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                  "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                  "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                  "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier"
                ]
              }
            ],
            "selected": {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          },
          "site_key": "club48sa",
          "warnings": [],
          "pagespeed": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 83.0,
            "lcp_ms": 1659.094228493562,
            "mobile": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 83.0,
              "lcp_ms": 1659.094228493562,
              "source": "pagespeed_insights",
              "strategy": "mobile",
              "performance_score": 100.0
            },
            "source": "pagespeed_insights",
            "desktop": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 80.0,
              "lcp_ms": 440.9111722000862,
              "source": "pagespeed_insights",
              "strategy": "desktop",
              "performance_score": 100.0
            },
            "strategy": "mobile",
            "performance_score": 100.0
          },
          "gsc_live_urls": {
            "urls": [
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "error": "",
                "clicks": 0,
                "position": 8.424242424242424,
                "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "indexable": true,
                "top_query": "rendement club deal immobilier",
                "redirected": false,
                "impressions": 33,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.25,
                "url": "https://www.club48sa.ch/",
                "error": "",
                "clicks": 7,
                "position": 4.214285714285714,
                "canonical": "https://www.club48sa.ch",
                "final_url": "https://www.club48sa.ch/",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 28,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.047619047619047616,
                "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "error": "",
                "clicks": 1,
                "position": 10.19047619047619,
                "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "indexable": true,
                "top_query": "reconnaissance de dette suisse",
                "redirected": false,
                "impressions": 21,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "error": "",
                "clicks": 0,
                "position": 8.933333333333334,
                "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "indexable": true,
                "top_query": "europe immobilier",
                "redirected": false,
                "impressions": 15,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.07692307692307693,
                "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "error": "",
                "clicks": 1,
                "position": 6.0,
                "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "indexable": true,
                "top_query": "rendement 15",
                "redirected": false,
                "impressions": 13,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "error": "",
                "clicks": 0,
                "position": 15.166666666666666,
                "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "indexable": true,
                "top_query": "achat appartement off-market genève",
                "redirected": false,
                "impressions": 6,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog",
                "error": "",
                "clicks": 0,
                "position": 7.0,
                "canonical": "https://www.club48sa.ch/blog",
                "final_url": "https://www.club48sa.ch/blog",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 2,
                "status_code": 200
              }
            ],
            "source": "gsc_pages_28d",
            "checked": true,
            "broken_urls": [],
            "broken_count": 0,
            "checked_count": 7,
            "redirected_urls": [],
            "redirected_count": 0,
            "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
          },
          "blocking_issues": [],
          "safe_to_optimize": true,
          "sitemap_coverage": {
            "checked": true,
            "missing_urls": [],
            "expected_urls": [
              "https://www.club48sa.ch"
            ],
            "listed_url_sample_size": 18
          },
          "deployment_health": {
            "checked": false
          },
          "technical_health_score": 100
        },
        "recorded_at": "2026-06-10 00:04:50.934903+00:00",
        "payload": {
          "gsc": {
            "ok": true,
            "checked": true,
            "message": "Connexion GSC OK",
            "payload": {
              "sample_rows": 1,
              "properties_count": 5,
              "resolved_property": "https://www.club48sa.ch"
            },
            "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
            "sitemap_submission_ready": true
          },
          "pages": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch",
              "error": "",
              "noindex": false,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "redirected": false,
              "robots_meta": "",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            }
          ],
          "robots": {
            "ok": true,
            "url": "https://www.club48sa.ch/robots.txt",
            "error": "",
            "sitemaps": [
              "https://www.club48sa.ch/sitemap.xml"
            ],
            "blocks_all": false,
            "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
            "status_code": 200
          },
          "status": "ok",
          "checked": true,
          "sitemap": {
            "ok": true,
            "checked": [
              {
                "ok": true,
                "url": "https://www.club48sa.ch/sitemap.xml",
                "error": "",
                "root_tag": "urlset",
                "url_count": 18,
                "valid_xml": true,
                "status_code": 200,
                "child_checked": [],
                "child_sitemaps": [],
                "listed_sample_urls": [
                  "https://www.club48sa.ch/",
                  "https://www.club48sa.ch/blog",
                  "https://www.club48sa.ch/contact",
                  "https://www.club48sa.ch/mentions-legales",
                  "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                  "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                  "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                  "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                  "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                  "https://www.club48sa.ch/blog/club-investisseurs",
                  "https://www.club48sa.ch/blog/investissement-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                  "https://www.club48sa.ch/blog/club-investissement-prive",
                  "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                  "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                  "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                  "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier"
                ]
              }
            ],
            "selected": {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          },
          "site_key": "club48sa",
          "warnings": [],
          "pagespeed": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 83.0,
            "lcp_ms": 1659.094228493562,
            "mobile": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 83.0,
              "lcp_ms": 1659.094228493562,
              "source": "pagespeed_insights",
              "strategy": "mobile",
              "performance_score": 100.0
            },
            "source": "pagespeed_insights",
            "desktop": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 80.0,
              "lcp_ms": 440.9111722000862,
              "source": "pagespeed_insights",
              "strategy": "desktop",
              "performance_score": 100.0
            },
            "strategy": "mobile",
            "performance_score": 100.0
          },
          "gsc_live_urls": {
            "urls": [
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "error": "",
                "clicks": 0,
                "position": 8.424242424242424,
                "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "indexable": true,
                "top_query": "rendement club deal immobilier",
                "redirected": false,
                "impressions": 33,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.25,
                "url": "https://www.club48sa.ch/",
                "error": "",
                "clicks": 7,
                "position": 4.214285714285714,
                "canonical": "https://www.club48sa.ch",
                "final_url": "https://www.club48sa.ch/",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 28,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.047619047619047616,
                "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "error": "",
                "clicks": 1,
                "position": 10.19047619047619,
                "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "indexable": true,
                "top_query": "reconnaissance de dette suisse",
                "redirected": false,
                "impressions": 21,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "error": "",
                "clicks": 0,
                "position": 8.933333333333334,
                "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "indexable": true,
                "top_query": "europe immobilier",
                "redirected": false,
                "impressions": 15,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.07692307692307693,
                "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "error": "",
                "clicks": 1,
                "position": 6.0,
                "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "indexable": true,
                "top_query": "rendement 15",
                "redirected": false,
                "impressions": 13,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "error": "",
                "clicks": 0,
                "position": 15.166666666666666,
                "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "indexable": true,
                "top_query": "achat appartement off-market genève",
                "redirected": false,
                "impressions": 6,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog",
                "error": "",
                "clicks": 0,
                "position": 7.0,
                "canonical": "https://www.club48sa.ch/blog",
                "final_url": "https://www.club48sa.ch/blog",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 2,
                "status_code": 200
              }
            ],
            "source": "gsc_pages_28d",
            "checked": true,
            "broken_urls": [],
            "broken_count": 0,
            "checked_count": 7,
            "redirected_urls": [],
            "redirected_count": 0,
            "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
          },
          "blocking_issues": [],
          "safe_to_optimize": true,
          "sitemap_coverage": {
            "checked": true,
            "missing_urls": [],
            "expected_urls": [
              "https://www.club48sa.ch"
            ],
            "listed_url_sample_size": 18
          },
          "deployment_health": {
            "checked": false
          },
          "technical_health_score": 100
        }
      },
      {
        "id": 1377,
        "site_key": "club48sa",
        "source_type": "workflow_state",
        "subject_key": "recent_events",
        "payload_json": {
          "events": [
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-06-02T20:45:27.000129Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-03T00:01:08.807302Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-04T00:01:07.691469Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-05T00:01:18.815533Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-06-05T20:45:37.074026Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-06T00:01:06.402639Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-07T00:01:14.427099Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-08T00:00:58.239773Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-06-08T20:45:18.359175Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-09T00:01:11.036777Z"
            }
          ]
        },
        "recorded_at": "2026-06-10 00:01:13.795922+00:00",
        "payload": {
          "events": [
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-06-02T20:45:27.000129Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-03T00:01:08.807302Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-04T00:01:07.691469Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-05T00:01:18.815533Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-06-05T20:45:37.074026Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-06T00:01:06.402639Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-07T00:01:14.427099Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-08T00:00:58.239773Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-06-08T20:45:18.359175Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-09T00:01:11.036777Z"
            }
          ]
        }
      },
      {
        "id": 1376,
        "site_key": "club48sa",
        "source_type": "queue_state",
        "subject_key": "recent_queue",
        "payload_json": {
          "recent_rows": []
        },
        "recorded_at": "2026-06-10 00:01:13.782434+00:00",
        "payload": {
          "recent_rows": []
        }
      },
      {
        "id": 1375,
        "site_key": "club48sa",
        "source_type": "gsc_snapshot",
        "subject_key": "pages_28d",
        "payload_json": {
          "saved_at": "2026-05-22T10:09:06.487422Z",
          "top_pages": [
            {
              "ctr": 0.0,
              "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "clicks": 0,
              "position": 8.424242424242424,
              "top_query": "rendement club deal immobilier",
              "impressions": 33
            },
            {
              "ctr": 0.25,
              "page": "https://www.club48sa.ch/",
              "clicks": 7,
              "position": 4.214285714285714,
              "top_query": "club 48 sa",
              "impressions": 28
            },
            {
              "ctr": 0.047619047619047616,
              "page": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "clicks": 1,
              "position": 10.19047619047619,
              "top_query": "reconnaissance de dette suisse",
              "impressions": 21
            },
            {
              "ctr": 0.0,
              "page": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "clicks": 0,
              "position": 8.933333333333334,
              "top_query": "europe immobilier",
              "impressions": 15
            },
            {
              "ctr": 0.07692307692307693,
              "page": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "clicks": 1,
              "position": 6.0,
              "top_query": "rendement 15",
              "impressions": 13
            }
          ],
          "top_queries": [
            {
              "ctr": 0.18181818181818182,
              "query": "club 48 sa",
              "clicks": 2,
              "position": 4.181818181818182,
              "impressions": 11
            },
            {
              "ctr": 0.0,
              "query": "rendement 15",
              "clicks": 0,
              "position": 8.2,
              "impressions": 5
            },
            {
              "ctr": 0.5,
              "query": "club 48",
              "clicks": 2,
              "position": 5.0,
              "impressions": 4
            },
            {
              "ctr": 0.0,
              "query": "rendement club deal immobilier",
              "clicks": 0,
              "position": 8.25,
              "impressions": 4
            },
            {
              "ctr": 0.0,
              "query": "club48",
              "clicks": 0,
              "position": 8.0,
              "impressions": 3
            },
            {
              "ctr": 0.0,
              "query": "reconnaissance de dette suisse",
              "clicks": 0,
              "position": 12.333333333333334,
              "impressions": 3
            },
            {
              "ctr": 0.0,
              "query": "\"crowdfunding immobilier\" -site:reddit.com -site:twitter.com -site:x.com -site:wykop.pl -site:tripadvisor.com -site:youtube.com -site:yelp.com -site:booking.com -site:facebook.com -site:instagram.com -site:tiktok.com",
              "clicks": 0,
              "position": 3.0,
              "impressions": 1
            },
            {
              "ctr": 0.0,
              "query": "achat appartement off-market genève",
              "clicks": 0,
              "position": 52.0,
              "impressions": 1
            },
            {
              "ctr": 0.0,
              "query": "club deal",
              "clicks": 0,
              "position": 55.0,
              "impressions": 1
            },
            {
              "ctr": 0.0,
              "query": "club deal immo",
              "clicks": 0,
              "position": 8.0,
              "impressions": 1
            }
          ]
        },
        "recorded_at": "2026-06-10 00:01:13.769152+00:00",
        "payload": {
          "saved_at": "2026-05-22T10:09:06.487422Z",
          "top_pages": [
            {
              "ctr": 0.0,
              "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "clicks": 0,
              "position": 8.424242424242424,
              "top_query": "rendement club deal immobilier",
              "impressions": 33
            },
            {
              "ctr": 0.25,
              "page": "https://www.club48sa.ch/",
              "clicks": 7,
              "position": 4.214285714285714,
              "top_query": "club 48 sa",
              "impressions": 28
            },
            {
              "ctr": 0.047619047619047616,
              "page": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "clicks": 1,
              "position": 10.19047619047619,
              "top_query": "reconnaissance de dette suisse",
              "impressions": 21
            },
            {
              "ctr": 0.0,
              "page": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "clicks": 0,
              "position": 8.933333333333334,
              "top_query": "europe immobilier",
              "impressions": 15
            },
            {
              "ctr": 0.07692307692307693,
              "page": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "clicks": 1,
              "position": 6.0,
              "top_query": "rendement 15",
              "impressions": 13
            }
          ],
          "top_queries": [
            {
              "ctr": 0.18181818181818182,
              "query": "club 48 sa",
              "clicks": 2,
              "position": 4.181818181818182,
              "impressions": 11
            },
            {
              "ctr": 0.0,
              "query": "rendement 15",
              "clicks": 0,
              "position": 8.2,
              "impressions": 5
            },
            {
              "ctr": 0.5,
              "query": "club 48",
              "clicks": 2,
              "position": 5.0,
              "impressions": 4
            },
            {
              "ctr": 0.0,
              "query": "rendement club deal immobilier",
              "clicks": 0,
              "position": 8.25,
              "impressions": 4
            },
            {
              "ctr": 0.0,
              "query": "club48",
              "clicks": 0,
              "position": 8.0,
              "impressions": 3
            },
            {
              "ctr": 0.0,
              "query": "reconnaissance de dette suisse",
              "clicks": 0,
              "position": 12.333333333333334,
              "impressions": 3
            },
            {
              "ctr": 0.0,
              "query": "\"crowdfunding immobilier\" -site:reddit.com -site:twitter.com -site:x.com -site:wykop.pl -site:tripadvisor.com -site:youtube.com -site:yelp.com -site:booking.com -site:facebook.com -site:instagram.com -site:tiktok.com",
              "clicks": 0,
              "position": 3.0,
              "impressions": 1
            },
            {
              "ctr": 0.0,
              "query": "achat appartement off-market genève",
              "clicks": 0,
              "position": 52.0,
              "impressions": 1
            },
            {
              "ctr": 0.0,
              "query": "club deal",
              "clicks": 0,
              "position": 55.0,
              "impressions": 1
            },
            {
              "ctr": 0.0,
              "query": "club deal immo",
              "clicks": 0,
              "position": 8.0,
              "impressions": 1
            }
          ]
        }
      },
      {
        "id": 1367,
        "site_key": "club48sa",
        "source_type": "learningseo_site_feedback",
        "subject_key": "club48sa",
        "payload_json": {
          "site_key": "club48sa",
          "project_name": "Club 48 SA",
          "applied_topics": [
            "fundamentals",
            "execution",
            "technical",
            "content",
            "links",
            "automation"
          ],
          "contradictions": [],
          "sop_candidates": [
            "Before new draft creation, verify that the target intent is not already partially served by an existing URL.",
            "Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.",
            "Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.",
            "Automated actions must emit events, measurements, and postmortems by default."
          ],
          "lessons_created": 6
        },
        "recorded_at": "2026-06-10 00:00:13.233687+00:00",
        "payload": {
          "site_key": "club48sa",
          "project_name": "Club 48 SA",
          "applied_topics": [
            "fundamentals",
            "execution",
            "technical",
            "content",
            "links",
            "automation"
          ],
          "contradictions": [],
          "sop_candidates": [
            "Before new draft creation, verify that the target intent is not already partially served by an existing URL.",
            "Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.",
            "Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.",
            "Automated actions must emit events, measurements, and postmortems by default."
          ],
          "lessons_created": 6
        }
      },
      {
        "id": 1357,
        "site_key": "club48sa",
        "source_type": "technical_remediation",
        "subject_key": "club48sa",
        "payload_json": {
          "ok": true,
          "errors": [],
          "actions": [
            {
              "type": "optimize_lcp",
              "value": 3946.5,
              "metric": "lcp_ms",
              "target": "https://www.club48sa.ch",
              "priority": "high",
              "threshold": 2500,
              "recommended_changes": [
                "Identifier l'élément LCP mobile sur la home via PageSpeed/Lighthouse.",
                "Optimiser l'image ou le bloc hero responsable: format WebP/AVIF, dimensions adaptées, compression.",
                "Précharger ou prioriser uniquement l'asset LCP critique et différer les médias non critiques.",
                "Réduire CSS/JS bloquant au-dessus de la ligne de flottaison."
              ]
            }
          ],
          "changed": false,
          "attempted": true,
          "deployment": {
            "ok": true,
            "detail": "no_change",
            "checked": false
          }
        },
        "recorded_at": "2026-06-09 00:04:55.370845+00:00",
        "payload": {
          "ok": true,
          "errors": [],
          "actions": [
            {
              "type": "optimize_lcp",
              "value": 3946.5,
              "metric": "lcp_ms",
              "target": "https://www.club48sa.ch",
              "priority": "high",
              "threshold": 2500,
              "recommended_changes": [
                "Identifier l'élément LCP mobile sur la home via PageSpeed/Lighthouse.",
                "Optimiser l'image ou le bloc hero responsable: format WebP/AVIF, dimensions adaptées, compression.",
                "Précharger ou prioriser uniquement l'asset LCP critique et différer les médias non critiques.",
                "Réduire CSS/JS bloquant au-dessus de la ligne de flottaison."
              ]
            }
          ],
          "changed": false,
          "attempted": true,
          "deployment": {
            "ok": true,
            "detail": "no_change",
            "checked": false
          }
        }
      },
      {
        "id": 1356,
        "site_key": "club48sa",
        "source_type": "technical_audit",
        "subject_key": "club48sa",
        "payload_json": {
          "gsc": {
            "ok": true,
            "checked": true,
            "message": "Connexion GSC OK",
            "payload": {
              "sample_rows": 1,
              "properties_count": 5,
              "resolved_property": "https://www.club48sa.ch"
            },
            "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
            "sitemap_submission_ready": true
          },
          "pages": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch",
              "error": "",
              "noindex": false,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "redirected": false,
              "robots_meta": "",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            }
          ],
          "robots": {
            "ok": true,
            "url": "https://www.club48sa.ch/robots.txt",
            "error": "",
            "sitemaps": [
              "https://www.club48sa.ch/sitemap.xml"
            ],
            "blocks_all": false,
            "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
            "status_code": 200
          },
          "status": "ok",
          "checked": true,
          "sitemap": {
            "ok": true,
            "checked": [
              {
                "ok": true,
                "url": "https://www.club48sa.ch/sitemap.xml",
                "error": "",
                "root_tag": "urlset",
                "url_count": 18,
                "valid_xml": true,
                "status_code": 200,
                "child_checked": [],
                "child_sitemaps": [],
                "listed_sample_urls": [
                  "https://www.club48sa.ch/",
                  "https://www.club48sa.ch/blog",
                  "https://www.club48sa.ch/contact",
                  "https://www.club48sa.ch/mentions-legales",
                  "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                  "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                  "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                  "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                  "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                  "https://www.club48sa.ch/blog/club-investisseurs",
                  "https://www.club48sa.ch/blog/investissement-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                  "https://www.club48sa.ch/blog/club-investissement-prive",
                  "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                  "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                  "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                  "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier"
                ]
              }
            ],
            "selected": {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          },
          "site_key": "club48sa",
          "warnings": [
            "LCP mobile élevé (3946 ms)"
          ],
          "pagespeed": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 73.0,
            "lcp_ms": 3946.5023263154208,
            "mobile": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 73.0,
              "lcp_ms": 3946.5023263154208,
              "source": "pagespeed_insights",
              "strategy": "mobile",
              "performance_score": 82.0
            },
            "source": "pagespeed_insights",
            "desktop": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 64.00000000000006,
              "lcp_ms": 431.2967905282453,
              "source": "pagespeed_insights",
              "strategy": "desktop",
              "performance_score": 100.0
            },
            "strategy": "mobile",
            "performance_score": 82.0
          },
          "gsc_live_urls": {
            "urls": [
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "error": "",
                "clicks": 0,
                "position": 8.424242424242424,
                "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "indexable": true,
                "top_query": "rendement club deal immobilier",
                "redirected": false,
                "impressions": 33,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.25,
                "url": "https://www.club48sa.ch/",
                "error": "",
                "clicks": 7,
                "position": 4.214285714285714,
                "canonical": "https://www.club48sa.ch",
                "final_url": "https://www.club48sa.ch/",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 28,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.047619047619047616,
                "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "error": "",
                "clicks": 1,
                "position": 10.19047619047619,
                "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "indexable": true,
                "top_query": "reconnaissance de dette suisse",
                "redirected": false,
                "impressions": 21,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "error": "",
                "clicks": 0,
                "position": 8.933333333333334,
                "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "indexable": true,
                "top_query": "europe immobilier",
                "redirected": false,
                "impressions": 15,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.07692307692307693,
                "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "error": "",
                "clicks": 1,
                "position": 6.0,
                "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "indexable": true,
                "top_query": "rendement 15",
                "redirected": false,
                "impressions": 13,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "error": "",
                "clicks": 0,
                "position": 15.166666666666666,
                "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "indexable": true,
                "top_query": "achat appartement off-market genève",
                "redirected": false,
                "impressions": 6,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog",
                "error": "",
                "clicks": 0,
                "position": 7.0,
                "canonical": "https://www.club48sa.ch/blog",
                "final_url": "https://www.club48sa.ch/blog",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 2,
                "status_code": 200
              }
            ],
            "source": "gsc_pages_28d",
            "checked": true,
            "broken_urls": [],
            "broken_count": 0,
            "checked_count": 7,
            "redirected_urls": [],
            "redirected_count": 0,
            "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
          },
          "blocking_issues": [],
          "safe_to_optimize": true,
          "sitemap_coverage": {
            "checked": true,
            "missing_urls": [],
            "expected_urls": [
              "https://www.club48sa.ch"
            ],
            "listed_url_sample_size": 18
          },
          "deployment_health": {
            "checked": false
          },
          "technical_health_score": 90
        },
        "recorded_at": "2026-06-09 00:04:54.654199+00:00",
        "payload": {
          "gsc": {
            "ok": true,
            "checked": true,
            "message": "Connexion GSC OK",
            "payload": {
              "sample_rows": 1,
              "properties_count": 5,
              "resolved_property": "https://www.club48sa.ch"
            },
            "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
            "sitemap_submission_ready": true
          },
          "pages": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch",
              "error": "",
              "noindex": false,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "redirected": false,
              "robots_meta": "",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            }
          ],
          "robots": {
            "ok": true,
            "url": "https://www.club48sa.ch/robots.txt",
            "error": "",
            "sitemaps": [
              "https://www.club48sa.ch/sitemap.xml"
            ],
            "blocks_all": false,
            "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
            "status_code": 200
          },
          "status": "ok",
          "checked": true,
          "sitemap": {
            "ok": true,
            "checked": [
              {
                "ok": true,
                "url": "https://www.club48sa.ch/sitemap.xml",
                "error": "",
                "root_tag": "urlset",
                "url_count": 18,
                "valid_xml": true,
                "status_code": 200,
                "child_checked": [],
                "child_sitemaps": [],
                "listed_sample_urls": [
                  "https://www.club48sa.ch/",
                  "https://www.club48sa.ch/blog",
                  "https://www.club48sa.ch/contact",
                  "https://www.club48sa.ch/mentions-legales",
                  "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                  "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                  "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                  "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                  "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                  "https://www.club48sa.ch/blog/club-investisseurs",
                  "https://www.club48sa.ch/blog/investissement-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                  "https://www.club48sa.ch/blog/club-investissement-prive",
                  "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                  "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                  "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                  "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier"
                ]
              }
            ],
            "selected": {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          },
          "site_key": "club48sa",
          "warnings": [
            "LCP mobile élevé (3946 ms)"
          ],
          "pagespeed": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 73.0,
            "lcp_ms": 3946.5023263154208,
            "mobile": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 73.0,
              "lcp_ms": 3946.5023263154208,
              "source": "pagespeed_insights",
              "strategy": "mobile",
              "performance_score": 82.0
            },
            "source": "pagespeed_insights",
            "desktop": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 64.00000000000006,
              "lcp_ms": 431.2967905282453,
              "source": "pagespeed_insights",
              "strategy": "desktop",
              "performance_score": 100.0
            },
            "strategy": "mobile",
            "performance_score": 82.0
          },
          "gsc_live_urls": {
            "urls": [
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "error": "",
                "clicks": 0,
                "position": 8.424242424242424,
                "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "indexable": true,
                "top_query": "rendement club deal immobilier",
                "redirected": false,
                "impressions": 33,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.25,
                "url": "https://www.club48sa.ch/",
                "error": "",
                "clicks": 7,
                "position": 4.214285714285714,
                "canonical": "https://www.club48sa.ch",
                "final_url": "https://www.club48sa.ch/",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 28,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.047619047619047616,
                "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "error": "",
                "clicks": 1,
                "position": 10.19047619047619,
                "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "indexable": true,
                "top_query": "reconnaissance de dette suisse",
                "redirected": false,
                "impressions": 21,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "error": "",
                "clicks": 0,
                "position": 8.933333333333334,
                "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "indexable": true,
                "top_query": "europe immobilier",
                "redirected": false,
                "impressions": 15,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.07692307692307693,
                "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "error": "",
                "clicks": 1,
                "position": 6.0,
                "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "indexable": true,
                "top_query": "rendement 15",
                "redirected": false,
                "impressions": 13,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "error": "",
                "clicks": 0,
                "position": 15.166666666666666,
                "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "indexable": true,
                "top_query": "achat appartement off-market genève",
                "redirected": false,
                "impressions": 6,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog",
                "error": "",
                "clicks": 0,
                "position": 7.0,
                "canonical": "https://www.club48sa.ch/blog",
                "final_url": "https://www.club48sa.ch/blog",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 2,
                "status_code": 200
              }
            ],
            "source": "gsc_pages_28d",
            "checked": true,
            "broken_urls": [],
            "broken_count": 0,
            "checked_count": 7,
            "redirected_urls": [],
            "redirected_count": 0,
            "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
          },
          "blocking_issues": [],
          "safe_to_optimize": true,
          "sitemap_coverage": {
            "checked": true,
            "missing_urls": [],
            "expected_urls": [
              "https://www.club48sa.ch"
            ],
            "listed_url_sample_size": 18
          },
          "deployment_health": {
            "checked": false
          },
          "technical_health_score": 90
        }
      }
    ],
    "live_state": {
      "queue": {
        "by_status": {},
        "recent_items": []
      },
      "gsc": {
        "saved_at": "2026-05-22T10:09:06.487422Z",
        "top_pages": [
          {
            "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
            "clicks": 0,
            "impressions": 33,
            "ctr": 0.0,
            "position": 8.424242424242424,
            "top_query": "rendement club deal immobilier"
          },
          {
            "page": "https://www.club48sa.ch/",
            "clicks": 7,
            "impressions": 28,
            "ctr": 0.25,
            "position": 4.214285714285714,
            "top_query": "club 48 sa"
          },
          {
            "page": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
            "clicks": 1,
            "impressions": 21,
            "ctr": 0.047619047619047616,
            "position": 10.19047619047619,
            "top_query": "reconnaissance de dette suisse"
          }
        ],
        "top_queries": [
          {
            "query": "club 48 sa",
            "clicks": 2,
            "impressions": 11,
            "ctr": 0.18181818181818182,
            "position": 4.181818181818182
          },
          {
            "query": "rendement 15",
            "clicks": 0,
            "impressions": 5,
            "ctr": 0.0,
            "position": 8.2
          },
          {
            "query": "club 48",
            "clicks": 2,
            "impressions": 4,
            "ctr": 0.5,
            "position": 5.0
          },
          {
            "query": "rendement club deal immobilier",
            "clicks": 0,
            "impressions": 4,
            "ctr": 0.0,
            "position": 8.25
          },
          {
            "query": "club48",
            "clicks": 0,
            "impressions": 3,
            "ctr": 0.0,
            "position": 8.0
          }
        ]
      },
      "workflow": {
        "updated_at": "2026-06-10T00:01:16.070848Z",
        "recent_events": [
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "lessons_created": 1,
              "sop_name": "adaptive-feedback-playbook"
            },
            "recorded_at": "2026-06-07T00:01:14.427099Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "lessons_created": 1,
              "sop_name": "adaptive-feedback-playbook"
            },
            "recorded_at": "2026-06-08T00:00:58.239773Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "optimize_count": 0,
              "create_count": 0,
              "merge_count": 0,
              "watch_count": 0,
              "deleted_count": 0
            },
            "recorded_at": "2026-06-08T20:45:18.359175Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "lessons_created": 1,
              "sop_name": "adaptive-feedback-playbook"
            },
            "recorded_at": "2026-06-09T00:01:11.036777Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "lessons_created": 1,
              "sop_name": "adaptive-feedback-playbook"
            },
            "recorded_at": "2026-06-10T00:01:16.070637Z"
          }
        ]
      }
    },
    "site_context": {
      "site_key": "club48sa",
      "project_name": "Club 48 SA",
      "project_type": "repo_files",
      "site_url": "https://www.club48sa.ch",
      "base_url": "https://www.club48sa.ch",
      "gsc_property": "https://www.club48sa.ch",
      "gsc_blog_prefix": "https://www.club48sa.ch",
      "agent_mode": "full_autonomy",
      "operator_policy": "agent_driven",
      "primary_market": "ch",
      "target_countries": [
        "ch",
        "fr"
      ],
      "seo_scope": "national",
      "competitors": [],
      "editorial_policy": {
        "queue_target_max": 0,
        "queue_resume_threshold": 0,
        "publish_timezone": "Europe/Paris",
        "publish_hour_local": 9,
        "publish_weekdays_only": true,
        "max_daily_publishes": 0,
        "keyword_min_volume": 50,
        "keyword_max_difficulty": 45
      },
      "image_policy": {
        "style_guardrail": "editorial_photo",
        "subject_focus": "premium_real_estate_objects",
        "allow_humans": "limited",
        "fallback_enabled": true,
        "max_prompt_variants": 5,
        "min_quality_score": 72
      },
      "features": {
        "gsc_enabled": true,
        "writer_gsc_enabled": false,
        "gsc_opportunities_enabled": true,
        "seo_panel_enabled": true,
        "crawler_enabled": true,
        "linkmap_enabled": true
      }
    }
  },
  "validated_lessons": [
    {
      "id": 198,
      "site_key": "club48sa",
      "category": "ctr_optimization",
      "lesson": "Several visible pages have low CTR. Prioritize title, meta description, and intent alignment refreshes before creating net new content.",
      "confidence": "high",
      "source": "feedback_loop",
      "status": "validated",
      "details_json": {
        "pages": [
          {
            "ctr": 0.0,
            "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
            "clicks": 0,
            "position": 8.424242424242424,
            "top_query": "rendement club deal immobilier",
            "impressions": 33
          }
        ]
      },
      "created_at": "2026-06-10 00:01:15.818738+00:00",
      "updated_at": "2026-06-10 00:01:16.145755+00:00",
      "details": {
        "pages": [
          {
            "ctr": 0.0,
            "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
            "clicks": 0,
            "position": 8.424242424242424,
            "top_query": "rendement club deal immobilier",
            "impressions": 33
          }
        ]
      }
    }
  ],
  "active_sops": [
    {
      "id": 194,
      "site_key": "club48sa",
      "scope": "site",
      "name": "adaptive-feedback-playbook",
      "version": 13,
      "status": "draft",
      "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
      "source": "feedback_loop",
      "created_at": "2026-06-10 00:01:15.872763+00:00",
      "updated_at": "2026-06-10 00:01:15.872763+00:00",
      "confidence_score": 0,
      "confidence_label": "low"
    },
    {
      "id": 193,
      "site_key": "club48sa",
      "scope": "site",
      "name": "learningseo-site-improvement-playbook",
      "version": 20,
      "status": "draft",
      "content": "1. Before new draft creation, verify that the target intent is not already partially served by an existing URL.\n2. Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.\n3. Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.\n4. Automated actions must emit events, measurements, and postmortems by default.",
      "source": "learningseo_daily",
      "created_at": "2026-06-10 00:00:13.031581+00:00",
      "updated_at": "2026-06-10 00:00:13.031581+00:00",
      "confidence_score": 0,
      "confidence_label": "low"
    },
    {
      "id": 187,
      "site_key": "club48sa",
      "scope": "site",
      "name": "learningseo-site-improvement-playbook",
      "version": 19,
      "status": "deprecated",
      "content": "1. Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.\n2. Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.\n3. Automated actions must emit events, measurements, and postmortems by default.",
      "source": "learningseo_daily",
      "created_at": "2026-06-09 00:00:15.260207+00:00",
      "updated_at": "2026-06-10 00:01:16.216130+00:00",
      "confidence_score": 0,
      "confidence_label": "low"
    },
    {
      "id": 190,
      "site_key": "club48sa",
      "scope": "site",
      "name": "adaptive-feedback-playbook",
      "version": 12,
      "status": "deprecated",
      "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
      "source": "feedback_loop",
      "created_at": "2026-06-09 00:01:10.836448+00:00",
      "updated_at": "2026-06-10 00:01:16.215398+00:00",
      "confidence_score": 0,
      "confidence_label": "low"
    },
    {
      "id": 184,
      "site_key": "club48sa",
      "scope": "site",
      "name": "adaptive-feedback-playbook",
      "version": 11,
      "status": "deprecated",
      "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
      "source": "feedback_loop",
      "created_at": "2026-06-08 00:00:58.012278+00:00",
      "updated_at": "2026-06-08 00:03:03.396386+00:00",
      "confidence_score": 0,
      "confidence_label": "low"
    }
  ],
  "recent_outcomes": [],
  "recent_observations": [
    {
      "id": 1383,
      "site_key": "club48sa",
      "source_type": "technical_audit",
      "subject_key": "club48sa",
      "payload_json": {
        "gsc": {
          "ok": true,
          "checked": true,
          "message": "Connexion GSC OK",
          "payload": {
            "sample_rows": 1,
            "properties_count": 5,
            "resolved_property": "https://www.club48sa.ch"
          },
          "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
          "sitemap_submission_ready": true
        },
        "pages": [
          {
            "ok": true,
            "url": "https://www.club48sa.ch",
            "error": "",
            "noindex": false,
            "canonical": "https://www.club48sa.ch",
            "final_url": "https://www.club48sa.ch/",
            "indexable": true,
            "redirected": false,
            "robots_meta": "",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          }
        ],
        "robots": {
          "ok": true,
          "url": "https://www.club48sa.ch/robots.txt",
          "error": "",
          "sitemaps": [
            "https://www.club48sa.ch/sitemap.xml"
          ],
          "blocks_all": false,
          "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
          "status_code": 200
        },
        "status": "ok",
        "checked": true,
        "sitemap": {
          "ok": true,
          "checked": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          ],
          "selected": {
            "ok": true,
            "url": "https://www.club48sa.ch/sitemap.xml",
            "error": "",
            "root_tag": "urlset",
            "url_count": 18,
            "valid_xml": true,
            "status_code": 200,
            "child_checked": [],
            "child_sitemaps": [],
            "listed_sample_urls": [
              "https://www.club48sa.ch/",
              "https://www.club48sa.ch/blog",
              "https://www.club48sa.ch/contact",
              "https://www.club48sa.ch/mentions-legales",
              "https://www.club48sa.ch/blog/off-market-suisse-geneve",
              "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
              "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
              "https://www.club48sa.ch/blog/acces-investisseur-off-market",
              "https://www.club48sa.ch/blog/opportunite-investissement-prive",
              "https://www.club48sa.ch/blog/club-investisseurs",
              "https://www.club48sa.ch/blog/investissement-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
              "https://www.club48sa.ch/blog/club-investissement-prive",
              "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier"
            ]
          }
        },
        "site_key": "club48sa",
        "warnings": [],
        "pagespeed": {
          "ok": true,
          "cls": 0.0,
          "inp_ms": 83.0,
          "lcp_ms": 1659.094228493562,
          "mobile": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 83.0,
            "lcp_ms": 1659.094228493562,
            "source": "pagespeed_insights",
            "strategy": "mobile",
            "performance_score": 100.0
          },
          "source": "pagespeed_insights",
          "desktop": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 80.0,
            "lcp_ms": 440.9111722000862,
            "source": "pagespeed_insights",
            "strategy": "desktop",
            "performance_score": 100.0
          },
          "strategy": "mobile",
          "performance_score": 100.0
        },
        "gsc_live_urls": {
          "urls": [
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "error": "",
              "clicks": 0,
              "position": 8.424242424242424,
              "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "indexable": true,
              "top_query": "rendement club deal immobilier",
              "redirected": false,
              "impressions": 33,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.25,
              "url": "https://www.club48sa.ch/",
              "error": "",
              "clicks": 7,
              "position": 4.214285714285714,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 28,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.047619047619047616,
              "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "error": "",
              "clicks": 1,
              "position": 10.19047619047619,
              "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "indexable": true,
              "top_query": "reconnaissance de dette suisse",
              "redirected": false,
              "impressions": 21,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "error": "",
              "clicks": 0,
              "position": 8.933333333333334,
              "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "indexable": true,
              "top_query": "europe immobilier",
              "redirected": false,
              "impressions": 15,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.07692307692307693,
              "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "error": "",
              "clicks": 1,
              "position": 6.0,
              "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "indexable": true,
              "top_query": "rendement 15",
              "redirected": false,
              "impressions": 13,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "error": "",
              "clicks": 0,
              "position": 15.166666666666666,
              "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "indexable": true,
              "top_query": "achat appartement off-market genève",
              "redirected": false,
              "impressions": 6,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog",
              "error": "",
              "clicks": 0,
              "position": 7.0,
              "canonical": "https://www.club48sa.ch/blog",
              "final_url": "https://www.club48sa.ch/blog",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 2,
              "status_code": 200
            }
          ],
          "source": "gsc_pages_28d",
          "checked": true,
          "broken_urls": [],
          "broken_count": 0,
          "checked_count": 7,
          "redirected_urls": [],
          "redirected_count": 0,
          "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
        },
        "blocking_issues": [],
        "safe_to_optimize": true,
        "sitemap_coverage": {
          "checked": true,
          "missing_urls": [],
          "expected_urls": [
            "https://www.club48sa.ch"
          ],
          "listed_url_sample_size": 18
        },
        "deployment_health": {
          "checked": false
        },
        "technical_health_score": 100
      },
      "recorded_at": "2026-06-10 00:04:50.934903+00:00",
      "payload": {
        "gsc": {
          "ok": true,
          "checked": true,
          "message": "Connexion GSC OK",
          "payload": {
            "sample_rows": 1,
            "properties_count": 5,
            "resolved_property": "https://www.club48sa.ch"
          },
          "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
          "sitemap_submission_ready": true
        },
        "pages": [
          {
            "ok": true,
            "url": "https://www.club48sa.ch",
            "error": "",
            "noindex": false,
            "canonical": "https://www.club48sa.ch",
            "final_url": "https://www.club48sa.ch/",
            "indexable": true,
            "redirected": false,
            "robots_meta": "",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          }
        ],
        "robots": {
          "ok": true,
          "url": "https://www.club48sa.ch/robots.txt",
          "error": "",
          "sitemaps": [
            "https://www.club48sa.ch/sitemap.xml"
          ],
          "blocks_all": false,
          "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
          "status_code": 200
        },
        "status": "ok",
        "checked": true,
        "sitemap": {
          "ok": true,
          "checked": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          ],
          "selected": {
            "ok": true,
            "url": "https://www.club48sa.ch/sitemap.xml",
            "error": "",
            "root_tag": "urlset",
            "url_count": 18,
            "valid_xml": true,
            "status_code": 200,
            "child_checked": [],
            "child_sitemaps": [],
            "listed_sample_urls": [
              "https://www.club48sa.ch/",
              "https://www.club48sa.ch/blog",
              "https://www.club48sa.ch/contact",
              "https://www.club48sa.ch/mentions-legales",
              "https://www.club48sa.ch/blog/off-market-suisse-geneve",
              "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
              "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
              "https://www.club48sa.ch/blog/acces-investisseur-off-market",
              "https://www.club48sa.ch/blog/opportunite-investissement-prive",
              "https://www.club48sa.ch/blog/club-investisseurs",
              "https://www.club48sa.ch/blog/investissement-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
              "https://www.club48sa.ch/blog/club-investissement-prive",
              "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier"
            ]
          }
        },
        "site_key": "club48sa",
        "warnings": [],
        "pagespeed": {
          "ok": true,
          "cls": 0.0,
          "inp_ms": 83.0,
          "lcp_ms": 1659.094228493562,
          "mobile": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 83.0,
            "lcp_ms": 1659.094228493562,
            "source": "pagespeed_insights",
            "strategy": "mobile",
            "performance_score": 100.0
          },
          "source": "pagespeed_insights",
          "desktop": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 80.0,
            "lcp_ms": 440.9111722000862,
            "source": "pagespeed_insights",
            "strategy": "desktop",
            "performance_score": 100.0
          },
          "strategy": "mobile",
          "performance_score": 100.0
        },
        "gsc_live_urls": {
          "urls": [
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "error": "",
              "clicks": 0,
              "position": 8.424242424242424,
              "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "indexable": true,
              "top_query": "rendement club deal immobilier",
              "redirected": false,
              "impressions": 33,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.25,
              "url": "https://www.club48sa.ch/",
              "error": "",
              "clicks": 7,
              "position": 4.214285714285714,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 28,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.047619047619047616,
              "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "error": "",
              "clicks": 1,
              "position": 10.19047619047619,
              "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "indexable": true,
              "top_query": "reconnaissance de dette suisse",
              "redirected": false,
              "impressions": 21,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "error": "",
              "clicks": 0,
              "position": 8.933333333333334,
              "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "indexable": true,
              "top_query": "europe immobilier",
              "redirected": false,
              "impressions": 15,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.07692307692307693,
              "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "error": "",
              "clicks": 1,
              "position": 6.0,
              "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "indexable": true,
              "top_query": "rendement 15",
              "redirected": false,
              "impressions": 13,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "error": "",
              "clicks": 0,
              "position": 15.166666666666666,
              "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "indexable": true,
              "top_query": "achat appartement off-market genève",
              "redirected": false,
              "impressions": 6,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog",
              "error": "",
              "clicks": 0,
              "position": 7.0,
              "canonical": "https://www.club48sa.ch/blog",
              "final_url": "https://www.club48sa.ch/blog",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 2,
              "status_code": 200
            }
          ],
          "source": "gsc_pages_28d",
          "checked": true,
          "broken_urls": [],
          "broken_count": 0,
          "checked_count": 7,
          "redirected_urls": [],
          "redirected_count": 0,
          "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
        },
        "blocking_issues": [],
        "safe_to_optimize": true,
        "sitemap_coverage": {
          "checked": true,
          "missing_urls": [],
          "expected_urls": [
            "https://www.club48sa.ch"
          ],
          "listed_url_sample_size": 18
        },
        "deployment_health": {
          "checked": false
        },
        "technical_health_score": 100
      }
    },
    {
      "id": 1377,
      "site_key": "club48sa",
      "source_type": "workflow_state",
      "subject_key": "recent_events",
      "payload_json": {
        "events": [
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-02T20:45:27.000129Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-03T00:01:08.807302Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-04T00:01:07.691469Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-05T00:01:18.815533Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-05T20:45:37.074026Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-06T00:01:06.402639Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-07T00:01:14.427099Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-08T00:00:58.239773Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-08T20:45:18.359175Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-09T00:01:11.036777Z"
          }
        ]
      },
      "recorded_at": "2026-06-10 00:01:13.795922+00:00",
      "payload": {
        "events": [
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-02T20:45:27.000129Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-03T00:01:08.807302Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-04T00:01:07.691469Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-05T00:01:18.815533Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-05T20:45:37.074026Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-06T00:01:06.402639Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-07T00:01:14.427099Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-08T00:00:58.239773Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-08T20:45:18.359175Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-09T00:01:11.036777Z"
          }
        ]
      }
    },
    {
      "id": 1376,
      "site_key": "club48sa",
      "source_type": "queue_state",
      "subject_key": "recent_queue",
      "payload_json": {
        "recent_rows": []
      },
      "recorded_at": "2026-06-10 00:01:13.782434+00:00",
      "payload": {
        "recent_rows": []
      }
    },
    {
      "id": 1375,
      "site_key": "club48sa",
      "source_type": "gsc_snapshot",
      "subject_key": "pages_28d",
      "payload_json": {
        "saved_at": "2026-05-22T10:09:06.487422Z",
        "top_pages": [
          {
            "ctr": 0.0,
            "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
            "clicks": 0,
            "position": 8.424242424242424,
            "top_query": "rendement club deal immobilier",
            "impressions": 33
          },
          {
            "ctr": 0.25,
            "page": "https://www.club48sa.ch/",
            "clicks": 7,
            "position": 4.214285714285714,
            "top_query": "club 48 sa",
            "impressions": 28
          },
          {
            "ctr": 0.047619047619047616,
            "page": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
            "clicks": 1,
            "position": 10.19047619047619,
            "top_query": "reconnaissance de dette suisse",
            "impressions": 21
          },
          {
            "ctr": 0.0,
            "page": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
            "clicks": 0,
            "position": 8.933333333333334,
            "top_query": "europe immobilier",
            "impressions": 15
          },
          {
            "ctr": 0.07692307692307693,
            "page": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
            "clicks": 1,
            "position": 6.0,
            "top_query": "rendement 15",
            "impressions": 13
          }
        ],
        "top_queries": [
          {
            "ctr": 0.18181818181818182,
            "query": "club 48 sa",
            "clicks": 2,
            "position": 4.181818181818182,
            "impressions": 11
          },
          {
            "ctr": 0.0,
            "query": "rendement 15",
            "clicks": 0,
            "position": 8.2,
            "impressions": 5
          },
          {
            "ctr": 0.5,
            "query": "club 48",
            "clicks": 2,
            "position": 5.0,
            "impressions": 4
          },
          {
            "ctr": 0.0,
            "query": "rendement club deal immobilier",
            "clicks": 0,
            "position": 8.25,
            "impressions": 4
          },
          {
            "ctr": 0.0,
            "query": "club48",
            "clicks": 0,
            "position": 8.0,
            "impressions": 3
          },
          {
            "ctr": 0.0,
            "query": "reconnaissance de dette suisse",
            "clicks": 0,
            "position": 12.333333333333334,
            "impressions": 3
          },
          {
            "ctr": 0.0,
            "query": "\"crowdfunding immobilier\" -site:reddit.com -site:twitter.com -site:x.com -site:wykop.pl -site:tripadvisor.com -site:youtube.com -site:yelp.com -site:booking.com -site:facebook.com -site:instagram.com -site:tiktok.com",
            "clicks": 0,
            "position": 3.0,
            "impressions": 1
          },
          {
            "ctr": 0.0,
            "query": "achat appartement off-market genève",
            "clicks": 0,
            "position": 52.0,
            "impressions": 1
          },
          {
            "ctr": 0.0,
            "query": "club deal",
            "clicks": 0,
            "position": 55.0,
            "impressions": 1
          },
          {
            "ctr": 0.0,
            "query": "club deal immo",
            "clicks": 0,
            "position": 8.0,
            "impressions": 1
          }
        ]
      },
      "recorded_at": "2026-06-10 00:01:13.769152+00:00",
      "payload": {
        "saved_at": "2026-05-22T10:09:06.487422Z",
        "top_pages": [
          {
            "ctr": 0.0,
            "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
            "clicks": 0,
            "position": 8.424242424242424,
            "top_query": "rendement club deal immobilier",
            "impressions": 33
          },
          {
            "ctr": 0.25,
            "page": "https://www.club48sa.ch/",
            "clicks": 7,
            "position": 4.214285714285714,
            "top_query": "club 48 sa",
            "impressions": 28
          },
          {
            "ctr": 0.047619047619047616,
            "page": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
            "clicks": 1,
            "position": 10.19047619047619,
            "top_query": "reconnaissance de dette suisse",
            "impressions": 21
          },
          {
            "ctr": 0.0,
            "page": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
            "clicks": 0,
            "position": 8.933333333333334,
            "top_query": "europe immobilier",
            "impressions": 15
          },
          {
            "ctr": 0.07692307692307693,
            "page": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
            "clicks": 1,
            "position": 6.0,
            "top_query": "rendement 15",
            "impressions": 13
          }
        ],
        "top_queries": [
          {
            "ctr": 0.18181818181818182,
            "query": "club 48 sa",
            "clicks": 2,
            "position": 4.181818181818182,
            "impressions": 11
          },
          {
            "ctr": 0.0,
            "query": "rendement 15",
            "clicks": 0,
            "position": 8.2,
            "impressions": 5
          },
          {
            "ctr": 0.5,
            "query": "club 48",
            "clicks": 2,
            "position": 5.0,
            "impressions": 4
          },
          {
            "ctr": 0.0,
            "query": "rendement club deal immobilier",
            "clicks": 0,
            "position": 8.25,
            "impressions": 4
          },
          {
            "ctr": 0.0,
            "query": "club48",
            "clicks": 0,
            "position": 8.0,
            "impressions": 3
          },
          {
            "ctr": 0.0,
            "query": "reconnaissance de dette suisse",
            "clicks": 0,
            "position": 12.333333333333334,
            "impressions": 3
          },
          {
            "ctr": 0.0,
            "query": "\"crowdfunding immobilier\" -site:reddit.com -site:twitter.com -site:x.com -site:wykop.pl -site:tripadvisor.com -site:youtube.com -site:yelp.com -site:booking.com -site:facebook.com -site:instagram.com -site:tiktok.com",
            "clicks": 0,
            "position": 3.0,
            "impressions": 1
          },
          {
            "ctr": 0.0,
            "query": "achat appartement off-market genève",
            "clicks": 0,
            "position": 52.0,
            "impressions": 1
          },
          {
            "ctr": 0.0,
            "query": "club deal",
            "clicks": 0,
            "position": 55.0,
            "impressions": 1
          },
          {
            "ctr": 0.0,
            "query": "club deal immo",
            "clicks": 0,
            "position": 8.0,
            "impressions": 1
          }
        ]
      }
    },
    {
      "id": 1367,
      "site_key": "club48sa",
      "source_type": "learningseo_site_feedback",
      "subject_key": "club48sa",
      "payload_json": {
        "site_key": "club48sa",
        "project_name": "Club 48 SA",
        "applied_topics": [
          "fundamentals",
          "execution",
          "technical",
          "content",
          "links",
          "automation"
        ],
        "contradictions": [],
        "sop_candidates": [
          "Before new draft creation, verify that the target intent is not already partially served by an existing URL.",
          "Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.",
          "Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.",
          "Automated actions must emit events, measurements, and postmortems by default."
        ],
        "lessons_created": 6
      },
      "recorded_at": "2026-06-10 00:00:13.233687+00:00",
      "payload": {
        "site_key": "club48sa",
        "project_name": "Club 48 SA",
        "applied_topics": [
          "fundamentals",
          "execution",
          "technical",
          "content",
          "links",
          "automation"
        ],
        "contradictions": [],
        "sop_candidates": [
          "Before new draft creation, verify that the target intent is not already partially served by an existing URL.",
          "Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.",
          "Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.",
          "Automated actions must emit events, measurements, and postmortems by default."
        ],
        "lessons_created": 6
      }
    },
    {
      "id": 1357,
      "site_key": "club48sa",
      "source_type": "technical_remediation",
      "subject_key": "club48sa",
      "payload_json": {
        "ok": true,
        "errors": [],
        "actions": [
          {
            "type": "optimize_lcp",
            "value": 3946.5,
            "metric": "lcp_ms",
            "target": "https://www.club48sa.ch",
            "priority": "high",
            "threshold": 2500,
            "recommended_changes": [
              "Identifier l'élément LCP mobile sur la home via PageSpeed/Lighthouse.",
              "Optimiser l'image ou le bloc hero responsable: format WebP/AVIF, dimensions adaptées, compression.",
              "Précharger ou prioriser uniquement l'asset LCP critique et différer les médias non critiques.",
              "Réduire CSS/JS bloquant au-dessus de la ligne de flottaison."
            ]
          }
        ],
        "changed": false,
        "attempted": true,
        "deployment": {
          "ok": true,
          "detail": "no_change",
          "checked": false
        }
      },
      "recorded_at": "2026-06-09 00:04:55.370845+00:00",
      "payload": {
        "ok": true,
        "errors": [],
        "actions": [
          {
            "type": "optimize_lcp",
            "value": 3946.5,
            "metric": "lcp_ms",
            "target": "https://www.club48sa.ch",
            "priority": "high",
            "threshold": 2500,
            "recommended_changes": [
              "Identifier l'élément LCP mobile sur la home via PageSpeed/Lighthouse.",
              "Optimiser l'image ou le bloc hero responsable: format WebP/AVIF, dimensions adaptées, compression.",
              "Précharger ou prioriser uniquement l'asset LCP critique et différer les médias non critiques.",
              "Réduire CSS/JS bloquant au-dessus de la ligne de flottaison."
            ]
          }
        ],
        "changed": false,
        "attempted": true,
        "deployment": {
          "ok": true,
          "detail": "no_change",
          "checked": false
        }
      }
    },
    {
      "id": 1356,
      "site_key": "club48sa",
      "source_type": "technical_audit",
      "subject_key": "club48sa",
      "payload_json": {
        "gsc": {
          "ok": true,
          "checked": true,
          "message": "Connexion GSC OK",
          "payload": {
            "sample_rows": 1,
            "properties_count": 5,
            "resolved_property": "https://www.club48sa.ch"
          },
          "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
          "sitemap_submission_ready": true
        },
        "pages": [
          {
            "ok": true,
            "url": "https://www.club48sa.ch",
            "error": "",
            "noindex": false,
            "canonical": "https://www.club48sa.ch",
            "final_url": "https://www.club48sa.ch/",
            "indexable": true,
            "redirected": false,
            "robots_meta": "",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          }
        ],
        "robots": {
          "ok": true,
          "url": "https://www.club48sa.ch/robots.txt",
          "error": "",
          "sitemaps": [
            "https://www.club48sa.ch/sitemap.xml"
          ],
          "blocks_all": false,
          "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
          "status_code": 200
        },
        "status": "ok",
        "checked": true,
        "sitemap": {
          "ok": true,
          "checked": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          ],
          "selected": {
            "ok": true,
            "url": "https://www.club48sa.ch/sitemap.xml",
            "error": "",
            "root_tag": "urlset",
            "url_count": 18,
            "valid_xml": true,
            "status_code": 200,
            "child_checked": [],
            "child_sitemaps": [],
            "listed_sample_urls": [
              "https://www.club48sa.ch/",
              "https://www.club48sa.ch/blog",
              "https://www.club48sa.ch/contact",
              "https://www.club48sa.ch/mentions-legales",
              "https://www.club48sa.ch/blog/off-market-suisse-geneve",
              "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
              "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
              "https://www.club48sa.ch/blog/acces-investisseur-off-market",
              "https://www.club48sa.ch/blog/opportunite-investissement-prive",
              "https://www.club48sa.ch/blog/club-investisseurs",
              "https://www.club48sa.ch/blog/investissement-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
              "https://www.club48sa.ch/blog/club-investissement-prive",
              "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier"
            ]
          }
        },
        "site_key": "club48sa",
        "warnings": [
          "LCP mobile élevé (3946 ms)"
        ],
        "pagespeed": {
          "ok": true,
          "cls": 0.0,
          "inp_ms": 73.0,
          "lcp_ms": 3946.5023263154208,
          "mobile": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 73.0,
            "lcp_ms": 3946.5023263154208,
            "source": "pagespeed_insights",
            "strategy": "mobile",
            "performance_score": 82.0
          },
          "source": "pagespeed_insights",
          "desktop": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 64.00000000000006,
            "lcp_ms": 431.2967905282453,
            "source": "pagespeed_insights",
            "strategy": "desktop",
            "performance_score": 100.0
          },
          "strategy": "mobile",
          "performance_score": 82.0
        },
        "gsc_live_urls": {
          "urls": [
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "error": "",
              "clicks": 0,
              "position": 8.424242424242424,
              "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "indexable": true,
              "top_query": "rendement club deal immobilier",
              "redirected": false,
              "impressions": 33,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.25,
              "url": "https://www.club48sa.ch/",
              "error": "",
              "clicks": 7,
              "position": 4.214285714285714,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 28,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.047619047619047616,
              "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "error": "",
              "clicks": 1,
              "position": 10.19047619047619,
              "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "indexable": true,
              "top_query": "reconnaissance de dette suisse",
              "redirected": false,
              "impressions": 21,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "error": "",
              "clicks": 0,
              "position": 8.933333333333334,
              "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "indexable": true,
              "top_query": "europe immobilier",
              "redirected": false,
              "impressions": 15,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.07692307692307693,
              "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "error": "",
              "clicks": 1,
              "position": 6.0,
              "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "indexable": true,
              "top_query": "rendement 15",
              "redirected": false,
              "impressions": 13,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "error": "",
              "clicks": 0,
              "position": 15.166666666666666,
              "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "indexable": true,
              "top_query": "achat appartement off-market genève",
              "redirected": false,
              "impressions": 6,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog",
              "error": "",
              "clicks": 0,
              "position": 7.0,
              "canonical": "https://www.club48sa.ch/blog",
              "final_url": "https://www.club48sa.ch/blog",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 2,
              "status_code": 200
            }
          ],
          "source": "gsc_pages_28d",
          "checked": true,
          "broken_urls": [],
          "broken_count": 0,
          "checked_count": 7,
          "redirected_urls": [],
          "redirected_count": 0,
          "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
        },
        "blocking_issues": [],
        "safe_to_optimize": true,
        "sitemap_coverage": {
          "checked": true,
          "missing_urls": [],
          "expected_urls": [
            "https://www.club48sa.ch"
          ],
          "listed_url_sample_size": 18
        },
        "deployment_health": {
          "checked": false
        },
        "technical_health_score": 90
      },
      "recorded_at": "2026-06-09 00:04:54.654199+00:00",
      "payload": {
        "gsc": {
          "ok": true,
          "checked": true,
          "message": "Connexion GSC OK",
          "payload": {
            "sample_rows": 1,
            "properties_count": 5,
            "resolved_property": "https://www.club48sa.ch"
          },
          "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
          "sitemap_submission_ready": true
        },
        "pages": [
          {
            "ok": true,
            "url": "https://www.club48sa.ch",
            "error": "",
            "noindex": false,
            "canonical": "https://www.club48sa.ch",
            "final_url": "https://www.club48sa.ch/",
            "indexable": true,
            "redirected": false,
            "robots_meta": "",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          }
        ],
        "robots": {
          "ok": true,
          "url": "https://www.club48sa.ch/robots.txt",
          "error": "",
          "sitemaps": [
            "https://www.club48sa.ch/sitemap.xml"
          ],
          "blocks_all": false,
          "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
          "status_code": 200
        },
        "status": "ok",
        "checked": true,
        "sitemap": {
          "ok": true,
          "checked": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          ],
          "selected": {
            "ok": true,
            "url": "https://www.club48sa.ch/sitemap.xml",
            "error": "",
            "root_tag": "urlset",
            "url_count": 18,
            "valid_xml": true,
            "status_code": 200,
            "child_checked": [],
            "child_sitemaps": [],
            "listed_sample_urls": [
              "https://www.club48sa.ch/",
              "https://www.club48sa.ch/blog",
              "https://www.club48sa.ch/contact",
              "https://www.club48sa.ch/mentions-legales",
              "https://www.club48sa.ch/blog/off-market-suisse-geneve",
              "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
              "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
              "https://www.club48sa.ch/blog/acces-investisseur-off-market",
              "https://www.club48sa.ch/blog/opportunite-investissement-prive",
              "https://www.club48sa.ch/blog/club-investisseurs",
              "https://www.club48sa.ch/blog/investissement-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
              "https://www.club48sa.ch/blog/club-investissement-prive",
              "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier"
            ]
          }
        },
        "site_key": "club48sa",
        "warnings": [
          "LCP mobile élevé (3946 ms)"
        ],
        "pagespeed": {
          "ok": true,
          "cls": 0.0,
          "inp_ms": 73.0,
          "lcp_ms": 3946.5023263154208,
          "mobile": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 73.0,
            "lcp_ms": 3946.5023263154208,
            "source": "pagespeed_insights",
            "strategy": "mobile",
            "performance_score": 82.0
          },
          "source": "pagespeed_insights",
          "desktop": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 64.00000000000006,
            "lcp_ms": 431.2967905282453,
            "source": "pagespeed_insights",
            "strategy": "desktop",
            "performance_score": 100.0
          },
          "strategy": "mobile",
          "performance_score": 82.0
        },
        "gsc_live_urls": {
          "urls": [
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "error": "",
              "clicks": 0,
              "position": 8.424242424242424,
              "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "indexable": true,
              "top_query": "rendement club deal immobilier",
              "redirected": false,
              "impressions": 33,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.25,
              "url": "https://www.club48sa.ch/",
              "error": "",
              "clicks": 7,
              "position": 4.214285714285714,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 28,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.047619047619047616,
              "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "error": "",
              "clicks": 1,
              "position": 10.19047619047619,
              "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "indexable": true,
              "top_query": "reconnaissance de dette suisse",
              "redirected": false,
              "impressions": 21,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "error": "",
              "clicks": 0,
              "position": 8.933333333333334,
              "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "indexable": true,
              "top_query": "europe immobilier",
              "redirected": false,
              "impressions": 15,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.07692307692307693,
              "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "error": "",
              "clicks": 1,
              "position": 6.0,
              "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "indexable": true,
              "top_query": "rendement 15",
              "redirected": false,
              "impressions": 13,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "error": "",
              "clicks": 0,
              "position": 15.166666666666666,
              "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "indexable": true,
              "top_query": "achat appartement off-market genève",
              "redirected": false,
              "impressions": 6,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog",
              "error": "",
              "clicks": 0,
              "position": 7.0,
              "canonical": "https://www.club48sa.ch/blog",
              "final_url": "https://www.club48sa.ch/blog",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 2,
              "status_code": 200
            }
          ],
          "source": "gsc_pages_28d",
          "checked": true,
          "broken_urls": [],
          "broken_count": 0,
          "checked_count": 7,
          "redirected_urls": [],
          "redirected_count": 0,
          "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
        },
        "blocking_issues": [],
        "safe_to_optimize": true,
        "sitemap_coverage": {
          "checked": true,
          "missing_urls": [],
          "expected_urls": [
            "https://www.club48sa.ch"
          ],
          "listed_url_sample_size": 18
        },
        "deployment_health": {
          "checked": false
        },
        "technical_health_score": 90
      }
    },
    {
      "id": 1350,
      "site_key": "club48sa",
      "source_type": "workflow_state",
      "subject_key": "recent_events",
      "payload_json": {
        "events": [
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-02T00:01:14.558304Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-02T20:45:27.000129Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-03T00:01:08.807302Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-04T00:01:07.691469Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-05T00:01:18.815533Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-05T20:45:37.074026Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-06T00:01:06.402639Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-07T00:01:14.427099Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-08T00:00:58.239773Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-08T20:45:18.359175Z"
          }
        ]
      },
      "recorded_at": "2026-06-09 00:01:08.697806+00:00",
      "payload": {
        "events": [
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-02T00:01:14.558304Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-02T20:45:27.000129Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-03T00:01:08.807302Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-04T00:01:07.691469Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-05T00:01:18.815533Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-05T20:45:37.074026Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-06T00:01:06.402639Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-07T00:01:14.427099Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-08T00:00:58.239773Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-08T20:45:18.359175Z"
          }
        ]
      }
    }
  ]
}