Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-24 06:52 UTC

opensearch-project / opensearch-php

Official PHP Client for OpenSearch

PHPEigene Lizenz★ 157 Sterne⑂ 76 Forksseit Juli 2021Auf GitHub ansehen ↗

opensearch-project/opensearch-php erreicht einen Gesundheitsindex von 73 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Community & Adoption (76/100) ab, am schwächsten bei AI Readiness (47/100). Zuletzt vor 27 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

73
gesamt / 100
Gut

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

73
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

OpenSearch ProjectOrganisation
3.842 Follower152 öffentliche Reposseit März 2021

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
Packagistopensearch-project/opensearch-php2.6.01.457.25721vor 122 Tagenclientsearchelasticsearchopensearch

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

71Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
28.8/36Push-Aktualität — letzter Push vor 27 Tagen
14.5/36Commit-Rhythmus — 21/52 Wochen mit Commits
14.4/18Commit-Volumen — 39 Commits im letzten Jahr
5/10OpenSSF Scorecard: Maintained — 6 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 5
Verwendete Eingangsdaten
commits_last_year39
human_commit_share0,8
days_since_last_push27
active_weeks_last_year21
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 21 Releases veröffentlicht
27/36Release-Aktualität — letztes Release vor 122 Tagen
19.8/27Release-Rhythmus — ein Release etwa alle 45,9 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count21
latest_release_tag2.6.0
releases_from_tagsnein
days_since_latest_release122
mean_days_between_releases45,9
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

76Gut · 18 % des Gesamtindex
Wie die Bewertung erfolgt
35.6/60Stars — 157 Stars
15.6/25Forks — 76 Forks
6.2/15Watcher — 14 Watcher
Verwendete Eingangsdaten
forks76
stars157
watchers14
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
16.9/22.5Lizenz — Lizenzdatei vorhanden, keine anerkannte Lizenz
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductja
has_pull_request_templateja
Wie die Bewertung erfolgt
80/80Downloads pro Monat — 1.457.257 Downloads/Monat über packagist
12.2/20Abhängige in der Registry — 66 Pakete hängen davon ab
Verwendete Eingangsdaten
packagesopensearch-project/opensearch-php
dependents66
ecosystemspackagist
total_downloads29.743.926
monthly_downloads1.457.257

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

73Gut · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
9.5/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 58 % der Commits
13.5/13.5Breite der Beitragenden — 98 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 44 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor1
contributors_sampled98
top_contributor_share0,576
Wie die Bewertung erfolgt
35.3/46.8Issue-Lösungsquote — 76 % der Issues geschlossen
33/38.3PR-Annahme — 219/254 entschiedene PRs gemergt
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Verwendete Eingangsdaten
merged_prs219
open_issues38
closed_issues117
issue_closed_ratio0,755
closed_unmerged_prs35
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
25/25Reichweite des Inhabers — 3.842 Follower von opensearch-project
23.8/25Kontohistorie — 152 öffentliche Repos, Kontoalter ca. 5 Jahre
Verwendete Eingangsdaten
followers3.842
owner_typeOrganization
is_verified
owner_loginopensearch-project
public_repos152
account_age_days1.966

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf packagist
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 122 Tagen
20/20Versionshistorie — 21 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesopensearch-project/opensearch-php
ecosystemspackagist
any_deprecatednein
min_days_since_publish122

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

74Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 10 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .php-cs-fixer.dist.php
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 2 Topics
10/10Wiki
Verwendete Eingangsdaten
topicshacktoberfest, php
has_wikija
homepage
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

70Gut · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
3/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
7.5/7.5Code-Review — all changesets reviewed
2.5/2.5Contributors — project has 44 contributing companies or organizations
0/10Dangerous-Workflow — keine Daten
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5Lizenz — license file detected
3.8/7.5Maintained — 6 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 5
0/5Packaging — keine Daten
0/5Pinned-Dependencies — keine Daten
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — keine Daten
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate7
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

47Gefährdet · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 80 von 80 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .php-cs-fixer.dist.php
0/11Statische Typprüfung
10/10Reproduzierbare Umgebung — Dockerfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
5/8Automatisierte Wartung — Abhängigkeits-Automatisierung konfiguriert, in den erfassten Commits nicht beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — keine Daten
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfileja
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Pinned-Dependencies. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — PHP ohne Typprüfungs-Konfiguration
54.7/55Handhabbare Dateigrößen — 4/747 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languagePHP
largest_source_bytes139.880
source_files_sampled747
oversized_source_files4
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — samples
Verwendete Eingangsdaten
example_dirssamples
has_mcp_signalnein
api_schema_files

Eckdaten

157GitHub-Sterne
98Mitwirkende
39Commits, letzte 12 Monate
27Tage seit letztem Push
21Releases
1Bus-Faktor
38offene Issues
PackagistPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • No resolved dependencies carried a version and a supported ecosystem

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 76 ⇿
0Sterne
76Forks
21Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

01325385063757532021-112024-032026-06
Major 2Minor 6Patch 13

Jeder Punkt umfasst 5 Tage.

OpenSSF Scorecard 7.0 / 10
7.0Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-24 06:51 UTC

10Binary-Artifactsno binaries found in the repo
4Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
10Code-Reviewall changesets reviewed
10Contributorsproject has 44 contributing companies or organizations
k. A.Dangerous-Workflowno workflows found
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
5Maintained6 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 5
k. A.Packagingpackaging workflow not detected
k. A.Pinned-Dependenciesno dependencies found
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 9
RegistryPaketVersionsvorgabeManifest
Packagistezimuel/ringphp^1.4.0composer.json
Packagistpsr/http-client^1.0.3composer.json
Packagistpsr/http-client-implementation*composer.json
Packagistpsr/http-factory^1.1.0composer.json
Packagistpsr/http-factory-implementation*composer.json
Packagistpsr/http-message^2.0composer.json
Packagistpsr/http-message-implementation*composer.json
Packagistpsr/log^3.0.2composer.json
Packagistsymfony/yaml^v6.4.26|^7.3.5|^v8.0.0composer.json
Alle Abhängigkeiten 32

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 9 direkte und 23 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
Packagistezimuel/ringphpdirekt
Packagistpsr/http-clientdirekt
Packagistpsr/http-client-implementationdirekt
Packagistpsr/http-factorydirekt
Packagistpsr/http-factory-implementationdirekt
Packagistpsr/http-messagedirekt
Packagistpsr/http-message-implementationdirekt
Packagistpsr/logdirekt
Packagistsymfony/yamldirekt
Packagistaws/aws-sdk-phpindirekt
Packagistcolinodell/psr-testloggerindirekt
Packagistext-curlindirekt
Packagistext-jsonindirekt
Packagistext-zipindirekt
Packagistfriendsofphp/php-cs-fixerindirekt
Packagistguzzlehttp/psr7indirekt
Packagistmockery/mockeryindirekt
Packagistopensearch-project/opensearch-phpindirekt
Packagistphpindirekt
Packagistphp-http/discoveryindirekt
Packagistphpstan/extension-installerindirekt
Packagistphpstan/phpstanindirekt
Packagistphpstan/phpstan-deprecation-rulesindirekt
Packagistphpstan/phpstan-mockeryindirekt
Packagistphpstan/phpstan-phpunitindirekt
Packagistphpunit/phpunitindirekt
Packagistreact/promiseindirekt
Packagistsymfony/consoleindirekt
Packagistsymfony/finderindirekt
Packagistsymfony/http-clientindirekt
Packagistsymfony/http-client-contractsindirekt
Packagisttwig/twigindirekt
Abhängigkeits-Advisories nicht bewertet

