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

silverstein / minutes

Every meeting, every idea, every voice note — searchable by your AI. Open-source, privacy-first conversation memory layer.

RustMIT★ 1,372 星标⑂ 143 复刻始于 2026年3月在 GitHub 上查看 ↗

silverstein/minutes 的健康指数为 100 分中的 69 分,处于「中等」区间。 其得分最高的类别是Vitality(85/100),最低的是Security(43/100)。 最近一次更新在今天。 近期的大部分工作由 1 位贡献者完成。

69
总分 / 100
中等

软件健康指数

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

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

评分画像

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

所有权

Mat Silverstein个人账户
177 关注者25 个公开仓库始于 2013年6月Business Vacation

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

软件包生态系统

按类别列示的指标

活力

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

85优秀 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 0 天前
13.2/36提交节奏 — 52 周中有 19 周有提交
18/18提交量 — 最近一年 1,297 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 29 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year1,297
human_commit_share1
days_since_last_push0
active_weeks_last_year19

发布纪律

98优秀
评分方式
27/27有发布版本 — 已发布 70 个发布版本
36/36发布时效 — 最近一次发布版本于 5 天前
27/27发布节奏 — 约每 3.9 天发布一次
8/10OpenSSF Scorecard:Signed-Releases — 5 out of the last 5 releases have a total of 5 signed artifacts.
所用输入
releases_count70
latest_release_tagv0.22.1
releases_from_tags
days_since_latest_release5
mean_days_between_releases3.9

社区与采用

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

68中等 · 占总体的 18%
评分方式
50.9/60星标 — 1,372 个星标
17.9/25复刻 — 143 个复刻
0/15关注者 — 2 位关注者
所用输入
forks143
stars1,372
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

70良好
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(MIT)
18/18CONTRIBUTING 指南
0/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template
评分方式
49.7/80月度下载量 — crates, npm 合计每月 5,342 次下载
0/20注册表被依赖数 — 该生态系统不报告此项
所用输入
packagesminutes-cli, minutes-core, minutes-mcp, minutes-sdk, whisper-guard
dependents
ecosystemscrates, npm
total_downloads3,899
monthly_downloads5,342
已排除计分(无数据或不适用):注册表被依赖数。 其余权重已重新归一化。

可持续性与治理

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

64中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
1.4/22.5提交分布 — 头号贡献者编写了 94% 的提交
13.5/13.5贡献者广度 — 23 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 4 contributing companies or organizations
所用输入
bus_factor1
contributors_sampled23
top_contributor_share0.94
评分方式
38.1/46.8议题解决 — 81% 的议题已关闭
35.1/38.3PR 接受 — 已裁定的 PR 中 309/337 已合并
0/15OpenSSF Scorecard:Code-Review — Found 1/30 approved changesets -- score normalized to 0
所用输入
merged_prs309
open_issues31
closed_issues136
issue_closed_ratio0.814
closed_unmerged_prs28
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
16.2/25所有者影响力 — silverstein 有 177 位关注者
22.3/25既往记录 — 25 个公开仓库,账户约 13 年
所用输入
followers177
owner_typeUser
is_verified
owner_loginsilverstein
public_repos25
account_age_days4,774
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — crates, npm 上有 5 个软件包
35/35发布时效 — 最近一次发布于 5 天前
20/20版本历史 — 62 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesminutes-cli, minutes-core, minutes-mcp, minutes-sdk, whisper-guard
ecosystemscrates, npm
any_deprecated
min_days_since_publish5

工程质量

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

81良好 · 占总体的 20%

工程实践

68中等
评分方式
24/24CI 工作流 — 8 个工作流
24/24存在测试
0/16Linter 配置
0/9.6Pre-commit 钩子
0/6.4.editorconfig
20/20OpenSSF Scorecard:CI-Tests — 25 out of 25 merged PRs checked by a CI test -- score normalized to 10
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

文档

100优秀
评分方式
30/30README
25/25文档目录
15/15文档 / 主页站点 — https://useminutes.app
10/10仓库描述
10/10主题标签 — 13 个主题标签
10/10Wiki
所用输入
topicsagent-skills, meetings, ai, claude, mcp, meeting-notes, privacy, rust, speech-to-text, transcription, voice-memo, whisper, parakeet
has_wiki
homepagehttps://useminutes.app
has_readme
has_docs_dir
has_description

安全

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

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

安全态势

43存在风险
评分方式
6/7.5Binary-Artifacts — binaries present in source code
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 25 out of 25 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 4 contributing companies or organizations
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 29 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
1/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
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
0/7.5Vulnerabilities — 82 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate4.3

AI 就绪度

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

81良好 · 占总体的 0%
评分方式
45/45代理指令 — AGENTS.md, CLAUDE.md
15/15机器可读文档(llms.txt) — 存在 llms.txt
40/40可读的提交历史 — 100 次人类提交中有 99 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.99
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes25,923
评分方式
12.6/18一条命令的引导启动 — Cargo.toml, crates/cli/Cargo.toml, crates/core/Cargo.toml(工具链约定,无任务运行器)
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — crates/mcp/tsconfig.json, crates/sdk/tsconfig.json, docs/demo-video/tsconfig.json, docs/demo/tsconfig.json, site/tsconfig.json, tooling/skills/tsconfig.json
10/10可复现环境 — devcontainer, lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 76 次由代理编写或署名代理
0/8自动化维护 — 未观察到自动依赖更新
2/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
所用输入
has_nix
has_tests
lockfilesCargo.lock, package-lock.json
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configscrates/mcp/tsconfig.json, crates/sdk/tsconfig.json, docs/demo-video/tsconfig.json, docs/demo/tsconfig.json, site/tsconfig.json, tooling/skills/tsconfig.json
agent_commit_share0.76
toolchain_manifestsCargo.toml, crates/cli/Cargo.toml, crates/core/Cargo.toml, crates/reader/Cargo.toml, crates/whisper-guard/Cargo.toml, sidecars/diarize-streaming/Cargo.toml, tauri/src-tauri/Cargo.toml
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — Rust(静态类型)
50.8/55可控的文件大小 — 采样的 313 个源文件中有 24 个超过 60KB
所用输入
primary_languageRust
largest_source_bytes688,247
source_files_sampled313
oversized_source_files24
评分方式
0/40API 模式(OpenAPI/GraphQL/proto)
20/20MCP 服务器
40/40可运行示例 — examples
所用输入
example_dirsexamples
has_mcp_signal
api_schema_files

关键数据

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

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch crates package 'minutes-reader' from its registry
  • Could not fetch crates package 'minutes-app' from its registry
  • Could not fetch crates package 'minutes-diarize-sidecar' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index crates:minutes-cli@0.22.1; advisories assessed against the repository dependency graph instead

更多细节

Star 与 Fork 历史 0 ★ / 143 ⇿
0Star
143Fork
70发布

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

0255075100125150143122026-032026-052026-07
主版本 0次版本 21修订 47
OpenSSF Scorecard 4.3 / 10
4.3综合

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

