Registro público
Informe de salud del softwareesquema 0.26.0 · métricas 1.13.0 · 2026-07-22 11:29 UTC

keystone-db / keystonedb

Single-file, embedded, DynamoDB-style database written in Rust

RustSin licencia detectada★ 0 estrellas⑂ 0 forksdesde oct 2025Ver en GitHub ↗

keystone-db/keystonedb tiene un índice de salud de 42 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es AI Readiness (79/100) y la más baja, Community & Adoption (16/100). Se actualizó por última vez hace 206 días. Una sola persona concentra la mayor parte del trabajo reciente.

42
global / 100
En riesgo

Índice de salud del software

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

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

Perfil de puntuación

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

Titularidad

keystone-dbOrganización
0 seguidores2 repositorios públicosdesde oct 2025

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
crates.iokstone-api0.1.031hace 290 díasdatabasedynamodbembeddedkey-valuenosqldatabase-implementations
crates.iokstone-core0.1.0291hace 290 díasdatabasedynamodbembeddedkey-valuenosqldatabase-implementations
crates.iokstone-proto0.1.0151hace 290 díasdatabasedynamodbembeddedkey-valuenosqldatabase-implementations

Métricas por categoría

Vitalidad

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

36En riesgo · 22% del índice global
Cómo se puntúa
3.6/36Recencia de push — último push hace 206 días
1.4/36Cadencia de commits — 2/52 semanas con commits
17.8/18Volumen de commits — 96 commits en el último año
0/10OpenSSF Scorecard: Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Datos de entrada utilizados
commits_last_year96
human_commit_share1
days_since_last_push206
active_weeks_last_year2
Cómo se puntúa
27/27Publica versiones — 1 versiones publicadas
16.2/36Recencia de las versiones — última versión hace 290 días
12.6/27Cadencia de publicación — cadencia desconocida (una sola versión)
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count1
latest_release_tagv0.1.0
releases_from_tagsno
days_since_latest_release290
mean_days_between_releases

Comunidad y Adopción

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

16Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
0/22.5Licencia — no se detectó ningún archivo de licencia
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_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
22.4/80Descargas mensuales — 47 descargas/mes en crates
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packageskstone-api, kstone-core, kstone-proto
dependents
ecosystemscrates
total_downloads1272
monthly_downloads47
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?

49En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
8.4/22.5Distribución de commits — el principal contribuyente firma el 62% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,625
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 6/6 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/2 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs6
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
0/25Alcance del propietario — 0 seguidores de keystone-db
5.1/25Trayectoria — 2 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers0
owner_typeOrganization
is_verified
owner_loginkeystone-db
public_repos2
account_age_days291
Cómo se puntúa
25/25Publicado y resoluble — 3 paquete(s) en crates
26/35Recencia de publicación — última publicación hace 290 días
4/20Historial de versiones — 1 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packageskstone-api, kstone-core, kstone-proto
ecosystemscrates
any_deprecatedno
min_days_since_publish290

Calidad de Ingeniería

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

65Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 2 merged PRs checked by a CI test -- score normalized to 0
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://keystonedb.dev
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepagehttps://keystonedb.dev
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?

38En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — sin datos
0/2.5CI-Tests — 0 out of 2 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/2 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
0/2.5Licencia — license file not detected
0/7.5Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 75 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate2,5
Excluidos de la puntuación (sin datos o no aplicable): branch_protection, packaging. 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
19/25Dependencias indirectas libres de avisos conocidos — 1 afectados: bincode 1.3.3 (unknown)
37.2/40Sin avisos pendientes — 1 paquete(s) con avisos sin atender más allá de 90 días; el más antiguo publicado hace 217 días
Datos de entrada utilizados
sourceosv
advisories1
affected_packages1
assessed_packages72
unassessed_packages0
affected_by_severityunknown 1
direct_affected_packages0
Se cotejó el cierre de dependencias en tiempo de ejecución de crates:kstone-api@0.1.0 —lo que arrastra la instalación del paquete publicado—: 72 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? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

79Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 95 de 96 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,99
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes77.600
Cómo se puntúa
12.6/18Arranque con un solo comando — Cargo.toml, bindings/nodejs/Cargo.toml, bindings/python/Cargo.toml (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — website/tsconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
10/10Práctica demostrada con agentes — 48 de los últimos 96 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesCargo.lock, package-lock.json
has_dockerfile
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configswebsite/tsconfig.json
agent_commit_share0,5
toolchain_manifestsCargo.toml, bindings/nodejs/Cargo.toml, bindings/python/Cargo.toml, c-ffi/Cargo.toml, examples/blog-engine/Cargo.toml, examples/cache-server/Cargo.toml, examples/s3-backup/Cargo.toml, examples/todo-api/Cargo.toml, examples/url-shortener/Cargo.toml, fuzz/Cargo.toml, kstone-api/Cargo.toml, kstone-cli/Cargo.toml, kstone-client/Cargo.toml, kstone-core/Cargo.toml, kstone-proto/Cargo.toml, kstone-server/Cargo.toml, kstone-sync/Cargo.toml, kstone-tests/Cargo.toml
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Rust (tipado estático)
53.3/55Tamaños de archivo manejables — 4/130 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageRust
largest_source_bytes74.718
source_files_sampled130
oversized_source_files4
Cómo se puntúa
40/40Esquema de API (OpenAPI/GraphQL/proto) — kstone-proto/proto/keystone.proto
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_fileskstone-proto/proto/keystone.proto

Datos clave

0estrellas de GitHub
2contribuidores
96commits en los últimos 12 meses
206días desde el último push
1versiones publicadas
1factor bus
0issues abiertas
crates.io, npmecosistemas de paquetes

Advertencias de recopilación de datos

  • Could not fetch crates package 'kstone-ffi' from its registry
  • Could not fetch npm package 'keystonedb-website' from its registry
  • Could not fetch crates package 'kstone-cli' from its registry
  • Could not fetch crates package 'kstone-sync' from its registry
  • Could not fetch crates package 'kstone-tests' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 2.5 / 10
2.5agregado

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

10Binary-Artifactsno binaries found in the repo
n/dBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
0CI-Tests0 out of 2 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/2 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
0Licenselicense file not detected
0Maintained0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities75 existing vulnerabilities detected
Dependencias directas 118
RegistroPaqueteRestricción de versiónManifiesto
crates.iokstone-apic-ffi/Cargo.toml
crates.ioserde_jsonc-ffi/Cargo.toml
crates.iobase64c-ffi/Cargo.toml
crates.ioparking_lotc-ffi/Cargo.toml
crates.iokstone-core0.1.0kstone-api/Cargo.toml
crates.ioanyhowkstone-api/Cargo.toml
crates.iothiserrorkstone-api/Cargo.toml
crates.iobyteskstone-api/Cargo.toml
crates.ioserdekstone-api/Cargo.toml
crates.ioserde_jsonkstone-api/Cargo.toml
crates.iokstone-api0.1.0kstone-cli/Cargo.toml
crates.iokstone-core0.1.0kstone-cli/Cargo.toml
crates.iokstone-sync0.1.0kstone-cli/Cargo.toml
crates.ioanyhowkstone-cli/Cargo.toml
crates.ioclapkstone-cli/Cargo.toml
crates.iocomfy-tablekstone-cli/Cargo.toml
crates.iotracingkstone-cli/Cargo.toml
crates.iotracing-subscriberkstone-cli/Cargo.toml
crates.ioserde_jsonkstone-cli/Cargo.toml
crates.ioserdekstone-cli/Cargo.toml
crates.iorustyline14.0kstone-cli/Cargo.toml
crates.iocolored2.0kstone-cli/Cargo.toml
crates.iodirs5.0kstone-cli/Cargo.toml
crates.iotokiokstone-cli/Cargo.toml
crates.ioaxum0.7kstone-cli/Cargo.toml
crates.iotower0.4kstone-cli/Cargo.toml
crates.iotower-http0.5kstone-cli/Cargo.toml
crates.iorust-embed8.0kstone-cli/Cargo.toml
crates.iouuid1.6kstone-cli/Cargo.toml
crates.iochrono0.4kstone-cli/Cargo.toml
crates.iobase640.22kstone-cli/Cargo.toml
crates.iofutures0.3kstone-cli/Cargo.toml
crates.iokstone-proto0.1.0kstone-client/Cargo.toml
crates.iokstone-core0.1.0kstone-client/Cargo.toml
crates.iotonickstone-client/Cargo.toml
crates.ioprostkstone-client/Cargo.toml
crates.iotokiokstone-client/Cargo.toml
crates.ioanyhowkstone-client/Cargo.toml
crates.iothiserrorkstone-client/Cargo.toml
crates.iobyteskstone-client/Cargo.toml
crates.ioanyhowkstone-core/Cargo.toml
crates.iothiserrorkstone-core/Cargo.toml
crates.iobyteskstone-core/Cargo.toml
crates.ioparking_lotkstone-core/Cargo.toml
crates.iocrossbeamkstone-core/Cargo.toml
crates.iotracingkstone-core/Cargo.toml
crates.ioserdekstone-core/Cargo.toml
crates.ioserde_jsonkstone-core/Cargo.toml
crates.iobincodekstone-core/Cargo.toml
crates.iocrc32fastkstone-core/Cargo.toml
crates.iocrc32ckstone-core/Cargo.toml
crates.ioaes-gcmkstone-core/Cargo.toml
crates.iogetrandomkstone-core/Cargo.toml
crates.iomemmap20.9kstone-core/Cargo.toml
crates.iosqlparserkstone-core/Cargo.toml
crates.iobase64kstone-core/Cargo.toml
crates.iozstdkstone-core/Cargo.toml
crates.ioregexkstone-core/Cargo.toml
crates.ioprost0.13kstone-proto/Cargo.toml
crates.iotonic0.12kstone-proto/Cargo.toml
crates.iobyteskstone-proto/Cargo.toml
crates.ioserdekstone-proto/Cargo.toml
crates.ioserde_jsonkstone-proto/Cargo.toml
crates.iokstone-api0.1.0kstone-server/Cargo.toml
crates.iokstone-core0.1.0kstone-server/Cargo.toml
crates.iokstone-proto0.1.0kstone-server/Cargo.toml
crates.iotonickstone-server/Cargo.toml
crates.ioprostkstone-server/Cargo.toml
crates.iotokiokstone-server/Cargo.toml
crates.ioanyhowkstone-server/Cargo.toml
crates.iothiserrorkstone-server/Cargo.toml
crates.iotracingkstone-server/Cargo.toml
crates.iotracing-subscriberkstone-server/Cargo.toml
crates.ioclapkstone-server/Cargo.toml
crates.ioserdekstone-server/Cargo.toml
crates.ioserde_jsonkstone-server/Cargo.toml
crates.iobyteskstone-server/Cargo.toml
crates.iofutures0.3kstone-server/Cargo.toml
crates.ioprometheuskstone-server/Cargo.toml
crates.iolazy_statickstone-server/Cargo.toml
crates.ioonce_cellkstone-server/Cargo.toml
crates.ioaxumkstone-server/Cargo.toml
crates.iouuid1.0kstone-server/Cargo.toml
crates.iogovernorkstone-server/Cargo.toml
crates.iosubtle2.6kstone-server/Cargo.toml
crates.iokstone-core0.1.0kstone-sync/Cargo.toml
crates.iokstone-api0.1.0kstone-sync/Cargo.toml
crates.ioanyhowkstone-sync/Cargo.toml
crates.iobyteskstone-sync/Cargo.toml
crates.ioserdekstone-sync/Cargo.toml
crates.ioserde_jsonkstone-sync/Cargo.toml
crates.iotracingkstone-sync/Cargo.toml
crates.ioparking_lotkstone-sync/Cargo.toml
crates.iouuid1.18kstone-sync/Cargo.toml
crates.iochrono0.4kstone-sync/Cargo.toml
crates.iotokiokstone-sync/Cargo.toml
crates.ioasync-trait0.1kstone-sync/Cargo.toml
crates.ioaws-config1.5kstone-sync/Cargo.toml
crates.ioaws-sdk-dynamodb1.60kstone-sync/Cargo.toml
crates.ioaws-sdk-s31.60kstone-sync/Cargo.toml
crates.ioreqwest0.11kstone-sync/Cargo.toml
crates.iozstd0.13kstone-sync/Cargo.toml
crates.iosha20.10kstone-sync/Cargo.toml
crates.iohmac0.12kstone-sync/Cargo.toml
crates.iokstone-apikstone-tests/Cargo.toml
crates.iokstone-corekstone-tests/Cargo.toml
crates.iokstone-synckstone-tests/Cargo.toml
crates.iotempfilekstone-tests/Cargo.toml
crates.ioanyhowkstone-tests/Cargo.toml
crates.iotokiokstone-tests/Cargo.toml
npm@astrojs/react^3.6.2website/package.json
npm@astrojs/tailwind^5.1.0website/package.json
npmastro^4.15.0website/package.json
npmreact^18.3.1website/package.json
npmreact-dom^18.3.1website/package.json
npmtailwindcss^3.4.10website/package.json
npmlucide-react^0.436.0website/package.json
npmshiki^1.16.2website/package.json
Todas las dependencias no recopilado

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

Avisos de dependencias 1

Instalar crates:kstone-api@0.1.0 arrastra 72 paquetes, directos y transitivos: 1 tienen avisos conocidos, de los cuales 0 son dependencias directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
bincode1.3.3indirectadesconocida1

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": [],
      "is_fork": false,
      "size_kb": 1274,
      "has_wiki": true,
      "homepage": "https://keystonedb.dev",
      "languages": {
        "C": 19186,
        "CSS": 2475,
        "Ruby": 3935,
        "Rust": 1339468,
        "Astro": 110166,
        "Shell": 24914,
        "Python": 9194,
        "Dockerfile": 1731,
        "JavaScript": 10023,
        "TypeScript": 1315
      },
      "pushed_at": "2025-12-27T22:00:17Z",
      "created_at": "2025-10-04T02:45:43Z",
      "owner_type": "Organization",
      "updated_at": "2025-12-27T22:00:23Z",
      "description": "Single-file, embedded, DynamoDB-style database written in Rust",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "develop",
      "license_spdx_raw": null,
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "Organization",
      "login": "keystone-db",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/235991624?v=4",
      "created_at": "2025-10-04T02:44:31Z",
      "is_verified": null,
      "public_repos": 2,
      "account_age_days": 291
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2025-10-04T16:29:18Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "d4495bba87d08e3132c2dafa90dee12c403df005",
          "body": "…ck-1nnSi",
          "is_bot": false,
          "headline": "Merge pull request #8 from keystone-db/claude/code-review-release-che…",
          "author_name": "Parker (Gabel) Lackey",
          "author_login": "parkerdgabel",
          "committed_at": "2025-12-27T22:00:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9233de7783cae3af97b6f0b0d9d979bcfa9a8b74",
          "body": "Add #[non_exhaustive] attribute to:\n- AttributeType (validation.rs)\n- ValueConstraint (validation.rs)\n- TransactWriteOperation (lsm.rs)\n\nThis allows adding new variants without breaking semver.",
          "is_bot": false,
          "headline": "api: Add #[non_exhaustive] to remaining public enums",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T21:27:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19dec849d082f7a13981a8ffbbd2548ea6dc3e99",
          "body": "Fixed Regular Expression Denial of Service (ReDoS) vulnerability in\nschema validation pattern matching. Previously, user-supplied regex\npatterns were compiled and executed without any limits, which could\nlead to catastrophic backtracking and DoS attacks.\n\nChanges:\n- Added input length limit (10,000 \n[…]\nrotection\n\nAlso fixed compilation errors in extent.rs and layout.rs where Result\ntypes were not being unwrapped in tests.\n\nAffected file: kstone-core/src/validation.rs\nTest coverage: 3 new tests added",
          "is_bot": false,
          "headline": "security: Fix ReDoS vulnerability in regex patterns",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T20:44:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a58be594b9d818ea3a1b232748edf075c91a025c",
          "body": null,
          "is_bot": false,
          "headline": "fix: Handle metrics initialization failures gracefully",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T20:42:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57395bec465ececb600827f0a12adc43b4c78a62",
          "body": null,
          "is_bot": false,
          "headline": "fix: Remove panic-inducing unwrap calls from C-FFI",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T20:40:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41853e7c7098dfe1cf407eec2c9128d50a6da133",
          "body": null,
          "is_bot": false,
          "headline": "api: Add #[non_exhaustive] to public enums for stability",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T20:40:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "749fc4d107f912879343267877ec76234e48c162",
          "body": "Fixed critical security vulnerability in FilesystemProtocol::new() that\nallowed path traversal attacks by accepting arbitrary paths without\nvalidation.\n\nChanges:\n- Added path component validation to reject paths containing '..'\n- Changed FilesystemProtocol::new() to return Result for error handling\n\n[…]\n with 4 cases\n- All existing tests updated and passing (31/31 unit tests)\n- Validates rejection of '../' prefix and mid-path '../' components\n- Confirms acceptance of valid absolute and relative paths",
          "is_bot": false,
          "headline": "security: Add path traversal validation to filesystem sync",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T20:17:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2e22c68975f59b5b51f5e01aeb7140fab13eb625",
          "body": "- Line 180: Replace double unwrap on file path operations with proper error handling\n- Line 275: Replace unwrap on S3 key split with error propagation\n- Line 316: Replace unwrap on snapshot prefix parsing with error handling\n- Line 473: Replace unwrap on S3 key split in get_remote_files with error handling\n\nAll unwrap calls in non-test code now return descriptive errors using anyhow::anyhow!",
          "is_bot": false,
          "headline": "fix: Replace unwrap calls with proper error handling in S3 protocol",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T20:16:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "414b394500a69bec62cc40d941561e24132691c6",
          "body": null,
          "is_bot": false,
          "headline": "security: Add expression depth limit to prevent DoS",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T20:16:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "045c4739d5792f8d3f88c7ba21680bd32957af05",
          "body": null,
          "is_bot": false,
          "headline": "fix: Add bounds check to PartiQL JSON parser",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T20:15:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "653d50baf9c7b59cadef15f8ab6f76ca01611399",
          "body": null,
          "is_bot": false,
          "headline": "fix: Add size limits to C-FFI to prevent unbounded allocation",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T20:02:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "317327f1469a6444c679dd6025b77fb9769e0a8b",
          "body": null,
          "is_bot": false,
          "headline": "security: Use constant-time comparison for API key validation",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T19:59:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25ad799c59605efee61e6d1dd6e921784e8735e4",
          "body": "Implement DynamoDB-compatible batch size limits (max 100 items) across\nall batch and transaction operations to prevent memory exhaustion attacks.\n\nChanges:\n- Add MAX_BATCH_SIZE constant (100 items) matching DynamoDB limits\n- Server layer (kstone-server):\n  - Validate batch_get requests (max 100 keys\n[…]\ntests:\n  - test_batch_get_exceeds_limit\n  - test_batch_write_exceeds_limit\n  - test_transact_get_exceeds_limit\n  - test_transact_write_exceeds_limit\n\nAll tests pass. No breaking changes to public API.",
          "is_bot": false,
          "headline": "feat: Add batch size limits to prevent DoS attacks",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T19:40:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0448df2e9d224b35210aa822716694103341b213",
          "body": "…client\n\nReplace all .expect() calls that could panic on malformed server responses\nwith proper error handling using the ? operator and appropriate ClientError\nvariants.\n\nChanges:\n- query.rs: Convert proto_item_to_ks errors to ClientError\n- update.rs: Handle missing item response with InternalError\n\n[…]\nems\n\nAll execute methods now use generic type parameters to support both\nplain Channel and InterceptedService<Channel, AuthInterceptor> types.\n\nAll tests pass. No panics on malformed server responses.",
          "is_bot": false,
          "headline": "fix: Replace .expect() calls with proper error propagation in kstone-…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T19:39:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e701f0e35cea53033e6b4d615de2da0bdbe8054f",
          "body": "Remove eprintln! debug statements from production code in kstone-sync\nand replace with proper structured tracing:\n\n- sync_engine.rs: Convert discovered changes logging to tracing::debug!\n  with structured fields (total_changes, pk, diff_type)\n- protocol/filesystem.rs: Convert database record logging\n[…]\node changes\n- Structured logging enables better filtering and analysis\n- No performance impact when tracing is disabled\n- Follows Rust logging best practices\n\nAll tests passing. No functional changes.",
          "is_bot": false,
          "headline": "refactor: Replace debug print statements with tracing in sync engine",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T19:35:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6174c9a312ed6077856723386e9a6315b3decc08",
          "body": "- Fixed test_vector_clock_resolution: Set up clocks so local definitively\n  \"happens after\" remote (local has remote=4 while remote has remote=3)\n- Fixed test_retry_backoff: Reduced initial_backoff_ms from 100 to 50\n  so that after first failure (backoff = 50 * 2^1 = 100ms), the 150ms\n  sleep is sufficient",
          "is_bot": false,
          "headline": "fix: Correct sync test assertions for vector clock and retry backoff",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T19:18:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51b494bfbb21fad27320284e053fbce88c8e4c67",
          "body": "Add 25 unit tests covering all major shell functionality:\n\n- Autocomplete tests (5 tests):\n  * Meta-command completion (.help, .exit, .format, etc.)\n  * PartiQL keyword completion (SELECT, FROM, WHERE, etc.)\n  * Full completer integration with rustyline context\n  * Multiple match handling (INSERT, I\n[…]\nts use in-memory database to avoid disk I/O.\nTests focus on unit testing internal logic without testing\nrustyline functionality directly.\n\nTest results: 31/31 passing (25 new + 6 existing table tests)",
          "is_bot": false,
          "headline": "test: Add comprehensive unit tests for interactive shell (kstone-cli)",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T18:51:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4403c21cc53b0eabb707690e66d79ceb3f329786",
          "body": "Add thorough testing and documentation for the TLS/mTLS functionality\nthat was implemented in the gRPC server.\n\nChanges:\n\n1. TLS Configuration Tests (kstone-server/tests/tls_config_test.rs):\n   - 10 comprehensive unit tests validating TLS configuration logic\n   - Tests for missing certificates, inva\n[…]\nty + 10 TLS)\n- TLS configuration properly validates certificate requirements\n- Server maintains backward compatibility (works without TLS)\n\nNote: Core TLS implementation was included in commit 499b512",
          "is_bot": false,
          "headline": "test: Add comprehensive TLS/mTLS tests and setup documentation",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T18:48:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "499b5120c71076e1db0f0e7900863a75d8f01107",
          "body": "This commit fixes critical startup panic issues that could crash the\nserver during initialization, improving reliability and user experience.\n\nChanges:\n\n1. Signal Handler Registration (kstone-server/src/bin/kstone-server.rs):\n   - Replaced expect() calls with proper error handling in shutdown_signal\n[…]\nility - no API changes\n\nTesting:\n- All existing tests pass (47 tests in kstone-server)\n- Server builds successfully with new error handling\n- Signal handlers tested on both Unix and non-Unix platforms",
          "is_bot": false,
          "headline": "fix: Eliminate startup panics in server initialization",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T18:46:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "565baa973f83541ad18aa19ca4a63d82c49a9199",
          "body": "Fixed several API discrepancies in the README:\n\n1. Removed non-existent `put_if_not_exists()` method\n   - Replaced with correct `put_conditional()` API\n\n2. Fixed incorrect `update()` method signature\n   - Changed from `db.update(pk, expression, condition)`\n   - To correct builder pattern: `Update::n\n[…]\n`ExpressionContext` from kstone_core\n\n4. Fixed Rust client example imports\n   - Added missing `HashMap` and `Value` imports\n\nAll examples now compile correctly and match the actual API implementation.",
          "is_bot": false,
          "headline": "docs: Fix outdated API examples in README.md",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T18:45:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "146b1398d287bfcf9db37c31b8639a494a9440cb",
          "body": "…ation\n\nAdded 25 unit tests to kstone-server/src/service.rs covering:\n\n**Basic CRUD Operations (6 tests):**\n- test_put_and_get_basic - Verify basic put/get roundtrip\n- test_put_and_get_with_sort_key - Test composite key operations\n- test_get_not_found - Verify proper handling of missing items\n- test\n[…]\nem construction\n- Uses tempfile for temporary test databases\n- Unlimited RateLimiter (0, 0) for test environment\n- Tests are fast and independent\n\nAll tests pass successfully (47 total library tests).",
          "is_bot": false,
          "headline": "test: Add comprehensive unit tests for KeystoneService gRPC implement…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T18:45:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f8b915fa0711b732dd5d3fe411d9cfecd9e78975",
          "body": "- Add add_operation() method to TransactWriteRequest for direct operation addition\n- Update kstone-server transact_write to use add_operation() builder method\n- Add wildcard pattern for non-exhaustive ExecuteStatementResponse in server",
          "is_bot": false,
          "headline": "fix: Fix remaining build issues from API stability changes",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T18:26:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7084d82a76ce4f507520a0421d0c0a1fdc494ce",
          "body": "- Changed workspace tokio from features=[\"full\"] to specific features needed:\n  [\"rt-multi-thread\", \"macros\", \"sync\", \"time\", \"io-util\", \"fs\"]\n- Changed kstone-sync default features from [\"dynamodb\", \"s3-sync\", \"compression\"]\n  to [\"compression\"] - AWS dependencies now opt-in via features\n- Updated \n[…]\nes compile times and binary size by avoiding unnecessary\nfeature compilation. AWS SDK dependencies (aws-config, aws-sdk-dynamodb, aws-sdk-s3)\nare now only compiled when explicitly needed via features.",
          "is_bot": false,
          "headline": "chore: Reduce dependency bloat with targeted features",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T18:18:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "026a370d5053108b00c4cd85ff280d40917eb709",
          "body": "API stability improvements:\n- Add #[non_exhaustive] to ExecuteStatementResponse and ClientError enums\n  to allow adding variants without breaking changes\n- Add #[derive(Debug, Clone)] to Query, Scan, Update, and ExecuteStatementRequest\n  builder types for better ergonomics\n- Make request builder fie\n[…]\nmit includes the core API changes. Follow-up commits will fix\ncompilation errors in kstone-server and kstone-cli that need to be updated\nto use the new builder pattern and handle non-exhaustive enums.",
          "is_bot": false,
          "headline": "fix: Improve API stability with non_exhaustive and private fields",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T18:17:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "35bf1e13e2860b26634d3a28138d777b24103b48",
          "body": null,
          "is_bot": false,
          "headline": "fix: Replace unwraps with proper error handling in C-FFI",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T18:14:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50032b12234f6f08f623bfcf92799ebd265e318d",
          "body": null,
          "is_bot": false,
          "headline": "docs: Fix outdated API examples and add error module documentation",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T18:07:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f62c6a5fc801846386ed3055cc53fe0d6d79ce5a",
          "body": "- Add wildcard patterns to Value enum matches in kstone-cli (main.rs, table.rs)\n  to handle #[non_exhaustive] attribute added to Value enum\n- Add wildcard pattern to Value match in kstone-client/convert.rs\n- Update KeystoneService::new() calls in tests to include rate_limiter parameter\n  (observability_test.rs, integration_test.rs)\n- These changes fix build failures caused by the API stability improvements\n  added in the previous commit",
          "is_bot": false,
          "headline": "fix: Fix cascading build issues from API stability changes",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T17:46:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5a576900695f625a241f7ef6feb9afc49998ec1",
          "body": "Security fixes:\n- Fix AES-GCM nonce reuse vulnerability (block.rs): Generate random 12-byte\n  nonce per encryption using getrandom, prepend to ciphertext for extraction\n  during decryption. This prevents potential plaintext recovery attacks.\n\n- Fix JSON quote injection in PartiQL parser (parser.rs):\n[…]\n generation.\n\n- Add protoc-bin-vendored for build portability.\n\n- Add notebook.rs stub module for CLI build compatibility.\n\n- Fix test compilation errors in kstone-sync (HashMap import, Arc wrapping).",
          "is_bot": false,
          "headline": "fix: Address critical security and quality issues for release readiness",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T16:51:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b63b547eba92127d39749993e67b078262300103",
          "body": "- Fix unused `last_error` warning in retry.rs by restructuring the code\n  to avoid intermediate Option value that was never read\n- Fix unused `schema` field warning in memory_lsm.rs with #[allow(dead_code)]\n  annotation (reserved for future feature parity)\n- Update README.md with proper MIT/Apache-2\n[…]\n the codebase for public release by:\n1. Eliminating compiler warnings\n2. Improving documentation clarity\n3. Providing accurate database statistics\n4. Setting clear expectations for current limitations",
          "is_bot": false,
          "headline": "fix: Address release readiness issues",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T16:06:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b7e0ee5fe0fef7b766873c9592cbc2357864af65",
          "body": "…-6vkOO",
          "is_bot": false,
          "headline": "Merge pull request #6 from keystone-db/claude/update-keystone-db-book…",
          "author_name": "Parker (Gabel) Lackey",
          "author_login": "parkerdgabel",
          "committed_at": "2025-12-27T04:35:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5536659a6edebf9bbba6c39d3b32432580b5c3d8",
          "body": "Major updates to bring the book up to date with completed features:\n\n- Update Chapter 41 (Roadmap): Mark Phase 8 Cloud Sync as COMPLETE,\n  mark Language Bindings as COMPLETE, update future roadmap to\n  phases 9-13\n\n- Add Chapter 42 (Cloud Synchronization): Comprehensive documentation\n  for kstone-sy\n[…]\n (napi-rs), and C-FFI bindings with API references,\n  usage examples, and compatibility matrix\n\n- Update book README and SUMMARY with new chapters, corrected\n  statistics (43 chapters, ~140,000 words)",
          "is_bot": false,
          "headline": "docs: Update KeystoneDB book with Cloud Sync and Language Bindings",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T04:34:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "194b9d7d3b0b4729b4cf8baa65c2ad50abc45a28",
          "body": "…cwzT",
          "is_bot": false,
          "headline": "Merge pull request #5 from keystone-db/claude/prepare-release-cycle-T…",
          "author_name": "Parker (Gabel) Lackey",
          "author_login": "parkerdgabel",
          "committed_at": "2025-12-27T03:16:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85326b7e04395368f4e768ca47a00b97bbb00d34",
          "body": "- Add CHANGELOG.md following Keep a Changelog format\n- Update release workflow to publish Python (PyPI) and Node.js (npm) bindings\n- Create binding release script (scripts/release-bindings.sh)\n- Add CI workflow with tests for Rust, Python, and Node.js bindings\n- Update release.sh to sync version num\n[…]\nt crates publication to crates.io\n- Python wheel builds and PyPI publication\n- Node.js native module builds and npm publication\n- Docker image builds for CLI and server\n- Post-release verification job",
          "is_bot": false,
          "headline": "feat: Add comprehensive release cycle for core project and bindings",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T03:12:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "63bb863e294bf3506222957467ee15de285810bd",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #4 from keystone-db/claude/brainstorm-features-sEKyn",
          "author_name": "Parker (Gabel) Lackey",
          "author_login": "parkerdgabel",
          "committed_at": "2025-12-27T02:56:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8faa1c3b6b3abca15c0e82362d1e389f88696efc",
          "body": "Implements complete language bindings to make KeystoneDB accessible from\nmultiple programming languages:\n\nC-FFI (c-ffi/):\n- Expand from 4 stub functions to complete API coverage (~1700 lines)\n- Add opaque handles for Database, Item, Query, Scan, BatchGet, BatchWrite\n- Implement all CRUD operations w\n[…]\npport\n- TypeScript definitions (.d.ts)\n- Mocha test suite\n\nDocumentation:\n- README for bindings overview\n- Detailed README for each binding with examples\n- API compatibility table across all languages",
          "is_bot": false,
          "headline": "feat: Add comprehensive language bindings for Python and Node.js",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T02:33:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "99c9161cf860f41faede55a618c08d6cdc3d2000",
          "body": "…ents-rCbcr",
          "is_bot": false,
          "headline": "Merge pull request #3 from keystone-db/claude/website-review-improvem…",
          "author_name": "Parker (Gabel) Lackey",
          "author_login": "parkerdgabel",
          "committed_at": "2025-12-27T01:49:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a38c04c120a21df9cd1943970641a18bdf1ae7b",
          "body": "- Fix GitHub URLs (keystonedb -> keystone-db)\n- Fix hero code examples to match actual API\n- Replace \"Zero dependencies\" with \"Single file storage\"\n- Update quick install command to cargo add kstone-api\n- Add Cloud Sync to homepage features\n- Update comparison table with Cloud Sync row\n- Create missing pages: /changelog, /license, /privacy\n- Update roadmap to reflect Phase 0-8 complete\n- Add all 41 chapters + 5 appendices to docs page\n- Enhance SEO meta tags (canonical, keywords, robots)",
          "is_bot": false,
          "headline": "fix: Comprehensive website improvements",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T01:48:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92963644ee51c15638d5817a603f6cb93ee42178",
          "body": "…n-MRCrG",
          "is_bot": false,
          "headline": "Merge pull request #2 from keystone-db/claude/add-claude-documentatio…",
          "author_name": "Parker (Gabel) Lackey",
          "author_login": "parkerdgabel",
          "committed_at": "2025-12-27T01:20:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f93254ce8113b83221ec0e15b374334ea5f7f17",
          "body": "- Create docs/API.md with complete API reference\n  - All database operations (put, get, delete, update)\n  - Query and Scan APIs with all options\n  - Batch and transaction operations\n  - Index configuration (LSI/GSI)\n  - Streams (CDC) configuration\n  - Configuration options\n  - Error types and handli\n[…]\ndd cloud sync example\n  - Expand testing section with all test types\n  - Add code coverage and fuzz testing commands\n  - Add link to API reference and book\n  - Add language bindings documentation link",
          "is_bot": false,
          "headline": "docs: Create comprehensive documentation updates",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T01:08:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7dba8bf6debcc0db9145dbc72b482fb6c3fbc699",
          "body": "- Add snapshot testing with insta (15 tests)\n  - Error message snapshots\n  - Database stats snapshots\n  - Item structure snapshots\n  - Query/scan response snapshots\n  - Key encoding and value type snapshots\n  - Batch operation snapshots\n\n- Add code coverage configuration\n  - .tarpaulin.toml with mul\n[…]\narser, key_encoding,\n    value_serialization, partiql\n  - scripts/fuzz.sh for running fuzz tests\n  - Separate fuzz workspace to avoid nightly-only issues\n\n- Update CLAUDE.md with testing documentation",
          "is_bot": false,
          "headline": "test: Add comprehensive test infrastructure improvements",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T01:03:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cddbeae2bf4057462fad16c860b7c1d869bea5f6",
          "body": "- Add property-based tests using proptest (18 tests)\n  - Put/get roundtrip for strings and numbers\n  - Delete/overwrite invariants\n  - Persistence and recovery verification\n  - Sort key independence\n  - Bulk operations consistency\n  - Edge cases (binary keys, unicode, large values)\n\n- Add chaos/faul\n[…]\nility check\n  - Flush under concurrent load\n\n- Create c-ffi crate stub for workspace compatibility\n- Update CLAUDE.md with comprehensive test documentation\n- Add proptest and rand to test dependencies",
          "is_bot": false,
          "headline": "test: Add comprehensive test suite improvements",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T00:46:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2247ce9d09b6c926f64b85be25d5b23f10a1b40f",
          "body": "- Update project overview to reflect all phases (0-8) complete\n- Add workspace structure with 9 crates (added kstone-sync, c-ffi)\n- Document example applications (url-shortener, cache-server, todo-api, blog-engine)\n- Add advanced modules section (config, compaction, validation, retry, partiql)\n- Mar\n[…]\ncompression, schema validation, retry policies\n- Document server rate limiting functionality\n- Update testing section with new test suites and benchmarks\n- Add S3 and filesystem sync protocol examples",
          "is_bot": false,
          "headline": "docs: Comprehensive update to CLAUDE.md for current codebase state",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2025-12-27T00:18:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a49c2cfc6645681ae4c67b2363ec9dc8c45ad4d0",
          "body": "Comprehensive documentation update covering:\n\n1. Language Bindings:\n   - Added language bindings section to README.md (Go, Python, JS)\n   - Added BINDINGS.md (876 lines) - comprehensive guide for all bindings\n   - Updated examples/README.md with binding examples section\n   - Referenced go-embedded a\n[…]\n/README.md: +54 lines (language binding examples)\n- book/part-05/chapter-23.md: +123 lines (performance tuning updates)\n\nTotal: ~1,159 lines added covering bindings, optimizations, and best practices.",
          "is_bot": false,
          "headline": "docs: Update documentation with Go/Python bindings and optimizations",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-06T18:29:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a677c92fd71a470fbdcd37f831f817575d5feae5",
          "body": null,
          "is_bot": false,
          "headline": "added basics",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-06T17:01:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80093763599a89ffce4892d285a0bdb8ed6e7f7a",
          "body": "Implements two major data features to improve storage efficiency and data integrity:\n\n1. Zstd Compression:\n   - Add configurable compression for SST files (levels 1-22, default 3)\n   - Integrate compression into LSM flush and compaction operations\n   - Typical 2-5x storage reduction for compressible\n[…]\n()\n\nBoth features are opt-in and do not affect existing databases without configuration.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Add Zstd compression and schema validation",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-06T02:09:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bd8ea2f3f42ea8e73467731910470a1bee49dea2",
          "body": "- Add protobuf generated files to .gitignore (*.pb.go, *_pb2.py, *_grpc.pb.go)\n- Add JavaScript artifacts to .gitignore (node_modules/, dist/, build/)\n- Add Python artifacts to .gitignore (__pycache__/, *.pyc, *.pyo, *.egg-info/)\n- Add comprehensive logging and coverage file patterns\n\nGenerated file\n[…]\ntrol.\nThis prevents the repository from being bloated with thousands of generated files.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: Add generated files to .gitignore",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-05T18:39:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e00ac1cea5e9450f55b040a1ae0f62f6103df541",
          "body": "- Store database path in LsmEngine outside of RwLock for easy access\n- Update LsmEngine constructors (create, open) to store path field\n- Fix path() method to return actual path instead of None\n- Expose scan_with_keys method through Database API\n- Update sync code to use proper scan_with_keys instea\n[…]\n functionality\n\nThis enables full S3 sync functionality with proper merkle tree diffing.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: Address S3 sync limitations - expose path and scan_with_keys",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-05T16:50:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "502c42515823acba26e1b3da9abd994c26681e7f",
          "body": "- Add S3Protocol implementation with snapshot and incremental modes\n- Support for AWS S3, MinIO, Backblaze B2 and other S3-compatible stores\n- Multipart upload for large files (>5MB)\n- ETag-based change detection\n- Helper methods upload_to_s3() and restore_from_s3() in SyncEngine\n- Example applicati\n[…]\nwith_keys method (needs API enhancement)\n- Fixed type annotations in filesystem protocol\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Add S3-compatible sync support for KeystoneDB",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-05T16:21:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4b38d638d2e68e27139cf3a6ae97e30469ab009d",
          "body": "- Fixed diff detection to use MerkleTree.diff() properly\n- Added local database reference to FilesystemProtocol\n- Fixed key-based database operations in transfer_changes\n- Added filtering to exclude sync metadata from scan results\n- Added sync() method to SyncEngine for endpoint-specific sync\n- Adde\n[…]\nodified items for conflict resolution\n- Transfers data bidirectionally between databases\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix bidirectional sync data transfer",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-05T15:53:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3ad4efc16fc0c0a75ebabf1a404d16595959cbb2",
          "body": "- Implement vector clocks for causality tracking in distributed sync\n- Add Merkle tree for efficient difference detection between databases\n- Build change tracker using KeystoneDB streams for CDC\n- Create comprehensive conflict detection and resolution system\n- Add sync metadata storage tables in Ke\n[…]\n)\n- Enable both one-time and continuous sync modes\n- Prepare infrastructure for future DynamoDB integration\n\nThis provides the foundation for KeystoneDB's cloud sync capabilities as a premium feature.",
          "is_bot": false,
          "headline": "feat: Add cloud sync functionality with kstone-sync crate",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-05T14:20:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f17de1d23b38f59653a2684cb12e9a87bd1e6e90",
          "body": "Add protoc installation step to the crates.io publish job.\nWithout this, kstone-proto fails to build during cargo publish.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix crates.io publish: Install protobuf compiler",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-04T16:26:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6a78baaa1369257ef6259cea2e128d71b49d4d46",
          "body": "All checksums now populated from GitHub release artifacts:\n- macOS binaries (Intel and Apple Silicon)\n- Linux x86_64 binaries\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update Homebrew formulas with v0.1.0 SHA256 checksums",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-04T16:25:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "41148aad62d865f391ac60504b24840730a94a23",
          "body": "Remove Cargo.lock from .gitignore and commit it.\nFor binary crates, Cargo.lock should be tracked to ensure\nreproducible builds. This fixes Docker build failure.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Cargo.lock for reproducible builds",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-04T16:14:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "95b3144f5100281eb0150ad8be53e5935b648d4f",
          "body": "Comment out musl and aarch64 Linux builds that require cross.\nThe cross Docker containers don't have protoc available.\nWill re-enable once we solve protoc availability in cross containers.\n\nFor v0.1.0 release, shipping:\n- Linux x86_64 (GNU libc)\n- macOS x86_64 (Intel)\n- macOS aarch64 (Apple Silicon)\n- Windows x86_64\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Temporarily disable cross-compiled Linux builds",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-04T16:09:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dfc799de6ad3404c4815c6e1b2946d55a9e76930",
          "body": "Add protobuf compiler installation step for all platforms before building.\nThis fixes the build failure where kstone-server (which depends on kstone-proto)\ncould not find protoc.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix release workflow: Install protobuf compiler",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-04T15:58:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8b8fe54d53431f9f368a3a0aec08029385ea03e6",
          "body": "- Fix test_database_in_memory_query_works: Update test to verify that query works on in-memory databases instead of expecting it to fail (query is implemented)\n- Fix test_compaction_statistics: Use same PK for all keys to ensure they route to the same stripe, guaranteeing compaction triggers\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix failing tests before v0.1.0 release",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-04T15:42:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cba47b6aab061d8213463d168adc66607e8d4962",
          "body": "- Added package metadata to all publishable crates\n- Added descriptions, repository, homepage, keywords, categories\n- Updated internal dependencies with version constraints\n- Created publish-crates.sh script for manual publishing\n- Added automated crates.io publishing to GitHub Actions workflow\n- Publishes in dependency order: core -> proto -> api -> client",
          "is_bot": false,
          "headline": "Add crates.io publishing support",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-04T14:58:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5acd4b1eb7c4666b500de4448a249b33fc03c66",
          "body": "- Changed all Docker image references from keystonedb/* to parkerdgabel/*\n- Updated GitHub Actions workflow\n- Updated README.md installation instructions\n- Updated docker-compose.yml\n- Updated RELEASE.md documentation",
          "is_bot": false,
          "headline": "Update Docker Hub namespace to parkerdgabel",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-04T14:50:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9482cf1cfe10f9f04684625990c6b6843b56b3a2",
          "body": "- Complete DynamoDB-compatible API (Query, Scan, Batch, Transactions)\n- LSM storage engine with 256-stripe architecture\n- Indexes (LSI, GSI), TTL, and Streams support\n- PartiQL query language\n- Interactive CLI with REPL\n- gRPC server for remote access\n- Docker containers (CLI and server)\n- Homebrew formulas for macOS/Linux\n- Cross-platform release automation via GitHub Actions\n- Comprehensive documentation (124K+ words)",
          "is_bot": false,
          "headline": "Initial commit: KeystoneDB v0.1.0 with release infrastructure",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-04T02:47:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ff49dee9995982f66182860513b6ccefc8d3945",
          "body": "Implemented background compaction for the embedded LSM storage engine\nto merge SST files, reclaim space, and maintain read performance.\n\n## Core Features\n\n**Compaction Strategy:**\n- CompactionConfig with enable/disable, SST threshold (default: 10), check interval\n- Automatic compaction triggered on \n[…]\naction (THIS COMMIT)\n\nKeystoneDB now has a production-ready embedded LSM storage engine!\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 1.7: LSM Compaction - Complete",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-03T03:46:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d3ff6db293efc8fe210531098cf523a60bd920b9",
          "body": "Implemented a fully-featured interactive shell for KeystoneDB with:\n\n## Core Features\n- REPL loop with rustyline for professional line editing\n- Command history persistence to ~/.keystone_history\n- Multi-line query support (queries ending with ';')\n- Tab autocomplete for meta-commands and PartiQL ke\n[…]\ny\n- Support for all KeystoneValue types including VecF32\n- All tests passing (343 total)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 7: Interactive CLI (REPL) - Complete",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-03T01:03:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9286711cea5672434130fc305bf0bb0e219e46d7",
          "body": "Implemented token bucket rate limiting using governor crate:\n\nFeatures:\n- Per-connection rate limiting (--max-rps-per-connection)\n- Global rate limiting (--max-rps-global)\n- Token bucket algorithm for smooth rate limiting\n- RATE_LIMITED_REQUESTS metric by limit type\n- Automatic backpressure via reso\n[…]\nment on rate limit events\n\nServer now has production-grade rate limiting infrastructure.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 7 Day 3 Task 3: Add Rate Limiting & Backpressure",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-03T00:42:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8df7a809910f0865ecbecd1121d3c96440a3730e",
          "body": "Implemented signal handling and graceful shutdown:\n\nFeatures:\n- SIGTERM and SIGINT signal handling\n- Ctrl+C graceful shutdown\n- serve_with_shutdown for clean connection draining\n- Configurable shutdown timeout (--shutdown-timeout)\n- Shutdown logging showing drain progress\n- Database automatically cl\n[…]\npport (Unix signals + Ctrl+C)\n\nServer now handles shutdown gracefully without data loss.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 7 Day 3 Task 2: Add Graceful Shutdown",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-03T00:38:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2e243c2f9f19a172607051f2124af8c8ce28087e",
          "body": "Implemented connection tracking and management infrastructure:\n\nFeatures:\n- ConnectionManager with configurable limits (--max-connections)\n- Connection timeout configuration (--connection-timeout)\n- RAII-based ConnectionGuard for automatic cleanup\n- ACTIVE_CONNECTIONS metric tracking\n- TCP keepalive\n[…]\nmanagement (3 tests passing)\n\nServer now has production-grade connection infrastructure.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 7 Day 3 Task 1: Add Connection Management & Limits",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-03T00:37:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "00ee11c19e07dfac821d9e048d18c52085e31f48",
          "body": "Created comprehensive test suite for observability features:\n- Test metrics accessibility and structure\n- Test health/ready endpoints\n- Test RPC operations with metrics collection\n- Test trace ID generation in spans\n- Test validation error handling\n\n7 tests added, all passing.\nTotal project tests: 313 (6 integration + 7 observability)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 7 Day 2 Task 6: Add Observability Integration Tests",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T23:15:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bd966fdd7b77dafde294cd7a66204d3a5397492b",
          "body": "Created comprehensive MONITORING.md covering:\n- Structured logging with RUST_LOG configuration\n- Prometheus metrics with example queries\n- Health check endpoints usage\n- Request tracing with trace IDs\n- Prometheus & Grafana setup guides\n- Kubernetes integration examples\n- Debugging workflows\n- Best practices\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 7 Day 2 Task 5: Add Monitoring Documentation",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T23:09:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "046d930edf7a22988fd9e8aa45ad219f880965b4",
          "body": "Implemented comprehensive observability infrastructure:\n\nTasks 2-4 Complete:\n- Prometheus metrics with RPC counters, histograms, and gauges\n- HTTP metrics endpoint on port 9090 at /metrics\n- Health check endpoints: /health and /ready\n- Request tracing with UUIDs for all RPC methods\n\nChanges:\n- Added\n[…]\nns for request correlation\n- HTTP server for metrics and health endpoints alongside gRPC\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 7 Day 2: Observability & Monitoring Implementation",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T23:08:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "23d7ce85350c450f33da8ff93083c3d28778264d",
          "body": "Implemented comprehensive tracing infrastructure:\n\nServer Binary (kstone-server/src/bin/kstone-server.rs):\n✅ Enhanced tracing subscriber with env filter\n✅ Support for RUST_LOG environment variable\n✅ Thread IDs, file, and line numbers in logs\n✅ Configurable log levels (info default)\n\nService Instrume\n[…]\no run --bin kstone-server -- -d /path/to/db\n```\n\nNext: Prometheus metrics implementation\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 7 Day 2 Task 1: Add Structured Logging",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T22:59:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "263caf9fb0f276114102edd4a1166d8e719c3d13",
          "body": "Integration Test Suite (25 tests, all passing):\n\nCore Operations:\n✅ Basic CRUD (put, get, delete)\n✅ Sort key operations\n✅ Query and Scan\n✅ Batch get and write\n\nPhase 6.5 Operations:\n✅ TransactGet - transactional reads\n✅ TransactWrite - atomic writes\n✅ Update - with expressions\n✅ ExecuteStatement - P\n[…]\nrking\n- 100% RPC method coverage\n- Concurrent client testing\n- Failure scenario coverage\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 7 Day 1 Complete: Comprehensive Integration Testing",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T21:49:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a9415cb53ca780164834906eacad2ab363cf06f2",
          "body": "Server Startup Fix:\n- Fixed integration test server startup using dynamic port allocation\n- Server now properly binds to available ports\n- Each test gets isolated server instance\n\nNew Integration Tests (17 total, all passing):\n✅ Basic operations (put, get, delete, sort keys)\n✅ Query and Scan operati\n[…]\nerations validated\n- Positive and negative test cases\n- Expression evaluation validation\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 7.1: Add comprehensive integration tests",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T21:48:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9da6edc29f4010738921c5611c47de4cec452e86",
          "body": "- Added RemoteTransactGetRequest and RemoteTransactWriteRequest builders\n- Added RemoteUpdate builder for update expressions\n- Added RemoteExecuteStatementResponse for PartiQL queries\n- Added client methods: transact_get, transact_write, update, execute_statement\n- Updated PutRequest and DeleteReque\n[…]\nto include expression_values field\n- Fixed all doctests\n- All 10 client doctests passing\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 6.5: Add client library support for new operations",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T21:34:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d6efc03f38e2725353fc04bed87b457c994b8f13",
          "body": "- Implemented TransactGet RPC method for transactional multi-item retrieval\n- Implemented TransactWrite RPC method with Put/Update/Delete/ConditionCheck operations\n- Implemented Update RPC method with update expressions\n- Implemented ExecuteStatement RPC method for PartiQL queries\n- Added expression\n[…]\n protobuf and KeystoneDB types\n- All 89 tests passing (75 kstone-api + 14 kstone-server)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 6.5: Complete server implementation with all RPC methods",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T21:30:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bf1e60373c87e8a8e586af3ff31548575b65e3b1",
          "body": "Updated CLAUDE.md with comprehensive client library documentation:\n\n**Documentation updates:**\n- Added kstone-client to workspace structure (now 7 crates)\n- Documented Phase 6.4 Client Library implementation\n- Added usage examples for all client operations:\n  - Connection management\n  - CRUD operati\n[…]\nd remote access modes,\nenabling distributed deployments and client-server architectures.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 6.4: Complete client library documentation",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T21:14:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "89d4449eebde0e154d6adcd790ee4b421e66cdf8",
          "body": "Added comprehensive integration tests for the client library:\n\n**Test coverage:**\n- test_put_get_delete: Basic CRUD operations\n- test_put_get_with_sort_key: Composite key operations\n- test_query: Query with sort key conditions\n- test_scan: Scan operations with limits\n- test_batch_get: Batch retrieva\n[…]\nssfully. Integration tests provide\nend-to-end validation of client-server communication.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 6.4: Add integration tests for client",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T21:13:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "659247fb06bb4bf25421b9fff386d4ba1f4e5285",
          "body": "Completed the client library with Scan and Batch operations:\n\n**Scan operations:**\n- RemoteScan builder with fluent API\n- Streaming support (handles server-side streaming)\n- Pagination support (limit, start_after)\n- Parallel scan support (segment, total_segments)\n- Index support\n\n**Batch operations:\n[…]\nemoteBatchWriteResponse\n\nAll operations follow the same builder pattern for consistency.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 6.4: Add Scan and Batch operations to client",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T21:12:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eaef6671248af6440293a945595d36ab1b60d346",
          "body": "Implemented the initial KeystoneDB gRPC client with core functionality:\n\n**kstone-client crate:**\n- Client connection management (Client::connect)\n- Basic CRUD operations:\n  - put/put_with_sk - Store items remotely\n  - get/get_with_sk - Retrieve items from server\n  - delete/delete_with_sk - Remove i\n[…]\nditions working\n- Scan, Batch operations still pending\n- Integration tests still pending\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 6.4: Add gRPC client library (part 1)",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T21:09:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ae9607367a8e1e9b7f92095e502823e63c681326",
          "body": "Implemented network layer and gRPC server for remote database access:\n\n**kstone-proto crate:**\n- Protocol Buffers (proto3) service definition\n- 11 RPC methods: Put, Get, Delete, Query, Scan, BatchGet, BatchWrite,\n  TransactGet, TransactWrite, Update, ExecuteStatement\n- Bidirectional type conversions\n[…]\nn kstone-server\n\nUpdated CLAUDE.md with Phase 6 documentation and server usage examples.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 6: Add gRPC server implementation",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T20:56:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2a0f64cfb4ee982bac9e9ad24194e9e4b3c40c6d",
          "body": "Comprehensive documentation reflecting KeystoneDB's current state:\n\n1. README.md (272 lines):\n   - Updated project status from Phase 0 to Phase 5 Complete\n   - Added all implemented features:\n     * Core operations (Put/Get/Delete/Query/Scan/Batch/Transactions)\n     * Advanced features (LSI/GSI, TTL\n[…]\nnes of documentation\n\nAll documentation reviewed and accurate to current codebase state.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: Complete Phase 5 Day 5 documentation suite",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T19:53:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "79b1d57cc9130ef358f3dbca1a8d999ec514472a",
          "body": "CLI Enhancements:\n\n1. --limit flag:\n   - Add optional -l/--limit flag to Query command\n   - Automatically appends LIMIT clause to SQL query\n   - Usage: kstone query db.keystone \"SELECT * FROM users\" --limit 10\n\n2. --output format option:\n   - Add -o/--output flag with 4 formats: table, json, jsonl, \n[…]\nd\"\n   - To \"use LIMIT/OFFSET for pagination\"\n\nAll CLI improvements compile successfully.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Add --limit and --output flags to CLI query command",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T19:12:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "31297983f30d70081f23b3c3aa05573444e55e39",
          "body": "Implement two key PartiQL enhancements:\n\n1. SELECT projection filtering:\n   - Support for SELECT attr1, attr2 syntax to return only specified attributes\n   - apply_projection() helper filters items post-query\n   - Integrated into Query, Scan, and MultiGet operations\n   - Test: test_execute_statement\n[…]\n. Apply OFFSET\n4. Apply LIMIT\n5. Apply projection\n\nAll 265 tests passing (+2 new tests).\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Add SELECT projection and Scan filtering to PartiQL",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T19:09:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "51e6a5f60798c9f9681e2757a5d66227ab2e1cba",
          "body": "Add SQL LIMIT and OFFSET clauses for result pagination in SELECT queries.\n\nChanges:\n- PartiQL AST: Add limit and offset fields to SelectStatement\n- Parser: Extract LIMIT and OFFSET from SQL statements\n- Translator: Apply LIMIT/OFFSET to Query/Scan/MultiGet operations\n  - Fetch limit+offset records w\n[…]\nOM users LIMIT 10\n- SELECT * FROM users OFFSET 5\n- SELECT * FROM users LIMIT 10 OFFSET 5\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement LIMIT/OFFSET support for PartiQL (Phase 5 Day 3)",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T19:01:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "58009dc04189f8905044f3b4f020aa245caa7ea7",
          "body": "Add automatic background compaction to merge SST files and reduce read\namplification. Compaction is triggered when a stripe reaches 10 SST files.\n\nChanges:\n- Add compaction.rs with CompactionManager\n  - Merge algorithm keeps latest version (highest SeqNo) of each key\n  - Filter out tombstones during\n[…]\n_latest_version\n\nAll 257 tests pass (174 core + 70 API + 6 CLI + 6 integration + 1 doc).\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement background compaction (Phase 5 Day 1-2)",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T18:50:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "31d7a221995709b2f9f960284719e94955926654",
          "body": "Add ExecuteStatement API (kstone-api/src/partiql.rs):\n- Translate PartiQL to KeystoneDB operations\n- Support SELECT (Query/Scan), INSERT, UPDATE, DELETE\n- Handle sort key conditions (equal, lt, lte, gt, gte, between)\n- Support index queries (LSI/GSI)\n- 9 comprehensive tests covering all statement ty\n[…]\nHERE pk = 'user#1'\"\n  kstone query mydb.keystone \"DELETE FROM users WHERE pk = 'user#1'\"\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 4.4/4.5: ExecuteStatement API and CLI Query Command",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T18:39:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a394080fe7bff3918e44ee9ab44b1533d1eee1c3",
          "body": "Implement full DML (INSERT, UPDATE, DELETE) parsing and translation:\n\nParser (parser.rs):\n- DELETE: parse DELETE FROM table WHERE conditions\n- INSERT: parse DynamoDB-style INSERT with JSON map syntax\n  - Custom pre-processor for VALUE {'pk': 'x', ...} syntax\n  - Converts single quotes to double quot\n[…]\nPDATE: 5)\n- 8 translator tests (DELETE: 1, INSERT: 1, UPDATE: 4)\n- All 165 tests passing\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 4.2/4.3: Complete PartiQL Parser and DML Translation",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T18:25:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a839701844f4845c65c6f181a7d2d261f43ec5a2",
          "body": "Add SQL-compatible query language support (PartiQL) with DynamoDB-style constraints.\n\n## Changes\n\n### Roadmap Update (CLAUDE.md)\n- Added detailed Phase 4 (PartiQL Compatibility) roadmap\n- Added Phase 5 (In-Memory Database) roadmap\n- Added Phase 6 (Interactive CLI) roadmap\n- Phase 7+ now covers Attac\n[…]\n\n\n## Status\nPhase 4.1 complete. Next: Phase 4.2 (Query Translation) and Phase 4.3 (DML).\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 4.1: PartiQL Parser Foundation",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T17:54:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6a5892ab977823a47de9acd463d610e4dbaee073",
          "body": "This commit implements Streams for change data capture, completing Phase 3.4 and all of Phase 3.\n\n## Changes\n\n### kstone-core/src/stream.rs (NEW FILE)\n- Created StreamRecord struct to capture item-level changes\n- StreamEventType enum: Insert, Modify, Remove\n- StreamViewType enum: KeysOnly, NewImage,\n[…]\nonotonic sequence number\n- read_stream(after_seq) filters to records after that sequence\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Phase 3.4: Streams (Change Data Capture)",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T16:15:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "08d49a863eeb5aa05c2d832baf9f6a00c387b321",
          "body": "This commit implements TTL (Time To Live) with lazy deletion, completing Phase 3.3.\n\n## Changes\n\n### kstone-core/src/index.rs\n- Added ttl_attribute_name field to TableSchema\n- Added with_ttl(attribute_name) builder method\n- Implemented is_expired(item) method that checks:\n  - TTL enabled AND item ha\n[…]\nTTL attribute never expire\n- Supports both Number (seconds) and Timestamp (milliseconds)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Phase 3.3: Time To Live (TTL)",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T16:01:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2992631c7213c3de89fc4d7e213d00218a54ecc0",
          "body": "This commit implements Global Secondary Indexes, completing Phase 3.2.\n\n## Changes\n\n### kstone-core/src/index.rs\n- Added GlobalSecondaryIndex builder methods:\n  - GlobalSecondaryIndex::new(name, partition_key_attribute)\n  - GlobalSecondaryIndex::with_sort_key(name, pk_attr, sk_attr)\n  - .keys_only()\n[…]\ne base table PK for uniqueness\n- Enables querying across different base table partitions\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Phase 3.2: Global Secondary Indexes (GSI)",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T15:53:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e47a276fa7dd0b318e8ac1a23574f8e8b224c51a",
          "body": "Updates CLAUDE.md with comprehensive LSI documentation:\n\nDevelopment Status:\n- Added Phase 3.1 LSI completion summary\n- Listed all LSI features and implementation details\n- Updated test counts: 157 total (105 core + 46 API + 6 integration)\n\nUsage Examples:\n- Creating tables with LSI schemas\n- Projec\n[…]\nex key types\n- Query builder integration\n\nPhase 3.1 (Local Secondary Indexes) COMPLETE ✅\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Documentation: Phase 3.1 LSI completion",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T15:35:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1a6f5521900c1643fff97e6af05840a0e939ae99",
          "body": "Implements full Local Secondary Index (LSI) query functionality:\n\nQuery Builder (kstone-api/src/query.rs):\n- Added .index(name) method to query by LSI instead of base table\n- Fluent API: Query::new(pk).index(\"email-index\").sk_begins_with(prefix)\n\nIterator (kstone-core/src/iterator.rs):\n- Added index\n[…]\n tests passing (105 core + 46 API + 6 integration)\n\nPhase 3.1 (LSI) now FULLY COMPLETE ✅\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 3.1 Complete: LSI query support",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T15:34:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "442d405a791121e2b83104ce533f0049ceee2d23",
          "body": "Implements automatic Local Secondary Index materialization:\n\nLSM Engine:\n- Added schema field to LsmInner\n- create_with_schema() method to create DB with indexes\n- materialize_lsi_entries() creates index records during writes\n- Index records stored alongside base records in same stripe\n\nIndex Materi\n[…]\n.1:\n- Query support for LSI (query by index name)\n- Additional LSI tests\n- Documentation\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 3.1: LSI write path implementation",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T15:21:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aef2d4f251a71d839386e4389cb36d97d3f04444",
          "body": "Adds foundational types and storage for Local Secondary Indexes:\n\nIndex Module (kstone-core/src/index.rs):\n- LocalSecondaryIndex struct with name, sort_key_attribute, projection\n- IndexProjection enum (All, KeysOnly, Include)\n- GlobalSecondaryIndex struct (for Phase 3.2)\n- TableSchema to hold index \n[…]\n querying by index name\n- Database API: accept TableSchema on create\n- Integration tests\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 3.1 (Partial): Index infrastructure for LSI support",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T15:16:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0238bb9e3e704317afbc1f85e777d8409310eb33",
          "body": "Adds ACID transaction support with atomic reads and writes:\n\nCore Engine (kstone-core):\n- TransactWriteOperation enum (Put, Update, Delete, ConditionCheck)\n- transact_get(): atomic multi-item reads with read lock\n- transact_write(): two-phase commit (check conditions → execute writes)\n- TransactionC\n[…]\nACID guarantees and two-phase commit\n\nPhase 2 (Complete Dynamo API) now FULLY COMPLETE ✅\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 2.7: Implement DynamoDB-style Transactions",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T15:12:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "100e1a456fab82bd0add97cdb9aa89131b5df54a",
          "body": "## Phase 2.6: Batch Operations\n- BatchGetRequest/Response for retrieving multiple items\n- BatchWriteRequest/Response for putting/deleting multiple items\n- batch_get() in LSM: get multiple keys in one call\n- batch_write() in LSM: put/delete multiple items in one call\n- Builder API with fluent interfa\n[…]\nbatch builders + 3 batch DB operations)\n- 6 integration tests\n- Total: 137 tests passing\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Phase 2.6 Batch Operations",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T14:37:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "608585563c62bd1e4cb55fddfb156e9f34990b12",
          "body": "## Phase 2.4: Update Operations\n- Update expression AST with SET, REMOVE, ADD, DELETE actions\n- UpdateValue enum supporting paths, placeholders, and arithmetic (path ± value)\n- Update expression parser (text → actions)\n- UpdateExecutor applies actions to items\n- LSM update() method: get → apply → pu\n[…]\n builder + 4 update DB + 4 conditional)\n- 6 integration tests\n- Total: 132 tests passing\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Phase 2.4 Update Operations and Phase 2.5 Conditional Operations",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T14:32:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "44384d2cdb443c98b0e192161dba6991ee8be360",
          "body": "KeystoneDB is a single-file, embedded, DynamoDB-style database written in Rust.\n\nThis commit includes:\n\n## Phase 0: Walking Skeleton (COMPLETE)\n- Basic LSM engine with Put/Get/Delete operations\n- WAL with crash recovery\n- SST files for persistent storage\n- CLI with JSON support\n- 30 passing tests\n\n#\n[…]\nCoverage\n- 94 core tests\n- 16 API tests\n- 6 integration tests\n- Total: 116 tests passing\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Initial commit: KeystoneDB embedded DynamoDB-style database",
          "author_name": "Parker Gabel",
          "author_login": "parkerdgabel",
          "committed_at": "2025-10-02T14:20:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 1,
      "commits_last_year": 96,
      "latest_release_at": "2025-10-04T16:29:18Z",
      "latest_release_tag": "v0.1.0",
      "releases_from_tags": false,
      "days_since_last_push": 206,
      "active_weeks_last_year": 2,
      "days_since_latest_release": 290,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 37,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "kstone-api",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [
            "database",
            "dynamodb",
            "embedded",
            "key-value",
            "nosql",
            "database",
            "database-implementations"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/kstone-api",
          "is_deprecated": false,
          "latest_version": "0.1.0",
          "repository_url": "https://github.com/keystone-db/keystonedb",
          "versions_count": 1,
          "total_downloads": 264,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 3,
          "first_published_at": "2025-10-04T16:15:18.067617Z",
          "latest_published_at": "2025-10-04T16:15:18.067617Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 290
        },
        {
          "name": "kstone-core",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [
            "database",
            "dynamodb",
            "embedded",
            "key-value",
            "nosql",
            "database",
            "database-implementations"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/kstone-core",
          "is_deprecated": false,
          "latest_version": "0.1.0",
          "repository_url": "https://github.com/keystone-db/keystonedb",
          "versions_count": 1,
          "total_downloads": 576,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 29,
          "first_published_at": "2025-10-04T16:12:34.768462Z",
          "latest_published_at": "2025-10-04T16:12:34.768462Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 290
        },
        {
          "name": "kstone-proto",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [
            "database",
            "dynamodb",
            "embedded",
            "key-value",
            "nosql",
            "database",
            "database-implementations"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/kstone-proto",
          "is_deprecated": false,
          "latest_version": "0.1.0",
          "repository_url": "https://github.com/keystone-db/keystonedb",
          "versions_count": 1,
          "total_downloads": 432,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 15,
          "first_published_at": "2025-10-04T16:32:47.329569Z",
          "latest_published_at": "2025-10-04T16:32:47.329569Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 290
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0
      },
      "open_issues_and_prs": 2
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [
        "kstone-proto/proto/keystone.proto"
      ],
      "has_devcontainer": false,
      "typecheck_configs": [
        "website/tsconfig.json"
      ],
      "toolchain_manifests": [
        "Cargo.toml",
        "bindings/nodejs/Cargo.toml",
        "bindings/python/Cargo.toml",
        "c-ffi/Cargo.toml",
        "examples/blog-engine/Cargo.toml",
        "examples/cache-server/Cargo.toml",
        "examples/s3-backup/Cargo.toml",
        "examples/todo-api/Cargo.toml",
        "examples/url-shortener/Cargo.toml",
        "fuzz/Cargo.toml",
        "kstone-api/Cargo.toml",
        "kstone-cli/Cargo.toml",
        "kstone-client/Cargo.toml",
        "kstone-core/Cargo.toml",
        "kstone-proto/Cargo.toml",
        "kstone-server/Cargo.toml",
        "kstone-sync/Cargo.toml",
        "kstone-tests/Cargo.toml"
      ],
      "largest_source_bytes": 74718,
      "source_files_sampled": 130,
      "oversized_source_files": 4,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 77600
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "c-ffi/Cargo.toml",
        "fuzz/Cargo.toml",
        "kstone-api/Cargo.toml",
        "kstone-cli/Cargo.toml",
        "kstone-client/Cargo.toml",
        "kstone-core/Cargo.toml",
        "kstone-proto/Cargo.toml",
        "kstone-server/Cargo.toml",
        "kstone-sync/Cargo.toml",
        "kstone-tests/Cargo.toml",
        "website/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "bincode",
            "direct": false,
            "version": "1.3.3",
            "severity": "unknown",
            "ecosystem": "crates",
            "cvss_score": null,
            "advisory_ids": [
              "RUSTSEC-2025-0141"
            ],
            "fixed_version": null,
            "advisory_count": 1,
            "oldest_advisory_days": 217
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "unknown": 1
        },
        "advisory_count": 1,
        "affected_count": 1,
        "assessed_count": 72,
        "malicious_count": 0,
        "assessed_package": "crates:kstone-api@0.1.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates",
        "npm"
      ],
      "dependencies": [
        {
          "name": "kstone-api",
          "manifest": "c-ffi/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "c-ffi/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "base64",
          "manifest": "c-ffi/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "parking_lot",
          "manifest": "c-ffi/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "kstone-core",
          "manifest": "kstone-api/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.0"
        },
        {
          "name": "anyhow",
          "manifest": "kstone-api/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "kstone-api/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bytes",
          "manifest": "kstone-api/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "kstone-api/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "kstone-api/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "kstone-api",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.0"
        },
        {
          "name": "kstone-core",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.0"
        },
        {
          "name": "kstone-sync",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.0"
        },
        {
          "name": "anyhow",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "clap",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "comfy-table",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing-subscriber",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rustyline",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "14.0"
        },
        {
          "name": "colored",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.0"
        },
        {
          "name": "dirs",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "5.0"
        },
        {
          "name": "tokio",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "axum",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.7"
        },
        {
          "name": "tower",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "tower-http",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.5"
        },
        {
          "name": "rust-embed",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "8.0"
        },
        {
          "name": "uuid",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.6"
        },
        {
          "name": "chrono",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "base64",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.22"
        },
        {
          "name": "futures",
          "manifest": "kstone-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "kstone-proto",
          "manifest": "kstone-client/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.0"
        },
        {
          "name": "kstone-core",
          "manifest": "kstone-client/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.0"
        },
        {
          "name": "tonic",
          "manifest": "kstone-client/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "prost",
          "manifest": "kstone-client/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tokio",
          "manifest": "kstone-client/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "anyhow",
          "manifest": "kstone-client/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "kstone-client/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bytes",
          "manifest": "kstone-client/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "anyhow",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bytes",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "parking_lot",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "crossbeam",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bincode",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "crc32fast",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "crc32c",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "aes-gcm",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "getrandom",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "memmap2",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9"
        },
        {
          "name": "sqlparser",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "base64",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "zstd",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "regex",
          "manifest": "kstone-core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "prost",
          "manifest": "kstone-proto/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.13"
        },
        {
          "name": "tonic",
          "manifest": "kstone-proto/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.12"
        },
        {
          "name": "bytes",
          "manifest": "kstone-proto/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "kstone-proto/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "kstone-proto/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "kstone-api",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.0"
        },
        {
          "name": "kstone-core",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.0"
        },
        {
          "name": "kstone-proto",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.0"
        },
        {
          "name": "tonic",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "prost",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tokio",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "anyhow",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing-subscriber",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "clap",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bytes",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "futures",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "prometheus",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "lazy_static",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "once_cell",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "axum",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "uuid",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "governor",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "subtle",
          "manifest": "kstone-server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.6"
        },
        {
          "name": "kstone-core",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.0"
        },
        {
          "name": "kstone-api",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.0"
        },
        {
          "name": "anyhow",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bytes",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "parking_lot",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "uuid",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.18"
        },
        {
          "name": "chrono",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "tokio",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "async-trait",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "aws-config",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.5"
        },
        {
          "name": "aws-sdk-dynamodb",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.60"
        },
        {
          "name": "aws-sdk-s3",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.60"
        },
        {
          "name": "reqwest",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.11"
        },
        {
          "name": "zstd",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.13"
        },
        {
          "name": "sha2",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "hmac",
          "manifest": "kstone-sync/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.12"
        },
        {
          "name": "kstone-api",
          "manifest": "kstone-tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "kstone-core",
          "manifest": "kstone-tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "kstone-sync",
          "manifest": "kstone-tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tempfile",
          "manifest": "kstone-tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "anyhow",
          "manifest": "kstone-tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tokio",
          "manifest": "kstone-tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "@astrojs/react",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.6.2"
        },
        {
          "name": "@astrojs/tailwind",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.1.0"
        },
        {
          "name": "astro",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.15.0"
        },
        {
          "name": "react",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.3.1"
        },
        {
          "name": "react-dom",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.3.1"
        },
        {
          "name": "tailwindcss",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.4.10"
        },
        {
          "name": "lucide-react",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.436.0"
        },
        {
          "name": "shiki",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.16.2"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 6,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "parkerdgabel",
          "commits": 60,
          "avatar_url": "https://avatars.githubusercontent.com/u/21162926?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 36,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.625
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock",
        "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": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 0,
            "reason": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
            "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/2 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "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": 10,
            "reason": "project is fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 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": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "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": 0,
            "reason": "75 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "d4495bba87d08e3132c2dafa90dee12c403df005",
        "ran_at": "2026-07-22T11:29:19Z",
        "aggregate_score": 2.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [
        {
          "number": 1,
          "created_at": "2025-10-08T03:42:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 7,
          "created_at": "2025-12-27T06:00:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2025-12-27T22:00:17Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/keystone-db/keystonedb",
    "host": "github.com",
    "name": "keystonedb",
    "owner": "keystone-db"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 42,
      "inputs": {
        "security": 38,
        "vitality": 36,
        "community": 16,
        "governance": 49,
        "engineering": 65
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 36,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "critical",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 23,
            "inputs": {
              "commits_last_year": 96,
              "human_commit_share": 1,
              "days_since_last_push": 206,
              "active_weeks_last_year": 2
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 206 days ago",
                "points": 3.6,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 206
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "2/52 weeks with commits",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "96 commits in the last year",
                "points": 17.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 96
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "moderate",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "releases_count": 1,
              "latest_release_tag": "v0.1.0",
              "releases_from_tags": false,
              "days_since_latest_release": 290,
              "mean_days_between_releases": null
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "1 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 290 days ago",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 290
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "cadence unknown (single release)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence_unknown",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "dormant",
              "guards": [
                "recent_release"
              ],
              "signals": [
                "scorecard_unmaintained"
              ],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": 2,
              "unanswered_open_issues": 0,
              "days_since_last_merged_pr": 206,
              "days_since_last_human_commit": 206,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "no human commit for 206 days, with nothing left unanswered; held at dormant by a release within the year",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_quiet",
                    "params": {
                      "days": 206
                    }
                  },
                  {
                    "code": "abandonment_guarded",
                    "params": {
                      "guards": "a release within the year"
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 16,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "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": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "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": "critical",
            "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": 28,
            "inputs": {
              "packages": [
                "kstone-api",
                "kstone-core",
                "kstone-proto"
              ],
              "dependents": null,
              "ecosystems": "crates",
              "total_downloads": 1272,
              "monthly_downloads": 47
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "47 downloads/month across crates",
                "points": 22.4,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 47,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 49,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 23,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.625
            },
            "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 62% of commits",
                "points": 8.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 62
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 6,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "6/6 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 6,
                      "decided": 6
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/2 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 35,
            "inputs": {
              "followers": 0,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "keystone-db",
              "public_repos": 2,
              "account_age_days": 291
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of keystone-db",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "keystone-db"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "2 public repos, account ~0 yr old",
                "points": 5.1,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 2
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "good",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "packages": [
                "kstone-api",
                "kstone-core",
                "kstone-proto"
              ],
              "ecosystems": "crates",
              "any_deprecated": false,
              "min_days_since_publish": 290
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "3 package(s) on crates",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 3,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 290 days ago",
                "points": 26,
                "status": "partial",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 290
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "1 published versions",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "moderate",
        "name": "Engineering Quality",
        "value": 65,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": "https://keystonedb.dev",
              "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": "https://keystonedb.dev",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 38,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 25,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 2.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/2 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is fuzzed",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "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": "75 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Matched the crates:kstone-api@0.1.0 runtime dependency closure — what installing the published package pulls in — 72 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "crates:kstone-api@0.1.0",
                  "assessed": 72
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 91,
            "inputs": {
              "source": "osv",
              "advisories": 1,
              "affected_packages": 1,
              "assessed_packages": 72,
              "unassessed_packages": 0,
              "affected_by_severity": "unknown 1",
              "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": "1 affected: bincode 1.3.3 (unknown)",
                "points": 19,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "bincode 1.3.3 (unknown)"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 217 days ago",
                "points": 37.2,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 1,
                      "oldest": 217
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "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": 72,
              "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
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 1
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 79,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.99,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 77600
            },
            "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "95 of 96 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 95,
                      "sampled": 96
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock",
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "website/tsconfig.json"
              ],
              "agent_commit_share": 0.5,
              "toolchain_manifests": [
                "Cargo.toml",
                "bindings/nodejs/Cargo.toml",
                "bindings/python/Cargo.toml",
                "c-ffi/Cargo.toml",
                "examples/blog-engine/Cargo.toml",
                "examples/cache-server/Cargo.toml",
                "examples/s3-backup/Cargo.toml",
                "examples/todo-api/Cargo.toml",
                "examples/url-shortener/Cargo.toml",
                "fuzz/Cargo.toml",
                "kstone-api/Cargo.toml",
                "kstone-cli/Cargo.toml",
                "kstone-client/Cargo.toml",
                "kstone-core/Cargo.toml",
                "kstone-proto/Cargo.toml",
                "kstone-server/Cargo.toml",
                "kstone-sync/Cargo.toml",
                "kstone-tests/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Cargo.toml, bindings/nodejs/Cargo.toml, bindings/python/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "Cargo.toml, bindings/nodejs/Cargo.toml, bindings/python/Cargo.toml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "website/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "website/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "48 of the last 96 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 48,
                      "sampled": 96
                    }
                  }
                ],
                "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 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 74718,
              "source_files_sampled": 130,
              "oversized_source_files": 4
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "4/130 source files over 60KB",
                "points": 53.3,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 130,
                      "oversized": 4
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "good",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": [
                "kstone-proto/proto/keystone.proto"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": "kstone-proto/proto/keystone.proto",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "kstone-proto/proto/keystone.proto"
                    }
                  }
                ],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Could not fetch crates package 'kstone-ffi' from its registry",
    "Could not fetch npm package 'keystonedb-website' from its registry",
    "Could not fetch crates package 'kstone-cli' from its registry",
    "Could not fetch crates package 'kstone-sync' from its registry",
    "Could not fetch crates package 'kstone-tests' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T11:29:34.284806Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/k/keystone-db/keystonedb.svg",
  "full_name": "keystone-db/keystonedb",
  "license_state": "absent",
  "license_spdx": null
}

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

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

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