Der Advisory-Abgleich konnte für diesen Bericht nicht ausgeführt werden: No resolved dependencies carried a version and a supported ecosystem

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "hacktoberfest",
        "php"
      ],
      "is_fork": false,
      "size_kb": 8100,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "PHP": 2212618,
        "Twig": 24605,
        "Shell": 698
      },
      "pushed_at": "2026-06-26T07:39:04Z",
      "created_at": "2021-07-23T17:53:54Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-10T03:55:49Z",
      "description": "Official PHP Client for OpenSearch",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "PHP",
      "significant_languages": [
        "PHP"
      ]
    },
    "owner": {
      "blog": "https://opensearch.org/",
      "name": "OpenSearch Project",
      "type": "Organization",
      "login": "opensearch-project",
      "company": null,
      "location": null,
      "followers": 3842,
      "avatar_url": "https://avatars.githubusercontent.com/u/80134844?v=4",
      "created_at": "2021-03-06T00:03:44Z",
      "is_verified": null,
      "public_repos": 152,
      "account_age_days": 1966
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "2.6.0",
          "kind": "minor",
          "published_at": "2026-03-24T06:07:58Z"
        },
        {
          "tag": "2.5.1",
          "kind": "patch",
          "published_at": "2026-01-17T08:18:13Z"
        },
        {
          "tag": "2.5.0",
          "kind": "minor",
          "published_at": "2025-11-14T22:23:52Z"
        },
        {
          "tag": "2.4.6",
          "kind": "patch",
          "published_at": "2025-11-10T08:06:05Z"
        },
        {
          "tag": "2.4.5",
          "kind": "patch",
          "published_at": "2025-08-06T10:58:40Z"
        },
        {
          "tag": "2.4.4",
          "kind": "patch",
          "published_at": "2025-08-05T08:51:35Z"
        },
        {
          "tag": "2.4.3",
          "kind": "patch",
          "published_at": "2025-03-10T11:18:25Z"
        },
        {
          "tag": "2.4.2",
          "kind": "patch",
          "published_at": "2025-02-20T07:45:24Z"
        },
        {
          "tag": "2.4.1",
          "kind": "patch",
          "published_at": "2025-02-10T13:01:05Z"
        },
        {
          "tag": "2.4.0",
          "kind": "minor",
          "published_at": "2025-02-03T22:19:52Z"
        },
        {
          "tag": "2.3.1",
          "kind": "patch",
          "published_at": "2024-08-29T11:59:28Z"
        },
        {
          "tag": "2.3.0",
          "kind": "minor",
          "published_at": "2024-04-24T20:39:29Z"
        },
        {
          "tag": "2.2.0",
          "kind": "minor",
          "published_at": "2023-05-26T11:04:03Z"
        },
        {
          "tag": "2.1.0",
          "kind": "minor",
          "published_at": "2023-02-27T17:58:14Z"
        },
        {
          "tag": "2.0.3",
          "kind": "patch",
          "published_at": "2022-10-01T08:32:16Z"
        },
        {
          "tag": "2.0.2",
          "kind": "patch",
          "published_at": "2022-08-10T18:12:20Z"
        },
        {
          "tag": "2.0.1",
          "kind": "patch",
          "published_at": "2022-07-01T23:53:39Z"
        },
        {
          "tag": "2.0.0",
          "kind": "major",
          "published_at": "2022-05-26T19:27:04Z"
        },
        {
          "tag": "1.0.2",
          "kind": "patch",
          "published_at": "2022-03-24T06:34:48Z"
        },
        {
          "tag": "1.0.1",
          "kind": "patch",
          "published_at": "2022-02-01T05:57:55Z"
        },
        {
          "tag": "1.0.0",
          "kind": "major",
          "published_at": "2021-11-19T12:10:00Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "08e57621ab6915dc3dc94e07e10b332381453037",
          "body": "Signed-off-by: Soner Sayakci <s.sayakci@gmail.com>",
          "is_bot": false,
          "headline": "ci: update actions (#411)",
          "author_name": "Soner",
          "author_login": "shyim",
          "committed_at": "2026-06-26T07:39:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f67ac1320c50e70ad69be691f1509ad6b79aa16",
          "body": "…410)\n\n- Replace old backport workflow with reusable workflow from opensearch-build\n- Remove obsolete backport-related workflows\n\nSigned-off-by: Peter Zhu <zhujiaxi@amazon.com>",
          "is_bot": false,
          "headline": "Onboard new backport-pr re-usable github workflow (opensearch-php) (#…",
          "author_name": "Peter Zhu",
          "author_login": "peterzhuamazon",
          "committed_at": "2026-06-26T04:00:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5946d3055e0687bb253da932b91fc86d681d2d4d",
          "body": "Signed-off-by: Divya Madala <divyaasm@amazon.com>",
          "is_bot": false,
          "headline": "Pin GitHub Actions to commit SHAs (#408)",
          "author_name": "Divya Madala",
          "author_login": "Divyaasm",
          "committed_at": "2026-05-29T02:46:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0af150f2614e07924b7b3779997e0f152bd01dd0",
          "body": "Signed-off-by: shreyah963 <shreyab963@gmail.com>",
          "is_bot": false,
          "headline": "Pin actions/github-script to exact commit SHA (#407)",
          "author_name": "Shreya Bhatta",
          "author_login": "shreyah963",
          "committed_at": "2026-05-21T22:06:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67aaf12d8e2ffa1e44a9da0b7b4248b2bfa22e2a",
          "body": "Signed-off-by: shreyah963 <shreyab963@gmail.com>",
          "is_bot": false,
          "headline": "Add issues write permission to untriaged label workflow (#406)",
          "author_name": "Shreya Bhatta",
          "author_login": "shreyah963",
          "committed_at": "2026-05-20T06:31:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c340e41553978bb987ef166f502bbbe7b8d709e0",
          "body": "* fix: handle unpaired UTF-16 surrogates in SmartSerializer\n\nSigned-off-by: Kyoko OZAKI <kanz.anz10@gmail.com>\n\n* Update changelog\n\nSigned-off-by: Kyoko OZAKI <kanz.anz10@gmail.com>\n\n* fix: re-throw exception on second decode failure in SmartSerializer\n\nSigned-off-by: Kyoko OZAKI <kanz.anz10@gmail.com>\n\n---------\n\nSigned-off-by: Kyoko OZAKI <kanz.anz10@gmail.com>",
          "is_bot": false,
          "headline": "fix: handle unpaired UTF-16 surrogates in SmartSerializer (#403)",
          "author_name": "kanz",
          "author_login": "k-anz",
          "committed_at": "2026-05-08T11:17:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bcff126ffd8f54ca33a0dd659128cbc5d3b2bcd",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "build: Prepare 2.6.0 release (#400)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2026-03-24T03:15:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd194023dc690da589b66ecffdffdf87f8b17847",
          "body": "* feat: Convert legacy templates to twig\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Adds changelog\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Remove whitespace\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Remove audit from composer.json\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Fix whitespace\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* More whitespace\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n---------\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "feat: Convert legacy templates to twig (#399)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2026-03-13T04:47:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68a137fd7adc9855ef037d7ae27c1dedc9dd5a44",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "feat: Add param array shapes (#398)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2026-03-10T05:40:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d44ddc0873a7683011491ab57a4abe8f5344db6",
          "body": "…6-02-17) (#396)\n\nSigned-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nCo-authored-by: dblock <542335+dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2026-02-25T03:34:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2812207d7e40d90b51f745abf4f68648e1460c91",
          "body": "* fix: error thrown trying to parse type for param docs\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Update changelog\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n---------\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "fix: error thrown trying to parse type for param docs (#395)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2026-01-23T05:37:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "740bd64d259f24f89e414ef10bb7c80bf5e415ad",
          "body": "* feat: Update php scripts to symfony commands\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Allow symfony ^7.4\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Bump min php version\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Update changelog\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n---------\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "feat: Update php scripts to symfony commands (#394)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2026-01-23T05:25:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e193551266c1f284bdf005d587a85ebff00f29e",
          "body": "- Update version const\n- Update changelog\n\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Prepare 2.5.1 release (#387)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2026-01-16T21:44:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "123c17416e2f0e02f83e0042da6089afa73164cd",
          "body": "…6-01-16) (#388)\n\nSigned-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nCo-authored-by: dblock <542335+dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2026-01-16T04:06:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f32a5a8987571d0ec85db7bb3d873947517b6b0",
          "body": "---------\n\nSigned-off-by: Andrew Chappell <acha5066@gmail.com>",
          "is_bot": false,
          "headline": "Retries in logging message in GuzzleRetryDecider are off by one (#386)",
          "author_name": "acha5066",
          "author_login": "acha5066",
          "committed_at": "2026-01-15T22:44:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02fc879a4b813ea217eafa612e0966b5d50726c5",
          "body": "---------\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "fix: Allow params with the name `type` (#384)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2026-01-14T06:51:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0d8278e582ff839a76279d16de5202c085aebb6",
          "body": "* docs: Replace newline with a space\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Remove duplicates\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n---------\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "docs: Replace newline with a space (#382)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-12-16T22:53:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07a9267d09e70f1ac770e6f47acd467dcdeac1b9",
          "body": "Signed-off-by: Nicolas Olive <nikow.13@gmail.com>",
          "is_bot": false,
          "headline": "Support Symfony 8 (#381)",
          "author_name": "Nicolas Olive",
          "author_login": "nikow13",
          "committed_at": "2025-12-16T21:36:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6876a790b7f21087249fe05eff68475ac430845d",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Back to dev (#375)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-15T00:27:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "478c5125ab62c5f01c29043b9ab5015b67156d85",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Prepare 2.5.0 release (#372)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-14T21:48:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7cc7a27592ff1666b505042cdfab6da8bdac588",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Simplify url encoding (#370)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-11T05:42:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79af453ee08a35baf57238d21065fa422ead034b",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "fix: ID is being double encoded (#368)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-11T05:18:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ed397aec5373838209b6d38e553d1d81380495e",
          "body": "* Upgrade phpunit from v9 to v11\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Upgrade phpunit from v9 to v10\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Ignore case\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n---------\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Upgrade from phpunit v9 to v10 (#371)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-11T05:15:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5174ac0c7b4a538910718ec4b71822915a45c3af",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Test lowest allowed version of dependencies (#367)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-10T10:23:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abf840b5114d46514b590e7cca26bb860093f5be",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Move health check to shared action (#366)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-10T09:40:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b8c67e0c543e8dad3364174c86203e39a322ae7",
          "body": "* Wait for a healthy cluster before integration tests\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Back to dev (#365)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-10T09:09:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eec5a78ade77337c6c630add63e8f90cdc2d337a",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Prepare release (#363)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-10T07:56:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2915e4ba1f933e3322ceda6b07fb394ba99a9f16",
          "body": "- Remove waitfor check and use docker health checks\n- Use latest major versions of docker images\n- Always use password as of OpenSearch 2.12\n- Run main on java 25\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Update OpenSearch version test matrix and add v3 (#361)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-10T07:21:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea28d6cd309a0dc6b2c91027c05241f56a46c0e4",
          "body": "* Switch to actions/create-github-app-token\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Add changelog\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* set-output command is deprecated\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Bump peter-evans/create-pull-request to v7\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n---------\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Switch to actions/create-github-app-token (#362)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-10T06:17:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "185f791bf349291bc9c1cc930f8b50810864e1bf",
          "body": "* Fix link checker action\n* Fix args\n* Fix redirects\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Fix lychee config (#359)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-04T08:55:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "625a250d56d1ec836c73b7757de611848f5cb341",
          "body": "* Update lycheeverse/lychee-action to v2\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Fix deprecated --exclude-mail option\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n---------\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "task: Update lycheeverse/lychee-action to v2 (#358)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-11-03T05:53:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38fed41ec32934e3103fbf6c424f06273cfe2d8f",
          "body": "…5-10-24) (#357)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-10-24T04:04:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38316eb02f1211781d8f95e14477a82455fa9551",
          "body": "Resolves a deprecation warning by moving the scroll_id into the\nrequest body for the scroll() API call. Updates unit tests and\nthe CHANGELOG to match the change.\n\nCloses #163\n\nSigned-off-by: Umarov Ismoiljon <hs.umarov21@gmail.com>\nCo-authored-by: Daniel Johnson <1753478+ossobuffo@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix(SearchResponseIterator): Move scroll_id to body (#356)",
          "author_name": "Umarov Ismoiljon",
          "author_login": "umaarov",
          "committed_at": "2025-09-18T20:26:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15200cb8a0e94a7e7a3cb28d2a3122cdc09fe922",
          "body": "* 353: Add support for Guzzle logging middleware\n\nSigned-off-by: Daniel Johnson <djohnson@webfirst.com>\n\n* 353: Remove unused 'use' statement; add to CHANGELOG.md\n\nSigned-off-by: Daniel Johnson <djohnson@webfirst.com>\n\n* Moved changelog entry to Unreleased section\n\nSigned-off-by: Daniel Johnson <djohnson@webfirst.com>\n\n---------\n\nSigned-off-by: Daniel Johnson <djohnson@webfirst.com>",
          "is_bot": false,
          "headline": "#353: Add support for Guzzle logging middleware (#354)",
          "author_name": "Daniel Johnson",
          "author_login": "ossobuffo",
          "committed_at": "2025-08-25T19:51:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d5105e67511c58918efb565fe56075cde5a5e44",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Back to dev version (#352)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-08-11T06:55:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97e942dfac44d40d3db5b3c4a8656fe0d1e22294",
          "body": "* fix: double encoding of index name\n\nSigned-off-by: Soner Sayakci <s.sayakci@gmail.com>\n\n* chore: prepare release\n\nSigned-off-by: Soner Sayakci <s.sayakci@gmail.com>\n\n---------\n\nSigned-off-by: Soner Sayakci <s.sayakci@gmail.com>",
          "is_bot": false,
          "headline": "fix: double encoding of index name (#349)",
          "author_name": "Shyim",
          "author_login": "shyim",
          "committed_at": "2025-08-06T08:36:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae23da4b49a002c1d57f7f86bf89ccdef0033138",
          "body": "* prepare release\n\nSigned-off-by: Soner Sayakci <s.sayakci@gmail.com>\n\n* add missing changelog entry\n\nSigned-off-by: Soner Sayakci <s.sayakci@gmail.com>\n\n---------\n\nSigned-off-by: Soner Sayakci <s.sayakci@gmail.com>",
          "is_bot": false,
          "headline": "prepare release (#346)",
          "author_name": "Shyim",
          "author_login": "shyim",
          "committed_at": "2025-08-05T08:23:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "000e1e61afc5d10f1cbd59847d732a30569532aa",
          "body": "Signed-off-by: David Windell <david@outeredgeuk.com>",
          "is_bot": false,
          "headline": "Fix error when content_type is NULL (#345)",
          "author_name": "David Windell",
          "author_login": "davidwindell",
          "committed_at": "2025-08-04T11:46:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75fe78e715f23dc8e5284857ab52f7988af53c09",
          "body": "Signed-off-by: Daniel (dB.) Doubrovkine <dblock@dblock.org>",
          "is_bot": false,
          "headline": "Stepping down from project maintainers. (#344)",
          "author_name": "Daniel (dB.) Doubrovkine",
          "author_login": "dblock",
          "committed_at": "2025-07-27T12:19:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5e8fe9d4fef5083d715ae26d963938ad7d44e09",
          "body": "…5-07-22) (#343)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-07-22T06:04:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e533f00e4e053d147680df1b9f03abf615ae8dd",
          "body": "…5-07-17) (#342)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-07-17T07:22:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d07dc3d1dd2eee9e53756f0fc216fdf1ab9a660",
          "body": "…5-06-25) (#341)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-06-25T04:09:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90491db35e8e5a05054080090e5600d079f71e7b",
          "body": "…5-06-20) (#340)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-06-20T09:00:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eadc3df7e9281bb10b1a4c4f5c11b9f3c0818797",
          "body": "…5-06-11) (#338)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-06-11T06:51:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1586743b31e4039dfb15cd869a4cdd09f81794f4",
          "body": "…5-05-30) (#336)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-05-30T04:56:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02a2a2ddc38919376d4241be242aed93810506ab",
          "body": "…5-05-25) (#332)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-05-25T08:10:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3c532740bbd1576a44169099025b193603077cc",
          "body": "* fix: update generator to encode url parameters\n\nSigned-off-by: Soner Sayakci <s.sayakci@gmail.com>\n\n* chore: generate endpoints\n\nSigned-off-by: Soner Sayakci <s.sayakci@gmail.com>\n\n* chore: add changelog\n\nSigned-off-by: Soner Sayakci <s.sayakci@gmail.com>\n\n---------\n\nSigned-off-by: Soner Sayakci <s.sayakci@gmail.com>",
          "is_bot": false,
          "headline": "fix: update generator to encode url parameters (#335)",
          "author_name": "Shyim",
          "author_login": "shyim",
          "committed_at": "2025-05-24T13:17:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac1431cad4cd236911752e60646339cf0e108692",
          "body": "…5-05-13) (#328)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-05-13T10:36:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "409198b6800e969ec1bf1ff2d2d7b3bdb455593f",
          "body": "… section  (#330)\n\n* feat(git): update gitattributes export ignore to reduce size of the distribution\n\nSigned-off-by: Mikhail <salazar290720035017@gmail.com>\n\n* feat(git): update changelog\n\nSigned-off-by: Mikhail <salazar290720035017@gmail.com>\n\n* feat(git): fix dirs ignoring\n\nSigned-off-by: Mikhail <salazar290720035017@gmail.com>\n\n* feat(git): add /phpstan-baseline.neon\n\nSigned-off-by: Mikhail <salazar290720035017@gmail.com>\n\n---------\n\nSigned-off-by: Mikhail <salazar290720035017@gmail.com>",
          "is_bot": false,
          "headline": "Reduce distribution size by actualizing .gitattributes' export ignore…",
          "author_name": "Savin Mikhail",
          "author_login": "savinmikhail",
          "committed_at": "2025-04-30T04:37:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33d8710b6d52733f1e0510d7882b7af0191eb230",
          "body": "…5-04-16) (#327)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-04-16T16:21:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "621ac12c7f6eebcc6b23b52751226dea062b71bb",
          "body": "…5-04-11) (#326)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-04-11T03:50:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9e045f01a98d3d04de34daefa42d20cb5805b8f",
          "body": "…5-03-20) (#325)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-03-20T08:47:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e97fc6354fdac9f1918f1ffc3da6d73e4919f644",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Back to dev (#324)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-03-10T11:31:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db138f27996e18b1ef8f915dba5e2ecc0caeb357",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Prepare 2.4.3 release (#322)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-03-10T06:56:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65c3a89b7d9be5e5f995d5e53c7a94a8496931bd",
          "body": "…5-03-07) (#317)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-03-07T04:31:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d501f86825c760d70f87c1f09f96656f6622bf8",
          "body": "* Fix JSON deserialization error in SmartSerializer\n\nSigned-off-by: takuyanakazawa <t.nakazawa0222@gmail.com>\n\n* test: modify assert\n\nSigned-off-by: takuyanakazawa <t.nakazawa0222@gmail.com>\n\n* Fix checking for json content type when decoding\n\nSigned-off-by: takuyanakazawa <t.nakazawa0222@gmail.com>\n[…]\n222@gmail.com>\n\n* Fixed header case normalization and content type checks\n\nSigned-off-by: takuyanakazawa <t.nakazawa0222@gmail.com>\n\n---------\n\nSigned-off-by: takuyanakazawa <t.nakazawa0222@gmail.com>",
          "is_bot": false,
          "headline": "Fix json deserialization error (#320)",
          "author_name": "zawa",
          "author_login": "tn2222",
          "committed_at": "2025-03-04T23:29:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "877796e3f9914a7f6f01c277fb4ff739f958ef6f",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Adds AWS signing to the client factories (#314)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-28T13:16:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99c19ee4b9e951c7117be92e700e7bf33b617202",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Fix options not being passed to legacy transport (#316)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-28T08:03:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8263aac94f8855cd92bf1a0082daf64576c9d07f",
          "body": "* Make EndpointFactory and optional Client constructor param\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Adds test\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n---------\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Make EndpointFactory and optional Client constructor param (#315)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-27T13:43:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88235f61139e393f6537cc4df03e8b2a89cb568c",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Update performRequest return type to iterable (#313)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-25T04:17:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52ff74338a9b238538ffb45bc902d5e0cdbc2483",
          "body": "Signed-off-by: Daniel (dB.) Doubrovkine <dblock@dblock.org>",
          "is_bot": false,
          "headline": "Updated affiliation for @dblock. (#311)",
          "author_name": "Daniel (dB.) Doubrovkine",
          "author_login": "dblock",
          "committed_at": "2025-02-25T04:09:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a85400d1dc0e883754476e56eff9bee1cdeaa0f",
          "body": "* Fix legacy options leaking into request headers\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n* Mark more tests as integration\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\n\n---------\n\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Fix legacy options leaking into request headers (#310)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-25T04:09:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9b50b23a28be822cfa7ed9ae96cf8ec66cf4640",
          "body": "* Replace array by iterable in return type. Fix #307\n\nSigned-off-by: Romain Ruaud <romain.ruaud@smile.fr>\n\n* chore: update changelog according to latest PR\n\nSigned-off-by: Romain Ruaud <romain.ruaud@smile.fr>\n\n---------\n\nSigned-off-by: Romain Ruaud <romain.ruaud@smile.fr>",
          "is_bot": false,
          "headline": "Replace array by iterable in return type. Fix #307 (#308)",
          "author_name": "Romain Ruaud",
          "author_login": "romainruaud",
          "committed_at": "2025-02-24T09:53:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ddad3d87ad44a39661fe314af374f34b40f2df6",
          "body": "…5-02-21) (#302)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: kimpepper <kimpepper@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-02-21T03:43:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5385495bd15f9daf618825a4397bd1f5be93ace",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Fix changelog updater (#306)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-21T03:09:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac613606cb9add78122700bb730bfbba9e6547a6",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Back to dev version (#305)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-21T03:09:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59302e519538d98644caf4441e7dc09b4c3da11a",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Prepare 2.4.2 changelog for release (#303)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-20T07:13:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "831791cbdb209e278b4b5fc7644a7e51add7b3d3",
          "body": "…5-02-18) (#298)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-02-20T02:20:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec2b48a8cbd3d775653b50b07cf779260a94d9b9",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>\nCo-authored-by: Romain Ruaud <romain.ruaud@smile.fr>",
          "is_bot": false,
          "headline": "Fix async support (#300)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-19T10:14:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14181faf3f728754d19a5739227f089cab32528c",
          "body": "* Update user guide with new factory approach\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n* Update USER_GUIDE.md\r\n\r\nCo-authored-by: Shyim <github@shyim.de>\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n* Update USER_GUIDE.md\r\n\r\nCo-authored-by: Daniel (dB.) Doubrovkine <dblock@dblock.org>\r\n\n[…]\nff-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n---------\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\nCo-authored-by: Shyim <github@shyim.de>\r\nCo-authored-by: Daniel (dB.) Doubrovkine <dblock@dblock.org>",
          "is_bot": false,
          "headline": "Update user guide with new factory approach (#291)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-12T21:42:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ce3d2847c4a1453bac6b1aa9a7838c266ec51228",
          "body": "* Fix some deprecation warnings\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n* Generate API\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n* Move the deprecation trigger to the methods\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n---------\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Fix deprecated class instantiation warnings (#295)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-11T07:24:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae12b9e5f90b8c76e8a19e2134c5f3eb8994d8e4",
          "body": "Signed-off-by: Soner Sayakci <s.sayakci@gmail.com>",
          "is_bot": false,
          "headline": "chore: prepare changelog for release (#293)",
          "author_name": "Shyim",
          "author_login": "shyim",
          "committed_at": "2025-02-10T11:12:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "454a0addcd9b7439c75e7d0429ab8f31089c7d7a",
          "body": "Signed-off-by: Soner Sayakci <s.sayakci@gmail.com>",
          "is_bot": false,
          "headline": "fix: reusage of parameters (#292)",
          "author_name": "Shyim",
          "author_login": "shyim",
          "committed_at": "2025-02-10T10:37:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23fd2457f37d39ffc78009e45ea3d41f6616a2f0",
          "body": "Signed-off-by: dblock <dblock@amazon.com>",
          "is_bot": false,
          "headline": "Re-add a PSR guide. (#290)",
          "author_name": "Daniel (dB.) Doubrovkine",
          "author_login": "dblock",
          "committed_at": "2025-02-06T20:58:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2706543c79e8732c2942ad9566c613d0eec79c5e",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Make registered namespaces and optional param (#286)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-06T12:22:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7022ac8861f60ef622df6b777518936c9162819",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Add Client factories for Guzzle and Symfony (#287)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-06T11:16:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d35ea28b2ce991b9e4bd338833ffa613f19bef5e",
          "body": "* Fix imports and whitespace\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n* Clean up code\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n---------\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Clean up imports and whitespace (#282)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-03T23:03:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70a57028ed5de651be01fe200a45eff3067f18cf",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Back to dev (#279)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-03T22:21:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29111c4aa317c99daf8682d54d4ba332c057d044",
          "body": "Signed-off-by: dblock <dblock@amazon.com>",
          "is_bot": false,
          "headline": "Reduce the number of approvers for release to 1. (#280)",
          "author_name": "Daniel (dB.) Doubrovkine",
          "author_login": "dblock",
          "committed_at": "2025-02-03T22:03:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d87430d30efd6020e09c09fdb72a816d0e6512db",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Preparing for 2.4.0 release (#277)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-03T21:39:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "672a6a10c57e4deefec5779a5dbe3e2d1b09a21d",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Remove ksort for request params (#276)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-03T21:06:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "289a387cc0eef5e99864162ca1d5a04de73d6978",
          "body": "…eplace with new ones (#274)\n\n* Deprecate remaining exceptions\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n* Generate API\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n---------\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Deprecate remaining exceptions in \\OpenSearch\\Common\\Exceptions and r…",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-03T07:43:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9ebb864bc8106bb77a69151f56fd7f83f6861f7",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Serialize boolean query string params as strings (#273)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-03T07:42:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "455b7f1e682a442220a33724484f877c4927ca47",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Add php cs fixer rule to remove unused imports (#275)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-02-03T07:33:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92b8e45e67e3ae78db6e3dee184f975eb538ef2f",
          "body": "* Deprecate namespaces no longer in API spec\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\nUpdate changelog\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n* Update CHANGELOG.md\r\n\r\nCo-authored-by: Daniel (dB.) Doubrovkine <dblock@dblock.org>\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n---------\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\nCo-authored-by: Daniel (dB.) Doubrovkine <dblock@dblock.org>",
          "is_bot": false,
          "headline": "Deprecate namespaces no longer in API spec (#270)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-01-30T08:47:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e63822e5dbe99cbcbf7988aceb1a62d95a67c1c",
          "body": "* Adds client factories\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n* Split out decider and add tests\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n---------\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Adds http client factories (#271)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-01-30T08:36:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b785816b666c19bb6bddcda8e699eacbfe6b40b8",
          "body": "Signed-off-by: Andriy Redko <andriy.redko@aiven.io>",
          "is_bot": false,
          "headline": "Fix JDK version for OpenSearch 1.x release branch (#272)",
          "author_name": "Andriy Redko",
          "author_login": "reta",
          "committed_at": "2025-01-28T17:36:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd6c7f80ac3821f149389dbf308619c93e4703a9",
          "body": "…5-01-26) (#269)\n\nSigned-off-by: GitHub <noreply@github.com>\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-01-26T08:04:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "885ca92bea7a55ba0692c3e24332103cdf5fab9f",
          "body": "…5-01-24) (#268)\n\nSigned-off-by: GitHub <noreply@github.com>\r\nCo-authored-by: kimpepper <kimpepper@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-01-24T10:20:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40edf04c405f956b32dd2b5f3b3cb79f2820ed10",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Bump java version to 21 for unreleased tests (#267)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-01-24T07:47:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8326da161971c8066d6f850838d93508183f8b58",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Update deprecation message to specify version 2.4.0 not 2.3.2 (#265)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-01-23T22:41:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "079d337d18e9940000fbac02d800863d0b7a5b85",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Deprecate more unused classes (#264)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-01-23T14:20:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7582a53c6867bd287d5d4f3692a5a07be3bdd361",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Add phpstan/phpstan-phpunit (#263)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-01-23T10:21:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba3e253acdc570a34341d645e1367adec9e1a9d2",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Add phpstan baseline (#259)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-01-23T09:38:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "502370822b4b4ccfe57723584635adb64d8b0976",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Add phpstan deprecation rules (#258)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-01-23T00:22:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3fb4525ac27ad6624e5f6c0f5d4238a112c0e0f7",
          "body": "…5-01-22) (#243)\n\nSigned-off-by: GitHub <noreply@github.com>\r\nCo-authored-by: dblock <dblock@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated opensearch-php to reflect the latest OpenSearch API spec (202…",
          "author_name": "opensearch-trigger-bot[bot]",
          "author_login": "opensearch-trigger-bot[bot]",
          "committed_at": "2025-01-22T17:42:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70e71ffe98409d7345aac371c7cd5ed72a6731eb",
          "body": "* Fix up UPGRADING.md.\r\n\r\nSigned-off-by: dblock <dblock@amazon.com>\r\n\r\n* Added optional headers to the AWS SigningDecorator.\r\n\r\nSigned-off-by: dblock <dblock@amazon.com>\r\n\r\n* Raise an error when host header is empty.\r\n\r\nSigned-off-by: dblock <dblock@amazon.com>\r\n\r\n* Require Host.\r\n\r\nCo-authored-by: \n[…]\noff-by: dblock <dblock@amazon.com>\r\n\r\n---------\r\n\r\nSigned-off-by: dblock <dblock@amazon.com>\r\nSigned-off-by: Daniel (dB.) Doubrovkine <dblock@dblock.org>\r\nCo-authored-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Added optional headers to the AWS SigningDecorator. (#253)",
          "author_name": "Daniel (dB.) Doubrovkine",
          "author_login": "dblock",
          "committed_at": "2025-01-18T04:32:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d30188f178bdbdcbab916bc4f27790932c84ad96",
          "body": "* Handle HTTP exceptions in HttpTransport\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n* Generate Client\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n---------\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Handle HTTP exceptions in HttpTransport (#254)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-01-17T13:07:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "274adf21d3cd7b1a3a5a1b06895dad2953ab1cab",
          "body": "Signed-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Add decorator tests for guzzle and symfony (#256)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-01-16T19:00:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ff7088b6f7c6de85be73b284419d8efdc5002aa",
          "body": "* Fix required model id arg for ML Namespace\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n* Generate API\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>\r\n\r\n---------\r\n\r\nSigned-off-by: Kim Pepper <kim@pepper.id.au>",
          "is_bot": false,
          "headline": "Fix missing required $model_id param in GetModel (#255)",
          "author_name": "Kim Pepper",
          "author_login": "kimpepper",
          "committed_at": "2025-01-16T18:57:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 21,
      "commits_last_year": 39,
      "latest_release_at": "2026-03-24T06:07:58Z",
      "latest_release_tag": "2.6.0",
      "releases_from_tags": false,
      "days_since_last_push": 27,
      "active_weeks_last_year": 21,
      "days_since_latest_release": 122,
      "mean_days_between_releases": 45.9
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 87,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "opensearch-project/opensearch-php",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "client",
            "search",
            "elasticsearch",
            "opensearch"
          ],
          "ecosystem": "packagist",
          "matches_repo": true,
          "registry_url": "https://packagist.org/packages/opensearch-project/opensearch-php",
          "is_deprecated": false,
          "latest_version": "2.6.0",
          "repository_url": "https://github.com/opensearch-project/opensearch-php",
          "versions_count": 21,
          "total_downloads": 29743926,
          "dependents_count": 66,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 1457257,
          "first_published_at": null,
          "latest_published_at": "2026-03-24T03:15:15Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 122
        }
      ]
    },
    "popularity": {
      "forks": 76,
      "stars": 157,
      "watchers": 14,
      "fork_history": {
        "days": [
          {
            "date": "2021-11-12",
            "count": 1
          },
          {
            "date": "2022-01-01",
            "count": 1
          },
          {
            "date": "2022-01-03",
            "count": 1
          },
          {
            "date": "2022-02-01",
            "count": 1
          },
          {
            "date": "2022-02-03",
            "count": 1
          },
          {
            "date": "2022-03-29",
            "count": 1
          },
          {
            "date": "2022-05-05",
            "count": 1
          },
          {
            "date": "2022-05-12",
            "count": 1
          },
          {
            "date": "2022-06-08",
            "count": 1
          },
          {
            "date": "2022-06-19",
            "count": 1
          },
          {
            "date": "2022-06-22",
            "count": 1
          },
          {
            "date": "2022-06-24",
            "count": 1
          },
          {
            "date": "2022-06-29",
            "count": 1
          },
          {
            "date": "2022-07-06",
            "count": 1
          },
          {
            "date": "2022-07-08",
            "count": 1
          },
          {
            "date": "2022-07-13",
            "count": 1
          },
          {
            "date": "2022-07-17",
            "count": 1
          },
          {
            "date": "2022-07-21",
            "count": 1
          },
          {
            "date": "2022-09-08",
            "count": 1
          },
          {
            "date": "2022-10-14",
            "count": 1
          },
          {
            "date": "2022-10-17",
            "count": 1
          },
          {
            "date": "2022-10-25",
            "count": 1
          },
          {
            "date": "2022-11-15",
            "count": 1
          },
          {
            "date": "2022-11-17",
            "count": 1
          },
          {
            "date": "2022-11-28",
            "count": 1
          },
          {
            "date": "2023-01-05",
            "count": 1
          },
          {
            "date": "2023-01-16",
            "count": 1
          },
          {
            "date": "2023-02-02",
            "count": 1
          },
          {
            "date": "2023-02-03",
            "count": 1
          },
          {
            "date": "2023-02-04",
            "count": 1
          },
          {
            "date": "2023-03-27",
            "count": 1
          },
          {
            "date": "2023-03-29",
            "count": 1
          },
          {
            "date": "2023-04-05",
            "count": 1
          },
          {
            "date": "2023-05-15",
            "count": 1
          },
          {
            "date": "2023-05-19",
            "count": 1
          },
          {
            "date": "2023-05-26",
            "count": 1
          },
          {
            "date": "2023-06-13",
            "count": 1
          },
          {
            "date": "2023-07-06",
            "count": 1
          },
          {
            "date": "2023-10-11",
            "count": 1
          },
          {
            "date": "2023-10-23",
            "count": 2
          },
          {
            "date": "2023-11-18",
            "count": 1
          },
          {
            "date": "2023-11-22",
            "count": 1
          },
          {
            "date": "2023-12-02",
            "count": 1
          },
          {
            "date": "2023-12-03",
            "count": 1
          },
          {
            "date": "2024-02-15",
            "count": 1
          },
          {
            "date": "2024-02-20",
            "count": 1
          },
          {
            "date": "2024-03-04",
            "count": 1
          },
          {
            "date": "2024-04-15",
            "count": 1
          },
          {
            "date": "2024-04-22",
            "count": 1
          },
          {
            "date": "2024-08-09",
            "count": 1
          },
          {
            "date": "2024-09-30",
            "count": 1
          },
          {
            "date": "2024-10-18",
            "count": 1
          },
          {
            "date": "2024-10-21",
            "count": 1
          },
          {
            "date": "2024-12-19",
            "count": 1
          },
          {
            "date": "2025-01-09",
            "count": 1
          },
          {
            "date": "2025-01-28",
            "count": 2
          },
          {
            "date": "2025-02-17",
            "count": 1
          },
          {
            "date": "2025-02-27",
            "count": 1
          },
          {
            "date": "2025-04-22",
            "count": 1
          },
          {
            "date": "2025-04-25",
            "count": 1
          },
          {
            "date": "2025-05-20",
            "count": 1
          },
          {
            "date": "2025-08-04",
            "count": 1
          },
          {
            "date": "2025-08-15",
            "count": 1
          },
          {
            "date": "2025-11-05",
            "count": 1
          },
          {
            "date": "2025-12-15",
            "count": 1
          },
          {
            "date": "2026-01-21",
            "count": 1
          },
          {
            "date": "2026-01-25",
            "count": 1
          },
          {
            "date": "2026-03-18",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-05-20",
            "count": 1
          },
          {
            "date": "2026-05-22",
            "count": 1
          },
          {
            "date": "2026-06-25",
            "count": 2
          }
        ],
        "complete": true,
        "collected": 75,
        "total_forks": 76
      },
      "star_history": null,
      "open_issues_and_prs": 40
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "samples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 139880,
      "source_files_sampled": 747,
      "oversized_source_files": 4,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "composer.json",
        "samples/composer.json"
      ],
      "advisories": {
        "error": "No resolved dependencies carried a version and a supported ecosystem",
        "scope": "repository_graph",
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 32,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "packagist"
      ],
      "dependencies": [
        {
          "name": "ezimuel/ringphp",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^1.4.0"
        },
        {
          "name": "psr/http-client",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^1.0.3"
        },
        {
          "name": "psr/http-client-implementation",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "*"
        },
        {
          "name": "psr/http-factory",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^1.1.0"
        },
        {
          "name": "psr/http-factory-implementation",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "*"
        },
        {
          "name": "psr/http-message",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^2.0"
        },
        {
          "name": "psr/http-message-implementation",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "*"
        },
        {
          "name": "psr/log",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^3.0.2"
        },
        {
          "name": "symfony/yaml",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^v6.4.26|^7.3.5|^v8.0.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "ezimuel/ringphp",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "psr/http-client",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "psr/http-client-implementation",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "psr/http-factory",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "psr/http-factory-implementation",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "psr/http-message",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "psr/http-message-implementation",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "psr/log",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "symfony/yaml",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "aws/aws-sdk-php",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "colinodell/psr-testlogger",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "ext-curl",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "ext-json",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "ext-zip",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "friendsofphp/php-cs-fixer",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "guzzlehttp/psr7",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "mockery/mockery",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "opensearch-project/opensearch-php",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "php",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "php-http/discovery",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "phpstan/extension-installer",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "phpstan/phpstan",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "phpstan/phpstan-deprecation-rules",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "phpstan/phpstan-mockery",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "phpstan/phpstan-phpunit",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "phpunit/phpunit",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "react/promise",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "symfony/console",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "symfony/finder",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "symfony/http-client",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "symfony/http-client-contracts",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "twig/twig",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 32,
        "direct_count": 9,
        "indirect_count": 23
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 219,
        "open_issues": 38,
        "closed_ratio": 0.755,
        "closed_issues": 117,
        "closed_unmerged_prs": 35
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "polyfractal",
          "commits": 1286,
          "avatar_url": "https://avatars.githubusercontent.com/u/1224228?v=4"
        },
        {
          "type": "User",
          "login": "ezimuel",
          "commits": 450,
          "avatar_url": "https://avatars.githubusercontent.com/u/475967?v=4"
        },
        {
          "type": "User",
          "login": "kimpepper",
          "commits": 61,
          "avatar_url": "https://avatars.githubusercontent.com/u/6132?v=4"
        },
        {
          "type": "User",
          "login": "philkra",
          "commits": 57,
          "avatar_url": "https://avatars.githubusercontent.com/u/35487337?v=4"
        },
        {
          "type": "User",
          "login": "szabosteve",
          "commits": 56,
          "avatar_url": "https://avatars.githubusercontent.com/u/22324794?v=4"
        },
        {
          "type": "User",
          "login": "shyim",
          "commits": 46,
          "avatar_url": "https://avatars.githubusercontent.com/u/6224096?v=4"
        },
        {
          "type": "User",
          "login": "mhujer",
          "commits": 25,
          "avatar_url": "https://avatars.githubusercontent.com/u/353372?v=4"
        },
        {
          "type": "User",
          "login": "dblock",
          "commits": 18,
          "avatar_url": "https://avatars.githubusercontent.com/u/542335?v=4"
        },
        {
          "type": "User",
          "login": "simplechris",
          "commits": 17,
          "avatar_url": "https://avatars.githubusercontent.com/u/520892?v=4"
        },
        {
          "type": "User",
          "login": "TomasVotruba",
          "commits": 14,
          "avatar_url": "https://avatars.githubusercontent.com/u/924196?v=4"
        }
      ],
      "contributors_sampled": 98,
      "top_contributor_share": 0.576
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "add-untriaged.yml",
        "backport.yml",
        "changelog_verifier.yml",
        "dependabot_pr.yml",
        "links.yml",
        "release.yml",
        "test.yml",
        "test_unreleased.yml",
        "update_api.yml",
        "update_docs.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        ".php-cs-fixer.dist.php"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 4,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 10,
            "reason": "all changesets reviewed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 44 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 9,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 5,
            "reason": "6 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 5",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "08e57621ab6915dc3dc94e07e10b332381453037",
        "ran_at": "2026-07-24T06:51:54Z",
        "aggregate_score": 7,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T04:38:16Z",
      "oldest_open_prs": [
        {
          "number": 373,
          "created_at": "2025-11-14T05:06:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 405,
          "created_at": "2026-05-09T05:42:46Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-06-26T07:39:04Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": [
        {
          "number": 46,
          "created_at": "2022-03-14T14:59:05Z",
          "last_comment_at": "2024-05-23T07:57:41Z",
          "last_comment_author": "saimedhi"
        },
        {
          "number": 81,
          "created_at": "2022-09-08T02:00:16Z",
          "last_comment_at": "2024-05-23T08:43:59Z",
          "last_comment_author": "saimedhi"
        },
        {
          "number": 111,
          "created_at": "2022-12-05T14:46:36Z",
          "last_comment_at": "2023-07-12T11:09:07Z",
          "last_comment_author": "shyim"
        },
        {
          "number": 122,
          "created_at": "2023-02-09T13:58:58Z",
          "last_comment_at": "2024-05-23T08:56:46Z",
          "last_comment_author": "saimedhi"
        },
        {
          "number": 125,
          "created_at": "2023-02-16T17:29:33Z",
          "last_comment_at": "2023-04-05T17:16:09Z",
          "last_comment_author": "shyim"
        },
        {
          "number": 144,
          "created_at": "2023-04-04T19:38:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 145,
          "created_at": "2023-04-04T19:39:22Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 146,
          "created_at": "2023-04-04T19:40:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 147,
          "created_at": "2023-04-04T19:40:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 148,
          "created_at": "2023-04-04T19:41:14Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 149,
          "created_at": "2023-04-04T19:41:52Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 150,
          "created_at": "2023-04-04T19:43:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 151,
          "created_at": "2023-05-05T05:47:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 152,
          "created_at": "2023-05-06T15:37:03Z",
          "last_comment_at": "2024-05-23T09:20:04Z",
          "last_comment_author": "saimedhi"
        },
        {
          "number": 153,
          "created_at": "2023-05-13T14:25:40Z",
          "last_comment_at": "2024-05-23T09:38:49Z",
          "last_comment_author": "saimedhi"
        },
        {
          "number": 158,
          "created_at": "2023-06-13T16:24:19Z",
          "last_comment_at": "2023-06-13T19:54:08Z",
          "last_comment_author": "jrglasgow"
        },
        {
          "number": 173,
          "created_at": "2024-01-15T09:27:17Z",
          "last_comment_at": "2024-01-19T07:21:17Z",
          "last_comment_author": "arturkasperek"
        },
        {
          "number": 176,
          "created_at": "2024-03-02T09:17:55Z",
          "last_comment_at": "2024-05-23T10:00:40Z",
          "last_comment_author": "saimedhi"
        },
        {
          "number": 178,
          "created_at": "2024-03-25T13:27:36Z",
          "last_comment_at": "2024-09-05T15:16:58Z",
          "last_comment_author": "plumthedev"
        },
        {
          "number": 192,
          "created_at": "2024-05-20T13:32:27Z",
          "last_comment_at": "2025-02-10T16:25:16Z",
          "last_comment_author": "dblock"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/opensearch-project/opensearch-php",
    "host": "github.com",
    "name": "opensearch-php",
    "owner": "opensearch-project"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 73,
      "inputs": {
        "security": 70,
        "vitality": 71,
        "community": 76,
        "governance": 73,
        "engineering": 74
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 71,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "commits_last_year": 39,
              "human_commit_share": 0.8,
              "days_since_last_push": 27,
              "active_weeks_last_year": 21
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 27 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 27
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "21/52 weeks with commits",
                "points": 14.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 21
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "39 commits in the last year",
                "points": 14.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 39
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "6 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 5",
                "points": 5,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 82,
            "inputs": {
              "releases_count": 21,
              "latest_release_tag": "2.6.0",
              "releases_from_tags": false,
              "days_since_latest_release": 122,
              "mean_days_between_releases": 45.9
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "21 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 122 days ago",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 122
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~45.9 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 45.9
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 27,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 27 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 27
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 76,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "forks": 76,
              "stars": 157,
              "watchers": 14,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "157 stars",
                "points": 35.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 157
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "76 forks",
                "points": 15.6,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 76
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "14 watchers",
                "points": 6.2,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 14
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file present, not a recognized license",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "license_custom",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "excellent",
            "name": "Ecosystem adoption (downloads)",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "opensearch-project/opensearch-php"
              ],
              "dependents": 66,
              "ecosystems": "packagist",
              "total_downloads": 29743926,
              "monthly_downloads": 1457257
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "1,457,257 downloads/month across packagist",
                "points": 80,
                "status": "met",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 1457257,
                      "ecosystems": "packagist"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "66 packages depend on it",
                "points": 12.2,
                "status": "partial",
                "details": [
                  {
                    "code": "registry_dependents",
                    "params": {
                      "count": 66
                    }
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 73,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 42,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 98,
              "top_contributor_share": 0.576
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 58% of commits",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 58
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "98 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 98
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 44 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "merged_prs": 219,
              "open_issues": 38,
              "closed_issues": 117,
              "issue_closed_ratio": 0.755,
              "closed_unmerged_prs": 35
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "76% of issues closed",
                "points": 35.3,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 76
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "219/254 decided PRs merged",
                "points": 33,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 219,
                      "decided": 254
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "all changesets reviewed",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "followers": 3842,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "opensearch-project",
              "public_repos": 152,
              "account_age_days": 1966
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "3,842 followers of opensearch-project",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 3842,
                      "login": "opensearch-project"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "152 public repos, account ~5 yr old",
                "points": 23.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 152
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 5
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "opensearch-project/opensearch-php"
              ],
              "ecosystems": "packagist",
              "any_deprecated": false,
              "min_days_since_publish": 122
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on packagist",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "packagist"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 122 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 122
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "21 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 74,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "10 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".php-cs-fixer.dist.php",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".php-cs-fixer.dist.php"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "topics": [
                "hacktoberfest",
                "php"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "2 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 70,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "good",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 70,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 7
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "all changesets reviewed",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 44 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "6 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 5",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 20
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 47,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "80 of 80 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 80,
                      "sampled": 80
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 53,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".php-cs-fixer.dist.php",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".php-cs-fixer.dist.php"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "PHP",
              "largest_source_bytes": 139880,
              "source_files_sampled": 747,
              "oversized_source_files": 4
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "PHP without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "PHP"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "4/747 source files over 60KB",
                "points": 54.7,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 747,
                      "oversized": 4
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "samples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "samples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "samples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "No resolved dependencies carried a version and a supported ecosystem"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T06:52:23.472844Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/opensearch-project/opensearch-php.svg",
  "full_name": "opensearch-project/opensearch-php",
  "license_state": "custom",
  "license_spdx": null
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenPackagist.