公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-27 04:07 UTC

ds7n / graphdblite

Rust · GherkinMIT★ 2 星标⑂ 0 复刻始于 2026年4月在 GitHub 上查看 ↗

ds7n/graphdblite 的健康指数为 100 分中的 50 分,处于「中等」区间。 其得分最高的类别是Vitality(74/100),最低的是Community & Adoption(23/100)。 最近一次更新在 14 天前。 近期的大部分工作由 1 位贡献者完成。

50
总分 / 100
中等

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

50
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

所有权

ds7n个人账户
2 关注者5 个公开仓库始于 2026年3月

该仓库由个人账户拥有。相较于组织支持的项目,单一所有者项目的延续性风险更高。

软件包生态系统

注册表软件包版本月下载量版本数最近发布标签
crates.iographdblite0.1.219318 天前cypherdatabaseembeddedgraphsqlitedatabase-implementations

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

74良好 · 占总体的 22%
评分方式
28.8/36推送新近度 — 最近一次推送于 14 天前
6.9/36提交节奏 — 52 周中有 10 周有提交
18/18提交量 — 最近一年 421 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year421
human_commit_share1
days_since_last_push14
active_weeks_last_year10

发布纪律

90优秀
评分方式
27/27有发布版本 — 已发布 4 个发布版本
36/36发布时效 — 最近一次发布版本于 18 天前
27/27发布节奏 — 约每 16.9 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — Project has not signed or included provenance with any releases.
所用输入
releases_count4
latest_release_tagv0.1.2
releases_from_tags
days_since_latest_release18
mean_days_between_releases16.9

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

23危急 · 占总体的 18%
评分方式
0/60星标 — 2 个星标
0/25复刻 — 0 个复刻
0/15关注者 — 1 位关注者
所用输入
forks0
stars2
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

50中等
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(MIT)
0/18CONTRIBUTING 指南
0/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template
评分方式
17.3/80月度下载量 — crates 合计每月 19 次下载
0/20注册表被依赖数 — 该生态系统不报告此项
所用输入
packagesgraphdblite
dependents
ecosystemscrates
total_downloads56
monthly_downloads19
已排除计分(无数据或不适用):注册表被依赖数。 其余权重已重新归一化。

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

46存在风险 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
0/22.5提交分布 — 头号贡献者编写了 100% 的提交
1.4/13.5贡献者广度 — 1 位贡献者
0/10OpenSSF Scorecard:Contributors — project has 0 contributing companies or organizations -- score normalized to 0
所用输入
bus_factor1
contributors_sampled1
top_contributor_share1
评分方式
0/46.8议题解决 — 没有议题或无数据
38.2/38.3PR 接受 — 已裁定的 PR 中 1/1 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs1
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
已排除计分(无数据或不适用):议题解决。 其余权重已重新归一化。
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
3.4/25所有者影响力 — ds7n 有 2 位关注者
6.4/25既往记录 — 5 个公开仓库,账户约 0 年
所用输入
followers2
owner_typeUser
is_verified
owner_loginds7n
public_repos5
account_age_days127
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — crates 上有 1 个软件包
35/35发布时效 — 最近一次发布于 18 天前
12/20版本历史 — 3 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesgraphdblite
ecosystemscrates
any_deprecated
min_days_since_publish18

工程质量

基础的工程与文档实践是否到位?

58中等 · 占总体的 20%

工程实践

60中等
评分方式
24/24CI 工作流 — 7 个工作流
24/24存在测试
0/16Linter 配置
0/9.6Pre-commit 钩子
0/6.4.editorconfig
0/20OpenSSF Scorecard:CI-Tests — 无数据
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config
已排除计分(无数据或不适用):OpenSSF Scorecard:CI-Tests。 其余权重已重新归一化。

文档

55中等
评分方式
30/30README
25/25文档目录
0/15文档 / 主页站点
0/10仓库描述
0/10主题标签
0/10Wiki
所用输入
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

41存在风险 · 占总体的 16%

安全态势

41存在风险
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 无数据
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5许可证 — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
4.5/7.5Vulnerabilities — 4 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4.1
已排除计分(无数据或不适用):ci_tests。 其余权重已重新归一化。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

57中等 · 占总体的 0%
评分方式
0/45代理指令 — 没有 CLAUDE.md / AGENTS.md / 编辑器规则
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 100 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
评分方式
18/18一条命令的引导启动 — bindings/ffi/Makefile, bindings/go/Makefile
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — bindings/python/python/graphdblite/py.typed
10/10可复现环境 — Dockerfile, lockfile
0/10已体现的代理实践 — 最近 100 次提交中没有代理编写的提交
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfilesCargo.lock, package-lock.json
has_dockerfile
typed_language
bootstrap_filesbindings/ffi/Makefile, bindings/go/Makefile
has_devcontainer
has_linter_config
typecheck_configsbindings/python/python/graphdblite/py.typed
agent_commit_share0
toolchain_manifestsCargo.toml, benches-crate/Cargo.toml, bindings/ffi/Cargo.toml, bindings/go/go.mod, bindings/node/Cargo.toml, bindings/python/Cargo.toml, fuzz/Cargo.toml
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — Rust(静态类型)
54.1/55可控的文件大小 — 采样的 116 个源文件中有 2 个超过 60KB
所用输入
primary_languageRust
largest_source_bytes180,880
source_files_sampled116
oversized_source_files2

机器可读接口

40存在风险
评分方式
0/40API 模式(OpenAPI/GraphQL/proto)
0/20MCP 服务器
40/40可运行示例 — examples
所用输入
example_dirsexamples
has_mcp_signal
api_schema_files

关键数据

2GitHub 星标
1贡献者
421最近 12 个月提交数
14距最近推送天数
4发布版本数
1巴士系数(bus factor)
0开放议题
crates.io软件包生态系统数

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch crates package 'graphdblite-bench' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

更多细节

OpenSSF Scorecard 4.1 / 10
4.1综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-27 04:07 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
不适用CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
6Vulnerabilities4 existing vulnerabilities detected
直接依赖 15
注册表软件包版本约束清单文件
crates.iorusqlite0.32Cargo.toml
crates.iormp-serde1Cargo.toml
crates.ioserde1Cargo.toml
crates.ioindexmap2Cargo.toml
crates.iopest2Cargo.toml
crates.iopest_derive2Cargo.toml
crates.ioregex1Cargo.toml
crates.iochrono0.4.44Cargo.toml
crates.iochrono-tz0.10.4Cargo.toml
crates.iotracing0.1Cargo.toml
crates.iocucumber0.21Cargo.toml
crates.ioanyhow1Cargo.toml
crates.iographdblitebenches-crate/Cargo.toml
crates.iotempfile3benches-crate/Cargo.toml
crates.iocriterion0.5benches-crate/Cargo.toml
全部依赖 未采集

