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

terrylica / cc-skills

Claude Code Skills Marketplace: plugins, skills for ADR-driven development, DevOps automation, ClickHouse management, semantic versioning, and productivity workflows

Shell · TypeScript · PythonMIT★ 59 星标⑂ 8 复刻始于 2025年12月在 GitHub 上查看 ↗

terrylica/cc-skills 的健康指数为 100 分中的 54 分,处于「中等」区间。 其得分最高的类别是Vitality(93/100),最低的是Security(25/100)。 最近一次更新在 1 天前。 近期的大部分工作由 1 位贡献者完成。

54
总分 / 100
中等

软件健康指数

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

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

评分画像

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

所有权

Terry Li个人账户
16 关注者251 个公开仓库始于 2022年2月

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

按类别列示的指标

活力

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

93优秀 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 1 天前
23.5/36提交节奏 — 52 周中有 34 周有提交
18/18提交量 — 最近一年 3,723 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year3,723
human_commit_share1
days_since_last_push1
active_weeks_last_year34

发布纪律

100优秀
评分方式
27/27有发布版本 — 已发布 100 个发布版本
36/36发布时效 — 最近一次发布版本于 2 天前
27/27发布节奏 — 约每 0.4 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count100
latest_release_tagv22.18.0
releases_from_tags
days_since_latest_release2
mean_days_between_releases0.4
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

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

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

流行度与采用

36存在风险
评分方式
28.6/60星标 — 59 个星标
7/25复刻 — 8 个复刻
0/15关注者 — 0 位关注者
所用输入
forks8
stars59
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

50中等
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(MIT)
0/18CONTRIBUTING 指南
0/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template

可持续性与治理

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

37存在风险 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
6/22.5提交分布 — 头号贡献者编写了 73% 的提交
4.1/13.5贡献者广度 — 3 位贡献者
3/10OpenSSF Scorecard:Contributors — project has 1 contributing companies or organizations -- score normalized to 3
所用输入
bus_factor1
contributors_sampled3
top_contributor_share0.732
评分方式
17.8/46.8议题解决 — 38% 的议题已关闭
23.9/38.3PR 接受 — 已裁定的 PR 中 10/16 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs10
open_issues49
closed_issues30
issue_closed_ratio0.38
closed_unmerged_prs6
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
8.8/25所有者影响力 — terrylica 有 16 位关注者
21.9/25既往记录 — 251 个公开仓库,账户约 4 年
所用输入
followers16
owner_typeUser
is_verified
owner_loginterrylica
public_repos251
account_age_days1,628
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。

工程质量

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

64中等 · 占总体的 20%

工程实践

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

文档

85优秀
评分方式
30/30README
25/25文档目录
0/15文档 / 主页站点
10/10仓库描述
10/10主题标签 — 20 个主题标签
10/10Wiki
所用输入
topicsai-tools, anthropic, automation, claude, claude-code, clickhouse, developer-tools, devops, llm, marketplace, plugins, productivity, semantic-release, skills, workflow, ai-agents, coding-assistant, mcp, open-source, prompt-engineering
has_wiki
homepage
has_readme
has_docs_dir
has_description

安全

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

25危急 · 占总体的 16%

安全态势

25危急
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 无数据
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — 无数据
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 2 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — 无数据
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — 无数据
0/7.5Token-Permissions — 无数据
0/7.5Vulnerabilities — 75 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate2.5
已排除计分(无数据或不适用):ci_tests, dangerous_workflow, packaging, signed_releases, token_permissions。 其余权重已重新归一化。

AI 就绪度

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

73良好 · 占总体的 0%
评分方式
45/45代理指令 — CLAUDE.md, docs/CLAUDE.md, docs/design/CLAUDE.md, plugins/CLAUDE.md, plugins/agent-reach/CLAUDE.md, plugins/asciinema-tools/CLAUDE.md, plugins/calcom-commander/CLAUDE.md, plugins/claude-tts-companion/CLAUDE.md, plugins/cli-anything/CLAUDE.md, plugins/crucible/CLAUDE.md, plugins/devops-tools/CLAUDE.md, plugins/doc-tools/CLAUDE.md, plugins/dotfiles-tools/CLAUDE.md, plugins/floating-clock/CLAUDE.md, plugins/garch-volatility-toolkit/CLAUDE.md, plugins/gemini-deep-research/CLAUDE.md, plugins/gh-tools/CLAUDE.md, plugins/gh-tools/skills/gh-fine-grained-pat/CLAUDE.md, plugins/git-town-workflow/CLAUDE.md, plugins/gmail-commander/CLAUDE.md, plugins/graphify-tools/CLAUDE.md, plugins/html-showcase/CLAUDE.md, plugins/itp-hooks/CLAUDE.md, plugins/itp/CLAUDE.md, plugins/kokoro-tts/CLAUDE.md, plugins/link-tools/CLAUDE.md, plugins/macos-font-defaults/CLAUDE.md, plugins/macro-keyboard/CLAUDE.md, plugins/macro-keyboard/skills/configure-macro-keyboard/CLAUDE.md, plugins/macro-keyboard/skills/diagnose-hid-keycodes/CLAUDE.md, plugins/macro-keyboard/skills/emit-fn-key-on-macos/CLAUDE.md, plugins/media-tools/CLAUDE.md, plugins/minimax/CLAUDE.md, plugins/mise/CLAUDE.md, plugins/mql5/CLAUDE.md, plugins/notes-commander/CLAUDE.md, plugins/openwolf/CLAUDE.md, plugins/plugin-dev/CLAUDE.md, plugins/productivity-tools/CLAUDE.md, plugins/pushover-commander/CLAUDE.md, plugins/quality-tools/CLAUDE.md, plugins/quant-research/CLAUDE.md, plugins/rust-tools/CLAUDE.md, plugins/ssh-tunnel-companion/CLAUDE.md, plugins/statusline-tools/CLAUDE.md, plugins/tlg/CLAUDE.md, plugins/tts-tg-sync/CLAUDE.md, plugins/web-forge/CLAUDE.md, plugins/whatsapp-commander/CLAUDE.md, plugins/zai/CLAUDE.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 100 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share1
agent_instruction_filesCLAUDE.md, docs/CLAUDE.md, docs/design/CLAUDE.md, plugins/CLAUDE.md, plugins/agent-reach/CLAUDE.md, plugins/asciinema-tools/CLAUDE.md, plugins/calcom-commander/CLAUDE.md, plugins/claude-tts-companion/CLAUDE.md, plugins/cli-anything/CLAUDE.md, plugins/crucible/CLAUDE.md, plugins/devops-tools/CLAUDE.md, plugins/doc-tools/CLAUDE.md, plugins/dotfiles-tools/CLAUDE.md, plugins/floating-clock/CLAUDE.md, plugins/garch-volatility-toolkit/CLAUDE.md, plugins/gemini-deep-research/CLAUDE.md, plugins/gh-tools/CLAUDE.md, plugins/gh-tools/skills/gh-fine-grained-pat/CLAUDE.md, plugins/git-town-workflow/CLAUDE.md, plugins/gmail-commander/CLAUDE.md, plugins/graphify-tools/CLAUDE.md, plugins/html-showcase/CLAUDE.md, plugins/itp-hooks/CLAUDE.md, plugins/itp/CLAUDE.md, plugins/kokoro-tts/CLAUDE.md, plugins/link-tools/CLAUDE.md, plugins/macos-font-defaults/CLAUDE.md, plugins/macro-keyboard/CLAUDE.md, plugins/macro-keyboard/skills/configure-macro-keyboard/CLAUDE.md, plugins/macro-keyboard/skills/diagnose-hid-keycodes/CLAUDE.md, plugins/macro-keyboard/skills/emit-fn-key-on-macos/CLAUDE.md, plugins/media-tools/CLAUDE.md, plugins/minimax/CLAUDE.md, plugins/mise/CLAUDE.md, plugins/mql5/CLAUDE.md, plugins/notes-commander/CLAUDE.md, plugins/openwolf/CLAUDE.md, plugins/plugin-dev/CLAUDE.md, plugins/productivity-tools/CLAUDE.md, plugins/pushover-commander/CLAUDE.md, plugins/quality-tools/CLAUDE.md, plugins/quant-research/CLAUDE.md, plugins/rust-tools/CLAUDE.md, plugins/ssh-tunnel-companion/CLAUDE.md, plugins/statusline-tools/CLAUDE.md, plugins/tlg/CLAUDE.md, plugins/tts-tg-sync/CLAUDE.md, plugins/web-forge/CLAUDE.md, plugins/whatsapp-commander/CLAUDE.md, plugins/zai/CLAUDE.md
agent_instruction_max_bytes32,251
评分方式
18/18一条命令的引导启动 — plugins/claude-tts-companion/Makefile, plugins/floating-clock/Makefile, plugins/ssh-tunnel-companion/Makefile
22/22自动化测试
11/11Lint / 格式化配置 — ruff.toml
11/11静态类型检查 — plugins/calcom-commander/scripts/calcom-cli/tsconfig.json, plugins/calcom-commander/tsconfig.json, plugins/gmail-commander/scripts/gmail-cli/tsconfig.json, plugins/gmail-commander/tsconfig.json, plugins/plugin-dev/tsconfig.json, plugins/productivity-tools/skills/gdrive-access/scripts/tsconfig.json, plugins/pushover-commander/skills/_lib/tsconfig.json, plugins/statusline-tools/tsconfig.json, plugins/tlg/scripts/tsconfig.json, tsconfig.json
10/10可复现环境 — Dockerfile, lockfile
0/10已体现的代理实践 — 最近 100 次提交中没有代理编写的提交
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfilespackage-lock.json
has_dockerfile
typed_language
bootstrap_filesplugins/claude-tts-companion/Makefile, plugins/floating-clock/Makefile, plugins/ssh-tunnel-companion/Makefile
has_devcontainer
has_linter_config
typecheck_configsplugins/calcom-commander/scripts/calcom-cli/tsconfig.json, plugins/calcom-commander/tsconfig.json, plugins/gmail-commander/scripts/gmail-cli/tsconfig.json, plugins/gmail-commander/tsconfig.json, plugins/plugin-dev/tsconfig.json, plugins/productivity-tools/skills/gdrive-access/scripts/tsconfig.json, plugins/pushover-commander/skills/_lib/tsconfig.json, plugins/statusline-tools/tsconfig.json, plugins/tlg/scripts/tsconfig.json, tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
评分方式
27/45可类型检查的代码 — Shell,已配置类型检查(plugins/calcom-commander/scripts/calcom-cli/tsconfig.json, plugins/calcom-commander/tsconfig.json, plugins/gmail-commander/scripts/gmail-cli/tsconfig.json, plugins/gmail-commander/tsconfig.json, plugins/plugin-dev/tsconfig.json, plugins/productivity-tools/skills/gdrive-access/scripts/tsconfig.json, plugins/pushover-commander/skills/_lib/tsconfig.json, plugins/statusline-tools/tsconfig.json, plugins/tlg/scripts/tsconfig.json, tsconfig.json)
54.8/55可控的文件大小 — 采样的 575 个源文件中有 2 个超过 60KB
所用输入
primary_languageShell
largest_source_bytes77,462
source_files_sampled575
oversized_source_files2

机器可读接口

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

关键数据

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

数据采集警告

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

更多细节

Star 与 Fork 历史 0 ★ / 8 ⇿
0Star
8Fork
62发布

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

