公开记录
软件健康报告模式 0.26.0 · 指标 1.13.0 · 2026-07-22 19:12 UTC

wzhejunqiu / ds-code

Go 原生 CLI 编码 Agent

GoApache-2.0★ 2 星标⑂ 0 复刻始于 2026年5月在 GitHub 上查看 ↗

wzhejunqiu/ds-code 的健康指数为 100 分中的 54 分,处于「中等」区间。 其得分最高的类别是Engineering Quality(76/100),最低的是Security(30/100)。 最近一次更新在 14 天前。 近期的大部分工作由 1 位贡献者完成。

54
总分 / 100
中等

软件健康指数

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

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

评分画像

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

所有权

清元子个人账户
37 关注者93 个公开仓库始于 2014年1月

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

软件包生态系统

注册表软件包版本月下载量版本数最近发布
Gogithub.com/wzhejunqiu/ds-codev0.1.5-621 天前

按类别列示的指标

活力

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

67中等 · 占总体的 22%
评分方式
28.8/36推送新近度 — 最近一次推送于 14 天前
4.8/36提交节奏 — 52 周中有 7 周有提交
18/18提交量 — 最近一年 154 次提交
0/10OpenSSF Scorecard:Maintained — project was created within the last 90 days. Please review its contents carefully
所用输入
commits_last_year154
human_commit_share1
days_since_last_push14
active_weeks_last_year7

发布纪律

90优秀
评分方式
27/27有发布版本 — 已发布 6 个发布版本
36/36发布时效 — 最近一次发布版本于 21 天前
27/27发布节奏 — 约每 3.8 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — Project has not signed or included provenance with any releases.
所用输入
releases_count6
latest_release_tagv0.1.5
releases_from_tags
days_since_latest_release21
mean_days_between_releases3.8

社区与采用

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

33存在风险 · 占总体的 18%
评分方式
0/60星标 — 2 个星标
0/25复刻 — 0 个复刻
0/15关注者 — 2 位关注者
所用输入
forks0
stars2
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

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

可持续性与治理

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

56中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
0/22.5提交分布 — 头号贡献者编写了 100% 的提交
1.4/13.5贡献者广度 — 1 位贡献者
0/10OpenSSF Scorecard:Contributors — project has 0 contributing companies or organizations -- score normalized to 0
所用输入
bus_factor1
contributors_sampled1
top_contributor_share1
评分方式
0/46.8议题解决 — 没有议题或无数据
38.2/38.3PR 接受 — 已裁定的 PR 中 2/2 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/23 approved changesets -- score normalized to 0
所用输入
merged_prs2
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
已排除计分(无数据或不适用):议题解决。 其余权重已重新归一化。
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
11.4/25所有者影响力 — wzhejunqiu 有 37 位关注者
25/25既往记录 — 93 个公开仓库,账户约 12 年
所用输入
followers37
owner_typeUser
is_verified
owner_loginwzhejunqiu
public_repos93
account_age_days4,555
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — go 上有 1 个软件包
35/35发布时效 — 最近一次发布于 21 天前
20/20版本历史 — 6 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesgithub.com/wzhejunqiu/ds-code
ecosystemsgo
any_deprecated
min_days_since_publish21

工程质量

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

76良好 · 占总体的 20%

工程实践

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

文档

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

安全

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

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

安全态势

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

AI 就绪度

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

76良好 · 占总体的 0%
评分方式
45/45代理指令 — .cursorrules, AGENTS.md, CLAUDE.md, internal/tool/builtin/agent/agent.md, internal/tuitest/fixtures/default/AGENTS.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 100 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share1
agent_instruction_files.cursorrules, AGENTS.md, CLAUDE.md, internal/tool/builtin/agent/agent.md, internal/tuitest/fixtures/default/AGENTS.md
agent_instruction_max_bytes4,596
评分方式
18/18一条命令的引导启动 — Makefile
22/22自动化测试
11/11Lint / 格式化配置 — .golangci.yml
11/11静态类型检查 — Go(静态类型)
10/10可复现环境 — lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 97 次由代理编写或署名代理
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfilesgo.sum
has_dockerfile
typed_language
bootstrap_filesMakefile
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0.97
toolchain_manifestsgo.mod
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — Go(静态类型)
55/55可控的文件大小 — 采样的 629 个源文件中有 0 个超过 60KB
所用输入
primary_languageGo
largest_source_bytes16,598
source_files_sampled629
oversized_source_files0
评分方式
0/40API 模式(OpenAPI/GraphQL/proto)
20/20MCP 服务器
0/40可运行示例
所用输入
example_dirs
has_mcp_signal
api_schema_files

关键数据

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

数据采集警告

  • 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

更多细节

OpenSSF Scorecard 3.0 / 10
3.0综合

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests1 out of 1 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/23 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
不适用Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
4Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
7Vulnerabilities3 existing vulnerabilities detected
直接依赖 22
注册表软件包版本约束清单文件
Gocharm.land/bubbles/v2v2.1.0go.mod
Gocharm.land/bubbletea/v2v2.0.7go.mod
Gocharm.land/glamour/v2v2.0.1go.mod
Gocharm.land/lipgloss/v2v2.0.4go.mod
Gogithub.com/JohannesKaufmann/html-to-markdown/v2v2.5.2go.mod
Gogithub.com/charmbracelet/colorprofilev0.4.3go.mod
Gogithub.com/charmbracelet/x/ansiv0.11.7go.mod
Gogithub.com/daulet/tokenizersv1.27.0go.mod
Gogithub.com/gabriel-vasile/mimetypev1.4.13go.mod
Gogithub.com/google/uuidv1.6.0go.mod
Gogithub.com/mark3labs/mcp-gov0.54.0go.mod
Gogithub.com/oklog/ulid/v2v2.1.1go.mod
Gogithub.com/spf13/cobrav1.9.1go.mod
Gogithub.com/spf13/viperv1.20.1go.mod
Gogo.opentelemetry.io/otelv1.43.0go.mod
Gogo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttpv1.43.0go.mod
Gogo.opentelemetry.io/otel/sdkv1.43.0go.mod
Gogo.opentelemetry.io/otel/tracev1.43.0go.mod
Gogo.uber.org/zapv1.28.0go.mod
Gogolang.org/x/sysv0.45.0go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
Gomodernc.org/sqlitev1.37.0go.mod
全部依赖 未采集

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 9954,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 1502174,
        "Shell": 6010,
        "Makefile": 3945
      },
      "pushed_at": "2026-07-08T13:12:36Z",
      "created_at": "2026-05-23T08:20:45Z",
      "owner_type": "User",
      "updated_at": "2026-07-01T13:55:58Z",
      "description": "Go 原生 CLI 编码 Agent",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "清元子",
      "type": "User",
      "login": "wzhejunqiu",
      "company": null,
      "location": "Suzhou, China",
      "followers": 37,
      "avatar_url": "https://avatars.githubusercontent.com/u/6554707?v=4",
      "created_at": "2014-01-31T15:11:22Z",
      "is_verified": null,
      "public_repos": 93,
      "account_age_days": 4555
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.1.5",
          "kind": "patch",
          "published_at": "2026-07-01T14:08:02Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2026-06-29T16:26:33Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2026-06-20T15:10:44Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-06-20T10:32:40Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-06-19T11:30:42Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-06-12T15:49:12Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "faf77cdf45eabcc68f2f9d90ec4b19b3341b4617",
          "body": "v0.1.5: web_fetch permission policy, interactive allowlist, and OpenTelemetry tracing",
          "is_bot": false,
          "headline": "Merge pull request #2 from wzhejunqiu/v0.1.5",
          "author_name": "清元子",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-07-01T13:55:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c8c6fdd0873bef917e999619c6a52502f47c0bf",
          "body": "Add SSRF-aware skips in permission web tests when example.com is blocked by DNS in the environment.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(v0.1.5): cut release and mark acceptance docs as implemented",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-07-01T13:31:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bf77310edacedb78299a37aab58a62221d024765",
          "body": "appendUniqueAllowlist compares normalized hostnames directly instead of\nhostAllowed, which wrongly treated unresolvable .test entries as absent.\nUse example.net in SSRF-dependent tests. Isolate HOME in trace/logging\nintegration tests to prevent cross-test pollution.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(permission): correct allowlist dedup and web_fetch test hosts",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-07-01T13:14:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b98ccab18dff88e87e8c3872289342f52d213754",
          "body": "Add optional OTel spans (run_turn, llm.chat, tool.*, subagent.*) and\ntraceCore/logctx so logging.L() auto-injects trace_id/span_id; support\nlog and otlp exporters via YAML/CLI, default off.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(trace): implement OpenTelemetry tracing with log correlation",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-30T16:13:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7e8fa7d685d29ed565371fc6e5a4f3358cf964e0",
          "body": "Document FR-8 OTel log correlation with traceCore/logctx global injection,\nCLI and YAML config entry points, span boundaries, and AC-8 acceptance criteria.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(v0.1.5): add OpenTelemetry trace/span logging design",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-30T14:33:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "452cd7995a0994ff2e0b1a504c616d16e44730e0",
          "body": "Wire web_fetch into Engine.Check, document the allowlist breaking change,\nand add tests for AllowAlways persistence, redirect hops, TUI keys, and\nspawn web permission field copying.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(web): close v0.1.5 review gaps for Check, tests, and changelog",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-30T14:02:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "69ea8253e9b0ed839f1ffb347009341884801d9e",
          "body": "…odes\n\nMode-aware web_fetch policy lets readonly/ask use allowlist presets with\nper-host prompts while auto relies on SSRF rules only; introduce\npermissionmode package and TUI approval overlay.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(web): add interactive web_fetch allowlist and typed permission m…",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-30T13:49:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d6894253b650cacb80d27c758e99e48cc89bc2b4",
          "body": "Define v0.1.5 scope to move web_fetch host policy into permission,\nwith three-choice prompts and project-level allowlist persistence.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(v0.1.5): add web allowlist permission requirements",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-30T12:36:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e1b8e3a56cf2080c9f34d1d150d10d379211e5f7",
          "body": "Tamper self-heal unlinks ~/.ds-code/bin/rg; parallel grep tests failed with\n\"no such file\" when sharing the same install path on CI.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(rgbin): isolate test HOME to avoid racing grep package tests",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-29T15:42:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "be706e12090f8b303ac97e49f04b3cf0bc1554c1",
          "body": "grep and rgbin tests run packages in parallel; overwriting an executing rg\nbinary failed with \"text file busy\" in CI.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(rgbin): unlink rg before replace to avoid ETXTBSY on Linux",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-29T15:37:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "71abee1404d9cc062f7f67e80521f2d9a5eefe15",
          "body": "Use version.Name via {{.AppName}} in prompt.md, clarify snake_case\nexample wording, and mark system prompt as finalized in v0.1.4 docs.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(prompt): inject AppName into system prompt template",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-29T15:36:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "35eeeab4945f87386a520d7e8e65bb5abbad4661",
          "body": "Finalize CHANGELOG 0.1.4 with deferred prompt scope, add Makefile\nripgrep fetch deps for local vet/lint/verify-release, and sync v0.1.4\nacceptance and contributing docs for the release.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore(release): prepare v0.1.4 changelog and docs",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-29T15:26:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "00063e96f8818abd17194b190df2d3bb860539dc",
          "body": "Normalize amd64/arm64 aliases and map linux x86_64 to musl / aarch64 to gnu\nper upstream release layout; simplify musl docker builds to rely on uname.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(ci): align ripgrep fetch with 15.1.0 release assets",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-29T15:22:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1911ee348fe1f19a340cdea8a3267352ff2e84e6",
          "body": "CI runners lack system rg; keep the charm v2 guard in check-commit instead.\nAlso use example.com in web_fetch tests so allowlist DNS checks pass on CI.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(ci): move verify-charm-v2 to pre-commit hook",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-29T15:09:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5df0d8c3334868915daa960f3b1ecf4b8a1109eb",
          "body": "ripgrep 15.1.0 no longer publishes x86_64-unknown-linux-gnu; CI fetch returned 404.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(ci): use musl ripgrep tarball for linux x86_64",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-29T15:03:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9c4a3e835133c6b1a46a5ffe19db26ac7eb7c26f",
          "body": "rg.tar.gz is gitignored but required by go:embed in rgbin; CI was failing at go vet without it.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(ci): fetch bundled ripgrep before vet, test, and release builds",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-29T14:56:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5b5f37b2b1c0a6267e7756546e5cd35594ff57de",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(config): document web.allowlist host matching rules in example.yaml",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-29T14:49:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "86bc57d3d79b4f1cb912441b64c5123c8d985aad",
          "body": "…tidy\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore(deps): promote html-to-markdown to direct require after go mod …",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-29T14:34:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f577d3adddaa70103d696c203d063193ed722f1d",
          "body": "Extend web_fetch with fetch→Markdown→flash analysis, LRU cache, and redirect\nhandling; unify API user_id via datadir.Identifier() and centralize product\nconstants in internal/version.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(web_fetch): add analyze pipeline and install-scoped LLM user_id",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-29T14:33:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d8007024eabe83df2054ab23290d455758f6ef11",
          "body": "Drop the shallow directory listing tool and route exploration to glob.\nUpdate bash/spawn prompts and v0.1.4 docs; keep TUI display for legacy sessions.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(tool): remove list_dir; file exploration via glob only",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-29T12:40:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "89cc9ff690d88250d6722e532e24fcd8c13ae0ed",
          "body": "Make the full config template self-documenting with per-key comments, fix tools.task → tools.agent, and add missing keys.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(config): annotate example.yaml with field meanings and impacts",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-25T16:11:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7028c8f6856a45a1ebdf8ad34cd6df66a3ab1399",
          "body": "Restrict L1 context snip to context-too-long recovery only, wire background\nagent completion callbacks, and refresh agent prompts plus runtime env.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(tui): sticky chat scroll and auto-resume background notifications",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-25T16:08:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1bc15b602dcb40d55ea1185451213c5e0a47f098",
          "body": "Rewrite the agent tool description via usage.prompt, expose only general-purpose\nand Explore to the model, remove LLM model/isolation params, and replace sync\npromote with sync_timeout (default 2h) plus parent-session model resolution.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(agent): add FR-0 Chinese prompts and narrow LLM spawn surface",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-25T14:04:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6bdc2f567991378be416872f2497a2112a7cc403",
          "body": "Rewrite write_file description via usage.prompt and enforce read_file\nbefore overwriting existing files, matching apply_patch readgate behavior.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(write_file): add FR-0 prompts and read-before-write guard",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-25T12:34:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "eb9cafbd57e24684cd04c8d45fe652b8ce3763f0",
          "body": "Migrate glob to bundled ripgrep 15.1.0 (--files), share rg execution\nhelpers via rgutil, align output with grep (Found N files), add FR-0\nusage.prompt, and expose respect_gitignore/include_hidden config keys.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(glob): replace globmatch with ripgrep --files backend",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-24T14:02:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8da09a6f0b3ab3f6876a722059388de17b6d44bc",
          "body": "Skip full SHA256 on each grep when ~/.ds-code/bin/rg size and mtime are\nunchanged; re-verify and self-heal when metadata changes or hash mismatches.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "perf(grep): cache bundled rg validation across calls",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-23T16:00:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d6f069d41cc0167267e3a40da8ee90dfbe7654c3",
          "body": "Migrate grep to bundled/system/path ripgrep, Claude-aligned schema and\noutput formats, FR-0 usage.prompt with Chinese schema text, and v0.1.4\ndocs (FR-6). Build/test depend on fetch-ripgrep; rgbin embeds tar.gz only.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(grep): replace pure-Go search with ripgrep 15.1.0 backend",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-23T15:50:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "23e0a9b68f86086049a3d92548fbe1d6a72796c7",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore(read_file): align usage.prompt rule heading with apply_patch style",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-22T15:21:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ea57efcb77fba89190a8de295575e565236b95be",
          "body": "Migrate apply_patch to usage.prompt + RenderDesc, and enforce that\nupdate/delete paths must be read_file'd in an earlier sub-round while\nforbidding read+patch on the same file in one assistant tool batch.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(apply_patch): add FR-0 prompts and read-before-edit guard",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-22T15:18:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d5532f0bc65912739a730a201a1efe140d918829",
          "body": "Rename read_file prompt.md to usage.prompt and align v0.1.4 FR-0 docs\nwith the same filename convention as bash.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(tools): standardize builtin Description on usage.prompt",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-22T13:38:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a28e4c6faab7ac8adcbbee463f2b4fbd918f7116",
          "body": "Rewrite read_file Description via prompt.md + RenderDesc(), update Schema\nand permission/display wiring, sync tool docs and v0.1.4 prompt ledger.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(read_file): migrate prompt to FR-0 and rename path to filepath",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-22T13:24:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1de5a2a653599d51fc58758f00687dd185b2340f",
          "body": "Document the evolution path for a desktop ds-code client, including streaming\nIPC design, TypeScript frontend choices, and optional HTML output mode.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs: add desktop app feasibility study for Go + Wails + TypeScript",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-22T12:55:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "11bca3e680000713d08957b7ed059deeecae2b3f",
          "body": "Add sync/background execution, timeout, args parsing, and output formatting tests to raise shell package coverage from 71% to 94%.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(shell): expand builtin shell tool test coverage",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-21T10:54:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7899c810bba2eea1342609217c6e5626b773a1a2",
          "body": "Remove redundant ErrCommandRequiredSync; sync and background paths share\none empty-command error. Tighten timeout_ms schema description.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore(bash): dedupe ErrCommandRequired and shorten SchemaTimeoutMs",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-21T10:50:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9b66bcdada074ee2ec64e0263e369db448d191b4",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore(bash): shorten SchemaShellCommand schema text",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-21T10:47:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "895fe375e93829ec67bf12936edf309160cb40a3",
          "body": "Replace fire-and-forget job polling with OS-background jobs that block\nuntil complete while allowing concurrent bash calls in one turn. Add\ntimeout_ms (sync and background), TUI running countdown, and keep partial\nstdout/stderr when waits time out or are cancelled.\n\nBreaking: background→run_in_backg\n[…]\nemove job_id, list_jobs, and cancel\nfrom the LLM schema. Update shelljobs manager, orchestration, docs, and\nmove filecandidate into its own subpackage.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(v0.1.4): rework bash with timeout_ms and blocking run_in_background",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-21T10:46:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dff9b00f1531e0524a4c6544bd13ca78721f80e3",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(v0.1.4): rewrite builtin tool prompts and rename shell tool to bash",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T16:37:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "69ba9e1da211996660bc3821c3a493f86e57e6cf",
          "body": "…sh rename\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(v0.1.4): add planning docs for tool prompts rewrite and shell→ba…",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T16:37:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "eb043d56855d400dff20bd5f25fce4940f00c1ec",
          "body": null,
          "is_bot": false,
          "headline": "docs(v0.1.3): mark release as published in acceptance and README",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T15:15:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e4be64e8bfc5f5b9a3bb7ccab7ebd316a9d7efc",
          "body": "v0.1.3: Bubble Tea v2 migration, virtual chat list, and release prep",
          "is_bot": false,
          "headline": "Merge pull request #1 from wzhejunqiu/v0.1.3",
          "author_name": "清元子",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T14:59:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27bddb5967a2628120eab6e514cee74e41d8825c",
          "body": "Add the remaining §6.2 suggested tests, update ACCEPTANCE checkboxes,\nexpand CHANGELOG with Fixed entries and perf note, and refresh v0.1.3 docs.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(v0.1.3): close acceptance test gaps and expand release notes",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T14:55:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "165c2e4dbfb9b61f711c2f73ef0d707c4d1dc9ac",
          "body": "Add verify-charm-v2 to CI, passthrough safe_model fallback View metadata,\nand tests for worktree @ expand, virtual list, and v2 TUI behaviors.\nSync v0.1.3 acceptance docs to implemented status.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(v0.1.3): close acceptance gaps with CI guard and coverage",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T14:40:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bc027ba9dfce78317e8a73e92500132909cc341a",
          "body": "Tab in slash completion now applies the cursor item like Enter, instead of always selecting the first entry.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(v0.1.3): confirm highlighted slash command on Tab",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T14:25:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b2fbf96bd0fb01c14c344dddb919313e17acd527",
          "body": "Invalidate stale resume list fetches when the picker closes, resync completion\nafter SessionResumed, and reserve overlay rows in Layout so command lists stay\nvisible above the footer even with long transcripts.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(v0.1.3): restore slash completion after /resume session restore",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T14:15:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7c06bfbf9e9e23ba2b727768a5a4f78356f61fdd",
          "body": "…ild for TUI chat\n\nAvoid materializing the full styled transcript by rendering only the visible viewport window and incrementally updating plain lines from the first dirty block.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "perf(v0.1.3): on-demand styled rendering and incremental catalog rebu…",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T13:59:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6ecedddd39a2bca4d1c7fdc6894e2c3ecba1305c",
          "body": "Move the interactive stack to charm.land v2, replace HP viewport sync with\nLineCatalog windowed rendering and chatScrollY, and complete deferred items\n(AtExpander in subagents, IsSensitiveAbs cleanup, selection/clipboard updates).\nFix /resume and startup history load to scroll to the latest messages.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(v0.1.3): migrate TUI to Bubble Tea v2 and virtual chat list",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T13:48:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ac58382b85cdb9b4b2e0876eef456198573ab783",
          "body": "Close gaps found against v0.1.2 code: toolVP HP removal, PromptCh dual\nchannel, virtual-list YOffset/resize, safeModel View passthrough, and tests.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(v0.1.3): fifth-round audit for Bubble Tea v2 migration",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T12:58:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "46a692bfc4366003f56bea5b719d3513d32bfd4a",
          "body": "Capture requirements, design, acceptance, and a three-round audit for\nthe charm.land v2 upgrade, HP removal chain, and deferred v0.1.2 items.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(v0.1.3): add Bubble Tea v2 migration planning docs",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T12:20:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "59c896af649eee5c73b1bfa8125137d599a19f8f",
          "body": "Point install curl examples at releases/latest/download so download\nlinks stay stable across version bumps without editing README.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs: use latest release URLs in README",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T10:22:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9b29e15dad5ff314accb14f5e016101097b2a486",
          "body": "Finalize v0.1.2 release notes (smooth scroll, TUI fixes), sync AC-8.4\nwith selDragging-only HP behavior, and check off CI gates in ACCEPTANCE.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(v0.1.2): complete CHANGELOG and acceptance for release",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T10:13:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aadbc299f05d2286385831a1d702afb755558fc0",
          "body": "Only disable viewport high-performance scrolling while dragging selection so retained highlights no longer block mouse wheel scrolling.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(v0.1.2): keep wheel scroll working after copy-on-select",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T10:04:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d27e5bc2d27da21480010a046566e174386cc6ac",
          "body": "Buffer split xterm mouse escape sequences before they reach textinput so wheel scrolling no longer fills the prompt with garbage in iTerm2.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(v0.1.2): reassemble leaked SGR mouse wheel input in iTerm2",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-20T09:57:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1bf07067be0bd2d30952e55e11bdd899baaae1bb",
          "body": "…nment\n\nEnable HighPerformanceRendering with Sync on resume, history load, and wheel\nscroll so the chat viewport renders immediately; strip @ expansion blocks in\nContentForDisplay to keep resumed user prompts unchanged; align spill-read\ndocs with FR-4.15 and add missing acceptance tests.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(v0.1.2): HP viewport sync, @ ref TUI display, and acceptance alig…",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-19T19:25:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6630c20cb5e56fca9f12c72ac8c78dc2539319d0",
          "body": "…history\n\nImplement proportional/adaptive pending drain for chat/tool viewports with HP rendering, and strip task-notification XML from persisted user messages before TUI display.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(v0.1.2): TUI smooth wheel scroll and hide task notifications in …",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-19T18:58:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c8c4744b8c73e60fb40209bf79ef2cdf2fa9727e",
          "body": "Expand read_file to allow any regular file under the project data directory\n(mcp-result, agents, sessions.db) instead of session-bound .txt only; add\nSavedResultHint to MCP and subagent spill returns.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(v0.1.2): unify project data read and SavedResultHint for spills",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-19T18:15:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d7c23e1b0328b9179227d624cd49d4fb09d7a444",
          "body": "Long-running tasks were hitting the previous 25/8 sub-round limits too often.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore(agent): raise default max_turns to 500 for main and sub agents",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-19T16:56:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3ff8e8072d8268cbccc01c46af1012cc7e40fa9d",
          "body": "@dir/ now injects a sorted file path list instead of preloading file\nbodies, and user prompts keep @path anchors in the original sentence so\nreferences stay semantically linked to expanded blocks.\n\nAlso fix pre-commit package resolution for Go 1.26 go list -find behavior.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(context): align @dir/ with Claude Code listing semantics",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-19T16:54:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "20a82f7e88229cad3b54dc25de4ac53284ab724f",
          "body": "补全 MCP spill、权限、搜索、TUI 选区等验收单测;修复子代理 FilterToolRegistry/RebindRegistryPerm 丢失 MCP 元数据导致不写 spill 的问题;补充 DESIGN §10.3 Engine 路径 API 文档。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(v0.1.2): add acceptance coverage and fix child MCP spill registry",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-19T16:10:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "61b75351df8e3fc8e5e397e331972fd037484373",
          "body": "Unify path checks on permission.Engine, spill MCP results for read_file,\ndrop gitignore-based enumeration in favor of searchskip, and add in-app\nselection with clipboard fallback for the interactive TUI.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(v0.1.2): path policy, MCP spill, search visibility, and TUI copy",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-19T15:43:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "044d72fcce309906ed767a3c8df0990bd9f27dee",
          "body": "Align MCP tool registry with AGENTS.md bare names, skip conflicts without\nblocking startup, and surface skips plus sensitive-log warnings in the TUI\nheader. Fix IsWriteTool to only apply to registered MCP tools after builtin\nconflicts. Reorganize baseline docs under docs/v0.1.0/ and add v0.1.1 specs.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(v0.1.1): MCP bare names, TUI header notices, and docs reorg",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-19T10:33:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fd07871c5d2781e99e658d48094dd7609690a3c4",
          "body": "Redirect tests that touch ~/.ds-code/projects to a temporary HOME via\ntestutil.IsolatedHome so projectId directories are cleaned up automatically.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test: isolate HOME to prevent leaking project data dirs",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-13T06:23:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "21f5da91317fdc9af792206a1f025959b57b5722",
          "body": "Rewrite release workflow to checkout github.sha, run CI gate, build\nartifacts, and create the GitHub Release/tag from workflow_dispatch\nversion input. Add workflow_call to ci.yml for reuse.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(release): dispatch-driven release with version input as tag",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-12T15:43:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1cdcc5dd1feff5bc987a996340daeeb197f9742e",
          "body": "Run govulncheck in check-commit/check-push so hooks match CI; upgrade\ngo.mod to fix stdlib vuln failures on go1.26.3. Document Windows install via WSL2.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore(ci): add vuln to git hooks and bump Go to 1.26.4",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-12T15:28:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "addcba245f1aa7a8a7b918726e4a9b86700169b8",
          "body": "Add user-facing README, CHANGELOG, CONTRIBUTING, and SECURITY docs;\ndedupe release artifacts to six platforms and auto-fill Release notes\nfrom CHANGELOG. Introduce pre-commit/pre-push checks, default dev\nversion, spawn prompt localization, lint fix, and repo-wide gofmt.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore(release): prepare v0.1.0 docs, hooks, and release pipeline",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-06-12T15:10:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b9d1a6292e18038d12161ae4e883be5f6c190bd8",
          "body": "Raise tools.read_file.max_lines from 500 to 2000 so omitting limit reads\nthrough end of file (capped). Align truncation hints, schema, tests, and docs.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(read_file): default to full-file read with max_lines 2000",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-30T16:56:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aee579701992016ff3e97382910eca0c91b8a1bc",
          "body": "Document tool_search/defer loading, agent spawn entry, and align per-tool\ndocs with current registration; add tools.defer_* to CONFIG.md v1.3.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs: refresh builtin tool design docs and CONFIG defer keys",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-30T16:35:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5d48601c4aa77964001092e736722ab2616fd434",
          "body": "Add cover/cover-html Makefile targets for local test coverage reports,\nand gitignore coverage.out and coverage.html so they are not committed.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "build: add make cover targets and ignore coverage artifacts",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-30T16:29:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "db6295901d1ed72fc518ba309950416a0f20e1da",
          "body": "Unify config/session RunMode via internal/runmode, introduce PermissionMode\nand tool.Name constants, and reorganize spawn into agentdef/builtin packages.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor: typed enums and spawn agentdef/builtin split",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-30T16:13:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "24251a518047641af161c20ae3b313219b393b96",
          "body": "Preserve ephemeral summary prompt across compact/snip retries, degrade\ngracefully when the summary LLM fails, and document HookStop transition\nsemantics. Fix TUI markdown fence parsing for inline backticks, add CI\nmusl smoke build with version ldflags, and restrict release publishing\nto release events.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(agent): harden MaxTurns soft landing and code review follow-ups",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-30T15:02:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d7af9cf707bd9c7a0ba41f0d4e693d4daef36c73",
          "body": "Coalesce chat viewport syncs to 33ms, reuse stable markdown and chat\nblock renders during streaming, and fix cache staleness on subagent nav\nand block resize while keeping the header in the scrollable viewport.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "perf(tui): add incremental render caches for streaming output",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-30T02:18:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6b00610581bca98c39ffa87815fdd927dff5c5cf",
          "body": "Use a refcounted shared holder so parent turns clear InActiveTurn for\ncontexts passed to background agents, and summarize progress instead of\nreturning a hard error when sub-round limits are reached.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(agent): correct ActiveTurn lifecycle and MaxTurns soft landing",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-30T01:02:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bb91ba4f6488d185a35853c0ec4ef9f8f4133413",
          "body": "Replace the 2s statusTick loop with OnUsageUpdate events per LLM\nsub-round so idle sessions stop rebuilding API context repeatedly.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(tui): refresh status bar on token usage instead of polling",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-29T17:46:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cfc18401fd568a22a0894a4e3f730114e6f77dab",
          "body": "Build and upload tar.gz assets on GitHub Release publish or manual workflow_dispatch with a tag input; CI keeps test/lint/vuln only.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "ci: move multi-platform builds to release workflow",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-29T17:14:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "226008c7c9281ef4aecbc3f2db55791fec7031b8",
          "body": "Set CGO_LDFLAGS to -static -static-libgcc -static-libstdc++ for musl builds and verify on bare Alpine without runtime C++ libs.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(ci): statically link musl binaries with libstdc++/libgcc",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-29T17:07:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "39ddefe55382863c23564d06d81de9f269c13957",
          "body": "Musl binaries link libstdc++/libgcc dynamically; the bare golang:alpine verify container lacks those shared libraries.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(ci): install libstdc++ runtime for musl verify step",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-29T17:03:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "91aad3b326a88d1c18711a2a40d0a0891d9a0a2c",
          "body": "Alpine has no bash; use POSIX /bin/sh shebang and invoke explicitly in the musl Docker build step.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(ci): run fetch-tokenizers-lib with sh on Alpine musl builds",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-29T16:56:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cdbaaa7f888e612c597edf8c1318ba48e5ef706a",
          "body": "Ubuntu musl-gcc still pulled glibc libstdc++/libgcc when linking tokenizers; use golang:alpine Docker for musl matrix jobs instead.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(ci): build musl targets in Alpine to avoid glibc linker mix",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-29T16:50:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8e6dedb281ca40a53860aff8c679b02c3615fdd9",
          "body": "Upload cross-compiled ds-code binaries for Linux (glibc/musl) and macOS after tests pass, with fetch-tokenizers-lib supporting explicit arch overrides.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "ci: add multi-platform build artifacts to CI workflow",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-29T16:43:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "87cf1791b67268aff1e89aaaf5ab702081dfa287",
          "body": "Unify spawn output inline/spill with tools.agent.summary_max_chars, restore\nsubagent isolation tests, tighten context-too-long 413 matching, and fold\nsubagent package into spawn with fork tool messages, XML notifications, and\nForSubagent fallback routing.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(spawn): consolidate subagent delivery and fix review findings",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-29T16:23:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5d46c217ebc83affdea52f7ca3e3d6732d34c444",
          "body": "Avoid canceling the child context before finishSync on the sync path;\nhand off cancel to waitPromoted only when the run is promoted to background.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(spawn): defer runCtx cancel until runSync returns",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-25T15:35:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ca3678c6821ba9660509bdbfc26e87bcef9a2971",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(spawn): resolve golangci-lint issues in spawn and runner tests",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-25T15:29:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a8eb00574f56b7d0d2f15a003796fae5c40c3212",
          "body": "After git worktree add, apply cone sparse-checkout and symlink common\nlarge directories from the parent repo. Wire options through spawn\nservice and add configurable defaults.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(worktree): sparse-checkout and symlink large dependency dirs",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-25T14:57:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1c1af7acc7a9f3a7fbda126835661c80d5342aaa",
          "body": "Inject ephemeral meta and verification reminders in PrepareRequest.\nSplit system prompt into static (base + sorted tools JSON) and dynamic\nsections, and log static_hash for cache debugging. Enable parallel\nread-only tool calls by default and set llm.subagent.max_turns default.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(context): meta reminders, static/dynamic system, parallel tools",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-25T14:57:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "db9bcb533cae4a873dd220cf823fe1968b65599d",
          "body": "Fix fork child double-wrapped directive by passing raw prompt to\nBuildForkMessages. Split network retries from output recovery with a\ndedicated counter and tighter transient error matching. Centralize\nsubagent max turns via resolveSubagentMaxTurns.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(agent): fork directive, recovery, and subagent max_turns",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-25T14:56:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4069b227d1bf1920d77dc6e7a0b806e3b3e5443e",
          "body": "Add session hooks, /remember, spawn skill/memory injection and git\nworktree isolation, tiered subagent notifications, context collapse,\ndeferred tool registration, shell classifier via permission engine,\nand active-turn notification priority.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(agent): hooks, spawn worktree/memory, and context collapse",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-25T14:28:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4005ee891077d2897e74105b9fceb5a779b9c7d1",
          "body": "Introduce agent/spawn for foreground/background execution, fork/resume,\nrecovery hooks, and the Agent builtin tool; remove legacy task tool and\nsubagent runner. Update context, session schema, TUI, and tooling.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(agent): replace task tool with spawn-based subagent system",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-24T13:10:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8eaba27d8e4cb8db09aa03175d5fe82f99aa1286",
          "body": "Rename module and imports from github.com/hejunqiu/ds-code to\ngithub.com/wzhejunqiu/ds-code to match origin. Also ignore\ninternal/agent/docs/ in .gitignore.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore: align Go module path with GitHub remote",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-24T02:52:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cd80581573c2bf6388f627d42113aba6c861226d",
          "body": "Correct relative paths in builtin tool markdown. Update read_file\ndescription to recommend offset/limit for known ranges, especially on large files.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(builtin): fix tool doc links; read_file desc urges partial reads",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T17:48:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "66a5cca593baaf30aaed0b00c74c1f3ea936c86b",
          "body": "…Pattern test\n\nUnify glob/list_dir fallback limit via builtin.DefaultMaxResults.\nAssert CollectGlobPattern keeps match order and leaves sorting to callers.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(builtin): share DefaultMaxResults and strengthen CollectGlob…",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T17:32:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "67c1ede9095ef084796a6ff26c079c4e1fae2691",
          "body": "…x 100\n\nExtract FileCandidate/CollectGlobPattern so glob and grep agree on\nworkspace-relative paths and filtering. Glob results are sorted by\nmod time before truncation; default max_results drops to 100.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(glob,grep): share file candidates, sort by mtime, default ma…",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T17:28:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1e9b7c2b9c2f8247a155b08c0e4f2290316a9b4e",
          "body": "Use path-specific truncation suffix for files_with_matches, propagate\ncontext.Canceled after search instead of returning partial results.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(grep): correct files_with_matches truncation text and honor cancel",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T17:16:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6121d2f4ee089aa6346984dd563bab2c07467d0a",
          "body": "Reduce token use for exploration by returning paths unless content is\nrequested; align TUI suffixes with mode and harden candidate paths via\nsymlink resolution.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(grep): add output_mode and default to files_with_matches",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T17:09:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "29bf31b302f902e99d9b42e1635ea43fca035c90",
          "body": "Extract glob matching and text-file detection for reuse; grep supports path globs, mtime-ordered results, and parallel search while skipping binaries.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(tool): improve grep/glob with binary filter and shared globmatch",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T16:44:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ab166b43465433908109f4404466d9426d560f0f",
          "body": "Move ~/.ds-code path logic into internal/datadir to break logging’s\ndependency on config and fix gopls missing-metadata import errors.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(datadir): extract path helpers so logging avoids config import",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T15:40:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d4fc38f272f9dfa9656fa1a56f25072bf57fce4c",
          "body": "…strap\n\nDecouple async session title generation from turn cancellation, wait for titles in -p mode, centralize billing setup via BootstrapConfig, and align unknown-model price snapshots with flash fallback rates.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(session,billing): detach title gen context and unify billing boot…",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T15:31:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a29e192d809f70fba1977f6e6a20cf503eb05acc",
          "body": "…d async title generation\n\nPersist per-message price snapshots and estimated costs, split subagent model/thinking settings from the main agent, and generate session titles via a background subagent run (schema v4).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(billing,session): add CNY cost tracking, subagent LLM config, an…",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T15:21:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "23367fdbf57ea28567820f4a6713c54dd697c120",
          "body": "Treat a non-nil empty ResumeSessions slice as loaded so cursor-blink\nUpdateCompletion does not re-fetch and toggle Loading vs no matches.\nDocument resume overlay semantics and add regression tests.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(tui): stop /resume filter overlay flickering on empty matches",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T13:09:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7d66145ed3502498b0af3f7db7ccea6c0be7a84b",
          "body": "External client_test package called client.NewClient without importing\nthe client package, breaking CI integration builds.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(lsp): import client package in integration tests",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T12:49:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "48ddcc1891ec2c6c683f3beac6a7efc7164cb354",
          "body": "Replace chat.Block strings.Builder with string, pass textinput and\nlipgloss Style by pointer, and fix resume double-enter test flow.\nEnable go vet copylocks in CI/Makefile/golangci and document TUI\nnon-copyable types; iterate chat blocks by index in tool line sync.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(tui): avoid illegal copies that crash under -race",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T12:41:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "533efa11dd9201f1c17da4403b61510c16cb25d3",
          "body": "Keep third_party/tokenizers in the repo so clones have the expected path before running fetch-tokenizers-lib.sh; binaries remain gitignored.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore(third_party): track tokenizers directory placeholder",
          "author_name": "hejunqiu",
          "author_login": "wzhejunqiu",
          "committed_at": "2026-05-23T12:20:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 6,
      "commits_last_year": 154,
      "latest_release_at": "2026-07-01T14:08:02Z",
      "latest_release_tag": "v0.1.5",
      "releases_from_tags": false,
      "days_since_last_push": 14,
      "active_weeks_last_year": 7,
      "days_since_latest_release": 21,
      "mean_days_between_releases": 3.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 71,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/wzhejunqiu/ds-code",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/wzhejunqiu/ds-code",
          "is_deprecated": false,
          "latest_version": "v0.1.5",
          "repository_url": "https://github.com/wzhejunqiu/ds-code",
          "versions_count": 6,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-01T13:55:40Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 21
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 2,
      "watchers": 2,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 16598,
      "source_files_sampled": 629,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        ".cursorrules",
        "AGENTS.md",
        "CLAUDE.md",
        "internal/tool/builtin/agent/agent.md",
        "internal/tuitest/fixtures/default/AGENTS.md"
      ],
      "agent_instruction_max_bytes": 4596
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "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": [
        "go"
      ],
      "dependencies": [
        {
          "name": "charm.land/bubbles/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.1.0"
        },
        {
          "name": "charm.land/bubbletea/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.7"
        },
        {
          "name": "charm.land/glamour/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.1"
        },
        {
          "name": "charm.land/lipgloss/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.4"
        },
        {
          "name": "github.com/JohannesKaufmann/html-to-markdown/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.5.2"
        },
        {
          "name": "github.com/charmbracelet/colorprofile",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.4.3"
        },
        {
          "name": "github.com/charmbracelet/x/ansi",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.11.7"
        },
        {
          "name": "github.com/daulet/tokenizers",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.27.0"
        },
        {
          "name": "github.com/gabriel-vasile/mimetype",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.13"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/mark3labs/mcp-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.54.0"
        },
        {
          "name": "github.com/oklog/ulid/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.1.1"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.9.1"
        },
        {
          "name": "github.com/spf13/viper",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.20.1"
        },
        {
          "name": "go.opentelemetry.io/otel",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.opentelemetry.io/otel/sdk",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.opentelemetry.io/otel/trace",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.uber.org/zap",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.28.0"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.45.0"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.37.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": 2,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "wzhejunqiu",
          "commits": 154,
          "avatar_url": "https://avatars.githubusercontent.com/u/6554707?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "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": 10,
            "reason": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/23 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 4,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 7,
            "reason": "3 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "faf77cdf45eabcc68f2f9d90ec4b19b3341b4617",
        "ran_at": "2026-07-22T19:12:28Z",
        "aggregate_score": 3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-01T14:08:05Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-01T13:55:40Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/wzhejunqiu/ds-code",
    "host": "github.com",
    "name": "ds-code",
    "owner": "wzhejunqiu"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 54,
      "inputs": {
        "security": 30,
        "vitality": 67,
        "community": 33,
        "governance": 56,
        "engineering": 76
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 67,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 52,
            "inputs": {
              "commits_last_year": 154,
              "human_commit_share": 1,
              "days_since_last_push": 14,
              "active_weeks_last_year": 7
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 14 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 14
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "7/52 weeks with commits",
                "points": 4.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "154 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 154
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 6,
              "latest_release_tag": "v0.1.5",
              "releases_from_tags": false,
              "days_since_latest_release": 21,
              "mean_days_between_releases": 3.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "6 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 21 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 21
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.8 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.8
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 33,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 2,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "2 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 56,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 2,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "2/2 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 2,
                      "decided": 2
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/23 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": 58,
            "inputs": {
              "followers": 37,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "wzhejunqiu",
              "public_repos": 93,
              "account_age_days": 4555
            },
            "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": "37 followers of wzhejunqiu",
                "points": 11.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 37,
                      "login": "wzhejunqiu"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "93 public repos, account ~12 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 93
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 12
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/wzhejunqiu/ds-code"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 21
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 21 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 21
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "6 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 76,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "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": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 30,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3
            },
            "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": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/23 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "3 existing vulnerabilities detected",
                "points": 5.2,
                "status": "partial",
                "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": 76,
        "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": [
                ".cursorrules",
                "AGENTS.md",
                "CLAUDE.md",
                "internal/tool/builtin/agent/agent.md",
                "internal/tuitest/fixtures/default/AGENTS.md"
              ],
              "agent_instruction_max_bytes": 4596
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".cursorrules, AGENTS.md, CLAUDE.md, internal/tool/builtin/agent/agent.md, internal/tuitest/fixtures/default/AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".cursorrules, AGENTS.md, CLAUDE.md, internal/tool/builtin/agent/agent.md, internal/tuitest/fixtures/default/AGENTS.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": 82,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.97,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "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": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "97 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 97,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 16598,
              "source_files_sampled": 629,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/629 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 629,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? 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-22T19:12:37.277082Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/w/wzhejunqiu/ds-code.svg",
  "full_name": "wzhejunqiu/ds-code",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

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