公开记录
软件健康报告模式 0.30.0 · 指标 2.5.0 · 2026-08-03 16:12 UTC

sdsrss / claude-mem-lite

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

JavaScriptMIT★ 49 星标⑂ 3 复刻始于 2026年2月在 GitHub 上查看 ↗
类型命令行工具MCP 服务器如何判定

sdsrss/claude-mem-lite 的健康指数为 100 分中的 71 分,处于「良好」区间。 其得分最高的类别是Vitality(83/100),最低的是Community & Adoption(46/100)。 最近一次更新在 10 天前。 近期的大部分工作由 1 位贡献者完成。

71
总分 / 100
良好

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均,再依据公开记录的分布进行校准,使各等级具有百分位含义;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 34(存在风险)的上限。

71
卓越93-100公开记录中的最高层级(约前 5%);基本满足所有检验标准
优秀80-92各方面均表现强劲;仅有少量不足
良好65-79健康;不足之处有限且可控
中等50-64可接受,但存在明显不足;建议进行审查
薄弱35-49多个领域存在实质性薄弱环节
存在风险20-34存在重大薄弱环节;采用时应保持审慎
危急1-19问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

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

加权总体分 63 经校准后在公布的指数量表上为 71(记录校准 2026-08-02)。

所有权

sdsrss个人账户
3 关注者12 个公开仓库始于 2025年9月

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

软件包生态系统

注册表软件包版本月下载量版本数最近发布
npmclaude-mem-lite3.59.18,08425210 天前

按类别列示的指标

活力

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

83优秀 · 占总体的 21%
评分方式
28.8/36推送新近度 — 最近一次推送于 10 天前
16.6/36提交节奏 — 52 周中有 24 周有提交
18/18提交量 — 最近一年 829 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year829
human_commit_share1
days_since_last_push10
active_weeks_last_year24

发布纪律

98卓越
评分方式
27/27有发布版本 — 已发布 100 个发布版本
36/36发布时效 — 最近一次发布版本于 10 天前
27/27发布节奏 — 约每 0.6 天发布一次
8/10OpenSSF Scorecard:Signed-Releases — 5 out of the last 5 releases have a total of 5 signed artifacts.
所用输入
releases_count100
latest_release_tagv3.59.1
releases_from_tags
days_since_latest_release10
mean_days_between_releases0.6

社区与采用

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

46薄弱 · 占总体的 17%

流行度与采用

30存在风险
评分方式
27.3/60星标 — 49 个星标
2.5/25复刻 — 3 个复刻
0/15关注者 — 0 位关注者
所用输入
forks3
stars49
watchers0
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
readme_badges0
has_contributing
has_issue_template
has_code_of_conduct
readme_badge_services
has_pull_request_template
评分方式
52.1/80月度下载量 — npm 合计每月 8,084 次下载
0/20注册表被依赖数 — 该生态系统不报告此项
所用输入
packagesclaude-mem-lite
dependents
ecosystemsnpm
total_downloads
monthly_downloads8,084
已排除计分(无数据或不适用):注册表被依赖数。 其余权重已重新归一化。

可持续性与治理

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

50中等 · 占总体的 23%
评分方式
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
评分方式
42/42议题解决 — 100% 的议题已关闭
27/30PR 接受 — 已裁定的 PR 中 9/10 已合并
0/13Newcomer PR acceptance — 30 天内没有首次贡献者的 PR 得到裁决
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs9
open_issues0
closed_issues5
prs_merged_7d0
prs_decided_7d0
prs_merged_30d0
prs_decided_30d0
issue_closed_ratio1
closed_unmerged_prs1
first_time_authors_30d0
first_time_prs_merged_30d0
first_time_prs_decided_30d0
已排除计分(无数据或不适用):newcomer_pr_acceptance。 其余权重已重新归一化。
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
4.3/25所有者影响力 — sdsrss 有 3 位关注者
9.9/25既往记录 — 12 个公开仓库,账户约 0 年
所用输入
followers3
owner_typeUser
is_verified
owner_loginsdsrss
public_repos12
account_age_days333
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — npm 上有 1 个软件包
35/35发布时效 — 最近一次发布于 10 天前
20/20版本历史 — 252 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesclaude-mem-lite
ecosystemsnpm
any_deprecated
min_days_since_publish10