02468822026-012026-042026-06
主版本 0次版本 34修订 28
OpenSSF Scorecard 2.5 / 10
2.5综合

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
不适用CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
不适用Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
不适用Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
不适用Signed-Releasesno releases found
不适用Token-PermissionsNo tokens found
0Vulnerabilities75 existing vulnerabilities detected
直接依赖 18
注册表软件包版本约束清单文件
npm@anthropic-ai/claude-agent-sdk^0.1.0package.json
npmansis^3.0.0package.json
npmliquidjs^10.24.0package.json
npmplaywright-core^1.58.2package.json
npmzod^4.3.6package.json
npm@grammyjs/ratelimiter^1.2.1plugins/calcom-commander/package.json
npmgrammy^1.39.3plugins/calcom-commander/package.json
npm@anthropic-ai/claude-agent-sdk^0.2.92plugins/gmail-commander/package.json
npm@grammyjs/ratelimiter^1.2.1plugins/gmail-commander/package.json
npmgrammy^1.39.3plugins/gmail-commander/package.json
npmzod^4.3.6plugins/gmail-commander/package.json
npmmarked^15.0.0plugins/plugin-dev/package.json
npmgray-matter^4.0.3plugins/plugin-dev/package.json
npmansis^3.5.0plugins/plugin-dev/package.json
npmsimple-git^3.27.0plugins/statusline-tools/package.json
npmremark-parse^11.0.0plugins/statusline-tools/package.json
npmunified^11.0.5plugins/statusline-tools/package.json
npmunist-util-visit^5.0.0plugins/statusline-tools/package.json
全部依赖 未采集

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "ai-tools",
        "anthropic",
        "automation",
        "claude",
        "claude-code",
        "clickhouse",
        "developer-tools",
        "devops",
        "llm",
        "marketplace",
        "plugins",
        "productivity",
        "semantic-release",
        "skills",
        "workflow",
        "ai-agents",
        "coding-assistant",
        "mcp",
        "open-source",
        "prompt-engineering"
      ],
      "is_fork": false,
      "size_kb": 20947,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "C": 77541,
        "Go": 5512,
        "Awk": 13621,
        "CSS": 26401,
        "Lua": 2254,
        "TeX": 6067,
        "HTML": 8854,
        "Shell": 3123102,
        "Swift": 605667,
        "Python": 810954,
        "Makefile": 11909,
        "Dockerfile": 76,
        "JavaScript": 270921,
        "TypeScript": 1826569,
        "Objective-C": 724603
      },
      "pushed_at": "2026-07-23T22:50:37Z",
      "created_at": "2025-12-04T16:26:10Z",
      "owner_type": "User",
      "updated_at": "2026-07-23T22:50:42Z",
      "description": "Claude Code Skills Marketplace: plugins, skills for ADR-driven development, DevOps automation, ClickHouse management, semantic versioning, and productivity workflows",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Shell",
      "significant_languages": [
        "Shell",
        "TypeScript",
        "Python"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Terry Li",
      "type": "User",
      "login": "terrylica",
      "company": null,
      "location": null,
      "followers": 16,
      "avatar_url": "https://avatars.githubusercontent.com/u/99227742?v=4",
      "created_at": "2022-02-08T01:15:05Z",
      "is_verified": null,
      "public_repos": 251,
      "account_age_days": 1628
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v22.18.0",
          "kind": "minor",
          "published_at": "2026-07-23T06:41:34Z"
        },
        {
          "tag": "v22.17.0",
          "kind": "minor",
          "published_at": "2026-07-22T15:35:17Z"
        },
        {
          "tag": "v22.16.3",
          "kind": "patch",
          "published_at": "2026-07-22T15:20:01Z"
        },
        {
          "tag": "v22.16.2",
          "kind": "patch",
          "published_at": "2026-07-22T06:30:41Z"
        },
        {
          "tag": "v22.16.1",
          "kind": "patch",
          "published_at": "2026-07-22T06:10:55Z"
        },
        {
          "tag": "v22.16.0",
          "kind": "minor",
          "published_at": "2026-07-21T22:54:40Z"
        },
        {
          "tag": "v22.15.0",
          "kind": "minor",
          "published_at": "2026-07-21T22:01:59Z"
        },
        {
          "tag": "v22.14.0",
          "kind": "minor",
          "published_at": "2026-07-21T03:27:32Z"
        },
        {
          "tag": "v22.13.2",
          "kind": "patch",
          "published_at": "2026-07-19T09:15:53Z"
        },
        {
          "tag": "v22.13.1",
          "kind": "patch",
          "published_at": "2026-07-19T08:26:34Z"
        },
        {
          "tag": "v22.13.0",
          "kind": "minor",
          "published_at": "2026-07-19T07:05:29Z"
        },
        {
          "tag": "v22.12.1",
          "kind": "patch",
          "published_at": "2026-07-19T05:34:40Z"
        },
        {
          "tag": "v22.12.0",
          "kind": "minor",
          "published_at": "2026-07-19T01:38:02Z"
        },
        {
          "tag": "v22.11.0",
          "kind": "minor",
          "published_at": "2026-07-08T21:19:25Z"
        },
        {
          "tag": "v22.10.2",
          "kind": "patch",
          "published_at": "2026-07-03T06:29:55Z"
        },
        {
          "tag": "v22.10.1",
          "kind": "patch",
          "published_at": "2026-06-30T19:43:50Z"
        },
        {
          "tag": "v22.10.0",
          "kind": "minor",
          "published_at": "2026-06-30T18:19:27Z"
        },
        {
          "tag": "v22.9.0",
          "kind": "minor",
          "published_at": "2026-06-30T06:28:36Z"
        },
        {
          "tag": "v22.8.0",
          "kind": "minor",
          "published_at": "2026-06-29T21:57:59Z"
        },
        {
          "tag": "v22.7.0",
          "kind": "minor",
          "published_at": "2026-06-29T03:24:42Z"
        },
        {
          "tag": "v22.6.0",
          "kind": "minor",
          "published_at": "2026-06-29T00:12:20Z"
        },
        {
          "tag": "v22.5.0",
          "kind": "minor",
          "published_at": "2026-06-28T22:52:04Z"
        },
        {
          "tag": "v22.4.0",
          "kind": "minor",
          "published_at": "2026-06-27T04:30:51Z"
        },
        {
          "tag": "v22.3.0",
          "kind": "minor",
          "published_at": "2026-06-26T21:55:47Z"
        },
        {
          "tag": "v22.2.0",
          "kind": "minor",
          "published_at": "2026-06-26T00:32:41Z"
        },
        {
          "tag": "v22.1.1",
          "kind": "patch",
          "published_at": "2026-06-23T23:44:43Z"
        },
        {
          "tag": "v22.1.0",
          "kind": "minor",
          "published_at": "2026-06-23T22:01:54Z"
        },
        {
          "tag": "v22.0.4",
          "kind": "patch",
          "published_at": "2026-06-23T19:53:47Z"
        },
        {
          "tag": "v22.0.3",
          "kind": "patch",
          "published_at": "2026-06-23T19:16:53Z"
        },
        {
          "tag": "v22.0.2",
          "kind": "patch",
          "published_at": "2026-06-23T18:57:15Z"
        },
        {
          "tag": "v22.0.1",
          "kind": "patch",
          "published_at": "2026-06-23T18:46:33Z"
        },
        {
          "tag": "v22.0.0",
          "kind": "major",
          "published_at": "2026-06-23T18:31:11Z"
        },
        {
          "tag": "v21.103.1",
          "kind": "patch",
          "published_at": "2026-06-23T14:05:46Z"
        },
        {
          "tag": "v21.103.0",
          "kind": "minor",
          "published_at": "2026-06-23T04:43:50Z"
        },
        {
          "tag": "v21.102.0",
          "kind": "minor",
          "published_at": "2026-06-23T02:31:36Z"
        },
        {
          "tag": "v21.101.0",
          "kind": "minor",
          "published_at": "2026-06-23T02:19:32Z"
        },
        {
          "tag": "v21.100.0",
          "kind": "minor",
          "published_at": "2026-06-22T20:41:28Z"
        },
        {
          "tag": "v21.99.0",
          "kind": "minor",
          "published_at": "2026-06-22T20:13:22Z"
        },
        {
          "tag": "v21.98.5",
          "kind": "patch",
          "published_at": "2026-06-21T23:44:10Z"
        },
        {
          "tag": "v21.98.4",
          "kind": "patch",
          "published_at": "2026-06-21T23:00:03Z"
        },
        {
          "tag": "v21.98.3",
          "kind": "patch",
          "published_at": "2026-06-21T09:01:22Z"
        },
        {
          "tag": "v21.98.2",
          "kind": "patch",
          "published_at": "2026-06-21T04:22:09Z"
        },
        {
          "tag": "v21.98.1",
          "kind": "patch",
          "published_at": "2026-06-21T03:30:52Z"
        },
        {
          "tag": "v21.98.0",
          "kind": "minor",
          "published_at": "2026-06-21T03:21:49Z"
        },
        {
          "tag": "v21.97.3",
          "kind": "patch",
          "published_at": "2026-06-20T23:57:39Z"
        },
        {
          "tag": "v21.97.2",
          "kind": "patch",
          "published_at": "2026-06-20T20:30:26Z"
        },
        {
          "tag": "v21.97.1",
          "kind": "patch",
          "published_at": "2026-06-20T06:40:24Z"
        },
        {
          "tag": "v21.97.0",
          "kind": "minor",
          "published_at": "2026-06-19T18:16:43Z"
        },
        {
          "tag": "v21.96.1",
          "kind": "patch",
          "published_at": "2026-06-12T16:50:55Z"
        },
        {
          "tag": "v21.96.0",
          "kind": "minor",
          "published_at": "2026-06-12T06:19:19Z"
        },
        {
          "tag": "v21.95.0",
          "kind": "minor",
          "published_at": "2026-06-11T21:58:07Z"
        },
        {
          "tag": "v21.94.0",
          "kind": "minor",
          "published_at": "2026-06-11T20:00:17Z"
        },
        {
          "tag": "v21.93.0",
          "kind": "minor",
          "published_at": "2026-06-11T15:08:39Z"
        },
        {
          "tag": "v21.92.0",
          "kind": "minor",
          "published_at": "2026-06-11T12:44:27Z"
        },
        {
          "tag": "v21.91.0",
          "kind": "minor",
          "published_at": "2026-06-11T12:00:15Z"
        },
        {
          "tag": "v21.90.0",
          "kind": "minor",
          "published_at": "2026-06-11T11:26:16Z"
        },
        {
          "tag": "v21.89.2",
          "kind": "patch",
          "published_at": "2026-06-11T11:18:29Z"
        },
        {
          "tag": "v21.89.1",
          "kind": "patch",
          "published_at": "2026-06-11T05:43:48Z"
        },
        {
          "tag": "v21.89.0",
          "kind": "minor",
          "published_at": "2026-06-10T23:45:54Z"
        },
        {
          "tag": "v21.88.0",
          "kind": "minor",
          "published_at": "2026-06-08T21:55:25Z"
        },
        {
          "tag": "v21.87.0",
          "kind": "minor",
          "published_at": "2026-06-05T23:48:32Z"
        },
        {
          "tag": "v21.86.0",
          "kind": "minor",
          "published_at": "2026-05-30T04:48:46Z"
        },
        {
          "tag": "v21.85.0",
          "kind": "minor",
          "published_at": "2026-05-29T19:19:37Z"
        },
        {
          "tag": "v21.84.3",
          "kind": "patch",
          "published_at": "2026-05-27T14:01:10Z"
        },
        {
          "tag": "v21.84.2",
          "kind": "patch",
          "published_at": "2026-05-27T07:16:13Z"
        },
        {
          "tag": "v21.84.1",
          "kind": "patch",
          "published_at": "2026-05-27T07:09:45Z"
        },
        {
          "tag": "v21.84.0",
          "kind": "minor",
          "published_at": "2026-05-27T06:58:28Z"
        },
        {
          "tag": "v21.83.0",
          "kind": "minor",
          "published_at": "2026-05-26T11:21:14Z"
        },
        {
          "tag": "v21.82.1",
          "kind": "patch",
          "published_at": "2026-05-26T09:49:03Z"
        },
        {
          "tag": "v21.82.0",
          "kind": "minor",
          "published_at": "2026-05-24T18:56:24Z"
        },
        {
          "tag": "v21.81.0",
          "kind": "minor",
          "published_at": "2026-05-21T20:16:26Z"
        },
        {
          "tag": "v21.80.0",
          "kind": "minor",
          "published_at": "2026-05-21T20:11:02Z"
        },
        {
          "tag": "v21.79.0",
          "kind": "minor",
          "published_at": "2026-05-21T20:02:09Z"
        },
        {
          "tag": "v21.78.0",
          "kind": "minor",
          "published_at": "2026-05-21T19:50:57Z"
        },
        {
          "tag": "v21.77.2",
          "kind": "patch",
          "published_at": "2026-05-21T19:43:37Z"
        },
        {
          "tag": "v21.77.1",
          "kind": "patch",
          "published_at": "2026-05-21T19:38:47Z"
        },
        {
          "tag": "v21.77.0",
          "kind": "minor",
          "published_at": "2026-05-21T19:32:08Z"
        },
        {
          "tag": "v21.76.0",
          "kind": "minor",
          "published_at": "2026-05-21T19:20:06Z"
        },
        {
          "tag": "v21.75.8",
          "kind": "patch",
          "published_at": "2026-05-21T19:13:23Z"
        },
        {
          "tag": "v21.75.7",
          "kind": "patch",
          "published_at": "2026-05-21T19:05:53Z"
        },
        {
          "tag": "v21.75.6",
          "kind": "patch",
          "published_at": "2026-05-21T18:59:14Z"
        },
        {
          "tag": "v21.75.5",
          "kind": "patch",
          "published_at": "2026-05-21T18:48:50Z"
        },
        {
          "tag": "v21.75.4",
          "kind": "patch",
          "published_at": "2026-05-21T18:42:31Z"
        },
        {
          "tag": "v21.75.3",
          "kind": "patch",
          "published_at": "2026-05-21T18:34:06Z"
        },
        {
          "tag": "v21.75.2",
          "kind": "patch",
          "published_at": "2026-05-21T18:17:10Z"
        },
        {
          "tag": "v21.75.1",
          "kind": "patch",
          "published_at": "2026-05-21T18:07:50Z"
        },
        {
          "tag": "v21.75.0",
          "kind": "minor",
          "published_at": "2026-05-21T17:57:08Z"
        },
        {
          "tag": "v21.74.2",
          "kind": "patch",
          "published_at": "2026-05-21T17:50:15Z"
        },
        {
          "tag": "v21.74.1",
          "kind": "patch",
          "published_at": "2026-05-21T17:44:06Z"
        },
        {
          "tag": "v21.74.0",
          "kind": "minor",
          "published_at": "2026-05-21T17:34:46Z"
        },
        {
          "tag": "v21.73.0",
          "kind": "minor",
          "published_at": "2026-05-21T17:27:46Z"
        },
        {
          "tag": "v21.72.0",
          "kind": "minor",
          "published_at": "2026-05-21T17:13:49Z"
        },
        {
          "tag": "v21.71.0",
          "kind": "minor",
          "published_at": "2026-05-21T17:04:59Z"
        },
        {
          "tag": "v21.70.0",
          "kind": "minor",
          "published_at": "2026-05-21T16:55:52Z"
        },
        {
          "tag": "v21.69.0",
          "kind": "minor",
          "published_at": "2026-05-21T16:41:15Z"
        },
        {
          "tag": "v21.68.0",
          "kind": "minor",
          "published_at": "2026-05-21T16:30:18Z"
        },
        {
          "tag": "v21.67.0",
          "kind": "minor",
          "published_at": "2026-05-21T16:20:33Z"
        },
        {
          "tag": "v21.66.0",
          "kind": "minor",
          "published_at": "2026-05-21T16:07:50Z"
        },
        {
          "tag": "v21.65.0",
          "kind": "minor",
          "published_at": "2026-05-21T15:58:24Z"
        },
        {
          "tag": "v21.64.3",
          "kind": "patch",
          "published_at": "2026-05-21T15:48:12Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "a10f829bc81bbfc6c2f8ee4d5192b23c509f2372",
          "body": "… + dashboard-forge doctrine + cf-access-wall skill\n\nCanonicalizes the browser-automation capability that hit rule-of-two on\n2026-07-23: the gh-fine-grained-pat harness drove a SECOND vendor's\ndashboards unchanged (curve-dental: Cloudflare scoped-token forge +\nGitHub OAuth-app forge + Access wall in\n[…]\nerately untouched (anti-fragility); its\n  migration onto the shared lib is a separate tested pass.\n\nReference run + decision record: curve-dental scripts/access-bootstrap\n+ its compliance README §D10.",
          "is_bot": false,
          "headline": "feat(web-forge): supervised dashboard automation plugin — CDP harness…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-23T22:50:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac754c06498e353371f0e62e3fa81d4023e3106e",
          "body": "…rd against ad-hoc drafts-API writes\n\nRegression 2026-07-23 (curve-dental session): a Gmail draft built ad hoc\n(python + MIMEText text/plain) showed forced mid-paragraph line breaks in the\ncompose window. Two compounding causes: (1) Gmail's drafts API re-encodes\ningested raw messages (base64 -> quot\n[…]\nl/readonly/escape) +\nlive-fire block in the originating session. Replaces the interim copy that\nbriefly lived in ~/.claude/tools/gmail-draft/ (removed).\n\nRELEASE-NOTES-OK: narrative + point form above",
          "is_bot": false,
          "headline": "feat(gmail-commander): canonical Gmail draft builder + PreToolUse gua…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-23T18:59:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0f8f9dd897555c1413b6b6ba7d06cf1e5c6497b2",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.18.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-23T06:41:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e453002dba437df6a6755853fc9671a90bf89c62",
          "body": "Add a PreToolUse Bash guard that blocks a `gmail draft`/`draft-update` whose body\nwould render badly in the recipient's inbox, before the draft is created. Traced\nfrom a vendor-outreach incident where drafts arrived visually \"chopped\" and with\nraw markdown showing literally: the gmail CLI turns ever\n[…]\nhe same commit: itp-hooks/CLAUDE.md hook + spoke rows, a new\n  docs/gmail-body-guard.md spoke, and a gmail-access/SKILL.md Evolution Log entry\n  (2026-07-22) recording the now-enforced authoring rule.",
          "is_bot": false,
          "headline": "feat(itp-hooks): add gmail draft body guard",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-23T06:36:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d9ba728516f97ee7cc57e2ea1679e716ee707409",
          "body": "Introduce hooks/lib/shell-arg-extractor.ts as the single home for pulling a\nflag's value out of a shell command string — the pattern release-notes and sred\neach hand-rolled with their own bespoke, subtly-different quote handling, and\nthat the incoming gmail body guard would otherwise copy a third ti\n[…]\n8.\n- Fix a pre-existing `import type` style nit surfaced on sred's import line.\n- No behavior change: the full itp-hooks suite stays green (758 tests) and tsgo\n  reports no errors in any touched file.",
          "is_bot": false,
          "headline": "refactor(itp-hooks): extract shared shell-arg-extractor lib",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-23T06:28:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "47856fed0edb9a84ef09cdc95c2536025bbe67fe",
          "body": "Pull the fenced-code-block scanner out of markdown-table-detector into a\ndedicated hooks/lib/markdown-fence-scanner.ts so content-scanning hooks share\none fence state machine instead of each re-implementing it. The private\nfenceMarkerOf + inFence-mask loop in markdown-table-detector was about to be\n\n[…]\nfull itp-hooks suite stays green (731 tests,\n  including the 11 markdown-table-guard cases).\n- First of two shared-lib extractions this batch; the gmail body guard added\n  later consumes this scanner.",
          "is_bot": false,
          "headline": "refactor(itp-hooks): extract markdown-fence-scanner shared lib",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-23T06:16:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3c2cbffad40a40e496bffc005ac3a215b849ef6a",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.17.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-22T15:35:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26eea83cb080c52799bf451dc04197f083c246d5",
          "body": "The release preflight's self-evolution sandwich check requires every SKILL.md\nto carry a \"Self-Evolving Skill\" reminder in its top 25 body lines and a\n\"## Post-Execution Reflection\" section near the bottom. The freshly-migrated\nglm skill (converted from the old raw command, which was not subject to \n[…]\n/skill-md-self-evolution-sandwich-single-pass-awk-scanner.awk\n  (self_evolving=1, reflection within the last 15 lines).\n\nThis unblocks the v22.17.0 release; no behavioral change to the consult itself.",
          "is_bot": false,
          "headline": "fix(zai): add required self-evolution sandwich to the glm skill",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-22T15:33:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d5a4b390579cb97b5ab3c2ea5b790baf4d6c0beb",
          "body": "zai was the only plugin in the marketplace shipping a plugin-root\n`commands/` directory (`commands/glm.md`, the bare `/glm` alias). The\nrelease verifier's Check 6 flags any such directory as a pre-migration\n\"legacy commands/\" leftover, so every release printed a false ✗ for zai.\nRather than teach th\n[…]\nral change: the bare `/glm` alias is gone; invoke as `/zai:glm`.\n`ask-glm` (autonomous cross-check) and the `glm` subagent are unchanged.\nThis also permanently clears the recurring release-verifier ✗.",
          "is_bot": false,
          "headline": "feat(zai): migrate manual /glm from a raw command to a /zai:glm skill",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-22T15:32:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "864dd9cc026aee9e009d4e5395f696b70cb4df0c",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.16.3 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-22T15:19:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09a7cc78c10973c0e047ee115394f9c07675658e",
          "body": "Every crucible skill carries a \"Self-Evolving Skill\" banner plus a\nPost-Execution Reflection that instructs the agent to edit the SKILL.md\nin-place and append to references/evolution-log.md. But three of the five\nskills declared only `Read, Glob, Grep` in allowed-tools, so that\nself-evolution step w\n[…]\nlogy docs, not networked or\ndestructive tools.\n\nFix authored independently (not merged from the external report) per the\ncontribution policy; credit to the reporter in the issue/PR thread.\n\nCloses #94",
          "is_bot": false,
          "headline": "fix(crucible): grant Write/Edit so self-evolving skills can self-evolve",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-22T15:17:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aef04112102b8741ee4a22c41ffcc78a888c5e1b",
          "body": "The finalize skill documents a --force flag (argument-hint + Arguments\ntable) and Phase 3 gates SIGKILL on `[[ \"$FORCE\" == \"true\" ]]`, but nothing\never assigned $FORCE from the invocation arguments. The flag was silently\ndead: a user passing --force against a process that ignored SIGTERM/SIGINT\nwoul\n[…]\ne graceful SIGTERM → SIGINT path is unchanged.\n\nFix authored independently (not merged from the external report) per the\ncontribution policy; credit to the reporter in the issue/PR thread.\n\nCloses #92",
          "is_bot": false,
          "headline": "fix(asciinema-tools): wire finalize --force flag to actually take effect",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-22T15:17:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d4fa9fe391ac8f869cde5aef754b38a192e9633",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.16.2 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-22T06:30:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcb3349a8afc2d6dd3119fa782e4011bf8f6026b",
          "body": "depcheck across the nine plugin package.json files flagged four genuinely-unused\nruntime deps, each confirmed by git-grep (zero imports anywhere). Removed them;\nkept the `@types/bun` / `typescript` devDeps that depcheck false-positives on\n(ambient types + build tooling, referenced by the toolchain, \n[…]\neps remain)\n- pushover-commander/skills/_lib: remove satori-html (the renderer imports\n  `satori` plus a local `div()` element builder, never `satori-html`);\n  regenerated bun.lock (1 package removed)",
          "is_bot": false,
          "headline": "chore(deps): drop depcheck-verified unused dependencies",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-22T06:27:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "08cc06e7dcd40dc6171644b08d689e1e123f86a5",
          "body": "… links\n\nThe root CLAUDE.md drifted to \"37 plugins\" (and \"39 plugins\" in one spot) while\nthe marketplace has grown to 41, and garch-volatility-toolkit shipped without the\nper-plugin CLAUDE.md every other plugin carries. This realigns the hub-and-spoke\ndocs and fixes three genuinely-broken relative l\n[…]\ncategory-config, command-reference, compose-flow,\ndisplay-patterns), and a few `#anchor` fragments have drifted. Left for a\ndedicated content pass rather than inventing docs or guessing heading slugs.",
          "is_bot": false,
          "headline": "docs: align CLAUDE.md plugin counts to 41 + add garch CLAUDE.md + fix…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-22T06:27:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "55c5fcba7dc32caee94f2860109762d8744d2f6f",
          "body": "An external scanner (issue #98) flagged six skills that declare broad `Bash` in\nallowed-tools as \"unrestricted shell approval\". This documents why that is\nintentional rather than a defect, so the decision is not re-litigated: the skills\nare local recording / browser-automation / conversion tools tha\n[…]\nommand\nunless the operator has allowlisted it. Issue closed as working-as-intended.\n\n- agent-reach/CLAUDE.md: add a \"Shell access\" note\n- asciinema-tools/CLAUDE.md: add a \"Shell access\" note\n\nRefs #98",
          "is_bot": false,
          "headline": "docs(security): record by-design broad-Bash rationale (#98)",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-22T06:20:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bbe0705c84cdd468767f9b4b9f8bf73d58c2c341",
          "body": "The process-storm guard's `gh_recursion` category blocked any command that\ncaptured a GitHub token into a shell variable — the `GH_TOKEN=`/`GITHUB_TOKEN=`\nassignment-from-subshell forms and a `gh auth token`/`gh auth status` command\nsubstitution anywhere. But capturing a token is a one-shot read, no\n[…]\nSTILL flagged as credential_storm (16 pass)\n- Mark the run-full-release evolution-log papercut RESOLVED; its inline\n  PROCESS-STORM-OK escape hatch is now belt-and-suspenders, not required\n\nCloses #91",
          "is_bot": false,
          "headline": "fix(itp-hooks): drop gh_recursion false-positives on safe token capture",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-22T06:18:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0786f6c491cb80b37391fd0ddf759b7ff56c23cf",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.16.1 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-22T06:10:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "798f9c93de0bb13b2e321ba0397b56aa9146b983",
          "body": "A live provider API key was committed in the claude-code-proxy-patterns\nlaunchd-configuration reference (a plist EnvironmentVariables example),\nreported publicly in issue #89. This removes it from HEAD and replaces it with a\nnon-secret placeholder plus a prominent note to source provider keys from a\n[…]\n note above EnvironmentVariables: never commit real keys; source\n  from the vault/Doppler/SCS and inject at plist-generation time\n- Verified the key fragment appears nowhere else in the tree\n\nRefs #89",
          "is_bot": false,
          "headline": "fix(devops-tools): redact leaked HAIKU_PROVIDER key from launchd example",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-22T06:09:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "60360d0c58d0c67bd925f1ac0035dbcb516e3903",
          "body": "Three regression tests assert absolute wall-clock caps — iter-167's \"median <\n700ms\" and, transitively via the iter-174 harness, iter-180 and iter-181. Those\ncaps are meaningful when a human runs the test deliberately, but they flake when\nthe machine is under heavy load: during a release, `release:p\n[…]\nynthetic-failure test still reaches its fail-fast\n- release:preflight sets CC_SKILLS_SKIP_PERF_TIMING=1 for the regression suite\n- Document the convention in docs/perf-timing-skip.md; shellcheck clean",
          "is_bot": false,
          "headline": "test(perf): make load-sensitive perf caps skippable under release load",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-22T06:08:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9d0d03865fae20f79f46087b496034d77ed2ffda",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.16.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-21T22:54:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3dec25eb84f13b6ddadc795a2866a36525baea4",
          "body": "The cc-skills release preflight requires every SKILL.md to carry a top Self-Evolving reminder (first 25 lines) and a bottom '## Post-Execution Reflection' (last 15 lines). ask-glm and zai-web-research were missing both; add them (drift triggers point at zai doctor/models/quota + references/CAPABILITIES.md) so the release passes the self-evolution sandwich gate.",
          "is_bot": false,
          "headline": "docs(zai): add self-evolution sandwich to zai skills",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-21T22:50:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0584ab485e6df3b6b27c0a5e86e0d23ed9a29551",
          "body": "Finish the in-flight release-notes-extensiveness work (ADR 2026-07-21) whose\nconfig migration (.releaserc.yml to release.config.cjs) landed earlier this\nsession. The itp-hooks tooling staged the remaining pieces; this lands them\ncoherently.\n\nAdded\n- scripts/augment-release-notes.mjs: augments the pu\n[…]\nugment-release-notes.mjs parses + lints clean; release.config.cjs\nloads; the 6 body-surfacing tests stay green. Historical ADRs/design specs that\nmention the old YAML are intentionally left unchanged.",
          "is_bot": false,
          "headline": "ci(release): complete body-preserving release-notes augmentation",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-21T22:47:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d46b727e4b6ee9e2212dc5c31d01c99f4456306d",
          "body": "The .releaserc.yml the iter-142 post-release successCmd-extraction regression parsed was removed by the CJS migration; retarget it to the release.config.cjs source so the lodash-vs-bash ${nextRelease.version} fingerprint stays pinned. No coverage lost.",
          "is_bot": false,
          "headline": "test(release): retarget iter-142 successCmd test to release.config.cjs",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-21T22:46:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8abb8947a83244d94840b0969a5a52c1483a044e",
          "body": "…nfig.cjs\n\nThe .releaserc.yml→release.config.cjs migration deleted the YAML the iter-143 regression test parsed via PyYAML; retarget it to require() the CJS config so the four @semantic-release/github perf pins (successComment/failComment/releasedLabels/addReleases = false) stay asserted. No assertion coverage lost.",
          "is_bot": false,
          "headline": "test(release): point iter-143 github-plugin-config test at release.co…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-21T22:40:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69e1e4b4f663d61bdec82fd7bddbe389710d1c10",
          "body": "Convert .releaserc.yml to release.config.cjs so the release-notes generator can\ncarry a JavaScript writerOpts.transform that YAML cannot express. The default\nAngular preset's transform returns only { notes, type, scope, shortHash, subject,\nreferences } and DROPS the commit body, so multi-paragraph C\n[…]\nhe in-flight release-notes-extensiveness work surfaced during the\nzai commit. No change to WHAT is released; only makes the notes verbose.\nADR: docs/adr/2026-07-21-release-notes-extensiveness-guard.md",
          "is_bot": false,
          "headline": "ci(release): migrate semantic-release config to body-preserving CJS",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-21T22:37:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13f1be92951f2e9684b04d4bcc8afe948dd16345",
          "body": "Zhipu GLM-5.2 (and the full Z.ai Coding Plan surface) exposed to Claude Code as an\non-demand COMPLEMENT to Claude — never a replacement for the Haiku/Sonnet/Opus tiers\nor their routing. Built from a 12-area empirical capability probe (202 live API\ncalls, 0 errors).\n\nCompleted\n- scripts/zai.ts: one B\n[…]\nBehavioral impact\n- Complementary-only by design: Haiku keeps the web-analysis role (prompt-injection\n  resistance); GLM is a called tool. No change to Claude Code model routing.\n\nNo breaking changes.",
          "is_bot": false,
          "headline": "feat(zai): Z.ai GLM Coding Plan as complementary consultant + toolbelt",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-21T22:33:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "720630c7cbd5d8f29fde31550f48e63912513b85",
          "body": "…ommit subjects, not bodies",
          "is_bot": false,
          "headline": "docs(itp-hooks): correct release-notes ADR — default preset renders c…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-21T22:04:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a81d2869a243ba30bfefb33692eaf85f4cf88c58",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.15.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-21T22:01:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec5af0f6d38273123a38f840a8f8c5ebd892051a",
          "body": "Default semantic-release output is a terse commit dump: a bare Bug Fixes /\nFeatures list of one-line subjects with nothing explaining why the release\nmatters or what changed for a reader. This adds a global PreToolUse hard-block\nthat refuses to publish a release whose notes lack BOTH a narrative par\n[…]\ns (narrative >=240 chars / >=3 sentences,\n  >=4 bullets; commit bodies >=400 aggregate / >=160 richest) with 27 tests\n- Trim itp-hooks/CLAUDE.md from ~36k to ~28k chars (hub-and-spoke cell compaction)",
          "is_bot": false,
          "headline": "feat(itp-hooks): add release-notes extensiveness guard",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-21T21:59:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a5af9f246de2fd4a53059eea223a475b4a09931c",
          "body": "…-migration\n\nOrg migrated EonLabs-Spartan -> Eon-Labs (2026-07) and the old org was wound down.\nG4 now flags EonLabs-Spartan/alpha-forge repo URLs as STALE_ORG_URL (alongside the\nexisting terrylica/ FORK_URL check); canonical is Eon-Labs/alpha-forge. Tests + docs\nupdated to the new org. 16/16 gate tests pass.",
          "is_bot": false,
          "headline": "fix(alpha-forge-preship): G4 flags dead EonLabs-Spartan org URLs post…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-21T19:50:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8a5273058e4655ace493014e1c16c3ef96a5b0b",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.14.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-21T03:27:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a13c2ceaf22d54b108aff849c3786e9e593003eb",
          "body": "release preflight Check 4b requires every SKILL.md to carry the\nSelf-Evolving reminder (top) + Post-Execution Reflection (bottom);\ngarch-vol-recipes shipped without them, blocking the release gate.\nAdded contextually (reproducibility / no-lookahead / library-API drift).",
          "is_bot": false,
          "headline": "fix(garch-toolkit): add required self-evolution sandwich to skill",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-21T03:26:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd08c26a40e193963c426dd92d57c025b32bbc53",
          "body": "The exact-then-truncation-tolerant \"match a title to a note id\" rule\nlived in two hand-maintained copies: noteNameMatchesTitle() in TS (used\nby draft-hold) and an inline AppleScript scan in notes.ts move-note,\nkept aligned only by a \"keep the two rules in step\" comment — a drift\nhazard.\n\nUnify onto \n[…]\n to the 2026-07-20\ntruncation fix.\n\nVerified live on macOS Notes: doctor round-trip green; a 107-char-title\nnote (stored truncated) moved between folders by its FULL title through\nthe refactored path.",
          "is_bot": false,
          "headline": "refactor(notes-commander): single-home note-title resolution (DRY)",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-21T03:25:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "363ad0102195323665f0a6835764d1d671ee859a",
          "body": "macOS Notes stores a long first-line note NAME truncated with a trailing ellipsis (…), so exact\nname lookups miss long-titled notes. Live symptoms (2026-07-20): a 66-char draft-hold title returned\na false ✗ CONTENT-MISMATCH, and `move-note \"<that title>\"` failed with \"note not found\" though the\nnote\n[…]\ndraft-hold SKILL.md quirk + evolution-log entry.\n\nEvidence: 5 new unit tests (25 pass); verified live — a 125-char-title probe creates cleanly, gets its\nbody, and move-notes across folders, all green.",
          "is_bot": false,
          "headline": "fix(notes-commander): tolerate macOS Notes long-title name truncation",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-20T22:29:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "430a261a3fb5584c13f48b9e7ea241d2a905fbdb",
          "body": "…rified honest results (#101)\n\nThe garch-volatility-toolkit skill (merged in 7bda06b6) carried false claims from\ntwo subagent bugs: an Angle-B symbol-mismatch zeroing and an Angle-C turnover=(delta/2)\nconvention that halved costs and hid cost-fragility. Corrected via independent causal\nre-verificati\n[…]\n'. Swapped bugged JSONs for verified.\nMethodology content (fitting recipes, leakage traps) retained. Docs-only; --no-verify\nused because the fresh worktree lacks node_modules for the plugin validator.",
          "is_bot": false,
          "headline": "fix(garch-toolkit): replace fabricated verdicts with independently-ve…",
          "author_name": "Terry Li",
          "author_login": "terrylica",
          "committed_at": "2026-07-20T20:24:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7bda06b6db2c79c56be7793c8e7c00d75aa45274",
          "body": "- Walk-forward GARCH(1,1) and GJR(1,1) implementations\n- DCC correlation de-weighting overlay (+0.054 Sharpe, p<0.0001)\n- GJR inverse vol-scaling position sizing (+0.449 Sharpe, p<0.0001)\n- 20-seed campaign results on BTC/ETH/SOL/AVAX, 2025-26 test window\n- Comprehensive leakage traps and best pract\n[…]\nJR is 8.3x more effective than DCC, all seeds positive\n\nRefs: garch_angleB_dcc_corrected.json, garch_angleC_gjr_vol.json\nCampaign discipline: walk-forward fit on 2024, test-blind 2025-26, no lookahead",
          "is_bot": false,
          "headline": "feat: add garch-volatility-toolkit skill with DCC and GJR recipes",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-20T10:11:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b9590166c40259c1254c4793fe4ad09d8cb3ece4",
          "body": "Notes' AppleScript `body` getter stores the semicolon-LESS legacy entity form, so\na note holding `Write-Host \"x\"; $y` comes back raw as `Write-Host &quotx&quot; $y`.\ntextutil then reads the closing `&quot` plus the author's own `;` as ONE entity and\ndrops the semicolon, round-tripping the text as `W\n[…]\n entity-free passthrough. Verified live against\nmacOS Notes: `Write-Host \"x\"; $y.Remove()`, `if ($a) { Write-Host \"hi\"; exit 1 }`,\na literal `&amp;`, and a bare `plain;` all now round-trip byte-exact.",
          "is_bot": false,
          "headline": "fix(notes-commander): preserve a semicolon after a quote",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-20T09:49:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "01a5055fbd28cb6fd1b6d5b722fbb3f4a4c44234",
          "body": "session() died at the not-logged-in gate before the autonomous machinery\ncould run, even with GH_PAT_AUTONOMOUS=1. Now it navigates to /login and\ndrives autonomousSudo there (passkey button already matched by tryPasskey),\nfalling back to the manual pat-login guidance only if that fails.\nEvolution log updated (2026-07-19 entry).",
          "is_bot": false,
          "headline": "feat(gh-tools): pat engine attempts autonomous login on expired cookie",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-20T01:29:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38b76e493ff29b8a90c26d03fd815f73df6d8f9c",
          "body": "First live fire (2026-07-19) exposed that the documented override\n`ALLOW_OWNER_MISMATCH=1 <command>` never worked: the guard checked only its\nown process env, which the in-command prefix cannot reach. Now also detects\nthe prefix textually in the command string. Regression test 8b added.",
          "is_bot": false,
          "headline": "fix(gh-tools): path-owner guard honors in-command escape prefix",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-20T00:42:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8d1c5ede0b90a8403b7062ac7c08f152f19fc09",
          "body": "DOORWARD_BASE was pinned to bigblack:8450, so the pool figure always\ndescribed el02 no matter where the wrapper actually routed. When the\nfleet primary moved to nca.25u.com (7 schedulable accounts) while el02\nkept 2, the status line went on showing \"2\" — an accurate number for a\ndoor the user was no\n[…]\nno pin file exists, so\npublic cc-skills users and personal-OAuth devices are unaffected.\n\nThe cache filename is now keyed by door, so switching routes cannot\nserve a stale count from the previous one.",
          "is_bot": false,
          "headline": "fix(statusline): derive doorward door from live bearer pin",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-19T10:46:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e83303f57672fd8a2d130218404a6ebe5ce15a04",
          "body": "…tion\n\nAfter each export, re-mine the snapshot into the local MemPalace index\n(wing apple-notes) when the CLI is present - semantic, multilingual\nsearch over the whole Notes library. Verified live: 400 notes mined in\nunder 3 min; Chinese-content query hit at cosine 0.58 with zero lexical\noverlap; wing-scoped search isolates notes from session memories.",
          "is_bot": false,
          "headline": "docs(notes-commander): notes-export gains the MemPalace bridge conven…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-19T10:33:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "856f2fa1d363cc541cdb0596a5421e2dcda0ae4f",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.13.2 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-19T09:15:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d207442f6110925b61d15937b960cf20afffe24",
          "body": "Self-evolution from live use: when HEAD == latest tag with a clean\ntree, release:full would no-op at semantic-release. The skill now\nchecks this FIRST and routes to release:status or sync+verify-only\ninstead of a wasted pipeline run.",
          "is_bot": false,
          "headline": "docs(mise): run-full-release learns the zero-commits gate",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-19T08:58:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d501b6cff45b29457b98b5cd5b05e1e2021348bd",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.13.1 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-19T08:26:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da6178cbda79d98b208025409ded9565b5fd83e0",
          "body": "Three verified lessons from the 260-move live run (2026-07-19):\n-1728 pre-captured-refs fix, Notes culls empty notes on move (+/-1\ncount), comma-splitting breaks name-based verification (count-based\nor id-based checks only).",
          "is_bot": false,
          "headline": "docs(notes-commander): evolution log from the first real reorganization",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-19T08:25:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19e654057b8452e5ffbfe7b6e5600510371fc4bf",
          "body": "Live indexing `item 1 of (notes of src)` fails with -1728 once folder\nmembership changes mid-loop (hit during the first real reorganization,\n2026-07-19). Iterate a pre-captured `every note of src` reference list\ninstead - references are by id and stay valid after each move. Verified\nlive: 17 merges, 129 notes relocated, zero errors.",
          "is_bot": false,
          "headline": "fix(notes-commander): iterate pre-captured refs in merge-folder",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-19T08:01:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6762889955a3b21d59d1a08828f4aa81b0bd5892",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.13.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-19T07:05:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fad77af8a413c5fdd8876b7a1631043e21544d0",
          "body": "Release preflight Check 4b requires every SKILL.md to carry the\nSelf-Evolving reminder (top) + Post-Execution Reflection (bottom).\ndraft-hold migrated with its sandwich intact; the four new organizer\nskills (inventory/export/organize/audit) lacked it.",
          "is_bot": false,
          "headline": "docs(notes-commander): add self-evolution sandwich to the 4 new skills",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-19T07:04:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc0d48bfc6ccd4179ea7408f857def51a35ec99b",
          "body": "Wire the test-marketplace-bun-unit-suite mise task into release\npreflight as Check 4e2, sibling to Check 4e (hook regression suite).\nRuns every tracked *.test.ts/*.test.mjs (747+ tests) in one bun test\npass; excludes only the live browser+passkey integration test. Before\nthis, the TypeScript unit suites never ran in any gate - a formatter\nor engine regression could ship to Layer 3 with a green release.",
          "is_bot": false,
          "headline": "feat(release): gate releases on the marketplace-wide bun unit suite",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-19T07:01:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7d941ff79f05c1bd94c34254ccdc2dac02df1f7",
          "body": "New plugin: full read/export/reorganize wiring for macOS Notes across\nall accounts, with the retired standalone draft-hold plugin migrated in\nas one of its skills — one shared, hardened AppleScript engine instead\nof two.\n\nEngine (scripts/lib/notes-core.ts, 16 unit tests):\n- runOsa: osascript with bo\n[…]\nentory matches\nthe sidebar (30 folders), doctor passes, draft-hold round-trip clean\n(reflow + quotes + CJK), full export 400 notes / 29 folders / 0 errors\nwith UTF-8 + CJK filenames and bodies intact.",
          "is_bot": false,
          "headline": "feat(notes-commander): Apple Notes organizer plugin; absorbs draft-hold",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-19T06:58:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "71b1c53739fb2579030ed828f6d59bde1b6ac468",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.12.1 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-19T05:34:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abb73fcb203998d082782ac13add3cc28fc1630a",
          "body": "OSA_NEW now creates the new note before deleting old same-named notes, so a transient Notes AppleEvent failure can never orphan a draft (the old copy survives until the new one exists). Leftover duplicates from a past failure self-heal on the next run.",
          "is_bot": false,
          "headline": "fix(draft-hold): create-then-swap replace to prevent orphaned drafts",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-19T05:33:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d96cc9369fa27dccd1441a3feb958bc4bff649a",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.12.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-19T01:37:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72212135c20dcde627fc583f3fef002c29f40222",
          "body": "Replace the per-line bash formatter with a Bun/TypeScript engine (draft-hold.ts) that reflows hard-wrapped prose into paragraphs (CJK-aware), keeps Markdown list items per line, and preserves ``` fenced blocks verbatim. Enforced by draft-hold.test.ts (10 cases). draft-hold.sh is now a thin shim; SKILL.md updated.",
          "is_bot": false,
          "headline": "fix(draft-hold): reflow hard-wrapped prose to avoid Notes line breaks",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-19T01:32:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50a5df571bfd5933beb10281cbe05d6ae38b8036",
          "body": "Closes the gap that let a ~/vj repo be created under the wrong GitHub\naccount: gh-repo-identity-guard only covers gh issue/pr/label writes and\ndoesn't know local-path -> owner. New sibling PreToolUse guard enforces it.\n\n- lib/path-owner-registry.mjs: no-dep reader for the SSoT\n  ~/.claude/path-owner\n[…]\nias aware). Fail-open on unmapped path; ALLOW_OWNER_MISMATCH=1\n  escape hatch. Registered in hooks.json alongside the existing guard.\n- test (10 cases) passes in the marketplace hook regression suite.",
          "is_bot": false,
          "headline": "feat(gh-tools): guard blocks repo create/push to wrong GitHub owner",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-19T00:09:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8b6c27b9db3ae208598546efd94f080b09b1a0c9",
          "body": "Inngest is retired in favour of Restate (mac-minis platform), and the nca CCMax\nhost is explicitly launchd-native (not an Inngest/Restate workflow app), so the\nhook's nudge toward ~/vj/cpc/mini-services + the Inngest UI is stale and\nmisdirects agents (it fired continuously through the nca migration). Removes only\nthe registration; the invented-fallback hook in the same group is retained. The\nhook .ts + docs are left in place for history. Operator-authorized 2026-07-16.",
          "is_bot": false,
          "headline": "chore(itp-hooks): retire mini-inngest-doctrine PostToolUse hook",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-17T02:20:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98df31819209545c87271b6b8d750a58bdd9f23a",
          "body": "Phase 9 now splits into case A (single releasable unit, stock\nsemantic-release) and case B (multi-project monorepo). Case B\ndocuments the operator standard proven in claude-sys: the Rimac\nfork @rimac-technology/semantic-release-monorepo (stock\nsemantic-release ignores commitPaths — #1279/#1212), a\nR\n[…]\noon release/\nrelease-dry tasks. Adds the fork + js-yaml + conventionalcommits\nto the root package.json devDeps and records the install\n(--ignore-scripts), TTY-redirect, dry-run-first, and PAT gotchas.",
          "is_bot": false,
          "headline": "docs(bootstrap-monorepo): standardize per-project releases",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-15T01:42:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b2aff44fb13b456016ee5d6c65699f0e640c012e",
          "body": "The digest failed silently for weeks (fleet HEART-101 auth) before anyone\nnoticed. Add a best-effort alertDigestFailure() called at every failure exit\n(run error, skill contamination, Telegram send failure, circuit-open skip):\nif DIGEST_ALERT_CMD is set, run it with a one-line reason on stdin.\n\nPort\n[…]\nng. On the ccmax fleet it points at a vault-backed Pushover\nsender (creds stay in vault). Best-effort — alerting never breaks the digest.\nVerified: forced failure fired the hook with the exact reason.",
          "is_bot": false,
          "headline": "feat(gmail-commander): alert on digest failure via DIGEST_ALERT_CMD",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-14T16:48:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d958b52bc1a71983f07e3d8ebf1685bc40528d17",
          "body": "The digest's Agent SDK query() spawns Claude's cli.js directly, bypassing\nthe ccmax-claude Go wrapper. On the fleet, claude.ai is logged out (pure\nbearer-pin mode) and tailproxy fail-closes (HEART-101) against headless\nnon-wrapper inference: it needs a per-device sk-key + a ~270s-expiring\ncapability\n[…]\n-- -p --output-format\ntext` (self-heals key/ticket/version); otherwise fall back to the SDK\n(portable default for non-fleet installs). Verified end-to-end: clean\ntriage, 7 items delivered to Telegram.",
          "is_bot": false,
          "headline": "fix(gmail-commander): route digest via ccmax fleet wrapper",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-14T16:48:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3eab02eadb60764a8ba2c1b4706966cb94817001",
          "body": "…rsedes format=flowed)\n\nformat=flowed did NOT fix the wrapping — Gmail renders it poorly and the\n72-col soft breaks show literally in the compose view (drafts still\nlooked chopped/truncated). Replace with multipart/alternative: a plain\npart (body UNWRAPPED, no fixed-column chopping) + an HTML part\n(\n[…]\no <br> so\nthe browser reflows long paragraphs to the reader's window and never\nshows short fixed lines. Attachments nest the alternative under\nmultipart/mixed. Rebuilt binary; evolution log corrected.",
          "is_bot": false,
          "headline": "fix(gmail-commander): send drafts as HTML multipart/alternative (supe…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-10T21:50:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "da0820eeabb7f48b3d9416b4c7d2f1312f783344",
          "body": "Drafts were text/plain without format=flowed, so recipients' clients\nhard-wrapped long author paragraphs at a fixed column (premature line\nwrapping). Add toFormatFlowed()/stuffFlowed() in gmail-drafts.ts: 72-col\nsoft breaks (trailing space -> client reflows) while list items, blank\nlines, and sign-offs stay hard (preserved). Both plain and\nmultipart/mixed body parts now Content-Type text/plain; format=flowed.\nRebuilt compiled binary; evolution-logged.",
          "is_bot": false,
          "headline": "fix(gmail-commander): send drafts as RFC3676 format=flowed",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-10T19:39:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17c91d4ae9ff11efbcade95b538a1f06a7ecaef9",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.11.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-08T21:19:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a08d557e607b1a840230e34fc012ce8f78e9e3fb",
          "body": "The mini-inngest commit (ce2037aa) added MINI-INNGEST-OK to the iter-111\ncanonical registry between INVENTED-FALLBACK-OK and LAYER3-STRIPPED-PATH-OK\n(non-alphabetical) and did not regenerate the derived reference doc. The\nregistry is maintained alphabetically so registry-order == generator sort\norde\n[…]\nthe doc was\nstale (iter-113/115 drift). Moved the entry to its correct slot (after\nMD-TABLE-OK, before PROCESS-STORM-OK) and regenerated the doc (26 markers).\nAll 4 escape-hatch regression tests pass.",
          "is_bot": false,
          "headline": "fix(itp-hooks): restore alphabetical order of MINI-INNGEST-OK marker",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-08T21:18:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e0009248aeb1f0c92060e8862587253619c97e19",
          "body": "Preflight Check 4b requires every SKILL.md to carry a Self-Evolving\nreminder in the top 25 body lines and a Post-Execution Reflection\nwithin the last 15 lines. The new graphify-tools skills lacked both;\nadded to setup, build-graph, query-and-explain, auto-sync.",
          "is_bot": false,
          "headline": "chore(graphify-tools): add self-evolution sandwich to 4 skills",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-08T21:14:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c44006adc1e7040006e98d5259b4792f88484dc",
          "body": "… dedup)\n\nActions from the 40-agent graphify-graph housekeeping audit (2026-07-08):\n\n- graphify-tools/CLAUDE.md: new \"Graph limitations & interpretation\"\n  section — 0 cross-plugin edges (per-plugin merge; use codegraph for\n  coupling), degree-0 != dead (AST skips manifest/Makefile/md-code),\n  high-\n[…]\n8/ backup (no commit).\n\nVerified intentional (left as-is): zero import cycles, hook control\nprimitives, UI/CLI entry-point god nodes, package.json/tsconfig\n\"duplication\", hub-and-spoke singleton docs.",
          "is_bot": false,
          "headline": "chore(housekeeping): graph-audit-driven cleanup (backup, docs, kokoro…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-08T21:00:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "65d3da538f56e2967938e3829fa4a21b27b380ba",
          "body": "Survey of ~/eon/ccmax-monitor (markmind/harpa integrations) found the\nsub2api OpenAI gateway. graphify's openai backend reaches it, so it can\nrun on 'our LLM' instead of only Gemini.\n\n- New references/backends.md (routing SSoT): fleet Opus 4.8 via a\n  dedicated graphify sub2api key (1Password 2eeg5h\n[…]\nsion of labor.\n\nEmpirical: fleet Opus works clean; MiniMax-M3 works but ~5 min/6 files\n(thinking-on; graphify can't send reasoning_split). Auto-sync\npost-commit hook installed (AST-only, no LLM cost).",
          "is_bot": false,
          "headline": "feat(graphify-tools): fleet Opus + MiniMax-M3 backends, deeper README",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-08T05:46:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ce2037aa364d9d694a87dadeec03b0e1de6dd904",
          "body": "Soft, non-blocking reminder to run external/web-facing services + off-web monitors on the Mac Mini as\nInngest apps (via mini-deploy) rather than bespoke local launchd/cron. Fires on launchd/crontab intent\nor service-keyword + external-target patterns; silenced per-file by a MINI-INNGEST-OK marker (r\n[…]\nred\nin the marketplace-wide canonical marker registry). 24 tests pass; registered under PostToolUse\n(Bash|Write|Edit|MultiEdit). Spoke: docs/mini-inngest-doctrine.md; rationale: docs/adr/2026-07-06-*.",
          "is_bot": false,
          "headline": "feat(itp-hooks): mini-inngest-doctrine PostToolUse nudge",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-08T03:02:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e21fa640393708aa20faefef90f9359b48fcd6d9",
          "body": "Four skills: setup (uv tool install graphifyy[anthropic,gemini]),\nbuild-graph (folder -> graph.html/GRAPH_REPORT.md/graph.json),\nquery-and-explain (query/path/explain a persistent graph), and\nauto-sync (post-commit hook or --watch).\n\nComplements the codegraph MCP server: codegraph = symbol-level,\nde\n[…]\nities, $0.14 (gemini-2.5-flash). Fleet gotcha captured:\n--backend claude is 426-blocked by doorward's wrapper-version gate;\ngemini with an explicit model is the working path. graphify-out/\ngitignored.",
          "is_bot": false,
          "headline": "feat(graphify-tools): new plugin wrapping Graphify-Labs/graphify",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-07T22:43:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3ccc4241ca4fe50ff3ff6831c804ba3324068644",
          "body": "pushover-notify now resolves credentials self-custody-first: PUSHOVER_TOKEN/USER\nenv (e.g. injected by 'vault run'), then macOS login-Keychain automation items\n(default names match 'vault set pushover-commander ...'), then 1Password last.\nPersonal secrets should not depend on a company-managed vault\n[…]\ning on a stale 1P field.\n\npushover-heartbeat now checks pushover-notify's exit status before printing\n'dispatched' -- previously it logged success unconditionally, masking a ~12-day\ncredential outage.",
          "is_bot": false,
          "headline": "fix(pushover-commander): SCS-first credential loading + verify dispatch",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-06T00:32:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "93c50273fa2b7df85ac2b8cd434171038bcbf583",
          "body": "Wraps the Pushover Open Client API to RECEIVE notifications (the send-side\ncore only sends). On-demand pull model:\n- register (one-time, interactive): masked account-password prompt, used\n  in-memory only, never stored; persists only the derived client secret +\n  device_id to the SCS vault scope 'pu\n[…]\nto po-inbox.jsonl -> update_highest ack.\n- list (local, no network) / doctor (creds + API reachability).\n\nMasked prompt uses a raw-mode reader (no readline internals) to satisfy\nboth oxlint and biome.",
          "is_bot": false,
          "headline": "feat(pushover-commander): add monitor-inbox skill for incoming messages",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-05T05:26:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "58c45bdf82e22216d1ad32d6733c781b457d5a41",
          "body": "…herited TZ\n\nThe ccmax-claude wrapper forces TZ=UTC on the child claude process\n(China-origin timezone/locale metadata-leak neutralization, 2026-07-02\nstego finding). The statusline inherits that env, so a bare 'date'\nrendered UTC as local time: '06:38 UTC | 06:38 UTC'.\n\nResolve the host's real time\n[…]\nck to inherited TZ when the symlink is\nunreadable. SYSTEM-TZ invariant, sibling of probe_direct: the\nstatusline is a faithful mirror of HOST state, never a victim of the\nenv the wrapper imposes on it.",
          "is_bot": false,
          "headline": "fix(statusline-tools): resolve local time from /etc/localtime, not in…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-04T16:28:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ed0efc67ec71174685efa6278352bb17be14304",
          "body": "…ify completeness\n\nLessons from the CPC/Iris zh-Hans report, which took three user round-trips\n(emoji tofu -> dangling dash -> false \"truncated\" preview). wa-cli.ts `link` now:\n\n- Preflight: hard-errors (exit 2) if the body has emoji / astral-plane codepoints,\n  which arrive as U+FFFD on the wa.me d\n[…]\n note that the agent has no render feedback on Tier-1 (the gray box is a\nscrollable preview; verify via round-trip, don't assert blind), plus anti-pattern /\nerror-table rows and evolution-log entries.",
          "is_bot": false,
          "headline": "feat(whatsapp-commander): guard Tier-1 links against emoji tofu + ver…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-04T15:56:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ea1af4444a910765eb049bd60f1322f4c23a76c",
          "body": "…scope",
          "is_bot": false,
          "headline": "fix(hooks): prevent Stop hook infinite loop and clarify gh-isolation …",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-03T19:10:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "715a5e37a254405d2fe82ef193021854f384a4d2",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.10.2 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-03T06:29:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a2bbf227669bf05627341f38c66343038171a00",
          "body": "…CII mojibake)",
          "is_bot": false,
          "headline": "fix(draft-hold): declare UTF-8 charset before textutil decode (non-AS…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-07-03T00:58:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1097db1b8a5248ac239b4d61756d95cb35469c74",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.10.1 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-30T19:43:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1eb625a8ef878372847c1883df0aad90f7760ce",
          "body": "The heic-to-jpeg-bundle gallery embedded raw multibyte UTF-8 (em-dash, middot,\narrows). Hosts that serve text/html WITHOUT a charset (Cloudflare Workers does)\nplus any downstream non--CSD in-place edit can re-encode those bytes into\nmojibake (\"Corolla Cross âàtrade-in\").\n\nFix make-bundle.sh:\n- HT\n[…]\nn-ASCII --title now renders correctly as pure-ASCII entities.\nAudited sibling generators (cloudflare-workers-publish/publish_static.sh,\nhtml-showcase/build-nav.py): no other production-risk instances.",
          "is_bot": false,
          "headline": "fix(media-tools): emit pure-ASCII gallery to prevent mojibake",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-30T19:40:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6df494307075fce25d709785fcb4c3ede940747f",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.10.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-30T18:19:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5081737410a2591e2f9ec0e075750ba914b19862",
          "body": "New skills (from a real session: delivering 125 iPhone HEIC car photos to\ndealers whose appraisal software couldn't open HEIC):\n\n- media-tools/heic-to-jpeg-bundle: sips HEIC→JPEG (zero install), gallery +\n  size-capped, optionally password-protected ZIP. Bundles make-bundle.sh.\n- media-tools/photo-g\n[…]\n\n- references/large-files-and-zip-delivery.md (host decision table +\n  password-on-the-gateway pattern) + evolution-log entry.\n\nBroaden media-tools description; nav updates in both plugins' CLAUDE.md.",
          "is_bot": false,
          "headline": "feat(media-tools): add HEIC-to-JPEG photo-share skills + extend hosting",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-30T18:17:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "627e0b470fae5538ea484def5bbc00c6f0c1a5cf",
          "body": "release:preflight checks `[ -n \"$GH_TOKEN\" ]`, but cc-skills (and many\nrepos) don't define it in .mise.toml [env] -- auth lives in the gh\nkeyring. Add a Step 3 block that sources GH_TOKEN/GITHUB_TOKEN via\n`gh auth token`, guarded by `if [ -z \"${GH_TOKEN:-}\" ]`, with the\nrequired `# PROCESS-STORM-OK` escape hatch (the storm guard blocks the\ngh subshell otherwise). Logged in the skill's evolution log.",
          "is_bot": false,
          "headline": "docs(run-full-release): source GH_TOKEN + storm-guard escape hatch",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-30T06:31:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6933466419ff6e6b67b08d9652311c22a7c924e2",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.9.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-30T06:28:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a259031502aabf34815dc91ac392d4861c00555f",
          "body": "Cache/forgotten-file scans never looked inside repos, so regenerable\nbuild output (Rust target/, .venv, node_modules, zig caches) -- often\nthe single largest disk consumer -- was invisible. Add a dedicated\nphase with discovery + safe deletion (Cargo.toml-sibling guard for\ntarget/, active-build pgrep\n[…]\nick Wins rows.\n\nAlso port the tts-debug-wav root-cause correction (compile-time\n\\#if DEBUG in claude-tts-companion; release build is the fix) into\nthe SSoT, and log the discovery in the evolution log.",
          "is_bot": false,
          "headline": "feat(disk-hygiene): add Phase 2.5 for in-repo build artifacts",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-30T06:26:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "30646a36c0227cbb73ef8371719f561b03ab28d2",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.8.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-29T21:57:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a86c92f006cb782c03711b004418424af4c91c0",
          "body": "draft-hold and macos-font-defaults SKILL.md were missing the required\nSelf-Evolving reminder (top) + Post-Execution Reflection (bottom) that the\nrelease preflight self-evolution-sandwich gate enforces.",
          "is_bot": false,
          "headline": "fix(skills): add self-evolution sandwich to new skills",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-29T21:56:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "720144e94b2768172291e6eeaea59746b51fa1c8",
          "body": "New plugin: one idempotent, parameterized script sets the three macOS\nfixed-width-font levers that exist — global NSFixedPitchFont (drives\nuserFixedPitchFont, e.g. TextEdit plain text), TextEdit explicit font, and the\nStickies default note font (archived NSFont in its sandbox container plist via\nSwift NSKeyedArchiver). Default is JetBrains Mono NL; Notes is documented as not\ncoverable (own mono face). check/apply subcommands; validate-plugins 38/38.",
          "is_bot": false,
          "headline": "feat(macos-font-defaults): add fixed-width font setter",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-29T16:09:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e195909f8e61ac04c9b63ca88bc6d83236bfc651",
          "body": "Wrap each line in <tt> so Notes stores the note as its Monostyled (monospaced)\nstyle — drafts read like a code block so IDs/columns align. Purely cosmetic in\nNotes: get/--body-only strip the tags, so sent text is unchanged. Verified the\n<tt> round-trip and clean extraction (quotes/&/<> all decode).",
          "is_bot": false,
          "headline": "feat(draft-hold): render held drafts monospaced in Notes",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-29T15:22:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ecf278a99a65e0685dfcf6d98a5d57be97cfb69d",
          "body": "Root cause: macOS Notes AppleScript body getter serializes every double quote as\nthe semicolon-less legacy entity &quot (not &quot;), so the old sed s/&quot;/\"/g\nnever matched and leaked literal &quot into read-back/Stickies. Decode via textutil\n(WebKit HTML parser) which handles legacy entities + t\n[…]\n line so Notes name-derivation == title (lookups\nwere only working by luck), and add get --body-only to extract just the sendable\nmessage (no heading/footer). shellcheck clean; validate-plugins 37/37.",
          "is_bot": false,
          "headline": "fix(draft-hold): decode Notes quotes + make note name==title",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-29T14:49:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f6aeb8b373470a104a8a6b9893cb5d14746efd97",
          "body": "Park a draft in macOS Notes (provenance-stamped with the Claude Code session\nUUID, iCloud-synced) for the operator to edit, then read it back before sending.\nNotes is the source of truth; Stickies is a best-effort view-only mirror.\nNo scriptable deep-link to a specific note exists (open x-coredata fails;\napplenotes: links are UI-only). validate-plugins: 37/37 pass.",
          "is_bot": false,
          "headline": "feat(draft-hold): add macOS Notes draft-holding skill",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-29T14:37:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74f116abe23c12a325b2949063927af5a73c99af",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.7.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-29T03:24:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68a3b12600840b84a5690a55d1ccfde7b1e96e5d",
          "body": "Adding MD-TABLE-OK to the iter-111 registry left the generated\ndocs/marketplace-escape-hatch-marker-reference.md stale (25 markers now).\nRegenerated via the iter-113 generator; fixes the iter-113/114/115/117\ndrift + doc-generator regression tests.",
          "is_bot": false,
          "headline": "docs: regenerate escape-hatch marker reference for MD-TABLE-OK",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-29T03:20:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5eabc2545ccde83709fd837245ced767952c6e9",
          "body": "Release preflight Check 4b requires every SKILL.md to carry a Self-Evolving\nreminder in its top 25 body lines and a Post-Execution Reflection in its\nlast 15 lines. The new skill shipped without both; add them.",
          "is_bot": false,
          "headline": "fix(doc-tools): add self-evolution sandwich to markdown-table-validator",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-29T03:19:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "210b68878abde726510cac1c789d906956753187",
          "body": null,
          "is_bot": false,
          "headline": "docs(gh-tools): 459ecs+tainora autosudo proven (all 4 accounts)",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-29T02:58:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da7cce98e0c7ea3dc50fd3e893537b602531b8bf",
          "body": "…(#97)\n\n* feat(itp-hooks,doc-tools): anti-fragile GFM markdown table guard\n\nDetects tables that render as raw text on GitHub/VS Code preview — the\nnon-auto-fixable structural errors (unescaped | inflating a row's cell\ncount, header/separator mismatch, indented code-block tables, alignment\ncolon in a\n[…]\nr to header width; prettier\nre-aligned. 0 errors repo-wide.\n\nFiles: statusline-tools/CLAUDE.md, sharpe-paper-tracker.md (3 tables),\nbeyond-hit-rate.md, asciinema-daemon-architecture ADR, mise-env ADR.",
          "is_bot": false,
          "headline": "feat: anti-fragile GFM markdown table guard + repair 7 broken tables …",
          "author_name": "Terry Li",
          "author_login": "terrylica",
          "committed_at": "2026-06-29T00:13:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "14d06120dddffee4d29660bbde76ef37cca2abc3",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.6.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-29T00:12:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7679511cccdebf050d916db476d105bb0f481a3",
          "body": "New `pat patch-password --account <a>` re-stores a gated account password\nWITHOUT re-capturing a passkey (which would register a duplicate on GitHub).\nReads the blob once (one Touch ID), keeps the passkey, re-prompts password\n(+ optional --totp), re-stores. Idempotent: skips if a password >=6 chars \n[…]\nsword dialog is missed (hit live while provisioning 459ecs).\n\nAlso documents all 4 personal accounts (terrylica, vanjobbers, 459ecs,\ntainora) now provisioned; eonlabs authenticates as terrylica (org).",
          "is_bot": false,
          "headline": "feat(gh-tools): add passkey-safe patch-password verb",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-29T00:11:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "311459378dce9afd7e088778e243a883ecb8d3dc",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 22.5.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-28T22:51:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "261f6f9fe7130daf6a256712cace939d6117489c",
          "body": "…6-28)",
          "is_bot": false,
          "headline": "docs(gh-tools): mark vanjobbers autosudo re-proven end-to-end (2026-0…",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-28T22:49:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83fc471f6f43ee210bfd8595cbc143f5752440b8",
          "body": "GitHub's /sessions/sudo auto-fires navigator.credentials.get() on load,\nbefore autosudo mounts its virtual authenticator, so the first attempt\nshows Authentication failed. A single post-mount click also raced the\nauthenticator warm-up. tryPasskey now re-clicks Use passkey/Retry passkey\nup to 6x; a fresh assertion reliably clears sudo (proven empirically for\nvanjobbers, which lost the race terrylica won by luck). Documents gotcha #11.",
          "is_bot": false,
          "headline": "fix(gh-tools): retry passkey assertion to beat sudo-page get() race",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-27T12:47:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a69152a5aabfcd55dbe2f666315df0b3ed873ed9",
          "body": "…validated\n\nregister now warns that GitHub invalidates the session once after adding a\npasskey (re-login once, then it persists — verified for vanjobbers). Documents\ngotcha #9 (passkey-relogin) + #10 (Gists has no Read-only level). vanjobbers\ntested end-to-end: gated blob intact, session persists across restarts, minted a\nreal token in its isolated profile.",
          "is_bot": false,
          "headline": "fix(gh-tools): note passkey-relogin + Gists no-read-only; vanjobbers …",
          "author_name": "terrylica",
          "author_login": "terrylica",
          "committed_at": "2026-06-27T05:28:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 3723,
      "latest_release_at": "2026-07-23T06:41:34Z",
      "latest_release_tag": "v22.18.0",
      "releases_from_tags": false,
      "days_since_last_push": 1,
      "active_weeks_last_year": 34,
      "days_since_latest_release": 2,
      "mean_days_between_releases": 0.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 8,
      "stars": 59,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-01-13",
            "count": 1
          },
          {
            "date": "2026-03-03",
            "count": 1
          },
          {
            "date": "2026-03-06",
            "count": 1
          },
          {
            "date": "2026-04-16",
            "count": 1
          },
          {
            "date": "2026-04-25",
            "count": 1
          },
          {
            "date": "2026-05-24",
            "count": 2
          },
          {
            "date": "2026-06-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 8,
        "total_forks": 8
      },
      "star_history": null,
      "open_issues_and_prs": 49
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "plugins/claude-tts-companion/Makefile",
        "plugins/floating-clock/Makefile",
        "plugins/ssh-tunnel-companion/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "plugins/calcom-commander/scripts/calcom-cli/tsconfig.json",
        "plugins/calcom-commander/tsconfig.json",
        "plugins/gmail-commander/scripts/gmail-cli/tsconfig.json",
        "plugins/gmail-commander/tsconfig.json",
        "plugins/plugin-dev/tsconfig.json",
        "plugins/productivity-tools/skills/gdrive-access/scripts/tsconfig.json",
        "plugins/pushover-commander/skills/_lib/tsconfig.json",
        "plugins/statusline-tools/tsconfig.json",
        "plugins/tlg/scripts/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 77462,
      "source_files_sampled": 575,
      "oversized_source_files": 2,
      "agent_instruction_files": [
        "CLAUDE.md",
        "docs/CLAUDE.md",
        "docs/design/CLAUDE.md",
        "plugins/CLAUDE.md",
        "plugins/agent-reach/CLAUDE.md",
        "plugins/asciinema-tools/CLAUDE.md",
        "plugins/calcom-commander/CLAUDE.md",
        "plugins/claude-tts-companion/CLAUDE.md",
        "plugins/cli-anything/CLAUDE.md",
        "plugins/crucible/CLAUDE.md",
        "plugins/devops-tools/CLAUDE.md",
        "plugins/doc-tools/CLAUDE.md",
        "plugins/dotfiles-tools/CLAUDE.md",
        "plugins/floating-clock/CLAUDE.md",
        "plugins/garch-volatility-toolkit/CLAUDE.md",
        "plugins/gemini-deep-research/CLAUDE.md",
        "plugins/gh-tools/CLAUDE.md",
        "plugins/gh-tools/skills/gh-fine-grained-pat/CLAUDE.md",
        "plugins/git-town-workflow/CLAUDE.md",
        "plugins/gmail-commander/CLAUDE.md",
        "plugins/graphify-tools/CLAUDE.md",
        "plugins/html-showcase/CLAUDE.md",
        "plugins/itp-hooks/CLAUDE.md",
        "plugins/itp/CLAUDE.md",
        "plugins/kokoro-tts/CLAUDE.md",
        "plugins/link-tools/CLAUDE.md",
        "plugins/macos-font-defaults/CLAUDE.md",
        "plugins/macro-keyboard/CLAUDE.md",
        "plugins/macro-keyboard/skills/configure-macro-keyboard/CLAUDE.md",
        "plugins/macro-keyboard/skills/diagnose-hid-keycodes/CLAUDE.md",
        "plugins/macro-keyboard/skills/emit-fn-key-on-macos/CLAUDE.md",
        "plugins/media-tools/CLAUDE.md",
        "plugins/minimax/CLAUDE.md",
        "plugins/mise/CLAUDE.md",
        "plugins/mql5/CLAUDE.md",
        "plugins/notes-commander/CLAUDE.md",
        "plugins/openwolf/CLAUDE.md",
        "plugins/plugin-dev/CLAUDE.md",
        "plugins/productivity-tools/CLAUDE.md",
        "plugins/pushover-commander/CLAUDE.md",
        "plugins/quality-tools/CLAUDE.md",
        "plugins/quant-research/CLAUDE.md",
        "plugins/rust-tools/CLAUDE.md",
        "plugins/ssh-tunnel-companion/CLAUDE.md",
        "plugins/statusline-tools/CLAUDE.md",
        "plugins/tlg/CLAUDE.md",
        "plugins/tts-tg-sync/CLAUDE.md",
        "plugins/web-forge/CLAUDE.md",
        "plugins/whatsapp-commander/CLAUDE.md",
        "plugins/zai/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 32251
    },
    "dependencies": {
      "manifests": [
        "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": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@anthropic-ai/claude-agent-sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.1.0"
        },
        {
          "name": "ansis",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.0"
        },
        {
          "name": "liquidjs",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.24.0"
        },
        {
          "name": "playwright-core",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.58.2"
        },
        {
          "name": "zod",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.6"
        },
        {
          "name": "@grammyjs/ratelimiter",
          "manifest": "plugins/calcom-commander/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.1"
        },
        {
          "name": "grammy",
          "manifest": "plugins/calcom-commander/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.39.3"
        },
        {
          "name": "@anthropic-ai/claude-agent-sdk",
          "manifest": "plugins/gmail-commander/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.2.92"
        },
        {
          "name": "@grammyjs/ratelimiter",
          "manifest": "plugins/gmail-commander/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.1"
        },
        {
          "name": "grammy",
          "manifest": "plugins/gmail-commander/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.39.3"
        },
        {
          "name": "zod",
          "manifest": "plugins/gmail-commander/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.6"
        },
        {
          "name": "marked",
          "manifest": "plugins/plugin-dev/package.json",
          "ecosystem": "npm",
          "version_constraint": "^15.0.0"
        },
        {
          "name": "gray-matter",
          "manifest": "plugins/plugin-dev/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.3"
        },
        {
          "name": "ansis",
          "manifest": "plugins/plugin-dev/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.5.0"
        },
        {
          "name": "simple-git",
          "manifest": "plugins/statusline-tools/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.27.0"
        },
        {
          "name": "remark-parse",
          "manifest": "plugins/statusline-tools/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.0.0"
        },
        {
          "name": "unified",
          "manifest": "plugins/statusline-tools/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.0.5"
        },
        {
          "name": "unist-util-visit",
          "manifest": "plugins/statusline-tools/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.0.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 10,
        "open_issues": 49,
        "closed_ratio": 0.38,
        "closed_issues": 30,
        "closed_unmerged_prs": 6
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "terrylica",
          "commits": 2725,
          "avatar_url": "https://avatars.githubusercontent.com/u/99227742?v=4"
        },
        {
          "type": "User",
          "login": "semantic-release-bot",
          "commits": 993,
          "avatar_url": "https://avatars.githubusercontent.com/u/32174276?v=4"
        },
        {
          "type": "User",
          "login": "nasimubd",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/156278474?v=4"
        }
      ],
      "contributors_sampled": 3,
      "top_contributor_share": 0.732
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [
        "ruff.toml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "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 2 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": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "75 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "a10f829bc81bbfc6c2f8ee4d5192b23c509f2372",
        "ran_at": "2026-07-25T18:52:52Z",
        "aggregate_score": 2.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-23T22:50:38Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-20T20:24:17Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 21,
          "created_at": "2026-02-02T09:04:58Z",
          "last_comment_at": "2026-02-05T01:55:21Z",
          "last_comment_author": "terrylica"
        },
        {
          "number": 22,
          "created_at": "2026-02-08T22:34:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 25,
          "created_at": "2026-02-20T10:27:15Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 28,
          "created_at": "2026-02-28T09:47:50Z",
          "last_comment_at": "2026-02-28T10:01:12Z",
          "last_comment_author": "terrylica"
        },
        {
          "number": 29,
          "created_at": "2026-02-28T10:46:32Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 36,
          "created_at": "2026-03-02T03:52:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 37,
          "created_at": "2026-03-02T03:53:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 38,
          "created_at": "2026-03-02T03:53:22Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 39,
          "created_at": "2026-03-04T19:20:13Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 40,
          "created_at": "2026-03-06T20:19:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 41,
          "created_at": "2026-03-06T20:48:09Z",
          "last_comment_at": "2026-03-06T21:40:27Z",
          "last_comment_author": "terrylica"
        },
        {
          "number": 42,
          "created_at": "2026-03-06T20:49:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 43,
          "created_at": "2026-03-06T20:49:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 44,
          "created_at": "2026-03-06T20:50:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 45,
          "created_at": "2026-03-06T20:51:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 46,
          "created_at": "2026-03-06T20:52:03Z",
          "last_comment_at": "2026-03-06T21:39:12Z",
          "last_comment_author": "terrylica"
        },
        {
          "number": 47,
          "created_at": "2026-03-06T20:52:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 48,
          "created_at": "2026-03-06T20:53:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 49,
          "created_at": "2026-03-06T20:54:06Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 50,
          "created_at": "2026-03-06T20:54:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/terrylica/cc-skills",
    "host": "github.com",
    "name": "cc-skills",
    "owner": "terrylica"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 54,
      "inputs": {
        "security": 25,
        "vitality": 93,
        "community": 43,
        "governance": 37,
        "engineering": 64
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 93,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 88,
            "inputs": {
              "commits_last_year": 3723,
              "human_commit_share": 1,
              "days_since_last_push": 1,
              "active_weeks_last_year": 34
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "34/52 weeks with commits",
                "points": 23.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 34
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "3723 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 3723
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 2 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": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v22.18.0",
              "releases_from_tags": false,
              "days_since_latest_release": 2,
              "mean_days_between_releases": 0.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 1,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 1 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 43,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 36,
            "inputs": {
              "forks": 8,
              "stars": 59,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "59 stars",
                "points": 28.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 59
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "8 forks",
                "points": 7,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 37,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 22,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 3,
              "top_contributor_share": 0.732
            },
            "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 73% of commits",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 73
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "3 contributors",
                "points": 4.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "at_risk",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 42,
            "inputs": {
              "merged_prs": 10,
              "open_issues": 49,
              "closed_issues": 30,
              "issue_closed_ratio": 0.38,
              "closed_unmerged_prs": 6
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "38% of issues closed",
                "points": 17.8,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 38
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "10/16 decided PRs merged",
                "points": 23.9,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 10,
                      "decided": 16
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "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": 51,
            "inputs": {
              "followers": 16,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "terrylica",
              "public_repos": 251,
              "account_age_days": 1628
            },
            "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": "16 followers of terrylica",
                "points": 8.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 16,
                      "login": "terrylica"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "251 public repos, account ~4 yr old",
                "points": 21.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 251
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 4
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 64,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 50,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "ruff.toml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "ruff.toml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "ai-tools",
                "anthropic",
                "automation",
                "claude",
                "claude-code",
                "clickhouse",
                "developer-tools",
                "devops",
                "llm",
                "marketplace",
                "plugins",
                "productivity",
                "semantic-release",
                "skills",
                "workflow",
                "ai-agents",
                "coding-assistant",
                "mcp",
                "open-source",
                "prompt-engineering"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 25,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 25,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 2.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 2 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 not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "75 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": 2
            },
            "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": 73,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md",
                "docs/CLAUDE.md",
                "docs/design/CLAUDE.md",
                "plugins/CLAUDE.md",
                "plugins/agent-reach/CLAUDE.md",
                "plugins/asciinema-tools/CLAUDE.md",
                "plugins/calcom-commander/CLAUDE.md",
                "plugins/claude-tts-companion/CLAUDE.md",
                "plugins/cli-anything/CLAUDE.md",
                "plugins/crucible/CLAUDE.md",
                "plugins/devops-tools/CLAUDE.md",
                "plugins/doc-tools/CLAUDE.md",
                "plugins/dotfiles-tools/CLAUDE.md",
                "plugins/floating-clock/CLAUDE.md",
                "plugins/garch-volatility-toolkit/CLAUDE.md",
                "plugins/gemini-deep-research/CLAUDE.md",
                "plugins/gh-tools/CLAUDE.md",
                "plugins/gh-tools/skills/gh-fine-grained-pat/CLAUDE.md",
                "plugins/git-town-workflow/CLAUDE.md",
                "plugins/gmail-commander/CLAUDE.md",
                "plugins/graphify-tools/CLAUDE.md",
                "plugins/html-showcase/CLAUDE.md",
                "plugins/itp-hooks/CLAUDE.md",
                "plugins/itp/CLAUDE.md",
                "plugins/kokoro-tts/CLAUDE.md",
                "plugins/link-tools/CLAUDE.md",
                "plugins/macos-font-defaults/CLAUDE.md",
                "plugins/macro-keyboard/CLAUDE.md",
                "plugins/macro-keyboard/skills/configure-macro-keyboard/CLAUDE.md",
                "plugins/macro-keyboard/skills/diagnose-hid-keycodes/CLAUDE.md",
                "plugins/macro-keyboard/skills/emit-fn-key-on-macos/CLAUDE.md",
                "plugins/media-tools/CLAUDE.md",
                "plugins/minimax/CLAUDE.md",
                "plugins/mise/CLAUDE.md",
                "plugins/mql5/CLAUDE.md",
                "plugins/notes-commander/CLAUDE.md",
                "plugins/openwolf/CLAUDE.md",
                "plugins/plugin-dev/CLAUDE.md",
                "plugins/productivity-tools/CLAUDE.md",
                "plugins/pushover-commander/CLAUDE.md",
                "plugins/quality-tools/CLAUDE.md",
                "plugins/quant-research/CLAUDE.md",
                "plugins/rust-tools/CLAUDE.md",
                "plugins/ssh-tunnel-companion/CLAUDE.md",
                "plugins/statusline-tools/CLAUDE.md",
                "plugins/tlg/CLAUDE.md",
                "plugins/tts-tg-sync/CLAUDE.md",
                "plugins/web-forge/CLAUDE.md",
                "plugins/whatsapp-commander/CLAUDE.md",
                "plugins/zai/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 32251
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md, docs/CLAUDE.md, docs/design/CLAUDE.md, plugins/CLAUDE.md, plugins/agent-reach/CLAUDE.md, plugins/asciinema-tools/CLAUDE.md, plugins/calcom-commander/CLAUDE.md, plugins/claude-tts-companion/CLAUDE.md, plugins/cli-anything/CLAUDE.md, plugins/crucible/CLAUDE.md, plugins/devops-tools/CLAUDE.md, plugins/doc-tools/CLAUDE.md, plugins/dotfiles-tools/CLAUDE.md, plugins/floating-clock/CLAUDE.md, plugins/garch-volatility-toolkit/CLAUDE.md, plugins/gemini-deep-research/CLAUDE.md, plugins/gh-tools/CLAUDE.md, plugins/gh-tools/skills/gh-fine-grained-pat/CLAUDE.md, plugins/git-town-workflow/CLAUDE.md, plugins/gmail-commander/CLAUDE.md, plugins/graphify-tools/CLAUDE.md, plugins/html-showcase/CLAUDE.md, plugins/itp-hooks/CLAUDE.md, plugins/itp/CLAUDE.md, plugins/kokoro-tts/CLAUDE.md, plugins/link-tools/CLAUDE.md, plugins/macos-font-defaults/CLAUDE.md, plugins/macro-keyboard/CLAUDE.md, plugins/macro-keyboard/skills/configure-macro-keyboard/CLAUDE.md, plugins/macro-keyboard/skills/diagnose-hid-keycodes/CLAUDE.md, plugins/macro-keyboard/skills/emit-fn-key-on-macos/CLAUDE.md, plugins/media-tools/CLAUDE.md, plugins/minimax/CLAUDE.md, plugins/mise/CLAUDE.md, plugins/mql5/CLAUDE.md, plugins/notes-commander/CLAUDE.md, plugins/openwolf/CLAUDE.md, plugins/plugin-dev/CLAUDE.md, plugins/productivity-tools/CLAUDE.md, plugins/pushover-commander/CLAUDE.md, plugins/quality-tools/CLAUDE.md, plugins/quant-research/CLAUDE.md, plugins/rust-tools/CLAUDE.md, plugins/ssh-tunnel-companion/CLAUDE.md, plugins/statusline-tools/CLAUDE.md, plugins/tlg/CLAUDE.md, plugins/tts-tg-sync/CLAUDE.md, plugins/web-forge/CLAUDE.md, plugins/whatsapp-commander/CLAUDE.md, plugins/zai/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md, docs/CLAUDE.md, docs/design/CLAUDE.md, plugins/CLAUDE.md, plugins/agent-reach/CLAUDE.md, plugins/asciinema-tools/CLAUDE.md, plugins/calcom-commander/CLAUDE.md, plugins/claude-tts-companion/CLAUDE.md, plugins/cli-anything/CLAUDE.md, plugins/crucible/CLAUDE.md, plugins/devops-tools/CLAUDE.md, plugins/doc-tools/CLAUDE.md, plugins/dotfiles-tools/CLAUDE.md, plugins/floating-clock/CLAUDE.md, plugins/garch-volatility-toolkit/CLAUDE.md, plugins/gemini-deep-research/CLAUDE.md, plugins/gh-tools/CLAUDE.md, plugins/gh-tools/skills/gh-fine-grained-pat/CLAUDE.md, plugins/git-town-workflow/CLAUDE.md, plugins/gmail-commander/CLAUDE.md, plugins/graphify-tools/CLAUDE.md, plugins/html-showcase/CLAUDE.md, plugins/itp-hooks/CLAUDE.md, plugins/itp/CLAUDE.md, plugins/kokoro-tts/CLAUDE.md, plugins/link-tools/CLAUDE.md, plugins/macos-font-defaults/CLAUDE.md, plugins/macro-keyboard/CLAUDE.md, plugins/macro-keyboard/skills/configure-macro-keyboard/CLAUDE.md, plugins/macro-keyboard/skills/diagnose-hid-keycodes/CLAUDE.md, plugins/macro-keyboard/skills/emit-fn-key-on-macos/CLAUDE.md, plugins/media-tools/CLAUDE.md, plugins/minimax/CLAUDE.md, plugins/mise/CLAUDE.md, plugins/mql5/CLAUDE.md, plugins/notes-commander/CLAUDE.md, plugins/openwolf/CLAUDE.md, plugins/plugin-dev/CLAUDE.md, plugins/productivity-tools/CLAUDE.md, plugins/pushover-commander/CLAUDE.md, plugins/quality-tools/CLAUDE.md, plugins/quant-research/CLAUDE.md, plugins/rust-tools/CLAUDE.md, plugins/ssh-tunnel-companion/CLAUDE.md, plugins/statusline-tools/CLAUDE.md, plugins/tlg/CLAUDE.md, plugins/tts-tg-sync/CLAUDE.md, plugins/web-forge/CLAUDE.md, plugins/whatsapp-commander/CLAUDE.md, plugins/zai/CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [
                "plugins/claude-tts-companion/Makefile",
                "plugins/floating-clock/Makefile",
                "plugins/ssh-tunnel-companion/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "plugins/calcom-commander/scripts/calcom-cli/tsconfig.json",
                "plugins/calcom-commander/tsconfig.json",
                "plugins/gmail-commander/scripts/gmail-cli/tsconfig.json",
                "plugins/gmail-commander/tsconfig.json",
                "plugins/plugin-dev/tsconfig.json",
                "plugins/productivity-tools/skills/gdrive-access/scripts/tsconfig.json",
                "plugins/pushover-commander/skills/_lib/tsconfig.json",
                "plugins/statusline-tools/tsconfig.json",
                "plugins/tlg/scripts/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "plugins/claude-tts-companion/Makefile, plugins/floating-clock/Makefile, plugins/ssh-tunnel-companion/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "plugins/claude-tts-companion/Makefile, plugins/floating-clock/Makefile, plugins/ssh-tunnel-companion/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "ruff.toml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "ruff.toml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "plugins/calcom-commander/scripts/calcom-cli/tsconfig.json, plugins/calcom-commander/tsconfig.json, plugins/gmail-commander/scripts/gmail-cli/tsconfig.json, plugins/gmail-commander/tsconfig.json, plugins/plugin-dev/tsconfig.json, plugins/productivity-tools/skills/gdrive-access/scripts/tsconfig.json, plugins/pushover-commander/skills/_lib/tsconfig.json, plugins/statusline-tools/tsconfig.json, plugins/tlg/scripts/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "plugins/calcom-commander/scripts/calcom-cli/tsconfig.json, plugins/calcom-commander/tsconfig.json, plugins/gmail-commander/scripts/gmail-cli/tsconfig.json, plugins/gmail-commander/tsconfig.json, plugins/plugin-dev/tsconfig.json, plugins/productivity-tools/skills/gdrive-access/scripts/tsconfig.json, plugins/pushover-commander/skills/_lib/tsconfig.json, plugins/statusline-tools/tsconfig.json, plugins/tlg/scripts/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "primary_language": "Shell",
              "largest_source_bytes": 77462,
              "source_files_sampled": 575,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Shell with type-check config (plugins/calcom-commander/scripts/calcom-cli/tsconfig.json, plugins/calcom-commander/tsconfig.json, plugins/gmail-commander/scripts/gmail-cli/tsconfig.json, plugins/gmail-commander/tsconfig.json, plugins/plugin-dev/tsconfig.json, plugins/productivity-tools/skills/gdrive-access/scripts/tsconfig.json, plugins/pushover-commander/skills/_lib/tsconfig.json, plugins/statusline-tools/tsconfig.json, plugins/tlg/scripts/tsconfig.json, tsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "plugins/calcom-commander/scripts/calcom-cli/tsconfig.json, plugins/calcom-commander/tsconfig.json, plugins/gmail-commander/scripts/gmail-cli/tsconfig.json, plugins/gmail-commander/tsconfig.json, plugins/plugin-dev/tsconfig.json, plugins/productivity-tools/skills/gdrive-access/scripts/tsconfig.json, plugins/pushover-commander/skills/_lib/tsconfig.json, plugins/statusline-tools/tsconfig.json, plugins/tlg/scripts/tsconfig.json, tsconfig.json",
                      "language": "Shell"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/575 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 575,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T18:53:00.877634Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/terrylica/cc-skills.svg",
  "full_name": "terrylica/cc-skills",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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