Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-27 22:04 UTC

nowo-tech / DoctrineEncryptBundle

Encrypt Doctrine entity fields with Halite or Defuse. Uses verified, standardized libraries (no custom crypto). For Symfony 6, 7 and 8 · PHP 8.1+.

PHP · ShellMIT★ 3 estrellas⑂ 0 forksdesde feb 2026Ver en GitHub ↗

nowo-tech/DoctrineEncryptBundle tiene un índice de salud de 63 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (84/100) y la más baja, Security (45/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

63
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

63
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

Nowo.techOrganización
3 seguidores73 repositorios públicosdesde abr 2023

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

82Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
6.2/36Cadencia de commits — 9/52 semanas con commits
18/18Volumen de commits — 102 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year102
human_commit_share0,88
days_since_last_push0
active_weeks_last_year9
Cómo se puntúa
27/27Publica versiones — 20 versiones publicadas
36/36Recencia de las versiones — última versión hace 0 días
27/27Cadencia de publicación — una versión cada ~17,3 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count20
latest_release_tagv2.3.2
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases17,3
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

46En riesgo · 18% del índice global
Cómo se puntúa
4.9/60Estrellas — 3 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars3
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
13.5/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conduct
has_pull_request_template
Cómo se puntúa
44.2/80Descargas mensuales — 2076 descargas/mes en packagist
2/20Dependientes en el registro — 1 paquetes dependen de él
Datos de entrada utilizados
packagesnowo-tech/doctrine-encrypt-bundle
dependents1
ecosystemspackagist
total_downloads3550
monthly_downloads2076

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

52Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
3.1/22.5Distribución de commits — el principal contribuyente firma el 86% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,861
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
25/38.3Aceptación de PR — 17/26 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/12 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs17
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs9
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
4.3/25Alcance del propietario — 3 seguidores de nowo-tech
19.5/25Trayectoria — 73 repos públicos, cuenta de ~3 años
Datos de entrada utilizados
followers3
owner_typeOrganization
is_verified
owner_loginnowo-tech
public_repos73
account_age_days1186
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en packagist
35/35Recencia de publicación — última publicación hace 0 días
20/20Historial de versiones — 20 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesnowo-tech/doctrine-encrypt-bundle
ecosystemspackagist
any_deprecatedno
min_days_since_publish0

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

84Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 6 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .php-cs-fixer.dist.php
0/9.6Hooks de pre-commit
6.4/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 9 out of 9 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_configno
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

45En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 9 out of 9 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
0/7.5Code-Review — Found 0/12 approved changesets -- score normalized to 0
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
0/10Dangerous-Workflow — dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
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 — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,5
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

61Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — .cursor/rules/00-global.mdc, .cursor/rules/01-git-commits.mdc, .cursor/rules/10-php-symfony-bundle.mdc, .cursor/rules/20-twig-and-public-assets.mdc, .cursor/rules/30-frontend-ts-vite-pentatrion.mdc, .cursor/rules/40-tests-quality.mdc, .cursor/rules/50-docs-and-release.mdc, .cursor/rules/60-git-no-cursor-coauthor.mdc, .github/copilot-instructions.md
0/15Documentación legible por máquinas (llms.txt)
29.7/40Historial de commits legible — 49 de 88 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,557
agent_instruction_files.cursor/rules/00-global.mdc, .cursor/rules/01-git-commits.mdc, .cursor/rules/10-php-symfony-bundle.mdc, .cursor/rules/20-twig-and-public-assets.mdc, .cursor/rules/30-frontend-ts-vite-pentatrion.mdc, .cursor/rules/40-tests-quality.mdc, .cursor/rules/50-docs-and-release.mdc, .cursor/rules/60-git-no-cursor-coauthor.mdc, .github/copilot-instructions.md
agent_instruction_max_bytes1189
Cómo se puntúa
18/18Arranque con un solo comando — Makefile, demo/Makefile, demo/symfony8/Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .php-cs-fixer.dist.php
0/11Verificación estática de tipos
10/10Entorno reproducible — Dockerfile, lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
8/8Mantenimiento automatizado — 12 de los últimos 100 commits son actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilescomposer.lock
has_dockerfile
typed_languageno
bootstrap_filesMakefile, demo/Makefile, demo/symfony8/Makefile
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0,12
Cómo se puntúa
0/45Código verificable por tipos — PHP sin configuración de verificación de tipos
54.4/55Tamaños de archivo manejables — 1/92 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languagePHP
largest_source_bytes69.187
source_files_sampled92
oversized_source_files1
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
0/40Ejemplos ejecutables
Datos de entrada utilizados
example_dirs
has_mcp_signal
api_schema_files

Datos clave

3estrellas de GitHub
2contribuidores
102commits en los últimos 12 meses
0días desde el último push
20versiones publicadas
1factor bus
0issues abiertas
Packagistecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 4.5 / 10
4.5agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-27 22:04 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests9 out of 9 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/12 approved changesets -- score normalized to 0
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
0Dangerous-Workflowdangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Dependencias directas 10
RegistroPaqueteRestricción de versiónManifiesto
Packagistdoctrine/orm^2.15 || ^3.0composer.json
Packagistparagonie/halite^5.1composer.json
Packagistparagonie/sodium_compat^1.20 || ^2.0composer.json
Packagistsymfony/config^7.0 || ^8.0composer.json
Packagistsymfony/dependency-injection^7.0 || ^8.0composer.json
Packagistsymfony/http-kernel^7.0 || ^8.0composer.json
Packagistsymfony/property-access^7.0 || ^8.0composer.json
Packagistsymfony/var-exporter^7.0 || ^8.0composer.json
Packagistsymfony/yaml^7.0 || ^8.0composer.json
Packagisttwig/twig^3.2composer.json
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 971,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "PHP": 337971,
        "Shell": 58066,
        "Makefile": 5261,
        "Dockerfile": 672
      },
      "pushed_at": "2026-07-27T22:01:21Z",
      "created_at": "2026-02-18T23:07:23Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-27T22:01:32Z",
      "description": "Encrypt Doctrine entity fields with Halite or Defuse. Uses verified, standardized libraries (no custom crypto). For Symfony 6, 7 and 8 · PHP 8.1+.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "PHP",
      "significant_languages": [
        "PHP",
        "Shell"
      ]
    },
    "owner": {
      "blog": "https://nowo.tech/",
      "name": "Nowo.tech",
      "type": "Organization",
      "login": "nowo-tech",
      "company": null,
      "location": "Spain",
      "followers": 3,
      "avatar_url": "https://avatars.githubusercontent.com/u/132046754?v=4",
      "created_at": "2023-04-28T07:02:58Z",
      "is_verified": null,
      "public_repos": 73,
      "account_age_days": 1186
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.3.2",
          "kind": "patch",
          "published_at": "2026-07-27T22:01:28Z"
        },
        {
          "tag": "v2.3.1",
          "kind": "patch",
          "published_at": "2026-07-20T08:28:16Z"
        },
        {
          "tag": "v2.3.0",
          "kind": "minor",
          "published_at": "2026-07-18T16:59:56Z"
        },
        {
          "tag": "v2.2.3",
          "kind": "patch",
          "published_at": "2026-07-09T11:11:37Z"
        },
        {
          "tag": "v2.2.2",
          "kind": "patch",
          "published_at": "2026-06-11T12:41:44Z"
        },
        {
          "tag": "v2.2.1",
          "kind": "patch",
          "published_at": "2026-06-11T12:38:57Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2026-06-11T12:31:33Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2026-06-01T10:15:35Z"
        },
        {
          "tag": "v2.0.10",
          "kind": "patch",
          "published_at": "2026-02-25T12:52:11Z"
        },
        {
          "tag": "v2.0.9",
          "kind": "patch",
          "published_at": "2026-02-21T22:05:24Z"
        },
        {
          "tag": "v2.0.8",
          "kind": "patch",
          "published_at": "2026-02-20T19:34:36Z"
        },
        {
          "tag": "v2.0.7",
          "kind": "patch",
          "published_at": "2026-02-20T12:19:46Z"
        },
        {
          "tag": "v2.0.6",
          "kind": "patch",
          "published_at": "2026-02-20T09:49:19Z"
        },
        {
          "tag": "v2.0.5",
          "kind": "patch",
          "published_at": "2026-02-20T06:15:34Z"
        },
        {
          "tag": "v2.0.4",
          "kind": "patch",
          "published_at": "2026-02-20T05:20:32Z"
        },
        {
          "tag": "v2.0.3",
          "kind": "patch",
          "published_at": "2026-02-19T16:33:46Z"
        },
        {
          "tag": "v2.0.2",
          "kind": "patch",
          "published_at": "2026-02-19T16:29:22Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2026-02-19T16:16:16Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2026-02-19T16:03:25Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-02-19T13:08:23Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "ba6c63b604ce7fedbf2211f7e17d841711f24251",
          "body": "…p/php-cs-fixer-3.95.17\n\nchore(deps): bump friendsofphp/php-cs-fixer from 3.95.15 to 3.95.17",
          "is_bot": false,
          "headline": "Merge pull request #26 from nowo-tech/dependabot/composer/friendsofph…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-27T22:00:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b000110a2cf389097f6022e4fc2ebf25f816ec3",
          "body": "…or-2.5.8\n\nchore(deps): bump rector/rector from 2.5.7 to 2.5.8",
          "is_bot": false,
          "headline": "Merge pull request #25 from nowo-tech/dependabot/composer/rector/rect…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-27T22:00:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3afc46962312085d9ca886c2a607e4b0e26fea53",
          "body": "…500a203\n\nchore(deps): bump phpstan/phpstan from 2.2.5 to 2.2.6 in the phpstan group",
          "is_bot": false,
          "headline": "Merge pull request #24 from nowo-tech/dependabot/composer/phpstan-be7…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-27T22:00:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d67de1334ebee5b1192be44e9c4e6bfb6b6d3432",
          "body": "…ns/cache-6\n\nchore(ci): bump actions/cache from 5 to 6",
          "is_bot": false,
          "headline": "Merge pull request #23 from nowo-tech/dependabot/github_actions/actio…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-27T22:00:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7399cc1a314e256c1e1ecc260845830f529a2208",
          "body": null,
          "is_bot": false,
          "headline": "Release v2.3.2: Nowo specs alignment and maintainer tooling.",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-27T22:00:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00899e8a8636acb537d2fca22ecf50b877e49b3e",
          "body": "Fail PHPUnit on direct Symfony deprecations, restore canonical README\nDocumentation order, and mark concrete services final (subscriber stays\nextensible for command/test doubles).",
          "is_bot": false,
          "headline": "Close remaining SF-005, DOCS-002 and PHP-001 gaps.",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-27T22:00:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab7ff2e39e8584fb2b5f076ee77c8f643e31ccd1",
          "body": "Close REQ-MAKE-007, REQ-DOCS-016, REQ-TEST-003 and finish CS-005/DEMO-010\n/DOCS-017/REL-003 wiring: phpstan-frankenphp, down-dev, English demo README,\n100% includable coverage with COVERAGE.md, FrankenPHP banner, check-open-prs.",
          "is_bot": false,
          "headline": "Align bundle with Nowo full specs (coverage, FrankenPHP, docs).",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-27T21:56:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9f9e52d2a33480043eb37931617c9cf28beb9f8",
          "body": "Bumps [friendsofphp/php-cs-fixer](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer) from 3.95.15 to 3.95.17.\n- [Release notes](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases)\n- [Changelog](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/PHP-CS\n[…]\n-name: friendsofphp/php-cs-fixer\n  dependency-version: 3.95.17\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump friendsofphp/php-cs-fixer from 3.95.15 to 3.95.17",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-27T07:10:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7ee40a20cc04afe985347b0c7a7cdd17ad09b712",
          "body": "Bumps [rector/rector](https://github.com/rectorphp/rector) from 2.5.7 to 2.5.8.\n- [Release notes](https://github.com/rectorphp/rector/releases)\n- [Commits](https://github.com/rectorphp/rector/compare/2.5.7...2.5.8)\n\n---\nupdated-dependencies:\n- dependency-name: rector/rector\n  dependency-version: 2.5.8\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump rector/rector from 2.5.7 to 2.5.8",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-27T07:10:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3333ff49f6940e39740dfd16a96c11485a2832fe",
          "body": "Bumps the phpstan group with 1 update: [phpstan/phpstan](https://github.com/phpstan/phpstan-phar-composer-source).\n\n\nUpdates `phpstan/phpstan` from 2.2.5 to 2.2.6\n- [Commits](https://github.com/phpstan/phpstan-phar-composer-source/commits)\n\n---\nupdated-dependencies:\n- dependency-name: phpstan/phpstan\n  dependency-version: 2.2.6\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: phpstan\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump phpstan/phpstan in the phpstan group",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-27T07:10:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f1d3fec5ea7aad11c547f7052e089f55c98e4e8",
          "body": "Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/cache\n  dependency-version: '6'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(ci): bump actions/cache from 5 to 6",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-27T07:08:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0cd4dfd5f5f9921fecb033d3f23e514d378a6e53",
          "body": null,
          "is_bot": false,
          "headline": "Align git-hygiene job with actions/checkout@v7.",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-20T08:28:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "211cd8149fa601778341f13a392108463dd8794a",
          "body": "…ns/checkout-7\n\nchore(ci): bump actions/checkout from 6 to 7",
          "is_bot": false,
          "headline": "Merge pull request #19 from nowo-tech/dependabot/github_actions/actio…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-20T08:28:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1385a1d9f69768c3409186a3bdd8ee9de692dfa7",
          "body": "…ns/github-script-9\n\nchore(ci): bump actions/github-script from 7 to 9",
          "is_bot": false,
          "headline": "Merge pull request #20 from nowo-tech/dependabot/github_actions/actio…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-20T08:28:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b44b6b35bdb418c9c10f009a6d11fd17db2a02e1",
          "body": "…ov/codecov-action-7\n\nchore(ci): bump codecov/codecov-action from 6 to 7",
          "is_bot": false,
          "headline": "Merge pull request #18 from nowo-tech/dependabot/github_actions/codec…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-20T08:28:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e206cb1396fcd07f467f92fcb06e3e1ba87362f5",
          "body": "…or-2.5.7\n\nchore(deps): bump rector/rector from 2.5.5 to 2.5.7",
          "is_bot": false,
          "headline": "Merge pull request #22 from nowo-tech/dependabot/composer/rector/rect…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-20T08:28:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c1f477014dd7f9db2f76c50edf5dbab69008365",
          "body": "…p/php-cs-fixer-3.95.15\n\nchore(deps): bump friendsofphp/php-cs-fixer from 3.95.12 to 3.95.15",
          "is_bot": false,
          "headline": "Merge pull request #21 from nowo-tech/dependabot/composer/friendsofph…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-20T08:28:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d80ad6d71a9ae21beef567081ff08658cb854907",
          "body": null,
          "is_bot": false,
          "headline": "Release v2.3.1: drop demo/symfony7, REQ-GIT-001 and Code of Conduct.",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-20T08:27:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "180b7429b233d128987c4c9fb3097fa3a9cfcdb9",
          "body": "Bumps [rector/rector](https://github.com/rectorphp/rector) from 2.5.5 to 2.5.7.\n- [Release notes](https://github.com/rectorphp/rector/releases)\n- [Commits](https://github.com/rectorphp/rector/compare/2.5.5...2.5.7)\n\n---\nupdated-dependencies:\n- dependency-name: rector/rector\n  dependency-version: 2.5.7\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump rector/rector from 2.5.5 to 2.5.7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-20T07:09:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a3d640996a89979cd62e1a027e24ab46aa4ee62",
          "body": "Bumps [friendsofphp/php-cs-fixer](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer) from 3.95.12 to 3.95.15.\n- [Release notes](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases)\n- [Changelog](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/PHP-CS\n[…]\n-name: friendsofphp/php-cs-fixer\n  dependency-version: 3.95.15\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump friendsofphp/php-cs-fixer from 3.95.12 to 3.95.15",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-20T07:09:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3c619c1a6ad3c33a3bebd2c76a995914425dc860",
          "body": "Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 9.\n- [Release notes](https://github.com/actions/github-script/releases)\n- [Commits](https://github.com/actions/github-script/compare/v7...v9)\n\n---\nupdated-dependencies:\n- dependency-name: actions/github-script\n  dependency-version: '9'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(ci): bump actions/github-script from 7 to 9",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-20T07:09:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d306895af8caf5b56e74e29afb83300640adecc7",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\n:\n- dependency-name: actions/checkout\n  dependency-version: '7'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(ci): bump actions/checkout from 6 to 7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-20T07:09:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d6c91a3090d4ddf1d1b1a0dfc8abe02aafbb587",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6 to 7.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\npendency-name: codecov/codecov-action\n  dependency-version: '7'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(ci): bump codecov/codecov-action from 6 to 7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-20T07:09:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9b683f8ede90e3ff3570824d2a5d3bda711cd854",
          "body": null,
          "is_bot": false,
          "headline": "Apply PHP CS Fixer fixes [skip ci]",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-07-18T17:17:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ffb05e8f42a2c254ce02f080b9e9100c2d1ff74f",
          "body": "Add always-on Cursor rule, prepare-commit-msg hook, and CONTRIBUTING notes so release commits stay attributed to the maintainer only.",
          "is_bot": false,
          "headline": "Prevent Cursor Co-authored-by on commits.",
          "author_name": "Héctor Franco Aceituno",
          "author_login": "HecFranco",
          "committed_at": "2026-07-18T17:15:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "045db3e40e9dc6d04aa642b5b20039a58749f6f2",
          "body": "Rename default_config/configs to default_profile/profiles; keep legacy YAML keys and parameters during transition; validate that default_profile exists in profiles. Update docs, Flex recipe, demos and DI tests.",
          "is_bot": false,
          "headline": "Release v2.3.0: rename configs to profiles (AuditKit-style).",
          "author_name": "Héctor Franco Aceituno",
          "author_login": "HecFranco",
          "committed_at": "2026-07-18T16:57:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d2ad19762501c03b4b84479e6187b00608dd132",
          "body": "…v/codecov-action-6\n\nchore(ci): bump codecov/codecov-action from 5 to 6",
          "is_bot": false,
          "headline": "Merge pull request #1 from nowo-tech/dependabot/github_actions/codeco…",
          "author_name": "Héctor Franco Aceituno",
          "author_login": "HecFranco",
          "committed_at": "2026-07-09T11:32:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "699f67802bdd68b1e7f4cbcb84a7f186abfea992",
          "body": "…s/checkout-6\n\nchore(ci): bump actions/checkout from 4 to 6",
          "is_bot": false,
          "headline": "Merge pull request #2 from nowo-tech/dependabot/github_actions/action…",
          "author_name": "Héctor Franco Aceituno",
          "author_login": "HecFranco",
          "committed_at": "2026-07-09T11:32:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0056ddfc5bd2b9e8bf22c4b884ae98883d8d415c",
          "body": "…ops/action-gh-release-3\n\nchore(ci): bump softprops/action-gh-release from 2 to 3",
          "is_bot": false,
          "headline": "Merge pull request #3 from nowo-tech/dependabot/github_actions/softpr…",
          "author_name": "Héctor Franco Aceituno",
          "author_login": "HecFranco",
          "committed_at": "2026-07-09T11:32:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f5f58c6116f1d029d99c2b040c7a905c4239803",
          "body": null,
          "is_bot": false,
          "headline": "Apply PHP CS Fixer fixes [skip ci]",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-07-09T11:11:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0a07604cdff176091e90f429766a38f1787a5f8",
          "body": null,
          "is_bot": false,
          "headline": "Release v2.2.3: Spec Kit, Twig decrypt escape fix, MysqlAes deprecation.",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-09T11:11:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30364ca3427940c44bd903bf31359f71d4218c02",
          "body": "- Updated Symfony packages to version 7.4.14 and 8.1.1, including `symfony/cache`, `symfony/config`, `symfony/console`, and `symfony/dependency-injection`.\n- Adjusted references in `composer.lock` to point to the latest commits for each package.\n- Modified `reference.php` files to change the type of `_instanceof` to an array of class strings, enhancing type safety.\n- Resolved merge conflicts in `composer.lock` for the doctrine-encrypt-bundle reference.",
          "is_bot": false,
          "headline": "Update composer.lock and reference files for Symfony packages",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-09T11:11:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "371318c05131ef4cbb82d39d1cb3b2af1275d978",
          "body": "- Introduced `.coderabbit.yaml` for CodeRabbit integration, defining review settings, path filters, and instructions for various file types.\n- Added new skills for the spec-kit: `speckit-analyze`, `speckit-checklist`, `speckit-clarify`, `speckit-constitution`, `speckit-converge`, and `speckit-implem\n[…]\nnage specifications and implementation tasks.\n- Updated `README.md` to include a link to the new GitHub Spec Kit documentation.\n- Minor adjustments to `Makefile` for improved organization and clarity.",
          "is_bot": false,
          "headline": "Add CodeRabbit configuration and new skills for spec-kit integration",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-09T11:11:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c8a7df40302cb8a6308a689cefd15180cb91a20f",
          "body": null,
          "is_bot": false,
          "headline": "Release v2.2.2: functional tests on PHP 8.4 with Symfony 8.",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-07-09T11:11:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "faf17d500d6b7eb0cb21cab0abc4356af3a52b9a",
          "body": null,
          "is_bot": false,
          "headline": "Apply PHP CS Fixer fixes [skip ci]",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-06-11T12:41:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16de6dee94c0c6518084e468c19e0ff9c1857379",
          "body": "Symfony 8 var-exporter no longer provides LazyGhost helpers; enable\nDoctrine native lazy objects in functional test ORM setup when on PHP 8.4+.",
          "is_bot": false,
          "headline": "Fix functional tests on PHP 8.4 with Symfony 8 (native lazy objects).",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-11T12:40:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3fba8c122d59ca97fde958033e8ce712da17ecb1",
          "body": null,
          "is_bot": false,
          "headline": "Release v2.2.1: composer.lock sync and CI Symfony 8 var-exporter fix.",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-11T12:38:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59c541903e9f4dfc41e2b252e87cbfbb94e239a4",
          "body": "…rsion based on Symfony version. This change ensures compatibility with Symfony 8.x while maintaining support for earlier versions.",
          "is_bot": false,
          "headline": "Enhance CI configuration to conditionally set Symfony var-exporter ve…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-11T12:37:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4935cccd4f149a2db626edadcc61033f11a1d3e8",
          "body": null,
          "is_bot": false,
          "headline": "Apply PHP CS Fixer fixes [skip ci]",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-06-11T12:35:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f5bd705eddad38645ff5a3ef656e13d800fe204",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of github.com:nowo-tech/DoctrineEncryptBundle",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-11T12:34:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfdff0b84cbdd7cf36e2243a2016ed012b4e81e7",
          "body": "…pt-bundle",
          "is_bot": false,
          "headline": "Update composer.lock to reference the latest commit of doctrine-encry…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-11T12:34:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3b3d21d1c3c27b0fb59dcad076529ccdac94bba",
          "body": "…sion adjustments\n\n- Updated PHP requirement to >=8.2 and modified Symfony dependencies to support versions 7.0 and 8.0.\n- Adjusted references for the doctrine-encrypt-bundle to the latest commit.",
          "is_bot": false,
          "headline": "Update composer.lock to reflect PHP 8.2 compatibility and Symfony ver…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-11T12:34:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d164ccb76ac59543b473e5f758f68f80d7e4d7a",
          "body": "…y 7.4+\n\n- Updated composer.json to require PHP >= 8.2 and adjusted Symfony dependencies to support versions 7.4 and 8.0.\n- Updated composer.lock to reflect new package versions, including Symfony and PHPStan.\n- Enhanced CI configuration to test against PHP 8.2 and Symfony 7.4.\n- Updated documentation to reflect changes in requirements and compatibility.\n- Added new Makefile commands for dependency updates in demo projects.",
          "is_bot": false,
          "headline": "Update dependencies and enhance compatibility with PHP 8.2 and Symfon…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-11T12:33:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75275b3e46235052516e22f651f623dd166777b0",
          "body": null,
          "is_bot": false,
          "headline": "Release v2.2.0: PHP 8.2+ and Symfony spec alignment.",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-11T12:31:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ffd10d2e3c0ae1a2b91b76eb28944bb731a48e11",
          "body": null,
          "is_bot": false,
          "headline": "Apply PHP CS Fixer fixes [skip ci]",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-06-11T12:30:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6cde67234f351149efa928be1bcd545a08091d48",
          "body": "Raise minimum PHP to 8.2, drop Symfony 6 from composer constraints, align CI matrix with 7.4/8.0/8.1, update docs and fix GenerateSecretKeyCommandTest for MysqlAes messages.\nEOF\n)\"\ngit tag -a v2.2.0 -m \"$(cat <<'EOF'\nRelease v2.2.0\n- PHP 8.2+ required; symfony/* ^7.0 || ^8.0\n- CI: Symfony 7.4, 8.0, 8.1 on PHP 8.2–8.5\n- Docs: README, INSTALLATION, UPGRADING, CHANGELOG, RELEASE\n- Fix: GenerateSecretKeyCommandTest MysqlAes messages\nSee docs/UPGRADING.md#upgrading-to-220",
          "is_bot": false,
          "headline": "Release v2.2.0: PHP 8.2+ and Symfony spec alignment.",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-11T12:29:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e3e440e68349f9e05057df8105159f066cf64be",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of github.com:nowo-tech/DoctrineEncryptBundle",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-01T11:05:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "292421439959c2314e28ea7e0c1f1ad630132652",
          "body": "- Updated CONFIGURATION.md to clarify the use of the `<ENC>` marker in MySQL and its implications for data insertion and retrieval.\n- Expanded MYSQL_AES.md with detailed examples for inserting encrypted data using both Doctrine and native SQL, emphasizing the importance of column types and formats to avoid confusion.",
          "is_bot": false,
          "headline": "Enhance documentation for MysqlAes encryptor",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-01T11:05:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9baae3d8a0e3e17d6094ff7c23e061ee1d2e65a4",
          "body": null,
          "is_bot": false,
          "headline": "Apply PHP CS Fixer fixes [skip ci]",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-06-01T10:15:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e29cc7a39ac27ceb8308fac39304dee3d174c1e",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of github.com:nowo-tech/DoctrineEncryptBundle",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-01T10:14:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8b2a612c82f44ea829bbbbf7c1260dbd71e6853",
          "body": null,
          "is_bot": false,
          "headline": "Release v2.1.0: MysqlAes encryptor and demo enhancements.",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-06-01T10:13:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8d2da5e5d64a4942e4f4c8e6ee037c8e4f4ecdd",
          "body": "Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2 to 3.\n- [Release notes](https://github.com/softprops/action-gh-release/releases)\n- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/softprops/\n[…]\nncy-name: softprops/action-gh-release\n  dependency-version: '3'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(ci): bump softprops/action-gh-release from 2 to 3",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-13T07:22:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ba705c620cff65d85d5f7e195a65b49b31a11ab6",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v6)\n\n---\nupdated-dependenc\n[…]\n:\n- dependency-name: actions/checkout\n  dependency-version: '6'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(ci): bump actions/checkout from 4 to 6",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-27T17:22:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "71084c40c6b2111e510cbd4e8952c2c818fad0e4",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5 to 6.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\npendency-name: codecov/codecov-action\n  dependency-version: '6'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(ci): bump codecov/codecov-action from 5 to 6",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-27T17:21:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e2ccd9ff4f716b680e06df10f8c3d9c0b87d175a",
          "body": null,
          "is_bot": false,
          "headline": "Apply PHP CS Fixer fixes [skip ci]",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-03-27T17:21:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c131157588bc02c9ce9fdcdcc4d8f33ab325b093",
          "body": null,
          "is_bot": false,
          "headline": "Update README to reflect PHP test coverage changes",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-03-27T17:21:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e876d607820a9b1ec1062c48717bad559a51ad0d",
          "body": "- Modified .gitignore to include additional environment and coverage files.\n- Updated composer.json to restrict PHP version compatibility and include new development dependencies for PHPStan and Rector.\n- Enhanced Makefile with new commands for PHPStan and Rector, and improved test coverage reportin\n[…]\npment experience, including Caddyfile adjustments and environment variable management.\n- Introduced new scripts for coverage percentage extraction and automated release management in GitHub workflows.",
          "is_bot": false,
          "headline": "Update project configuration and enhance development setup",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-03-27T17:20:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8601f2eb6ea2246c499af817b53090e9ea5698ef",
          "body": null,
          "is_bot": false,
          "headline": "Apply PHP CS Fixer fixes [skip ci]",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-02-25T12:52:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4cdba19c472a5d2d5edfaf36ff4504dee5762399",
          "body": null,
          "is_bot": false,
          "headline": "Prepare v2.0.10 release",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-25T12:51:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9d893ccb2824ecbf20b9375c26d28725a6be9cf",
          "body": "- Replaced the deprecated Symfony\\Component\\HttpKernel\\DependencyInjection\\Extension with Symfony\\Component\\DependencyInjection\\Extension in DoctrineEncryptExtension.php for better compatibility and adherence to current Symfony standards.",
          "is_bot": false,
          "headline": "Refactor DoctrineEncryptExtension to improve dependency management",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-25T12:48:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f8ac82ef27dd36162d3d6e258efe4818db3732a",
          "body": "- Updated content-hash for consistency.\n- Removed abandoned doctrine/annotations package.\n- Upgraded friendsofphp/php-cs-fixer from v3.94.1 to v3.94.2, including updated source and distribution references.",
          "is_bot": false,
          "headline": "Update composer.lock to reflect dependency changes",
          "author_name": "Héctor Franco Aceituno",
          "author_login": "HecFranco",
          "committed_at": "2026-02-22T12:11:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "530e52418ed7e0e3d246f60f95632a64adc50a94",
          "body": "- Added new commands to the main Makefile: `release-check`, `release-check-demos`, and `composer-sync` for improved pre-release validation.\n- Updated demo Makefiles to include `restart` and `build` commands for Symfony 7 and 8, along with a new `release-verify` command for health checks.\n- Enhanced help output in both main and demo Makefiles to reflect the new commands and their usage.",
          "is_bot": false,
          "headline": "Enhance Makefiles for demos and main project",
          "author_name": "Héctor Franco Aceituno",
          "author_login": "HecFranco",
          "committed_at": "2026-02-22T12:09:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4885e52b5ef3531d23c6639e88b20e05645e96d9",
          "body": null,
          "is_bot": false,
          "headline": "Apply PHP CS Fixer fixes [skip ci]",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-02-21T22:05:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "619df240a871d08c5e39ac8746f96460ff233945",
          "body": "- Enhanced .php-cs-fixer.dist.php with comprehensive rules for PSR-12 and Symfony standards, including strict types and import ordering.\n- Removed unused dependencies from composer.json.\n- Updated docker-compose.yml files for demo projects to include specific names for better clarity.\n- Modified Makefiles in demo projects to streamline setup processes and added test coverage commands.\n- Added strict types declarations across various PHP files for improved type safety.",
          "is_bot": false,
          "headline": "Refactor PHP-CS-Fixer configuration and update demo Makefiles",
          "author_name": "Héctor Franco Aceituno",
          "author_login": "HecFranco",
          "committed_at": "2026-02-21T22:04:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cc813eb1e9e84c7c8d42b4099aceffdcef1d5b2",
          "body": "…andTest Symfony Console 7/8 fix)",
          "is_bot": false,
          "headline": "Prepare v2.0.8 release (CHANGELOG, UPGRADING, RELEASE; RotateKeysComm…",
          "author_name": "Héctor Franco Aceituno",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T19:33:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "565779357ebb3faa1320bb1c20c33874ccb8d3c1",
          "body": "…ethod\n\n- Replaced direct Application instantiation with createApplicationWithCommands for better command management.\n- Updated tests to ensure commands are properly registered and associated with the application context.\n- Improved overall test structure for clarity and maintainability.",
          "is_bot": false,
          "headline": "Refactor RotateKeysCommandTest to use createApplicationWithCommands m…",
          "author_name": "Héctor Franco Aceituno",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T19:31:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48bec533e98f9204aed7361e4671e55e1a884ea3",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of github.com:nowo-tech/DoctrineEncryptBundle",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T12:19:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb11181c2cee423867b0666f101f32e8c1386dca",
          "body": null,
          "is_bot": false,
          "headline": "Prepare v2.0.7 release",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T12:18:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b631c9ba02ea0683c004b1a937f810ccc10f3ac",
          "body": null,
          "is_bot": false,
          "headline": "Apply PHP CS Fixer fixes [skip ci]",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-02-20T12:15:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf132b5695cff545a90e276a94c7a7a95327a699",
          "body": "- Added `doctrine:encrypt:rotate-keys` command for full key rotation, including optional backup and confirmation prompts.\n- Updated `doctrine:encrypt:status` to list encrypted properties and their configurations.\n- Improved documentation across multiple files, including COMMANDS.md, INSTALLATION.md,\n[…]\ncommands for key rotation.\n- Updated .env.example files to clarify the usage of APP_ENCRYPT_KEY for configuration.\n- Adjusted configuration files to support batch size options for encryption commands.",
          "is_bot": false,
          "headline": "Enhance encryption bundle features and documentation",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T12:14:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fa7cf81b91d8b504f04f1ebfa7274e2b96323589",
          "body": "- Updated COMMANDS.md to include the new `doctrine:encrypt:rotate-keys` command for key rotation, detailing its options and usage.\n- Improved the `doctrine:encrypt:status` command to list encrypted properties along with their effective config names.\n- Added a new method in AbstractCommand to retriev\n[…]\ned properties with their config.\n- Updated service configuration to inject key paths into relevant commands.\n- Adjusted unit tests to reflect changes in output formatting for entity encryption status.",
          "is_bot": false,
          "headline": "Enhance encryption commands and documentation",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T10:42:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "abdb5bcf7dac48ca1ec26a847df181b1a1747141",
          "body": null,
          "is_bot": false,
          "headline": "Update CHANGELOG.md to correct release date for version 1.0.0",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T10:16:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2a2784a8cc537b1c118e9d344a070cd7872ee88",
          "body": "- Updated README.md to include new features: **MaskUtil** for masking sensitive values and additional Twig filters (`|mask`).\n- Revised demo documentation to reflect the integration of **MaskUtil** and updated usage examples for clarity.\n- Expanded usage documentation to cover the new **mask** functionality in both PHP and Twig, improving guidance for developers.",
          "is_bot": false,
          "headline": "Enhance documentation for encryption bundle features",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T10:07:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "527fc88a3bf7a028c8dabcc4b5f23d860401499d",
          "body": "- Enhanced the description in composer.json to better reflect the bundle's capabilities, including GDPR compliance and key rotation.\n- Updated README.md to clarify usage and features, emphasizing support for multiple encryption configurations and integration with Nowo\\AnonymizedBundle.\n- Improved de\n[…]\nent variable-based encryption keys in configuration files, enhancing flexibility for users.\n- Updated various templates and forms to reflect changes in encryption handling and improve user experience.",
          "is_bot": false,
          "headline": "Update documentation and configuration for encryption bundle",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T09:48:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "625dc09e3e5f75d184340ef9810d2c5ae93506cf",
          "body": "- Trimmed whitespace from the encryption key read from the key file in DefuseEncryptor to prevent potential issues with key formatting.\n- Introduced a new method in HaliteEncryptor to normalize the key file by removing leading/trailing whitespace, ensuring compatibility with Halite's hex decoder.\n- Added error handling for invalid key formats in HaliteEncryptor, providing clearer runtime exceptions for users.",
          "is_bot": false,
          "headline": "Enhance key handling in DefuseEncryptor and HaliteEncryptor",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T06:38:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc81724e08045362c9ebe7d42d26ea9b2eede4f7",
          "body": "- Renamed test directory from `Tests` to `tests` for consistency.\n- Updated references in `.php-cs-fixer.dist.php`, `composer.json`, and `phpunit.xml.dist` to reflect the new directory name.\n- Enhanced `doctrine:encrypt:generate-secret-key` command to support generating keys for all configs or a spe\n[…]\nmation for overwriting existing keys.\n- Updated documentation in `COMMANDS.md` to clarify command usage and behavior.\n- Added new functional tests for encryption behavior and key generation scenarios.",
          "is_bot": false,
          "headline": "Refactor test directory structure and enhance key generation command",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T06:15:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "811639c51f46af14afd7107fe44d40f5e245bfc5",
          "body": "…rsion 7.4",
          "is_bot": false,
          "headline": "Update Symfony dependencies in CI workflow to specify var-exporter ve…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T05:33:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0aa5cf10fd09db6cf09e621ae760bfb0b210af3e",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of github.com:nowo-tech/DoctrineEncryptBundle",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T05:31:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7db23eb246b5eda503a6e5879c99d85e0449d8b5",
          "body": "…ck to reflect changes.",
          "is_bot": false,
          "headline": "Remove symfony/var-exporter from composer.json and update composer.lo…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T05:30:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1315f2bd148af8d80d9714da603edd91c50e505b",
          "body": null,
          "is_bot": false,
          "headline": "Apply PHP CS Fixer fixes [skip ci]",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-02-20T05:28:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2424b0604160c00504bcbf7b08c611ebd6dcd654",
          "body": "- Updated content-hash in composer.lock to reflect changes.\n- Upgraded paragonie/sodium_compat to version 2.5.0 and added twig/twig as a new dependency at version 3.23.0.\n- Modified Makefile to include an 'update' command for updating composer.lock, enhancing the development workflow.",
          "is_bot": false,
          "headline": "Update composer.lock and Makefile for dependency management",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T05:27:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d511a2d33484ca17660b0a608e7658b23f1bb9f",
          "body": "- Introduced a new 'validate' command to run Composer validation with strict checks.\n- Updated help text to reflect the addition of the 'validate' command and modified the 'qa' command description for clarity.\n- Ensured all commands that require the root container to be running are properly documented.",
          "is_bot": false,
          "headline": "Update Makefile to add 'validate' command and improve help documentation",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T05:24:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5c305dd98d420e2c951c264908c22bfaf559e6b",
          "body": "…ne project requirements.",
          "is_bot": false,
          "headline": "Remove symfony/var-exporter dependency from composer.json to streamli…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T05:22:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14ba437cc8d9416def6bac012e1ade94bf68328c",
          "body": "…ands\n\n- Updated Makefile to clarify test coverage command requirements.\n- Expanded README.md to include new features like EncryptUtil and Twig filter for decryption.\n- Added tests for encryption properties and configurations in AbstractCommandTest and DoctrineDecryptDatabaseCommandTest.\n- Improved \n[…]\nencryptor configurations.\n- Introduced new fixtures to cover edge cases in encryption subscriber tests.\n- Added tests for the DecryptExtension to ensure proper decryption behavior with various inputs.",
          "is_bot": false,
          "headline": "Enhance documentation and tests for encryption configuration and comm…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-20T05:20:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a1c21ef0bf851ad0544ca405620805ec5bd95325",
          "body": "- Added `EncryptUtilDemoController` to demonstrate encryption and decryption using `EncryptUtil` and Twig filters.\n- Updated `base.html.twig` and `home.html.twig` to include links to the new demo page.\n- Introduced new templates for the EncryptUtil demo.\n- Configured necessary Symfony bundles for debugging and web profiling in `composer.json` and `bundles.php`.\n- Added environment configuration for testing and debugging.\n- Updated `composer.lock` to reflect new dependencies and changes.",
          "is_bot": false,
          "headline": "Enhance Symfony 7 demo with EncryptUtil and Twig integration",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T19:51:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "353015b3482dbe024c12172b483a65061d50d591",
          "body": "- Relaxed the version constraint for paragonie/sodium_compat to support 2.x installations.\n- Updated UPGRADING.md to confirm no breaking changes and provide upgrade instructions.\n- Documented changes in CHANGELOG and RELEASE files for clarity on the new version.",
          "is_bot": false,
          "headline": "Update CHANGELOG, RELEASE, and UPGRADING documentation for version 2.0.3",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T16:33:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79207e432d59058343a2b3adfc9d2b32c0ecbec4",
          "body": "… support version 2.0",
          "is_bot": false,
          "headline": "Update paragonie/sodium_compat version constraint in composer.json to…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T16:32:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "795c3080429f839331eb06c72f9580e643bdd564",
          "body": "- Included `symfony/var-exporter` in composer.json to ensure compatibility with Symfony 7 and 8.\n- Updated CHANGELOG and RELEASE documentation to reflect changes and fixes related to Symfony Console 8.0 compatibility in command tests.\n- No breaking changes; standard update process applies.",
          "is_bot": false,
          "headline": "Add symfony/var-exporter as a dependency and update CHANGELOG for v2.0.2",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T16:28:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da4d4b99162e61bd1973f9095e9d571ecf2b5416",
          "body": "- Simplified the Composer update command in the CI configuration by removing the specific package prefix, ensuring a more efficient dependency update process.",
          "is_bot": false,
          "headline": "Refine CI workflow to streamline Composer update command",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T16:25:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3c1f311b52e0eb333128abe0bfc80f9180fba58",
          "body": "- Added `symfony/var-exporter` to the Composer require command in the CI workflow to ensure compatibility with Symfony 7 and 8 during testing.",
          "is_bot": false,
          "headline": "Update CI configuration to include symfony/var-exporter as a dependency",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T16:22:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e301463217f40976781997967818f73f4422cdaa",
          "body": "…DatabaseCommandTest and DoctrineDecryptDatabaseCommandTest\n\n- Updated the `createCommandWithApplication` method to use `setApplication` instead of conditionally calling `addCommand` or `add`, enhancing code clarity and consistency across tests.",
          "is_bot": false,
          "headline": "Refactor command tests to set application directly in DoctrineEncrypt…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T16:22:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64e37182d3e20bc4e1830cb622d202f9b4b4cf08",
          "body": "…lly using addCommand method for Symfony applications",
          "is_bot": false,
          "headline": "Fix compatibility in DoctrineDecryptDatabaseCommandTest by conditiona…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T16:19:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56f0c48450871d3665cc74cb95991b70d14c98d3",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of github.com:nowo-tech/DoctrineEncryptBundle",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T16:18:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49e630c0c4a89306376b9a26d823975d9164d0c5",
          "body": null,
          "is_bot": false,
          "headline": "Update content-hash in composer.lock to reflect dependency changes",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T16:17:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d7d5f20a71bc44cb30e37d11d3f5fecb9204189",
          "body": null,
          "is_bot": false,
          "headline": "Apply PHP CS Fixer fixes [skip ci]",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-02-19T16:16:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb011218553864960a6fdc5b977eb1c73c82b1cf",
          "body": "- Added `symfony/var-exporter` as a development dependency for improved support with Doctrine ORM 3.x LazyGhost in functional tests.\n- Updated README and INSTALLATION documentation to explicitly state compatibility with Symfony 7 and 8.\n- Refactored unit tests for `DefuseEncryptor` and `HaliteEncryp\n[…]\nted `fixtures` directory, ensuring reliable test execution in CI environments.\n- Revised CHANGELOG and ROADMAP to reflect these updates and clarify the bundle's focus on Symfony 7 and 8 compatibility.",
          "is_bot": false,
          "headline": "Enhance compatibility and testing for DoctrineEncryptBundle",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T16:13:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b1a60bd4e76773b764358ec2fc2a52d7c3980789",
          "body": "- Updated test cases to generate temporary key files in the system's temp directory instead of using fixed paths.\n- Ensured key files are created and verified for each test, improving test isolation and reliability.\n- Added cleanup step to remove temporary key files after tests to prevent clutter.",
          "is_bot": false,
          "headline": "Refactor HaliteEncryptorTest to use temporary key files",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T16:06:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22f2d073477c06444aff439d14162c590e7fb9ff",
          "body": "- Updated composer.json to reflect support for Symfony 7 and 8, removing references to Symfony 6.\n- Modified Dockerfile comment to indicate compatibility with Symfony 7 and 8.\n- Revised README.md to clarify support for Symfony 7 and 8, and updated features and configuration sections to reflect new m\n[…]\n.\n- Added unit tests for new functionality and configurations, ensuring proper handling of multiple encryptors.\n- Updated various test cases and fixtures to align with the new configuration structure.",
          "is_bot": false,
          "headline": "Update Symfony compatibility and documentation for DoctrineEncryptBundle",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T16:06:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fccacce0f1b66864907d7ca28c8101e39030eea5",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of github.com:nowo-tech/DoctrineEncryptBundle",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T13:15:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a696608e541a27d92d31280f646d99692dc7cdf9",
          "body": "…trineEncryptBundle\n\n- Changed all occurrences of the old repository name 'doctrine-encrypt-bundle' to 'DoctrineEncryptBundle' in composer.json, README.md, and configuration files.\n- Removed outdated documentation file 'docs/README.md' as part of the repository restructuring.\n- Updated links in the ROADMAP.md to reflect the new repository name.",
          "is_bot": false,
          "headline": "Update repository references to use the new naming convention for Doc…",
          "author_name": "Héctor Franco",
          "author_login": "HecFranco",
          "committed_at": "2026-02-19T13:14:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 20,
      "commits_last_year": 102,
      "latest_release_at": "2026-07-27T22:01:28Z",
      "latest_release_tag": "v2.3.2",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 9,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 17.3
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "nowo-tech/doctrine-encrypt-bundle",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "symfony",
            "mysql",
            "doctrine",
            "encryption",
            "entity",
            "encrypt",
            "decrypt",
            "Defuse",
            "symfony-bundle",
            "halite",
            "gdpr",
            "field-level encryption",
            "key rotation",
            "data-at-rest",
            "aes_encrypt",
            "mysql aes"
          ],
          "ecosystem": "packagist",
          "matches_repo": true,
          "registry_url": "https://packagist.org/packages/nowo-tech/doctrine-encrypt-bundle",
          "is_deprecated": false,
          "latest_version": "v2.3.2",
          "repository_url": "https://github.com/nowo-tech/DoctrineEncryptBundle",
          "versions_count": 20,
          "total_downloads": 3550,
          "dependents_count": 1,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 2076,
          "first_published_at": null,
          "latest_published_at": "2026-07-27T22:00:46Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 3,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": true,
      "bootstrap_files": [
        "Makefile",
        "demo/Makefile",
        "demo/symfony8/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 69187,
      "source_files_sampled": 92,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        ".cursor/rules/00-global.mdc",
        ".cursor/rules/01-git-commits.mdc",
        ".cursor/rules/10-php-symfony-bundle.mdc",
        ".cursor/rules/20-twig-and-public-assets.mdc",
        ".cursor/rules/30-frontend-ts-vite-pentatrion.mdc",
        ".cursor/rules/40-tests-quality.mdc",
        ".cursor/rules/50-docs-and-release.mdc",
        ".cursor/rules/60-git-no-cursor-coauthor.mdc",
        ".github/copilot-instructions.md"
      ],
      "agent_instruction_max_bytes": 1189
    },
    "dependencies": {
      "manifests": [
        "composer.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "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": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "packagist"
      ],
      "dependencies": [
        {
          "name": "doctrine/orm",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^2.15 || ^3.0"
        },
        {
          "name": "paragonie/halite",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^5.1"
        },
        {
          "name": "paragonie/sodium_compat",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^1.20 || ^2.0"
        },
        {
          "name": "symfony/config",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^7.0 || ^8.0"
        },
        {
          "name": "symfony/dependency-injection",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^7.0 || ^8.0"
        },
        {
          "name": "symfony/http-kernel",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^7.0 || ^8.0"
        },
        {
          "name": "symfony/property-access",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^7.0 || ^8.0"
        },
        {
          "name": "symfony/var-exporter",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^7.0 || ^8.0"
        },
        {
          "name": "symfony/yaml",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^7.0 || ^8.0"
        },
        {
          "name": "twig/twig",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^3.2"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 17,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 9
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "HecFranco",
          "commits": 87,
          "avatar_url": "https://avatars.githubusercontent.com/u/24323276?v=4"
        },
        {
          "type": "User",
          "login": "actions-user",
          "commits": 14,
          "avatar_url": "https://avatars.githubusercontent.com/u/65916846?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.861
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "coderabbit.yml",
        "pr-lint.yml",
        "release.yml",
        "stale.yml",
        "sync-releases.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".php-cs-fixer.dist.php"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "composer.lock"
      ],
      "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": 10,
            "reason": "9 out of 9 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": 0,
            "reason": "Found 0/12 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 0,
            "reason": "dangerous workflow patterns detected",
            "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": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "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": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "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": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "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": "ba6c63b604ce7fedbf2211f7e17d841711f24251",
        "ran_at": "2026-07-27T22:04:44Z",
        "aggregate_score": 4.5,
        "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-27T22:02:07Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-27T22:01:14Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/nowo-tech/DoctrineEncryptBundle",
    "host": "github.com",
    "name": "DoctrineEncryptBundle",
    "owner": "nowo-tech"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 63,
      "inputs": {
        "security": 45,
        "vitality": 82,
        "community": 46,
        "governance": 52,
        "engineering": 84
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 82,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "commits_last_year": 102,
              "human_commit_share": 0.88,
              "days_since_last_push": 0,
              "active_weeks_last_year": 9
            },
            "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": "9/52 weeks with commits",
                "points": 6.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "102 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 102
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "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": 20,
              "latest_release_tag": "v2.3.2",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 17.3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "20 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~17.3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 17.3
                    }
                  }
                ],
                "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": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 46,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 5,
            "inputs": {
              "forks": 0,
              "stars": 3,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "3 stars",
                "points": 4.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "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": "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": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "at_risk",
            "name": "Ecosystem adoption (downloads)",
            "note": null,
            "notes": [],
            "value": 46,
            "inputs": {
              "packages": [
                "nowo-tech/doctrine-encrypt-bundle"
              ],
              "dependents": 1,
              "ecosystems": "packagist",
              "total_downloads": 3550,
              "monthly_downloads": 2076
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,076 downloads/month across packagist",
                "points": 44.2,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2076,
                      "ecosystems": "packagist"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "1 packages depend on it",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "registry_dependents",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": 52,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 21,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.861
            },
            "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 86% of commits",
                "points": 3.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 86
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "at_risk",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 47,
            "inputs": {
              "merged_prs": 17,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 9
            },
            "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": "17/26 decided PRs merged",
                "points": 25,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 17,
                      "decided": 26
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/12 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "followers": 3,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "nowo-tech",
              "public_repos": 73,
              "account_age_days": 1186
            },
            "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 followers of nowo-tech",
                "points": 4.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 3,
                      "login": "nowo-tech"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "73 public repos, account ~3 yr old",
                "points": 19.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 73
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 3
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "nowo-tech/doctrine-encrypt-bundle"
              ],
              "ecosystems": "packagist",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "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 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "20 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "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": 84,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "6 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "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": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "9 out of 9 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "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": 25,
                "status": "met",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "at_risk",
        "name": "Security",
        "value": 45,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 45,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.5
            },
            "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": "9 out of 9 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": "Found 0/12 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "dangerous workflow patterns detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "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.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "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": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": 2
            },
            "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": "moderate",
        "name": "AI Readiness",
        "value": 61,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "good",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.557,
              "agent_instruction_files": [
                ".cursor/rules/00-global.mdc",
                ".cursor/rules/01-git-commits.mdc",
                ".cursor/rules/10-php-symfony-bundle.mdc",
                ".cursor/rules/20-twig-and-public-assets.mdc",
                ".cursor/rules/30-frontend-ts-vite-pentatrion.mdc",
                ".cursor/rules/40-tests-quality.mdc",
                ".cursor/rules/50-docs-and-release.mdc",
                ".cursor/rules/60-git-no-cursor-coauthor.mdc",
                ".github/copilot-instructions.md"
              ],
              "agent_instruction_max_bytes": 1189
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".cursor/rules/00-global.mdc, .cursor/rules/01-git-commits.mdc, .cursor/rules/10-php-symfony-bundle.mdc, .cursor/rules/20-twig-and-public-assets.mdc, .cursor/rules/30-frontend-ts-vite-pentatrion.mdc, .cursor/rules/40-tests-quality.mdc, .cursor/rules/50-docs-and-release.mdc, .cursor/rules/60-git-no-cursor-coauthor.mdc, .github/copilot-instructions.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".cursor/rules/00-global.mdc, .cursor/rules/01-git-commits.mdc, .cursor/rules/10-php-symfony-bundle.mdc, .cursor/rules/20-twig-and-public-assets.mdc, .cursor/rules/30-frontend-ts-vite-pentatrion.mdc, .cursor/rules/40-tests-quality.mdc, .cursor/rules/50-docs-and-release.mdc, .cursor/rules/60-git-no-cursor-coauthor.mdc, .github/copilot-instructions.md"
                    }
                  }
                ],
                "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": "49 of 88 human commits state their intent (structured subject or explanatory body)",
                "points": 29.7,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 49,
                      "sampled": 88
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 69,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "composer.lock"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [
                "Makefile",
                "demo/Makefile",
                "demo/symfony8/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.12
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, demo/Makefile, demo/symfony8/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, demo/Makefile, demo/symfony8/Makefile"
                    }
                  }
                ],
                "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, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "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": "12 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 12,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "primary_language": "PHP",
              "largest_source_bytes": 69187,
              "source_files_sampled": 92,
              "oversized_source_files": 1
            },
            "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": "1/92 source files over 60KB",
                "points": 54.4,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 92,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "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": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T22:04:55.559594Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/n/nowo-tech/DoctrineEncryptBundle.svg",
  "full_name": "nowo-tech/DoctrineEncryptBundle",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasPackagist.