JSON-Rohbericht maschinenlesbar
{
"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
}