工程质量

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

78良好 · 占总体的 19%

工程实践

80优秀
评分方式
24/24CI 工作流 — 2 个工作流
24/24存在测试
16/16Linter 配置 — eslint.config.mjs
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。 其余权重已重新归一化。

文档

75良好
评分方式
30/30README
25/25文档目录
0/15文档 / 主页站点
10/10仓库描述
10/10主题标签 — 20 个主题标签
0/10Wiki
所用输入
topicsclaude-code, fts5, hooks, mcp, memory, persistence, sqlite, agent-memory, ai-coding-assistant, ai-memory, anthropic, claude, claude-code-plugin, hybrid-search, llm-memory, long-term-memory, mcp-server, model-context-protocol, rag, semantic-search
has_wiki
homepage
has_readme
has_docs_dir
has_description

安全

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

55中等 · 占总体的 16%

安全态势

44薄弱
评分方式
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
0/5Fuzzing — project is not 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
2.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 5
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
6/7.5Signed-Releases — 5 out of the last 5 releases have a total of 5 signed artifacts.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
3.8/7.5Vulnerabilities — 5 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4.4
已排除计分(无数据或不适用):ci_tests。 其余权重已重新归一化。
评分方式
35/35直接依赖不含已知公告 — 没有直接依赖携带已知公告
25/25间接依赖不含已知公告 — 没有间接依赖携带已知公告
0/40没有长期未处理的公告 — 没有公告带有发布日期
所用输入
sourceosv
advisories0
affected_packages0
assessed_packages130
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
已排除计分(无数据或不适用):没有长期未处理的公告。 其余权重已重新归一化。 比对的是 npm:claude-mem-lite@3.59.1 的运行时依赖闭包——安装已发布的软件包时真正被拉取进来的内容——共 130 个软件包。 未对可达性进行分析。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?权重刻意设小(4%):代理工具链是一项真实的维护信号,但完全不具备的仓库仍可达到 100/100。

64中等 · 占总体的 4%
评分方式
45/45代理指令 — CLAUDE.md
15/15机器可读文档(llms.txt) — 存在 llms.txt
40/40可读的提交历史 — 100 次人类提交中有 100 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes9,548
评分方式
0/18一条命令的引导启动
22/22自动化测试
11/11Lint / 格式化配置 — eslint.config.mjs
0/11静态类型检查
10/10可复现环境 — lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 100 次由代理编写或署名代理
0/8自动化维护 — 未观察到自动依赖更新
5/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 5
所用输入
has_nix
has_tests
lockfilespackage-lock.json
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share1
toolchain_manifests
dependency_bot_commit_share0
评分方式
0/45可类型检查的代码 — JavaScript,未配置类型检查
52.8/55可控的文件大小 — 采样的 396 个源文件中有 16 个超过 60KB
所用输入
primary_languageJavaScript
largest_source_bytes164,531
source_files_sampled396
oversized_source_files16

机器可读接口

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

关键数据

49GitHub 星标
1贡献者
829最近 12 个月提交数
10距最近推送天数
100发布版本数
1巴士系数(bus factor)
0开放议题
npm软件包生态系统数

数据采集警告

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

更多细节

Star 与 Fork 历史 0 ★ / 3 ⇿
0Star
3Fork
26发布

每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。

12233312026-032026-052026-06
主版本 1次版本 19修订 6
OpenSSF Scorecard 4.4 / 10
4.4综合

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
不适用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
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
5Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 5
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
8Signed-Releases5 out of the last 5 releases have a total of 5 signed artifacts.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
5Vulnerabilities5 existing vulnerabilities detected
直接依赖 3
注册表软件包版本约束清单文件
npm@modelcontextprotocol/sdk^1.26.0package.json
npmbetter-sqlite3^12.6.2package.json
npmzod^4.3.6package.json
全部依赖 未采集

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

依赖安全公告 0

安装 npm:claude-mem-lite@3.59.1 会引入 130 个包(直接与传递):其中 0 个存在已知公告,0 个为直接依赖。

没有已知公告影响已评估的依赖。

公告表示依赖图中记录的版本落入某条公告的受影响范围。可达性未经分析,且依赖图包含开发与测试的版本固定——某项发现可能只涉及工具链而非交付的软件。

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

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

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

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