8Binary-Artifactsbinaries present in source code
3Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests25 out of 25 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/30 approved changesets -- score normalized to 0
10Contributorsproject has 4 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 29 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
2Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 2
0SASTSAST tool is not run on all commits -- score normalized to 0
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
0Vulnerabilities82 existing vulnerabilities detected
直接依赖 107
注册表软件包版本约束清单文件
npm@react-three/drei^10.7.7site/package.json
npm@react-three/fiber^9.5.0site/package.json
npm@remotion/player^4.0.446site/package.json
npm@types/three^0.183.1site/package.json
npm@vercel/analytics^2.0.1site/package.json
npmgeist^1.4.1site/package.json
npmnext^16.2.3site/package.json
npmreact^19.2.5site/package.json
npmreact-dom^19.2.5site/package.json
npmremotion^4.0.446site/package.json
npmthree^0.183.2site/package.json
crates.iominutes-core0.22.1crates/cli/Cargo.toml
crates.ioclapcrates/cli/Cargo.toml
crates.ioctrlccrates/cli/Cargo.toml
crates.ioanyhowcrates/cli/Cargo.toml
crates.iotracingcrates/cli/Cargo.toml
crates.iotracing-subscribercrates/cli/Cargo.toml
crates.ioserdecrates/cli/Cargo.toml
crates.ioserde_jsoncrates/cli/Cargo.toml
crates.iochronocrates/cli/Cargo.toml
crates.iohoundcrates/cli/Cargo.toml
crates.iodirscrates/cli/Cargo.toml
crates.ioschemarscrates/cli/Cargo.toml
crates.ioserde_yamlcrates/cli/Cargo.toml
crates.ioureqcrates/cli/Cargo.toml
crates.iocsv1crates/cli/Cargo.toml
crates.iowalkdircrates/cli/Cargo.toml
crates.iopyannote-rscrates/cli/Cargo.toml
crates.ioort=2.0.0-rc.10crates/cli/Cargo.toml
crates.iosymphoniacrates/cli/Cargo.toml
crates.ioserdecrates/core/Cargo.toml
crates.ioserde_jsoncrates/core/Cargo.toml
crates.ioserde_yamlcrates/core/Cargo.toml
crates.iotomlcrates/core/Cargo.toml
crates.iochronocrates/core/Cargo.toml
crates.iothiserrorcrates/core/Cargo.toml
crates.iodirscrates/core/Cargo.toml
crates.iowalkdircrates/core/Cargo.toml
crates.iowhichcrates/core/Cargo.toml
crates.iotracingcrates/core/Cargo.toml
crates.iocpalcrates/core/Cargo.toml
crates.iohoundcrates/core/Cargo.toml
crates.ionotifycrates/core/Cargo.toml
crates.iowhisper-rscrates/core/Cargo.toml
crates.iosymphoniacrates/core/Cargo.toml
crates.ioureqcrates/core/Cargo.toml
crates.iofs2crates/core/Cargo.toml
crates.ioschemarscrates/core/Cargo.toml
crates.iocrossbeam-channelcrates/core/Cargo.toml
crates.iocrossbeam-queuecrates/core/Cargo.toml
crates.iogetrandomcrates/core/Cargo.toml
crates.iointerprocesscrates/core/Cargo.toml
crates.iopyannote-rscrates/core/Cargo.toml
crates.ioortcrates/core/Cargo.toml
crates.iondarraycrates/core/Cargo.toml
crates.iowhisper-guard0.3.0crates/core/Cargo.toml
crates.ionnnoiselesscrates/core/Cargo.toml
crates.iobase640.22crates/core/Cargo.toml
crates.iorusqlitecrates/core/Cargo.toml
crates.iotempfile3crates/core/Cargo.toml
npm@modelcontextprotocol/ext-apps^1.6.0crates/mcp/package.json
npm@modelcontextprotocol/sdk^1.29.0crates/mcp/package.json
npmminutes-sdk0.22.1crates/mcp/package.json
npmyaml^2.8.3crates/mcp/package.json
npmzod^3.25 || ^4.0crates/mcp/package.json
crates.ioserdecrates/reader/Cargo.toml
crates.ioserde_jsoncrates/reader/Cargo.toml
crates.ioserde_yamlcrates/reader/Cargo.toml
crates.iochronocrates/reader/Cargo.toml
crates.iowalkdircrates/reader/Cargo.toml
crates.ioschemarscrates/reader/Cargo.toml
npmyaml^2.8.3crates/sdk/package.json
crates.iotracing0.1crates/whisper-guard/Cargo.toml
crates.iowhisper-rs0.16crates/whisper-guard/Cargo.toml
crates.ioserde1crates/whisper-guard/Cargo.toml
npm@modelcontextprotocol/sdk^1.29.0integrations/claude-cowork-extension/package.json
npmzod^4.3.6integrations/claude-cowork-extension/package.json
crates.ioparakeet-rs0.3.6sidecars/diarize-streaming/Cargo.toml
crates.ioserde_json1sidecars/diarize-streaming/Cargo.toml
crates.iotauri2tauri/src-tauri/Cargo.toml
crates.iotauri-plugin-shell2tauri/src-tauri/Cargo.toml
crates.iotauri-plugin-global-shortcut2tauri/src-tauri/Cargo.toml
crates.iotauri-plugin-dialog2tauri/src-tauri/Cargo.toml
crates.iotauri-plugin-notification2tauri/src-tauri/Cargo.toml
crates.ionotify-rust4.12.0tauri/src-tauri/Cargo.toml
crates.ioserde1tauri/src-tauri/Cargo.toml
crates.ioserde_json1tauri/src-tauri/Cargo.toml
crates.ioserde_yamltauri/src-tauri/Cargo.toml
crates.iominutes-coretauri/src-tauri/Cargo.toml
crates.iochrono0.4tauri/src-tauri/Cargo.toml
crates.iodirs6tauri/src-tauri/Cargo.toml
crates.iolibc0.2tauri/src-tauri/Cargo.toml
crates.iowhichtauri/src-tauri/Cargo.toml
crates.ioportable-pty0.9tauri/src-tauri/Cargo.toml
crates.iobase640.22tauri/src-tauri/Cargo.toml
crates.iofutures-util0.3tauri/src-tauri/Cargo.toml
crates.iominisign-verify0.2tauri/src-tauri/Cargo.toml
crates.ioreqwest0.12tauri/src-tauri/Cargo.toml
crates.iotauri-plugin-pty0.1tauri/src-tauri/Cargo.toml
crates.iotauri-plugin-autostart2tauri/src-tauri/Cargo.toml
crates.iotauri-plugin-updater2tauri/src-tauri/Cargo.toml
crates.iotauri-plugin-window-state2tauri/src-tauri/Cargo.toml
crates.iowalkdirtauri/src-tauri/Cargo.toml
crates.ioureqtauri/src-tauri/Cargo.toml
crates.iowindow-vibrancy0.7tauri/src-tauri/Cargo.toml
crates.ionotify7tauri/src-tauri/Cargo.toml
crates.iotracing0.1tauri/src-tauri/Cargo.toml
全部依赖 未采集

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "agent-skills",
        "meetings",
        "ai",
        "claude",
        "mcp",
        "meeting-notes",
        "privacy",
        "rust",
        "speech-to-text",
        "transcription",
        "voice-memo",
        "whisper",
        "parakeet"
      ],
      "is_fork": false,
      "size_kb": 20121,
      "has_wiki": true,
      "homepage": "https://useminutes.app",
      "languages": {
        "CSS": 43565,
        "HTML": 737849,
        "Rust": 5356949,
        "Shell": 75057,
        "Swift": 59902,
        "Python": 443857,
        "JavaScript": 538869,
        "TypeScript": 748232
      },
      "pushed_at": "2026-07-23T01:30:49Z",
      "created_at": "2026-03-18T06:11:04Z",
      "owner_type": "User",
      "updated_at": "2026-07-23T01:51:18Z",
      "description": "Every meeting, every idea, every voice note — searchable by your AI. Open-source, privacy-first conversation memory layer.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": "https://x1wealth.com",
      "name": "Mat Silverstein",
      "type": "User",
      "login": "silverstein",
      "company": "Business Vacation",
      "location": "United States",
      "followers": 177,
      "avatar_url": "https://avatars.githubusercontent.com/u/4837632?v=4",
      "created_at": "2013-06-26T16:09:19Z",
      "is_verified": null,
      "public_repos": 25,
      "account_age_days": 4774
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.22.1",
          "kind": "patch",
          "published_at": "2026-07-17T19:19:39Z"
        },
        {
          "tag": "v0.22.0",
          "kind": "minor",
          "published_at": "2026-07-16T16:10:44Z"
        },
        {
          "tag": "v0.21.0",
          "kind": "minor",
          "published_at": "2026-07-13T17:00:50Z"
        },
        {
          "tag": "v0.20.0",
          "kind": "minor",
          "published_at": "2026-07-08T21:16:41Z"
        },
        {
          "tag": "v0.19.0",
          "kind": "minor",
          "published_at": "2026-06-25T21:41:51Z"
        },
        {
          "tag": "v0.18.14",
          "kind": "patch",
          "published_at": "2026-06-20T01:34:23Z"
        },
        {
          "tag": "v0.18.13",
          "kind": "patch",
          "published_at": "2026-06-18T10:51:39Z"
        },
        {
          "tag": "v0.18.12",
          "kind": "patch",
          "published_at": "2026-06-15T21:32:25Z"
        },
        {
          "tag": "v0.18.11",
          "kind": "patch",
          "published_at": "2026-06-12T23:40:53Z"
        },
        {
          "tag": "v0.18.10",
          "kind": "patch",
          "published_at": "2026-06-12T17:25:21Z"
        },
        {
          "tag": "v0.18.9",
          "kind": "patch",
          "published_at": "2026-06-11T22:35:42Z"
        },
        {
          "tag": "v0.18.8",
          "kind": "patch",
          "published_at": "2026-06-11T04:48:19Z"
        },
        {
          "tag": "v0.18.7",
          "kind": "patch",
          "published_at": "2026-06-10T21:08:25Z"
        },
        {
          "tag": "v0.18.6",
          "kind": "patch",
          "published_at": "2026-06-08T22:19:14Z"
        },
        {
          "tag": "v0.18.5",
          "kind": "patch",
          "published_at": "2026-06-02T16:07:15Z"
        },
        {
          "tag": "v0.18.4",
          "kind": "patch",
          "published_at": "2026-05-29T06:24:33Z"
        },
        {
          "tag": "v0.18.3",
          "kind": "patch",
          "published_at": "2026-05-29T03:24:33Z"
        },
        {
          "tag": "v0.18.2",
          "kind": "patch",
          "published_at": "2026-05-20T11:08:37Z"
        },
        {
          "tag": "v0.18.1",
          "kind": "patch",
          "published_at": "2026-05-20T07:00:14Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2026-05-14T22:50:51Z"
        },
        {
          "tag": "v0.17.3",
          "kind": "patch",
          "published_at": "2026-05-12T03:42:44Z"
        },
        {
          "tag": "v0.17.2",
          "kind": "patch",
          "published_at": "2026-05-11T19:23:19Z"
        },
        {
          "tag": "v0.17.1",
          "kind": "patch",
          "published_at": "2026-05-11T17:01:11Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2026-05-11T05:19:24Z"
        },
        {
          "tag": "v0.16.5",
          "kind": "patch",
          "published_at": "2026-05-09T16:52:53Z"
        },
        {
          "tag": "v0.16.4",
          "kind": "patch",
          "published_at": "2026-05-07T15:11:11Z"
        },
        {
          "tag": "v0.16.3",
          "kind": "patch",
          "published_at": "2026-05-07T14:07:03Z"
        },
        {
          "tag": "v0.16.2",
          "kind": "patch",
          "published_at": "2026-05-07T05:23:19Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2026-05-04T17:38:42Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2026-04-29T22:45:57Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2026-04-27T20:59:28Z"
        },
        {
          "tag": "v0.14.1",
          "kind": "patch",
          "published_at": "2026-04-23T23:08:08Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2026-04-23T19:25:47Z"
        },
        {
          "tag": "v0.13.3",
          "kind": "patch",
          "published_at": "2026-04-21T16:08:07Z"
        },
        {
          "tag": "v0.13.2",
          "kind": "patch",
          "published_at": "2026-04-18T16:48:17Z"
        },
        {
          "tag": "v0.13.1",
          "kind": "patch",
          "published_at": "2026-04-18T03:27:19Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2026-04-17T00:47:25Z"
        },
        {
          "tag": "v0.12.2",
          "kind": "patch",
          "published_at": "2026-04-15T22:32:35Z"
        },
        {
          "tag": "v0.12.1",
          "kind": "patch",
          "published_at": "2026-04-15T18:52:12Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2026-04-14T16:32:28Z"
        },
        {
          "tag": "v0.11.3",
          "kind": "patch",
          "published_at": "2026-04-13T23:19:43Z"
        },
        {
          "tag": "v0.11.2",
          "kind": "patch",
          "published_at": "2026-04-10T19:17:41Z"
        },
        {
          "tag": "v0.11.1",
          "kind": "patch",
          "published_at": "2026-04-09T23:52:39Z"
        },
        {
          "tag": "plugin-v0.8.0",
          "kind": "other",
          "published_at": "2026-04-09T05:15:01Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2026-04-08T21:43:50Z"
        },
        {
          "tag": "v0.10.4",
          "kind": "patch",
          "published_at": "2026-04-07T18:26:28Z"
        },
        {
          "tag": "v0.10.3",
          "kind": "patch",
          "published_at": "2026-04-07T07:03:31Z"
        },
        {
          "tag": "v0.10.2",
          "kind": "patch",
          "published_at": "2026-04-07T00:43:57Z"
        },
        {
          "tag": "v0.10.1",
          "kind": "patch",
          "published_at": "2026-04-06T21:27:11Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2026-04-06T02:47:29Z"
        },
        {
          "tag": "v0.9.4",
          "kind": "patch",
          "published_at": "2026-04-02T17:55:35Z"
        },
        {
          "tag": "v0.9.3",
          "kind": "patch",
          "published_at": "2026-04-01T18:21:24Z"
        },
        {
          "tag": "v0.9.2",
          "kind": "patch",
          "published_at": "2026-04-01T02:00:48Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2026-03-31T16:36:07Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2026-03-31T16:03:13Z"
        },
        {
          "tag": "v0.8.5",
          "kind": "patch",
          "published_at": "2026-03-31T02:47:32Z"
        },
        {
          "tag": "v0.8.4",
          "kind": "patch",
          "published_at": "2026-03-29T22:17:02Z"
        },
        {
          "tag": "v0.8.3",
          "kind": "patch",
          "published_at": "2026-03-29T14:28:57Z"
        },
        {
          "tag": "v0.8.2",
          "kind": "patch",
          "published_at": "2026-03-28T23:08:05Z"
        },
        {
          "tag": "v0.8.1-live-coach",
          "kind": "prerelease",
          "published_at": "2026-03-28T14:28:41Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-03-27T00:25:54Z"
        },
        {
          "tag": "v0.7.3",
          "kind": "patch",
          "published_at": "2026-03-25T05:07:46Z"
        },
        {
          "tag": "v0.7.2",
          "kind": "patch",
          "published_at": "2026-03-24T22:22:53Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-03-24T19:31:57Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-03-24T17:36:53Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-03-24T14:51:08Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-03-23T01:42:36Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-03-22T16:58:16Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-03-21T16:51:49Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-03-20T15:43:29Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "3b13375e14897a575ddfcdd9cbcc6367f709b73d",
          "body": "Adds a generic text-archive source to minutes import (issue #515):\nrecursively converts .md/.markdown/.txt transcripts and notes into\nMinutes meeting files with deterministic title/date/attendee inference\n(frontmatter, Date: lines, filename patterns, mtime fallback), YAML-safe\nfrontmatter, 0600 perm\n[…]\nin Minutes\nformat, files inside the output dir, and unreadable/non-UTF-8 files\nwithout aborting the batch. No LLM or network calls.\n\nCloses #515\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(import): add minutes import text for existing text archives (#516)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-21T23:11:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c0a356a16a1d9d3582b9b5f34777ad70ee4f8d0a",
          "body": "The Site Release Link Consistency job on main went red after #514 merged\nwithout rerunning scripts/sync_site_release_version.mjs (test count moved\nto 1581).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(site): regenerate release constants after dictation test additions",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-21T22:49:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "146d062f6ff9ab232c789712890ec734360493fe",
          "body": "…ry (#509)\n\nDictation would hang and mis-report a missing whisper model as\n\"mic silent, check input device\" — the model load stalled before any\naudio level was emitted, so the overlay fell through to its generic\nlevel-timeout string. This sent users chasing a microphone/TCC problem\nthat didn't exist\n[…]\nt tests + code\nreview; interactive click-test still recommended before release.\n\nCo-authored-by: Mat Silverstein <mat@x1wealth.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(dictation): graceful missing-model handling with one-click recove…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-21T18:27:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d45c92310dea7ad9cc5fb009771ac9c7e3d539b9",
          "body": "…lision) (#512)\n\n`vocabulary add` derived an entry id via ASCII-only slugification, so a\ncanonical with no ASCII letters/digits (Cyrillic, CJK, etc.) produced an\nempty slug and collapsed to the bare `<kind>` (`term`/`acronym`/\n`organization`). Several such entries then shared one id, making\n`vocabul\n[…]\nary remove`: match by id OR exact canonical, so non-Latin\n  entries can be removed by the term the user typed, not an opaque hash.\n\nCloses #511\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(vocabulary): unique id for non-ASCII canonicals (no bare-kind col…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-21T18:27:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fa8171966c63b524a35c01b23d7b26b0d03f9a12",
          "body": null,
          "is_bot": false,
          "headline": "ci: add protected signed dev acceptance [skip ci]",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-18T17:45:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18e2c616d68a78ce9a9b5d3af14c720970149166",
          "body": "* docs(plans): first-class voice enrollment design + phasing\n\nResearch + design for making voice enrollment first-class: three-legged\n(active enrollment, passive confirm-once learning, on-device privacy),\ngrounded in the existing voice.rs/voices.db/embedding-sidecar machinery\nand 2026 speaker-verifi\n[…]\nembed_solo_clip needs models to test; do it post-trust with a shared helper.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(plans): first-class voice enrollment design + phasing (#495)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-18T14:49:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0f43e92502303572a4f12666f45ee645fe6b3bb5",
          "body": "… bundle (#507)\n\nloadMeetings() awaited loadProactiveContextBundle() *before* fetching and\nrendering the list. That bundle runs several corpus-wide scans (search +\nconsistency report + graph rebuild), so on launch the meetings list — and\nthe whole main view — stayed blank until all of it finished.\n\n\n[…]\nive bundle in the background and re-render once it resolves so the\nambient-context card still appears. First paint is no longer gated on the\nbundle.\n\nCo-authored-by: Mat Silverstein <mat@x1wealth.com>",
          "is_bot": false,
          "headline": "perf(desktop): don't block meetings-list first paint on the proactive…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-18T14:49:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "230e431280d1c3c6f6c967aa081146590773259c",
          "body": "…aults (WU5-config) (#506)\n\nAdds the [voice] privacy knobs the voice-enrollment Phase 1 safe foundation\nneeds (docs/plans/voice-enrollment-phase1-spec.md, WU5): store_meeting_embeddings,\npassive_candidate_capture, candidate_retention_days, restricted_meetings_eligible,\nretain_non_self_embeddings. De\n[…]\nnrollment-from-history keeps working.\n\nConfig-only (VoiceConfig struct) — no collision with the in-flight\nconversation-trust config.rs changes.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(config): granular voice-privacy settings with biometric-safe def…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-18T00:10:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f3cf81fa35ab87351bf5f09c7b455107c1c017e5",
          "body": null,
          "is_bot": false,
          "headline": "feat(voice): add immutable sample profiles (#505)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-17T23:20:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87eff6010e949a8a9264b6966ec95631f019f2bf",
          "body": "* fix(permissions): retry transient input probe outcomes (#501)\n\n* chore(site): sync test count for #501 probe retry tests (1559→1561)\n\nTwo new cross-platform unit tests (classify_probe_status,\nresolve_runtime_issue) added by the #501 fix. Regenerated via\nscripts/sync_site_release_version.mjs.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(permissions): retry transient input probe outcomes (#504)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-17T21:20:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1cd2debf52a98b82b858a3240aa767c139389d00",
          "body": "…) (#503)\n\n.chat-messages inherited user-select: none from the body rule, so users\ncouldn't select or copy assistant answers or transcript snippets in the\nRecall panel. Add an explicit user-select: text override (plus -webkit-\nprefix for the WKWebView) scoped to the chat message container.\n\nCloses #490\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(desktop): make Recall/chat panel text selectable + copyable (#490…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-17T20:24:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8707de0d9a46fb56464e932ef7f02cc696352d50",
          "body": null,
          "is_bot": false,
          "headline": "fix release registry publish workflow",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-17T19:32:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bd03080c758f7d4a04ee5ef0ccda72c23691c81",
          "body": "Pin crates/mcp to the exact minutes-sdk 0.22.1 that release-publish.yml\npublishes first, with the resolved tarball + integrity, so the tag\nworkflow's strict npm ci for mcp resolves the freshly-published SDK.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: pin minutes-sdk 0.22.1 for mcp",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-17T19:07:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9913babb8435f1d147411c5c6c85f471d934da40",
          "body": "Patch release. Bugfixes only.\n\n- fix(hotkey): stop the system-wide CGEventTap leak — a permission probe\n  created a kCGHIDEventTap every 15s and never invalidated it, exhausting\n  the system tap table and freezing keyboard/mouse (and crashing\n  WindowServer) after the app ran a few hours; quitting M\n[…]\ntect PipeWire system-audio sinks on Linux.\n  (#489, thanks @gtheys)\n- fix(summarize): support the Apple engine for speaker mapping. (#487, #498)\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): 0.22.1 (#502)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-17T18:28:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "464295c580f17177b4ad3d9f715532ab624cfea2",
          "body": "… (#493)\n\n* fix(parakeet): don't misreport benign helper exits as argv/#163 drift\n\nlog_parakeet_helper_failure_once printed the same \"check that every argv\nflag is accepted by the ParakeetHelper clap struct (issue #163)\" warning\nfor ANY non-zero helper exit. But the host-process helper also exits\nno\n[…]\nuthored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Mathieu Silverstein <silverbook@M-MacBook-Pro.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(parakeet): don't misreport benign helper exits as argv/#163 drift…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-17T18:08:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e3931212089e89cc637e84249fe88373da976892",
          "body": "…15s (#488) (#500)\n\ninput_monitoring_runtime_issue() created and tore down a real\nkCGHIDEventTap on every 15s permission-monitor poll (for users who granted\nInput Monitoring) just to detect a \"granted but unusable\" state. That state\nis fixed for the process lifetime -- it's only cleared by restartin\n[…]\nso it runs exactly once per launch, preserving the\ndiagnostic with zero ongoing churn. Complements the CFMachPortInvalidate\nteardown fix (#499).\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(permissions): probe Input Monitoring once per process, not every …",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-17T17:47:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1f89523b09b677459f9d8b73aee704ac105cfce4",
          "body": "…em-wide tap leak (#488) (#499)\n\n* fix(hotkey): invalidate CGEventTap Mach port on teardown to stop leak (#488)\n\nrun_event_tap tore down with CGEventTapEnable(false) + CFRelease but never\ncalled CFMachPortInvalidate, so each tap was left registered in the\nsystem's 512-entry event-tap table as a disa\n[…]\n. Add CFMachPortInvalidate there for completeness,\nmatching the teardown fix.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(hotkey): invalidate CGEventTap Mach port on teardown to stop syst…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-17T14:43:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3cf919648ed86c20041a05687c132fd2658505a2",
          "body": "#439 added the \"apple\"/\"apple-fm\" engine arm to summarization and title\nrefinement (and the speaker_mapping_model_hint metadata), but not to the\nspeaker-mapping executor run_speaker_mapping_prompt, so engine = \"apple\"\nfell through to the \"Unknown engine: apple\" catch-all and Level-1 speaker\nmapping \n[…]\no multimodal input; macOS gating and graceful degrade already\nwork (map_speakers logs-and-continues on any engine error).\n\nReported by @jmh1313.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(summarize): support Apple engine for speaker mapping (#487) (#498)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-17T06:47:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fa413794217811dfb52580703a779aa04e0ec010",
          "body": "…cOS 15 (#494) (#497)\n\nThe bundled Swift helpers (system_audio_record, mic_check, calendar-events)\nwere compiled with swiftc and no -target. swiftc ignores\nMACOSX_DEPLOYMENT_TARGET (unlike clang/ld), so it stamped each helper's\nLC_BUILD_VERSION minos from the host SDK -- macOS 26 on the macos-latest\n[…]\necording paths stay weak-linked behind @available/#available guards, so\nthe binaries load on macOS 14+ and run on 15+.\n\nReported by @Victors081.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(build): pin Swift helper deployment targets so 0.22.0 loads on ma…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-17T06:47:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "80d7c3509c29bc8934158a49c010aaf11c99085c",
          "body": "* fix(core): let `--call` auto-detect PipeWire system-audio sinks\n\n`CapturePlan::system_audio_ready()` only recognized name patterns\n(BlackHole, .monitor, Teams Audio, etc). `detect_loopback_device()`\nalready picks a real PipeWire sink (speaker/headphones/Bluetooth A2DP)\nas the system-audio route vi\n[…]\no behavior change.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Mat Silverstein <matsilverstein@gmail.com>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(core): let --call auto-detect PipeWire system-audio sinks (#489)",
          "author_name": "Geert Theys",
          "author_login": "gtheys",
          "committed_at": "2026-07-17T05:22:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f05aa87bd4e3a3556f0e5a48e8ace66c11f68d21",
          "body": "Tag-triggered release-publish.yml publishes minutes-sdk, minutes-mcp,\nminutes-core, and minutes-cli with zero stored credentials: npm OIDC\ntrusted publishing (with provenance) and crates.io via\nrust-lang/crates-io-auth-action. Deny-all default permissions,\nid-token:write only on publish jobs, everyt\n[…]\needed\na cross-machine key. docs/release/trusted-publishing.md carries the\none-time registry-side setup; procedure.md now ends at \"push the tag\".\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(release): OIDC trusted publishing for npm + crates.io (#486)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T19:15:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "51d2d13c321e3ddafabbee4f6172f4c203167eed",
          "body": null,
          "is_bot": false,
          "headline": "release: pin minutes-sdk 0.22.0 for mcp",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T15:45:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf225e9eed6c8264111ec91b2455a4c801035e8d",
          "body": "…es (#485)\n\nFirst release through the new rails: single-command transactional bump\n(scripts/bump-version.mjs), all Domain-1 sources verified by\ncheck_version_sync. Notes drafted per the /minutes-release-notes skill.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): bump version to 0.22.0 across all sources + draft not…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T05:11:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "32f80062c6bd045292715562705603d3a96f9c95",
          "body": "…s (#484)\n\nTwo hand-repeated workflows encoded as canonical skills (23 total).\nRelease notes: commit-range classification, release-voice conventions\n(incl. the no-em-dash rule from 88ded28), version-sync checklist. SEO\nwave: the #435-#438 methodology (SERP recon, DESIGN.md token\nconstraints, interna\n[…]\n\nspecifics deliberately kept out of the public repo. Full compiler gate\ngreen: 33 tests, ownership audit, goldens, compile:dry across all hosts.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(skills): minutes-release-notes + minutes-seo-wave workflow skill…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T04:10:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "43c55de8fa33990715118d8ab2829269a785a708",
          "body": "…(#483)\n\nCross-agent (CLAUDE.md + AGENTS.md, matching text): wrong rewrite/merge\nworse than none (every-name-right, #385 series); recording never\ndegraded by an optional consumer (RFC 0004 failure isolation, enforced\nby the capture-reliability suites); auto-update off until hosted\nmanifest + rollback UX (auto-update-evaluation.md). Pointers, not\nenforcement — each names its primary control.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(agents): promote three proven decisions into agent instructions …",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T03:59:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8fee02097daf575cdd5a83f6e6beb900c92abdf2",
          "body": "…ndary (#482)\n\n* feat(core): capture-reliability invariant suites + engine process boundary\n\nEncodes the invariants behind the silent transcript/audio-loss class\n(Cristy blank-transcript loss; live-sidecar inference starvation;\n#395/#396, #409, #412/#414, #467) as tests, so a fifth recurrence fails\n\n[…]\ned it. One sweep confirms no direct\nCommand::new remains outside the wrapper.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(core): capture-reliability invariant suites + engine process bou…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T03:55:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f0a1e17d6745202ac492b68edf44dcd5c71d4bb1",
          "body": "… (#481)\n\nEncodes the publish ordering that bit twice (mcp shipped depending on\nan unpublished minutes-sdk — the v0.19.0/v0.20 lag). scripts/release.mjs:\nphase1 packs+tests+publishes the sdk and polls the registry for exact\nvisibility; phase2 commits ONLY the exact mcp pin + lockfile (diff\nasserted)\n[…]\nrkflow now gates artifacts on a\nrelease_readiness job running the --release invariant, so a manual tag\non a transitional tree publishes nothing.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): two-phase committed release flow with provenance gates…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T03:13:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3151a46d828e1388ea5d4d3374ef93308c6f0000",
          "body": "beads_reaper.mjs is a report-only local script (beads state is local\nDolt — never hosted CI) surfacing the three drift classes that\naccumulated historically: in_progress idle >30d (29 today), open issues\nmatching merged PR titles, and exact-duplicate titles. PLAN.md gets a\nstatus banner pointing at the live sources of truth — it reads as a\ncurrent tracker but stopped being one in April.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(tracker): local beads reaper + PLAN.md truth banner (#480)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T02:44:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f1fed5130022af5b28adccc0016b526fa5d0aa46",
          "body": "docs claimed \"pre-push hooks + CI enforce these\" while .git/hooks/ held\nonly samples. Ships a real optional .githooks/pre-push (version sync\nalways; skills check when built, explicit skip line otherwise; <0.1s)\nand scripts/setup-hooks.sh that refuses to clobber an existing\ncore.hooksPath without --force. Docs now say what is true: CI is\nauthoritative, hooks are optional fast feedback, --no-verify exists.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(dev): optional pre-push hooks + honest enforcement docs (#479)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T02:44:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2ce603439fd97e3de4bec1bc115c25ddf534bc52",
          "body": "* feat(design): machine-readable tokens + shrink-only literal lint\n\nDESIGN.md's palette/font rules had zero enforcement. design/tokens.json\nis the hand-curated machine-readable source (never parsed from prose,\nwhich also names prohibited values); raw color/font literals are allowed\nonly in token-def\n[…]\nassed the\nprefix allowlist. Expanded with fixtures for the reported bypasses.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(design): token enforcement with shrink-only baseline (#478)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T02:44:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c6928f076fc09560ebe79d448e474f1d2c2d7236",
          "body": "…#477)\n\nThe compiler verified sources compile to expected outputs but never\nrejected orphans: deleting a canonical skill left its generated mirrors\nshipping forever. npm run check now audits every file under the\ngenerated roots against current sources plus a data allowlist for\nlegitimately non-generated surfaces (hooks, agents, packs). Goldens\nextended from 4 pilot skills to all 21 (1.1MB committed).\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(skills): stale-artifact ownership check + full golden coverage (…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T02:08:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e5eeee80cfeadf777c85e4435711961a7d4a6e57",
          "body": "* feat(release): transactional bump-version script\n\nOne command writes every Domain-1 version source (manifests, package\nlocks, Cargo.lock workspace entries, MCP_SERVER_VERSION, derived site\nconstants) via a temporary git worktree: the real tree receives a\nsingle validated git-apply or nothing. --dr\n[…]\ny-at-target sources produce no diff) while still failing\non unexpected files.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): transactional bump-version script (#476)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T02:08:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7cd197b2c23392be2cc50b127e13428ed0d559f8",
          "body": "CI deleted crates/mcp/package-lock.json and ran npm install every run\n(npm/cli#4828 workaround), so the committed lockfile was never\nvalidated — a fresh dependency graph shipped on every build. The\nlockfile is now regenerated with Node 22/npm 10 whose v3 format\nrecords all platform-specific optional\n[…]\ntries across\nlinux/darwin/win32), the hack is replaced with npm ci, and a slim\n3-OS mcp_lockfile_check matrix job proves portability in ci_gate.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: validate the committed MCP lockfile instead of deleting it (#475)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T01:37:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a855d73ccc6e69ca267add688a8f8cb96db24c43",
          "body": "* ci: enforce release version lockstep\n\n* feat(release): add --release mode asserting exact mcp->sdk pin\n\nIn --release mode the checker additionally requires\ncrates/mcp/package.json's minutes-sdk dependency to be an exact semver\nequal to crates/sdk/package.json's version — the invariant that the\nv0.\n[…]\nole-line match) with fixtures for the comment-only and embedded-string\ncases.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: three-domain version-policy checker (#473)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T01:17:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fb2ae675ea75676042bcf207cec6419b47e8db5c",
          "body": "* ci: lint workflows with pinned actionlint\n\n* ci: expression-aware runner-context rule; fix live env.ImageOS bugs\n\nactionlint models env as a loose string map and does not flag\n${{ env.ImageOS }}, so the runner-image cache-key class gets a dedicated\nexpression-aware checker (comments never flag; no\n[…]\n single-quote-aware). New fixtures\ncover the indexed and format-braces cases.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: workflow linting as an independent required check (#474)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T00:51:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f8ac8f157cf5dcaf12adda3523cda1a0ac3b5847",
          "body": null,
          "is_bot": false,
          "headline": "ci: add required skills compiler gate (#472)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-16T00:26:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "538e93edec2532edaca44e75591ed7e125e6aac9",
          "body": "Add the live-assistance session contract, synthetic privacy-safe eval corpus, deterministic reducer and routing replay, required CI enforcement, generated agent surfaces, and implementation documentation.",
          "is_bot": false,
          "headline": "feat(agent): define session-aware live assistance (#470)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-15T22:06:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8cd9345e69b7c9046d42194f57c2526da32e9c08",
          "body": null,
          "is_bot": false,
          "headline": "feat(context): expose bounded live screen awareness (#471)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-15T20:49:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebca4e14f8b7457a3c867b3dc9a4b7099accf919",
          "body": "…ngine-active) (#469)",
          "is_bot": false,
          "headline": "test(coach): make MCP copilot contract model-aware (guided-setup vs e…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-15T19:49:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7557c8a00e3fae9979f885e61b63bb340e66051b",
          "body": "…468)\n\n* fix(desktop): coalesce meetings watcher fs events before emitting artifacts:changed\n\nLinux inotify delivers one event per syscall (write/chmod/rename/\nclose-write) instead of the batched events FSEvents gives on macOS.\nEvery raw event fired artifacts:changed immediately, and the UI does\na f\n[…]\n@gtheys's PR #468.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Mat Silverstein <matsilverstein@gmail.com>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(desktop): stop meetings list flashing from Linux inotify noise (#…",
          "author_name": "Geert Theys",
          "author_login": "gtheys",
          "committed_at": "2026-07-15T15:47:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "811df6059ff55ff42b8c7921429072fdd722f7cb",
          "body": "Honor the configured microphone in native ScreenCaptureKit calls and degrade to a surviving PCM stem instead of failing the recording.\n\nReported and diagnosed by @gdiab.",
          "is_bot": false,
          "headline": "fix(capture): preserve recoverable native call audio (#463) (#467)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-15T08:21:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e22051672c0e3963878e6ee973ccacd6a4c9803",
          "body": "…(#466)\n\n* feat(cli): tune Coach model to local hardware\n\n* chore(coach): add monthly model freshness eval\n\n* chore(release): sync test count for coach model-selection tests\n\n* fix(copilot): synchronize deterministic eval nudges",
          "is_bot": false,
          "headline": "feat(coach): hardware-aware model selection + monthly freshness eval …",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-15T05:54:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7fd3b2b8354209b4c7e88f766406fd9bcedd1019",
          "body": null,
          "is_bot": false,
          "headline": "fix(cli): make Coach setup API-first (#465)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-15T01:14:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7469de1a4399fe63053e63625c62e46f2b89e43",
          "body": "…#464)\n\n* feat(core): add realtime copilot contract and engine\n\n* feat(cli): add portable copilot stream surface\n\n* refactor(tauri): share Ollama streaming transport\n\n* docs: document realtime copilot configuration\n\n* chore(pr): trim copilot to additive core\n\n* feat(copilot): add lock-free live part\n[…]\n\n\n* fix(copilot): retry relay establishment EOF\n\n* chore(release): re-sync test count after relay reconnect stress test\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(copilot): real-time meeting Coach integration (atomic landing) (…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-15T01:11:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "19e95b4c16c92423c801239144c97e6fe1896089",
          "body": "…tion copy (#458) (#459)\n\n@DoctorEdMilan diagnosed that the extension display name (\"Minutes —\nMeeting Memory for AI\" / \"Minutes - Meeting Workspace for Claude\") contains\na space-separated dash that the host sanitizes to three underscores, making\n`mcp__Minutes___...__list_meetings` parse ambiguously\n[…]\n, and drop the stale version-pinned changelog\nblocks (0.18.13/0.20.0) for evergreen copy. version + tools untouched.\n\nCloses #458.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(mcpb): rename display name to fix widget tool resolution + reposi…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-14T17:16:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3fb2e837b6cfedeb71fe88cdc5d6e3ec95bb323f",
          "body": "The claude chat path used `--output-format stream-json` but not\n`--include-partial-messages`, so claude emitted one complete assistant\nmessage at the end — the panel showed \"thinking…\" through the whole\ngeneration, then dumped the full reply at once (no token streaming like\nClaude Code/Codex). Verif\n[…]\nread for the\ngrounding narration). Reply now renders as it generates. Recall-chat\nsurface only; does not touch live_transcript.rs.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(recall): token-level streaming in the chat panel (#453)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-13T21:14:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "219c20c9dee28ddf95791886350fd608036003fc",
          "body": "…452)\n\n* feat(recall): stop/cancel button for an in-flight chat turn (#444)\n\nAdds a Stop control to interrupt a long Recall chat turn (cold start +\ngrounding + response). AppState tracks one turn with a monotonic id,\ncancel flag, and owned child handle; cmd_recall_chat_cancel tears down\nvia the same\n[…]\nnon-windows so each target moves it exactly once.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(recall): stop/cancel button for an in-flight chat turn (#444) (#…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-13T19:49:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0e41793b5f5bda5987577faefe99f4df9d07c7a4",
          "body": "…ved files (#451)\n\nFollow-up to #449, which missed several version sources the release\nprocedure requires: manifest.mcpb.json runtime version (MCP bundle guard),\nboth package-lock.json files (npm version), and the derived\nsite/lib/release.ts + llms.txt / docs mirrors (sync scripts). All now at\n0.21.0; manifest.json and manifest.mcpb.json runtime versions match.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): complete 0.21.0 bump — mcbp manifest, lockfiles, deri…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-13T16:55:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d52f0b6d5ec4055db09356237a2b97b6f642c99a",
          "body": "Bumps all version sources (Cargo workspace, tauri.conf.json, sdk +\nmcp package.json, manifest.json, MCP_SERVER_VERSION) and Cargo.lock.\nThe mcp -> minutes-sdk dependency is intentionally left at ^0.19.0 —\nbumping it to an unpublished ^0.21.0 breaks CI's npm install (the trap\nfrom the v0.20.0 release); the publish sequence handles it after sdk\nis on npm.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): bump version to 0.21.0 (#449)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-13T16:53:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aab7bc78734b634d54562dddafb9de59677fc368",
          "body": "…8) (#450)\n\nLive-mode sessions were ephemeral: the fixed ~/.minutes/live-transcript.\n{wav,jsonl} slot was overwritten by the next `minutes live`, and stopping\nnever created a diarized/summarized meeting like Record — a real\ndata-loss footgun.\n\nNew `[live_transcript] promote_on_stop` (default \"proces\n[…]\nfacts + meeting_path.\n\nImplemented by codex gpt-5.6, reviewed + verified here (7 tests, fmt,\nclippy -D warnings, cli+app compile).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(live): preserve + promote live sessions to meetings on stop (#44…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-13T16:50:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bcdddbbbe50632e0c0ba905680064130bf399a9a",
          "body": "…le toggle (#447)\n\nRe-lands #446 (auto-closed when #445's base-branch delete cascaded to the\nstacked PR). Combines: scroll-anchoring (auto-scroll only if at bottom,\n\"jump to latest\" pill otherwise — the tmux-scrollback behavior), a compact\nRecall header on short viewports for coach/prompter use, and\n[…]\nisible faint keyboard glyph).\nFrontend only; index.html taken verbatim from the node-checked\nfeat/coach-ux tip. Follow-up to #404.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(recall): coach-mode UX — scroll-anchoring, compact header, visib…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-13T15:52:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a1da574c3fd6ed3191d09e5fd89d48789a161e60",
          "body": "…low-up) (#445)\n\nAssistant replies now render **bold**, *italic*, `inline code`, and fenced\ncode blocks instead of raw text, incrementally as the response streams.\n\nXSS-safe by construction: fenced code is pulled out and escaped, the rest\nis HTML-escaped BEFORE any formatting, and the inline rules o\n[…]\ner list\nlayout, so only inline emphasis + code needed handling. Verified with an\nXSS + markdown + collision test suite (10 cases).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(recall): render a safe markdown subset in chat replies (#404 fol…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-13T15:50:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "29ad704a6edcd641254411c3f03b324b1e412c38",
          "body": "…rminal by default (#362) (#404)\n\n* feat(recall): add native chat panel with headless Claude streaming\n\nReplace xterm.js TUI as default Recall UI with a structured chat panel.\nBackend: cmd_recall_chat_send spawns claude --output-format stream-json\n--no-interactive and streams chunks to frontend via \n[…]\noken compile — the #443 class). Matches the production init in main.rs.\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>\nCo-authored-by: Mat Silverstein <matsilverstein@gmail.com>",
          "is_bot": false,
          "headline": "feat(recall): native chat panel for Recall, replacing the embedded te…",
          "author_name": "Maosuarez",
          "author_login": "maosuarez",
          "committed_at": "2026-07-13T14:57:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1a88941078f709c409d03a8b264bf0e34c9c13d1",
          "body": "…S 26+) (#439)\n\n* feat(core): on-device summarization via Apple Foundation Models (macOS 26+)\n\nNew \"apple\" summarization engine: zero-setup, zero-API-key, zero-network\nsummaries, action items, and decisions on macOS 26+ with Apple Intelligence.\n\n- crates/core/src/apple_fm.rs — helper lifecycle mirro\n[…]\nnthropic.com>\n\n* chore(site): sync release constants after rebase onto Wave 2\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(core): on-device summarization via Apple Foundation Models (macO…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-13T14:22:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "548f8b537a1b28ca5be26dc9be1e37a8074c0a98",
          "body": "…s (#443)\n\n#441 (consent Wave 2) added `include_restricted` to SearchFilters but\nmissed the struct literal in tests/integration/pipeline_test.rs, so\n`cargo test -p minutes-core` fails to compile the integration target\n(E0063). Add the field with the default `false` (exclude restricted),\nmatching SearchFilters::default(). Build restored.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(test): add missing include_restricted to integration SearchFilter…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-12T10:40:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "80e8ebeab7c3906005e54c21fbc41cdafc517043",
          "body": "…lass 2) (#442)\n\nThe extractor sometimes returns several names as one string (\"Gert and\nLiam\"), which fused into a single person entity (\"gert-liam\") in a real\nvault. Add split_person_references(): split on the conjunctions `and`\n(case-insensitive), `&`, `+`, `;`, and on commas only when a conjuncti\n[…]\npreserved)\n+ an end-to-end build_entity_links check that \"Gert and Liam\" yields\ndistinct entities while \"Sarah Chen\" stays intact.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(graph): split multi-person strings into separate entities (#385 c…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-12T09:54:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3abcdd44e534ca46681db9f3a60355168a0d73db",
          "body": "…#441)\n\n* feat(consent): Phase 2 Wave 2 — agent-layer sensitivity enforcement (minutes-3yub.4)\n\nRestricted meetings (sensitivity: restricted) are now excluded by default\nfrom every agent surface, with an explicit, logged override:\n\n- core search: SearchFilters.include_restricted; FTS post-filter +\n \n[…]\n@anthropic.com>\n\n* chore(site): sync release constants after rebase onto #440\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(consent): Phase 2 Wave 2 — agent-layer sensitivity enforcement (…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-12T04:22:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3e82d31a44b17c735f29b8758b0e6a5fa17b7916",
          "body": "The title model sometimes answers the prompt conversationally\n(\"I'll create a concise meeting title...\") instead of returning a bare\ntitle; the first line was slugified straight into the filename (real\noccurrence: 2026-07-02-i-ll-create-a-concise-meeting-title-mat.md).\n\nAdd looks_like_instruction_ec\n[…]\n to avoid nuking legitimate titles (e.g. \"Here Comes...\").\n\nTests: unit coverage for the guard + an end-to-end fallback/log check.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(pipeline): reject instruction-echo titles from the LLM (#401) (#440)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-12T03:33:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "200fcfcac9afa3d6a796961cba48bb1229872c9c",
          "body": "…versarial review fixes (#438)\n\nTwo new pages:\n- /resources/hipaa-compliant-ai-note-taker — vendor-matrix capstone for the\n  compliance cluster (Otter/Fireflies/Fathom/Krisp conditional, Granola no,\n  on-device outside the BAA framework), FAQPage JSON-LD, links all analyses\n- /resources/is-it-legal-\n[…]\npture\n  mechanism corrected (native Swift capture / loopback, not bare cpal);\n  consent frontmatter claim softened to match Option<ConsentBasis>\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(site): SEO wave 4 — HIPAA capstone, recording-legality guide, ad…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-11T20:05:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ee2c0431ceabc29b39d60ff5fddd85fb1ad2fe03",
          "body": "…resource guides (#437)\n\nAll competitor facts researched fresh (2026-07-11) from official sources\nby parallel research agents, then adversarially reviewed (fact-diff vs\nsourced reports, honesty audit vs Rust source, link/consistency greps):\n\n- /compare/fathom-vs-minutes — Fathom now bot-free-capable\n[…]\ninst source —\nureq exists only in summarize.rs (opt-in text summarizer); capture.rs /\ntranscribe.rs / dictation.rs have zero network references.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(site): SEO content wave 3 — 3 compare pages, 2 HIPAA answers, 3 …",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-11T18:29:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "62dd97a8e542c2083f91a40811230df830f72738",
          "body": "…up, engine post (#436)\n\nWeeks 3-6 of the SEO plan (internal, docs/marketing/):\n\n- /writing/whisper-cpp-vs-parakeet-cpp — first-party engine comparison\n  grounded in docs/architecture/parakeet.md benchmarks and production\n  fallback behavior; added to writing index\n- /resources/best-local-speech-to-\n[…]\nlies/host controls) targeting competitors'\n  churn queries; ends at botless capture\n- sitemap.ts: 4 new routes; .md twins for all resource pages\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(site): SEO content wave 2 — privilege, anti-bot, local STT round…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-11T18:02:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "33081a4a15d4a1ba4251bdc2c005a33dbaa9b3f0",
          "body": "Competitive strategy docs follow the existing internal-artifacts\nconvention (docs/marketing/ is already gitignored).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(docs): move SEO plan to gitignored docs/marketing (internal)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-11T17:47:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a92b39ad08d59a755b5549cfeed9fc2715e98c91",
          "body": "…sper compare (#435)\n\nAhrefs research (docs/plans/seo-plan.md): 370 refdomains but 1 ranking\nkeyword; compliance and dictation clusters are near-uncontested (KD 0-13)\nand cloud competitors structurally can't follow. Ships the weeks-1-2 pages:\n\n- /security — on-device architecture pillar with honest \n[…]\ntation-beachhead comparison\n- sitemap.ts + robots.ts (site had neither)\n- footer Security link, compare hub entry, .md twins for all three pages\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(site): SEO wedge pages — security pillar, HIPAA answer, superwhi…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-11T17:45:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "63cb5c5e65a2e18850495348b80a305b7f0390c3",
          "body": "…marizers (#421)\n\n* fix(jobs): respect keep_after_summary when cleaning screenshots on job completion\n\npreserve_audio_alongside_output() unconditionally deleted the per-recording\nscreens dir after processing, so screenshots vanished even with\nscreen_context.keep_after_summary = true. The pipeline's \n[…]\namp is now the last\nwhitespace-delimited token inside the brackets, tolerating bare, diarized,\nand attributed-name labels alike. Companion regression test with a >100k\ndiarized transcript, per review.",
          "is_bot": false,
          "headline": "fix(screen-context): retain screenshots and deliver them to agent sum…",
          "author_name": "Ryan",
          "author_login": "rymalia",
          "committed_at": "2026-07-11T17:32:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "973bb6dc77040eb4c19433f502f8efdf6b541370",
          "body": "The hero transcript card streams its lines in once on load, mirroring how\nMinutes streams real transcription — CSS-only (staggered animation-delay),\ngated behind prefers-reduced-motion: no-preference so the reduce path\nrenders the final state instantly. No JS, no hydration flash. Amend\nDESIGN.md's M\n[…]\nresolve the standing contradiction with the\n\"streamed partials, never spinners\" interaction-craft rule; add a decision\n-log entry.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(site): product-honest streaming-transcript hero reveal (#434)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-10T22:19:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d8fe04f3e3b704fe6f257e4336ff7c98d576d74f",
          "body": "10/10 pass within DESIGN.md (no motion/scroll effects, which the system\nforbids): a spec-sheet trust bar under the hero for the regulated buyer\n(on-device · nothing uploaded · MIT · consent in every file), and a new\nSection 02 \"On-device\" that makes the ownership wedge visual — the\ndevice-vs-cloud d\n[…]\nid\non-device) reused from the Granola comparison as a homepage signature.\nRenumber trailing sections; add an On-device nav anchor.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(site): homepage elevation — trust bar + on-device data motif (#433)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-10T22:12:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "56124a88776c2d3032c4033328e6795e8020fc52",
          "body": "…mory (#432)\n\nLead with the ownership/permanence line (\"no one can take it from you\")\nand the acquisition/subpoena wedge, reframe off \"infrastructure for\nagents\" to \"the private, owned conversation-memory layer,\" and name the\nnot-another-notetaker distinction. Keeps the loved lines (grep still\nworks, no vendor to outlive; agents have run logs / humans have\nconversations).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): align positioning with the site — owned conversation-me…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-10T21:26:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8550acc32fcfc0fc5a5fdfd28a27cd78409fbf52",
          "body": "…itecture (#431)\n\nThe positioning wedge vs the real competitor: Granola captures locally\nbut streams audio to cloud transcription (Deepgram/AssemblyAI), enhances\nvia cloud AI (OpenAI/Anthropic), and stores transcripts + notes on AWS\n(US only). Minutes is on-device end to end. Add an honest, sourced\n\n[…]\nOC 2) so the wedge stays fair and defensible; all claims cited to\nGranola's own security/privacy FAQ. Keep the .md mirror in sync.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(site): sharpen Granola comparison to the on-device vs cloud arch…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-10T21:09:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "961999c15891409d9b0947eabcb561db0e44e49e",
          "body": "Dictation is the low-friction daily habit and the front door to the\nproduct (per the positioning decision). Promote it from a buried feature\ncell to a dedicated Section 01 right after the hero: the hold-to-talk\nloop, a daily-note card in the transcript-card treatment, and the true\ndifferentiator vs.\n[…]\nxt and forget\nit; Minutes keeps every word locally in the same owned memory. Renumber\nthe following sections and add a nav anchor.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(site): elevate dictation to a front-door on-ramp section (#430)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-10T21:01:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a1e99b2efb8988cf4df7345d2431df4955474679",
          "body": "…#429)\n\nLead with the ownership/permanence wedge that 2025's cloud-memory\nbetrayals (Limitless acquisition, Otter suit) made concrete, instead of\nthe agent-readable framing — which becomes the mechanism beneath it. The\none claim no cloud competitor can copy is \"no one can take it from you.\"\n\nReframe\n[…]\nch for the buyer who\nactually pays: legal/clinical/financial professionals who can't put\nclient conversations in a cloud recorder.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(site): reposition hero on ownership + name the regulated buyer (…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-10T20:54:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fd2629c6bce7a4e1d338b30f9893dbfc9ed02526",
          "body": "…uctions (#426) (#428)\n\nCLAUDE.md, AGENTS.md, and the release/updater docs hardcoded a specific\nDeveloper ID ('Mathieu Silverstein (63TMLKT8HN)') in a public repo. Agents\nand humans follow these literally, so exporting that identity on a machine\nwithout the cert makes build.sh/install-dev-app.sh abo\n[…]\n mechanism\nbut use a generic placeholder; the identity is machine-local (shell profile /\nuntracked env), not tracked instructions.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: remove hardcoded personal Developer ID from tracked agent instr…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-10T19:39:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d55d635dcf389e1029e01275da32c6cfd6b28055",
          "body": "…d surface permission failures (#427)\n\nThe `minutes stop` sentinel broke the record loop without setting the shared\nstop flag; the screen-capture thread only watched that flag, so\nScreenCaptureHandle::drop blocked in join() while post-meeting screenshots\naccumulated toward the 60-frame cap. The hand\n[…]\nhes\nminutes.log, events.jsonl (screen_context.unavailable), a desktop\nnotification at recording start, and a new `minutes health` item that probes\nwith a real capture attempt.\n\nFixes #423. Fixes #424.",
          "is_bot": false,
          "headline": "fix(screen-context): stop capture thread on every record-loop exit an…",
          "author_name": "Ryan",
          "author_login": "rymalia",
          "committed_at": "2026-07-10T19:24:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0a0cc957535d254ccfbe12b24f5ad9e44514129e",
          "body": "…nt denial can't hollow out the app (#422) (#425)\n\ncp -rf into an existing /Applications/Minutes.app bundle trips macOS App\nManagement protection; on denial it deletes what it can but can't write the\nnew files, leaving the app hollowed out (skeleton dir, no Info.plist, no\nbinaries) — destroyed, not \n[…]\n /Applications is\nwritable. On failure: clean up, leave the existing app intact, and point the\nuser at the App Management setting.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(scripts): stage+atomic-swap in build.sh --install so App Manageme…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-10T17:42:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "287844292618a5c72f30d5054d5037b16367be4e",
          "body": "…t yet on npm; matches the lag pattern from v0.19.0)",
          "is_bot": false,
          "headline": "fix(release): mcp depends on published minutes-sdk ^0.19.0 (0.20.0 no…",
          "author_name": "silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-08T21:01:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0162fa63cfa87b840df897eb7ebd932b0cd3b962",
          "body": "…ease bump",
          "is_bot": false,
          "headline": "chore: untrack local scratch/log files accidentally staged in the rel…",
          "author_name": "silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-08T20:59:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8c68ca678485279eec143a61e39ae88298ed6fe",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump to v0.20.0",
          "author_name": "silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-08T20:57:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9432d786fdd33fecc9e8a7e37338dc55c502b0cd",
          "body": "…r speaker confirm (#391) (#419)",
          "is_bot": false,
          "headline": "fix(desktop): replace unsupported prompt() with in-app input modal fo…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-07T14:57:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9b37afcea1b1e3df78bcd327f90d5ffac413e39",
          "body": "…rences (#406)\n\nConsolidate scattered documentation (~40 files from root and loose docs/) into\norganized subfolders grouped by purpose:\n\n- docs/architecture/ — system design, audio processing, transcription models\n- docs/checklists/ — pre-commit, compatibility, regression testing workflows\n- docs/de\n[…]\nuced cognitive load through purposeful organization\n- Faster discovery of relevant documentation\n- Preserved git history (all moves via git mv)\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: reorganize documentation into clear taxonomy and fix cross-refe…",
          "author_name": "Maosuarez",
          "author_login": "maosuarez",
          "committed_at": "2026-07-07T01:25:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0c88050dd28a7c9cd8221491de07dcf03a5fb481",
          "body": "…e Windows hang (#415) (#416)\n\n* feat(diag): stage breadcrumbs for process pipeline to localize Windows hang (#415)\n\n* chore: sync release test count",
          "is_bot": false,
          "headline": "feat(diag): stage breadcrumbs for the process pipeline to localize th…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-06T17:53:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d59d1d178bf51baa7448a87d5132acf35510f270",
          "body": "… evidence, not in-person system-silent (#412 false positive) (#414)",
          "is_bot": false,
          "headline": "fix(pipeline): silent-remote guard fires only on native-call recovery…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-04T03:38:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c05a995e58da06fd658d9d4afd84bcddec8f1e0e",
          "body": "…ently lost (#286) (#412)\n\n* Guard silent remote call stems in batch pipeline\n\n* fix(pipeline): key silent-remote guard off capture_warnings; cover queued+recovery paths, drop sparse false-positive (review)\n\n* chore: sync release test count (silent-remote guard)",
          "is_bot": false,
          "headline": "fix(pipeline): flag call recordings whose remote/system audio was sil…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-04T01:09:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b717ace566ec43f381a3d9dc7260328800ed10d",
          "body": "…ixed 15s windows (#369) (#410)\n\n* Add VAD segmentation for sherpa transcription\n\n* fix(sherpa): empty-VAD returns silence, unpadded timestamps, clear VAD feature gate (review)\n\n* chore: sync release test count (sherpa vad-seg tests)",
          "is_bot": false,
          "headline": "feat(sherpa): VAD-based segmentation — speech boundaries instead of f…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-03T22:41:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d2bbd8146b8327cff753aa432187f28ddc7cc84",
          "body": "…ad of crashing the recording sidecar (#408) (#409)\n\n* fix(core): fall back when ort silero init panics\n\n* chore: sync release test count (vad-ort fallback test)",
          "is_bot": false,
          "headline": "fix(core): ort-silero VAD init panic degrades to whisper-silero inste…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-03T21:30:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76036e338837f04280d61e552f6c5c9ff1967bda",
          "body": "… insert mode) (#407)\n\nExisting users with destination = \"clipboard\" had no signal that dictation can\nnow type at the cursor — the feature was invisible to exactly the people who\nalready dictate. Add a 'Where dictated text goes' selector to the DICTATION\nsettings (insert vs clipboard) with a note ab\n[…]\noard fallback. Reuses the existing cmd_set_setting\ndictation/destination path; empty/unset shows as the compiled default (insert).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(dictation): surface output destination in Settings (discoverable…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-03T21:26:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6b1441c7c6f52e5ac8403680a6a9928e9bd50073",
          "body": "…#403)\n\n* Implement dictation v1 insertion pill\n\n* fix(dictation): clipboard changeCount discipline, verified paste target, session-true pill, raceless hold/tap, early permission honesty, reduced motion\n\n* chore: sync release test count\n\n* fix(ui): make Cmd/Ctrl+B work when the terminal or an input \n[…]\n.\nKeep only the modal/viewer-overlay suppression.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(dictation): v1 — insert-at-cursor + the four-state pill (#378) (…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-03T17:47:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "387b2a1c93b18fbec8d450379675785e71587544",
          "body": "…collapse (#402)\n\n* feat(ui): add documents pane and calm viewer\n\n* review: scale-true padding, reduced-motion guard, instruction files read-only\n\n* fix(documents): close autosave + list races, selection/escape/shortcut guards, symlink scope (review findings)\n\n* docs(design): add Interaction craft s\n[…]\ne: keep notes.md out of the documents PR (unrelated release-notes staging)\n\n* chore: drop beads drift from documents PR\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(ui): Documents pane + calm markdown viewer + Cmd/Ctrl+B sidebar …",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-03T15:09:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "915e1bb8177173a4e9d783197c2545baef9e4430",
          "body": "…ty (#369) (#399)\n\nReal-meeting A/B (75 min, posted on #369) shows the sherpa integration trails\nthe parakeet engine on segmentation, casing, and completeness. Recommending it\nin the README overstates the current state; re-promote once the integration\ngaps close.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: frame sherpa as experimental, not recommended, pending A/B pari…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-03T03:52:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c570743fa070954f023e033203a5956fc53ab885",
          "body": "Replaces the single long-scroll settings panel with a tab bar\n(General / Capture / Transcription / AI & Privacy / Advanced),\nkeeping all existing section IDs intact so JS loadSettings() and\nRust commands are unaffected.\n\n- Pure wrapping approach: 5 `<div.settings-tab-panel>` wrappers\n  around existi\n[…]\n2 (Windows) compatibility\n- ARIA tablist/tab/tabpanel + roving tabindex for keyboard nav\n- openSettings() resets to General tab on every open\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(ui): reorganize Settings into 5 tabs for faster navigation (#400)",
          "author_name": "Maosuarez",
          "author_login": "maosuarez",
          "committed_at": "2026-07-03T03:52:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cc4fda83629d30939727ead2f3e829d924952f63",
          "body": "…ds are self-contained (#369) (#398)\n\n* Fix sherpa dylib packaging\n\n* fix(core): scope sherpa static linking to macOS (Linux/Windows stay dynamic)\n\nsherpa-rs-sys's static feature panics in build.rs on Linux without a global\nRUSTFLAGS relocation hack, which would have broken CI's all-platform\nengine-\n[…]\ntays tied to the #369 release\ndecision (nothing distributes the feature yet).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(core): static sherpa linking on macOS — opt-in engine-sherpa buil…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-03T00:27:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6ce9b82bd8db8b4ac0fb4d13ea660ef36e98eb95",
          "body": "…tures (#369, #395) (#397)\n\nLive verification on the maintainer machine right after #396: a default build\nwith these features produces artifacts that crash at launch. sherpa-rs and ort\nlink dynamic libraries (libsherpa-onnx-c-api.dylib, libonnxruntime.1.17.1.dylib)\nthat are neither bundled into the \n[…]\ncmake-gated DEFAULT is reverted.\n\nSherpa-in-app now has a concrete blocker: bundle the dylibs + set rpaths, or\nlink statically. Tracked on #369.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(scripts): revert engine-sherpa/vad-ort from default app-build fea…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-02T19:15:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "785216c2e5376a36f59b66a3dd14cd072ea0b80c",
          "body": "…owngrade diagnostics (#395) (#396)\n\nProduction incident 2026-07-02: a live meeting shipped a garbled, sparse live\ntranscript while status reported healthy. Config had engine = \"sherpa\" (set up\nfor SOTA-stack testing in the dev app), but no app build could compile sherpa\n(the tauri crate did not exp\n[…]\neeting; patch\nported to current main, then fresh-context codex review found the dispatch\nblocker and the inherit/case + cmake issues fixed here.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(live): stop silent engine fallback in recording sidecar; honest d…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-02T18:25:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3b4c0311e888aa9409a89f2214ba2463896e3a9e",
          "body": "…ters (#385) (#394)\n\nTurns the suggestion-only name-variant clusters (#390) into a durable, applied\nmerge. `minutes people merge <canonical> <variant...>` records a Person entry in\nthe vocabulary store; on graph rebuild the canonicalizer collapses every variant\nto the canonical slug and re-points me\n[…]\nNGES; all folded in: evidence-ranked\ncanonical, exact slug resolution, precise conflict recovery, testable rebuild,\npartial-success reporting).\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cli): `minutes people merge` confirm-merge for name-variant clus…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-02T05:29:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2120a49bfed5c18a7a8bf8a56414c47ed70e556a",
          "body": "…on collapse (#392) (#393)\n\nWhen diarization collapses a multi-party meeting to <=1 rendered speaker, the\nsummarizer guesses assignees and empirically defaults to the recorder, silently\nINVERTING who owes whom. Guard: when a meeting had a diarization result but the\nrendered transcript shows <=1 real\n[…]\nl changes folded in: rendered-label\nsignal, diarization-result gate, trusted-attendee denominator, kind-scoped owner\nclearing, status degrade).\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(pipeline): withhold action-item/commitment assignees on diarizati…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-02T02:31:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "30498ee81286452c8f7d42b827512af37934ff4b",
          "body": "…ustering (#385) (#390)\n\nSlice 0 entity-resolution eval harness (test-gated, synthetic) gating\nwrong_merges==0, full drift recall, and the clique property. New entity_cluster\nmodule: separator + same-first-letter single-edit predicate (ASCII-guarded, no\nDouble Metaphone), clique-based clustering (no\n[…]\nthree passes (design, impl, verify);\nfindings folded in (mixed-edge bridge, transitive drift chain, CJK over-match,\ndeterminism, eval realism).\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(graph): entity-resolution eval + suggestion-only name-variant cl…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-01T16:02:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a21f6d39aa04961beaafb3127070e80437a26dc2",
          "body": "… (#388) (#389)\n\n* fix(name-correction): stop rewriting common words to look-alike names (#388)\n\nThe config-gated post-pass name corrector rewrote common English words in the\ntranscript body into unrelated proper nouns pulled from the whole-vault name\npool: work->York (x24), moat->Mat, line->Life, h\n[…]\n@anthropic.com>\n\n* chore: update Cargo.lock after dropping rphonetic (#388)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(name-correction): stop rewriting common words to look-alike names…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-01T15:35:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "161051b58ec26ec94ad0bf6d04a7c62a5a9aedb6",
          "body": "…mapping health (#384) (#387)\n\nRecovery path for meetings that shipped with anonymous SPEAKER_n labels\nbecause Level-1 speaker mapping timed out, errored, or ran before attendees\nwere known. Re-runs just the mapping (no audio reprocessing) and records a\nspeaker_mapping health block in the frontmatte\n[…]\ngs fixed and\ncovered by tests (merge dedup and High-preservation, mixed-fence code blocks,\nglued-fence body preservation, non-meeting refusal).\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cli): `minutes redo-speaker-mapping` recovery command + speaker-…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-07-01T00:24:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "127b7c35eecc15ce8c5b93854cfe43860d502207",
          "body": "…386)\n\nReal-vault data (#370 comment from @gtheys) showed person-entity contamination\nwell beyond the role/title suffixes #374 fixed. This handles two more classes on\nthe same two-layer mechanism (strip at extraction in pipeline::add_person_entity,\nheal on reindex in person_identity::normalize_entit\n[…]\nbel leak + garbage-name classes). Multi-person\nconcatenation and name-variant resolution remain tracked there for a designed pass.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(graph): strip speaker labels + gate non-person entities (#385) (#…",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-06-30T22:55:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f68bc77857891dc66a5b7c6c53e3e86459dbd04d",
          "body": "* feat(ui): first pass at persistent UI font scaling w/keyboard shortcuts\n\nIntroduces `Cmd/Ctrl +/-/0` keyboard shortcuts to adjust the UI's base font size.  The selected zoom level is saved to local storage, persisting across sessions.\n\nThis implements a scalable typography system using CSS custom \n[…]\nred-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Mat Silverstein <matsilverstein@gmail.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(ui): Persistent UI font scaling with keyboard shortcuts (#381)",
          "author_name": "Sherri Alexander",
          "author_login": "SherriAlexander",
          "committed_at": "2026-06-30T03:25:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3c86be4de13bfba2cbbf83ac0687e9ba61b3a2e1",
          "body": "… (#380)\n\n* feat(cli): add `minutes transcribe --json` for transcript-only output\n\nAdds a `minutes transcribe <file>` subcommand: audio in, transcript out,\nwith no meeting files written and no summarization. `--json` emits the\nstructured envelope from #376; plain text by default. `--diarize` is\nopt-\n[…]\nite/lib/release.ts: CLI command count 45 → 54 after adding `transcribe`\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cli): add `minutes transcribe --json` for transcript-only output…",
          "author_name": "Maosuarez",
          "author_login": "maosuarez",
          "committed_at": "2026-06-30T00:39:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "463518c43604d5d3a92af80b95587f3aba78966b",
          "body": "One person fragments into many knowledge-graph entities (reported by\n@gtheys in #367: junlei/junrei/junwei + role-suffix variants). This is the\nentity-level sibling of the Every Name Right epic: keep the PERSON right\nacross fragments, with wrong-merge-worse-than-split as the cardinal rule.\n\nResearch\n[…]\n as slice 1. Reviewed against the code: corrected the\nentity-construction layer (pipeline.rs, not knowledge_extract.rs) and the\nclustering predicate (names_likely_same needs a new phonetic/edit edge).",
          "is_bot": false,
          "headline": "docs(plans): person entity resolution proposal + SOTA eval design (#371)",
          "author_name": "Mat Silverstein",
          "author_login": "silverstein",
          "committed_at": "2026-06-30T00:19:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 70,
      "commits_last_year": 1297,
      "latest_release_at": "2026-07-17T19:19:39Z",
      "latest_release_tag": "v0.22.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 19,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 3.9
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "minutes-cli",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "ai",
            "memory",
            "whisper",
            "transcription",
            "meeting",
            "command-line-utilities",
            "multimedia::audio"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/minutes-cli",
          "is_deprecated": false,
          "latest_version": "0.22.1",
          "repository_url": "https://github.com/silverstein/minutes",
          "versions_count": 18,
          "total_downloads": 728,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 151,
          "first_published_at": "2026-03-24T18:22:32.223840Z",
          "latest_published_at": "2026-07-17T19:47:38.691301Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 5
        },
        {
          "name": "minutes-core",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "ai",
            "memory",
            "whisper",
            "transcription",
            "meeting",
            "command-line-utilities",
            "multimedia::audio"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/minutes-core",
          "is_deprecated": false,
          "latest_version": "0.22.1",
          "repository_url": "https://github.com/silverstein/minutes",
          "versions_count": 18,
          "total_downloads": 839,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 180,
          "first_published_at": "2026-03-24T18:21:04.437176Z",
          "latest_published_at": "2026-07-17T19:45:59.321188Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 5
        },
        {
          "name": "minutes-mcp",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "mcp",
            "meeting",
            "transcription",
            "ai",
            "claude",
            "memory",
            "conversation",
            "whisper"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/minutes-mcp",
          "is_deprecated": false,
          "latest_version": "0.22.1",
          "repository_url": "https://github.com/silverstein/minutes",
          "versions_count": 62,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1970,
          "first_published_at": "2026-03-23T05:29:49.784000Z",
          "latest_published_at": "2026-07-17T19:44:08.454000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "minutes-sdk",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "meeting",
            "transcription",
            "memory",
            "ai",
            "agent",
            "mcp",
            "claude",
            "langchain",
            "conversation",
            "whisper"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/minutes-sdk",
          "is_deprecated": false,
          "latest_version": "0.22.1",
          "repository_url": "https://github.com/silverstein/minutes",
          "versions_count": 61,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2352,
          "first_published_at": "2026-03-23T05:29:38.285000Z",
          "latest_published_at": "2026-07-17T19:43:57.274000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "whisper-guard",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "audio",
            "speech",
            "whisper",
            "transcription",
            "hallucination",
            "multimedia::audio",
            "text-processing"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/whisper-guard",
          "is_deprecated": false,
          "latest_version": "0.3.0",
          "repository_url": "https://github.com/silverstein/minutes",
          "versions_count": 6,
          "total_downloads": 2332,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 689,
          "first_published_at": "2026-03-27T18:56:16.343453Z",
          "latest_published_at": "2026-05-14T23:08:39.905547Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 69
        }
      ]
    },
    "popularity": {
      "forks": 143,
      "stars": 1372,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2026-03-20",
            "count": 1
          },
          {
            "date": "2026-03-21",
            "count": 7
          },
          {
            "date": "2026-03-23",
            "count": 2
          },
          {
            "date": "2026-03-24",
            "count": 2
          },
          {
            "date": "2026-03-25",
            "count": 3
          },
          {
            "date": "2026-03-26",
            "count": 2
          },
          {
            "date": "2026-03-27",
            "count": 9
          },
          {
            "date": "2026-03-28",
            "count": 9
          },
          {
            "date": "2026-03-29",
            "count": 12
          },
          {
            "date": "2026-03-30",
            "count": 10
          },
          {
            "date": "2026-03-31",
            "count": 10
          },
          {
            "date": "2026-04-01",
            "count": 8
          },
          {
            "date": "2026-04-02",
            "count": 3
          },
          {
            "date": "2026-04-03",
            "count": 3
          },
          {
            "date": "2026-04-04",
            "count": 2
          },
          {
            "date": "2026-04-05",
            "count": 2
          },
          {
            "date": "2026-04-06",
            "count": 3
          },
          {
            "date": "2026-04-07",
            "count": 4
          },
          {
            "date": "2026-04-08",
            "count": 2
          },
          {
            "date": "2026-04-09",
            "count": 3
          },
          {
            "date": "2026-04-11",
            "count": 2
          },
          {
            "date": "2026-04-12",
            "count": 3
          },
          {
            "date": "2026-04-14",
            "count": 2
          },
          {
            "date": "2026-04-15",
            "count": 1
          },
          {
            "date": "2026-04-16",
            "count": 2
          },
          {
            "date": "2026-04-17",
            "count": 2
          },
          {
            "date": "2026-04-19",
            "count": 1
          },
          {
            "date": "2026-04-21",
            "count": 1
          },
          {
            "date": "2026-04-24",
            "count": 1
          },
          {
            "date": "2026-04-25",
            "count": 1
          },
          {
            "date": "2026-04-27",
            "count": 1
          },
          {
            "date": "2026-04-28",
            "count": 1
          },
          {
            "date": "2026-04-30",
            "count": 1
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-05-11",
            "count": 2
          },
          {
            "date": "2026-05-12",
            "count": 1
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-05-17",
            "count": 1
          },
          {
            "date": "2026-05-18",
            "count": 1
          },
          {
            "date": "2026-05-21",
            "count": 2
          },
          {
            "date": "2026-05-22",
            "count": 2
          },
          {
            "date": "2026-05-23",
            "count": 3
          },
          {
            "date": "2026-05-29",
            "count": 1
          },
          {
            "date": "2026-06-08",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 1
          },
          {
            "date": "2026-06-17",
            "count": 1
          },
          {
            "date": "2026-06-24",
            "count": 1
          },
          {
            "date": "2026-06-27",
            "count": 1
          },
          {
            "date": "2026-07-01",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 1
          },
          {
            "date": "2026-07-07",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-19",
            "count": 1
          },
          {
            "date": "2026-07-21",
            "count": 1
          },
          {
            "date": "2026-07-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 143,
        "total_forks": 143
      },
      "star_history": null,
      "open_issues_and_prs": 32
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": true,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": true,
      "typecheck_configs": [
        "crates/mcp/tsconfig.json",
        "crates/sdk/tsconfig.json",
        "docs/demo-video/tsconfig.json",
        "docs/demo/tsconfig.json",
        "site/tsconfig.json",
        "tooling/skills/tsconfig.json"
      ],
      "toolchain_manifests": [
        "Cargo.toml",
        "crates/cli/Cargo.toml",
        "crates/core/Cargo.toml",
        "crates/reader/Cargo.toml",
        "crates/whisper-guard/Cargo.toml",
        "sidecars/diarize-streaming/Cargo.toml",
        "tauri/src-tauri/Cargo.toml"
      ],
      "largest_source_bytes": 688247,
      "source_files_sampled": 313,
      "oversized_source_files": 24,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 25923
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "site/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates",
        "npm"
      ],
      "dependencies": [
        {
          "name": "@react-three/drei",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.7.7"
        },
        {
          "name": "@react-three/fiber",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.5.0"
        },
        {
          "name": "@remotion/player",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.446"
        },
        {
          "name": "@types/three",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.183.1"
        },
        {
          "name": "@vercel/analytics",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.1"
        },
        {
          "name": "geist",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.4.1"
        },
        {
          "name": "next",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "^16.2.3"
        },
        {
          "name": "react",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.5"
        },
        {
          "name": "react-dom",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.5"
        },
        {
          "name": "remotion",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.446"
        },
        {
          "name": "three",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.183.2"
        },
        {
          "name": "minutes-core",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.22.1"
        },
        {
          "name": "clap",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "ctrlc",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "anyhow",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing-subscriber",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "chrono",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "hound",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "dirs",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "schemars",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_yaml",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "ureq",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "csv",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "walkdir",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "pyannote-rs",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "ort",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "=2.0.0-rc.10"
        },
        {
          "name": "symphonia",
          "manifest": "crates/cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_yaml",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "toml",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "chrono",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "thiserror",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "dirs",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "walkdir",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "which",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tracing",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "cpal",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "hound",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "notify",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "whisper-rs",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "symphonia",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "ureq",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "fs2",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "schemars",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "crossbeam-channel",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "crossbeam-queue",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "getrandom",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "interprocess",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "pyannote-rs",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "ort",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "ndarray",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "whisper-guard",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3.0"
        },
        {
          "name": "nnnoiseless",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "base64",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.22"
        },
        {
          "name": "rusqlite",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tempfile",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "@modelcontextprotocol/ext-apps",
          "manifest": "crates/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.6.0"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "crates/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "minutes-sdk",
          "manifest": "crates/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.22.1"
        },
        {
          "name": "yaml",
          "manifest": "crates/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.8.3"
        },
        {
          "name": "zod",
          "manifest": "crates/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.25 || ^4.0"
        },
        {
          "name": "serde",
          "manifest": "crates/reader/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/reader/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_yaml",
          "manifest": "crates/reader/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "chrono",
          "manifest": "crates/reader/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "walkdir",
          "manifest": "crates/reader/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "schemars",
          "manifest": "crates/reader/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "yaml",
          "manifest": "crates/sdk/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.8.3"
        },
        {
          "name": "tracing",
          "manifest": "crates/whisper-guard/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "whisper-rs",
          "manifest": "crates/whisper-guard/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.16"
        },
        {
          "name": "serde",
          "manifest": "crates/whisper-guard/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "integrations/claude-cowork-extension/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "zod",
          "manifest": "integrations/claude-cowork-extension/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.6"
        },
        {
          "name": "parakeet-rs",
          "manifest": "sidecars/diarize-streaming/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3.6"
        },
        {
          "name": "serde_json",
          "manifest": "sidecars/diarize-streaming/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tauri",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "tauri-plugin-shell",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "tauri-plugin-global-shortcut",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "tauri-plugin-dialog",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "tauri-plugin-notification",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "notify-rust",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "4.12.0"
        },
        {
          "name": "serde",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde_json",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde_yaml",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "minutes-core",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "chrono",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "dirs",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "6"
        },
        {
          "name": "libc",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "which",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "portable-pty",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9"
        },
        {
          "name": "base64",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.22"
        },
        {
          "name": "futures-util",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "minisign-verify",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "reqwest",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.12"
        },
        {
          "name": "tauri-plugin-pty",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "tauri-plugin-autostart",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "tauri-plugin-updater",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "tauri-plugin-window-state",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "walkdir",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "ureq",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "window-vibrancy",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.7"
        },
        {
          "name": "notify",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "7"
        },
        {
          "name": "tracing",
          "manifest": "tauri/src-tauri/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        }
      ],
      "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": 1,
        "merged_prs": 309,
        "open_issues": 31,
        "closed_ratio": 0.814,
        "closed_issues": 136,
        "closed_unmerged_prs": 28
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "silverstein",
          "commits": 1213,
          "avatar_url": "https://avatars.githubusercontent.com/u/4837632?v=4"
        },
        {
          "type": "User",
          "login": "gregoire22enpc",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/23221802?v=4"
        },
        {
          "type": "User",
          "login": "maosuarez",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/140128662?v=4"
        },
        {
          "type": "User",
          "login": "cathrynlavery",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/50469282?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        },
        {
          "type": "User",
          "login": "mwolson",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/1510193?v=4"
        },
        {
          "type": "User",
          "login": "calebchongc",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/6571888?v=4"
        },
        {
          "type": "User",
          "login": "gtheys",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/527237?v=4"
        },
        {
          "type": "User",
          "login": "rymalia",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/705882?v=4"
        },
        {
          "type": "User",
          "login": "czlonkowski",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/56956555?v=4"
        }
      ],
      "contributors_sampled": 23,
      "top_contributor_share": 0.94
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "coach-model-eval.yml",
        "lint-workflows.yml",
        "release-cli.yml",
        "release-macos.yml",
        "release-publish.yml",
        "release-windows-desktop.yml",
        "signed-dev-acceptance.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock",
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 8,
            "reason": "binaries present in source code",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "25 out of 25 merged PRs checked by a CI test -- score normalized to 10",
            "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 1/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 4 contributing companies or organizations",
            "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 29 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": 2,
            "reason": "dependency not pinned by hash detected -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 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": 0,
            "reason": "82 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "3b13375e14897a575ddfcdd9cbcc6367f709b73d",
        "ran_at": "2026-07-23T02:09:09Z",
        "aggregate_score": 4.3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-21T23:37:29Z",
      "oldest_open_prs": [
        {
          "number": 518,
          "created_at": "2026-07-22T14:51:43Z",
          "last_comment_at": "2026-07-22T14:51:46Z",
          "last_comment_author": "vercel"
        }
      ],
      "last_merged_pr_at": "2026-07-21T23:11:38Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 63,
          "created_at": "2026-04-02T14:54:18Z",
          "last_comment_at": "2026-07-03T03:52:41Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 64,
          "created_at": "2026-04-02T14:54:24Z",
          "last_comment_at": "2026-04-03T14:06:00Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 124,
          "created_at": "2026-04-16T12:44:54Z",
          "last_comment_at": "2026-06-25T23:21:38Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 162,
          "created_at": "2026-04-21T17:18:06Z",
          "last_comment_at": "2026-06-11T20:27:13Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 163,
          "created_at": "2026-04-21T17:51:44Z",
          "last_comment_at": "2026-05-13T04:58:53Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 169,
          "created_at": "2026-04-22T16:45:10Z",
          "last_comment_at": "2026-05-20T05:40:46Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 183,
          "created_at": "2026-04-23T17:48:31Z",
          "last_comment_at": "2026-04-23T18:02:52Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 184,
          "created_at": "2026-04-23T19:45:04Z",
          "last_comment_at": "2026-04-29T19:49:48Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 244,
          "created_at": "2026-05-13T16:33:06Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 245,
          "created_at": "2026-05-13T16:35:25Z",
          "last_comment_at": "2026-06-11T20:27:11Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 253,
          "created_at": "2026-05-21T20:10:06Z",
          "last_comment_at": "2026-05-22T22:15:03Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 265,
          "created_at": "2026-05-31T06:55:47Z",
          "last_comment_at": "2026-06-11T16:27:18Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 267,
          "created_at": "2026-06-01T10:40:44Z",
          "last_comment_at": "2026-06-02T15:29:27Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 268,
          "created_at": "2026-06-01T10:42:41Z",
          "last_comment_at": "2026-06-02T15:29:31Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 286,
          "created_at": "2026-06-09T00:49:49Z",
          "last_comment_at": "2026-07-02T17:30:36Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 305,
          "created_at": "2026-06-11T20:26:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 318,
          "created_at": "2026-06-12T16:16:01Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 362,
          "created_at": "2026-06-25T05:41:00Z",
          "last_comment_at": "2026-07-17T21:28:53Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 369,
          "created_at": "2026-06-26T05:34:07Z",
          "last_comment_at": "2026-07-03T22:14:00Z",
          "last_comment_author": "silverstein"
        },
        {
          "number": 373,
          "created_at": "2026-06-27T19:25:17Z",
          "last_comment_at": "2026-07-08T19:29:56Z",
          "last_comment_author": "silverstein"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/silverstein/minutes",
    "host": "github.com",
    "name": "minutes",
    "owner": "silverstein"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 69,
      "inputs": {
        "security": 43,
        "vitality": 85,
        "community": 68,
        "governance": 64,
        "engineering": 81
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 85,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "commits_last_year": 1297,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 19
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "19/52 weeks with commits",
                "points": 13.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 19
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1297 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1297
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 29 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "releases_count": 70,
              "latest_release_tag": "v0.22.1",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 3.9
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "70 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 70
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.9 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.9
                    }
                  }
                ],
                "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": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 68,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 69,
            "inputs": {
              "forks": 143,
              "stars": 1372,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1,372 stars",
                "points": 50.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1372
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "143 forks",
                "points": 17.9,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 143
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "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": "moderate",
            "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": 62,
            "inputs": {
              "packages": [
                "minutes-cli",
                "minutes-core",
                "minutes-mcp",
                "minutes-sdk",
                "whisper-guard"
              ],
              "dependents": null,
              "ecosystems": "crates, npm",
              "total_downloads": 3899,
              "monthly_downloads": 5342
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "5,342 downloads/month across crates, npm",
                "points": 49.7,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 5342,
                      "ecosystems": "crates, 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": 64,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 34,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 23,
              "top_contributor_share": 0.94
            },
            "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 94% of commits",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 94
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "23 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 23
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 4 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "merged_prs": 309,
              "open_issues": 31,
              "closed_issues": 136,
              "issue_closed_ratio": 0.814,
              "closed_unmerged_prs": 28
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "81% of issues closed",
                "points": 38.1,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 81
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "309/337 decided PRs merged",
                "points": 35.1,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 309,
                      "decided": 337
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "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": 61,
            "inputs": {
              "followers": 177,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "silverstein",
              "public_repos": 25,
              "account_age_days": 4774
            },
            "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": "177 followers of silverstein",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 177,
                      "login": "silverstein"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "25 public repos, account ~13 yr old",
                "points": 22.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 25
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 13
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "minutes-cli",
                "minutes-core",
                "minutes-mcp",
                "minutes-sdk",
                "whisper-guard"
              ],
              "ecosystems": "crates, npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "5 package(s) on crates, npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 5,
                      "ecosystems": "crates, npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "62 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 62
                    }
                  }
                ],
                "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": 81,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "8 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "25 out of 25 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "agent-skills",
                "meetings",
                "ai",
                "claude",
                "mcp",
                "meeting-notes",
                "privacy",
                "rust",
                "speech-to-text",
                "transcription",
                "voice-memo",
                "whisper",
                "parakeet"
              ],
              "has_wiki": true,
              "homepage": "https://useminutes.app",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://useminutes.app",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "13 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 43,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 43,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 4.3
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "25 out of 25 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 1/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 4 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "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 29 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 2",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "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": "82 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 4
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 81,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_llms_txt": true,
              "legible_history_share": 0.99,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 25923
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, 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": "99 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 99,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock",
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": true,
              "has_linter_config": false,
              "typecheck_configs": [
                "crates/mcp/tsconfig.json",
                "crates/sdk/tsconfig.json",
                "docs/demo-video/tsconfig.json",
                "docs/demo/tsconfig.json",
                "site/tsconfig.json",
                "tooling/skills/tsconfig.json"
              ],
              "agent_commit_share": 0.76,
              "toolchain_manifests": [
                "Cargo.toml",
                "crates/cli/Cargo.toml",
                "crates/core/Cargo.toml",
                "crates/reader/Cargo.toml",
                "crates/whisper-guard/Cargo.toml",
                "sidecars/diarize-streaming/Cargo.toml",
                "tauri/src-tauri/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Cargo.toml, crates/cli/Cargo.toml, crates/core/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "Cargo.toml, crates/cli/Cargo.toml, crates/core/Cargo.toml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "crates/mcp/tsconfig.json, crates/sdk/tsconfig.json, docs/demo-video/tsconfig.json, docs/demo/tsconfig.json, site/tsconfig.json, tooling/skills/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "crates/mcp/tsconfig.json, crates/sdk/tsconfig.json, docs/demo-video/tsconfig.json, docs/demo/tsconfig.json, site/tsconfig.json, tooling/skills/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "devcontainer, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "devcontainer, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "76 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 76,
                      "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 2",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 96,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 688247,
              "source_files_sampled": 313,
              "oversized_source_files": 24
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "24/313 source files over 60KB",
                "points": 50.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 313,
                      "oversized": 24
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "moderate",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "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": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch crates package 'minutes-reader' from its registry",
    "Could not fetch crates package 'minutes-app' from its registry",
    "Could not fetch crates package 'minutes-diarize-sidecar' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index crates:minutes-cli@0.22.1; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T02:09:33.350872Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/silverstein/minutes.svg",
  "full_name": "silverstein/minutes",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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