Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-26 14:48 UTC

m-agahi / yadgar

Yadgar (یادگار) — Persian for "memento, keepsake." A persistent memory engine for AI coding agents that survives sessions and /clears: it decays what you stop touching, promotes what recurs, filters recall to the git branch you're on, and pairs every memory with a curated wiki searched through the same ranking pipeline. Works with any MCP client.

PythonApache-2.0★ 1 estrella⑂ 0 forksdesde jul 2026Ver en GitHub ↗

m-agahi/yadgar tiene un índice de salud de 58 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (82/100) y la más baja, Community & Adoption (37/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

58
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.

58
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

Max AgahiCuenta personal
1 seguidor5 repositorios públicosdesde may 2020Quinyx A.B.

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
PyPIyadgar5.165.19512149hace 0 díasclaudecognitive-architecturehopfield-networksknowledge-graphmcpmemoryneurosciencepersistent-memory

Métricas por categoría

Vitalidad

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

72Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
9.7/36Cadencia de commits — 14/52 semanas con commits
18/18Volumen de commits — 1486 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year1486
human_commit_share1
days_since_last_push0
active_weeks_last_year14
Cómo se puntúa
27/27Publica versiones — 1 versiones publicadas
36/36Recencia de las versiones — última versión hace 0 días
12.6/27Cadencia de publicación — cadencia desconocida (una sola versión)
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count1
latest_release_tagv5.165.1
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases
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?

37En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 1 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars1
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 (Apache-2.0)
0/18Guía CONTRIBUTING
0/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_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_template
Cómo se puntúa
53/80Descargas mensuales — 9512 descargas/mes en pypi
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesyadgar
dependents
ecosystemspypi
total_downloads
monthly_downloads9512
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

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

53Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.1/22.5Distribución de commits — el principal contribuyente firma el 100% 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,996
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 3/3 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/29 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs3
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
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
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
2.2/25Alcance del propietario — 1 seguidores de m-agahi
17.7/25Trayectoria — 5 repos públicos, cuenta de ~6 años
Datos de entrada utilizados
followers1
owner_typeUser
is_verified
owner_loginm-agahi
public_repos5
account_age_days2270
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en pypi
35/35Recencia de publicación — última publicación hace 0 días
20/20Historial de versiones — 149 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesyadgar
ecosystemspypi
any_deprecatedno
min_days_since_publish0

Calidad de Ingeniería

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

82Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 7 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter
9.6/9.6Hooks de pre-commit
0/6.4.editorconfig
12/20OpenSSF Scorecard: CI-Tests — 2 out of 3 merged PRs checked by a CI test -- score normalized to 6
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_config
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?

42En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
3.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
1.5/2.5CI-Tests — 2 out of 3 merged PRs checked by a CI test -- score normalized to 6
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/29 approved changesets -- score normalized to 0
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
2/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 4
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
0/7.5Vulnerabilities — 19 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,2
Excluidos de la puntuación (sin datos o no aplicable): 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.

75Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, yadgar/_shared/AGENTS.md, yadgar/backend/AGENTS.md, yadgar/core/AGENTS.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 100 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_filesAGENTS.md, yadgar/_shared/AGENTS.md, yadgar/backend/AGENTS.md, yadgar/core/AGENTS.md
agent_instruction_max_bytes20.810
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato
11/11Verificación estática de tipos — sdk-js/tsconfig.json, yadgar/py.typed
10/10Entorno reproducible — Dockerfile, Nix, lockfile
10/10Práctica demostrada con agentes — 5 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
4/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 4
Datos de entrada utilizados
has_nix
has_tests
lockfilespackage-lock.json, uv.lock
has_dockerfile
typed_languageno
bootstrap_filesMakefile
has_devcontainerno
has_linter_config
typecheck_configssdk-js/tsconfig.json, yadgar/py.typed
agent_commit_share0,05
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
27/45Código verificable por tipos — Python con configuración de verificación de tipos (sdk-js/tsconfig.json, yadgar/py.typed)
54.4/55Tamaños de archivo manejables — 13/1187 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languagePython
largest_source_bytes127.497
source_files_sampled1187
oversized_source_files13
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

1estrellas de GitHub
2contribuidores
1486commits en los últimos 12 meses
0días desde el último push
1versiones publicadas
1factor bus
0issues abiertas
npm, PyPIecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package '@yadgar/sdk' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index pypi:yadgar@5.165.1; advisories assessed against the repository dependency graph instead

Más detalle

OpenSSF Scorecard 4.2 / 10
4.2agregado

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-26 14:47 UTC

10Binary-Artifactsno binaries found in the repo
5Branch-Protectionbranch protection is not maximal on development and all release branches
6CI-Tests2 out of 3 merged PRs checked by a CI test -- score normalized to 6
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/29 approved changesets -- score normalized to 0
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
4Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 4
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
0Vulnerabilities19 existing vulnerabilities detected
Dependencias directas 25
RegistroPaqueteRestricción de versiónManifiesto
PyPIfastapi>=0.109.1pyproject.toml
PyPIsse-starlette>=1.6.0pyproject.toml
PyPIuvicorn>=0.24.0pyproject.toml
PyPImcp>=1.23.0pyproject.toml
PyPIwatchdog>=3.0.0pyproject.toml
PyPIpydantic>=2.5.0pyproject.toml
PyPIpydantic-settings>=2.0.0pyproject.toml
PyPInumpy>=1.24.0pyproject.toml
PyPIscipy>=1.11.0pyproject.toml
PyPIhttpx>=0.27pyproject.toml
PyPInetworkx>=3.0pyproject.toml
PyPIruamel.yaml>=0.18.0pyproject.toml
PyPIprometheus-client>=0.20.0pyproject.toml
PyPIpython-multipart>=0.0.27pyproject.toml
PyPIurllib3>=2.7.0pyproject.toml
PyPIregex>=2024.1.0pyproject.toml
PyPIopentelemetry-api>=1.30,<2pyproject.toml
PyPIopentelemetry-sdk>=1.30,<2pyproject.toml
PyPIopentelemetry-instrumentation-fastapi>=0.51b0pyproject.toml
PyPIopentelemetry-instrumentation-httpx>=0.51b0pyproject.toml
PyPIopentelemetry-exporter-otlp-proto-http>=1.30,<2pyproject.toml
PyPImsgpack>=1.0pyproject.toml
PyPIsurrealdb>=1.0.0pyproject.toml
PyPItomlkit>=0.13pyproject.toml
npm@modelcontextprotocol/sdk^1.29.0sdk-js/package.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": 22746,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "CSS": 52003,
        "Nix": 31866,
        "HTML": 213118,
        "Shell": 139489,
        "Python": 11745349,
        "Makefile": 15678,
        "Dockerfile": 1378,
        "JavaScript": 620611,
        "TypeScript": 78043
      },
      "pushed_at": "2026-07-26T14:46:45Z",
      "created_at": "2026-07-25T17:55:19Z",
      "owner_type": "User",
      "updated_at": "2026-07-26T14:43:13Z",
      "description": "Yadgar (یادگار) — Persian for \"memento, keepsake.\" A persistent memory engine for AI coding agents that survives sessions and /clears: it decays what you stop touching, promotes what recurs, filters recall to the git branch you're on, and pairs every memory with a curated wiki searched through the same ranking pipeline. Works with any MCP client. ",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "master",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Python",
      "significant_languages": [
        "Python"
      ]
    },
    "owner": {
      "blog": "https://www.linkedin.com/in/m-m-agahi/",
      "name": "Max Agahi",
      "type": "User",
      "login": "m-agahi",
      "company": "Quinyx A.B.",
      "location": "Västerås",
      "followers": 1,
      "avatar_url": "https://avatars.githubusercontent.com/u/64974579?v=4",
      "created_at": "2020-05-07T15:23:58Z",
      "is_verified": null,
      "public_repos": 5,
      "account_age_days": 2270
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v5.165.1",
          "kind": "patch",
          "published_at": "2026-07-26T14:46:45Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "9ac98f3566dcc26c0d53f33b4a46810a2f7e0dd2",
          "body": "…ction (#3)\n\n* fix(code_graph): handle positional-list Cypher rows in endpoint extraction\n\nCar F live-smoke on yadgar itself (first non-mocked run) found the real\ncodebase-memory-mcp binary returns route_method rows as bare positional\nlists, not dicts keyed by m.route_method/route_path/name. _extrac\n[…]\nt-assertion steps) omitted these 3 jobs,\nso they could fail while test-gate still passed — silently un-gating a\nmerge. Add them to needs: and assert their result alongside the existing\nsubsystem jobs.",
          "is_bot": false,
          "headline": "fix(code_graph): handle positional-list Cypher rows in endpoint extra…",
          "author_name": "Max Agahi",
          "author_login": "m-agahi",
          "committed_at": "2026-07-26T14:42:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "028dcecda8334ceab15b5b1e27c5e8a5c2f57c4f",
          "body": "…it (#2)\n\n* ci: add GitHub Actions workflows ported from Forgejo\n\nReplicate .forgejo/workflows/* as .github/workflows/* (Forgejo kept intact for a\nfuture self-hosted instance). Action refs de-URL'd to owner/repo@ref, release job\n-> softprops/action-gh-release@v2, explicit minimal per-job permissions\n[…]\nub/PULL_REQUEST_TEMPLATE.md)\n\nCopy of .forgejo/PULL_REQUEST_TEMPLATE.md at the GitHub-recognized path so new\nPRs auto-populate the Summary/What/Why/Notes/Test-plan sections. .forgejo copy\nkept intact.",
          "is_bot": false,
          "headline": "ci: GitHub Actions workflows (Forgejo port) + self-hosted runs-on spl…",
          "author_name": "Max Agahi",
          "author_login": "m-agahi",
          "committed_at": "2026-07-25T19:21:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b13b8e08eb4865fb0445699de3285512a6e755bc",
          "body": "chore: migrate repo references from Codeberg to GitHub",
          "is_bot": false,
          "headline": "Merge pull request #1 from m-agahi/chore/migrate-codeberg-to-github-refs",
          "author_name": "Max Agahi",
          "author_login": "m-agahi",
          "committed_at": "2026-07-25T18:16:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a8d3c2901e0f32de8d9c4fd82a1b913e90d7992",
          "body": "Repo moved from codeberg.org/maxagahi/yadgar to github.com/m-agahi/yadgar.\nCodeberg's updated Terms of Use (2026-06-29, \"prohibit LLM-extrusions\")\nnow ask that projects not mostly consist of AI-generated code; yadgar is\nbuilt with heavy AI-agent assistance, so it no longer fits and has moved.\n\n- URL\n[…]\nerg CI badges\n- AGENTS.md: PR flow Forgejo REST API -> gh CLI\n- Left intentionally: .forgejo/ CI (GitHub Actions port deferred), ccpm\n  sibling link (still on Codeberg), LICENSE, inert historical docs",
          "is_bot": false,
          "headline": "chore: migrate repo references from Codeberg to GitHub",
          "author_name": "m-agahi",
          "author_login": "m-agahi",
          "committed_at": "2026-07-25T18:13:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed9833c5a98f762029f1656a8bcaa7b9fa50b881",
          "body": "…ive install plan (#103, ADR-0161)' (#237) from docs/precompact-async-plan into master\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/237",
          "is_bot": false,
          "headline": "Merge pull request 'docs(plans): PreCompact async + global-authoritat…",
          "author_name": "max agahi",
          "author_login": null,
          "committed_at": "2026-07-24T16:44:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a695eaf9021b6bafd9daf48c916ac9d5861be6af",
          "body": "…n (#103, ADR-0161)\n\nDesign doc for task #28 (PR-1 async pre-compact-drain, core 5.162.0 — SHIPPED)\n+ task #29 (PR-2 global-authoritative hook install, Option B). Tracks the\ntwo-impl convergence, double-fire fix, and foreign-preserve installer.",
          "is_bot": false,
          "headline": "docs(plans): PreCompact async hook + global-authoritative install pla…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-24T16:44:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef091bd73be607bcb7862a523c39c133f0213a80",
          "body": "…rs' (#236) from docs/v5415-profiling-remeasure into master\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/236",
          "is_bot": false,
          "headline": "Merge pull request 'docs: re-measure v5.41.5 wiki_add profiling numbe…",
          "author_name": "max agahi",
          "author_login": null,
          "committed_at": "2026-07-24T16:44:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab409c0a67d6963dab81a69cd65ee66d7c3558e2",
          "body": "Refreshed the substep + e2e latency figures (secret-gate 0.106->0.037ms,\nsimilarity-gate 28.9->38.4ms, e2e p50 0.51->0.26ms). Numbers only; e2e still\nwell under the I9 <=5ms budget.",
          "is_bot": false,
          "headline": "docs: re-measure v5.41.5 wiki_add profiling numbers",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-24T16:44:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "847ffc1cd69fcf550758122cf1b97eb6c89212ac",
          "body": "Survey verdict: ~200 of ~335 Settings knobs migratable to the DB\nruntime_config store (ADR-0163) -> live, dir-scoped, restart-free.\nKey goal: seed migratable knobs into the DB (via config_set MCP) +\nretire them from config.yaml, shrinking it to boot-only. Includes the\nbackend-local-cache prereq (Phase 0.5), I25 ratchet evolution (Phase\n0.7), per-knob read->seed->retire recipe, and batched rollout.",
          "is_bot": false,
          "headline": "docs(plans): Settings -> DB runtime_config migration plan (#35)",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-24T13:46:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bccc8ea99aa05aed89187a4c71e509e6a75c240",
          "body": "…h watcher dir' (#235) from fix/vacuum-trigger-path into master\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/235",
          "is_bot": false,
          "headline": "Merge pull request 'fix(vacuum): align launchd trigger write path wit…",
          "author_name": "max agahi",
          "author_login": null,
          "committed_at": "2026-07-24T12:21:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9273426cf23160c6d41903ae3aa8ada76772926b",
          "body": "vacuum_now() / viz vacuum was a silent no-op on the launchd (macOS)\nlauncher: the core daemon container wrote its trigger to the /data\ndefault (YADGAR_VACUUM_TRIGGER_PATH=/data/triggers/vacuum_requested,\nconfig_registry.py) — the DATA volume — while the vacuum-trigger plist\nwatches ~/.local/state/ya\n[…]\nmage rebuild + version bump, out of\nscope for this unit-config fix. The repo systemd install + docker-compose\nship no vacuum-trigger watcher, so the invariant is vacuously satisfied\nthere (no change).",
          "is_bot": false,
          "headline": "fix(vacuum): align launchd trigger write path with watcher dir",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-24T06:14:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "43bc87124449ebe55da1c1b6ebc4bccbbfb72e7c",
          "body": "…5.0) — combined to save CI/build cycles' (#234) from fix/callum-batch into master\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/234",
          "is_bot": false,
          "headline": "Merge pull request 'fix: batch Callum Donaldson fixes #228–233 (v5.16…",
          "author_name": "max agahi",
          "author_login": null,
          "committed_at": "2026-07-23T21:47:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9286a35af116fef3fec69e77f9979b46da3c575b",
          "body": "… reads\n\nPure formatting — getattr→direct conversion shortened lines enough to\ncollapse. No semantic change.",
          "is_bot": false,
          "headline": "style: ruff-format retrieval line-collapse after #231 direct-Settings…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-23T20:59:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac9027c3db919beab813d114888701355951bdd0",
          "body": "…fixes (#230, #231)\n\n- BC-B6 belief recall-surfaces e2e (TestBCB6_BeliefRecallSurfaces): mirrors the\n  BC-B5 profile test; seeds a derived_belief + memory, recalls through the real\n  fusion path, asserts a _source='belief' result surfaces. Locks #230 (the\n  narrowed belief-branch except that stops s\n[…]\nhantom getattr knobs are an explicit\n  allowlist exception (itself guarded against silently becoming real). Locks #231.\n- BC-B6 catalogued in CAP-WIKI-017; contract header recount 253->254 / 56->57 ✅.",
          "is_bot": false,
          "headline": "test(retrieval): regression tests locking Callum's belief + Settings …",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-23T20:46:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "55b1ae20dee0531993ca7b53bcc37dcb2d4cfa17",
          "body": "…batch (#228-233)\n\nCore 5.164.0 -> 5.165.0 (daemon/systemd fix #233).\nBackend 5.58.5 -> 5.58.6 (auth/retrieval/storage fixes under yadgar/backend/**).\nCHANGELOG entry crediting Callum Donaldson for all six bundled fixes.\nI33 observe-coverage: governed 'trivial' exemption for the new\n_validate_param_keys bind-param validator introduced by #232.",
          "is_bot": false,
          "headline": "chore(release): v5.165.0 — bump core + backend 5.58.6 for Callum fix …",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-23T20:37:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1cb574adffb2cd02ddaacb1c0ed51bcabc85018",
          "body": "yadgar daemon start (start_backend) and the generated systemd unit omitted\nYADGAR_QUEUE_BASE and the shared queue-volume mount on the backend. The\ncore writes the async write-queue to {YADGAR_DATA_DIR}/queue on its own\nvolume; the backend drainer reads YADGAR_QUEUE_BASE with no fallback, so it\nstaye\n[…]\n writes never committed. Only\ndocker-compose wired it.\n\nMount the core volume at /queue-data and set YADGAR_QUEUE_BASE=/queue-data\nin both start_backend and the systemd backend unit (mirrors compose).",
          "is_bot": false,
          "headline": "fix(daemon): wire shared queue volume so the backend drainer runs",
          "author_name": "Callum Donaldson (Quinyx)",
          "author_login": "cddquinyx",
          "committed_at": "2026-07-23T20:30:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9695963a298902123cbd03eb23886a7b385e2d32",
          "body": "The HTTP /sql query paths interpolate the param NAME directly into the\nquery text (LET $<name> = <json-value>) because SurrealDB's /sql endpoint\nhas no JSON bind-var facility. Values are JSON-escaped and cannot break\nout, but an unvalidated NAME was a latent SurrealQL-injection vector.\n\nAdd _validat\n[…]\no every\ninterpolation site (_q_server, _q_ro, _q_multi_server/_embedded, batch\nchunk builder). Replaces the misleading TODO that assumed /sql supports\n{sql, vars} (that is the RPC endpoint, not /sql).",
          "is_bot": false,
          "headline": "fix(storage): validate SurrealQL bind-parameter names",
          "author_name": "Callum Donaldson (Quinyx)",
          "author_login": "cddquinyx",
          "committed_at": "2026-07-23T20:30:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "450bbc39c10cb087d12152bb7778b031e1af7858",
          "body": "~30 sites across the retrieval pipeline read real Settings fields via\ngetattr(self._settings, \"FIELD\", default). Because Settings is a pydantic\nmodel where these fields exist, the getattr-with-default form means a typo\nor renamed field silently returns the default — usually False, which\nquietly disa\n[…]\nr\ninstead of silently degrading recall. Only fields that genuinely exist on\nSettings are converted (verified against Settings.model_fields); five\nnever-defined names are intentionally left as getattr.",
          "is_bot": false,
          "headline": "fix(retrieval): read Settings fields directly so a rename fails loud",
          "author_name": "Callum Donaldson (Quinyx)",
          "author_login": "cddquinyx",
          "committed_at": "2026-07-23T20:30:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c070b3235912c6c498ce683fe42fe3b9585e3287",
          "body": "…error\n\nThe belief-search branch caught `except Exception: pass`, so a missing/renamed\nconfig key (e.g. BELIEF_HIGH_CONFIDENCE_BOOST) or any storage error silently\ndropped ALL derived beliefs from recall — the exact silent-quality regression\nthe sibling profile branch was already narrowed to avoid (v5.68 fix #38).\n\nNarrow to (KeyError, TypeError, ValueError) so malformed rows are tolerated\nbut an AttributeError from a missing config key propagates loudly.",
          "is_bot": false,
          "headline": "fix(retrieval): stop silently dropping all beliefs on config/storage …",
          "author_name": "Callum Donaldson (Quinyx)",
          "author_login": "cddquinyx",
          "committed_at": "2026-07-23T20:30:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97525c01d2d2d3b3a3bb95d4f208ed289fb64a17",
          "body": "_require_admin_token is the sole auth gate on every backend endpoint\n(/recall, /read_query, /embed, /admin/*), which listens on 127.0.0.1:8001\nand is reachable by any local process. A truthy YADGAR_ALLOW_ROOT returned\nearly and skipped auth entirely — a test escape hatch that would fully\ndisable bac\n[…]\n a\nshared env file.\n\nHonour the bypass only when PYTEST_CURRENT_TEST is present, so it works in\ntests but is inert everywhere else. Add regression tests asserting the\nbypass is refused outside pytest.",
          "is_bot": false,
          "headline": "fix(backend): scope YADGAR_ALLOW_ROOT auth bypass to pytest only",
          "author_name": "Callum Donaldson (Quinyx)",
          "author_login": "cddquinyx",
          "committed_at": "2026-07-23T20:30:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d2d889a0eefe90b4ddd1f36f6e4506d6dcc8d29b",
          "body": "_require_admin_token compared the bearer token with plain `!=`, unlike the\ncore BearerAuthMiddleware which uses hmac.compare_digest. The backend is\nloopback-reachable by other local users, so the non-constant-time compare is\na (difficult but real) timing side-channel on the shared token.\n\nSwitch to hmac.compare_digest with the same None/empty fail-secure handling.",
          "is_bot": false,
          "headline": "fix(backend): constant-time compare for the admin bearer token",
          "author_name": "Callum Donaldson (Quinyx)",
          "author_login": "cddquinyx",
          "committed_at": "2026-07-23T20:30:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c777f12917ee5dc7e44b1e9b6ff3a416c2eb6ce",
          "body": "…ault-off) (#227)\n\n## Summary\n\nTwo folded features on one branch: **(1) code_graph** — multi-language code-structure recall over the user's arbitrary repos via a host-side shell-out to `codebase-memory-mcp` (ADR-0162); **(2) a DB-backed runtime config store** (ADR-0163) that replaces code_graph's en\n[…]\ntrue)`, index a real repo, confirm the digest injects + is used; verify per-repo opt-out (`code_graph.enabled=false` at a dir).\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/227",
          "is_bot": false,
          "headline": "feat: code_graph + DB-backed runtime config store (ADR-0162/0163, def…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-23T14:01:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2e1046b5b5b735ed933f7377508bb9e76039fadc",
          "body": "…-start suggest (ADR-0162)\n\nFinal design knobs: digest home = yadgar memory block (auto-injected SessionStart);\nstop-hook refresh 200-msg cadence (= repo_wiki); SessionStart soft-suggests refresh when\ncoding + no digest (never forced); opt-out via CODE_GRAPH_ENABLED global + .code-graph-disable\nper-repo marker.",
          "is_bot": false,
          "headline": "docs(plans): code_graph — digest=memory block, opt-out + soft session…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-22T20:13:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6278c8cd5b0fcf08fe0597f9ec8a4284de993401",
          "body": "…s (ADR-0162)\n\nrepo_wiki proved recall-ranked code pages = noise. code_graph drops the page_type/\npersist/recall shape entirely: per-repo architecture digest lives in an always-injected\nyadgar memory block (SessionStart, recall-free, bounded), live drill-down via host CLI.\nHARD: index latest origin/\n[…]\np worktree), never the working tree.\nStop-hook cadence swaps repo_wiki->code_graph (flagged). Instruction via agent-prompts +\nproject_brief, no skill. Facts verified against block-injection/hook code.",
          "is_bot": false,
          "headline": "docs(plans): code_graph v3 — pivot to injected digest, no recall page…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-22T20:10:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ca9a39a516c71da271536e2a262e0fc6b1a48f8c",
          "body": "…ry-mcp (ADR-0162)\n\nHost-side shell-out to codebase-memory-mcp (MIT static C binary, 158 langs, offline)\nproducing query-scoped projections into a new code_graph wiki page_type; repo_wiki\nsuccessor. Verified on a 3-service pilot (Java/PHP/Go, Quinyx monorepo) + adversarial\npre-build audit folded: ex\n[…]\ne-graph CLI, not the\nread-only MCP container), secret-gate rule-tiering (high_precision_only), page-budget at\npersist tool, canonical_root+subdir project keying, detect_changes as freshness authority.",
          "is_bot": false,
          "headline": "docs(plans): code_graph — multi-lang code-structure via codebase-memo…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-22T19:44:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "04d1faa79657d6108df075da673dfb72a4fff045",
          "body": "## Summary\n\nAdd `async: true` to the PreCompact drain hook so `/compact` is no longer blocked by the hook harness waiting for the drain POST to complete.\n\n<details>\n<summary><b>What</b></summary>\n\n- `_make_hook_entry` in `yadgar/core/install/_settings.py` gains `async_: bool = False` param; when `Tr\n[…]\n4 unchanged)\n- [ ] Post-deploy: run `/compact` in a live session and confirm it returns instantly without waiting for the drain\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/226",
          "is_bot": false,
          "headline": "fix(#103): async PreCompact drain hook — unblock /compact (#226)",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-22T17:34:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "979cc417d93479680f3ad2666b43d366614fcd67",
          "body": "…m churn (core 5.161.0 / backend 5.58.4) (#225)\n\n## Summary\n\nFix the v5.160.0 repo-wiki write-seam bug (dead crossrefs + delete-all/re-add-all churn) by making repo-wiki pages a first-class **schema-backed `page_type`** routed through a single **`wiki_policy`** resolver — validated, never gate-bypas\n[…]\n2e` green + all invariant/complexity/version hooks\n- [ ] Post-deploy live: bulk regen + one refresh cadence confirms zero churn\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/225",
          "is_bot": false,
          "headline": "feat(#83): repo-wiki page-type + wiki_policy resolver — fix write-sea…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-22T13:16:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c69d09955de88eec95861f5fe6f260c926de9c01",
          "body": "## Summary\n\nShip repo-wiki refresh loop (#83, ADR-0157): host-side generation, crossref edges, validated ingest, stale-only diff, cadence refresh — eliminates container-blind MCP tools. Core 5.160.0 / backend 5.58.1.\n\n<details>\n<summary><b>What</b></summary>\n\n- **Car A — generator/scanner fixes:** p\n[…]\nchive/repo-wiki-refresh-2026-07-21.md`\n- [ ] Post-deploy: bulk regen background agent run + pointer-anchor creation (see Notes)\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/224",
          "is_bot": false,
          "headline": "feat(v5.160.0): repo-wiki refresh loop (#83, ADR-0157) — Cars A–D (#224)",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-22T06:31:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c9722634d07bac3d5a5b6ea04765510330242749",
          "body": "…/CLI + Car B swap/rip (#223)\n\n## Summary\n\nv5.159.0 — LLM-curated subagent findings (ADR-0156): Car A collector/CLI + Car B atomic swap/rip. Core-only, backend 5.58.0 unchanged. Supersedes the inert auto-store from v5.158.0 (#87).\n\n<details>\n<summary><b>What</b></summary>\n\n- **Car A (#98):** `collec\n[…]\nocs/plans/curated-findings-2026-07-21.md` archived to `docs/plans/archive/`\n- [x] CHANGELOG entry added under `## [Unreleased]`\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/223",
          "is_bot": false,
          "headline": "v5.159.0 — LLM-curated subagent findings (ADR-0156) — Car A collector…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-21T07:34:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d1a5eaaf6306ce61a32708b6523b1076f41dfb04",
          "body": "…it 2026-07-21) (#222)\n\n## Summary\n\nArchive 11 shipped/dead plan docs + delete 2 superseded files (docs-only audit 2026-07-21).\n\n<details>\n<summary><b>What</b></summary>\n\nArchived (git mv → docs/plans/archive/):\n- viz-galaxy-only-2026-07-17.md\n- viz-trace-view-polish-2026-07-18.md\n- wiki-cold-drain-\n[…]\narchive/\n- [x] Both deleted files confirmed absent\n- [x] Pre-push hook passed (all checks skipped or passed for docs-only diff)\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/222",
          "is_bot": false,
          "headline": "docs(plans): archive 11 shipped/dead plans + delete 2 superseded (aud…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-21T06:11:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1fc5c26c8813278f31d50b71eb936997d78cbdf3",
          "body": "…re-loop fix + anchor-audit + Cursor (#221)\n\n## Summary\n\nMulti-client hook train (partial ship): shared hook-emitter seam + subagent capture-loop fix + anchor-audit + Cursor client. Core v5.158.0, no backend bump.\n\n<details>\n<summary><b>What</b></summary>\n\n- **Car 0** — shared `yadgar hook <event>` \n[…]\n- [x] Full suite + `make e2e` via CI on this branch (integration flow: local suite/e2e intentionally skipped — CI is the gate).\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/221",
          "is_bot": false,
          "headline": "feat(v5.158.0): multi-client hook train (partial) — hook seam + captu…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-20T22:03:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0574ec3c11ec20de2aad85dd90f46ab8f3d499ff",
          "body": "…) (#220)\n\n## Summary\n\nAdd 6 per-client yadgar hook-port plan files based on 2026-07-20 primary-source re-verification, superseding ADR-0145 and the 2026-07-18 survey.\n\n<details>\n<summary><b>What</b></summary>\n\n- `docs/plans/port-codex-2026-07-20.md` — Codex CLI (BUILD, 5/5 needs, blocking Stop)\n- `\n[…]\nass (no code changes; docs only)\n- [ ] Live-test gates called out in Cline, Kiro, Amp, OpenCode plans — deferred to build tasks\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/220",
          "is_bot": false,
          "headline": "docs(plans): 6 per-client hook-port plans (2026-07-20 re-verification…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-20T21:10:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8edc485e2ed79768845eaac2b62d6d5e5c71919e",
          "body": "… rules template + fix __init__ backend-version drift (#76/#79/#68) (#219)\n\n## Summary\n\nDogfood cleanup: remove the dead wiki-draft subsystem, enrich the shared rules template (now sourced by every client), and fix the recurring `__init__.py` backend-version drift at the root.\n\n<details>\n<summary><b\n[…]\n-test `wiki_approve`/`wiki_draft`/`wiki_discard` references remain.\n- [x] Real-SurrealDB e2e proves the migration-026 DROP DDL.\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/219",
          "is_bot": false,
          "headline": "v5.157.0 — dogfood cleanup: remove dead wiki-draft subsystem + enrich…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-20T17:53:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "616f870372d839b02192a33d0a4dbed69186741d",
          "body": "… bug fixes (ADR-0152) (#218)\n\n## Summary\n\nMake the galaxy layout backend-authoritative (fixes cluster-scatter + core edge-starburst) and fix the reload FOUC + node-colour flicker — the four bugs from your v5.154.0 smoke-check.\n\n<details>\n<summary><b>What</b></summary>\n\n- **Car A (backend)** `graph_\n[…]\n clusters group in arms, core is single-nodes (no starburst), no reload flash, no colour flicker, sliders recompute on release.\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/218",
          "is_bot": false,
          "headline": "v5.156.0 — viz: backend-authoritative galaxy layout + 4 render/layout…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-20T16:58:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1c35f90d82b1c24e2bb33a38a792223738e3fa19",
          "body": "## Summary\n\nv5.152.0 — multi-client MCP + rules framework (#66): descriptor registry, MCP-reg generator, rules generator, unified install CLI, --print declarative mode for nix provisioning.\n\n<details>\n<summary><b>What</b></summary>\n\n- `yadgar/core/install/clients/descriptor.py` — `ClientDescriptor` \n[…]\ne — MISSING=0\n- [x] I30 complexity-cap integrity — passed\n- [x] I13 complexity caps — passed\n- [x] pre-push `make e2e` — passed\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/215",
          "is_bot": false,
          "headline": "v5.152.0 — multi-client MCP + rules framework (#66) (#215)",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-20T12:23:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0d9eeb03d35ec308010c10155497131aa6f89c46",
          "body": "…whiteout) (#217)\n\n## Summary\n\nFix the v5.153.0 (#216) galaxy edge whiteout — edges are faint at rest again (NormalBlending), pop bright on node-focus, and the two mass edge types default off.\n\n<details>\n<summary><b>What</b></summary>\n\n- `galaxy-view.js` `_buildEdges`: at-rest edge material `Additiv\n[…]\nrball, no dark veil over the core; click a node → its incident edges pop bright; toggle a mass type on/off shows/hides cleanly.\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/217",
          "is_bot": false,
          "headline": "v5.154.0 — viz hotfix: galaxy edges faint at rest (fix #216 additive …",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-20T10:17:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "180ec7e0ee00de70d7cefad16d7477a154945339",
          "body": "…ge color + focus-highlight + grouped EDGE TYPES (#69) (#216)\n\n## Summary\n\nGalaxy edges made real — 2-class (retrieval/informational) faint backdrop that brightens per-type on node focus — plus (coordinator-added, AWAITING USER CONFIRMATION) a unified always-on left panel that folds STRUCTURE/NODES/\n[…]\nSER: confirm the expanded panel layout (single-panel fold + View-button removal + starfield parallax) before un-drafting/merge.\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/216",
          "is_bot": false,
          "headline": "v5.153.0 — viz: kill GRAPH STATS + NODE TYPES View panels; 2-class ed…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-19T07:48:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fba3a0f7d668ff26b6a03e69e5a1af9b8b1ca6db",
          "body": "…214)\n\n## Summary\n\nTwo viz changes on this branch. (1) Remove a stale `!important` CSS rule that hid the HEAT FILTER / GRAPH STATS / NODE TYPES / EDGE TYPES panels once the galaxy scene mounts, and that also dead-locked the View menu toggle. (2) Add a galaxy **cosmic backdrop** — a seamless nebula s\n[…]\nhe 4 panels stay visible after galaxy render, View-menu toggles work, and the built-in backdrop matches the approved prototype.\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/214",
          "is_bot": false,
          "headline": "fix(viz): stop galaxy init from hiding heat/stats/node/edge panels (#…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-18T22:13:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bcbd1bc4ff385d47ac8108329e5601c925b2e24b",
          "body": "## Summary\n\nCore 5.150.0 (backend 5.56.0): the viz-trace-view train (4 cars), a PR template with a title/body validation gate, and the codified TDD-hardening pipeline. Per-section detail below.\n\n<details>\n<summary><b>What</b></summary>\n\n- 4-car viz-trace-view train: #54 trace-view polish, #29 cross-\n[…]\nrage, capability, skip-inventory).\n- [x] pre-push (make e2e, complexity-cap, I33 observe-coverage).\n- [x] CI green on Codeberg.\n\n</details>\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/213",
          "is_bot": false,
          "headline": "v5.150.0 — viz-trace-view train (#213)",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-18T14:18:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8039c1dae7a320d28a1836bf0834af719a1de70e",
          "body": "…ph, balanced arms, draggable popups) (#212)\n\n## v5.149.0 — two core-only changes (backend 5.55.0 unchanged)\n\n### 1. Forcing SessionStart task-restore nudge (ADR-0137)\nThe task-list restore nudge (`http.py::_task_list_restore_nudge`) was appended LAST + advisory → ignored (tasks in the yadgar wiki, \n[…]\nalanced · Fit/Reset re-frame · drag a popup by its header · task-restore nudge fires first next session. Merge → nix bump 5.149.0 + deploy.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/212",
          "is_bot": false,
          "headline": "v5.149.0: forcing task-restore nudge + galaxy-only viz (rip force-gra…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-17T20:46:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f726bb627b77259b7ac3814c40e52f39f44d0e77",
          "body": "…v5.148.0) (#211)\n\n## viz post-deploy fixes train (v5.148.0, core-only — backend 5.55.0 unchanged)\n\nThe user smoke-checked the deployed v5.147.0 galaxy and reported 12 bugs. A **fable plan-audit corrected two headline root-causes before build** — building the naive plan would have shipped 2 no-op fi\n[…]\n bump `yadgar.nix` 5.148.0 + deploy. The Tempo fix is a separate nix change (already pushed) — apply it + the dev-reset in MIGRATION_NOTES.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/211",
          "is_bot": false,
          "headline": "viz post-deploy fixes train: 12 smoke-check bugs, 6 cars, core-only (…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-17T14:17:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "85b52eabe779bc17a7eae66abafde3521caea93b",
          "body": "…eural-console restyle + traces TraceQL fix (v5.147.0) (#210)\n\n## viz mockup-fidelity train (ADR-0135)\n\nThe shipped viz did NOT match the user-approved mockups. #209 ported galaxy *positions* into 3d-force-graph (no glow/halos/starfield/rotation/theme); config + traces were functionally-there but ae\n[…]\ny↔Force↔2D repeatedly (WebGL leaks), click nodes, drag sliders; verify config 3-col/tray/arm-countdown render; verify Traces tab populates.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/210",
          "is_bot": false,
          "headline": "viz mockup-fidelity train: galaxy raw-Three.js render mode + config n…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-17T07:46:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e39fc780064dbde22dcde621a67558020dd5b5ad",
          "body": "… Phase 3 + F1 cap-affordance (core 5.146.0 / backend 5.55.0) (#209)\n\n## Summary\n\nviz-rest — the user-confirmed remainder of `viz-triage-checklist-2026-06-27` (60/90 items were already DONE). Theme **unchanged** (oscilloscope; no font/palette work). **12 items built, 1 obviated.** Core `5.145.0 → 5.\n[…]\nxit 0** (all HARD invariants I13/I33/I32/I30 + version consistency Passed).\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/209",
          "is_bot": false,
          "headline": "feat(viz): finish-viz — viz-rest items + galaxy layout + trace-replay…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-16T22:38:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bb1d4721f24efcb568f7fb17003e581acec90eaf",
          "body": "…ce (db_inspect, backend 5.54.0) (#208)\n\nThis PR combines TWO independent changes (per user request to combine PRs).\n\n---\n\n## 1 — Graph viz: full graph by default (core 5.145.1)\n\nMake the graph visualization show the **full graph by default**. The three per-node-type caps in the viz `/api/graph` pay\n[…]\ndocs/plans/archive/` (Status: SHIPPED) in the final commit (ADR-0081/0082).\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/208",
          "is_bot": false,
          "headline": "feat: viz full-graph default (caps→0) + read-only DB inspection surfa…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-16T19:23:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "448ef7870b686318e8c61665cf7b113f9e19d0b6",
          "body": "…core 5.145.0) (#207)\n\n## viz-train — graph-viz performance + fidelity train\n\nFour cars addressing the graph-viz slow-load + live-update complaints. Core **5.145.0** / backend **5.53.0**.\n\n### Cars\n\n**A — render-perf (ADR-0131, supersedes ADR-0010).** The precomputed-layout chain (v5.88) shipped beh\n[…]\nnix bump (core 5.145.0 / backend 5.53.0) + deploy + the smoke-checks above.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/207",
          "is_bot": false,
          "headline": "viz-train: render-perf + trace-replay + F2 SSE relay + config P3/P4 (…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-16T16:07:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e5ef87f2750969115ffdf48be63aa3a3085f173a",
          "body": "…emon single-file (ADR-0130, backend 5.51.0) (#205)\n\n## finish-core-splits (follow-up to #203, ADR-0130)\n\nCompletes the ADR-0066 ≤500 goal for the 2 remaining splittable cores, and documents the 2 that intentionally stay single-file. A read-only audit (ADR-0130) classified the 4 backend/core cores l\n[…]\nle-std cores; the other 2 are ADR-0130-accepted cohesive single-file cores.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/205",
          "is_bot": false,
          "headline": "finish-core-splits — cache + ml_client split ≤500; embed_service + da…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-16T07:14:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "be891dcfc84434c9b19afa9bed8aca34a2387912",
          "body": "…efresh ROADMAP (#206)\n\nArchive 9 plans, fold 2 into survivors, relabel 6 status headers, refresh ROADMAP.\n\n## Summary\n\n- **Archived (9):** surrealkv-safe-stop, model-tier-agent-combos, build-vs-buy-library-audit, process-exporter-scrape-interval, wiki-kb-usefulness-snr, agent-brain-learning-loop-20\n[…]\nns (DEFERRED v6 horizon)\n- **ROADMAP:** remove archived rows, update deferred labels/horizons, add tasks-minted table #30/#32/#33/#9-C4/#19\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/206",
          "is_bot": false,
          "headline": "docs(plans): plan-triage 2026-07-16 — archive 9, fold 2, relabel 6, r…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-15T23:40:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "84930918b27a320a0a76e6ee2ed2c37d620a7b3e",
          "body": "…l (#204)\n\n## Summary\n\n- Controlled recall-latency benchmark of the live 5.143.0/5.50.0 daemon (post-module-standardization split, PR #203), canonical histogram-delta method (`yadgar_recall_duration_ms` on :8765), CE-miss validity gate PASS.\n- Adds `docs/benchmark-results/RECALL_SPEED.md` (consolida\n[…]\ncards both blocks\n- [x] Docs: RECALL_SPEED.md + README speed subsection + checklist controlled-run section & baseline cold-graph annotation\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/204",
          "is_bot": false,
          "headline": "perf(bench): post-split recall benchmark — 5.143.0/5.50.0 perf-neutra…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-15T19:26:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2b0e6366995f11ff59b3109a19c3f5c6346e8871",
          "body": "…v5.143.0/5.50.0) (#203)\n\n## Module-standardization jumbo train (ADR-0066 + ADR-0128)\n\nCompletes the ADR-0066 I13 module split (C1–C6 + SHIM) as one train, bundled with two quick fixes and a net-new `adr.py` split. Re-audited 2026-07-15 (plan ~90% valid); executed jumbo max-scope per user decision, \n[…]\nrap classes (reassigned globals / monkeypatch reach / call-time constants).\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/203",
          "is_bot": false,
          "headline": "Module-standardization jumbo train — 7-car I13 split + shim removal (…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-15T18:09:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "39a9d1200c4f956331d1ce833c01a957d4f7b3c5",
          "body": "…nudge (v5.142.0) (#202)\n\n## Summary\n\n- Fixes asymmetry between checkpoint hint (inlines task+timestamp) and task-list restore nudge (existence-only)\n- `_task_list_restore_nudge` now parses page body and emits compact open-task summary — one line per pending/in_progress task, capped at 12 with overf\n[…]\n20 passed, 3 pre-existing Car0 fixture errors (unrelated to this change)\n- [x] ruff clean, all pre-commit hooks pass, e2e safety net passes\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/202",
          "is_bot": false,
          "headline": "feat(session-context): inline open-task summary in task-list restore …",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-15T11:14:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "20ef58e627aae33ec3c42908a0168adf53742601",
          "body": "…recall-native ADRs (v5.141.0) (#201)\n\n## ADR-consultable train — 3 cars (v5.140.0 → v5.141.0 / backend 5.48.0 → 5.49.0)\n\nA canonical-write branch-model foundation, a task-list mirror fix, and recall-native ADRs. Built as a 3-car train (Car 0 blocks 1+2), each car in an isolated worktree, merged bac\n[…]\n*adr_add parser drop** (pre-existing, unrelated): the `adr_add` MCP path intermittently drops the `decision` field — worth a separate look.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/201",
          "is_bot": false,
          "headline": "ADR-consultable train — canonical-write foundation + task-list fix + …",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-15T06:00:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "89ee1de5a013e44de70ef32c5aad9595beccd5bd",
          "body": "…e sentinel)\n\nUser-confirmed final Car-0 model. Replaces the forgeable __canonical__ sentinel\nwith TRUSTED per-directory git facts.\n\n- Trusted vars {gitness: bool, default_branch: str|NULL} written ONLY by the\n  SessionStart hook (host-side, sees .git); no model-callable tool, no other\n  code path w\n[…]\nFiles-touched list + full TDD (5 flows + provenance + restart-safety + cache).\n  Downstream BLUF / Car-1 / audit-table / sequencing refs updated to the\n  trusted-gitness model. Cars 1 and 2 unchanged.",
          "is_bot": false,
          "headline": "docs(plan): lock Car 0 to trusted-gitness branch model (kill forgeabl…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T22:18:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1e1855ed64ac63a927c9d781dbfffbc6fc0922d9",
          "body": "…train\n\nRe-plan after live-daemon (5.139.1) empirical findings; rebased onto\norigin/master (aed223c9) which shipped the task-list train — the prior audit\nran against a stale v5.136 base and wrongly concluded the task-list mirror\ndidn't exist. It does, and it is BROKEN as deployed.\n\nNew shape — 3 car\n[…]\ndit table\n(site → branch handling → correct? → car); overturns the investigator draft's\n\"task-list write is correct\" row (it is hard-rejected). All code citations\nre-verified against the rebased tree.",
          "is_bot": false,
          "headline": "docs(plan): restructure ADR-consultable into a 3-car canonical-write …",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T21:28:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4bdf0320211ad5f77dd503e3444cceec8a8d2762",
          "body": "…nc work-item\n\nRevision 1 (§A.5.1): replace the standalone planning-time recall CONVENTION\nwith a mechanically-injected agent-prompt DISCIPLINE. New page\nagent-discipline-adr-consult composed into plan-executing-build / build-car /\nscope-and-plan / rca-diagnose / debug-investigate, so agent_dispatch\n[…]\nh\nplaces, add adr-consult to the yaml, compose into the 5 patterns, sync live\nwiki, add seed tests. Cars table gains A7; B3 narrowed to the write-side line;\ntest strategy gains a discipline-seed case.",
          "is_bot": false,
          "headline": "docs(plan): ADR-consult as composed agent-prompt discipline + seed-sy…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T21:18:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3e6d2b6fdd20b16e7cfc4e222190d9de09922091",
          "body": "…-ready)\n\nFold 7 user-resolved decisions, correct drifted code citations, and add\nthe north-star read-path audit.\n\n- Status DRAFT → AUDITED-ready; \"7 open decisions\" replaced with a\n  resolved-decisions record.\n- Decisions folded: monolith AUDIT→migrate→DELETE across ALL projects;\n  add both adr_get\n[…]\nanch, sequential IDs per project,\n  chain-safe deprecated-ADR audit rule (superseded/supersede-target retained,\n  rejected/deprecated-with-no-inbound-ref dropped), delete monolith only\n  after verify.",
          "is_bot": false,
          "headline": "docs(plan): finalize ADR-consultable + read-first-write plan (AUDITED…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T21:18:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aed223c96edeff331001f09610fc60efe5a75ff6",
          "body": "## Stop-hook / task-list train — 6 cars (v5.136.1 → v5.139.1)\n\nFeature-branch integration train. Each car built in an isolated worktree off the train head and merged back with `--no-ff`; distinct version claims bounded the version-file conflicts. All merges green, no code conflicts.\n\n### Cars\n\n| Car\n[…]\neterminism** (surfaced by the recall-flake audit) — deferred to `docs/plans/fusion-tiebreak-determinism-2026-07-14.md` (ADR-0108 Option A).\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/200",
          "is_bot": false,
          "headline": "Stop-hook / task-list train — 6 cars (v5.136.1 → v5.139.1) (#200)",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T20:32:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a44a5f354d4fb463ad18fce69b50ab07298b58f5",
          "body": "…A) — surfaced by recall-flake audit",
          "is_bot": false,
          "headline": "docs(plans): DEFER fusion score-tie determinism fix (ADR-0108 Option …",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T18:57:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b03739e92dc56f988c38d439bb0441d67ac3d48",
          "body": "… 6aff1909, verified 2026-07-14)",
          "is_bot": false,
          "headline": "docs(plans): archive recall-content-integrity-flake — OBVIATED (fixed…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T18:56:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5f01fabf37b91139eaddb4925a6eb6817e26591",
          "body": "…ing (R1-R4 + D1/D2) to a review-later plan",
          "is_bot": false,
          "headline": "docs(plans): split perf-loadtest — archive shipped part, DEFER remain…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T18:06:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fbf25ad622ca186b5b6f5ce9adc1ee94c827fb4",
          "body": "…contract+CI vs REMAINING R1-R4; D1 snapshot-pin + D2 gating are user calls)",
          "is_bot": false,
          "headline": "docs(plans): audit perf-loadtest-contract → AUDITED (SHIPPED harness+…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T18:01:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e1bdabefa7c61bbfa4106e9c3c3cdb51f0d5c1c",
          "body": "…load-test → standalone perf-loadtest-contract)",
          "is_bot": false,
          "headline": "docs(plans): archive ci-velocity-train (#84 shipped, #83 merged; #79 …",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T17:56:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4371f10759fe438549a669e7653ba02e64ccffc4",
          "body": "…8; P-SB extracted to train)",
          "is_bot": false,
          "headline": "docs(plans): archive full-observability-standard (STANDARD complete #…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T17:54:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edf14c18fcf5fdd21f4e7a70aa46165adf45ffa8",
          "body": "…ette/httpx2 stays deferred)",
          "is_bot": false,
          "headline": "docs(plans): archive shipped deps-modernization-train (task #35 starl…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T17:46:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a10ab2030e89e13a1193c07be0c4dac6389dd482",
          "body": "…d consolidation (v5.136) (#199)\n\n## Summary\n\nBundled bug-fix train (v5.136) — 9 commits. Cars for #64, #72, #74, the agent-prompt seed consolidation, a newly-found startup hook-install poison guard, plus the version bump.\n\n## Cars\n\n### fix(hooks): startup hook-install poison guard — NEW (7ef49650)\n\n[…]\ned, 0 failed**.\n- New regression test proven red→green (`assert 1 == 0` without the guard → passes with it).\n- Server + hooks suites green.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/199",
          "is_bot": false,
          "headline": "fix(bug-train): startup hook-install poison guard + #64/#72/#74 + see…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T16:10:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "065c01260e06c4aff28bbfaf74dd4bbda2d80eee",
          "body": "…d (per user)",
          "is_bot": false,
          "headline": "chore: untrack MIGRATION_NOTES.md — local hand-off channel, gitignore…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T09:48:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50c4d8cc5380d9345a5551fe1ff37333d78f6e93",
          "body": "…7 open decisions, task #76)",
          "is_bot": false,
          "headline": "docs(plans): ADR-consultable + read-first-write design plan (DRAFT — …",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T09:46:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30ca5ed5c54752396d614490f1958f34375f926a",
          "body": "…ram untrack (docs-reorg) (#198)\n\nExecutes the docs/ taxonomy reorg (docs-cleanup #65) as a sequential 5-car train on one branch. git mv throughout (history preserved); inbound refs updated same-car.\n\n## Cars\n\n- Car A (729b1ccf) — taxonomy scaffold + bulk root doc moves. Created contracts/ reference\n[…]\nfs outside frozen trees (CHANGELOG, plans/archive, roadmap/archive) and historical planning/report records.\n\nDo not merge yet — for review.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/198",
          "is_bot": false,
          "headline": "docs: taxonomy reorg — contracts→docs/contracts/, roadmap dedup, diag…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-14T09:44:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b5331c43a7467e4877d147a8e18ef1dc0242d037",
          "body": "## Fixes train v5.135 — 6 cars, one PR, one version (core 5.135.0 / backend 5.46.0)\n\nWorktree-built cars, cherry-picked linear onto `feat/fixes-train`. (yadgar has no PR template — confirmed.)\n\n### Cars\n- **#58 — recall `stage_overrides`** (`4cc6918c`): remove the never-wired `stage_overrides` param\n[…]\nend nix bump on merge. No DB migration, no config-format break.\n\nCloses #58, #19, #26, #55, #52. Fixes the #196/Car2 PreCompact regression.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/197",
          "is_bot": false,
          "headline": "fixes train v5.135 — 6 cars (core 5.135.0 / backend 5.46.0) (#197)",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T23:06:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1a8edae8ec294b593a2dcd83aae2341d0d51dce8",
          "body": "…ess (5.134.0/5.45.0) (#196)\n\n## HOOKS train — one PR, one version (core 5.134.0 / backend 5.45.0)\n\nThree audited-plan cars, worktree-parallel, integrated to `feat/hooks-train`. Turns prose HARD RULES into mechanical enforcement + hardens context-restore + fixes the installer for normal users.\n\n### \n[…]\n-deploy → installs the router + self-heals any stale db-lockdown pointer.\n- No DB migration. No config-format break.\n\nCloses #11, #54, #59.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/196",
          "is_bot": false,
          "headline": "HOOKS train: PreToolUse router + compact/restore + installer correctn…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T18:38:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4591949a346fb0576df9757f048d8a47e5e86f8f",
          "body": "- #58 recall-stage-overrides: REMOVE-PARAM (never wired; targets dead\n  recall_via_pipeline). Dead-path deletion cross-refs #19 Car R.\n- #12 recall-content-integrity-flake: RECENCY-WINS tie-break (score, id desc)\n  at the 2 real convex sort sites; diagnose-gate requires exact float-equal.\n\nFixes train (v5.135) now 6/6 AUDITED-ready; builds after hooks PR #196 merges.",
          "is_bot": false,
          "headline": "docs(plans): fixes #58 + #12 → AUDITED-ready (user decisions locked)",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T18:11:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cecbf7b6a8c29653701129e9fd6fc33074f907df",
          "body": "- recall-stage-overrides (#58): AUDITED-needs-rework — 'wire-through' premise false\n  (recall_via_pipeline is dead prod code); decision pending remove-vs-consume\n- migration-notes-trim (#52): AUDITED-ready (no false-prune; delete by header-anchor)\n- workflow-codification (#55): AUDITED-ready (file-e\n[…]\nerge\n  w/ tracking anchor)\n- recall-content-integrity-flake (#12): AUDITED-needs-rework (small) — real sort is\n  convex L115 + prior-boost L199; tie-break direction decides pass/fail\n\nNo code changes.",
          "is_bot": false,
          "headline": "docs(plans): FIXES train — 4 car plans + audits (#58/#52/#55/#12)",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T16:31:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e30eeba80d65d918bacc5ebf23942f131807c408",
          "body": "…2 (5.133.0/5.44.0) (#195)\n\n## obs-quickwins train — one PR, one version (core 5.133.0 / backend 5.44.0)\n\nThree independent-seam cars integrated on `feat/obs-quickwins-train` via `--no-ff` merges.\n\n### BLUF\nHeadline is a **P0 fix**: the entire `@observe` metric arm has been silently dead process-wid\n[…]\nrmat break.\n- Plan archived to `docs/plans/archive/psb-observability-2026-07-13.md` (ADR-0081/0082).\n\nCloses #6, #36, #48, #50 (P-SB half).\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/195",
          "is_bot": false,
          "headline": "obs-quickwins train: P-SB observability + npm audit + model-tier Wave…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T15:04:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "22a140c13a53137e9d68027d71a7554b818fb42d",
          "body": "Folded audit fixes into each plan body:\n- pretooluse-router: matcher redesigned (wrapper-peel + git-global-opt-peel closes\n  git -C/-c and sudo/bash -c leaks); subagent-fire verified via docs; AUDITED-ready\n- compact-restore: in-flight algo corrected (async_launched − {completed,killed};\n  0 by cons\n[…]\nFix-B omit-env default; orphan-cleanup dropped (resolved live); AUDITED-ready\n\nTrain version = 5.134.0 (sequences after #195's 5.133.0 merges; router plan's\n5.133 line is superseded). No code changes.",
          "is_bot": false,
          "headline": "docs(plans): HOOKS train — 3 plans reworked to AUDITED-ready",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T14:38:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0b0a3c975b80aa1a723741de15045276f6c4fb40",
          "body": "…re, installer)\n\nAudited adversarially (2026-07-13):\n- pretooluse-router: AUDITED-needs-rework (matcher false-negatives: git -C / wrapper-peel; generalize git global-opt handling; verify subagent-fire premise)\n- compact-restore: CONDITIONAL (BUG1+dedup land-ready; enrichment in-flight-count claim wr\n[…]\nsubstring; ${VAR}-in-env unverified → default omit-env)\n\nOrphan hook-file question RESOLVED: hyphen=entrypoint / underscore=logic-module split, both LIVE, zero dead — no cleanup car.\n\nNo code changes.",
          "is_bot": false,
          "headline": "docs(plans): HOOKS train — 3 audited car plans (router, compact/resto…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T14:24:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6effa5da2ca1eb333119e1bb3b72184096510d6e",
          "body": "Per-plan verdicts (opus adversarial audits, 2026-07-13):\n- adr-add-id-race: ACCEPT (threading.Lock primitive confirmed correct both modes)\n- dead-code-sweep: PROCEED (8/8 dead verified; re-word Car R gate off ADR-0046)\n- module-standardization: NEEDS-REWORK (version sequence after #195; allowlist vs\n[…]\nlemetry-trio: APPROVE-W/-CHANGES (fold to design-of-record; F3 cut; draft gate dormant)\n- plt-observability-polish: REVISE (P-SB dep landing via #195; recall-stage repoint justified)\n\nNo code changes.",
          "is_bot": false,
          "headline": "docs(plans): append adversarial audit sections to 6 DRAFT plans",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T13:36:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bb515e4b97e99f3daf88e9a84e502f7f140d73f2",
          "body": "…ts own copy\n\nThe P-SB plan is completed by the obs-quickwins train, which archives it to\ndocs/plans/archive/ per ADR-0081/0082. Removing the root duplicate to avoid a\npost-merge collision.",
          "is_bot": false,
          "headline": "docs(plans): drop psb plan from root — obs-quickwins train archives i…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T13:08:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f66da7354a161b260df5ebed64fb95417657d1f",
          "body": "- dead-code-sweep: 4 capped cars, 8 confirmed-dead storage methods, vulture\n  min-conf-60 CI-prevention gate; scope-bounded vs 531809 blast-radius (#19)\n- plt-observability-polish: extend in-repo dashboard.json v1->v2, +3 rows\n  +4 alerts, recall-stage repoint (P-SB-dependent, merge-dormant) (#23)\n\nDRAFT/awaiting-audit. No code changes.",
          "is_bot": false,
          "headline": "docs(plans): add dead-code-sweep + plt-observability-polish plans",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T13:00:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8e2268b8c5b56951cbd229e816b00285ba2132f",
          "body": "Audit-ready design plans authored in parallel for the next planning cycle:\n- adr-add-id-race: threading.Lock fix for theoretical concurrent adr_add ID race (#26)\n- agent-brain-learning-loop: harden the live SubagentStop findings-auto-ingest path (#39)\n- module-standardization-train: 6 I13 file-split\n[…]\nc-arm P0 fix (obs-quickwins train)\n- viz-trace-replay: appended adversarial AUDIT section, Status AUDITED-ready (#25)\n\nAll DRAFT/awaiting-audit except viz (audited) and psb (audited). No code changes.",
          "is_bot": false,
          "headline": "docs(plans): backlog planning batch — 5 new plans + viz-mesh audit",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T12:47:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3c70ed88118702f31987b081f1a62ac19736ffe5",
          "body": "…6), stale pins, plan archival (#194)\n\nSingle-PR post-T4 documentation cleanup. Groups A–F below. No code changes; docs + flake.nix backend cgroup/mount only. Version-consistency and backend-bump hooks pass green — **no version bump** (flake edit touches only `docker run` args, not the `version =` s\n[…]\nonly PRs. `flake.nix` is safe to ignore in `ci-release.yaml` because the release gate keys off `pyproject.toml` version, not flake content.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/194",
          "is_bot": false,
          "headline": "docs: post-T4 cleanup — correct CE/reranker claims, --cpus 3 (ADR-010…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T11:38:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1f682955208bb2ab7df46a8d74eec0350a842b82",
          "body": "…latency hypothesis confirmed) (#193)\n\n## Summary\n\nAppends a new dated section to `docs/testing/recall-perf-checklist.md` committing the cross-version sweep verdict as the empirical verification of the T4 Ettin latency hypothesis.\n\n## Sweep results\n\n| Version (core/backend) | Reranker | CPUs | Mean \n[…]\nle via `config.yaml`.\n\n## Files changed\n\n- `docs/testing/recall-perf-checklist.md` — appended new section (74 lines); prior run-logs intact\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/193",
          "is_bot": false,
          "headline": "docs(perf): cross-version sweep verifies Ettin 2.4x faster than GTE (…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T10:25:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5957f9027d6a5a0b5164c011ec80213201e37a9b",
          "body": "…t method (CE =25% not 70-90%) (#192)\n\n## Summary\n\n- **3 runtime bugs fixed** in `run_perf_loadtest.py`: missing auth header (401 on every recall → silent 100% error rate), missing `directory` param on recall call, and `None` crash in `compare_to_baseline` when `ce_mean_ms` is null.\n- **Dead-metric \n[…]\n\n\nNo version bump — `benchmarks/` and `docs/` are not backend build inputs. Pre-commit `check-backend-bump` and `check-versions` both pass.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/192",
          "is_bot": false,
          "headline": "fix(perf): repair recall-perf harness + document corrected measuremen…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T08:40:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "471eba131d1a98b121be8fad51cc1a5377363869",
          "body": "…d image (core 5.132.0, backend 5.43.0) (#191)\n\n## T4 — Ettin CE-reranker swap (one train PR, ADR-0088)\n\nSwaps the cross-encoder reranker default from **GTE-ModernBERT (150M)** to **Ettin-32m** (`cross-encoder/ettin-reranker-32m-v1`, 32.8M, ModernBERT-lineage, Apache-2.0), gated on a LongMemEval mem\n[…]\n 4 kept/0 broken, all pre-push hooks passed (I25 config-sync, I32 capability-registry, I33 observe-coverage, e2e safety net). No new skips.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/191",
          "is_bot": false,
          "headline": "feat(t4): Ettin reranker train — swap + gate + self-sufficient backen…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-13T06:19:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ca68bee0d2d25a0ecfdc7d5a41860c399ab046b5",
          "body": "…2-CPU GTE baseline (#190)\n\n## Summary\n\n- Appends `5.131.0/5.42.0 transformers-5.x new-stack baseline (backend --cpus 2, 2026-07-12)` run log to `docs/testing/recall-perf-checklist.md`\n- Documents warm CE-miss timings (6 fresh queries, CE-miss validity gate PASS at 14.3 misses/query), HOT and restor\n[…]\nASS\n- [x] Bot identity verified: openfantasy-toaster@... + codeberg-agent remote\n- [x] Branch `docs/recall-bench-5.131.0` off latest master\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/190",
          "is_bot": false,
          "headline": "docs(perf): 5.131.0/5.42.0 transformers-5.x recall bench — new-stack …",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-12T19:47:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f0f4b2628d0e43ddb671096529640471a8a9e5e1",
          "body": "…core 5.131.0, backend 5.42.0) (#189)\n\n## Deps-modernization train — transformers 5.x + blanket lock upgrade\n\nPlan: `docs/plans/deps-modernization-train-2026-07-12.md` (AUDITED — in build; ONE PR per the ADR-0088 train convention). **core 5.131.0 / backend 5.42.0.** Unblocks T4 Ettin: `cross-encoder\n[…]\n:5.131.0`.\n\n### Rollback\n\nRevert the PR = old lock + salt \"1\" + old CI tag refs (old images still in registry). No prod model swap to undo.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/189",
          "is_bot": false,
          "headline": "deps: modernization train — transformers 5.x + blanket lock upgrade (…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-12T19:04:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "33a2f3f4c9b5c50fc6f0761270a6ee5f64bb489f",
          "body": "…+ drift fixes (#188)\n\nT4 Ettin train **Car 0 — Ettin-independent pre-fixes, SEPARATE PR** per the audited plan (`docs/plans/t4-ettin-train-2026-07-12.md`, ships in this PR with the user-decision fields resolved). Revert rationale (user directive): the Ettin swap (train PR, Cars 1-4) must be reverti\n[…]\ncomplete`, `test_wiki.py::test_recall_includes_wiki_results` — parallel-run flakes; pass isolated/repeated (CI mitigates with `--reruns 2`)\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/188",
          "is_bot": false,
          "headline": "fix(pre-ettin): T4 Car 0 — CE-cache ckpt split-brain + observability …",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-12T13:33:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c54ba7b090cbeaa29b7a0793ebb473e1b6280e63",
          "body": "…l hardening (#187)\n\n## Summary\n\nDocuments the 2026-07-12 CPU-scaling measurement series (backend `--cpus 2 → 3 → 4`, core 5.129.0 / backend 5.40.0) in `docs/testing/recall-perf-checklist.md`.\n\n### Consolidated 2v3v4 results\n\n| Regime | 2-CPU | 3-CPU | 4-CPU | 2→3 Δ | 3→4 Δ | 2→4 Δ |\n|---|---|---|--\n[…]\ns\n- Verify run-log section renders correctly in Codeberg markdown viewer\n- Protocol lessons are standing additions to the procedure section\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/187",
          "is_bot": false,
          "headline": "docs(perf): CPU-scaling series 2v3v4 — consolidated results + protoco…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-12T10:25:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "458ed74d61f363332a2b058d84d2a88d8e191f9f",
          "body": "…rm-measurement method correction (core 5.129.0, backend 5.40.0) (#186)\n\nPre-T4 anomaly RCA + fixes (docs/plans/archive/t3 Car 0 follow-up).\n\n## Anomaly 1 — warm '93% core-side' wall: MEASUREMENT ERROR, no code bug\nFull matched-trace span tree proves the 13.6s warm wall is 99% backend POST /recall (\n[…]\n further version bumps (unmerged PR). ONE build after merge, then the CPU-scaling measurement series (2->3->4) runs on trustworthy numbers.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/186",
          "is_bot": false,
          "headline": "fix(restore): kill the N+1 entity-enrichment storm (264s -> ~5s) + wa…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-12T09:08:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d4d3591c69364b5d521766df722ea16790a5dac4",
          "body": "…eline\n\nCaptures the three-regime measurement on the just-deployed T3 stack:\n- COLD (warm model, fresh CE): ~10,847ms median (3 queries)\n- WARM common case (distinct queries, CE-cache miss): ~13,625ms median (6 queries)\n- HOT (exact-repeat, CE-cache hit): ~4,555ms\n\nKey findings: warm bottleneck is c\n[…]\n026-07-09 sweep (multi_passage=OFF Car1 + T2 restructure).\nBonus checks: restore() still times out, /graph 200, store_swap retained_old=1 (expected).\nT4 Ettin A/B baseline numbers locked in both docs.",
          "is_bot": false,
          "headline": "docs(perf): T3 Car 0 live re-measure on 5.128.0/5.39.0 — T4 Ettin bas…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-11T23:39:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e582a0097976369213688fb27b90a71556a875bb",
          "body": "…core 5.128.0, backend 5.39.0) (#185)\n\nFINAL T3 car (plan archived in-branch, ADR-0081/0082/0094 + user option-B reversal: capability-first). Closes the T3 restructure train; Car 0 live re-measure follows post-deploy (docs-only).\n\n## Capability: raise --cpus and the pipeline fans out, no code change\n[…]\n 67 green; pre-push e2e green.\n\n## Versions\ncore 5.127.0 -> 5.128.0; backend 5.38.0 -> 5.39.0. ONE build after merge covers #183+#184+this.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/185",
          "is_bot": false,
          "headline": "perf(recall): T3 Car 3 (final) — CPU-aware, parallel-ready pipeline (…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-11T23:17:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5f0a0a0917995f806190c4c1f582622e37fd58c5",
          "body": "… (core 5.125.0, backend 5.37.0) (#184)\n\nT3 Car 1 per docs/plans/t3-recall-restructure-2026-07-11.md (per-car PRs, ADR-0094). GO verdict on the gate.\n\n## The flip\nMULTI_PASSAGE_RERANKING_ENABLED default True -> False (config.py). Drops a batched CE call per recall on a CE-bound path — the second-hig\n[…]\ners backend pipeline behavior; check_backend_bump gate gap noted). Parallel Car 2 (PR #183) claims 5.126.0/5.38.0; second-to-merge rebases.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/184",
          "is_bot": false,
          "headline": "perf(recall): T3 Car 1 — multi_passage rerank default off, A/B-proven…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-11T22:02:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ab9a924f1477c5e586d3b2d28e6f07dcc567218",
          "body": "…n B: capability-first reversal of the audit defer)",
          "is_bot": false,
          "headline": "docs(plans): T3 Car 3 — CPU-aware parallel-ready pipeline (user optio…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-11T20:27:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db91e526f1979e822c2ce0b793fb98b93ffbb63c",
          "body": "…ath (core 5.126.0, backend 5.38.0) (#183)\n\nT3 Car 2 per docs/plans/t3-recall-restructure-2026-07-11.md (per-car PRs, ADR-0094).\n\n## What moved off the recall critical path\n- Backend DB half — DECOMPOSED, not deferred wholesale: _apply_recall_db_side_effects mutates the response list in place (heat/\n[…]\n7.0; second-to-merge rebases keeping claims).\n\n16 new tests; 125+38+24 regression sweeps green; I25/I32/I33 gates pass; pre-push e2e green.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/183",
          "is_bot": false,
          "headline": "perf(recall): T3 Car 2 — side-effect halves forked off the response p…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-11T19:56:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3c1b5064dde1c68e5d0d72e3a30587ed1f05c7b",
          "body": "Adversarial re-audit of the Train-2/T3 restructure section of\nrecall-3-train-overhaul-2026-07-04.md against master 5b9c8ca1 (post-T2,\ncore 5.124.0/backend 5.36.0). Verifies every load-bearing claim at\nfile:line.\n\nFindings: f9de7cef target structure ~80% already realized (late union +\nseparate-batche\n[…]\nff) and the flag name in the\nplan is wrong. Async fork not done (still inline-blocking at\nembed_service.py:1276 + recall_session.py:51). Per-car model labels +\ngates + >2-CPU revisit trigger included.",
          "is_bot": false,
          "headline": "docs(plans): T3 recall-restructure build-ready re-audit vs current tree",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-11T09:10:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5b9c8ca13a406578b703f07531a664df9d77a345",
          "body": "…d (core 5.124.0, backend 5.36.0) (#182)\n\nONE PR, 44 commits, whole train (plan archived in-branch, ADR-0081/0084/0092/0093). The recall program unblocks: T3 restructure builds on these seams.\n\n## What the codebase looks like after this\n- **`_shared` = genuinely dual only**: retrieval SUNK to backen\n[…]\n moves → B restore-forward → D packaging+docs → E forwarding sweep (+F verification: stale REPORT-ONLY comment fixed, enforcement asserted).\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/182",
          "is_bot": false,
          "headline": "refactor: T2 layer-boundary train — placement laws enforced end-to-en…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-11T08:57:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2e2a59a1a53559e99d885112ce5108c712af002c",
          "body": "…EVIEW)\n\nDesign-only plan for usage-visibility features, sequenced F1/F2/F3.\nReframes F1 around already-shipped v5.48 update-check + the pypistats/\nDocker Hub free-counting crux; F2 opt-in bucketed stats (Syncthing model);\nF3 upstream prompt-sync composing above the ADR-0091 genesis/wiki split,\nwith money+moderation flagged as likely not worth a solo dev's burden.\nPrivacy stance codified as testable rules P1-P8. Status: REVIEW.",
          "is_bot": false,
          "headline": "docs(plans): telemetry + update-count + prompt-sync design (Status: R…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-10T16:31:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68a38e498c42447b0d8e91752157e6b377eef3f6",
          "body": "…ize contract + Q2 stop-hook materials automation)\n\nCode-cited findings: subagent findings already become memories via the\nSubagentStop footer path (rule 3 routes, does not gate); worktree writes\nare orphaned not leaked (verbatim dir_context + feature branch, exact-match\nrecall filter, no memory-sid\n[…]\nose-not-apply on the existing recommended_actions\nrail (backflow-cadence nag + incidents ledger), gated on incident signal not\nraw usage, honoring ADR-0091's no-auto-sync decision. Plan-only, no impl.",
          "is_bot": false,
          "headline": "docs(plans): agent-brain learning-loop design investigation (Q1 memor…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-10T16:24:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aeea9666d7d73d1d88e633ca920834d225b31576",
          "body": "…train PR (core 5.123.0, backend 5.35.0) (#181)\n\nONE PR, three cars (plan archived in-branch, ADR-0088/0090/0091; fixes P0 #37 + tasks #34).\n\n## Car 1 — seed backflow + prelude budget (9cd7d97d)\n- Genesis↔live audit: contract/disciplines/starters already byte-in-sync (proof, no drift)\n- 10 battle-te\n[…]\nevery car + the assembled push.\n\nKnown pre-existing (not this PR): test_wiki_sim_gate_drainer rejection-metric fails identically on master.\n\nReviewed-on: https://codeberg.org/maxagahi/yadgar/pulls/181",
          "is_bot": false,
          "headline": "feat: seed backflow + surrealkv safe-stop + stop-hook template — one …",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-10T15:00:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d06ef788b0dd454acba8cadbeb297aef33d187f3",
          "body": "…esher-.old startup refusal, swap-state gauge, quiescence root-question (user hardening)",
          "is_bot": false,
          "headline": "docs(plans): Car 2 split-brain guards — post-swap inode assertion, fr…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-10T12:02:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dadd0a8b3dfbebc7c0b90fb325041311e794bc21",
          "body": "…it-brain rollback (surrealdb#5001 upstream, no pin fix)",
          "is_bot": false,
          "headline": "docs(plans): train Car 2 finalized from RCA — option B+D + vacuum spl…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-10T11:56:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b670d6a7f2310fc071d602eb4d970da2e918d92",
          "body": "…P0 #37)\n\nRoot cause: surrealkv impl Drop for Tree skips async store close when no\ntokio runtime is available at drop time; on SurrealDB v3.1.5 SIGTERM path\nthe runtime is torn down first, so the close is skipped unconditionally\n(3/3 stops emit the warning). Torn manifest is the rare mid-compaction\n\n[…]\nbles).\n\nPrimary mitigation: entrypoint writers-first + wait-for-clean-exit + torn-stop\nmarker (B). Belt-and-braces: startup torn-manifest auto-restore (D). Plus the\n2026-07-10 manual recovery runbook.",
          "is_bot": false,
          "headline": "docs(plans): surrealkv unclean-stop RCA + safe-stop mitigation plan (…",
          "author_name": "openfantasy-toaster",
          "author_login": "m-agahi",
          "committed_at": "2026-07-10T11:54:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 1,
      "commits_last_year": 1486,
      "latest_release_at": "2026-07-26T14:46:45Z",
      "latest_release_tag": "v5.165.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 14,
      "days_since_latest_release": 0,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "yadgar",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "claude",
            "cognitive-architecture",
            "hopfield-networks",
            "knowledge-graph",
            "mcp",
            "memory",
            "neuroscience",
            "persistent-memory",
            "Development Status :: 5 - Production/Stable",
            "Environment :: Console",
            "Intended Audience :: Developers",
            "License :: OSI Approved :: Apache Software License",
            "Operating System :: MacOS",
            "Operating System :: POSIX :: Linux",
            "Programming Language :: Python :: 3",
            "Programming Language :: Python :: 3.14",
            "Topic :: Scientific/Engineering :: Artificial Intelligence",
            "Topic :: Software Development :: Libraries",
            "Topic :: System :: Filesystems"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/yadgar/",
          "is_deprecated": false,
          "latest_version": "5.165.1",
          "repository_url": "https://github.com/m-agahi/yadgar",
          "versions_count": 149,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 9512,
          "first_published_at": "2026-06-05T09:36:02.547008Z",
          "latest_published_at": "2026-07-26T14:46:30.240397Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": true,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": true,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "sdk-js/tsconfig.json",
        "yadgar/py.typed"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 127497,
      "source_files_sampled": 1187,
      "oversized_source_files": 13,
      "agent_instruction_files": [
        "AGENTS.md",
        "yadgar/_shared/AGENTS.md",
        "yadgar/backend/AGENTS.md",
        "yadgar/core/AGENTS.md"
      ],
      "agent_instruction_max_bytes": 20810
    },
    "dependencies": {
      "manifests": [
        "pyproject.toml",
        "sdk-js/package.json",
        "viz-tests/package.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": [
        "npm",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "fastapi",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.109.1"
        },
        {
          "name": "sse-starlette",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.6.0"
        },
        {
          "name": "uvicorn",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.24.0"
        },
        {
          "name": "mcp",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.23.0"
        },
        {
          "name": "watchdog",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.0.0"
        },
        {
          "name": "pydantic",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.5.0"
        },
        {
          "name": "pydantic-settings",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.0.0"
        },
        {
          "name": "numpy",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.24.0"
        },
        {
          "name": "scipy",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.11.0"
        },
        {
          "name": "httpx",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.27"
        },
        {
          "name": "networkx",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.0"
        },
        {
          "name": "ruamel.yaml",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.18.0"
        },
        {
          "name": "prometheus-client",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.20.0"
        },
        {
          "name": "python-multipart",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.0.27"
        },
        {
          "name": "urllib3",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.7.0"
        },
        {
          "name": "regex",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2024.1.0"
        },
        {
          "name": "opentelemetry-api",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.30,<2"
        },
        {
          "name": "opentelemetry-sdk",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.30,<2"
        },
        {
          "name": "opentelemetry-instrumentation-fastapi",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.51b0"
        },
        {
          "name": "opentelemetry-instrumentation-httpx",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.51b0"
        },
        {
          "name": "opentelemetry-exporter-otlp-proto-http",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.30,<2"
        },
        {
          "name": "msgpack",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0"
        },
        {
          "name": "surrealdb",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.0"
        },
        {
          "name": "tomlkit",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.13"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "sdk-js/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        }
      ],
      "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": 3,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "m-agahi",
          "commits": 1377,
          "avatar_url": "https://avatars.githubusercontent.com/u/64974579?v=4"
        },
        {
          "type": "User",
          "login": "cddquinyx",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/104208655?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.996
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci-pr.yml",
        "ci-release.yml",
        "eval.yml",
        "mutation-sweep.yml",
        "perf.yml",
        "sdk-js.yml",
        "validate.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": true
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json",
        "uv.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": 5,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 6,
            "reason": "2 out of 3 merged PRs checked by a CI test -- score normalized to 6",
            "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/29 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": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 4,
            "reason": "dependency not pinned by hash detected -- score normalized to 4",
            "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": 0,
            "reason": "security policy file not 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": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "19 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "9ac98f3566dcc26c0d53f33b4a46810a2f7e0dd2",
        "ran_at": "2026-07-26T14:47:59Z",
        "aggregate_score": 4.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-26T14:46:48Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-26T14:42:56Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/m-agahi/yadgar",
    "host": "github.com",
    "name": "yadgar",
    "owner": "m-agahi"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 58,
      "inputs": {
        "security": 42,
        "vitality": 72,
        "community": 37,
        "governance": 53,
        "engineering": 82
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 72,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "commits_last_year": 1486,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 14
            },
            "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": "14/52 weeks with commits",
                "points": 9.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 14
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1486 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1486
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 84,
            "inputs": {
              "releases_count": 1,
              "latest_release_tag": "v5.165.1",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": null
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "1 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "cadence unknown (single release)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence_unknown",
                    "params": {}
                  }
                ],
                "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": 37,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "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 (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 66,
            "inputs": {
              "packages": [
                "yadgar"
              ],
              "dependents": null,
              "ecosystems": "pypi",
              "total_downloads": null,
              "monthly_downloads": 9512
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "9,512 downloads/month across pypi",
                "points": 53,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 9512,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 53,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 18,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.996
            },
            "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 100% of commits",
                "points": 0.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "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": "good",
            "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": 72,
            "inputs": {
              "merged_prs": 3,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "3/3 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 3,
                      "decided": 3
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/29 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 37,
            "inputs": {
              "followers": 1,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "m-agahi",
              "public_repos": 5,
              "account_age_days": 2270
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1 followers of m-agahi",
                "points": 2.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1,
                      "login": "m-agahi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "5 public repos, account ~6 yr old",
                "points": 17.7,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 5
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "yadgar"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "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": "149 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 149
                    }
                  }
                ],
                "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": 82,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": true
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "7 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 16,
                "status": "met",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 9.6,
                "status": "met",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "2 out of 3 merged PRs checked by a CI test -- score normalized to 6",
                "points": 12,
                "status": "partial",
                "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": 42,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 42,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.2
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "2 out of 3 merged PRs checked by a CI test -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "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/29 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": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 4",
                "points": 2,
                "status": "partial",
                "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 not detected",
                "points": 0,
                "status": "missed",
                "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": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "19 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "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": 3
            },
            "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": "good",
        "name": "AI Readiness",
        "value": 75,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md",
                "yadgar/_shared/AGENTS.md",
                "yadgar/backend/AGENTS.md",
                "yadgar/core/AGENTS.md"
              ],
              "agent_instruction_max_bytes": 20810
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, yadgar/_shared/AGENTS.md, yadgar/backend/AGENTS.md, yadgar/core/AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, yadgar/_shared/AGENTS.md, yadgar/backend/AGENTS.md, yadgar/core/AGENTS.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": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "excellent",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "has_nix": true,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json",
                "uv.lock"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "sdk-js/tsconfig.json",
                "yadgar/py.typed"
              ],
              "agent_commit_share": 0.05,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "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": null,
                "points": 11,
                "status": "met",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "sdk-js/tsconfig.json, yadgar/py.typed",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "sdk-js/tsconfig.json, yadgar/py.typed"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, Nix, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, Nix, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "5 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 5,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 4",
                "points": 4,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 127497,
              "source_files_sampled": 1187,
              "oversized_source_files": 13
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python with type-check config (sdk-js/tsconfig.json, yadgar/py.typed)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "sdk-js/tsconfig.json, yadgar/py.typed",
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "13/1187 source files over 60KB",
                "points": 54.4,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1187,
                      "oversized": 13
                    }
                  }
                ],
                "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",
    "Could not fetch npm package '@yadgar/sdk' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index pypi:yadgar@5.165.1; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T14:48:09.090919Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/m-agahi/yadgar.svg",
  "full_name": "m-agahi/yadgar",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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 agregadasPyPI.