Registro público
Informe de salud del softwareesquema 0.30.0 · métricas 2.5.0 · 2026-08-03 16:12 UTC

sdsrss / claude-mem-lite

Persistent long-term memory for Claude Code via MCP — captures coding decisions, bugfixes, and context across sessions. Hybrid FTS5 + TF-IDF search with episode batching. Single SQLite DB, no external services. Alternative to claude-mem with 600x lower cost.

JavaScriptMIT★ 49 estrellas⑂ 3 forksdesde feb 2026Ver en GitHub ↗
TipoHerramienta de línea de comandosServidor MCPBibliotecacómo se determina

sdsrss/claude-mem-lite tiene un índice de salud de 71 sobre 100, lo que lo sitúa en la banda Bueno. Su puntuación más alta es Vitality (83/100) y la más baja, Community & Adoption (46/100). Se actualizó por última vez hace 10 días. Una sola persona concentra la mayor parte del trabajo reciente.

71
global / 100
Bueno

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala estandarizada de 1 a 100. El resultado global parte de su media ponderada, calibrada contra la distribución del registro público para que las bandas tengan significado percentil; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe un límite «En riesgo» de 34.

71
Excepcional93-100El nivel más alto del registro (≈ el 5% superior); cumple prácticamente todos los criterios evaluados
Excelente80-92Sólido en todos los frentes; carencias menores
Bueno65-79Saludable; carencias limitadas y manejables
Moderado50-64Aceptable con carencias notables; se recomienda revisión
Débil35-49Debilidades sustanciales en varias áreas
En riesgo20-34Debilidades significativas; su adopción exige cautela
Crítico1-19Problemas 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.

El resultado global ponderado 63 se calibra a 71 en la escala publicada del índice (calibración del registro 2026-08-02).

Titularidad

sdsrssCuenta personal
3 seguidores12 repositorios públicosdesde sept 2025

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ón
npmclaude-mem-lite3.59.18084252hace 10 días

Métricas por categoría

Vitalidad

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

83Excelente · 21% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 10 días
16.6/36Cadencia de commits — 24/52 semanas con commits
18/18Volumen de commits — 829 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year829
human_commit_share1
days_since_last_push10
active_weeks_last_year24
Cómo se puntúa
27/27Publica versiones — 100 versiones publicadas
36/36Recencia de las versiones — última versión hace 10 días
27/27Cadencia de publicación — una versión cada ~0,6 días
8/10OpenSSF Scorecard: Signed-Releases — 5 out of the last 5 releases have a total of 5 signed artifacts.
Datos de entrada utilizados
releases_count100
latest_release_tagv3.59.1
releases_from_tagsno
days_since_latest_release10
mean_days_between_releases0,6

Comunidad y Adopción

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

46Débil · 17% del índice global
Cómo se puntúa
27.3/60Estrellas — 49 estrellas
2.5/25Forks — 3 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks3
stars49
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
readme_badges0
has_contributingno
has_issue_templateno
has_code_of_conductno
readme_badge_services
has_pull_request_templateno
Cómo se puntúa
52.1/80Descargas mensuales — 8084 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesclaude-mem-lite
dependents
ecosystemsnpm
total_downloads
monthly_downloads8084
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?

50Moderado · 23% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
42/42Resolución de issues — 100% de issues cerradas
27/30Aceptación de PR — 9/10 PR decididos fusionados
0/13Newcomer PR acceptance — ningún PR de un contribuyente primerizo decidido en 30 d
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs9
open_issues0
closed_issues5
prs_merged_7d0
prs_decided_7d0
prs_merged_30d0
prs_decided_30d0
issue_closed_ratio1
closed_unmerged_prs1
first_time_authors_30d0
first_time_prs_merged_30d0
first_time_prs_decided_30d0
Excluidos de la puntuación (sin datos o no aplicable): newcomer_pr_acceptance. 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
4.3/25Alcance del propietario — 3 seguidores de sdsrss
9.9/25Trayectoria — 12 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers3
owner_typeUser
is_verified
owner_loginsdsrss
public_repos12
account_age_days333
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 npm
35/35Recencia de publicación — última publicación hace 10 días
20/20Historial de versiones — 252 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesclaude-mem-lite
ecosystemsnpm
any_deprecatedno
min_days_since_publish10

Calidad de Ingeniería

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

78Bueno · 19% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — eslint.config.mjs
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.
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
10/10Topics — 20 topics
0/10Wiki
Datos de entrada utilizados
topicsclaude-code, fts5, hooks, mcp, memory, persistence, sqlite, agent-memory, ai-coding-assistant, ai-memory, anthropic, claude, claude-code-plugin, hybrid-search, llm-memory, long-term-memory, mcp-server, model-context-protocol, rag, semantic-search
has_wikino
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?

55Moderado · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
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
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
2.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 5
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
6/7.5Signed-Releases — 5 out of the last 5 releases have a total of 5 signed artifacts.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
3.8/7.5Vulnerabilities — 5 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,4
Excluidos de la puntuación (sin datos o no aplicable): ci_tests. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
25/25Dependencias indirectas libres de avisos conocidos — ninguna dependencia indirecta tiene un aviso conocido
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages130
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejó el cierre de dependencias en tiempo de ejecución de npm:claude-mem-lite@3.59.1 —lo que arrastra la instalación del paquete publicado—: 130 paquetes. No se analiza la alcanzabilidad.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Tiene un peso deliberadamente pequeño (4%): las herramientas para agentes son una señal real de mantenimiento, pero un repositorio sin ninguna puede alcanzar igualmente 100/100.

64Moderado · 4% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
15/15Documentación legible por máquinas (llms.txt) — llms.txt presente
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_txt
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes9548
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — eslint.config.mjs
0/11Verificación estática de tipos
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 100 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
5/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 5
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share1
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
0/45Código verificable por tipos — JavaScript sin configuración de verificación de tipos
52.8/55Tamaños de archivo manejables — 16/396 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageJavaScript
largest_source_bytes164.531
source_files_sampled396
oversized_source_files16
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

49estrellas de GitHub
1contribuidores
829commits en los últimos 12 meses
10días desde el último push
100versiones publicadas
1factor bus
0issues abiertas
npmecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

Historial de estrellas y forks 0 ★ / 3 ⇿
0Estrellas
3Forks
26Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

12233312026-032026-052026-06
Mayor 1Menor 19Parche 6
OpenSSF Scorecard 4.4 / 10
4.4agregado

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-08-03 16:11 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
5Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 5
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
8Signed-Releases5 out of the last 5 releases have a total of 5 signed artifacts.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
5Vulnerabilities5 existing vulnerabilities detected
Dependencias directas 3
RegistroPaqueteRestricción de versiónManifiesto
npm@modelcontextprotocol/sdk^1.26.0package.json
npmbetter-sqlite3^12.6.2package.json
npmzod^4.3.6package.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

Avisos de dependencias 0

Instalar npm:claude-mem-lite@3.59.1 arrastra 130 paquetes, directos y transitivos: 0 tienen avisos conocidos, de los cuales 0 son dependencias directas.

