原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [
"component",
"php",
"symfony",
"symfony-component"
],
"is_fork": false,
"size_kb": 55,
"has_wiki": false,
"homepage": "https://symfony.com/mailer",
"languages": {
"PHP": 35947
},
"pushed_at": "2026-07-26T14:34:27Z",
"created_at": "2023-07-09T07:20:43Z",
"owner_type": "Organization",
"updated_at": "2026-07-26T14:34:31Z",
"description": "Symfony Brevo Mailer Bridge",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "8.2",
"license_spdx_raw": "MIT",
"primary_language": "PHP",
"significant_languages": [
"PHP"
]
},
"owner": {
"blog": "https://symfony.com/",
"name": "Symfony",
"type": "Organization",
"login": "symfony",
"company": null,
"location": "The Internet",
"followers": 2177,
"avatar_url": "https://avatars.githubusercontent.com/u/143937?v=4",
"created_at": "2009-10-24T04:05:23Z",
"is_verified": null,
"public_repos": 414,
"account_age_days": 6119
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v8.1.0",
"kind": "minor",
"published_at": "2026-05-29T08:53:43Z"
},
{
"tag": "v8.1.0-RC1",
"kind": "prerelease",
"published_at": "2026-05-27T11:34:46Z"
},
{
"tag": "v8.0.13",
"kind": "patch",
"published_at": "2026-05-27T10:31:33Z"
},
{
"tag": "v7.4.13",
"kind": "patch",
"published_at": "2026-05-27T08:45:35Z"
},
{
"tag": "v6.4.41",
"kind": "patch",
"published_at": "2026-05-27T08:30:01Z"
},
{
"tag": "v8.1.0-BETA1",
"kind": "prerelease",
"published_at": "2026-05-06T14:29:17Z"
},
{
"tag": "v7.4.0",
"kind": "minor",
"published_at": "2025-11-27T13:57:30Z"
},
{
"tag": "v8.0.0",
"kind": "major",
"published_at": "2025-11-27T09:05:09Z"
},
{
"tag": "v8.0.0-RC1",
"kind": "prerelease",
"published_at": "2025-11-13T13:32:16Z"
},
{
"tag": "v7.4.0-RC1",
"kind": "prerelease",
"published_at": "2025-11-13T12:51:23Z"
},
{
"tag": "v8.0.0-BETA1",
"kind": "prerelease",
"published_at": "2025-10-28T10:06:38Z"
},
{
"tag": "v7.4.0-BETA1",
"kind": "prerelease",
"published_at": "2025-10-27T10:49:53Z"
},
{
"tag": "v7.3.2",
"kind": "patch",
"published_at": "2025-07-31T10:55:54Z"
},
{
"tag": "v7.2.9",
"kind": "patch",
"published_at": "2025-07-31T10:44:14Z"
},
{
"tag": "v6.4.24",
"kind": "patch",
"published_at": "2025-07-31T09:36:18Z"
},
{
"tag": "v7.3.0",
"kind": "minor",
"published_at": "2025-05-29T07:52:03Z"
},
{
"tag": "v7.3.0-RC1",
"kind": "prerelease",
"published_at": "2025-05-25T21:08:13Z"
},
{
"tag": "v7.3.0-BETA1",
"kind": "prerelease",
"published_at": "2025-05-02T09:27:59Z"
},
{
"tag": "v7.2.0",
"kind": "minor",
"published_at": "2024-11-29T08:46:54Z"
},
{
"tag": "v7.2.0-RC1",
"kind": "prerelease",
"published_at": "2024-11-13T15:20:04Z"
},
{
"tag": "v7.2.0-BETA1",
"kind": "prerelease",
"published_at": "2024-10-27T16:12:49Z"
},
{
"tag": "v7.1.6",
"kind": "patch",
"published_at": "2024-10-27T15:19:47Z"
},
{
"tag": "v6.4.13",
"kind": "patch",
"published_at": "2024-10-27T13:54:49Z"
},
{
"tag": "v7.1.4",
"kind": "patch",
"published_at": "2024-08-30T17:07:03Z"
},
{
"tag": "v6.4.11",
"kind": "patch",
"published_at": "2024-08-30T17:02:07Z"
},
{
"tag": "v7.1.1",
"kind": "patch",
"published_at": "2024-06-04T07:35:03Z"
},
{
"tag": "v7.0.8",
"kind": "patch",
"published_at": "2024-06-02T18:01:47Z"
},
{
"tag": "v6.4.8",
"kind": "patch",
"published_at": "2024-06-02T16:58:45Z"
},
{
"tag": "v7.1.0",
"kind": "minor",
"published_at": "2024-05-31T08:20:34Z"
},
{
"tag": "v7.1.0-RC1",
"kind": "prerelease",
"published_at": "2024-05-17T15:48:55Z"
},
{
"tag": "v7.1.0-BETA1",
"kind": "prerelease",
"published_at": "2024-05-02T13:09:32Z"
},
{
"tag": "v7.0.7",
"kind": "patch",
"published_at": "2024-04-29T12:51:30Z"
},
{
"tag": "v6.4.7",
"kind": "patch",
"published_at": "2024-04-29T12:10:48Z"
},
{
"tag": "v7.0.6",
"kind": "patch",
"published_at": "2024-04-03T06:18:51Z"
},
{
"tag": "v6.4.6",
"kind": "patch",
"published_at": "2024-04-03T06:12:39Z"
},
{
"tag": "v7.0.5",
"kind": "patch",
"published_at": "2024-03-04T21:09:29Z"
},
{
"tag": "v6.4.5",
"kind": "patch",
"published_at": "2024-03-04T21:05:12Z"
},
{
"tag": "v7.0.3",
"kind": "patch",
"published_at": "2024-01-31T09:12:18Z"
},
{
"tag": "v6.4.3",
"kind": "patch",
"published_at": "2024-01-31T07:33:26Z"
},
{
"tag": "v7.0.0",
"kind": "major",
"published_at": "2023-11-29T11:04:12Z"
},
{
"tag": "v6.4.0",
"kind": "minor",
"published_at": "2023-11-29T10:49:37Z"
},
{
"tag": "v7.0.0-RC1",
"kind": "prerelease",
"published_at": "2023-11-15T16:34:26Z"
},
{
"tag": "v6.4.0-RC1",
"kind": "prerelease",
"published_at": "2023-11-15T16:12:00Z"
},
{
"tag": "v7.0.0-BETA3",
"kind": "prerelease",
"published_at": "2023-11-10T14:45:51Z"
},
{
"tag": "v6.4.0-BETA3",
"kind": "prerelease",
"published_at": "2023-11-10T14:32:23Z"
},
{
"tag": "v7.0.0-BETA1",
"kind": "prerelease",
"published_at": "2023-10-21T14:33:49Z"
},
{
"tag": "v6.4.0-BETA1",
"kind": "prerelease",
"published_at": "2023-10-21T14:03:57Z"
}
],
"recent_commits": [
{
"oid": "7cc0d1f6e05b45aefb10e506515de213e8c51a19",
"body": "The factory hardcoded port 465 and ignored the DSN port, so reaching Brevo on\n587 with STARTTLS meant falling back to a generic smtp:// DSN and losing the\nbridge.\n\nThe port is left nullable so the default lives in one place, and the TLS mode\nis decided by EsmtpTransport, which already turns port 465 into implicit TLS.",
"is_bot": false,
"headline": "[BrevoMailer] Allow configuring the SMTP port through the DSN",
"author_name": "Tomasz Ignatiuk",
"author_login": "thomas2411",
"committed_at": "2026-07-26T14:31:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca9952e1211f603a0a4db8ac033c3bc805de52b7",
"body": "* 8.0:\n Drop PR warning and auto-closing on subtree splits\n Fix merge\n [Validator] Support SVG dimensions with units\n Remove review state from Serbian translations\n [Translation] Copy domains metadata when moving messages to intl ones\n [Form] Add missing translation for invalid UUID\n fix(tran\n[…]\nlation messages\n [Security][HttpKernel] Add allowed_classes => false to unserialize() in CacheWarmerAggregate, LoggerDataCollector, and HttpCache Store\n Fix XMLHttpRequest URL handling in toolbar JS",
"is_bot": false,
"headline": "Merge branch '8.0' into 8.1",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-06-05T06:23:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "403540f847ab593667fa2bfbfbb73dedaf88cdaf",
"body": "* 7.4:\n Drop PR warning and auto-closing on subtree splits\n Fix merge\n [Validator] Support SVG dimensions with units\n Remove review state from Serbian translations\n [Translation] Copy domains metadata when moving messages to intl ones\n [Form] Add missing translation for invalid UUID\n fix(tran\n[…]\nlation messages\n [Security][HttpKernel] Add allowed_classes => false to unserialize() in CacheWarmerAggregate, LoggerDataCollector, and HttpCache Store\n Fix XMLHttpRequest URL handling in toolbar JS",
"is_bot": false,
"headline": "Merge branch '7.4' into 8.0",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-06-05T06:22:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0e3d1ecc62edd9aa10adc44bb11ab105bc771105",
"body": "* 6.4:\n Drop PR warning and auto-closing on subtree splits\n Fix merge\n Remove review state from Serbian translations\n [Translation] Copy domains metadata when moving messages to intl ones\n [Form] Add missing translation for invalid UUID\n fix(translations): fix sr-Latn validation messages and v\n[…]\nlation messages\n [Security][HttpKernel] Add allowed_classes => false to unserialize() in CacheWarmerAggregate, LoggerDataCollector, and HttpCache Store\n Fix XMLHttpRequest URL handling in toolbar JS",
"is_bot": false,
"headline": "Merge branch '6.4' into 7.4",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-06-05T06:22:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1a5527b708eaa94fd1a107015210e06ab6d21ff9",
"body": null,
"is_bot": false,
"headline": "Drop PR warning and auto-closing on subtree splits",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-06-05T06:18:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ff512ea263d1c52be95cf68fb846ac82fd013e1",
"body": null,
"is_bot": false,
"headline": "Add call to backers in README files",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-05-29T05:06:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "554db0f805960f61cb8c31c730e07fd3b80e97e1",
"body": "* 8.0: (49 commits)\n [Runtime][FrameworkBundle] Trust argv on CLI-like SAPIs in the remaining QUERY_STRING gates\n Fix tests and merge resolution after merging 6.4 into 7.4\n [FrameworkBundle] Allow to pass `doctrine_open_transaction_logger`’s entity manager name positionally\n Remove protectedHead\n[…]\ntion/Loader/YamlFileLoader.php\n#\tsrc/Symfony/Component/HttpClient/CachingHttpClient.php\n#\tsrc/Symfony/Component/HttpClient/Tests/CachingHttpClientTest.php\n#\tsrc/Symfony/Component/HttpKernel/Kernel.php",
"is_bot": false,
"headline": "Merge branch '8.0' into 8.1",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-05-23T18:18:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "59bca94cc34eaabe657d9f517415a85286917166",
"body": "* 7.4: (46 commits)\n [Runtime][FrameworkBundle] Trust argv on CLI-like SAPIs in the remaining QUERY_STRING gates\n Fix tests and merge resolution after merging 6.4 into 7.4\n [FrameworkBundle] Allow to pass `doctrine_open_transaction_logger`’s entity manager name positionally\n Remove protectedHead\n[…]\nLOG-8.0.md\n#\tsrc/Symfony/Component/HttpKernel/Kernel.php\n#\tsrc/Symfony/Component/Mime/Part/SMimePart.php\n#\tsrc/Symfony/Component/Mime/Part/TextPart.php\n#\tsrc/Symfony/Component/String/UnicodeString.php",
"is_bot": false,
"headline": "Merge branch '7.4' into 8.0",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-05-23T18:05:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2f7aaebc500b06862865e5b4ec227e35573bda44",
"body": "* 6.4:\n [FrameworkBundle] Allow to pass `doctrine_open_transaction_logger`’s entity manager name positionally\n [Scheduler] Recover pending RecurringMessages after consumer stops midway\n [SecurityBundle] Fix Security::login() across firewalls\n [Routing][RateLimiter][Mime][Security] Harden __unser\n[…]\nTests/Generator/MessageGeneratorTest.php\n#\tsrc/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php\n#\tsrc/Symfony/Component/Translation/Bridge/Lokalise/Tests/LokaliseProviderTest.php",
"is_bot": false,
"headline": "Merge branch '6.4' into 7.4",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-05-23T16:05:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "19167ab50234f5e0a106130052f1db959081d476",
"body": "…arsers",
"is_bot": false,
"headline": "[Mailer] Harden default IP allowlist for Postmark and Brevo webhook p…",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-05-23T08:07:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a65959456f33f64f3ee90aa0837830a5d89608d5",
"body": "* 8.0:\n [Security] Throw BadCredentialsException on empty JSON login username/password\n [Routing] Honor the Request's method in UrlMatcher::matchRequest()\n [DependencyInjection] Log every build parameter removed during compilation\n [Serializer] Remove @internal from ClassMetadataInterface and At\n[…]\nake `BackedEnumNormalizer` unconditionally return `null` on invalid value if `allow_invalid_values` is set\n [Cache] Ensure internal state is cleared in TagAwareAdapter::reset() even on commit failure",
"is_bot": false,
"headline": "Merge branch '8.0' into 8.1",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-04-18T13:52:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7734344c2441dbf845ec1875445ecb144e942a3a",
"body": "* 7.4:\n [Security] Throw BadCredentialsException on empty JSON login username/password\n [Routing] Honor the Request's method in UrlMatcher::matchRequest()\n [DependencyInjection] Log every build parameter removed during compilation\n [Serializer] Remove @internal from ClassMetadataInterface and At\n[…]\nake `BackedEnumNormalizer` unconditionally return `null` on invalid value if `allow_invalid_values` is set\n [Cache] Ensure internal state is cleared in TagAwareAdapter::reset() even on commit failure",
"is_bot": false,
"headline": "Merge branch '7.4' into 8.0",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-04-18T13:51:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f1471156d37888e07d511d3b3f7837b70e23758e",
"body": null,
"is_bot": false,
"headline": "Update XSD references in phpunit.xml.dist files",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-04-18T13:18:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b71e34789362cab4aa7452836bf0cf12a682ed41",
"body": null,
"is_bot": false,
"headline": "Bump to php >= 8.4.1",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2026-04-07T06:26:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f1ef26ffe147e9185531030fc1503ed7b63fa0ef",
"body": null,
"is_bot": false,
"headline": "CS fixes",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2025-08-04T08:00:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba5d44aa012a948810dcdcc69ccb53f4b4e040bb",
"body": "* 7.4:\n replace PHPUnit annotations with attributes",
"is_bot": false,
"headline": "Merge branch '7.4' into 8.0",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2025-08-04T07:36:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2208a017fd10ef1499e4da1e8138eff83be1cf7c",
"body": null,
"is_bot": false,
"headline": "replace PHPUnit annotations with attributes",
"author_name": "Christian Flothmann",
"author_login": "xabbuh",
"committed_at": "2025-08-04T07:05:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57e321bf0419f8af7452f2dbfffae05361f158e3",
"body": "* 7.4:\n run tests using PHPUnit 11.5\n make data provider static\n [Lock] Fix using fractional TTLs on all platforms\n [Lock] Fixes an issue with PostgreSQL when using fractional TTLs\n [Console][Table] Fix unnecessary wrapping\n [DependencyInjection] Deprecate registering a service without a class\n[…]\ncache] RedisTrait::doFetch should use pipeline instead of mget for Relay\\Cluster\n relax assertions for forward compatibility with Symfony 7.4\n [Console][Table] Fix invalid UTF-8 due to text wrapping",
"is_bot": false,
"headline": "Merge branch '7.4' into 8.0",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2025-08-01T16:41:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5881e28a24c84a649019de5e7ff66a281983e6e6",
"body": null,
"is_bot": false,
"headline": "run tests using PHPUnit 11.5",
"author_name": "Christian Flothmann",
"author_login": "xabbuh",
"committed_at": "2025-07-31T09:31:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0a76603e500370f8256a1c1bf5cf56fe03b310bb",
"body": "* 7.4:\n [Serializer] Make data provider return type match its PHPDoc\n fix fixture files locations\n resolve conflict\n [Console] Fix `TreeHelper::addChild` when providing a string\n [Serializer] Handle invalid mapping type property type\n [Config] Do not generate unreachable configuration paths\n \n[…]\ndle] Fix cache warmers tests\n [AssetMapper] Add support for loading JSON using import statements\n [BrowserKit] Add PHPUnit constraints: `BrowserHistoryIsOnFirstPage` and `BrowserHistoryIsOnLastPage`",
"is_bot": false,
"headline": "Merge branch '7.4' into 8.0",
"author_name": "Christian Flothmann",
"author_login": "xabbuh",
"committed_at": "2025-07-28T07:34:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8b54792bcb1972777729ee6c8b7a26822e889bfe",
"body": "This PR was merged into the 7.4 branch.\n\nDiscussion\n----------\n\nFix typos\n\n| Q | A\n| ------------- | ---\n| Branch? | 7.4\n| Bug fix? | no\n| New feature? | no\n| Deprecations? | no\n| Issues | -\n| License | MIT\n\nCommits\n-------\n\n80d0db1f980 Fix typos",
"is_bot": false,
"headline": "minor #61227 Fix typos (nicolas-grekas)",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2025-07-24T16:41:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "508f3b0e1dc10d18503405ea5c5289e3fe7da98a",
"body": "* 7.4:\n fix merge\n add back setAccessible() for PHP 7 compatibility\n Update BrevoRequestParser.php\n [JsonStreamer] Add `include_null_properties` option\n [Translation] Add `StaticMessage`\n [Form][PhpUnitBridge] Remove usage of noop `ReflectionProperty::setAccessible()`\n fix compatibility with \n[…]\nializer] Remove require php 8.2 from tests\n [HttpKernel] Remove outdated phpdoc\n [Console] Fix JSON description for negatable input flags\n [JsonStreamer] Allow to access current object when writing",
"is_bot": false,
"headline": "Merge branch '7.4' into 8.0",
"author_name": "Christian Flothmann",
"author_login": "xabbuh",
"committed_at": "2025-07-24T13:18:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "85b1f5334ada5fea9526e6d8a14faac74bbe646f",
"body": null,
"is_bot": false,
"headline": "Fix typos",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2025-07-24T13:09:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f2ff2bab4b918990897f4b779c394097f745c940",
"body": "* 7.3:\n fix merge\n add back setAccessible() for PHP 7 compatibility\n Update BrevoRequestParser.php\n [Form][PhpUnitBridge] Remove usage of noop `ReflectionProperty::setAccessible()`\n fix compatibility with different Relay versions\n [Console] Fix JSON description for negatable input flags",
"is_bot": false,
"headline": "Merge branch '7.3' into 7.4",
"author_name": "Christian Flothmann",
"author_login": "xabbuh",
"committed_at": "2025-07-24T12:49:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e3efdac57c76eb0a504c2000aaa53abf370ea4ef",
"body": "* 6.4:\n add back setAccessible() for PHP 7 compatibility\n Update BrevoRequestParser.php\n [Form][PhpUnitBridge] Remove usage of noop `ReflectionProperty::setAccessible()`\n fix compatibility with different Relay versions\n [Console] Fix JSON description for negatable input flags",
"is_bot": false,
"headline": "Merge branch '6.4' into 7.2",
"author_name": "Christian Flothmann",
"author_login": "xabbuh",
"committed_at": "2025-07-24T11:52:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "21f6192abfb689d1830139ade1885615fac72a2d",
"body": "Regarding official Brevo documentation the IP range for webhook changed\r\n\r\nhttps://help.brevo.com/hc/en-us/articles/15127404548498-Brevo-IP-ranges-List-of-publicly-exposed-services",
"is_bot": false,
"headline": "Update BrevoRequestParser.php",
"author_name": "Julien ARBEY",
"author_login": "jarbey",
"committed_at": "2025-07-24T09:29:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5af1b071b01a1c62ee4a9e82d117c5655086f6c3",
"body": "* 7.4:\n [HttpKernel][Security] Refactor: use `getAttributes` with argument\n mark getRequiredOptions()/getDefaultOption() of UniqueEntity as deprecated\n do not install ext-zstd on PHP 8.5\n [DoctrineBridge] Prevent idle connection listener from running on subrequests\n optimize `in_array` calls\n \n[…]\nd options\n Fix @var phpdoc\n [Lock] [MongoDB] Enforce readPreference=primary and writeConcern=majority\n [FrameworkBundle] fix phpdoc in `MicroKernelTrait`\n Fixed validator translations for Albanian",
"is_bot": false,
"headline": "Merge branch '7.4' into 8.0",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2025-07-15T11:41:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bf1dbe5f9053f1f39eb99bfc0866d1cacc595941",
"body": null,
"is_bot": false,
"headline": "optimize `in_array` calls",
"author_name": "Gregor Harlan",
"author_login": "gharlan",
"committed_at": "2025-07-15T09:40:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b35d2ca2712ad39c9708d10fb06ddfa201bfd2a5",
"body": null,
"is_bot": false,
"headline": "CS fixes",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2025-07-10T08:14:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee35cc5ee1d8b2a61df11e27136ac55398628c3b",
"body": "* 7.4:\n [ObjectMapper] handle non existing property errors\n Fix AsCronTask not passing arguments to command\n [HttpFoundation] Fix deprecation in tests on PHP 8.5\n Fix typo\n [Cache] Bump ext-redis to 6.2 and ext-relay to 0.11 minimum\n [VarExporter] Dump implicit-nullable types as explicit to pr\n[…]\nndConstraintTestCase validator\n [Serializer] Fix readonly property initialization from incorrect scope\n Update BrevoRequestParser.php\n [JsonPath] Improve escape sequence validation in name selector",
"is_bot": false,
"headline": "Merge branch '7.4' into 8.0",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2025-07-09T10:08:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "745fb0cf9b4b26f8b43ff1051f5feb75c0f41208",
"body": "* 7.3:\n [ObjectMapper] handle non existing property errors\n Fix AsCronTask not passing arguments to command\n [HttpFoundation] Fix deprecation in tests on PHP 8.5\n Fix typo\n [VarExporter] Dump implicit-nullable types as explicit to prevent the corresponding deprecation\n [DependencyInjection] CS\n[…]\nndConstraintTestCase validator\n [Serializer] Fix readonly property initialization from incorrect scope\n Update BrevoRequestParser.php\n [JsonPath] Improve escape sequence validation in name selector",
"is_bot": false,
"headline": "Merge branch '7.3' into 7.4",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2025-07-09T09:57:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "68178a7b5f2f0e46e063f33b4d626d0991f9398c",
"body": "* 6.4:\n Fix typo\n [VarExporter] Dump implicit-nullable types as explicit to prevent the corresponding deprecation\n [Serializer] Fix readonly property initialization from incorrect scope\n Update BrevoRequestParser.php",
"is_bot": false,
"headline": "Merge branch '6.4' into 7.2",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2025-07-09T09:35:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e186b82474c9e01248fdc76dde863f693a01569c",
"body": null,
"is_bot": false,
"headline": "Update BrevoRequestParser.php",
"author_name": "Richard Henkenjohann",
"author_login": "richardhj",
"committed_at": "2025-07-07T21:21:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "210a6af2063f302c3e1d4e6cfc57aca859ffc2a6",
"body": null,
"is_bot": false,
"headline": "Bump Symfony 8 to PHP >= 8.4",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2025-06-03T12:29:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6bce1c85737a2f1659db9bc86bd2f5449c9eb39",
"body": null,
"is_bot": false,
"headline": "Allow Symfony ^8.0",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2025-06-02T14:13:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f8eaa8d16fda38ce31548130aee8e90d5d94d32d",
"body": "This PR was merged into the 7.2 branch.\n\nDiscussion\n----------\n\n[Mailer] deprecate the TransportFactoryTestCase\n\n| Q | A\n| ------------- | ---\n| Branch? | 7.2\n| Bug fix? | no\n| New feature? | no\n| Deprecations? | yes\n| Issues |\n| License | MIT\n\nCommits\n-------\n\ne878066cac8 deprecate the TransportFactoryTestCase",
"is_bot": false,
"headline": "feature #58351 [Mailer] deprecate the TransportFactoryTestCase (xabbuh)",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2024-09-28T08:24:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ad5db28a7c3bb6eb5b7e9c88f04577b3bd90d52",
"body": "* 7.1:\n Add PR template and auto-close PR on subtree split repositories",
"is_bot": false,
"headline": "Merge branch '7.1' into 7.2",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2024-09-25T14:21:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "91d6317b13e4eb4973f7b8387dc8d373f338cce4",
"body": "* 6.4:\n Add PR template and auto-close PR on subtree split repositories",
"is_bot": false,
"headline": "Merge branch '6.4' into 7.1",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2024-09-25T14:20:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fa1d07838dbe712e1b5a061ea8a2e2d9855cdcea",
"body": "* 5.4:\n Add PR template and auto-close PR on subtree split repositories",
"is_bot": false,
"headline": "Merge branch '5.4' into 6.4",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2024-09-25T14:18:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "34597feea1c5fa9c1a204f27e08aea45bc76ce62",
"body": null,
"is_bot": false,
"headline": "deprecate the TransportFactoryTestCase",
"author_name": "Christian Flothmann",
"author_login": "xabbuh",
"committed_at": "2024-09-23T09:20:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "78faaa25d09e621742bbe2e779408696220e10b7",
"body": "* 7.1:\n fix tests\n fix tests\n [DependencyInjection] Add tests for repeating `#[Autoconfigure]` attributes\n [DependencyInjection] Fix handling of repeated `#[Autoconfigure]` attributes\n update from Postgres 10 to 16\n [SecurityBundle] Make security schema deterministic\n [Translations][Core] Fix security Italian translation.\n clean up PHP version checks\n Support the `unique_proxy_open` event",
"is_bot": false,
"headline": "Merge branch '7.1' into 7.2",
"author_name": "Christian Flothmann",
"author_login": "xabbuh",
"committed_at": "2024-08-22T07:57:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be525f2efca63ec1f2c99b6fdcc7092aa154a5e6",
"body": "* 6.4:\n fix tests\n [DependencyInjection] Add tests for repeating `#[Autoconfigure]` attributes\n [DependencyInjection] Fix handling of repeated `#[Autoconfigure]` attributes\n [SecurityBundle] Make security schema deterministic\n [Translations][Core] Fix security Italian translation.\n clean up PHP version checks\n Support the `unique_proxy_open` event",
"is_bot": false,
"headline": "Merge branch '6.4' into 7.1",
"author_name": "Christian Flothmann",
"author_login": "xabbuh",
"committed_at": "2024-08-20T11:38:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d86de15eb689372c449b05dd52475c864f9d42f8",
"body": null,
"is_bot": false,
"headline": "Support the `unique_proxy_open` event",
"author_name": "Richard Henkenjohann",
"author_login": "richardhj",
"committed_at": "2024-08-16T23:52:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2690a0cdb7da2784fa10e81ce01fc9dbc6dc835f",
"body": null,
"is_bot": false,
"headline": "Prefix all sprintf() calls",
"author_name": "Alexander M. Turek",
"author_login": "derrabus",
"committed_at": "2024-06-20T15:52:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "379af6e26e5e9ac5654ab8d5f2e681c780edbb9a",
"body": "* 7.0:\n Remove subtree split checks\n Revert \"minor #54653 Auto-close PRs on subtree-splits (nicolas-grekas)\"",
"is_bot": false,
"headline": "Merge branch '7.0' into 7.1",
"author_name": "Fabien Potencier",
"author_login": "fabpot",
"committed_at": "2024-05-31T14:57:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "58080e5ef956f4a137637cf58b0adaf988f26211",
"body": null,
"is_bot": false,
"headline": "Remove subtree split checks",
"author_name": "Fabien Potencier",
"author_login": "fabpot",
"committed_at": "2024-05-31T14:51:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1b57908925048c2cb17f8088e0d387efa550834f",
"body": "* 7.0:\n Auto-close PRs on subtree-splits\n review German translation",
"is_bot": false,
"headline": "Merge branch '7.0' into 7.1",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2024-04-18T09:32:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "53dbeb6fca950204a5cbd1e0d5bd2519b55cab7c",
"body": "* 5.4:\n Auto-close PRs on subtree-splits\n review German translation",
"is_bot": false,
"headline": "Merge branch '5.4' into 6.4",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2024-04-18T09:22:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9cfe3f49b3f35590a2b2aa3ecace08ab44f0f0c7",
"body": "* 7.0:\n fix tests\n Drop test case\n Catch TableNotFoundException in MySQL delete\n [DoctrineBridge] Fix deprecation warning with ORM 3 when guessing field lengths\n Throw TransformationFailedException when there is a null bytes injection\n [Cache][Lock] Identify missing table in pgsql correctly an\n[…]\ndress failing integration tests\n [Mailer] [Brevo] Check that tags is present in payload before calling setTags\n [Serializer] Fix object normalizer when properties has the same name as their accessor",
"is_bot": false,
"headline": "Merge branch '7.0' into 7.1",
"author_name": "Christian Flothmann",
"author_login": "xabbuh",
"committed_at": "2024-03-19T09:27:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2620c3c9dca5a07eb03eaffb63e9a8e1ca61bf54",
"body": "… setTags",
"is_bot": false,
"headline": "[Mailer] [Brevo] Check that tags is present in payload before calling…",
"author_name": "Gálik Pál",
"author_login": "palgalik",
"committed_at": "2024-03-15T15:53:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aaf8c6fe3f390447d0b816e7cafb0baf4fdfa992",
"body": "* 7.0:\n [Security][Tests] Update functional tests to better reflect end-user scenarios\n [Clock] Add PHPUnit 10 attributes\n [AssetMapper] Fix `JavaScriptImportPathCompiler` regression in regex\n [HttpClient] Fix deprecation on PHP 8.3\n [Mailer][Brevo] Remove tags from mandatory event arguments\n [Validator] Simplify `NoSuspiciousCharactersValidator`",
"is_bot": false,
"headline": "Merge branch '7.0' into 7.1",
"author_name": "Wouter de Jong",
"author_login": "wouterj",
"committed_at": "2024-03-02T12:48:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c831a0de3e0e8295e39e394beaebbfc7ada7692b",
"body": "'tags' in not mandatory part of an event\ntherefore it got removed from the validation process",
"is_bot": false,
"headline": "[Mailer][Brevo] Remove tags from mandatory event arguments",
"author_name": "Gálik Pál",
"author_login": "palgalik",
"committed_at": "2024-02-27T16:56:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ee1e0a0ef4c29263e41f52a6310176984005547",
"body": "* 7.0:\n List CS fix in .git-blame-ignore-revs\n Fix implicitly-required parameters\n minor #53524 [Messenger] [AmazonSqs] Allow `async-aws/sqs` version 2 (smoench)\n Fix bad merge\n List CS fix in .git-blame-ignore-revs\n Fix implicitly-required parameters\n List CS fix in .git-blame-ignore-revs\n Apply php-cs-fixer fix --rules nullable_type_declaration_for_default_null_value\n [Messenger][AmazonSqs] Allow async-aws/sqs version 2",
"is_bot": false,
"headline": "Merge branch '7.0' into 7.1",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2024-01-23T15:06:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "21c02473c53ca8c3a9bed9d7e24276daa1f08049",
"body": "* 6.3:\n minor #53524 [Messenger] [AmazonSqs] Allow `async-aws/sqs` version 2 (smoench)\n Fix bad merge\n List CS fix in .git-blame-ignore-revs\n Fix implicitly-required parameters\n List CS fix in .git-blame-ignore-revs\n Apply php-cs-fixer fix --rules nullable_type_declaration_for_default_null_value",
"is_bot": false,
"headline": "Merge branch '6.3' into 6.4",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2024-01-23T14:51:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62d401013df7e08910247e9438d95db370879c05",
"body": "…ibutes",
"is_bot": false,
"headline": "[Mailer] [Bridges] Use CPP and add more `#[\\SensitiveParameter]` attr…",
"author_name": "Oskar Stark",
"author_login": "OskarStark",
"committed_at": "2024-01-02T12:33:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83db87e0f44653cd40aeef54a2f57ab6bfccadfe",
"body": null,
"is_bot": false,
"headline": "Check whether secrets are empty and mark them all as sensitive",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2023-11-06T17:20:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "365c17ad6d1bc44b39a7af25ff78c4f5af61104e",
"body": null,
"is_bot": false,
"headline": "relax constraints to also run tests with symfony/webhook 6.3",
"author_name": "Christian Flothmann",
"author_login": "xabbuh",
"committed_at": "2023-11-01T13:02:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "90a712f860962c2c2438d148a79523b1b36c6437",
"body": "This PR was merged into the 6.4 branch.\n\nDiscussion\n----------\n\n[Mailer][Brevo][Sendinblue] Fix typo\n\n| Q | A\n| ------------- | ---\n| Branch? | 6.4\n| Bug fix? | no\n| New feature? | no\n| Deprecations? | no\n| Tickets | --\n| License | MIT\n\nCommits\n-------\n\n87bdbc3286 [Mailer][Brevo][Sendinblue] Fix typo",
"is_bot": false,
"headline": "minor #52091 [Mailer][Brevo][Sendinblue] Fix typo (OskarStark)",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2023-10-17T11:46:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d216cc4e99c44373627e13db156f1144373108a",
"body": "…e key (stof)\n\nThis PR was merged into the 6.4 branch.\n\nDiscussion\n----------\n\n[Notifier] [Brevo] Handle error responses without a message key\n\n| Q | A\n| ------------- | ---\n| Branch? | 6.4\n| Bug fix? | yes\n| New feature? | no\n| Deprecations? | no\n| Tickets |\n| License \n[…]\ndecoding fails.\n\nThis is the same change than https://github.com/symfony/symfony/pull/52095 but for the new Brevo bridge\n\nCommits\n-------\n\n517ceaea03 Handle Brevo error responses without a message key",
"is_bot": false,
"headline": "bug #52096 [Notifier] [Brevo] Handle error responses without a messag…",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2023-10-17T11:44:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e762fe9129427295be02fb4fa6764fe7b4ace692",
"body": null,
"is_bot": false,
"headline": "[Mailer][Bridges] Allow Symfony 7",
"author_name": "Oskar Stark",
"author_login": "OskarStark",
"committed_at": "2023-10-17T11:43:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "228365d8258cdc18699da238dd13b8a568934983",
"body": null,
"is_bot": false,
"headline": "[Tests] Use `JsonMockResponse` where applicable",
"author_name": "Oskar Stark",
"author_login": "OskarStark",
"committed_at": "2023-10-17T11:40:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5724a2c2d0aee2f4bc4fc96ce272c306c4cbb12d",
"body": null,
"is_bot": false,
"headline": "Handle Brevo error responses without a message key",
"author_name": "Christophe Coevoet",
"author_login": "stof",
"committed_at": "2023-10-17T08:46:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3186ba69607420ff93d1dc907a393468af18d291",
"body": null,
"is_bot": false,
"headline": "[Mailer][Brevo][Sendinblue] Fix typo",
"author_name": "Oskar Stark",
"author_login": "OskarStark",
"committed_at": "2023-10-17T08:25:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b0461f5ab3f7ab3f54c0439de28c736875cdbab0",
"body": null,
"is_bot": false,
"headline": "[Mailer] Use idn encoded address otherwise Brevo throws an error",
"author_name": "Malte Müns",
"author_login": "etlam",
"committed_at": "2023-10-05T06:08:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "87449858faaf00954be1d9e8cc0b435d71cdea70",
"body": null,
"is_bot": false,
"headline": "Minor CS fixes",
"author_name": "Nicolas Grekas",
"author_login": "nicolas-grekas",
"committed_at": "2023-09-25T12:52:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c2a820e194130621931998546f58f47547467cc",
"body": null,
"is_bot": false,
"headline": "[RemoteEvent][Webhook] Add Brevo support",
"author_name": "blaugueux",
"author_login": "blaugueux",
"committed_at": "2023-08-04T06:12:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d1bb15fdb7a82b75895ac981d6664fa8baf2f613",
"body": null,
"is_bot": false,
"headline": "update the Brevo SMTP host",
"author_name": "Christian Flothmann",
"author_login": "xabbuh",
"committed_at": "2023-07-26T14:53:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "405edfd6e33cd8e1a1dd96e2279f7cca33cb518e",
"body": null,
"is_bot": false,
"headline": "Fix typo",
"author_name": "Fabien Potencier",
"author_login": "fabpot",
"committed_at": "2023-07-09T07:03:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "653cb29d970ce3797f9c75ba93691ef87548f296",
"body": null,
"is_bot": false,
"headline": "[Mailer] New Brevo mailer bridge (formerly Sendinblue)",
"author_name": "Pierre Tanguy",
"author_login": "PEtanguy",
"committed_at": "2023-07-09T07:02:28Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 47,
"commits_last_year": 19,
"latest_release_at": "2026-05-29T08:53:43Z",
"latest_release_tag": "v8.1.0",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 8,
"days_since_latest_release": 58,
"mean_days_between_releases": 21.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": false
},
"ecosystem": {
"packages": [
{
"name": "symfony/brevo-mailer",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "packagist",
"matches_repo": true,
"registry_url": "https://packagist.org/packages/symfony/brevo-mailer",
"is_deprecated": false,
"latest_version": "v8.1.0",
"repository_url": "https://github.com/symfony/brevo-mailer",
"versions_count": 47,
"total_downloads": 2963597,
"dependents_count": 3,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 232487,
"first_published_at": null,
"latest_published_at": "2026-05-29T05:06:50Z",
"latest_version_yanked": null,
"days_since_latest_publish": 58
}
]
},
"popularity": {
"forks": 4,
"stars": 25,
"watchers": 5,
"fork_history": {
"days": [
{
"date": "2024-08-27",
"count": 1
},
{
"date": "2024-09-19",
"count": 1
},
{
"date": "2024-11-27",
"count": 1
},
{
"date": "2026-01-16",
"count": 1
}
],
"complete": true,
"collected": 4,
"total_forks": 4
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 7307,
"source_files_sampled": 23,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"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": 4,
"direct_affected_count": 0
},
"ecosystems": [
"packagist"
],
"dependencies": [
{
"name": "symfony/mailer",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^7.4|^8.0"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "symfony/mailer",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "symfony/http-client",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "symfony/webhook",
"direct": false,
"version": null,
"ecosystem": "packagist"
}
],
"collected": true,
"truncated": false,
"total_count": 4,
"direct_count": 1,
"indirect_count": 3
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 0,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "nicolas-grekas",
"commits": 37,
"avatar_url": "https://avatars.githubusercontent.com/u/243674?v=4"
},
{
"type": "User",
"login": "xabbuh",
"commits": 12,
"avatar_url": "https://avatars.githubusercontent.com/u/1957048?v=4"
},
{
"type": "User",
"login": "OskarStark",
"commits": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/995707?v=4"
},
{
"type": "User",
"login": "fabpot",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/47313?v=4"
},
{
"type": "User",
"login": "palgalik",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/22448422?v=4"
},
{
"type": "User",
"login": "richardhj",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/1284725?v=4"
},
{
"type": "User",
"login": "derrabus",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/1506493?v=4"
},
{
"type": "User",
"login": "stof",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/439401?v=4"
},
{
"type": "User",
"login": "gharlan",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/330436?v=4"
},
{
"type": "User",
"login": "jarbey",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/34810646?v=4"
}
],
"contributors_sampled": 15,
"top_contributor_share": 0.536
},
"quality_signals": {
"has_ci": false,
"has_tests": true,
"ci_workflows": [],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"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": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": null,
"reason": "no pull request found",
"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": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 10 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": 0,
"reason": "no 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": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 8,
"reason": "10 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 8",
"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": "no SAST tool detected",
"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": "7cc0d1f6e05b45aefb10e506515de213e8c51a19",
"ran_at": "2026-07-26T14:39:32Z",
"aggregate_score": 4.6,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": null,
"oldest_open_prs": [],
"last_merged_pr_at": null,
"ci_last_conclusion": null,
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/symfony/brevo-mailer",
"host": "github.com",
"name": "brevo-mailer",
"owner": "symfony"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 57,
"inputs": {
"security": 46,
"vitality": 77,
"community": 61,
"governance": 53,
"engineering": 44
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 77,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 61,
"inputs": {
"commits_last_year": 19,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 8
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "8/52 weeks with commits",
"points": 5.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 8
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "19 commits in the last year",
"points": 11.7,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 19
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "10 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 8",
"points": 8,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"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": 100,
"inputs": {
"releases_count": 47,
"latest_release_tag": "v8.1.0",
"releases_from_tags": false,
"days_since_latest_release": 58,
"mean_days_between_releases": 21.9
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "47 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 47
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 58 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 58
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~21.9 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 21.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": 0,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 0 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 0
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 61,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 30,
"inputs": {
"forks": 4,
"stars": 25,
"watchers": 5,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "25 stars",
"points": 22.4,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 25
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "4 forks",
"points": 4,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 4
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "5 watchers",
"points": 3.3,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 5
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "excellent",
"name": "Community health",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"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": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "good",
"name": "Ecosystem adoption (downloads)",
"note": null,
"notes": [],
"value": 76,
"inputs": {
"packages": [
"symfony/brevo-mailer"
],
"dependents": 3,
"ecosystems": "packagist",
"total_downloads": 2963597,
"monthly_downloads": 232487
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "232,487 downloads/month across packagist",
"points": 71.6,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 232487,
"ecosystems": "packagist"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "3 packages depend on it",
"points": 4,
"status": "partial",
"details": [
{
"code": "registry_dependents",
"params": {
"count": 3
}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 53,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 43,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 15,
"top_contributor_share": 0.536
},
"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 54% of commits",
"points": 10.4,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 54
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "15 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 15
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 10 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "critical",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution",
"pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"merged_prs": 0,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "no decided pull requests or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_decided_prs_or_data",
"params": {}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 79,
"inputs": {
"followers": 2177,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "symfony",
"public_repos": 414,
"account_age_days": 6119
},
"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": "2,177 followers of symfony",
"points": 24,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 2177,
"login": "symfony"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "414 public repos, account ~16 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 414
}
},
{
"code": "account_age_years",
"params": {
"years": 16
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"symfony/brevo-mailer"
],
"ecosystems": "packagist",
"any_deprecated": false,
"min_days_since_publish": 58
},
"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 58 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 58
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "47 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 47
}
}
],
"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": "at_risk",
"name": "Engineering Quality",
"value": 44,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 30,
"inputs": {
"has_ci": false,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": null,
"points": 0,
"status": "missed",
"details": [],
"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": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"topics": [
"component",
"php",
"symfony",
"symfony-component"
],
"has_wiki": false,
"homepage": "https://symfony.com/mailer",
"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": "https://symfony.com/mailer",
"points": 15,
"status": "met",
"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": "4 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 4
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 46,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 46,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 12,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 6,
"scorecard_aggregate": 4.6
},
"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 not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 10 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": "no update tool detected",
"points": 0,
"status": "missed",
"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.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "10 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 8",
"points": 6,
"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": "no SAST tool detected",
"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": 37
},
"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": "critical",
"name": "AI Readiness",
"value": 29,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 24,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.449,
"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": "31 of 69 human commits state their intent (structured subject or explanatory body)",
"points": 24,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 31,
"sampled": 69
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "critical",
"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": 24,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"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": null,
"points": 0,
"status": "missed",
"details": [],
"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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 69",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 69
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"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": 7307,
"source_files_sampled": 23,
"oversized_source_files": 0
},
"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": "0/23 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 23,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"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-26T14:39:42.664675Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/symfony/brevo-mailer.svg",
"full_name": "symfony/brevo-mailer",
"license_state": "standard",
"license_spdx": "MIT"
}