{
  "$schema": "https://dcsf.net/changelog.schema.json",
  "schema_version": "dcsf-changelog-v1",
  "project": {
    "name": "DCSF",
    "alternateName": "DataHouse CSF",
    "maintainer": "DataHouse / eTop sp. z o.o.",
    "url": "https://dcsf.net/",
    "license": "GPL-3.0",
    "price": {
      "amount": 0,
      "currency": "USD"
    },
    "contact": "dat@etop.pl"
  },
  "updated": "2026-10-08",
  "latest_release": {
    "public_version": "DH20.29",
    "technical_version": "15.10.32",
    "published": "2026-10-08T13:33:03Z",
    "artifact_sha256": "ba8e5a738dec83bf4ef3abd8b59add85e88f495555f5dd8f116d837b70f86268",
    "metadata_url": "https://dcsf.net/release.json"
  },
  "release_qualification": {
    "public_version": "DH20.29",
    "technical_version": "15.10.32",
    "linux_test_files": {
      "passed": 77,
      "total": 77
    },
    "canary": {
      "target": "autossltest2",
      "status": "upgrade_passed",
      "csf_active": true,
      "lfd_active": true,
      "configuration_preserved": true
    },
    "production": {
      "status": "dry_run_only",
      "upgrade_performed": false
    },
    "supersedes": {
      "public_version": "DH20.28",
      "technical_version": "15.10.31",
      "reason": "Shell error in the reseller repair path found on canary."
    },
    "provenance": "Maintainer qualification report for DH20.29. This documentation task verified signed artifacts and website behavior; it did not repeat the full Linux suite or install DCSF on a production firewall."
  },
  "history_coverage": {
    "complete": false,
    "public_versions": [
      "DH20.29",
      "DH20.28",
      "DH20.27",
      "DH20.26",
      "DH20.25",
      "DH20.24",
      "DH20.23",
      "DH20.22",
      "DH20.21",
      "DH20.20",
      "DH20.19",
      "DH20.18"
    ],
    "note": "Structured history currently covers these 12 verified releases, not every historical DCSF release."
  },
  "releases": [
    {
      "version": "DH20.29",
      "technical_version": "15.10.32",
      "published": "2026-10-08T13:33:03Z",
      "channel": "stable",
      "latest": true,
      "status": "current",
      "changes": [
        {
          "title": {
            "en": "Validated WHM session context",
            "pl": "Zwalidowany kontekst sesji WHM"
          },
          "description": {
            "en": "The WHM CGI preserves the validated cp_security_token required by the native cPanel session. Existing request validation, taint mode and same-origin response boundaries remain in place.",
            "pl": "CGI WHM zachowuje zwalidowany cp_security_token wymagany przez natywną sesję cPanel. Pozostają dotychczasowe kontrole żądań, taint mode i granice odpowiedzi same-origin."
          }
        },
        {
          "title": {
            "en": "Bounded LFD process-state compaction",
            "pl": "Ograniczone kompaktowanie stanu LFD"
          },
          "description": {
            "en": "LFD compacts csf.temppids within its existing size and record limits, using LF_FLUSH to age process records. Accumulated temporary state no longer prevents normal tracking from recording new process identities.",
            "pl": "LFD kompaktuje csf.temppids w ramach istniejących limitów rozmiaru i liczby rekordów, używając LF_FLUSH do usuwania przeterminowanego stanu procesów. Nagromadzony stan tymczasowy nie blokuje zapisu nowych tożsamości procesów."
          }
        },
        {
          "title": {
            "en": "Permissions limited to public cPanel META modules",
            "pl": "Uprawnienia tylko publicznych modułów META cPanel"
          },
          "description": {
            "en": "The compatibility repair sets appropriate permissions only for public cPanel META modules. It does not broaden access across private configuration or the complete cPanel tree.",
            "pl": "Poprawka zgodności ustawia właściwe prawa wyłącznie publicznych modułów META cPanel. Nie rozszerza dostępu do prywatnej konfiguracji ani całego drzewa cPanel."
          }
        },
        {
          "title": {
            "en": "Reliable reseller-file repair",
            "pl": "Poprawiona naprawa pliku resellerów"
          },
          "description": {
            "en": "DH20.29 safely repairs a missing final LF in csf.resellers and corrects the shell error found on the canary. DH20.28 / 15.10.31 is superseded because its reseller repair path was faulty.",
            "pl": "DH20.29 bezpiecznie uzupełnia brakujący końcowy LF w csf.resellers i poprawia błąd powłoki wykryty na canary. DH20.28 / 15.10.31 zostało zastąpione z powodu błędu tej ścieżki naprawy."
          }
        },
        {
          "title": {
            "en": "Equivalent nftables policy comparison",
            "pl": "Porównanie równoważnych polityk nftables"
          },
          "description": {
            "en": "The comparison accepts a different listing order for independent chains while preserving rule order inside each chain and the remaining policy checks. Reordering independent chains alone no longer causes a false policy mismatch.",
            "pl": "Porównanie uwzględnia inną kolejność prezentacji niezależnych łańcuchów, zachowując kolejność reguł w każdym łańcuchu i pozostałe kontrole polityki. Samo przestawienie niezależnych łańcuchów nie powoduje już fałszywej rozbieżności."
          }
        },
        {
          "title": {
            "en": "77/77 Linux tests and a completed canary",
            "pl": "77/77 testów Linux i zakończony canary"
          },
          "description": {
            "en": "Maintainer qualification passed all 77 Linux test files. The autossltest2 canary update completed with CSF/LFD active and configuration preserved. The separately checked production host has passed dry-run only; this is not a production-upgrade claim.",
            "pl": "Kwalifikacja projektu zaliczyła wszystkie 77 plików testowych Linux. Aktualizacja canary autossltest2 zakończyła się z aktywnymi CSF/LFD i zachowaną konfiguracją. Oddzielnie sprawdzony host produkcyjny przeszedł tylko dry-run; nie oznacza to wykonanej aktualizacji produkcji."
          }
        }
      ],
      "release_notes": "https://dcsf.net/updates/#dh20.29",
      "source_commit": "784481c2223e709ec9ab0a3e9bcc8cc41071293f",
      "artifact": {
        "url": "https://update.dcsf.net/releases/15.10.32/dcsf-15.10.32.tar.gz",
        "sha256": "ba8e5a738dec83bf4ef3abd8b59add85e88f495555f5dd8f116d837b70f86268",
        "size": 5869701
      },
      "manifest": {
        "url": "https://update.dcsf.net/releases/15.10.32/manifest.txt",
        "signature_url": "https://update.dcsf.net/releases/15.10.32/manifest.txt.sig",
        "sha256": "60c115a5d63f91725c40c66ce0647436a500cc27930edbf8614d22b4463c003f"
      },
      "metadata_url": "https://update.dcsf.net/releases/15.10.32/release.json"
    },
    {
      "version": "DH20.28",
      "technical_version": "15.10.31",
      "published": "2026-10-08T13:17:05Z",
      "channel": "stable",
      "latest": false,
      "status": "superseded",
      "superseded_by": "DH20.29",
      "superseded_reason": "Shell error in the csf.resellers missing-LF repair path found on canary.",
      "changes": [
        {
          "title": {
            "en": "Validated WHM session context",
            "pl": "Zwalidowany kontekst sesji WHM"
          },
          "description": {
            "en": "The WHM CGI preserves the validated cp_security_token required by the native cPanel session. Existing request validation, taint mode and same-origin response boundaries remain in place.",
            "pl": "CGI WHM zachowuje zwalidowany cp_security_token wymagany przez natywną sesję cPanel. Pozostają dotychczasowe kontrole żądań, taint mode i granice odpowiedzi same-origin."
          }
        },
        {
          "title": {
            "en": "Bounded LFD process-state compaction",
            "pl": "Ograniczone kompaktowanie stanu LFD"
          },
          "description": {
            "en": "LFD compacts csf.temppids within its existing size and record limits, using LF_FLUSH to age process records. Accumulated temporary state no longer prevents normal tracking from recording new process identities.",
            "pl": "LFD kompaktuje csf.temppids w ramach istniejących limitów rozmiaru i liczby rekordów, używając LF_FLUSH do usuwania przeterminowanego stanu procesów. Nagromadzony stan tymczasowy nie blokuje zapisu nowych tożsamości procesów."
          }
        },
        {
          "title": {
            "en": "Permissions limited to public cPanel META modules",
            "pl": "Uprawnienia tylko publicznych modułów META cPanel"
          },
          "description": {
            "en": "The compatibility repair sets appropriate permissions only for public cPanel META modules. It does not broaden access across private configuration or the complete cPanel tree.",
            "pl": "Poprawka zgodności ustawia właściwe prawa wyłącznie publicznych modułów META cPanel. Nie rozszerza dostępu do prywatnej konfiguracji ani całego drzewa cPanel."
          }
        },
        {
          "title": {
            "en": "Superseded reseller repair",
            "pl": "Zastąpiona naprawa resellerów"
          },
          "description": {
            "en": "DH20.28 introduced a missing-LF repair for csf.resellers, but canary testing found a shell error in that path. Use DH20.29 / 15.10.32, which replaces this release.",
            "pl": "DH20.28 wprowadziło uzupełnianie LF w csf.resellers, ale test canary ujawnił błąd powłoki w tej ścieżce. Należy użyć DH20.29 / 15.10.32, które zastępuje to wydanie."
          }
        }
      ],
      "release_notes": "https://dcsf.net/updates/#dh20.28",
      "source_commit": "bb0d6c3f6823fc6805ce7598f5d0831be9666404",
      "artifact": {
        "url": "https://update.dcsf.net/releases/15.10.31/dcsf-15.10.31.tar.gz",
        "sha256": "816d768a821feb67515007b89dd716e1b337ee502a5879611ae36c8ed5f11b5b",
        "size": 5869721
      },
      "manifest": {
        "url": "https://update.dcsf.net/releases/15.10.31/manifest.txt",
        "signature_url": "https://update.dcsf.net/releases/15.10.31/manifest.txt.sig",
        "sha256": "89d510c3cf0b343426192b020800659c563bdb39eb1a161bf0b22e8a9ef6b47e"
      },
      "metadata_url": "https://update.dcsf.net/releases/15.10.31/release.json"
    },
    {
      "version": "DH20.27",
      "technical_version": "15.10.30",
      "published": "2026-09-29T12:49:14Z",
      "channel": "stable",
      "latest": false,
      "status": "historical",
      "changes": [
        {
          "title": {
            "en": "Native WHM Jupiter interface restored",
            "pl": "Przywrócone natywne osadzenie w WHM Jupiter"
          },
          "description": {
            "en": "DH20.27 fixed the cPanel regression where a standalone DCSF HTML document replaced the WHM page. DCSF renders through csf.tmpl and the native master_templates/master.tmpl, retaining panel navigation and responsive layout.",
            "pl": "DH20.27 naprawiło regresję cPanel, w której samodzielny dokument HTML DCSF zastępował stronę WHM. Interfejs jest renderowany przez csf.tmpl i natywny master_templates/master.tmpl, z zachowaniem nawigacji panelu i responsywnego układu."
          }
        },
        {
          "title": {
            "en": "Taint-mode CGI and bounded template helper",
            "pl": "CGI w taint mode i ograniczony helper szablonu"
          },
          "description": {
            "en": "The main CGI retains perl -T, request validation and same-origin responses. A fixed root:root 0700 helper uses cPanel private Perl and Cpanel::Template::process_template through list-form IPC::Open2. It clears interpreter-control environment variables, fixes PATH, accepts no path or template arguments and limits stdin to 32 MiB.",
            "pl": "Główny CGI zachowuje perl -T, walidację żądań i odpowiedzi same-origin. Stały helper root:root 0700 używa prywatnego Perla cPanel i Cpanel::Template::process_template przez listową postać IPC::Open2. Czyści zmienne sterujące interpreterem, ustala PATH, nie przyjmuje argumentów ścieżki ani szablonu i ogranicza stdin do 32 MiB."
          }
        },
        {
          "title": {
            "en": "Verified release without firewall-policy changes",
            "pl": "Zweryfikowane wydanie bez zmiany polityki zapory"
          },
          "description": {
            "en": "Release qualification passed 1,533 assertions in 77 Linux test files. Canary and production upgrades preserved selected operator configuration and normalized IPv4/IPv6 policies; CSF/LFD remained active and enabled. Authenticated WHM and Playwright checks covered desktop 1440 and mobile 390 pixel viewports. WebGuard remains disabled by default.",
            "pl": "Kwalifikacja przeszła 1533 asercje w 77 plikach testowych Linux. Aktualizacje testowa i produkcyjna zachowały sprawdzane pliki konfiguracji operatora oraz znormalizowane polityki IPv4/IPv6; CSF/LFD pozostały aktywne i włączone. Uwierzytelnione WHM i Playwright sprawdzono przy szerokości 1440 na desktopie i 390 na mobile. WebGuard pozostaje domyślnie wyłączony."
          }
        }
      ],
      "release_notes": "https://dcsf.net/updates/#dh20.27",
      "source_commit": "ad5da3c1c3cc290430396a2983d280face5d7d2e",
      "artifact": {
        "url": "https://update.dcsf.net/releases/15.10.30/dcsf-15.10.30.tar.gz",
        "sha256": "9639fe85ae0a40b0b947135dcdab294259517dd885ee2dd382e81cf7fb93c6a4",
        "size": 5868319
      },
      "manifest": {
        "url": "https://update.dcsf.net/releases/15.10.30/manifest.txt",
        "signature_url": "https://update.dcsf.net/releases/15.10.30/manifest.txt.sig",
        "sha256": "919899edb35b0a603aa7b6c900244ce5f02232dde9256ea167509d9ede457f4d"
      },
      "metadata_url": "https://update.dcsf.net/releases/15.10.30/release.json"
    },
    {
      "version": "DH20.26",
      "technical_version": "15.10.29",
      "published": "2026-09-29T11:23:47Z",
      "channel": "stable",
      "latest": false,
      "status": "historical",
      "changes": [
        {
          "title": {
            "en": "nginx is the client-address authority",
            "pl": "nginx rozstrzyga o adresie klienta"
          },
          "description": {
            "en": "For the verified cPanel EA-Nginx topology, SERVER=\"auto\" selects nginx on public ports 80/443. Its structured edge access feed supplies the real client address. WebGuard does not trust arbitrary X-Forwarded-For values or infer clients from an ordinary Apache backend log.",
            "pl": "W zweryfikowanej topologii cPanel EA-Nginx ustawienie SERVER=\"auto\" wybiera nginx na publicznych portach 80/443. Jego ustrukturyzowany log wejściowy dostarcza rzeczywistego IP klienta. WebGuard nie ufa dowolnym wartościom X-Forwarded-For ani nie wyznacza klientów ze zwykłego logu backendu Apache."
          }
        },
        {
          "title": {
            "en": "Apache reports load, not a client to block",
            "pl": "Apache wskazuje obciążenie, nie klienta do blokady"
          },
          "description": {
            "en": "Apache listens on private ports 81/444. Its server-status and optional backend-role feed contribute overload evidence only. The local nginx peer 127.0.0.1 cannot become a blocking candidate. Unsupported or unverified proxy layouts are not assumed to have the same trust boundary.",
            "pl": "Apache nasłuchuje na prywatnych portach 81/444. Jego server-status i opcjonalny log o roli backend dostarczają tylko sygnału przeciążenia. Lokalny adres nginx 127.0.0.1 nie staje się kandydatem do blokady. Nie zakładamy takiej samej granicy zaufania dla nieobsługiwanych lub niezweryfikowanych układów proxy."
          }
        },
        {
          "title": {
            "en": "One trusted library tree during diagnostics",
            "pl": "Jedno zaufane drzewo bibliotek podczas diagnostyki"
          },
          "description": {
            "en": "A diagnostic run of an extracted signed package beside older cPanel CSF keeps the selected package libraries first. An exact legacy prepend of /usr/local/csf/lib reasserts the trusted source root and leaves installed libraries as fallback only. Normal installed execution is unchanged.",
            "pl": "Diagnostyczne uruchomienie rozpakowanego, podpisanego pakietu obok starszego cPanel CSF zachowuje pierwszeństwo jego własnych bibliotek. Próba dodania /usr/local/csf/lib przez stary moduł ponownie ustawia wybrane źródło na początku, a bibliotekę instalacji pozostawia tylko jako fallback. Normalne uruchomienie zainstalowanej wersji nie zmienia się."
          }
        }
      ],
      "release_notes": "https://dcsf.net/updates/#dh20.26",
      "source_commit": "e24495033c5d366f34df2fe48fbb13e09e610ad0",
      "artifact": {
        "url": "https://update.dcsf.net/releases/15.10.29/dcsf-15.10.29.tar.gz",
        "sha256": "418075295a051f4794a1efe4b06a640b6cd96470696b379fcc5f14dcfc81fbf0",
        "size": 5867711
      },
      "manifest": {
        "url": "https://update.dcsf.net/releases/15.10.29/manifest.txt",
        "signature_url": "https://update.dcsf.net/releases/15.10.29/manifest.txt.sig",
        "sha256": "fbce4e3455bc2d7474b1449e7a6d7af08b59e1827c6ba526bd41a87f15654ed7"
      },
      "metadata_url": "https://update.dcsf.net/releases/15.10.29/release.json"
    },
    {
      "version": "DH20.25",
      "technical_version": "15.10.28",
      "published": "2026-09-29T10:56:31Z",
      "channel": "stable",
      "latest": false,
      "status": "historical",
      "changes": [
        {
          "title": {
            "en": "Verified cPanel EA-Nginx proxy detection",
            "pl": "Zweryfikowana detekcja proxy cPanel EA-Nginx"
          },
          "description": {
            "en": "WebGuard recognizes a bounded, root-owned cPanel EA-Nginx configuration with nginx on public ports 80/443 and Apache on private ports 81/444. Automatic request authority selects the nginx edge feed.",
            "pl": "WebGuard rozpoznaje ograniczony, kontrolowany przez roota układ cPanel EA-Nginx: nginx na publicznych portach 80/443 i Apache na prywatnych 81/444. Automatyczny wybór źródła żądań wskazuje log wejściowy nginx."
          }
        },
        {
          "title": {
            "en": "Private Apache status and backend-only evidence",
            "pl": "Prywatny status Apache i sygnał tylko z backendu"
          },
          "description": {
            "en": "The protected Apache status broker prefers the private Apache listener. Apache server-status and an optional backend feed supply saturation evidence, not client identity; the local proxy peer cannot become a firewall candidate.",
            "pl": "Chroniony broker statusu Apache preferuje prywatny port Apache. server-status i opcjonalny log backendu dostarczają sygnału przeciążenia, nie tożsamości klienta; lokalny adres proxy nie może stać się kandydatem do blokady."
          }
        }
      ],
      "release_notes": "https://dcsf.net/updates/#dh20.25",
      "source_commit": "4ba6f43f526c0e2bd46260c0acd384dd9cff423a",
      "artifact": {
        "url": "https://update.dcsf.net/releases/15.10.28/dcsf-15.10.28.tar.gz",
        "sha256": "ed0d338c13cbdce5d3dd6de7a324481baf3ba184d43c76b77659f94e1972d923",
        "size": 5867528
      },
      "manifest": {
        "url": "https://update.dcsf.net/releases/15.10.28/manifest.txt",
        "signature_url": "https://update.dcsf.net/releases/15.10.28/manifest.txt.sig",
        "sha256": "82259883ffcc8d111fb937880ad898f02ee0b846508155c8acb25d0403f20b80"
      },
      "metadata_url": "https://update.dcsf.net/releases/15.10.28/release.json"
    },
    {
      "version": "DH20.24",
      "technical_version": "15.10.27",
      "published": "2026-09-28T14:30:09Z",
      "channel": "stable",
      "latest": false,
      "status": "historical",
      "changes": [
        {
          "title": {
            "en": "Native snapshot before migration",
            "pl": "Natywna kopia przed migracją"
          },
          "description": {
            "en": "When iptables-save cannot export a known incompatible iptables-nft table, the cpanel-csf migration saves the complete nft list ruleset and exporter diagnostics with SHA-256 checksums. It proceeds only after proving the parallel legacy backend is inert and securing the exact RPM rollback package.",
            "pl": "Gdy iptables-save nie potrafi wyeksportować rozpoznanej niezgodnej tabeli iptables-nft, migracja cpanel-csf zapisuje pełny nft list ruleset i diagnostykę eksporterów z sumami SHA-256. Kontynuuje dopiero po potwierdzeniu bezczynności równoległego backendu legacy i zabezpieczeniu dokładnego pakietu RPM do wycofania zmiany."
          }
        },
        {
          "title": {
            "en": "Bounded rebuild through trusted CSF",
            "pl": "Ograniczona przebudowa przez zaufane CSF"
          },
          "description": {
            "en": "The bootstrap rebuilds only the incompatible standard filter, nat, mangle, raw and security tables in the ip and ip6 families through the already installed, trusted csf -r. Unrelated native tables are not selected for normalization.",
            "pl": "Bootstrap przebudowuje wyłącznie niezgodne standardowe tabele filter, nat, mangle, raw i security rodzin ip oraz ip6, używając już zainstalowanego, zaufanego csf -r. Pozostałe natywne tabele nie są wybierane do normalizacji."
          }
        },
        {
          "title": {
            "en": "Canonical policy check and automatic rollback",
            "pl": "Porównanie polityki i automatyczny rollback"
          },
          "description": {
            "en": "Canonical IPv4/IPv6 policies are compared before and after the rebuild. A missing table, semantic mismatch, interruption or later installation failure triggers restoration. Tests covered all ten standard tables, including a forced mismatch that restored the original policy and configuration.",
            "pl": "Kanoniczne polityki IPv4/IPv6 są porównywane przed przebudową i po niej. Brak tabeli, różnica semantyczna, przerwanie lub późniejszy błąd instalacji uruchamia przywracanie. Testy objęły wszystkie dziesięć standardowych tabel, w tym wymuszoną rozbieżność z odtworzeniem pierwotnej polityki i konfiguracji."
          }
        }
      ],
      "release_notes": "https://dcsf.net/updates/#dh20.24",
      "source_commit": "5fca7a1b5e35ed0470f0d294d1789c17ae93c690",
      "artifact": {
        "url": "https://update.dcsf.net/releases/15.10.27/dcsf-15.10.27.tar.gz",
        "sha256": "cde690e211f24e591bb34d3f5824f70ff5e1183a8ae40c20ac20f2e558598ed1",
        "size": 5866550
      },
      "manifest": {
        "url": "https://update.dcsf.net/releases/15.10.27/manifest.txt",
        "signature_url": "https://update.dcsf.net/releases/15.10.27/manifest.txt.sig",
        "sha256": "f8065003cfe4430d99ca7b45e316f35ae4bc430fb5ca89aa291b93126da8ac66"
      },
      "metadata_url": "https://update.dcsf.net/releases/15.10.27/release.json"
    },
    {
      "version": "DH20.23",
      "technical_version": "15.10.26",
      "published": "2026-09-27T16:29:48Z",
      "channel": "stable",
      "latest": false,
      "status": "historical",
      "changes": [
        {
          "title": {
            "en": "Populated private AI state directories",
            "pl": "Istniejące katalogi prywatnego stanu AI"
          },
          "description": {
            "en": "The installer checks owner, group and permissions of private AI state directories without requiring a directory link count of one. Existing subdirectories on ext filesystems no longer cause a false installation refusal; unsafe ownership or permissions still stop installation.",
            "pl": "Instalator sprawdza właściciela, grupę i uprawnienia prywatnych katalogów stanu AI bez wymagania jednej referencji katalogu. Istniejące podkatalogi na systemach plików ext nie powodują już błędnej odmowy instalacji; niebezpieczny właściciel lub prawa nadal ją zatrzymują."
          }
        }
      ],
      "release_notes": "https://dcsf.net/updates/#dh20.23",
      "source_commit": "54611df34ecc25aecf4c2fc719be130f1a458743",
      "artifact": {
        "url": "https://update.dcsf.net/releases/15.10.26/dcsf-15.10.26.tar.gz",
        "sha256": "abff74e71fc45235932c4f75637322f8409d00100afa007f6ec1d51388aa76fa",
        "size": 5866458
      },
      "manifest": {
        "url": "https://update.dcsf.net/releases/15.10.26/manifest.txt",
        "signature_url": "https://update.dcsf.net/releases/15.10.26/manifest.txt.sig",
        "sha256": "5f38332340d866dbe6f120b0a1706894a634d9d601e78089b41bc7d41a1933d1"
      },
      "metadata_url": "https://update.dcsf.net/releases/15.10.26/release.json"
    },
    {
      "version": "DH20.22",
      "technical_version": "15.10.25",
      "published": "2026-09-16T10:32:19Z",
      "channel": "stable",
      "latest": false,
      "status": "historical",
      "changes": [
        {
          "title": {
            "en": "Optional AI System Scan",
            "pl": "Opcjonalny AI System Scan"
          },
          "description": {
            "en": "AI System Scan adds quick and deep assessments to the DCSF administration interface. It is disabled by default and requires the administrator to configure a personal OpenAI API key and select a model.",
            "pl": "AI System Scan dodaje szybki i pogłębiony przegląd do interfejsu administracyjnego DCSF. Funkcja jest domyślnie wyłączona i wymaga podania przez administratora własnego klucza OpenAI API oraz wyboru modelu."
          }
        },
        {
          "title": {
            "en": "Bounded evidence and private credentials",
            "pl": "Ograniczony zakres dowodów i chroniony klucz"
          },
          "description": {
            "en": "A single background scan collects a bounded local security snapshot, with limits on reads, processes, data size and execution time. The API key is kept in a separate root-only file and is never rendered back into the interface.",
            "pl": "Pojedynczy skan w tle zbiera ograniczony zestaw lokalnych danych bezpieczeństwa, z limitami odczytów, procesów, rozmiaru danych i czasu wykonania. Klucz API jest w osobnym pliku dostępnym tylko dla roota i nigdy nie wraca do interfejsu."
          }
        },
        {
          "title": {
            "en": "Findings tied to supplied evidence",
            "pl": "Wnioski powiązane z przekazanymi dowodami"
          },
          "description": {
            "en": "OpenAI Responses API requests use store=false, no tools and strict structured output. Findings and recommendations must cite valid evidence IDs from the submitted snapshot. Results are advisory and do not automatically execute repairs.",
            "pl": "Żądania OpenAI Responses API używają store=false, bez narzędzi i ze ścisłym formatem odpowiedzi. Wnioski oraz zalecenia muszą wskazywać prawidłowe identyfikatory dowodów z wysłanego zestawu. Raport doradza, ale nie wykonuje automatycznie napraw."
          }
        }
      ],
      "release_notes": "https://dcsf.net/updates/#dh20.22",
      "source_commit": "487c486c4f55ce5853fcf9c64273e2ed489b9281",
      "artifact": {
        "url": "https://update.dcsf.net/releases/15.10.25/dcsf-15.10.25.tar.gz",
        "sha256": "b7bdc84c464d09c21be037a176e813cb9bbc016f90f8b62b4ca7d5b2aed0d9d6",
        "size": 5866418
      },
      "manifest": {
        "url": "https://update.dcsf.net/releases/15.10.25/manifest.txt",
        "signature_url": "https://update.dcsf.net/releases/15.10.25/manifest.txt.sig",
        "sha256": "7912c1f790faabba52a5f13f7663daa1fd21be4c7ad776d2531d01d8673721fe"
      },
      "metadata_url": "https://update.dcsf.net/releases/15.10.25/release.json"
    },
    {
      "version": "DH20.21",
      "technical_version": "15.10.24",
      "published": "2026-09-14T12:20:40Z",
      "channel": "stable",
      "latest": false,
      "status": "historical",
      "changes": [
        {
          "title": {
            "en": "Exporter warnings stop migration",
            "pl": "Ostrzeżenia eksportera zatrzymują migrację"
          },
          "description": {
            "en": "The migration bootstrap refuses to continue when iptables-save returns exit code 0 but its diagnostics report an incompatible nft table. A successful exit status alone is not accepted as proof of a complete firewall export.",
            "pl": "Bootstrap migracji odmawia kontynuacji, gdy iptables-save zwraca kod wyjścia 0, ale w diagnostyce zgłasza niezgodną tabelę nft. Sam poprawny kod zakończenia nie jest dowodem kompletnego eksportu firewalla."
          }
        },
        {
          "title": {
            "en": "Mixed and omitted firewall state is refused",
            "pl": "Odmowa przy mieszanym lub pominiętym stanie"
          },
          "description": {
            "en": "Migration is refused when legacy and nft rules coexist, or when an active standard nftables table is omitted from the export. An incomplete snapshot cannot silently become the rollback baseline.",
            "pl": "Migracja jest odrzucana, gdy równocześnie istnieją reguły legacy i nft albo eksport pomija aktywną standardową tabelę nftables. Niepełna kopia nie może po cichu stać się podstawą przywracania stanu."
          }
        },
        {
          "title": {
            "en": "Complete, checksum-bound migration evidence",
            "pl": "Pełne dowody migracji objęte sumami kontrolnymi"
          },
          "description": {
            "en": "The migration backup saves the full nft list ruleset output and exporter diagnostics. These files are included in the backup SHA-256 checksums so the captured rules and export evidence can be verified together.",
            "pl": "Kopia migracyjna zapisuje pełny wynik nft list ruleset oraz diagnostykę eksporterów. Pliki te wchodzą do sum kontrolnych SHA-256 backupu, aby razem weryfikować zapisane reguły i dowody przebiegu eksportu."
          }
        }
      ],
      "release_notes": "https://dcsf.net/updates/#dh20.21",
      "source_commit": "a1875fc8cea317a401cde5e8e8de900cba4abe64",
      "artifact": {
        "url": "https://update.dcsf.net/releases/15.10.24/dcsf-15.10.24.tar.gz",
        "sha256": "5f520af0826686e3811e063f1eb6acb5b44391ef522a61c4fe3a2a62c48bcd30",
        "size": 5850851
      },
      "manifest": {
        "url": "https://update.dcsf.net/releases/15.10.24/manifest.txt",
        "signature_url": "https://update.dcsf.net/releases/15.10.24/manifest.txt.sig",
        "sha256": "4e183800491e159c4a03c9ed6d22bea584dce712c4e67c6973c5d03e9626e813"
      },
      "metadata_url": "https://update.dcsf.net/releases/15.10.24/release.json"
    },
    {
      "version": "DH20.20",
      "technical_version": "15.10.23",
      "published": "2026-09-13T20:38:12Z",
      "channel": "stable",
      "latest": false,
      "status": "historical",
      "changes": [
        {
          "title": {
            "en": "LFD active after production updates",
            "pl": "Aktywne LFD po aktualizacji produkcyjnej"
          },
          "description": {
            "en": "After a successful production-profile update (TESTING=0), the installer restarts LFD and checks the result, including active service state on systemd. The new daemon code takes effect immediately; TESTING=1 installations are not started.",
            "pl": "Po udanej aktualizacji profilu produkcyjnego (TESTING=0) instalator restartuje LFD i sprawdza wynik, w tym aktywność usługi na systemd. Nowy kod demona działa od razu; instalacje z TESTING=1 nie są uruchamiane."
          }
        }
      ],
      "release_notes": "https://dcsf.net/updates/#dh20.20",
      "source_commit": "591c5870c69df1168a2a3f72263a4338853ef51a",
      "artifact": {
        "url": "https://update.dcsf.net/releases/15.10.23/dcsf-15.10.23.tar.gz",
        "sha256": "e7b87e873bf4e50adc0fadf53afe63cadad96e7e59efbec4b03683f32f02a58e",
        "size": 5850803
      },
      "manifest": {
        "url": "https://update.dcsf.net/releases/15.10.23/manifest.txt",
        "signature_url": "https://update.dcsf.net/releases/15.10.23/manifest.txt.sig",
        "sha256": "17b09fe445561a9e0fdc52dba1156cd15839b539eb1ad971931198f84754b300"
      },
      "metadata_url": "https://update.dcsf.net/releases/15.10.23/release.json"
    },
    {
      "version": "DH20.19",
      "technical_version": "15.10.22",
      "published": "2026-09-13T20:05:57Z",
      "channel": "stable",
      "latest": false,
      "status": "historical",
      "changes": [
        {
          "title": {
            "en": "Separate procfs context budget",
            "pl": "Oddzielny budżet kontekstu procfs"
          },
          "description": {
            "en": "Contextual identity checks have a separate, bounded procfs scan budget. Hosts with many processes no longer generate false excessive usage alerts from this budget collision; ordinary process, per-UID and global limits are not relaxed.",
            "pl": "Kontrole kontekstowej tożsamości mają osobny, ograniczony budżet skanowania procfs. Przy wielu procesach nie powstają już fałszywe alarmy excessive usage spowodowane kolizją tych budżetów; zwykłe limity procesu, UID i całego skanowania nie są osłabiane."
          }
        }
      ],
      "release_notes": "https://dcsf.net/updates/#dh20.19",
      "source_commit": "d320055318a796d65a0496b67b7f72e5fdeca04a",
      "artifact": {
        "url": "https://update.dcsf.net/releases/15.10.22/dcsf-15.10.22.tar.gz",
        "sha256": "bc7902a47ebd3a17af31aebf61c2dec50d20dfa7bc43cb300201ac64c962eb21",
        "size": 5850775
      },
      "manifest": {
        "url": "https://update.dcsf.net/releases/15.10.22/manifest.txt",
        "signature_url": "https://update.dcsf.net/releases/15.10.22/manifest.txt.sig",
        "sha256": "47b906f1734c8561eb0269e14c8ecd443f68b1bad9378e02e57a5c9f01d35b7a"
      },
      "metadata_url": "https://update.dcsf.net/releases/15.10.22/release.json"
    },
    {
      "version": "DH20.18",
      "technical_version": "15.10.21",
      "published": "2026-09-13T07:47:43Z",
      "channel": "stable",
      "latest": false,
      "status": "historical",
      "changes": [
        {
          "title": {
            "en": "Accurate systemd Apache detection for Zimbra",
            "pl": "Trafna detekcja Apache na systemd z Zimbrą"
          },
          "description": {
            "en": "Systemd service state is authoritative for Apache and ModSecurity log checks. A private Zimbra httpd process does not make an inactive system Apache appear active. The legacy init process fallback is retained.",
            "pl": "O kontroli logów Apache i ModSecurity rozstrzyga stan usługi systemd. Prywatny proces httpd Zimbry nie oznacza aktywnego systemowego Apache. Zachowano kontrolę procesu dla starszego init."
          }
        }
      ],
      "release_notes": "https://dcsf.net/updates/#dh20.18",
      "source_commit": "3b1a4aba7d42e6c36e021d214dc47678ebc1a583",
      "artifact": {
        "url": "https://update.dcsf.net/releases/15.10.21/dcsf-15.10.21.tar.gz",
        "sha256": "6977705fd2137a3caaaf18587151fac49eb5d090a83fee81e16cd438def1d1c6",
        "size": 5850698
      },
      "manifest": {
        "url": "https://update.dcsf.net/releases/15.10.21/manifest.txt",
        "signature_url": "https://update.dcsf.net/releases/15.10.21/manifest.txt.sig",
        "sha256": "05fcbf0260e45817c1e06555a1c91c8a4429be573425772fb0dade09e67e6076"
      },
      "metadata_url": "https://update.dcsf.net/releases/15.10.21/release.json"
    }
  ],
  "cpanel_whm": {
    "native_embedding_fixed_in": "DH20.27",
    "theme": "Jupiter",
    "template": "csf.tmpl",
    "master_template": "master_templates/master.tmpl",
    "main_cgi": {
      "perl_taint_mode": true,
      "request_validation_retained": true,
      "same_origin_responses": true,
      "validated_cp_security_token_preserved": true
    },
    "template_helper": {
      "owner": "root:root",
      "mode": "0700",
      "private_cpanel_perl": true,
      "fixed_executable_path": true,
      "path_or_template_arguments": false,
      "stdin_max_bytes": 33554432,
      "interpreter_environment_sanitized": true,
      "fixed_path_environment": true,
      "ipc": "IPC::Open2 list form",
      "renderer": "Cpanel::Template::process_template"
    },
    "qualification": {
      "public_version": "DH20.27",
      "historical": true,
      "linux_test_files": 77,
      "assertions_passed": 1533,
      "selected_operator_configuration_preserved": true,
      "normalized_ipv4_ipv6_policy_preserved": true,
      "authenticated_whm_checked": true,
      "viewport_widths": [
        1440,
        390
      ],
      "provenance": "Maintainer release qualification on a cPanel canary and one production upgrade; not a guarantee for every installation."
    }
  },
  "webguard": {
    "enabled_by_default": false,
    "default_mode": "report",
    "cpanel_ea_nginx": {
      "topology": "cpanel-nginx-apache",
      "scope": "Only the verified, bounded, root-owned cPanel EA-Nginx proxy configuration.",
      "introduced_in_public_release": "DH20.25",
      "source_diagnostics_fix": "DH20.26",
      "automatic_request_authority": "nginx",
      "edge": {
        "server": "nginx",
        "public_ports": [
          80,
          443
        ],
        "source_role": "edge",
        "authoritative_client_ip": true
      },
      "backend": {
        "server": "Apache",
        "private_ports": [
          81,
          444
        ],
        "source_role": "backend",
        "server_status": true,
        "saturation_signal_only": true,
        "authoritative_client_ip": false,
        "local_peer_is_block_candidate": false
      },
      "arbitrary_x_forwarded_for_trusted": false,
      "ordinary_apache_backend_log_is_client_authority": false,
      "diagnostics": "The selected signed-package source libraries remain first beside older installed CSF; ordinary installed execution is unchanged."
    }
  },
  "ai_system_scan": {
    "name": "AI System Scan",
    "introduced_in_public_release": "DH20.22",
    "introduced_in_technical_version": "15.10.25",
    "enabled_by_default": false,
    "administrator_api_key_required": true,
    "modes": [
      "quick",
      "deep"
    ],
    "model_options": [
      "gpt-5-mini",
      "gpt-5.4-mini",
      "gpt-5.6-terra"
    ],
    "model_access": "These are the model choices offered by this release. Availability depends on the administrator OpenAI API account.",
    "key_storage": "Separate root-owned private file, mode 0600; never rendered back into the administration UI.",
    "execution": {
      "single_background_scan": true,
      "bounded_evidence": true,
      "bounded_execution_time": true,
      "automatic_remediation": false
    },
    "provider": {
      "name": "OpenAI",
      "endpoint": "https://api.openai.com/v1/responses",
      "store": false,
      "tools": [],
      "strict_output_schema": true,
      "valid_sent_evidence_ids_required": true
    },
    "disclosure": {
      "en": "Selected local security diagnostics are sent to OpenAI after activation. Recognised secret values are redacted, but this is not an anonymity guarantee. store=false is not a Zero Data Retention guarantee; the API account and provider data policies still apply. Optional API usage is billed separately from the free DCSF software. Findings need administrator review and do not guarantee that every security issue is detected.",
      "pl": "Po włączeniu wybrane lokalne dane diagnostyczne bezpieczeństwa są wysyłane do OpenAI. Rozpoznane sekrety są maskowane, ale nie jest to gwarancja anonimowości. store=false nie gwarantuje Zero Data Retention; nadal obowiązują ustawienia konta API i zasady dostawcy. Opcjonalne użycie API jest rozliczane osobno od bezpłatnego DCSF. Wnioski wymagają oceny administratora i nie gwarantują wykrycia wszystkich problemów bezpieczeństwa."
    },
    "data_policy_url": "https://developers.openai.com/api/docs/guides/your-data",
    "documentation_url": "https://dcsf.net/updates/#ai-system-scan"
  },
  "retained_capabilities": [
    {
      "title": {
        "en": "Native WHM Jupiter interface restored",
        "pl": "Przywrócone natywne osadzenie w WHM Jupiter"
      },
      "description": {
        "en": "DH20.27 fixed the cPanel regression where a standalone DCSF HTML document replaced the WHM page. DCSF renders through csf.tmpl and the native master_templates/master.tmpl, retaining panel navigation and responsive layout.",
        "pl": "DH20.27 naprawiło regresję cPanel, w której samodzielny dokument HTML DCSF zastępował stronę WHM. Interfejs jest renderowany przez csf.tmpl i natywny master_templates/master.tmpl, z zachowaniem nawigacji panelu i responsywnego układu."
      }
    },
    {
      "title": {
        "en": "Taint-mode CGI and bounded template helper",
        "pl": "CGI w taint mode i ograniczony helper szablonu"
      },
      "description": {
        "en": "The main CGI retains perl -T, request validation and same-origin responses. A fixed root:root 0700 helper uses cPanel private Perl and Cpanel::Template::process_template through list-form IPC::Open2. It clears interpreter-control environment variables, fixes PATH, accepts no path or template arguments and limits stdin to 32 MiB.",
        "pl": "Główny CGI zachowuje perl -T, walidację żądań i odpowiedzi same-origin. Stały helper root:root 0700 używa prywatnego Perla cPanel i Cpanel::Template::process_template przez listową postać IPC::Open2. Czyści zmienne sterujące interpreterem, ustala PATH, nie przyjmuje argumentów ścieżki ani szablonu i ogranicza stdin do 32 MiB."
      }
    },
    {
      "title": {
        "en": "nginx is the client-address authority",
        "pl": "nginx rozstrzyga o adresie klienta"
      },
      "description": {
        "en": "For the verified cPanel EA-Nginx topology, SERVER=\"auto\" selects nginx on public ports 80/443. Its structured edge access feed supplies the real client address. WebGuard does not trust arbitrary X-Forwarded-For values or infer clients from an ordinary Apache backend log.",
        "pl": "W zweryfikowanej topologii cPanel EA-Nginx ustawienie SERVER=\"auto\" wybiera nginx na publicznych portach 80/443. Jego ustrukturyzowany log wejściowy dostarcza rzeczywistego IP klienta. WebGuard nie ufa dowolnym wartościom X-Forwarded-For ani nie wyznacza klientów ze zwykłego logu backendu Apache."
      }
    },
    {
      "title": {
        "en": "Apache reports load, not a client to block",
        "pl": "Apache wskazuje obciążenie, nie klienta do blokady"
      },
      "description": {
        "en": "Apache listens on private ports 81/444. Its server-status and optional backend-role feed contribute overload evidence only. The local nginx peer 127.0.0.1 cannot become a blocking candidate. Unsupported or unverified proxy layouts are not assumed to have the same trust boundary.",
        "pl": "Apache nasłuchuje na prywatnych portach 81/444. Jego server-status i opcjonalny log o roli backend dostarczają tylko sygnału przeciążenia. Lokalny adres nginx 127.0.0.1 nie staje się kandydatem do blokady. Nie zakładamy takiej samej granicy zaufania dla nieobsługiwanych lub niezweryfikowanych układów proxy."
      }
    },
    {
      "title": {
        "en": "One trusted library tree during diagnostics",
        "pl": "Jedno zaufane drzewo bibliotek podczas diagnostyki"
      },
      "description": {
        "en": "A diagnostic run of an extracted signed package beside older cPanel CSF keeps the selected package libraries first. An exact legacy prepend of /usr/local/csf/lib reasserts the trusted source root and leaves installed libraries as fallback only. Normal installed execution is unchanged.",
        "pl": "Diagnostyczne uruchomienie rozpakowanego, podpisanego pakietu obok starszego cPanel CSF zachowuje pierwszeństwo jego własnych bibliotek. Próba dodania /usr/local/csf/lib przez stary moduł ponownie ustawia wybrane źródło na początku, a bibliotekę instalacji pozostawia tylko jako fallback. Normalne uruchomienie zainstalowanej wersji nie zmienia się."
      }
    },
    {
      "title": {
        "en": "Native snapshot before migration",
        "pl": "Natywna kopia przed migracją"
      },
      "description": {
        "en": "When iptables-save cannot export a known incompatible iptables-nft table, the cpanel-csf migration saves the complete nft list ruleset and exporter diagnostics with SHA-256 checksums. It proceeds only after proving the parallel legacy backend is inert and securing the exact RPM rollback package.",
        "pl": "Gdy iptables-save nie potrafi wyeksportować rozpoznanej niezgodnej tabeli iptables-nft, migracja cpanel-csf zapisuje pełny nft list ruleset i diagnostykę eksporterów z sumami SHA-256. Kontynuuje dopiero po potwierdzeniu bezczynności równoległego backendu legacy i zabezpieczeniu dokładnego pakietu RPM do wycofania zmiany."
      }
    },
    {
      "title": {
        "en": "Bounded rebuild through trusted CSF",
        "pl": "Ograniczona przebudowa przez zaufane CSF"
      },
      "description": {
        "en": "The bootstrap rebuilds only the incompatible standard filter, nat, mangle, raw and security tables in the ip and ip6 families through the already installed, trusted csf -r. Unrelated native tables are not selected for normalization.",
        "pl": "Bootstrap przebudowuje wyłącznie niezgodne standardowe tabele filter, nat, mangle, raw i security rodzin ip oraz ip6, używając już zainstalowanego, zaufanego csf -r. Pozostałe natywne tabele nie są wybierane do normalizacji."
      }
    },
    {
      "title": {
        "en": "Canonical policy check and automatic rollback",
        "pl": "Porównanie polityki i automatyczny rollback"
      },
      "description": {
        "en": "Canonical IPv4/IPv6 policies are compared before and after the rebuild. A missing table, semantic mismatch, interruption or later installation failure triggers restoration. Tests covered all ten standard tables, including a forced mismatch that restored the original policy and configuration.",
        "pl": "Kanoniczne polityki IPv4/IPv6 są porównywane przed przebudową i po niej. Brak tabeli, różnica semantyczna, przerwanie lub późniejszy błąd instalacji uruchamia przywracanie. Testy objęły wszystkie dziesięć standardowych tabel, w tym wymuszoną rozbieżność z odtworzeniem pierwotnej polityki i konfiguracji."
      }
    },
    {
      "title": {
        "en": "Optional AI System Scan",
        "pl": "Opcjonalny AI System Scan"
      },
      "description": {
        "en": "AI System Scan adds quick and deep assessments to the DCSF administration interface. It is disabled by default and requires the administrator to configure a personal OpenAI API key and select a model.",
        "pl": "AI System Scan dodaje szybki i pogłębiony przegląd do interfejsu administracyjnego DCSF. Funkcja jest domyślnie wyłączona i wymaga podania przez administratora własnego klucza OpenAI API oraz wyboru modelu."
      }
    },
    {
      "title": {
        "en": "Bounded evidence and private credentials",
        "pl": "Ograniczony zakres dowodów i chroniony klucz"
      },
      "description": {
        "en": "A single background scan collects a bounded local security snapshot, with limits on reads, processes, data size and execution time. The API key is kept in a separate root-only file and is never rendered back into the interface.",
        "pl": "Pojedynczy skan w tle zbiera ograniczony zestaw lokalnych danych bezpieczeństwa, z limitami odczytów, procesów, rozmiaru danych i czasu wykonania. Klucz API jest w osobnym pliku dostępnym tylko dla roota i nigdy nie wraca do interfejsu."
      }
    },
    {
      "title": {
        "en": "Findings tied to supplied evidence",
        "pl": "Wnioski powiązane z przekazanymi dowodami"
      },
      "description": {
        "en": "OpenAI Responses API requests use store=false, no tools and strict structured output. Findings and recommendations must cite valid evidence IDs from the submitted snapshot. Results are advisory and do not automatically execute repairs.",
        "pl": "Żądania OpenAI Responses API używają store=false, bez narzędzi i ze ścisłym formatem odpowiedzi. Wnioski oraz zalecenia muszą wskazywać prawidłowe identyfikatory dowodów z wysłanego zestawu. Raport doradza, ale nie wykonuje automatycznie napraw."
      }
    },
    {
      "title": {
        "en": "Populated private AI state directories",
        "pl": "Istniejące katalogi prywatnego stanu AI"
      },
      "description": {
        "en": "The installer checks owner, group and permissions of private AI state directories without requiring a directory link count of one. Existing subdirectories on ext filesystems no longer cause a false installation refusal; unsafe ownership or permissions still stop installation.",
        "pl": "Instalator sprawdza właściciela, grupę i uprawnienia prywatnych katalogów stanu AI bez wymagania jednej referencji katalogu. Istniejące podkatalogi na systemach plików ext nie powodują już błędnej odmowy instalacji; niebezpieczny właściciel lub prawa nadal ją zatrzymują."
      }
    },
    {
      "title": {
        "en": "Conservative migration gates remain",
        "pl": "Zachowane rygorystyczne kontrole migracji"
      },
      "description": {
        "en": "An exit code 0 from an exporter is not proof of completeness. Migration still refuses unknown diagnostics or active parallel legacy policy. An active standard nftables table missing from the normalized snapshot or a changed canonical policy triggers rollback.",
        "pl": "Sam kod wyjścia 0 eksportera nie dowodzi kompletności. Migracja jest odrzucana przy nieznanej diagnostyce lub aktywnej równoległej polityce legacy. Kopia pomijająca aktywną standardową tabelę nftables albo zmiana polityki kanonicznej uruchamia rollback."
      }
    },
    {
      "title": {
        "en": "Separate procfs context budget",
        "pl": "Oddzielny budżet kontekstu procfs"
      },
      "description": {
        "en": "Contextual identity checks have a separate, bounded procfs scan budget. Hosts with many processes no longer generate false excessive usage alerts from this budget collision; ordinary process, per-UID and global limits are not relaxed.",
        "pl": "Kontrole kontekstowej tożsamości mają osobny, ograniczony budżet skanowania procfs. Przy wielu procesach nie powstają już fałszywe alarmy excessive usage spowodowane kolizją tych budżetów; zwykłe limity procesu, UID i całego skanowania nie są osłabiane."
      }
    },
    {
      "title": {
        "en": "LFD active after production updates",
        "pl": "Aktywne LFD po aktualizacji produkcyjnej"
      },
      "description": {
        "en": "After a successful production-profile update (TESTING=0), the installer restarts LFD and checks the result, including active service state on systemd. The new daemon code takes effect immediately; TESTING=1 installations are not started.",
        "pl": "Po udanej aktualizacji profilu produkcyjnego (TESTING=0) instalator restartuje LFD i sprawdza wynik, w tym aktywność usługi na systemd. Nowy kod demona działa od razu; instalacje z TESTING=1 nie są uruchamiane."
      }
    },
    {
      "title": {
        "en": "Bounded registration retry",
        "pl": "Ograniczone ponawianie rejestracji"
      },
      "description": {
        "en": "Installation registration uses the extensionless HTTPS API with bounded retry and backoff. A transient failure can be retried without an unbounded wait; signed identity and source-address checks remain in force.",
        "pl": "Rejestracja instalacji korzysta z API HTTPS bez rozszerzenia pliku oraz ograniczonych prób retry i backoff. Chwilowy błąd można ponowić bez nieograniczonego oczekiwania; podpis tożsamości i kontrola adresu źródłowego pozostają wymagane."
      }
    },
    {
      "title": {
        "en": "SELinux-aware installation",
        "pl": "Instalacja świadoma stanu SELinux"
      },
      "description": {
        "en": "The installer checks SELinux state before using chcon. Disabled SELinux no longer produces misleading relabel warnings, while enabled systems retain context handling.",
        "pl": "Instalator sprawdza stan SELinux przed użyciem chcon. Wyłączony SELinux nie powoduje już mylących ostrzeżeń o etykietowaniu, a aktywne środowiska zachowują obsługę kontekstów."
      }
    },
    {
      "title": {
        "en": "Native systemd handling",
        "pl": "Natywna obsługa systemd"
      },
      "description": {
        "en": "A systemd-only host no longer reports missing legacy SysV init files or tries to change ownership of files that are not installed. Legacy init remains supported.",
        "pl": "Host działający wyłącznie na systemd nie zgłasza braku starych plików startowych SysV ani nie próbuje zmieniać właściciela nieistniejących plików. Starszy init pozostaje obsługiwany."
      }
    },
    {
      "title": {
        "en": "Accurate Apache and ModSecurity checks",
        "pl": "Trafna kontrola Apache i ModSecurity"
      },
      "description": {
        "en": "Inactive Apache and default ModSecurity log paths are informational. With systemd, actual service state is authoritative: Zimbra's private /opt/zimbra/common/bin/httpd is not mistaken for the system Apache service. Legacy init retains a process fallback.",
        "pl": "Nieaktywny Apache i domyślne ścieżki logów ModSecurity mają status informacyjny. Na systemd rozstrzyga rzeczywisty stan usługi: prywatny /opt/zimbra/common/bin/httpd nie jest mylony z systemowym Apache. Starszy init zachowuje kontrolę procesu."
      }
    },
    {
      "title": {
        "en": "Validated Zimbra mail transport",
        "pl": "Sprawdzony transport poczty Zimbra"
      },
      "description": {
        "en": "The canonical Zimbra sendmail symlink is recognized through the trusted-path check. This targeted compatibility repair does not make arbitrary symlinks trusted.",
        "pl": "Kanoniczny symlink sendmail Zimbry jest rozpoznawany przez kontrolę zaufanej ścieżki. Ta celowana poprawka zgodności nie nadaje zaufania dowolnym symlinkom."
      }
    }
  ],
  "security_status_url": "https://dcsf.net/security.json",
  "security_register_url": "https://dcsf.net/hardening/",
  "provenance": "Release identity, publication timestamp, source commit and artifact digest are cross-checked against each signed versioned manifest. Change summaries are maintainer documentation, not signed manifest fields. Retained capabilities are not claimed as new fixes in the latest release."
}