Ningún aviso conocido afecta a las dependencias evaluadas.

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "claude-code",
        "fts5",
        "hooks",
        "mcp",
        "memory",
        "persistence",
        "sqlite",
        "agent-memory",
        "ai-coding-assistant",
        "ai-memory",
        "anthropic",
        "claude",
        "claude-code-plugin",
        "hybrid-search",
        "llm-memory",
        "long-term-memory",
        "mcp-server",
        "model-context-protocol",
        "rag",
        "semantic-search"
      ],
      "is_fork": false,
      "size_kb": 6527,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Shell": 27892,
        "JavaScript": 4967644
      },
      "pushed_at": "2026-07-24T08:43:32Z",
      "created_at": "2026-02-08T07:10:37Z",
      "owner_type": "User",
      "updated_at": "2026-07-24T18:29:04Z",
      "description": "Persistent long-term memory for Claude Code via MCP — captures coding decisions, bugfixes, and context across sessions. Hybrid FTS5 + TF-IDF search with episode batching. Single SQLite DB, no external services. Alternative to claude-mem with 600x lower cost.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "User",
      "login": "sdsrss",
      "company": null,
      "location": null,
      "followers": 3,
      "avatar_url": "https://avatars.githubusercontent.com/u/230400260?v=4",
      "created_at": "2025-09-04T15:33:31Z",
      "is_verified": null,
      "public_repos": 12,
      "account_age_days": 333
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v3.59.1",
          "kind": "patch",
          "published_at": "2026-07-24T08:45:40Z"
        },
        {
          "tag": "v3.59.0",
          "kind": "minor",
          "published_at": "2026-07-24T08:10:37Z"
        },
        {
          "tag": "v3.58.2",
          "kind": "patch",
          "published_at": "2026-07-24T07:18:28Z"
        },
        {
          "tag": "v3.58.1",
          "kind": "patch",
          "published_at": "2026-07-24T06:43:34Z"
        },
        {
          "tag": "v3.58.0",
          "kind": "minor",
          "published_at": "2026-07-24T06:30:46Z"
        },
        {
          "tag": "v3.57.0",
          "kind": "minor",
          "published_at": "2026-07-24T05:29:41Z"
        },
        {
          "tag": "v3.56.1",
          "kind": "patch",
          "published_at": "2026-07-20T04:38:38Z"
        },
        {
          "tag": "v3.56.0",
          "kind": "minor",
          "published_at": "2026-07-20T04:21:57Z"
        },
        {
          "tag": "v3.55.0",
          "kind": "minor",
          "published_at": "2026-07-18T22:45:19Z"
        },
        {
          "tag": "v3.54.0",
          "kind": "minor",
          "published_at": "2026-07-18T22:26:53Z"
        },
        {
          "tag": "v3.53.0",
          "kind": "minor",
          "published_at": "2026-07-18T21:32:24Z"
        },
        {
          "tag": "v3.52.0",
          "kind": "minor",
          "published_at": "2026-07-18T21:17:58Z"
        },
        {
          "tag": "v3.51.0",
          "kind": "minor",
          "published_at": "2026-07-18T20:51:35Z"
        },
        {
          "tag": "v3.50.0",
          "kind": "minor",
          "published_at": "2026-07-18T20:01:34Z"
        },
        {
          "tag": "v3.49.0",
          "kind": "minor",
          "published_at": "2026-07-17T21:24:16Z"
        },
        {
          "tag": "v3.48.0",
          "kind": "minor",
          "published_at": "2026-07-17T01:16:05Z"
        },
        {
          "tag": "v3.47.0",
          "kind": "minor",
          "published_at": "2026-07-14T20:06:30Z"
        },
        {
          "tag": "v3.46.0",
          "kind": "minor",
          "published_at": "2026-07-13T22:00:47Z"
        },
        {
          "tag": "v3.45.0",
          "kind": "minor",
          "published_at": "2026-07-13T21:28:59Z"
        },
        {
          "tag": "v3.44.0",
          "kind": "minor",
          "published_at": "2026-07-13T20:43:22Z"
        },
        {
          "tag": "v3.43.0",
          "kind": "minor",
          "published_at": "2026-07-13T19:42:45Z"
        },
        {
          "tag": "v3.42.0",
          "kind": "minor",
          "published_at": "2026-07-06T18:26:27Z"
        },
        {
          "tag": "v3.41.0",
          "kind": "minor",
          "published_at": "2026-07-06T17:19:14Z"
        },
        {
          "tag": "v3.40.0",
          "kind": "minor",
          "published_at": "2026-07-06T16:07:53Z"
        },
        {
          "tag": "v3.39.2",
          "kind": "patch",
          "published_at": "2026-07-05T20:36:35Z"
        },
        {
          "tag": "v3.39.1",
          "kind": "patch",
          "published_at": "2026-07-05T19:46:10Z"
        },
        {
          "tag": "v3.39.0",
          "kind": "minor",
          "published_at": "2026-07-05T19:13:35Z"
        },
        {
          "tag": "v3.38.4",
          "kind": "patch",
          "published_at": "2026-07-05T17:41:00Z"
        },
        {
          "tag": "v3.38.3",
          "kind": "patch",
          "published_at": "2026-07-05T15:45:32Z"
        },
        {
          "tag": "v3.38.2",
          "kind": "patch",
          "published_at": "2026-07-05T07:36:46Z"
        },
        {
          "tag": "v3.38.1",
          "kind": "patch",
          "published_at": "2026-07-05T06:14:47Z"
        },
        {
          "tag": "v3.38.0",
          "kind": "minor",
          "published_at": "2026-07-04T10:09:52Z"
        },
        {
          "tag": "v3.37.0",
          "kind": "minor",
          "published_at": "2026-07-04T09:27:57Z"
        },
        {
          "tag": "v3.36.0",
          "kind": "minor",
          "published_at": "2026-07-04T07:47:05Z"
        },
        {
          "tag": "v3.35.2",
          "kind": "patch",
          "published_at": "2026-07-03T20:27:04Z"
        },
        {
          "tag": "v3.35.1",
          "kind": "patch",
          "published_at": "2026-07-03T19:16:59Z"
        },
        {
          "tag": "v3.35.0",
          "kind": "minor",
          "published_at": "2026-07-03T17:56:57Z"
        },
        {
          "tag": "v3.34.0",
          "kind": "minor",
          "published_at": "2026-07-03T15:07:59Z"
        },
        {
          "tag": "v3.33.1",
          "kind": "patch",
          "published_at": "2026-07-02T18:13:21Z"
        },
        {
          "tag": "v3.33.0",
          "kind": "minor",
          "published_at": "2026-07-02T17:21:45Z"
        },
        {
          "tag": "v3.32.0",
          "kind": "minor",
          "published_at": "2026-06-29T19:07:07Z"
        },
        {
          "tag": "v3.31.0",
          "kind": "minor",
          "published_at": "2026-06-29T18:53:36Z"
        },
        {
          "tag": "v3.30.0",
          "kind": "minor",
          "published_at": "2026-06-29T18:40:07Z"
        },
        {
          "tag": "v3.29.0",
          "kind": "minor",
          "published_at": "2026-06-29T18:24:06Z"
        },
        {
          "tag": "v3.28.3",
          "kind": "patch",
          "published_at": "2026-06-29T17:58:24Z"
        },
        {
          "tag": "v3.28.2",
          "kind": "patch",
          "published_at": "2026-06-29T17:34:49Z"
        },
        {
          "tag": "v3.28.1",
          "kind": "patch",
          "published_at": "2026-06-29T17:15:30Z"
        },
        {
          "tag": "v3.28.0",
          "kind": "minor",
          "published_at": "2026-06-29T16:18:51Z"
        },
        {
          "tag": "v3.27.0",
          "kind": "minor",
          "published_at": "2026-06-29T15:35:47Z"
        },
        {
          "tag": "v3.26.0",
          "kind": "minor",
          "published_at": "2026-06-29T15:08:22Z"
        },
        {
          "tag": "v3.25.0",
          "kind": "minor",
          "published_at": "2026-06-29T14:40:18Z"
        },
        {
          "tag": "v3.24.0",
          "kind": "minor",
          "published_at": "2026-06-29T13:46:26Z"
        },
        {
          "tag": "v3.23.0",
          "kind": "minor",
          "published_at": "2026-06-28T21:55:16Z"
        },
        {
          "tag": "v3.22.0",
          "kind": "minor",
          "published_at": "2026-06-28T20:26:10Z"
        },
        {
          "tag": "v3.21.0",
          "kind": "minor",
          "published_at": "2026-06-28T19:00:49Z"
        },
        {
          "tag": "v3.20.0",
          "kind": "minor",
          "published_at": "2026-06-28T18:23:16Z"
        },
        {
          "tag": "v3.19.0",
          "kind": "minor",
          "published_at": "2026-06-28T18:14:26Z"
        },
        {
          "tag": "v3.18.0",
          "kind": "minor",
          "published_at": "2026-06-26T23:36:13Z"
        },
        {
          "tag": "v3.17.0",
          "kind": "minor",
          "published_at": "2026-06-26T21:10:14Z"
        },
        {
          "tag": "v3.16.3",
          "kind": "patch",
          "published_at": "2026-06-26T19:05:16Z"
        },
        {
          "tag": "v3.16.2",
          "kind": "patch",
          "published_at": "2026-06-25T16:43:03Z"
        },
        {
          "tag": "v3.16.1",
          "kind": "patch",
          "published_at": "2026-06-25T16:24:41Z"
        },
        {
          "tag": "v3.16.0",
          "kind": "minor",
          "published_at": "2026-06-25T15:59:50Z"
        },
        {
          "tag": "v3.15.0",
          "kind": "minor",
          "published_at": "2026-06-25T14:37:31Z"
        },
        {
          "tag": "v3.14.0",
          "kind": "minor",
          "published_at": "2026-06-24T20:40:42Z"
        },
        {
          "tag": "v3.13.0",
          "kind": "minor",
          "published_at": "2026-06-24T18:50:14Z"
        },
        {
          "tag": "v3.12.1",
          "kind": "patch",
          "published_at": "2026-06-23T19:56:44Z"
        },
        {
          "tag": "v3.12.0",
          "kind": "minor",
          "published_at": "2026-06-23T18:47:01Z"
        },
        {
          "tag": "v3.11.0",
          "kind": "minor",
          "published_at": "2026-06-22T18:11:25Z"
        },
        {
          "tag": "v3.10.0",
          "kind": "minor",
          "published_at": "2026-06-22T16:10:00Z"
        },
        {
          "tag": "v3.9.1",
          "kind": "patch",
          "published_at": "2026-06-22T13:01:31Z"
        },
        {
          "tag": "v3.9.0",
          "kind": "minor",
          "published_at": "2026-06-22T12:34:38Z"
        },
        {
          "tag": "v3.8.0",
          "kind": "minor",
          "published_at": "2026-06-22T09:21:35Z"
        },
        {
          "tag": "v3.7.1",
          "kind": "patch",
          "published_at": "2026-06-22T08:12:33Z"
        },
        {
          "tag": "v3.7.0",
          "kind": "minor",
          "published_at": "2026-06-21T22:02:55Z"
        },
        {
          "tag": "v3.6.0",
          "kind": "minor",
          "published_at": "2026-06-21T16:52:55Z"
        },
        {
          "tag": "v3.5.0",
          "kind": "minor",
          "published_at": "2026-06-21T16:13:00Z"
        },
        {
          "tag": "v3.4.0",
          "kind": "minor",
          "published_at": "2026-06-21T14:27:02Z"
        },
        {
          "tag": "v3.3.1",
          "kind": "patch",
          "published_at": "2026-06-21T13:02:37Z"
        },
        {
          "tag": "v3.3.0",
          "kind": "minor",
          "published_at": "2026-06-21T07:50:53Z"
        },
        {
          "tag": "v3.2.0",
          "kind": "minor",
          "published_at": "2026-06-20T23:06:36Z"
        },
        {
          "tag": "v3.1.2",
          "kind": "patch",
          "published_at": "2026-06-20T19:16:12Z"
        },
        {
          "tag": "v3.1.1",
          "kind": "patch",
          "published_at": "2026-06-19T19:38:36Z"
        },
        {
          "tag": "v3.1.0",
          "kind": "minor",
          "published_at": "2026-06-19T18:09:13Z"
        },
        {
          "tag": "v3.0.1",
          "kind": "patch",
          "published_at": "2026-06-19T16:32:52Z"
        },
        {
          "tag": "v3.0.0",
          "kind": "major",
          "published_at": "2026-06-19T16:02:39Z"
        },
        {
          "tag": "v2.99.0",
          "kind": "minor",
          "published_at": "2026-06-12T22:05:08Z"
        },
        {
          "tag": "v2.98.0",
          "kind": "minor",
          "published_at": "2026-06-12T20:01:34Z"
        },
        {
          "tag": "v2.97.0",
          "kind": "minor",
          "published_at": "2026-06-09T18:17:54Z"
        },
        {
          "tag": "v2.96.0",
          "kind": "minor",
          "published_at": "2026-06-09T16:13:08Z"
        },
        {
          "tag": "v2.95.1",
          "kind": "patch",
          "published_at": "2026-06-09T15:44:00Z"
        },
        {
          "tag": "v2.95.0",
          "kind": "minor",
          "published_at": "2026-06-09T15:31:05Z"
        },
        {
          "tag": "v2.94.0",
          "kind": "minor",
          "published_at": "2026-06-08T18:02:59Z"
        },
        {
          "tag": "v2.93.0",
          "kind": "minor",
          "published_at": "2026-06-08T17:43:12Z"
        },
        {
          "tag": "v2.92.0",
          "kind": "minor",
          "published_at": "2026-06-04T18:28:08Z"
        },
        {
          "tag": "v2.91.0",
          "kind": "minor",
          "published_at": "2026-06-04T17:13:47Z"
        },
        {
          "tag": "v2.90.1",
          "kind": "patch",
          "published_at": "2026-06-03T19:06:14Z"
        },
        {
          "tag": "v2.90.0",
          "kind": "minor",
          "published_at": "2026-06-03T18:27:52Z"
        },
        {
          "tag": "v2.89.0",
          "kind": "minor",
          "published_at": "2026-06-02T23:53:48Z"
        },
        {
          "tag": "v2.88.0",
          "kind": "minor",
          "published_at": "2026-06-02T22:41:48Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "cf81df8d1b0ca9e24ccd4ad57449ddedf2bdd4af",
          "body": "…-type selection\n\nTwo audit fixes: notLowSignalTitleClause gains a lesson escape so\nlesson-bearing observations with LOW_SIGNAL-prefixed titles ('npm ...')\nare retrievable again (write/read gate symmetry); memdir-audit selects\nkebab-case memory files via frontmatter metadata.type, legacy prefixes\nke\n[…]\nly\nbuilder. Tests 4029 -> 4040, eslint clean, denoise-ab NEUTRAL with\nprobes 27/27, fresh-context pre-ship review: SHIP (no P1/P2, P3s -> D#13).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.59.1 — read-side lesson escape + memdir-audit frontmatter…",
          "author_name": "sds",
          "author_login": "sdsrss",
          "committed_at": "2026-07-24T08:43:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f36c278e8124c895b00c52942df2eebfdabbdff1",
          "body": "… now work\n\nEvery CLI command with a required positional now accepts the matching MCP\nfield name as a flag alias: save --text/--content, search --query,\nrecall --file, get/delete --ids, update --id, defer add --title,\ndefer drop --id. Root cause: LLM callers map the MCP tool schemas onto\nnamed flags\n[…]\n 4029 (+16), eslint clean, npm audit --omit=dev clean.\nPre-landing review (fresh-context subagent): no P1/P2, 3 P3 notes deferred.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.59.0 — MCP-field flag aliases: flags-only CLI invocations…",
          "author_name": "sds",
          "author_login": "sdsrss",
          "committed_at": "2026-07-24T08:08:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1c17e3b0cfb0a7f9322f37baf82afca8fa41ed2d",
          "body": "…v/CI-only)\n\nRuntime artifact identical to v3.58.1. Ships the smoke-npm12 CI job +\nsmoke-tarball heal/shrinkwrap assertions (commit 3a315ae) as a tagged\nrelease so the marketplace/auto-update line stays in step with main.\nFirst CI run confirmed: block occurred -> heal reported \"rebuilt\" ->\nre-probe passed.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.58.2 — CI regression net for the npm >= 12 heal chain (de…",
          "author_name": "sds",
          "author_login": "sdsrss",
          "committed_at": "2026-07-24T07:16:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3a315aec12eb1a4c791ce6915408069efdaa7cf5",
          "body": "…shipped heal must fix it\n\nThe whole v3.58.x self-heal chain targets npm >= 12's default script block,\nbut CI ran smoke-tarball only on npm 10 where compilation just works — a\nregression in the heal chain was invisible until a user-side -32000.\n\n- smoke-tarball.mjs: when the post-install binding pro\n[…]\nrified locally: normal run PASS unchanged; blocked simulation PASS via\n\"heal OK — ensureBetterSqlite3Working reported rebuilt\"; 4013/4013 tests.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: CI smoke leg for pristine npm >= 12 — script block must occur, …",
          "author_name": "sds",
          "author_login": "sdsrss",
          "committed_at": "2026-07-24T07:07:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8198e6442496f8ec802a13695ddabde199738146",
          "body": "… setup.sh\n\nTwo follow-ups to v3.58.0:\n\n- files[] now lists npm-shrinkwrap.json: both release jobs ran `npm shrinkwrap`\n  (CI logs confirm the rename) yet the published 3.58.0 tarball shipped without\n  it — with a files[] whitelist, npm 10's packlist drops the shrinkwrap unless\n  EXPLICITLY listed (\n[…]\nck-held)\n  re-verified after the refactor.\n\nknown-red baseline: main CI red is v3.58.0's shellcheck SC1123 on setup.sh — this commit is the fix.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.58.1 — pack the npm-shrinkwrap + fix shellcheck SC1123 on…",
          "author_name": "sds",
          "author_login": "sdsrss",
          "committed_at": "2026-07-24T06:41:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a6d0e6007f7aa2cdb124f93002a44a5368477845",
          "body": "…pdate-path binding gate, shared WAL recovery, locked rebuilds, unadopt residue sweep, shrinkwrapped registry installs\n\nSeven fixes from the install/update/self-heal/uninstall audit:\n- setup.sh probes the better-sqlite3 binding (ABI-keyed marker, locked 20s-bounded\n  rebuild, bare-probe fallback) in\n[…]\ned rows restored\nfrom the pre-maintain snapshot, 3 pollution rows removed).\n\n4013 tests (233 files, +7), eslint clean, smoke-tarball PASS local.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.58.0 — lifecycle audit batch: npm-12 hooks false-green, u…",
          "author_name": "sds",
          "author_login": "sdsrss",
          "committed_at": "2026-07-24T06:27:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3b00b3c7dfb601642992325a6a957580156d23e9",
          "body": "Five advisories published 07-20..07-24 against transitive deps in the MCP SDK's\nHTTP transport (unreachable — this plugin uses stdio). Pin patched versions via\noverrides, keeping @modelcontextprotocol/sdk at 1.29.0 (npm audit fix --force\nwould downgrade it to 1.24.3):\n  hono >=4.12.31, @hono/node-se\n[…]\nheld to 3.x (ajv ^3.0.1, reachable via schema validation). npm audit\n--omit=dev: 0 vulnerabilities. 4006 tests pass, eslint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump security overrides to clear npm audit gate (v3.57.0)",
          "author_name": "sds",
          "author_login": "sdsrss",
          "committed_at": "2026-07-24T05:23:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "564e63bc146dc6849bdb5432c41efb02800b5ba5",
          "body": "…ess, runtime hardening, data-layer atomicity\n\nLands the five-face audit (algo/security/data/prod/arch). No breaking changes.\n\n- algo: PRF emits FTS-matchable surface forms not porter stems (default-path recall\n  fix — observations_fts is unicode61/unstemmed); TF-IDF vocab rare-term quota;\n  cross-s\n[…]\ned-core (lib/recent-core.mjs); utils<->project-utils cycle broken.\n\n4006 tests (233 files), eslint clean, knip at 30-export floor.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.57.0 — multi-face audit batch: retrieval/scoring correctn…",
          "author_name": "sds",
          "author_login": "sdsrss",
          "committed_at": "2026-07-24T05:09:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "adc0e400a74f0bc5b348a385fd69f520c7cddbbc",
          "body": "…es (npm 10 array / npm 12 object)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.56.1 — smoke-tarball.mjs: parse both npm pack --json shap…",
          "author_name": "sds",
          "author_login": "sdsrss",
          "committed_at": "2026-07-20T04:36:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9c8f4b63fc4251c1d17943d345982a2c5d3fd1fa",
          "body": "…default install-script block (fixes MCP -32000)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.56.0 — npm 12 self-heal: better-sqlite3 rebuild bypasses …",
          "author_name": "sds",
          "author_login": "sdsrss",
          "committed_at": "2026-07-20T04:19:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "63778162f783a0db112d915439021d8ac6cc430e",
          "body": "…+ events end-to-end probes\n\nG15: ~50 CJK<->EN synonym pairs (mined from 90d real prompts + memory/search/\nrelease domain vocab) bridge Chinese queries to English Haiku-summary bodies\n(live: '钳制' 0->31 hits). Same terms join CJK_COMPOUNDS so both tokenization\nsides agree. New cjk_xlang fixture face \n[…]\nts. Closes 07-17 MED-2 second half.\nG14 waits for pretool_recall metering data (threshold calibration).\n\n3913 tests (+3), eslint clean, knip 46.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.55.0 — audit Phase B (partial): bilingual synonym bridge …",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-18T22:42:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "984b1ec655d8907459a3258d48c380dea81fab6a",
          "body": "…+ reminder counting fix + LongMemEval baseline refresh\n\nG13: enrich_save/pretool_recall/error_recall metric events + stats Recall\nmetering line (the three unmetered surfaces from the 2026-07-18 audit).\nG18: persist-reminder counts Skill lesson/memory/bug + memdir writes.\nG19: shared stdin-cap const\n[…]\n3.4/95.2/96.0 (engine-side real gain,\nharness/dataset unchanged; rerank row flagged as older-baseline).\n\n3910 tests (+4), eslint clean, knip 46.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.54.0 — three-face audit Phase A: recall/enrich telemetry …",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-18T22:24:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fc8523256eea1b6afc7200bd3e3d50cd2c189fed",
          "body": "…decay undercount + superseded keeper credit\n\nD#60: applyCitationDecay idempotency key getSessionId (project-scoped, shared\nby concurrent sessions) -> CC session UUID from Stop stdin; second session's\ndecay pass no longer silently skips (e2e locks the shared-session-file repro).\nD#61: cited/injected\n[…]\nacked up): 12 test-residue deferred rows deleted, obs\n10084 re-homed super-skill--docs -> projects--super-skill.\n\n3906 tests (+5), eslint clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.53.0 — citation-metering fixes (G10): concurrent-session …",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-18T21:29:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "053c4515b6b89ad112d57d775b6982d28a480e20",
          "body": "…ersisted-decision reminder\n\nG1+G2: manual saves (CLI+MCP) queue a detached Haiku worker distilling\nlesson_learned (obligated types) + search_aliases (every save), backfilled\nfill-only-empty under BEGIN IMMEDIATE; optimized_at untouched so daily\noptimize stays the backstop. Kill switch CLAUDE_MEM_SK\n[…]\n= ≤3/3459 rows (0.09%) ->\nG12②③ normalization not justified.\n\n3901 tests (+26), eslint clean. New shipped libs registered in files+SOURCE_FILES.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.52.0 — roadmap Phase 1: save-time enrichment worker + unp…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-18T21:15:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3ad88c162194d6125aed2d4e41e314554d03ed27",
          "body": "…ing + denoise blind-face probes + stats Data-dir\n\nG8: PostToolUse error-recall gate isError -> isHardError (loose gate fired\n\"Related memories found for this error\" on exit-0 commands, self-recursive;\n30d baseline 220 unique / 10.9% cite-recall). Episode isError semantics kept.\nG11: defer list rows\n[…]\ns prints \"Data dir:\" on both surfaces (D#92 wrong-path residue).\n\n3875 tests (+19), eslint clean. Roadmap: docs/记忆功能优化路线图-2026-07-18.md (local).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.51.0 — roadmap Phase 0: error-recall hard gate + defer ag…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-18T20:48:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e74e4ac1a0cbcd3f5f843043c0bff95b4c441592",
          "body": "…t + prompt injection + search (post-/clear D#92 gap)\n\ndeferred_work.detail was write-only: every surface (defer list / mem_defer_list\n/ dashboard) rendered title-only, no reader existed, search could not reach the\nrow. Three read paths open (write side needed no change):\n\n- get D#N (CLI+MCP): full \n[…]\nint clean. Verified against the\noriginating failure on the real DB: get D#92, the original prompt, and the\noriginal searches all reach the item.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.50.0 — D# read surface: deferred detail reachable from ge…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-18T19:58:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1c3b4d35a363bcb8d953d06260a479c8f1c796f6",
          "body": "…budget-1 boundary note on the adaptive alias split\n\nFresh-eyes review of 242a32e (0 Critical / 0 Important): knip count had\ndrifted (OBS_TYPE_ENUM gained importers in the same release that recorded\nthe baseline) and the adaptive-split comment overclaimed 'main keeps its\nfull budget' at the budget=1 boundary (pre-existing v3.43 semantics,\nmanual --max <=4 only). Comment/doc only, no behavior change, no bump.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: post-release review minors for v3.49.0 — knip baseline 47→46 + …",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-17T21:36:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "242a32e8e303067b563aa654d5593352723b9ca7",
          "body": "…e ranking bands + save-time lesson nudge + alias-cadence fix + twin dedup\n\nFull audit of v3.48.0 (6 read-only agents): 0 HIGH, all seven v3.48.0 fixes\nheld. This release implements the complete recommendation roadmap:\n\n- MED-1+L3 (ranking): normalizeCrossSourceScores single-match clamp is now\n  ban\n[…]\nevents-injection path-A note, export-columns exclusions,\n  knip baseline.\n\n3819 tests (+21), eslint clean, knip 46, denoise NEUTRAL delta 0.000.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.49.0 — full audit 2026-07-17 roadmap (P1-P4): cross-sourc…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-17T21:21:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a397b4b9aa36c95120360cf8cb8c328d77f7844c",
          "body": "…defang (v3.48.0 review Minor #1/#3)\n\nPost-ship review hardening (no runtime behavior change, no version bump):\n- Two lock tests in citation-tracker-userprompt: a relevance=\"events\" block of\n  `- E#<id>` lines yields no extracted obs ids, and a mixed transcript where\n  observation #42 and event E#42\n[…]\ntableEvent documenting why row.type (frozen event_type\n  enum) is intentionally not defanged, so a future unvalidated event writer is\n  flagged.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: lock E# event-id isolation invariant + document event_type non-…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-17T01:30:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "51440dfa7047ddd0af6a371c4a78426f69694d88",
          "body": "…from passive injection (HIGH) + injection-defang/concurrency/latency/ranking/delete-twin\n\nHIGH-1: promoted memories (events table) were invisible to the 3 passive\ninjection surfaces since v3.44. New lib/events-injection.mjs feeds the\nUserPromptSubmit <memory-context> block (FTS-matched events) and \n[…]\n new runtime modules added to SOURCE_FILES + package.json files.\n3796 tests pass, eslint + shellcheck clean, denoise NEUTRAL (R@10 0.900/0.341).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.48.0 — full audit 2026-07-16 (7 fixes): events reachable …",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-17T01:13:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e3aa8f49e261aa0e66dafeb612795e0299f70739",
          "body": "…ndary matching + per-edge citation decay + lesson scope labels\n\nTightens the PreToolUse file-triggered recall surface and adds a feedback loop so\nnoisy (observation, file) edges can go quiet without burying the lesson elsewhere.\n\n- P0: path-boundary file match (fixes utils.mjs pulling bash-utils.mj\n[…]\nte, plural\nself-heal sentinel. Schema auto-migrates 42→44 (additive; verified zero-loss on a\nproduction-DB copy). 3776 tests pass, eslint clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.47.0 — PreToolUse recall precision (D#78 P0–P3): path-bou…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-14T20:03:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "09c406c6491a3b4a76ed022937c8fae925e31b20",
          "body": "…e model stops probing the save format\n\nThe save CLI's hard constraints (--lesson ≤500, required positional <text>) lived only in the Zod\nschema + help output, invisible before the call — the model discovered the format by erroring. Same\npattern across every write command (defer add ≤200, update ≤50\n[…]\ncumented as a legacy MEMORY.md-sentinel cleanup sweep that does not adopt.\n\nFull suite 213 files / 3730 tests green, eslint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.46.0 — surface hidden CLI write-command constraints so th…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-13T21:58:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f679069d8226308c48694c606fd73368a6a53524",
          "body": "…4.0 feature (auto-deep drop, E# fetch/collision, obs_type→events)\n\nCode-review follow-ups to v3.44.0 \"events searchable via mem_search\" (D#74/75/76). TDD, +10 tests, 213 files / 3730 green, lint clean, verified end-to-end via CLI against a real file DB.\n\n- D#74: cross-source legs (sessions/prompts/\n[…]\nonors obs_type as event_type filter.\n- Changed: mem_search description + memGet/memTimeline schemas mention events / E#N (LLM-visible metadata).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.45.0 — events consumable: close 3 review gaps on the v3.4…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-13T21:26:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2a24fff041d5842c65bf429b557670c4a34030bd",
          "body": "…/decision history) + events_fts self-heal (schema v42) + P3 hardening batch\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.44.0 — events searchable via mem_search (canonical bugfix…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-13T20:40:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "db7bbb2fd5da435ea91a9e8d25b511ae70144bd0",
          "body": "…(RCE) + MCP export fidelity (data loss) + resolution/enrich/telemetry hardening\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.43.0 — full audit 2026-07-13 (8 fixes): launcher signing …",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-13T19:40:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ce6c1ae54f3d864b81775fdf9fa24e55b1f8901b",
          "body": "…oS + Basic-auth leak), export/restore body fidelity, update/registry preserve-on-empty, retrieval fallback filter\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.42.0 — E2E audit round 4 (14 fixes): scrub hardening (ReD…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-06T18:23:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ecc4729f8086518508010363e18f9d925aeac7b9",
          "body": "…, LLM-ops integrity, handoff scoping, vector-arm parity\n\nThird E2E audit round: 5 discovery agents over the vector, episode/handoff/session-lifecycle, LLM-ops, tier/context-injection, and install/update subsystems that rounds 1-2 hadn't covered. 14 bugs fixed TDD. 2 HIGH: isMemHook silently deleted\n[…]\npe. Full suite 203 files / 3654 tests green, eslint + shellcheck clean, denoise-A/B NEUTRAL (default lexical retrieval unchanged).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.41.0 — E2E audit round 3 (14 fixes): hook/settings safety…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-06T17:16:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7c443516888fd98af39492605b81730535983e9a",
          "body": "…eline, registry, release-signing, maintenance\n\nTwo-round end-to-end audit (6 parallel discovery agents + user-simulation testing) that found\nand fixed 14 real bugs across retrieval, secret handling, the resource registry, the\nrelease-signing chain, and the maintenance pipelines. Each fix TDD'd; 195\n[…]\npe, github default_branch, cross-hook dedup, maintain scan forecast,\nper-project normalize gate, …). Full details in CHANGELOG.md.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.40.0 — E2E audit (14 fixes): retrieval, secret-scrub, tim…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-06T16:05:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f792ca7f216a0d7766344a53819878a2029706fb",
          "body": "…save guard, multi-line save recognizer)\n\nThree fixes from a code review of the v3.39.0->v3.39.1 changeset. The review found\nno Critical issues and no data-corruption risk; these are the correctness/UX gaps\nit surfaced.\n\n- Vector text now includes lesson_learned + backfilled aliases (lib/save-observ\n[…]\nv3.39.1 FK-safe marking (superseded_by_id is left NULL, a self-FK to events(id)).\n\nTDD, full suite green (191 files / 3609 tests), eslint clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.39.2 — code-review follow-up (vector-arm parity, /lesson …",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T20:34:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "900a03dcdbc33e034bad747bf0c3cab75024defe",
          "body": "… FK-safe marking)\n\nTwo fixes to `activity promote`, both caught running the v3.39.0 backfill on a real DB:\n\n- Low-signal exclusion: `body + importance>=2` was too loose (~17% Modified/Worked-on/\n  tool-log rows = the activity-log noise the events split contains). Now applies the\n  canonical notLowS\n[…]\ned_at_epoch only, wrap insert+mark per event in one\n  transaction (no orphan on failure), skip bad events. Test now runs PRAGMA foreign_keys=ON.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.39.1 — activity promote hardening (low-signal exclusion +…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T19:43:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4d6c610595efe233158a9219d285df631b1305d4",
          "body": "…backfill, explicit supersession, searchable /bug /lesson)\n\nFrom a storage + retrieval + eval audit (2026-07-06). Lexical retrieval is\nalready strong (LongMemEval recall_any@5=95.2%), so the leverage is in what gets\nstored and whether it's reachable — not ranking. All TDD'd; 190 files / 3605 tests.\n\n[…]\nability: /bug /lesson write searchable observations (was the\n  events table mem_search never read); `activity promote` backfills insight events.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.39.0 — storage/retrieval precision (eval-coverage, alias …",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T19:10:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "39a5753fb1899417d8d088fe01a41293855657e4",
          "body": "…urface drift guards\n\nAudit of the tool-guidance blocks found the always-injected MCP instructions field\n(INSTRUCTIONS_BASE in search-scoring.mjs) omitted the mem_defer/mem_defer_list/mem_defer_drop\ntrio that tools/list exposes and the adopt CLAUDE.md block + detail doc already reference\n(steering-s\n[…]\nthe instructions string is runtime-visible (next MCP server start); the rest is\ndocs/tests/comments. 187 files / 3580 tests green; eslint clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.38.4 — MCP instructions advertise defer trio + steering-s…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T17:38:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7a6cebe4508280ee60c8e61a780fa565860521de",
          "body": "… runtime unchanged)\n\nAdds benchmark/adoption-*.mjs (offline idiom-free adoption instrument) + 2 behavior-preserving shipped refactors (user-prompt-search.js searchByFts replay opts + isDirectInvocation guard; hook-memory.mjs rankImperativeCandidates extraction). Validated: action-channel hand-label\n[…]\n.698 [0.557, 0.747], P(AUC<=0.5)=0. Runtime unchanged vs 3.38.2 (verified against hook-launcher argv-rewrite + cache-buster path).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.38.3 — idiom-independent adoption benchmark (dev tooling;…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T15:38:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a9af62b3119e925c8a1d3037edf3c9425f58c14e",
          "body": "Whole-branch review M-2: this branch added the adoption benchmark suite\n(3452 -> 3577), so the Quick Reference count is corrected here.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: sync CLAUDE.md test count to 187 files / 3577 tests",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T13:48:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d36759ab464b5951c50a4b09c7655642062922b4",
          "body": "…ssion + I-2/I-3/I-4 disclosures\n\nI-1 (shipped, must-fix): the Task-1 import guard evaluated false on the\nhook-launcher self-heal retry (imports with a ?t= cache-buster while argv[1] is\nquery-less), silently skipping main() -> no memory search on that fire. Fixed via\nan exported isDirectInvocation()\n[…]\nranker-selection-confounded for top-1 surfaces -> a GO\nmust rest on the floorCheck contrast + hand-label AUC, not effect+CI alone.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(bench+ups): address whole-branch review — I-1 shipped-guard regre…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T13:45:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1cba5fa561380d5a695097034d604b875ccebc76",
          "body": "Extends computeAdoption with collectEvents to emit per-event records from its own\nloop (RUN-WIDE IDF reused — actionDelta === the reported bucket effect, test-pinned).\nfloorCheck partitions events by cite-recall+ (assistant-authored #NN in PROSE, not\nthe raw file — the tautology fix: live citeSilent\n[…]\nputes rank-sum AUC of delta vs label. Completes the offline\nidiom-independent adoption instrument (GO/NO-GO adoption gate). 14/14.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bench): cite-recall floor check + hand-label emit/score harness",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T13:13:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9e6ec2dc8883d41d4ee29150068e9239194148a1",
          "body": "placebo-random swaps each candidate's text for a deterministically-picked DB\nlesson (seeded lcg) -> collapses the per-event delta to chance -> the PRIMARY\neffect's ci95 brackets 0 (the key null). placebo-cutoff relabels the RDD points\nat the median running-var -> falsifies only the SECONDARY rdd_jum\n[…]\nts data). lcg\nexported from the estimator. Default (no-placebo) path unchanged by construction.\n5/5 overlap + 6/6 estimator tests.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bench): placebo-random + placebo-cutoff null controls",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T12:41:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "40fea24cf8578b37b121223367468eb9e6900710",
          "body": "…+ CI\n\nbenchmark/adoption-overlap.mjs wires replay->rankers->cosine->estimator: per\ninjection event, dual-channel (action/prose) cosine of the output window vs the\nshown vs near-miss candidates, control-subtracted, aggregated per surface:channel\nbucket with a session-cluster-bootstrap CI over a run-\n[…]\nsd centered on the bucket mean (honest mde), RDD\npoints one-per-candidate, read-only DB, guarded main(). 3/3 e2e, full suite 3562.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bench): adoption-overlap main -- per-bucket dual-channel effect …",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T12:07:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "82865c0078cb58edaf9023c8b03955f6b614f086",
          "body": "benchmark/adoption-rankers.mjs re-runs the committed ranker seams under the\nevent's virtual clock/snapshot and splits candidates into shown vs near-miss:\nups-fts via searchByFts (|relevance| floor + MAX_RESULTS cap, extracted into a\npure splitShownNearMiss), imperative/subagent via rankImperativeCan\n[…]\nddle/exceeds-cap/below-floor fixtures, cutoffs read the same CLAUDE_MEM_UPS_*\nenv vars as production, unknown surface throws. 6/6.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bench): per-surface candidate replay (shown vs near-miss)",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T11:37:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0cafb73854e9614952323e0945916384fa2e0801",
          "body": "New self-contained statistical core (benchmark/adoption-estimator.mjs):\nlocalLinearRdd (jump = intercept difference at the cutoff; mean-diff fallback\nwhen a side has <2 distinct x), clusterBootstrap (session-clustered resampling\nvia a seeded LCG — deterministic, no Math.random), and mde. Review-hard\n[…]\nfault alpha/power); the RDD mean-diff fallback has\na discriminating regression test (proven to fail if the guard is removed). 6/6.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bench): RDD local-linear jump + session-cluster bootstrap + MDE",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T11:04:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f606c3af2a53a46da18865b9665b938b273f49af",
          "body": "…output window\n\nExtracts per-surface injection events (ups-fts/imperative/subagent) with the\nranker query, injected #NN ids, and an output window (prose vs actions) spanning\nthe injection to the next GENUINE user message. Review-hardened before commit:\ntool_result relay entries are not boundaries (i\n[…]\noutput), and\nparallel Agent/Task dispatch yields one event per subagent. 5/5 tests incl. 4\nrealistic-transcript regression guards.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bench): transcript replay -> injection events with dual-channel …",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T10:20:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f450d2fe8e9a33a5cde34f3ce1047b817ebfea67",
          "body": "…ption signal\n\nNew self-contained module (benchmark/adoption-cosine.mjs): IDF = log(1+N/(1+df))\nover a corpus, IDF-weighted cosine over the union vocab, and a dual-channel bag\nbuilder (action vs prose). Reuses only tfidf.mjs tokenize; zero new deps.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bench): exact pairwise TF-IDF cosine + dual-channel bags for ado…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T09:43:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8e7c9b757009b38d18f23bbe6681c08e54116a75",
          "body": "…electImperativeLesson wraps [0]\n\nExposes the full importance*overlap-scored candidate list (with an optional\nepochTo snapshot bound) so the adoption-overlap benchmark can recover the\nnear-miss candidates below the injected winner. selectImperativeLesson is now a\nthin [0] wrapper — behavior-preserving (all 6 filters, overlap basis, score, and\nargmax tie-break unchanged; full suite 3539/3539).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(imperative): extract rankImperativeCandidates scored list; s…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T09:32:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2efb5a9ab00eb37253927fb09de0d3b6727d1f3a",
          "body": "… auto-run\n\nEnables faithful offline replay of the UserPromptSubmit ranker for the\nadoption-overlap benchmark: virtual clock (nowT) + created_at snapshot (epochTo)\n+ import guard so the module imports without firing main(). Behavior-preserving —\nexisting user-prompt-search suite 113/113 green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(ups): add nowT/epochTo replay options to searchByFts + guard…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T09:12:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5874a807ea1b01d8dace684bad740aaf67ab16f2",
          "body": "…t injection (D#57)\n\ncitation-stats --sidechain was structurally blind to the dispatch-time subagent\ninjection surface (pre-agent-inject.js / CLAUDE_MEM_SUBAGENT_INJECT), which\nprompt-injects a lesson into each spawned subagent via updatedInput. The instrument\nonly scanned hook attachments (never pr\n[…]\ne in\n  mem-cli.mjs (the surface exists and injects).\n\nReal dogfood: sidechain 0/0 → 2/11 (18.2%). Suite 3531 → 3534, ESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.38.2 — sidechain cite-recall sees prompt-embedded subagen…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T07:34:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "18180a12092b8ca73cff1ba95e1c9462eefaed2c",
          "body": "…ction (D#51)\n\ncite-recall.mjs attributed PostToolUse:Bash injections by the loose [mem] text\nmarker + a broad /#\\d+\\b/ scan, not by the hook command the way production\nlib/citation-tracker.mjs does. Two artifacts, both deflating the channel's true\nrecall by padding its injected denominator with nev\n[…]\nst-tool-use.sh. Suite 3529 -> 3531.\n\nbenchmark/ is not shipped (not in package.json files) — dev instrument only,\nno version bump.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(benchmark): cite-recall :error-recall bucket + row-anchored extra…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T06:54:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "43b0ee0818719e79464e2ff67c3e5986e449a1e4",
          "body": "…x in citation-stats)\n\ncitation-stats' \"Cite rate by project\" reported cited_count/decay_seen_count over\nsurviving, in-window obs — doubly biased (GC drops uncited obs from the denominator;\nwindow excludes older obs), so a project could read 91% while its true lifetime\ninject->cite rate was ~6%. Now\n[…]\ncing-function that makes the model ACT on a lesson, not rank it better).\n\nSuite 3528 -> 3529 (+1 regression anchor), ESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.38.1 — honest per-project cite rate (survivorship-bias fi…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-05T06:12:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8da2613b7175c40ffc4f1a77d2ca61682c697d32",
          "body": "…de path)\n\nSplit the citation-decay promote-idempotency key into a new\nobservations.last_cited_session_id column (schema v41) so a #NN citation\nlanding in a LATER turn of the same session upgrades a previously-uncited\nobs instead of being frozen at the first Stop's verdict. The uncited/streak\nbranch\n[…]\ne old inj<=0 gate.\n\nSuite 3519 -> 3528 (+9), ESLint clean. v40->v41 migration verified zero-loss\non a 2097-row production DB copy.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.38.0 — cross-turn late-citation fix (citation-decay upgra…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-04T10:07:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6e31fe4c3598b546719e4283490ff18a081dda14",
          "body": "…rsarial-review-caught regressions)\n\nRound 5 of the real-user E2E audit: six parallel read-only auditors over the previously\nun-audited surface (CLI/MCP, schema, LLM ingestion, citation, text pipeline, mutation), then\ntwo independent adversarial reviewers over the whole diff before landing — which c\n[…]\nplugin.json + marketplace.json + CLAUDE.md\n→ 3.37.0. DB schema user_version 39 → 40. Suite 3482 → 3519 green, eslint + knip clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.37.0 — round-5 E2E audit (security + data-integrity, adve…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-04T09:25:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "33ac0f0dfb8592e8c5e125269ceef7e4802be1b7",
          "body": "… closures, injection/registry hardening)\n\nRound 4 (install / vectors / benchmark / semantic-inject audit) plus the security &\ndata-integrity fixes surfaced across all four rounds, and the v3.36.0 version bump.\nFull detail in CHANGELOG.md.\n\nSecurity / self-heal:\n- install.mjs repair(): resolve the l\n[…]\n.json + .claude-plugin/plugin.json +\n.claude-plugin/marketplace.json + CLAUDE.md → 3.36.0.\n\nSuite 3482 green, eslint + knip clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.36.0 — four-round E2E audit (self-heal signing, invariant…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-04T07:44:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "000a785c8184a63def8c4cb054b9e422ad6f1f0d",
          "body": "…ction/registry/context fixes\n\nThree rounds of real-user E2E auditing (parallel readers + runtime exercise).\nTwo invariants each gained a NEW enforcement-site fix (the audit's main line:\n\"some site has the guard\" never means \"all sites do\"):\n\n\"lessons never auto-GC\" (lesson-bearing rows excluded fro\n[…]\nment\n(5 -> 3); add benchmark/ups-ab.mjs to knip entry.\n\nNo version bump / release (commit-only). Suite green, eslint + knip clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: E2E audit rounds 1-3 — close parallel-path invariant gaps + inje…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-03T23:54:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2b6625843d203c032eb4d006fae77c98ee5cf170",
          "body": "…e observations — v3.35.2\n\nTwo Claude Code sessions running in the SAME project directory shared one\nproject-keyed episode buffer (ep-${project}.json) and were summarized as one\nmerged episode. Now each buffered entry carries its CC session id and\nflushEpisode splits by session via a new pure planEp\n[…]\ntical; all four invariants verified). Tests: planEpisodeFlush\nunit matrix (7) + e2e tag/split/significance/receipt/same-file (5); suite -> 3469.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(episode): flush interleaved concurrent-session buffers as separat…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-03T20:23:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "64913cdcd8c46d2901e88b053d9cf251123d53a6",
          "body": "Route every CLAUDE_MEM_DIR consumer through lib/resolve-data-dir.mjs, a\nzero-dep pure resolver, replacing ~11 inline `env || join(HOME, ...)`\nfallbacks. The old pattern (a) accepted the literal strings \"undefined\"/\n\"null\" — produced when a caller interpolates a nullish JS value into a\nshell env stri\n[…]\n branch had;\nthe common unset case is unchanged (~/.claude-mem-lite).\n\nGate: eslint clean; vitest 176 files / 3458 passed (+6 resolve-data-dir).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(data-dir): centralize + validate CLAUDE_MEM_DIR resolution — v3.35.1",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-03T19:12:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2012955fddff3582f8e669b6650244b5ad1fe0b1",
          "body": "…tion fixes — v3.35.0\n\nHook & injection-layer audit (3 read-only auditors + adversarial review of every fix):\n- fix(citation-decay): IMPORTANCE_FLOOR 0->1 + recoverBuriedLessons maintain op —\n  decayed lessons were buried below the >=1 injection-visibility floor (one-way,\n  unrecoverable); recoverBu\n[…]\nxiting + EPIPE guard.\n- feat(metrics): bound the opt-in metrics JSONL log (gcOldMetricShards, 90d retention).\n\nSuite 3436 -> 3452, ESLint clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(hooks): buried-lesson recovery + defang coverage + capture/injec…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-03T17:54:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bffa88ef82b907aba4fefd3cf4243477c16b50fe",
          "body": "…adow — v3.34.0\n\nfix(project-utils): resolveProject never tried an exact match, so a bare short project name (e.g. p) was shadowed by the %name% substring fallback and resolved to the biggest unrelated projects--* project, making it unreachable via --project across recent/search/timeline/stats/expor\n[…]\n-only and non-fatal, stdout/exit unchanged, zero false positives across all commands. +5 tests.\n\nSuite 3429 -> 3436, ESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cli): unknown-flag typo guard + fix resolveProject exact-name sh…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-03T15:05:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1a39ab86a425d661108d1d012fc15e5fd6598230",
          "body": "…ff the author's machine\n\nThe v3.33.1 Release CI went red: the spawn tests seeded --project projects--mem (hardcoded) but the script infers its project from CLAUDE_PROJECT_DIR = the checkout path. Only matched on the author's machine; CI's checkout path inferred a different name -> selectImperativeL\n[…]\nwn test THIS commit fixes; reproduced the CI condition locally (ambient CLAUDE_PROJECT_DIR=/home/runner/work/... -> 11/11 green) before pushing.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(test): pin project in pre-agent-inject spawn tests so they pass o…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-02T18:07:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d88a9487a5fc64d4b52bc175ce2e0d28da1547cb",
          "body": "…el tests — v3.33.1\n\nCode-review follow-up on v3.33.0. scripts/pre-agent-inject.js ended with process.exit(0), which on a pipe drops a pending async write and truncates the emitted JSON once the payload (it echoes the whole subagent prompt back via updatedInput) exceeds the ~64KB pipe buffer -> unpa\n[…]\n64KB round-trip guarding the flush). Also refreshes the stale CLAUDE.md test count. Feature stays default off. Suite 3424 -> 3429, ESLint clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(hooks): flush stdout before exit in pre-agent-inject + script-lev…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-02T17:59:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fa196ec38b8360219e85872c21a9acb9f58bb3d2",
          "body": "…v3.33.0\n\nSubagents are memory-blind (plugin hooks don't fire inside them), so a spawned worker starts with zero project context even when the main session is memory-rich. A new PreToolUse:Agent|Task hook picks one relevant lesson (selectImperativeLesson: project-scoped, identifier-overlap, top-1) a\n[…]\nct.js; wired in hooks/hooks.json + install.mjs (parity) + source-files/package.json registration. 6 new tests; suite 3418 -> 3424, ESLint clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(hooks): subagent dispatch-time memory injection (default off) — …",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-02T17:19:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "786c4342390fd65f62dead3dafdf8452ff34f5c7",
          "body": "Non-isolated efficacy cells spawn 'claude -p' under the real ~/.claude, whose SessionStart auto-adopt wrote a sentinel into a throwaway worktree memdir that outlived the deleted worktree (~40 eff-wt residue dirs found in a 2026-07-03 audit). Set MEM_NO_AUTO_ADOPT=1 in the child env (gate at hook.mjs) so efficacy runs leave no ~/.claude/projects/*/memory residue.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(benchmark): efficacy harness opts child sessions out of auto-adopt",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-07-02T17:17:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aa60c6b5dd6097e7f5026d81096e2a65324de8bf",
          "body": "The CLI's `recent --type` had no MCP counterpart, so an agent asking for \"recent\nbugfixes\" had to over-fetch and filter client-side.\n\n- tool-schemas.mjs: memRecentSchema gains optional obs_type (OBS_TYPE_ENUM — an\n  unknown value is rejected by the schema before the handler, so no manual\n  validatio\n[…]\nhe bugfix row, discovery rows excluded).\n\nrelease: v3.32.0 — synced 5 version files + CHANGELOG. Suite 3416 -> 3418,\nESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mcp): obs_type filter on mem_recent (closes CLI<->MCP parity gap)",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T19:01:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "73f466a99fc97e0059e7e252444bf4f2af757638",
          "body": "Mirrors v3.30.0's mem_search date_since on the recent surface, so the agent can\nask for \"everything since X\" (pair with a high limit).\n\n- tool-schemas.mjs: memRecentSchema gains optional date_since (opt-in; no default\n  behavior change — #8462)\n- server.mjs: extracted the inline mem_recent handler i\n[…]\nlid-duration\nexercised through the seam.\n\nrelease: v3.31.0 — synced 5 version files + CHANGELOG. Suite 3412 -> 3416,\nESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mcp): date_since on mem_recent (completes agent --since parity)",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T18:48:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6d076d2e47243c20fcbdbb3775e1f9b13537be3d",
          "body": "Brings v3.29.0's CLI --since to the MCP surface the agent actually calls.\nmem_search gains an optional date_since arg (7d|24h|90m|2w|30s) — the relative\ncomplement to date_from/date_to, so the agent can ask for \"recent\" memories\nwithout computing an absolute date.\n\n- tool-schemas.mjs: memSearchSchem\n[…]\n CLI id parity,\ninvalid 7days rejected).\n\nrelease: v3.30.0 — synced 5 version files + CHANGELOG. Suite 3410 -> 3412,\nESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mcp): date_since on mem_search (agent parity with CLI --since)",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T18:34:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "67d89b0309c1509c199d7c6f18db944db48ca451",
          "body": "Adds `--since <duration>` (7d|24h|90m|2w|30s, case-insensitive, single unit) as\nthe relative complement to the absolute --from/--to. Users think in \"last week\",\nnot ISO dates: `search \"login bug\" --since 7d`, `recent 1000 --since 24h`.\n\nPurely additive — no existing behavior changes, retrieval ranki\n[…]\nrecedence +\ninvalid, recent --since e2e). release: v3.29.0 — synced 5 version files +\nCHANGELOG. Suite 3403 -> 3410, ESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cli): --since relative time window for search and recent",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T18:18:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0319e082a8607c60a69654dff88a8fa5ee132ff9",
          "body": "Three positive hardenings, each behavior-neutral / additive with a RED->GREEN test:\n\n1. tier(fix): TIER_CASE_SQL's default-window fallthrough now guards on\n   (type IS NULL OR type NOT IN (6 known types)), mirroring computeTier's\n   `ACTIVE_WINDOWS[type] ?? DEFAULT`. Behavior-neutral today (all type\n[…]\nrse-file test.\n\nrelease: v3.28.3 — synced package/lock/plugin/marketplace/CLAUDE.md + CHANGELOG.\nSuite 3400 -> 3403, ESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "harden: tier JS<->SQL drift guard, tool-call tag defang, import size cap",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T17:52:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "40a73ba1094b816693d01d44e7b4bede24694765",
          "body": "…yed memory\n\nneutralizeContextDelimiters now strips the brackets on <system-reminder> and\n<task-notification> in addition to the three memory-block wrappers\n(claude-mem-context / memory-context / session-handoff).\n\nMemory replays arbitrary captured text (file contents, tool output, web pages),\nso a \n[…]\n on injection.\n\nrelease: v3.28.2 — synced package/lock/plugin/marketplace/CLAUDE.md + CHANGELOG.\nSuite 3399 -> 3400, ESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "change(security): defang forged harness-authority delimiters in repla…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T17:28:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "797382faef13015ac4c43577386f001acb4bd7f9",
          "body": "lib/rrf.mjs::rrfAccumulate summed 1/(k+rank+1) per-occurrence, so an id repeated\nwithin a SINGLE ranked list inflated to a fake cross-ranker-consensus score —\nviolating the documented \"across every ranked list it appears in\" contract.\nLatent today (both callers — tfidf.rrfMerge inputs and deep-searc\n[…]\nRED->GREEN test\nadded.\n\nrelease: v3.28.1 — synced package/lock/plugin/marketplace/CLAUDE.md + CHANGELOG.\nSuite 3399, ESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(rrf): count an intra-list duplicate id once at its best rank",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T17:09:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aaaa4581e70c348494145128a3c75bdaa7a50aff",
          "body": "The scrubSecrets assignment-keyword regex only fires on a KEY=value value of\n>=6 chars (shorter values are left alone to avoid prose false-positives). Several\nsave/enrich/prompt paths truncated raw text FIRST and scrubbed the result, so a\nreal secret straddling the cut was sliced to a 1-5 char head \n[…]\nGREEN regression test (manual save, LLM episode/events, re-enrich,\nend-to-end user-prompt hook). Suite 3394 -> 3397, ESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(security): scrub secrets at full length before truncation",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T17:09:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5ee650d825c17d71a83c69670115c1153c079b8e",
          "body": "…ly on the re-rank path)\n\nPublishes the post-review follow-up already on main (506bc22): coreRunSearchPipeline now\nbuilds the obs-filtered list inside the doReRank branch, so the no-rerank path (deepReranked\n/ MCP isDeep+!ftsQuery) skips a wasted O(n) filter the markSuperseded deletion (v3.27.0)\nlef\n[…]\nst and the\nresult re-sort is unchanged. Also refreshed the internal knip baseline note 51->53 (no rot).\n\nSuite 3394, ESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.28.0 — search-pipeline micro-cleanup (obsResults built on…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T16:16:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "506bc22583763d2587f5d696959d80b926c97def",
          "body": "…sted filter (review minor #1)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(search): build obsResults only when doReRank fires — skip wa…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T16:11:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bdd7ee3ed91e10d4e118739ef40a6f24fc2714c4",
          "body": "… rot)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(claudemd): refresh knip baseline 51→53 (2026-06-29 re-verify, no…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T15:48:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e8eed57fd274529902fec05ea6f9bcafdfd37a04",
          "body": "…verlay on superseded_at)\n\nDelete the in-memory [SUPERSEDED] display tag from search/recent. It was a display-only\nfile-overlap + importance<= heuristic with no content check, layered on the real\nsuperseded_at mechanism (set by maintain/compress, which already excludes those rows from\nsearch) — so i\n[…]\neutral\n(53; the +2 vs the stale 2026-06-05 baseline of 51 is pre-existing drift, verified\nknip-neutral for this change via stash).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.27.0 — remove markSuperseded display heuristic (unsound o…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T15:33:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e8028161dd5473ad2cba867e6d1f5c3990430588",
          "body": "…T-POSITIVE via corrected ups-ab #8858)\n\nFlip CLAUDE_MEM_UPS_IDENTIFIER_BYPASS from opt-in to default-on (set =0 to disable).\n\nchange(ups): default-on identifier floor-bypass. Re-ran benchmark/ups-ab.mjs with\n  #8858-corrected hard-negatives (true off-topic FP isolated from on-topic eagerness\n  via \n[…]\nDE_MEM_TASK_IMPERATIVE stays default-OFF (its flip is gated on a live cite-recall\ncanary, not this A/B). Suite 3405, ESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.26.0 — identifier floor-bypass ON by default (measured NE…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T15:05:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d14bd437db00ee78e10f75796abf97070d922320",
          "body": "… CLI/hook fixes + markSuperseded review-correction)\n\nCode review of v3.24.0; every finding re-verified against the code before acting.\n\nfix(ups): stop-list prose phrases (up-to-date / macOS / state-of-the-art …) that\n  TECH_IDENTIFIER_RE structurally matched — they widened the default-ON\n  hasExpli\n[…]\ns; every\n  production obs row carries date, so the new sort is behavior-neutral hardening.\n\nSuite 3403 -> 3405 (+2), ESLint clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.25.0 — code-review follow-up (UPS prose-match precision +…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T14:37:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3154e0bd738ba4669cf404d5591162e1cb08c20b",
          "body": "…sk-imperative Phase-2 (default-off)\n\nAudit fixes (user-facing): markSuperseded false [SUPERSEDED] tag, parseGitHubUrl uppercase\nrejection, compress/optimize silent no-op on the sibling execute flag, pre-tool-recall\ninferProject PWD-fallback parity. Opt-in (default OFF): CLAUDE_MEM_UPS_IDENTIFIER_BY\n[…]\n and the task-imperative Phase-2 emitter\n(CLAUDE_MEM_TASK_IMPERATIVE) + cite-recall/denoise-ab instrumentation. Suite 3367 → 3403.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.24.0 — 6-round E2E audit fixes + UPS-path A/B harness; ta…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T13:43:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3e99e7e0f2f37830343b1f0e3b6b8dba911b8c34",
          "body": "…ss; docs(benchmark): denoise-ab scope\n\ndenoise-ab only drives searchObservationsHybrid (the CLI/MCP search path); it never executes\nuser-prompt-search.js, so the UPS injection levers (TOP_REL_FLOOR / OR_TOP_BM25_FLOOR /\ncite_factor / signal-gate) read NEUTRAL there regardless of effect (verified: e\n[…]\non the real corpus (+3 recall recoveries\n/ +4 on-topic-but-eager injections over 12 positives / 8 hard-negatives), so kept opt-in.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(ups): identifier floor-bypass (default-off) + UPS-path A/B harne…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T13:30:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2b215a8da8a70efe0fce13014a8964c0a3c3f418",
          "body": "…ave path has\n\ninferProject is duplicated across utils.mjs (save path), the bash post-tool-use.sh fast-path,\nand pre-tool-recall.js (PreToolUse recall). pre-tool-recall resolved the dir from\nCLAUDE_PROJECT_DIR || process.cwd() WITHOUT the process.env.PWD fallback the other two have (and\nlacked the 1\n[…]\nlution order + sanitize + cap; add a\nSYNC comment. Latent in production (Claude Code sets CLAUDE_PROJECT_DIR, so all paths agree).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(hook): pre-tool-recall inferProject lacked the PWD fallback the s…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T13:29:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5332ae8d359b3b8387761812682c385ca36a60da",
          "body": "… execute flag\n\nThe three mutating maintenance commands used three \"execute\" conventions: compress --execute,\noptimize --run, maintain positional `execute`. Borrowing a sibling's flag fell through to a\nsilent preview at exit 0, so a user who typed `optimize --execute` believed a mutation ran when\nit\n[…]\na pointer to their real flag when\nonly the sibling's flag is passed — parity with maintain, which already errored on a stray flag.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(cli): compress/optimize silently no-op'd on the sibling command's…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T13:29:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8f0bd6d03f8f03e745cca94d8904d3b452d60ec8",
          "body": "Scheme + host were matched case-sensitively, so a pasted \"HTTPS://GitHub.com/owner/repo\"\n(RFC 3986-valid, opens in the browser) failed import with \"Invalid GitHub URL\". Normalize only\nthe scheme://github.com origin to lowercase before matching; the path (owner/repo/branch) stays\ncase-sensitive and t\n[…]\n unchanged, so the SSRF host-spoof guards\n(github.com.evil.com / github.com@evil.com) still reject — including uppercase variants.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(registry): parseGitHubUrl rejected valid uppercase GitHub URLs",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T13:28:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7ce61b3f22120dae961014f32bbdee746d1af332",
          "body": "…t silently no-op'd in production\n\nThe recency sort keyed on r.date, but the production search pipeline (coreRunSearchPipeline →\nsearch-engine.mjs) supplies created_at / created_at_epoch and no `date`, so the localeCompare\nwas a no-op and a current, top-importance obs got a false [SUPERSEDED] tag. S\n[…]\ny-only (no recall/ranking impact). Unit\ntests passed because their fixtures supplied `date` — a test/production field-shape drift.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(search): markSuperseded read a missing `date` field — recency sor…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T13:28:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "edebaa0326c46d5d1ffc602d5566ccfa20e00faa",
          "body": "…r the co-located task-imperative line\n\nThe CLAUDE_MEM_TASK_IMPERATIVE line shares a UserPromptSubmit attachment with <memory-context>, so per-attachment routing folded its #NN into :memory-context. Split per-line into a distinct :imperative bucket + OR-gate the imperative-only case (#1501). Makes the dogfood canary (imperative cite-recall vs path-A/B baseline) measurable.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(benchmark): cite-recall :imperative bucket — per-line routing fo…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T09:51:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "87499fd65c6d9d5b230fd4993215e943ca187994",
          "body": "…_IMPERATIVE\n\nDogfooding sets the flag in .claude/settings.local.json, which Claude Code propagates into the test subprocess env; runUserPrompt spread ...process.env so the 'flag OFF' case inherited it. Clear it in the base env (like CLAUDE_MEM_HOOK_RUNNING) so the flag is opt-in per-test.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(hook): isolate task-imperative test from ambient CLAUDE_MEM_TASK…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T09:38:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "85bac7e5b9568a4f398988ea774a3accee96d488",
          "body": "…) — arm T was degenerate (== C) without it\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(efficacy): add aacab0c requirement (spelled-out superseded_at fix…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T09:17:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3ed194c5771389d944f79797757c348ffa2fca41",
          "body": "… CLAUDE_MEM_TASK_IMPERATIVE (default off)\n\nShips lib/task-imperative.mjs in SOURCE_FILES + package.json files (new runtime import from hook.mjs).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(hook): wire task-imperative emitter into UserPromptSubmit behind…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T09:05:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "40bf4461cea35ce1bc2c84d8c8b54d4715c741f5",
          "body": "… gate (Phase 2)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(hook): selectImperativeLesson — top-1 high-value relevant lesson…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T08:54:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5e4ce3130a4fae06700d8f222be74579de59a672",
          "body": "…task-prompt 6-8/8 vs hook 0/8)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(efficacy): record arm-U task-imperative measure — NET-POSITIVE (…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-29T00:43:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "84d851fb8c9ad7d9b4cd5a20f7ef923fe279b9d6",
          "body": "…ed taskSuffixForArm\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(efficacy): add arm U (task-position memory-imperative) via unifi…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-28T23:48:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f2ef14e01be16de25e0d7078797ce26eec00fe75",
          "body": "…+ Phase-2 emitter)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(efficacy): pure task-imperative framing helper (shared by arm U …",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-28T23:44:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d531da7bbd8364478383a7c12db6c331b627d015",
          "body": "…njection\n\nThe [mem]-only marker counted only path A (user-prompt-search.js \"[mem] FYI\")\nunder \"UserPromptSubmit\" and left path B (hook.mjs <memory-context>, which\ncarries no [mem] marker) invisible. Recognise <memory-context> and bucket it as\nUserPromptSubmit:memory-context so the two sibling UPS i\n[…]\n Lowest-cited injectors are PostToolUse:Bash (13.8%) and path A,\nNOT path B. Dev tooling — not in SOURCE_FILES, no release impact.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(benchmark): cite-recall now measures path B (<memory-context>) i…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-28T23:03:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "855b2226e549d145924a0004156a9695bfbbc6bb",
          "body": "Denoising levers shift precision (hard-negative suite) and recall\n(vocab-mismatch paraphrase suite) in OPPOSITE directions; evaluating one\nsuite alone hides the other side — that split let an OR-BM25 floor\nship-then-revert (2026-06-29). denoise-ab.mjs runs BOTH suites on the\nproduction-hybrid path a\n[…]\nare with a REJECT / TRADEOFF / NET-POSITIVE / NEUTRAL verdict.\n\nDev tooling only — not in SOURCE_FILES, no runtime/release impact.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(benchmark): add denoise-ab precision↔recall tradeoff harness",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-28T22:57:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bb849fe96ffe365e759e22f94e855d4e54ea3701",
          "body": "…e, change-aware bugfix nudge, lesson preservation, importance de-inflation\n\n3-pillar audit (injection/storage/retrieval, 3 parallel agents). Suite 3353→3367 (+14), ESLint clean.\n\n- fix(honesty): noise gauge sees imp=0 (importance<=1 + injection=0), CLI+MCP — live 0.0%→honest ~10-12%\n- fix(noise): b\n[…]\nicable commits 1→2\n\nLive maintenance pass: recovered 310 unreachable compression orphans + 64 buried lessons (snapshots retained).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.23.0 — injection/noise + storage audit: honest noise gaug…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-28T21:52:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c0a191bef0d73899d9530de5aa5e4561fdadf0f3",
          "body": "… GC + CLI/hook robustness\n\nTwo-round real-user E2E bug-hunt (4 finder agents + per-bug reproduction). 15\nconfirmed bugs fixed across the CLI, MCP, and passive-hook paths. Suite 3339 →\n3353, ESLint clean, knip baseline unchanged. Recurring theme: §9 parallel-path\nmiss — the CLI/MCP maintenance paths\n[…]\nobject stdin; injected-context blocks defanged against delimiter tags.\n- session_handoffs: expired rows now GC'd in auto-maintain.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.22.0 — E2E user-sim audit: maintain data-loss fix + imp=0…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-28T20:23:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a1e111481efc917e53ffd405ceefef9e96b3bc26",
          "body": "…an-safe purge)\n\n- feat(MED-2): VACUUM INTO snapshot before irreversible maintenance (auto-maintain\n  / CLI maintain / MCP mem_maintain), guarded on actual deletions, retain newest 3\n- feat(MED-5): post-install health gate — boot the switched code (cli help +\n  node --check) before discarding the ba\n[…]\n-backup.mjs (registered in source-files.mjs + package.json files).\nSuite 3330 -> 3339 (+9), ESLint clean, knip baseline unchanged.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.21.0 — maintenance-layer durability (MED-2 + MED-5 + orph…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-28T18:58:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "103e8011aaea2e045f2abf9708234d1e6ee90c19",
          "body": "Completes HIGH-1: embed the Ed25519 public key in hook-update.mjs so auto-update\nfails closed — a release missing/with-invalid signature assets is refused instead\nof installed opportunistically. Safe now: v3.19.0 was the first signed release and\nits published signature verified end-to-end against th\n[…]\nunaffected.\n\nAdds an embedded-key parse/reject regression lock; updates the default-regime test\nfrom opportunistic to fail-closed.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.20.0 — auto-update verifies release signatures (fail-closed)",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-28T18:20:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0df770aa8800b87d8292b8201fc180ee93109431",
          "body": "… signing activated\n\n4-agent production audit: engine held A- (no regression); fixed 3 HIGH in the\nperiphery + activated release signing.\n\n- fix(security): scrub events table at saveEvent choke-point (LLM + CLI writers)\n- fix(data): cluster-merge snapshots keeper original before in-place overwrite\n-\n[…]\nregistry busy_timeout 5000, golden decay axis, shadow-log 90d GC\n\nSuite 3317 -> 3329 (+12), ESLint clean, knip baseline unchanged.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.19.0 — security hardening from production audit + release…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-28T18:12:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "902930eb6731d4f63a3858f5ed20ab5f8bfbce7f",
          "body": "…ault off) + scoring-path golden lock\n\nfeat (opt-in, default OFF): CLAUDE_MEM_SALIENCE=bridge — PreToolUse rewrites a\nrecalled lesson into a check bound to the edit hunk via Haiku, fail-open to ack,\nLLM stack dynamic-imported only under the flag (fast-path unchanged).\n\nmeasured: B=0/8 vs T=8/8 (bac2\n[…]\ndrift-lock for the two scoring paths (ratio-isolation, mutation-\nverified). infra: efficacy harness arm B + ITT/fired-only deltas.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: v3.18.0 — opt-in comprehension-bridge FF (measured null, def…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-26T23:33:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "abde878b2ac9a0ec054d5be1eead4d85ec88401e",
          "body": "…n test\n\nAdds CLAUDE_MEM_SALIENCE=bridge (default OFF): PreToolUse rewrites a recalled\nlesson into a check bound to the edit hunk via Haiku, fail-open to ACK. Plus a\ngolden drift-lock for the two scoring paths, and efficacy harness arm B with\nITT/fired-only deltas.\n\nMEASURED OUTCOME (efficacy-README\n[…]\n step, not content specificity. Default unchanged;\nbridge stays opt-in. Next lever for D#44 is instruction/task-channel injection.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "merge: comprehension-bridge forcing-function (opt-in) + scoring golde…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-26T23:27:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d68a970867d9465defd8b12797a1d2bf0831e75a",
          "body": "Arm B (CLAUDE_MEM_SALIENCE=bridge) measured on bac2e85, k=8, sonnet-4-6,\nreusing cached A/C/F/T. Result: B=0/8 (Δ_ITT(B−C)=0pp) vs T=8/8.\n\nClean channel×specificity 2x2: the bridge's emitted check is ~content-identical\nto arm T's spelled-in requirement, so B-vs-T isolates delivery channel\n(PreToolUs\n[…]\nicity.\nExecutes #8771's 'add a forcing-function, re-run STEP 3' and refines its\nverdict. Do NOT flip default; bridge stays opt-in.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(efficacy): record comprehension-bridge n=1 channel-isolation result",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-26T23:18:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b2f1a34d944072e5ce5cc5feb17f30fa483beea0",
          "body": "Final-review finding (Important): the Phase-3 aggregation silently dropped\narm-B cells where the pre-session bridgeFired proxy was false, while leaving\narms A/C unfiltered. A non-fired bridge fails open to ACK (~arm A, scores ~0),\nso dropping those cells biased Δ(B−A)/Δ(B−C) optimistic — it could ma\n[…]\nd OPTIMISTIC Δ_fired(B−C)/Δ_fired(B−A) per-protocol\nsubset. bridgeFired + ⚠NOBRIDGE kept as diagnostics. Supersedes plan line 446.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: report ITT + fired-only arm-B deltas (remove biased silent-drop)",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-26T22:44:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "badeb06c473e0453386cf71a99271b4c4f61de3e",
          "body": "Task 4. New pure module lib/efficacy-bridge-select.mjs:\n- lessonBindsToRegion(lesson, region): lesson identifier ∈ region (commit\n  selection — keep only commits the bridge can bind to, §4.2).\n- bridgeFired(out) / BRIDGE_MARKER: detect the '→ this edit must:' marker\n  pre-tool-recall emits (per-run \n[…]\n cells dropped → vacuous. Now feeds the fix-region diff as the Edit\nhunk so the probe exercises the real bridge gate + Haiku path.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: efficacy arm-B selection + firing verification (Task 4)",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-26T22:28:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "440efdfe6737b95890c791d9a84efdd8db6cf9cc",
          "body": "…easure\n\nTask 3. Adds 'B' to INJECTED_ARMS and salience='bridge' to armConfig, so the\nsevere-test harness can run the bridge arm under CLAUDE_MEM_SALIENCE=bridge.\nController fix: restored the 6 pre-existing arm-semantics tests the worker\noverwrote (A/AL/F/C/T + exact-set), added B coverage, updated the exact-set\nassertion to {A,AL,B,F}.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: efficacy arm B (bridge salience) for the comprehension-bridge m…",
          "author_name": "sds.rs",
          "author_login": "sdsrss",
          "committed_at": "2026-06-26T22:14:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 100,
      "commits_last_year": 829,
      "latest_release_at": "2026-07-24T08:45:40Z",
      "latest_release_tag": "v3.59.1",
      "releases_from_tags": false,
      "days_since_last_push": 10,
      "active_weeks_last_year": 24,
      "days_since_latest_release": 10,
      "mean_days_between_releases": 0.6
    },
    "artifacts": {
      "collected": true,
      "structure": [],
      "declarations": [
        {
          "name": "claude-mem-lite",
          "path": "package.json",
          "tokens": [
            "npm.bin"
          ],
          "ecosystem": "npm"
        }
      ]
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "readme_badges": {
        "hosts": [],
        "total": 0,
        "header": 0,
        "collected": true,
        "has_inspect_badge": false
      },
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "claude-mem-lite",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "npm",
          "categories": [],
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/claude-mem-lite",
          "declared_type": null,
          "is_deprecated": false,
          "latest_version": "3.59.1",
          "repository_url": "https://github.com/sdsrss/claude-mem-lite",
          "versions_count": 252,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 8084,
          "first_published_at": "2026-02-13T18:17:41.945000Z",
          "latest_published_at": "2026-07-24T08:45:33.263000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 10
        }
      ]
    },
    "popularity": {
      "forks": 3,
      "stars": 49,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-03-11",
            "count": 1
          },
          {
            "date": "2026-05-15",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 3,
        "total_forks": 3
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": true,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 164531,
      "source_files_sampled": 396,
      "oversized_source_files": 16,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 9548
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 130,
        "malicious_count": 0,
        "assessed_package": "npm:claude-mem-lite@3.59.1",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.26.0"
        },
        {
          "name": "better-sqlite3",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.6.2"
        },
        {
          "name": "zod",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.6"
        }
      ],
      "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": 9,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 5,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "sdsrss",
          "commits": 829,
          "avatar_url": "https://avatars.githubusercontent.com/u/230400260?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "publish.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "eslint.config.mjs"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "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": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 5,
            "reason": "dependency not pinned by hash detected -- score normalized to 5",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 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": 8,
            "reason": "5 out of the last 5 releases have a total of 5 signed artifacts.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 5,
            "reason": "5 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "cf81df8d1b0ca9e24ccd4ad57449ddedf2bdd4af",
        "ran_at": "2026-08-03T16:11:56Z",
        "aggregate_score": 4.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "recent_prs": {
        "merged_7d": 0,
        "decided_7d": 0,
        "merged_30d": 0,
        "authors_30d": 0,
        "decided_30d": 0,
        "sample_size": 10,
        "window_days": 30,
        "sample_exhausted": false,
        "authors_probed_30d": 0,
        "newcomer_merged_30d": 0,
        "bot_prs_excluded_30d": 0,
        "newcomer_authors_30d": 0,
        "newcomer_decided_30d": 0
      },
      "ci_last_run_at": "2026-07-24T08:45:45Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-03-28T10:14:40Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/sdsrss/claude-mem-lite",
    "host": "github.com",
    "name": "claude-mem-lite",
    "owner": "sdsrss"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": "The weighted overall 63 is calibrated to 71 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 63,
            "calibrated": 71,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 71,
      "inputs": {
        "security": 55,
        "vitality": 83,
        "community": 46,
        "governance": 50,
        "calibration": "2026-08-02",
        "engineering": 78,
        "ai_readiness": 64,
        "weighted_overall_raw": 63
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 83,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "commits_last_year": 829,
              "human_commit_share": 1,
              "days_since_last_push": 10,
              "active_weeks_last_year": 24
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 10 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 10
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "24/52 weeks with commits",
                "points": 16.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 24
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "829 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 829
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "exceptional",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v3.59.1",
              "releases_from_tags": false,
              "days_since_latest_release": 10,
              "mean_days_between_releases": 0.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 10 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 10
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "5 out of the last 5 releases have a total of 5 signed artifacts.",
                "points": 8,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "exceptional",
            "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": "weak",
        "name": "Community & Adoption",
        "value": 46,
        "weight": 0.17,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 30,
            "inputs": {
              "forks": 3,
              "stars": 49,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "49 stars",
                "points": 27.3,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 49
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "3 forks",
                "points": 2.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "readme_badges": 0,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "readme_badge_services": [],
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 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": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "good",
            "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": 65,
            "inputs": {
              "packages": [
                "claude-mem-lite"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 8084
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "8,084 downloads/month across npm",
                "points": 52.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 8084,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "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": 50,
        "weight": 0.23,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "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,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "newcomer_pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 79,
            "inputs": {
              "merged_prs": 9,
              "open_issues": 0,
              "closed_issues": 5,
              "prs_merged_7d": 0,
              "prs_decided_7d": 0,
              "prs_merged_30d": 0,
              "prs_decided_30d": 0,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 1,
              "first_time_authors_30d": 0,
              "first_time_prs_merged_30d": 0,
              "first_time_prs_decided_30d": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 42,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "9/10 decided PRs merged",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 9,
                      "decided": 10
                    }
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "no first-time contributor's PR decided in 30d",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_newcomer_prs",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "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": 30,
            "inputs": {
              "followers": 3,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "sdsrss",
              "public_repos": 12,
              "account_age_days": 333
            },
            "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": "3 followers of sdsrss",
                "points": 4.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 3,
                      "login": "sdsrss"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "12 public repos, account ~0 yr old",
                "points": 9.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 12
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "exceptional",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "claude-mem-lite"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 10
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 10 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 10
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "252 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 252
                    }
                  }
                ],
                "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": 78,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 80,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "eslint.config.mjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "claude-code",
                "fts5",
                "hooks",
                "mcp",
                "memory",
                "persistence",
                "sqlite",
                "agent-memory",
                "ai-coding-assistant",
                "ai-memory",
                "anthropic",
                "claude",
                "claude-code-plugin",
                "hybrid-search",
                "llm-memory",
                "long-term-memory",
                "mcp-server",
                "model-context-protocol",
                "rag",
                "semantic-search"
              ],
              "has_wiki": false,
              "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": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 55,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "weak",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 44,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.4
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow 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 5",
                "points": 2.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "5 out of the last 5 releases have a total of 5 signed artifacts.",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "5 existing vulnerabilities detected",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "exceptional",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:claude-mem-lite@3.59.1 runtime dependency closure — what installing the published package pulls in — 130 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:claude-mem-lite@3.59.1",
                  "assessed": 130
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 130,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "exceptional",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 130,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 64,
        "weight": 0.04,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "exceptional",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_llms_txt": true,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 9548
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": "llms.txt present",
                "points": 15,
                "status": "met",
                "details": [
                  {
                    "code": "llms_txt_present",
                    "params": {}
                  }
                ],
                "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": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 1,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "eslint.config.mjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "100 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 100,
                      "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 5",
                "points": 5,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 164531,
              "source_files_sampled": 396,
              "oversized_source_files": 16
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "16/396 source files over 60KB",
                "points": 52.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 396,
                      "oversized": 16
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "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? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
      }
    ],
    "classification": {
      "top": [
        "library",
        "application"
      ],
      "labels": [
        "cli",
        "mcp-server",
        "library"
      ],
      "scores": {
        "cli": 10,
        "library": 6,
        "mcp-server": 9
      },
      "primary": "cli",
      "evidence": [
        {
          "tier": "declared",
          "label": "cli",
          "source": "npm.bin",
          "weight": 10
        },
        {
          "tier": "distribution",
          "label": "library",
          "source": "registry:npm",
          "weight": 6
        },
        {
          "tier": "dependencies",
          "label": "mcp-server",
          "source": "dep:@modelcontextprotocol/sdk",
          "weight": 4
        },
        {
          "tier": "structure",
          "label": "mcp-server",
          "source": "mcp_signal",
          "weight": 3
        },
        {
          "tier": "tags",
          "label": "mcp-server",
          "source": "tag:mcp-server",
          "weight": 2
        }
      ],
      "artifacts": [
        {
          "path": "package.json",
          "labels": [
            "cli"
          ],
          "ecosystem": "npm"
        }
      ],
      "confidence": "high",
      "host_extension": false,
      "runs_as_process": true,
      "consumed_by_code": true
    },
    "metrics_version": "2.5.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-08-03T16:12:04.323505Z",
  "schema_version": "0.30.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/sdsrss/claude-mem-lite.svg",
  "full_name": "sdsrss/claude-mem-lite",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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