Skip to content

Ligase 2.4.8 — multi-agent production audit + 14 critical fixes

Choose a tag to compare

@MarcinZmuda MarcinZmuda released this 01 Jun 09:29
· 45 commits to main since this release

Pełny audyt 4 agentów (settings / type classes / AJAX security / core pipeline) — 35+ findings, 14 najważniejszych naprawionych.

Pełne raporty w docs/audit-2025-06-01-*.md na repo.

Top fixes

Score-killer typos (DLATEGO score 0/100 wszędzie!)

Ligase_Score czytał 4 nieistniejące klucze opcji:

  • organization_name (powinno być org_name)
  • organization_logo (org_logo)
  • organization_knows_about (knows_about)
  • organization_same_as (agreguj z social_*)

Plus 3 ghost-key reads (use_graph, enable_breadcrumb, enable_search_action) — te options nie istnieją, features są always-on. Naprawione: hardkod true.

Score brakowało 30+ pkt na każdej stronie od v1. Po 2.4.8 makumi.eu zobaczy realne score 60-80 zamiast 0.

Output correctness (Google może odrzucić)

  • WebSite SearchActionhome_url() enkodowało {search_term_string}%7B...%7D. Sitelinks Search Box zepsuty na każdej stronie. Naprawione: budowa URLa przez konkatenację.
  • Organization employee[]has_published_posts => true deprecated od WP 6.4. Naprawione + cap 20 entries (zamiast 500-entry payload bloat).
  • JobPosting addressCountrystrtoupper(substr('Poland', 0, 2)) produkowało 'PO'. Naprawione: walidacja ISO 3166-1 alpha-2.
  • VideoObject — emitował puste stringi thumbnailUrl/embedUrl/description gdy meta brak. Google flag = invalid + spam signal. Teraz gate'uje required + drop node jeśli brak.
  • WC unknown stock — defaultował do InStock dla 'preorder'/'discontinued'. Manual-action risk. Teraz null = pole pominięte.

Security

  • Settings export leakner_api_key + gsc_service_account_json szły w plaintext w pobranym JSONie. Każdy "backup" wyciekał klucze OpenAI/Anthropic. Naprawione: redakcja __REDACTED__.

Fatal guards

  • Generator with_post_globals — fatal gdy $wp_query nie jest WP_Query (AMP / REST / page builders). Naprawione: instanceof guard.
  • Duplicate case 'blog_listing': w switch — unreachable, linter rejected. Naprawione.
  • Suppressor static state leakprivate static bool $is_active mógł przeciekać między requestami w FPM workers. Naprawione: czytanie opcji bezpośrednio.

Settings persistence

  • default_schema_type dropdown — ghost field (nie zapisywał). Naprawione.
  • health_report_enabled checkbox — turn-OFF nie zapisywał. Naprawione.

Author @id integrity

  • author_ref_id() zwraca #org zamiast #author-0 dla orphaned posts.
  • 7 typów schema (Review, QAPage, ClaimReview, ItemList, Generator profile_page + about/mainEntity) używa teraz scentralizowanego author_ref_id().

Polish number formatting

  • "1 299,90 zł" cast'owało do 1.0 (1300× cena!). Teraz: 1299.9. Strips currency/spaces, normalizuje ostatnią , lub . jako separator dziesiętny.

Compatibility

Drop-in z 2.4.7. Bez migracji.

SPRAWDŹ SCORE PO UPDATE — powinno skoczyć z 0 do 60-80 dla większości postów (zwłaszcza tych z wypełnioną Organization name + logo + knows_about w Ustawieniach).