本报告未能采集到解析后的依赖集合:GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 39598,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "C": 26684,
        "Go": 43452,
        "Rust": 1813869,
        "Shell": 40557,
        "Cypher": 1686,
        "Python": 24229,
        "Gherkin": 1471148,
        "Makefile": 2170,
        "Dockerfile": 5505,
        "JavaScript": 24591
      },
      "pushed_at": "2026-07-12T13:41:28Z",
      "created_at": "2026-04-12T20:28:41Z",
      "owner_type": "User",
      "updated_at": "2026-07-12T13:41:35Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust",
        "Gherkin"
      ]
    },
    "owner": {
      "blog": null,
      "name": "ds7n",
      "type": "User",
      "login": "ds7n",
      "company": null,
      "location": null,
      "followers": 2,
      "avatar_url": "https://avatars.githubusercontent.com/u/270055197?v=4",
      "created_at": "2026-03-22T04:01:13Z",
      "is_verified": null,
      "public_repos": 5,
      "account_age_days": 127
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-07-08T17:46:15Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-05-23T14:38:13Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-05-16T16:36:23Z"
        },
        {
          "tag": "dev-latest",
          "kind": "other",
          "published_at": "2026-05-18T22:34:10Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "124fc33af5c66abde15d3883489f85d788d47b00",
          "body": "Bump workspace + node binding to 0.1.2. Move CHANGELOG [Unreleased] entries\nunder [0.1.2]. Re-baseline per-query alloc counts: delete_many/indexed_lookup/\nmerge_pattern rise slightly from the index-maintenance correctness fixes\n(full-label-set iteration, index label re-check, MERGE index maintenance).",
          "is_bot": false,
          "headline": "release: v0.1.2",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-07-08T08:15:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d87c3f0eaa96d8ff9ba2d8075071ef2189b8692",
          "body": "…ion)\n\nFixes 8 correctness bugs found in the full-code-review: ORDER BY on\nnon-scalar types, MERGE/SET/label index maintenance (incl. multi-label\nper-label keying), OR-chain FTS dedup, index+FTS table-name collisions,\ncontradictory-equality predicate dropping, substring char-boundary panic +\nFFI panic safety, and edge-type counter drift. All with mutation-verified\nregression tests. 601 tests + TCK 3895/3895 green.",
          "is_bot": false,
          "headline": "Merge: index-maintenance + correctness fixes (7 findings + FTS collis…",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-07-08T08:03:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c8f8d9b2d4b8798205cac089d73981b62836c8d",
          "body": "Single-property FTS tables used node_fts_<label>_<property>, so (A_b, c) and\n(A, b_c) collided onto node_fts_A_b_c — a CONTAINS query on :A_b(c) could leak\nan :A node's b_c, and creating the second index spuriously reported\nIndexAlreadyExists. They now use the unambiguous node_fts$<label>$<prop>\nscheme (legacy _ tables still resolve for existing DBs via resolve_fts_table),\nmatching the btree fix. Discovery parses both schemes.",
          "is_bot": false,
          "headline": "fix(fts): collision-free single-prop fulltext table names",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-07-08T07:43:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7963312719e3f2b3e296de1b2ccac5eac418da01",
          "body": "- e2e regressions: multibyte substring, OR-chain FTS dedup with divergent BM25\n  scores, and duplicate-bound edge delete counter.\n- docs/cypher.md: document score(), fts.search, db.counts, composite CREATE\n  INDEX; fix the stale 'no BM25/ranking' note and the db.indexes() kind list.\n- CHANGELOG: record all fixes under [Unreleased].",
          "is_bot": false,
          "headline": "test+docs: regression tests for the correctness fixes; refresh cypher.md",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-07-08T07:30:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd521246c55327165cfb766cb35aa316fda4715a",
          "body": "substring() sliced by byte offset on a char index, panicking at a non-char\nboundary (e.g. substring('é', 1)); it is now character-indexed per the Cypher\nspec. That panic (and any other) crossing an extern \"C\" frame is UB / a\nprocess abort, so graphdb_query/graphdb_execute/tx paths now run under\ncatch_unwind and return -1 + graphdb_last_error instead of aborting the host.",
          "is_bot": false,
          "headline": "fix(ffi): catch panics at the C boundary; make substring char-indexed",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-07-08T07:30:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b52f3f3a22f7f9dc50bc8c0380caa92fc1a807ac",
          "body": "delete_single_edge ignored kv::delete's bool result and always decremented,\nso deleting the same parallel edge twice (bound in multiple output rows) drove\ndb.counts()/planner cardinality below the true live count. Guard the decrement\non the delete result, matching delete_edge.",
          "is_bot": false,
          "headline": "fix(stats): only decrement edge-type counter when an edge was removed",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-07-08T07:30:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d882c21c3c83ac31b6feb66ed46505382af727f",
          "body": "WHERE n.x = 1 AND n.x = 2 on an indexed property folded only the last value\ninto the IndexLookup and dropped the other conjunct (shared (alias,prop) key),\nreturning wrong rows. Conflicting same-property equalities are now excluded\nfrom index candidacy and both conjuncts stay in the residual Filter, so the\nquery is correctly unsatisfiable regardless of conjunct order.",
          "is_bot": false,
          "headline": "fix(planner): keep contradictory equality conjuncts in residual filter",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-07-08T07:30:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4d770d57a5d06f7df6353f0ab86b94d97e2a7da",
          "body": "A node matching two disjuncts of an OR-chain rewritten to Union(FullTextLookup,\n..) gets a different BM25 __fts_score per branch, defeating the full-record\ndedup and returning the node once per matching branch. UNION dedup now compares\nrows ignoring the synthetic __fts_score key.",
          "is_bot": false,
          "headline": "fix(fts): OR-chain Union dedup ignores per-branch __fts_score",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-07-08T07:30:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d965542ee7a53564b60119d463c7d5f50cddc709",
          "body": "…mutations\n\nIndex/FTS maintenance was keyed on labels.first() (the sorted-first primary\nlabel), silently corrupting indexes on multi-label nodes, and several write\npaths skipped maintenance entirely:\n\n- MERGE ON CREATE/ON MATCH SET n += {..} / = {..} / :Label now maintain indexes\n  (the map/label ar\n[…]\nde onto one physical table.\n  exec_index_lookup also re-verifies label membership defensively.\n\nAdds an index-consistency matrix test over every node-mutating op on both\nsingle- and multi-label nodes.",
          "is_bot": false,
          "headline": "fix(index): maintain secondary+FTS indexes across all label sets and …",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-07-08T07:30:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "49ef6c555b60bc5ad61494a77a7e73cbcb0bf976",
          "body": "The named- and slot-iterator ORDER BY paths used a stripped comparator that\nreturned Equal for Bool, temporal, Duration, and List values, silently leaving\nthose columns in insertion order. Both paths now call the canonical\nexecutor::util::compare_values_for_sort (NaN last, lists element-wise).",
          "is_bot": false,
          "headline": "fix(sort): ORDER BY orders all value types on pull-based paths",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-07-08T07:29:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c041d11f13ef6746d7919beae5aae5172305b877",
          "body": "Adds tuple-keyed btree indexes with leftmost prefix-match semantics\nacross storage, planner, executor, Cypher grammar, and all four\nbindings.\n\nAPI surface:\n- Database::create_composite_index(label, &[props]) /\n  drop_composite_index, plus WriteTransaction parity\n- Cypher DDL: CREATE INDEX ON :L(a, b\n[…]\ner tests + TCK\n3895/3895; Python 3/3, Node 23/23, FFI 12/12, Go 31/31.\n\nSpec: docs/superpowers/specs/2026-06-07-composite-indexes-design.md\nPlan: docs/superpowers/plans/2026-06-07-composite-indexes.md",
          "is_bot": false,
          "headline": "feat: composite (multi-column) secondary indexes",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-11T09:08:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f8bec908e1e51c3844bd2a62dda2fef586ed4d3b",
          "body": null,
          "is_bot": false,
          "headline": "test(e2e): score(n) function for FTS-driven queries",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T20:08:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "416a0378c4e9007ab9dd80611b4fd5cd39d09443",
          "body": null,
          "is_bot": false,
          "headline": "feat(planner): validate score() arity and arg type at plan time",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T20:02:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca1599cf229a57a43b1eac7c570c60bc166f61fa",
          "body": null,
          "is_bot": false,
          "headline": "feat(eval): score(n) function looks up __fts_score flat key",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T19:55:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3856685965173b8b8dfb5fa99d07c760d6bf9ffb",
          "body": null,
          "is_bot": false,
          "headline": "feat(executor): FullTextLookup emits {alias}.__fts_score per row",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T19:53:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c51a9ac1ed67ad3dd167219270218d6e87d17388",
          "body": null,
          "is_bot": false,
          "headline": "refactor(fts): fulltext_lookup returns (NodeId, f64) tuples",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T19:46:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "478d854c24500d84cba4f76f5da595ab6dc1635e",
          "body": null,
          "is_bot": false,
          "headline": "docs(conformance): note create_fulltext_index_word_multi parity in BC-11",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T14:03:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d94ef4e4ec13cf2600298bc831e544080cbc741c",
          "body": "Add a cgo wrapper for graphdb_create_fulltext_index_word_multi on\nWriteTransaction. Marshals a Go []string of property names into a\nC array of *C.char by allocating each element with C.CString and\ndeferring C.free for each, then passes the array base pointer plus\nthe count to the C FFI.\n\nTest creates an (Article {title, body}) multi-prop index, inserts\na node, and verifies CALL fts.search('Article', '*', 'memory')\nreturns the expected row.",
          "is_bot": false,
          "headline": "feat(go): CreateFulltextIndexWordMulti binding",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T13:56:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "603239011680faf929aa1548ffc5444438a3b4d4",
          "body": "Add a C FFI export for multi-property word fulltext indexes,\nmirroring the Database method added in Task 4. The function takes\nan array of null-terminated UTF-8 property names alongside the label,\nand routes through the existing lock_db + wrap_result scaffold used\nby the other DDL exports.\n\nExtend BC-11 conformance with a multi-prop round-trip that creates\nan Article index over (title, body), inserts a row, and verifies\nCALL fts.search('Article', '*', 'memory') returns it.",
          "is_bot": false,
          "headline": "feat(ffi): graphdb_create_fulltext_index_word_multi",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T13:29:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ae613ac46182b7bfd7c04b90c566d2ac47b4ffd",
          "body": null,
          "is_bot": false,
          "headline": "feat(node): createFulltextIndexWordMulti binding",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T13:26:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f2715419427fe349a9f6a256d61b05b480e5d83",
          "body": null,
          "is_bot": false,
          "headline": "feat(python): create_fulltext_index_word_multi binding",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T09:42:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74a49b347d2a83c96d006d3a9d1c3fece8ced809",
          "body": null,
          "is_bot": false,
          "headline": "test(e2e): multi-property fts.search with wildcard and column scope",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T09:41:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cf8bbff1a66e5261ef93e741291b92ac7ba3569",
          "body": null,
          "is_bot": false,
          "headline": "feat(cypher): fts.search wildcard + column-scoped resolution",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T09:36:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab6eec3a42572792865b3e35f67a1c0275fd03b6",
          "body": null,
          "is_bot": false,
          "headline": "feat(db): Database/WriteTransaction create_fulltext_index_word_multi",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T09:30:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f623af61397527f2ae7a4447551bb217506b9d9c",
          "body": null,
          "is_bot": false,
          "headline": "feat(fts): multi-column sync in update_fts_for_node/remove_fts_for_node",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T09:28:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7959c5fe8ee27f8e258f928f5cc1e80bceed84c4",
          "body": null,
          "is_bot": false,
          "headline": "feat(fts): create_fulltext_index_word_multi (FTS5 multi-column)",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T09:22:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f73924e51d1434a5d01806db64fa5fe6872d5c8",
          "body": null,
          "is_bot": false,
          "headline": "refactor(fts): FtsIndexInfo struct replaces (label, prop, kind) tuples",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T09:16:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc42e62bcbc80591c6ebcb3b082dd502035d4df8",
          "body": null,
          "is_bot": false,
          "headline": "docs(conformance): extend BC-11 with create_fulltext_index_word variant",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T01:19:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e56a40aec3b1d19fd84386c69312112e0506e76",
          "body": null,
          "is_bot": false,
          "headline": "refactor(executor): extract ProcRows type alias to satisfy clippy",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T01:19:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e539afa7d24bdfc824ebe5043a5dd22741939b9f",
          "body": null,
          "is_bot": false,
          "headline": "feat(go): CreateFulltextIndexWord binding",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T01:11:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea5a27c2f5ecf503beac1870d2ddc5272beb5392",
          "body": null,
          "is_bot": false,
          "headline": "feat(ffi): graphdb_create_fulltext_index_word",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T00:24:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ae9c4a84dbd40602ecf4bf9bf188a5d2f113ff9",
          "body": null,
          "is_bot": false,
          "headline": "feat(node): createFulltextIndexWord binding",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-06T00:22:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd0d513d4e43c7e1d6de7ecf9003a47f7fffe1d1",
          "body": null,
          "is_bot": false,
          "headline": "feat(python): create_fulltext_index_word binding",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T14:36:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "063bcd43e280d61b72fb89516dfef4b8ba3c8848",
          "body": null,
          "is_bot": false,
          "headline": "test(e2e): fts.search procedure with phrase/OR/downstream-match",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T14:35:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8335922ad1ec9a5e2abadaaa1f01fb9fae015969",
          "body": "Adds the fts.search(label, property, query) built-in that yields\n(node, score) rows ranked by BM25 relevance. Issues a parameterized\nFTS5 MATCH against the underlying virtual table and negates bm25()'s\noutput so callers can use the conventional ORDER BY score DESC.\n\nSurfaces clean errors: TypeError on non-string args, IndexNotFound\nwhen no FTS index covers the pair, and ProcedureError on FTS5 syntax\nfailures.",
          "is_bot": false,
          "headline": "feat(cypher): fts.search built-in procedure for unicode61 indexes",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T14:29:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89d9fa5e45a7e26fa0e784fa9e0364c23f8a0de8",
          "body": "Lifts the builtin-procedure invocation into the per-record loop of\nexec_call so arg-parameterized built-ins (e.g. the upcoming\nfts.search) can read their evaluated arguments. db.indexes and\ndb.counts ignore the new slice via debug_assert.\n\nProcSource enum replaces the synthesized ProcedureDef so registry\nrows stay borrowed while builtin rows are owned per-call via Cow.",
          "is_bot": false,
          "headline": "refactor(executor): pass evaluated args to builtin procedures",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T14:22:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ae5a6c1f1a001d3cc6b6155808033ba5d3c7d63",
          "body": null,
          "is_bot": false,
          "headline": "feat(db): Database/WriteTransaction create_fulltext_index_word",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T14:16:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37dbf155a91bcb697fa8bd06b7dc21896c9b291a",
          "body": "Adds a word-tokenized FTS variant backed by FTS5's unicode61 tokenizer\n(splits on word boundaries, case-folds, folds diacritics). Refactors\ncreate_fulltext_index_impl to take an FtsTokenizerSpec enum in place of\nthe binary case_sensitive bool, and extracts the tokenizer-DDL parse\nlogic into parse_tokenizer_kind so fts_tokenizer_kind and\nlist_all_fulltext_indexes share one implementation.",
          "is_bot": false,
          "headline": "feat(fts): create_fulltext_index_word for unicode61 tokenizer",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T14:14:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "780287829b3a29b033df94768ce6acece6ca626b",
          "body": null,
          "is_bot": false,
          "headline": "refactor(fts): FtsTokenizerKind enum replaces is_case_insensitive",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T14:08:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e9427b9c4914efd7d7077ae833491e48db5c156",
          "body": null,
          "is_bot": false,
          "headline": "docs(conformance): note create_fulltext_index_ci parity in BC-11",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T03:09:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce7ae1421ba141f2561ac701a25d2fb01414e517",
          "body": "Mirror the FFI graphdb_create_fulltext_index_ci entry point through the\nshared tx.ddl scaffold. New TestCreateFulltextIndexCI confirms a\ncase-mismatched CONTAINS hits the CI FTS rewrite path.",
          "is_bot": false,
          "headline": "feat(go): CreateFulltextIndexCI binding",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T03:03:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6aa78c2c31d91c9b78fdda833e49fc4cfa9b737a",
          "body": "Add the case-insensitive fulltext index DDL to the C FFI surface,\nmirroring graphdb_create_fulltext_index via ddl_call. The cbindgen\nheader gets the new declaration on the next native build. Extends\nBC-11 conformance with a CI create + case-mismatched CONTAINS\nround-trip.",
          "is_bot": false,
          "headline": "feat(ffi): graphdb_create_fulltext_index_ci",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T02:38:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "329579eafc718ff09d28dcce831b1db5b4dece49",
          "body": "Mirror the case-insensitive FTS index creator on the WriteTransaction\nwrapper, matching the existing create_fulltext_index shape. Add a\nparity test alongside the existing CS test in test/index_ddl.test.mjs.",
          "is_bot": false,
          "headline": "feat(node): create_fulltext_index_ci binding",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T02:35:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4748c0d53c2253ebe9cfb6371ae3c3a68d2ecfb",
          "body": null,
          "is_bot": false,
          "headline": "feat(python): create_fulltext_index_ci binding",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T02:22:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84eaf14a77b3068dbe6b462ae34ed55b9e3f67c9",
          "body": null,
          "is_bot": false,
          "headline": "test(e2e): case-insensitive FTS matching",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T02:21:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4553b25131db3246e8d2ba0a06c781658eb8a5e3",
          "body": "Detect the symmetric `toLower(alias.prop) <fts_op> toLower(rhs)` idiom\nin WHERE predicates and gate the FullTextLookup rewrite on whether the\nmatched FTS index is case-insensitive. Plain (non-toLower) predicates\ncontinue to rewrite against either index kind; asymmetric toLower\nwrappings fall through\n[…]\ns fts_index_exists with fts_kind_for + fts_rewrite_is_usable so\nthe gating is shared by the non-correlated Scan-with-Filter path, the\ncorrelated CorrelatedJoin path, and the OR-chain → Union rewriter.",
          "is_bot": false,
          "headline": "feat(planner): toLower idiom + CI-index gating for FTS rewrite",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T02:15:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f5d48b4d4fc86591eda07a4f17bb07259bd45228",
          "body": null,
          "is_bot": false,
          "headline": "feat(db): Database/WriteTransaction create_fulltext_index_ci",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T02:07:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18b7c485f88aecd32203a66ba68899a96ffe05c3",
          "body": null,
          "is_bot": false,
          "headline": "feat(fts): list_all_fulltext_indexes returns case-sensitivity flag",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T02:06:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0cce5ec32fc612fa4ef227349553221ae4a52fc0",
          "body": null,
          "is_bot": false,
          "headline": "feat(fts): is_case_insensitive introspection",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T02:04:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef3a43255d9c391d551ce2592237575ec4c06d61",
          "body": null,
          "is_bot": false,
          "headline": "feat(fts): case-insensitive index variant",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-05T02:03:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93b06a3c37ecdbcbe94bedea6ccb1256f03928dc",
          "body": null,
          "is_bot": false,
          "headline": "style(schema): move migration_v3_tests module to file bottom",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T15:06:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96303d01db74321cc71c31b6e699338d629ef1f3",
          "body": null,
          "is_bot": false,
          "headline": "test(e2e): CALL db.counts() returns label and edge-type rows",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T15:03:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc79f8a57bf9b6b70d6636d3aa622664209df9ad",
          "body": "Adds `CALL db.counts() YIELD kind, name, count` — returns one row per\nnode label and one per edge type with their respective counts, sourced\nfrom `crate::stats`.",
          "is_bot": false,
          "headline": "feat(cypher): db.counts() built-in procedure",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T14:57:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2ec56fa2c59cae0406f5b7e70c2181cd690e712",
          "body": "Adds migrate_v2_to_v3 which scans all edge_props keys on first open of a\npre-v3 DB and seeds stats:edge_type_count:* counters. Fresh DBs skip the\nmigration via INSERT OR IGNORE stamping SCHEMA_VERSION=3 at init time.",
          "is_bot": false,
          "headline": "feat(schema): bump v2 -> v3 with edge-type count backfill",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T14:53:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0969498f4e2c2715836203081e144a2a1c950ba",
          "body": "Hook crate::stats::{increment_edge_type_count, decrement_edge_type_count_by}\ninto create_edge, delete_edge, and delete_single_edge so the edge-type\ncounters stay in sync with the actual edge_props row count.",
          "is_bot": false,
          "headline": "feat(edge): track per-edge-type counts on create/delete",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T14:50:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "afbfb301277e129aa4849d58029ca7d02c926a49",
          "body": null,
          "is_bot": false,
          "headline": "feat(edge): label_from_edge_props_key helper",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T14:47:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02ac05fe06980eae9242a15a7d18666ee6b1e973",
          "body": null,
          "is_bot": false,
          "headline": "style(stats): cargo fmt",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T14:46:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e92cb408544c149417e6cba3c9515423d6ad6f35",
          "body": null,
          "is_bot": false,
          "headline": "feat(stats): edge-type counters + aggregate readers",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T14:43:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b80bb2a1f56f92bbede68a38f1cb84fefbd083ea",
          "body": "Migrate the Python binding to the modern `IntoPyObject` API and remove\nthe module-level `#![allow(clippy::useless_conversion)]` workaround.\nTouches `bindings/python/` only — Node, Go, and C/FFI are unaffected.\nPublic Python API surface is unchanged; 16 binding tests pass.\n\nCollateral renames absorbe\n[…]\nto satisfy 0.28's Send+Sync default (rusqlite::Connection\nis !Send; single-threaded use was already enforced via `&mut self`).\n\nCargo.lock shrinks by 23 lines (newer pyo3 has cleaner transitive deps).",
          "is_bot": false,
          "headline": "deps(python): upgrade pyo3 0.22 → 0.28",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T12:31:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d5b2626aa59180b50193230973cb1bb03699541",
          "body": "`WHERE A OR B OR …` where every disjunct is a text predicate\n(CONTAINS / STARTS WITH / ENDS WITH) against an FTS-indexed property\nof the same label now plans as Union(FullTextLookup, …) with row dedup.\nReuses the existing Union IR variant (all: false → executor dedups).\nA single non-FTS-eligible disjunct disables the rewrite and the query\nfalls back to a label scan. Mixed AND/OR and the correlated form are\nnot handled in this pass.",
          "is_bot": false,
          "headline": "feat(planner): OR-chain rewrite across FTS indexes",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T04:37:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30ac1b646bf644ddf4e90b0c6a8e232de6bd7aad",
          "body": null,
          "is_bot": false,
          "headline": "style(executor): move test mod after values_match to satisfy clippy",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T02:10:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e10e7a6346dbb5203fcc8fbf055aabf30891489",
          "body": "New built-in procedure that returns `(label, property, kind)` rows for\nevery secondary and fulltext index in the database. Reuses the existing\nCALL surface — no new grammar, parser, AST, or IR. Planner and executor\nfall back to a small built-in allowlist (registry-first dispatch) after\nthe test ProcedureRegistry misses, so TCK mocks can still shadow\nbuilt-ins by name. Storage layer gains `list_all_indexes` and\n`list_all_fulltext_indexes` for all-labels enumeration.",
          "is_bot": false,
          "headline": "feat(cypher): index introspection via `CALL db.indexes()`",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T02:09:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c59ea09f73d67bf16ed84f186bd4502510281dd",
          "body": "Expose `create_index` / `drop_index` / `create_fulltext_index` /\n`drop_fulltext_index` on the WriteTransaction wrapper of the Node, Go,\nand C/FFI bindings, mirroring Python's existing PyWriteTransaction\nsurface. Each binding's method names follow language idioms (camelCase\nfor Node, PascalCase for Go, snake_case for C/FFI). Closes BC-11.",
          "is_bot": false,
          "headline": "feat(bindings): index DDL parity for Node/Go/C/FFI",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T01:21:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3555bc4cb909b629b24ba51f35e8a48c4d095837",
          "body": "OpenCypher full-match semantics backed by Rust `regex` crate, with\nper-query bounded LRU of compiled regexes (capacity 32). NULL propagation\non either side, non-string operands evaluate to NULL, invalid patterns\nraise InvalidArgumentValue. ReDoS-safe by construction (no backreferences\nor lookaround). Runs as label scan with per-row eval; FTS indexes do not\naccelerate `=~`. See docs/cypher.md for full semantics.",
          "is_bot": false,
          "headline": "feat(eval): regex match operator (`=~`)",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-04T01:21:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bb1568e9ab8dc60d0d3a4f8400be2bce5d6a336",
          "body": "…ENDS WITH\n\nAdds `Database::create_fulltext_index(label, property)` and\n`drop_fulltext_index(...)` (plus parallel `WriteTransaction` methods and\nPython binding parity). Backed by SQLite FTS5 with the `trigram`\ntokenizer (`case_sensitive 1`), matching openCypher's case-sensitive\nsubstring semantics e\n[…]\n binding-parity project).\n\nSee docs/cypher.md \"Full-text indexes\" for full semantics + storage\ncost trade-offs and docs/superpowers/specs/2026-06-02-fulltext-index-design.md\nfor the design discussion.",
          "is_bot": false,
          "headline": "feat(fts): trigram-backed full-text indexes for CONTAINS/STARTS WITH/…",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-06-03T00:39:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "33392baf129ca872404dbaa7d5d8b828d4962259",
          "body": "Cosmetic polish for the next release: advertise py.typed via\n'Typing :: Typed', add 'Topic :: Database' parent and\n'Intended Audience :: Developers', and surface Homepage in the\nPyPI sidebar.",
          "is_bot": false,
          "headline": "chore(python): add missing PyPI classifiers and Homepage URL",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-23T23:43:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "faf41a73053827fbfb0da97d00c63c323bc2fdd2",
          "body": "… 2026-05-23\n\nThe IdLookup perf rewrite was logged under [Unreleased] but is part of\nthe same v0.1.1 batch as snapshot_to / py.typed / MERGE-edge docs.\nMove it under [0.1.1] and update the date from the 2026-05-17 staging\nstamp to today's date (2026-05-23) to reflect the actual release date\nthe tag will use.",
          "is_bot": false,
          "headline": "docs(changelog): consolidate IdLookup perf fix under [0.1.1], date as…",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-23T12:48:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85f3ea14af413182bb00a7d5aa7da99b1c34bbfe",
          "body": "Adds `LogicalOp::IdLookup` IR plus a post-planning rewrite that turns\n`Filter(Scan{\"\"}, id(alias) = expr)` into an O(1) primary-key fetch via\n`node::get_node`. Both the non-correlated form and the correlated form\n(predicate pushed *down into* a `CorrelatedJoin`'s right side) are\nhandled — the latter\n[…]\ncs of an unmatched WHERE.\n- Self-referential predicates like `WHERE id(a) = id(a)` are rejected\n  by the rewrite (cannot hoist) and stay on the Scan+Filter path.\n\nCHANGELOG entry under `[Unreleased]`.",
          "is_bot": false,
          "headline": "feat(planner): O(1) id-lookup for `WHERE id(n) = expr`",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-18T22:01:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5f4e35e96e00ff4d2827f2f9fd045b46ed2cf3fa",
          "body": "…MERGE\n\nStage the v0.1.1 release on main without tagging. CHANGELOG dated\n2026-05-17; tag whenever there's a consumer-driven reason to ship.\n\nVersion bumps:\n- Cargo.toml (workspace), bindings/node/package.json,\n  bindings/python/python/graphdblite/__init__.py: 0.1.0 → 0.1.1\n\nDocumentation:\n- docs/py\n[…]\n CREATE / ON MATCH SET r += $props, edge identity semantics, and\n  direction sensitivity. Replaces the asymmetric per-binding edge-MERGE\n  examples that previously lived only in python.md and node.md.",
          "is_bot": false,
          "headline": "release(prep): v0.1.1 — bump versions, document snapshot_to and edge …",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-17T16:14:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9548925cd5c4ebaca0eb2cfbaf93e8d168e59d05",
          "body": "Adds a py.typed marker plus a complete __init__.pyi covering Database,\nWriteTransaction, ReadTransaction, the exception hierarchy, batch APIs,\nand the optional params argument on query / execute. Re-exports the\ntransaction classes and exceptions from the top-level graphdblite\npackage so they resolve without reaching into _graphdblite.\n\nDownstream consumers can drop their `# type: ignore[import-untyped]`\nworkarounds once this ships.",
          "is_bot": false,
          "headline": "feat(python): ship PEP 561 typing — py.typed marker + full stubs",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-17T13:30:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8147ce8048dfba6938c286869d634ed3316c7725",
          "body": "Add regression tests for MERGE edge upsert with ON CREATE/ON MATCH and\nfor inline-prop discrimination of parallel edges. Extend Python and Node\ndocs with the edge-upsert example so users don't need to guess whether\nMERGE works on relationships.",
          "is_bot": false,
          "headline": "docs+tests: confirm MERGE edge upsert semantics",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-17T12:59:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ecc1d2a8e02a3e1590a1497572cdc2c7874aa2c5",
          "body": "Adds Database::snapshot_to(path) — a single-file consistent copy of the\ndatabase via SQLite's VACUUM INTO. Produces a self-contained file with no\n-wal / -shm sidecars, defragmented and compacted. Rejects when a\ntransaction is active or when the destination path already exists.\n\nExposed in all bindin\n[…]\nnapshotTo\n\nEach surface has matching tests (basic round-trip, rejects existing\ntarget, rejects with active tx). Subsumes the standalone checkpoint()\nask since VACUUM INTO checkpoints as a side effect.",
          "is_bot": false,
          "headline": "feat: add snapshot_to API across Rust core and all bindings",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-17T12:59:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "296d39bfcac039c819937c9ffe6ab21815978551",
          "body": "The previous commit serialized the two heavy stress tests with a\nMutex so they wouldn't pile their child processes on top of each\nother. That reduced flake probability but missed the root cause:\nthe children treated SQLITE_BUSY as a panic.\n\nSQLITE_BUSY is a normal, recoverable signal under multi-pro\n[…]\ns commit (pure\n  improvement, surfaces panic messages on failure).\n\nMulti-process safety is still verified inside each scenario — the\nparent's final assertions on exact node/edge counts haven't moved.",
          "is_bot": false,
          "headline": "test(multiprocess): retry SQLITE_BUSY in children, drop the mutex",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-17T12:20:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8af021c71ca0e934176d133f938ff169e3677b00",
          "body": "Two issues addressed:\n\n1. concurrent_writers (4 child procs) and stress_writers_with_readers\n   (10 child procs) previously ran in parallel within the same test\n   binary. Combined with cargo's cross-binary parallelism that meant\n   14+ SQLite-writing processes from one binary plus everything else\n \n[…]\n inherited and swallowed by cargo's test-output capture. Now\n   the parent pipes child stderr and prints the captured panic\n   message on failure, so future flakes are diagnostic instead of\n   opaque.",
          "is_bot": false,
          "headline": "test(multiprocess): serialize stress tests + capture child stderr",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-17T12:04:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d6eabbc01c763d50440514e43070c57209de6056",
          "body": "PyPI and npm rendered empty long-description sections on the v0.1.0\npackage pages because neither pyproject.toml nor the npm package\nincluded a README. Adds:\n\n- bindings/python/README.md (user-facing intro: install, quick start,\n  cypher snippet, links back to repo).\n- bindings/python/pyproject.toml\n[…]\not bumping the version — this lands now for the next release\n(v0.1.1). The crates.io page already renders the root README via\nCargo workspace inheritance; pkg.go.dev already has bindings/go/README.md.",
          "is_bot": false,
          "headline": "docs(bindings): add user-facing READMEs for Python and Node packages",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T17:46:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "49d1fcb22fb14ec4f0a48667872df46903cd3e63",
          "body": "The release-go.yml workflow and docs/publishing.md were both using\n\\`vX.Y.Z-go\\` as the Go-module tag. Go's module spec requires\nsubdirectory modules to be tagged with the subdir path as a prefix\n(\\`bindings/go/vX.Y.Z\\`); the bare/suffix form is not recognized by\nproxy.golang.org or pkg.go.dev for s\n[…]\nop prevention), so release-go.yml needs a manual\ndispatch for the first release after publish-tag-release runs. Update\ndocs/publishing.md to recommend \\`gh workflow run release-go.yml -f tag=vX.Y.Z\\`.",
          "is_bot": false,
          "headline": "docs+ci(go): fix Go-module tag to bindings/go/vX.Y.Z",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T17:01:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2489d85e1c77602ab3f568db54e348e2813429bb",
          "body": "The publish-npm job invoked `napi create-npm-dirs` (plural), which v2.x\ndoesn't accept. Verified locally — singular plus `-t .` iterates all\ntriples from package.json and creates per-platform dirs.",
          "is_bot": false,
          "headline": "fix(ci): napi-rs v2 CLI is `create-npm-dir` (singular)",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T16:25:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "254e99cdd2dfbd51f6386928d12c12a9f949a423",
          "body": "Three changes that together make tag-push the canonical release path\nfor the npm package, mirroring what python-wheels.yml does for PyPI:\n\n- bindings/node/package.json: add the two musl triples\n  (x86_64-unknown-linux-musl, aarch64-unknown-linux-musl) to the napi\n  triples list so napi-rs creates pe\n[…]\ncan migrate to OIDC).\n- .github/workflows/python-wheels.yml: add skip-existing: true to\n  the PyPI publish step so re-firing the tag against an already-\n  published version no-ops instead of erroring.",
          "is_bot": false,
          "headline": "ci: wire npm publish into Build & Release on tag push",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T15:50:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "80f6bc00c6d52d7677849c6fb7674d528bea9fa4",
          "body": "maturin's sdist build pulled the workspace root LICENSE in via Cargo\nlicense.workspace = true, AND the per-package bindings/python/LICENSE\nvia the pyproject.toml license-files directive — both targeted at\ngraphdblite-0.1.0/LICENSE inside the sdist, which maturin rejects as\na duplicate.\n\nDelete the p\n[…]\nENSE and bindings/node/LICENSE stay — Go modules and\nnpm packages each ship as standalone artifacts that pkg.go.dev and\nnpm display their own LICENSE for. Only the Python case had the\nsdist collision.",
          "is_bot": false,
          "headline": "fix(python): drop duplicate bindings/python/LICENSE to unblock sdist",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T14:52:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "764990115d240d1399ebe8636bb9f56ed48901bd",
          "body": "Replace the placeholder \\\"First public release.\\\" with sections covering\ncore (embedded SQLite/WAL/ACID), query language (Cypher + 100% TCK),\ntypes (temporal + values), transactions (stateful + RAII), storage\n(adjacency-list + indexes), language bindings (Rust/Python/Node/Go/C),\nand the locked-down public API surface. Also bump the date from\n2026-05-15 to 2026-05-16 to match the actual tag day.",
          "is_bot": false,
          "headline": "docs: write a real 0.1.0 changelog entry",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T14:20:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4f6e187cd6a45274d19e3891b346bf18c19a207",
          "body": "The mlugg/setup-zig action runs on the Node.js 20 actions runtime, which\nGitHub force-migrates to Node 24 on 2026-06-02 (17 days from now) and\nremoves entirely 2026-09-16. The setup-zig project has moved primary\nhosting to Codeberg per the v2.2.1 release notes, so the GitHub mirror\nis unlikely to sh\n[…]\ni-rs uses zig as the\nC cross-compiler.\n\nPinned to ZIG_VERSION=0.14.1 — manual bumps when needed; Zig is only\na build dep here, not part of the published surface, so reproducibility\nbeats auto-updates.",
          "is_bot": false,
          "headline": "ci: inline zig install; drop mlugg/setup-zig@v2 ahead of Node 20 sunset",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T13:07:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3c1ad681e44029f7be9f80a75a2800bbcb852875",
          "body": "Cuts STABILITY.md from 179 to 37 lines. The trim drops content that\neither drifts faster than the doc (per-item public-surface listing —\ncargo doc is authoritative), overpromises (per-signature stability\ntable at pre-1.0), or duplicates other docs (binding compliance —\nthat's BINDING_CONFORMANCE.md'\n[…]\nr before 1.0\"),\nwhat's public vs pub(crate), soundness guarantees that are enforced\nin code, and the security note for binding authors about untrusted\npaths. That's what callers actually need to know.",
          "is_bot": false,
          "headline": "docs(stability): trim to minimum; don't overpromise pre-1.0",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T12:24:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6865ab256af220fcde27978c14c3da1b744e1bc9",
          "body": "bindings/ffi/build.rs skips cbindgen when HOST != TARGET and falls back\nto copying a pre-existing bindings/ffi/graphdblite.h. Cross-compiled\nFFI builds (linux musl, linux aarch64, macos x86_64 from arm64 host,\nwindows-gnu from MSVC host) had no header on disk so the Package step\nfailed with: cp: can\n[…]\n/ffi/graphdblite.h.\n\nAdd an explicit host `cargo check -p graphdblite-ffi` before the\ntarget build to run build.rs natively and produce the header. Cheaper\nthan `cargo build` since check doesn't link.",
          "is_bot": false,
          "headline": "ci: pre-generate FFI header on host before cross builds",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T03:50:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c8cdbeb76add74c468e061bf76220aaaeeda0027",
          "body": "…odes\n\nRename Dev Build → Build & Release. Two trigger modes share one matrix:\n  - workflow_dispatch  → republishes rolling `dev-latest` prerelease\n  - push of a v* tag    → publishes a fixed release at that tag\n\nCLI / FFI / Node addon matrices now cover the same 7 targets the wheels\nmatrix already \n[…]\n-only filler for the old\nlocal-build flow) — its job is subsumed.\n\nUpdates docs/publishing.md to point at the CI flow as the canonical\nrelease path; scripts/publish-release.sh kept for forgejo mirror.",
          "is_bot": false,
          "headline": "ci: extend Build & Release to full 7-platform matrix; split publish m…",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T03:19:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3ddf779725822cacb29d1dd21a776d63cd6c939f",
          "body": "CI failure on commit 05f18a2: dropping `pub mod procedures` from the\npublic surface broke the in-crate tck_support module, which had\nimported through that public path. The pre-push gate didn't catch it\nbecause `cargo test --workspace` doesn't enable any features and the\ntck_support module is gated b\n[…]\nfeatures` before the test step so feature-gated\nmodules (tck-support, dhat-heap, fuzzing) get type-checked locally\nbefore push. This is the only thing that would have caught the\nupstream import break.",
          "is_bot": false,
          "headline": "fix(tck): rewire tck_support imports through crate::cypher::procedure",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T02:40:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "05f18a2b8dca17383a668a354b5080ee5e867468",
          "body": "No first-party binding consumes the procedure registry — the TCK harness\nis the only caller and reaches it through pub(crate) paths. Exposing the\nshape now would commit to an API designed against a mocks-only workload,\nahead of any real use case. Removing it from 0.1.0 keeps the public\nsurface minimal and leaves room to design it properly when a binding\nactually needs it.\n\nPublic surface is now just `pub mod graphdblite` (per cargo public-api).",
          "is_bot": false,
          "headline": "chore(api): drop procedures::* from public surface for 0.1.0",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T02:04:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb48bf277834feaea6c123d9f6f660f77ba4a370",
          "body": "Three findings from cargo public-api review against STABILITY.md:\n\n- graphdblite::types was a fully public module path, exposing the\n  validate_name/validate_name_length/validate_properties internal\n  helpers and a second name for every re-exported type. Drop to\n  pub(crate); add Result to the root \n[…]\nperimental\"\n  to match its actual state (TCK harness is the only consumer).\n\nREADME: one-line clarifier on cargo install (CLI) vs cargo add\n(library) — both appeared in the README without explanation.",
          "is_bot": false,
          "headline": "chore(api): tighten public surface ahead of 0.1.0",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T01:29:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3126c4426b21c6096ac32ba4287c3c4d46ff42d4",
          "body": "- Add [package].exclude for tests/tck/features, tests/tck/graphs, and\n  skiplist.txt. These are TCK fixtures consumed only by the tck-support\n  test binary; bundling them in the crates.io tarball tripled its size\n  for no downstream benefit. Package drops from 374 files / 500 KiB to\n  148 files / 37\n[…]\n  and not used by our build (rules out scripts/); contrib/ is the\n  conventional home for supplementary files destined for external tools.\n- Update the sole reference in docs/sqlite-application-id.md.",
          "is_bot": false,
          "headline": "chore: shrink published crate and relocate sqlite-magic.patch",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T01:02:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ee5407e5a8f19717a5e41454e07d0291ce4c3c29",
          "body": "… into docs/\n\n- Remove public-api.txt and the cargo-public-api CI job. Public surface\n  drift will be reviewed manually during release prep instead of via a\n  committed snapshot; STABILITY.md updated accordingly.\n- Remove justfile. It was a thin wrapper over scripts/publish-release.sh\n  and docker c\n[…]\n is the active path. Restore from local backup if Forgejo\n  CI is resumed.\n- Move SPEC.md to docs/spec.md (it's reference doc, not landing\n  material) and add a README link so it's actually navigable.",
          "is_bot": false,
          "headline": "chore: prune public-api gate, justfile, .forgejo workflows; move SPEC…",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-16T00:24:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a6eecd9cac66d34df30d9f870d8a29b14b3e9893",
          "body": "…e-magic.patch out of docs\n\npython-wheels.yml previously only built macOS wheels and was\nworkflow_dispatch only — so a tag push wouldn't actually publish\nanything to PyPI without a separate manual step. The expected\n'local-built linux/windows + CI macOS' flow was never wired up.\n\nReplaced with a tag\n[…]\nwn; the patch is a project-authored artifact\nthe maintainer will eventually mail to drh@sqlite.org for upstream\nfile(1) magic-byte registration. Updated the reference in\ndocs/sqlite-application-id.md.",
          "is_bot": false,
          "headline": "ci+chore: rebuild python-wheels.yml for full PyPI publish; move sqlit…",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-15T23:29:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "74d83d4ac515c046aa0dbecc782f1771af12d05c",
          "body": null,
          "is_bot": false,
          "headline": "chore(gitignore): exclude docs/superpowers/ — internal AI planning docs",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-15T23:19:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "535db935b21cafb24514d38ddd005e04450c5089",
          "body": "The zig-wheels service produced Linux Python wheels via cargo-zigbuild,\nwhich broke against Rust 1.95's ELF layout (lld in cargo-zigbuild 0.22.2\nmishandled section sizes — sh_size 0x20000000000063 etc). manylinux is\nPyPA's official wheel-portability spec and works without zig, so this\nswap aligns lo\n[…]\nnto every container.\n\nVerified: all four wheels produced cleanly with proper manylinux_2_28 /\nmusllinux_1_2 tags. Each ~2.8-3.0 MiB. aarch64 builds take ~14 min\nunder qemu vs ~5 min native for x86_64.",
          "is_bot": false,
          "headline": "build: replace zig-wheels with PyPA manylinux/musllinux services",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-15T22:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "576fc2f5f5d6af53282d7477e1b74a5a5b49fccc",
          "body": "One column-header drift caught by the release-time test gate:\n\n  Return6 - Implicit grouping with aggregates::[17]\n  - golden:  38 + avg(person.age) - 1000\n  + actual:  $age + avg(person.age) - 1000\n\nThis is an intentional consequence of the plan-cache work (commit\n'feat(plan-cache): param-agnostic planner via LookupKey + EvalCx').\nColumn names now reflect the query as written rather than the\nresolved parameter value, so the same cached plan is reusable\nacross all $age values.",
          "is_bot": false,
          "headline": "test: bless record_columns_golden for param-agnostic planner",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-15T12:09:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "426b6a241c2db1877c1b5da9821e1f559f779e8e",
          "body": "- Replaces legacy author identity with 'ds7n' in 15 working-tree files:\n  - LICENSE files (root + 4 binding subdirs)\n  - SPDX header comments in 7 source files\n  - bindings/python/pyproject.toml authors field\n  - bindings/node/package.json author field\n  - docs/publishing.md examples\n- CHANGELOG.md \n[…]\nst.\n\nNote: a fictional actor-name reference remains in\ntests/tck/features/clauses/create/Create4.feature — that's a\nvendored openCypher TCK fixture\n(Matrix-themed scenario), not an identity reference.",
          "is_bot": false,
          "headline": "chore: scrub legacy author identity and strip v0.1.0 CHANGELOG body",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-15T02:59:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b6d97f0b559ac21c254764ac2fa03a507d2b61d2",
          "body": "- Cargo.toml: add workspace-level repository/homepage/documentation/\n  readme/keywords/categories (required for proper crates.io listing).\n- pyproject.toml: add authors, keywords, classifiers (incl. Python\n  3.10-3.13), and [project.urls] for PyPI.\n- package.json: add author, keywords, homepage, rep\n[…]\n- 2026-05-15. Fixed stale\n  MSRV mention (was '1.82 (required by Option::is_none_or)'; now 1.90).\n\nValidated: `cargo publish --dry-run` packages clean (381 files, 519 KiB\ncompressed) with no warnings.",
          "is_bot": false,
          "headline": "release: prepare v0.1.0 metadata and changelog",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-15T02:37:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f492f25c42753a6b6599e4d8b8eadc45a0f5235c",
          "body": "The 1.82 -> 1.85 bump earlier today resolved the indexmap/clap_builder/\ngetrandom cascade but the very next test run hit napi-build@2.3.1\nrequiring rustc 1.88, proving 1.85 was already too tight on the day\nwe chose it. Going to 1.90 (released ~Aug 2025, ~9 months old) gives\nmeaningful headroom against the next dep cascade while staying well\nwithin the practical install base. The \"recommended\" toolchain is\nwhatever 'stable' resolves to in CI — currently 1.95.",
          "is_bot": false,
          "headline": "build: bump MSRV from 1.85 to 1.90",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-13T01:40:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0261f6c11a0a39f7c895928f0a28e5e86bd6c84",
          "body": null,
          "is_bot": false,
          "headline": "ci: pin astral-sh/setup-uv to v8.1.0 (no floating major tag exists)",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-13T01:22:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17f34b2309375be6702dfe683530b65b7713b9e8",
          "body": null,
          "is_bot": false,
          "headline": "ci(full-matrix): comment out macos-latest to conserve credits",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-13T01:18:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d911271abcdbcbb5c5c3de06854b8a467648628d",
          "body": "GitHub Actions deprecated Node.js 20 (forced to Node 24 starting\nJune 2 2026, removed September 16 2026). Bumps all first-party and\nknown third-party actions to their latest major:\n\n  actions/checkout       v4 -> v6\n  actions/setup-node     v4 -> v6\n  actions/setup-go       v5 -> v6\n  actions/upload\n[…]\nDependencies file is not\nfound ... Supported file pattern: go.sum\" warning by passing\n`cache: false` to actions/setup-go — the Go binding has no\nnon-stdlib deps so there's nothing meaningful to cache.",
          "is_bot": false,
          "headline": "ci: bump actions to Node 24-compatible majors",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-13T01:14:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c8117e86ab34fc9d6683e2ae153324230968bf6c",
          "body": "ci.yml runs on every push to main + every PR — gives external\ncontributors green/red checks on their PRs regardless of whether\nthe self-hosted Forgejo runner is up.\n\nci-full.yml runs weekly (Mon 07:00 UTC) + on push to main; skipped\non PRs to avoid burning matrix runners on every iteration.\n\nWorkflows were previously workflow_dispatch only and disabled on\ngithub; with these triggers they'll auto-run on the next push.",
          "is_bot": false,
          "headline": "ci: add push/PR triggers to github CI workflows",
          "author_name": "ds7n",
          "author_login": "ds7n",
          "committed_at": "2026-05-13T01:06:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 4,
      "commits_last_year": 421,
      "latest_release_at": "2026-07-08T17:46:15Z",
      "latest_release_tag": "v0.1.2",
      "releases_from_tags": false,
      "days_since_last_push": 14,
      "active_weeks_last_year": 10,
      "days_since_latest_release": 18,
      "mean_days_between_releases": 16.9
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 28,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "graphdblite",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "cypher",
            "database",
            "embedded",
            "graph",
            "sqlite",
            "database",
            "database-implementations"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/graphdblite",
          "is_deprecated": false,
          "latest_version": "0.1.2",
          "repository_url": "https://github.com/ds7n/graphdblite",
          "versions_count": 3,
          "total_downloads": 56,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 19,
          "first_published_at": "2026-05-16T16:33:49.925848Z",
          "latest_published_at": "2026-07-09T01:49:42.749992Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 18
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 2,
      "watchers": 1,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "bindings/ffi/Makefile",
        "bindings/go/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "bindings/python/python/graphdblite/py.typed"
      ],
      "toolchain_manifests": [
        "Cargo.toml",
        "benches-crate/Cargo.toml",
        "bindings/ffi/Cargo.toml",
        "bindings/go/go.mod",
        "bindings/node/Cargo.toml",
        "bindings/python/Cargo.toml",
        "fuzz/Cargo.toml"
      ],
      "largest_source_bytes": 180880,
      "source_files_sampled": 116,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "benches-crate/Cargo.toml",
        "fuzz/Cargo.toml"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates"
      ],
      "dependencies": [
        {
          "name": "rusqlite",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.32"
        },
        {
          "name": "rmp-serde",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "indexmap",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "pest",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "pest_derive",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "regex",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "chrono",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4.44"
        },
        {
          "name": "chrono-tz",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10.4"
        },
        {
          "name": "tracing",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "cucumber",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.21"
        },
        {
          "name": "anyhow",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "graphdblite",
          "manifest": "benches-crate/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tempfile",
          "manifest": "benches-crate/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "criterion",
          "manifest": "benches-crate/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.5"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 1,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "ds7n",
          "commits": 421,
          "avatar_url": "https://avatars.githubusercontent.com/u/270055197?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "audit.yml",
        "bench.yml",
        "ci-full.yml",
        "ci.yml",
        "dev-build.yml",
        "python-wheels.yml",
        "release-go.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": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 10,
            "reason": "project is fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 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": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 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": 6,
            "reason": "4 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "124fc33af5c66abde15d3883489f85d788d47b00",
        "ran_at": "2026-07-27T04:07:08Z",
        "aggregate_score": 4.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-20T10:19:29Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-05-08T13:15:42Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ds7n/graphdblite",
    "host": "github.com",
    "name": "graphdblite",
    "owner": "ds7n"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 50,
      "inputs": {
        "security": 41,
        "vitality": 74,
        "community": 23,
        "governance": 46,
        "engineering": 58
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 74,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "commits_last_year": 421,
              "human_commit_share": 1,
              "days_since_last_push": 14,
              "active_weeks_last_year": 10
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 14 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 14
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "10/52 weeks with commits",
                "points": 6.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 10
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "421 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 421
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 4,
              "latest_release_tag": "v0.1.2",
              "releases_from_tags": false,
              "days_since_latest_release": 18,
              "mean_days_between_releases": 16.9
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "4 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 18 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 18
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~16.9 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 16.9
                    }
                  }
                ],
                "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": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 23,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 2,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "2 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "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": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "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": 22,
            "inputs": {
              "packages": [
                "graphdblite"
              ],
              "dependents": null,
              "ecosystems": "crates",
              "total_downloads": 56,
              "monthly_downloads": 19
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "19 downloads/month across crates",
                "points": 17.3,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 19,
                      "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": 46,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 1,
              "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": "1/1 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1,
                      "decided": 1
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "critical",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 25,
            "inputs": {
              "followers": 2,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "ds7n",
              "public_repos": 5,
              "account_age_days": 127
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "2 followers of ds7n",
                "points": 3.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2,
                      "login": "ds7n"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "5 public repos, account ~0 yr old",
                "points": 6.4,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 5
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "graphdblite"
              ],
              "ecosystems": "crates",
              "any_deprecated": false,
              "min_days_since_publish": 18
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on crates",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 18 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 18
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "3 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": 58,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "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": "7 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 41,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 41,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is fuzzed",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "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": "4 existing vulnerabilities detected",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 57,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock",
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "bindings/ffi/Makefile",
                "bindings/go/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "bindings/python/python/graphdblite/py.typed"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "Cargo.toml",
                "benches-crate/Cargo.toml",
                "bindings/ffi/Cargo.toml",
                "bindings/go/go.mod",
                "bindings/node/Cargo.toml",
                "bindings/python/Cargo.toml",
                "fuzz/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "bindings/ffi/Makefile, bindings/go/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "bindings/ffi/Makefile, bindings/go/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "bindings/python/python/graphdblite/py.typed",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "bindings/python/python/graphdblite/py.typed"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "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": 99,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 180880,
              "source_files_sampled": 116,
              "oversized_source_files": 2
            },
            "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": "2/116 source files over 60KB",
                "points": 54.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 116,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 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": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch crates package 'graphdblite-bench' 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-27T04:07:13.623052Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/d/ds7n/graphdblite.svg",
  "full_name": "ds7n/graphdblite",
  "license_state": "standard",
  "license_spdx": "MIT"
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.27.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计crates.io.