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

hxs996-beep / deepAct

CLI coding agent that guards every action: ambiguity check, design review, scope control.

GoMIT★ 4 星标⑂ 0 复刻始于 2026年5月在 GitHub 上查看 ↗

hxs996-beep/deepAct 的健康指数为 100 分中的 42 分,处于「存在风险」区间。 其得分最高的类别是Vitality(72/100),最低的是Security(14/100)。 最近一次更新在 6 天前。 近期的大部分工作由 1 位贡献者完成。

42
总分 / 100
存在风险

软件健康指数

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

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

评分画像

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

所有权

hxssss个人账户
0 关注者1 个公开仓库始于 2025年8月WB company

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

按类别列示的指标

活力

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

72良好 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 6 天前
5.5/36提交节奏 — 52 周中有 8 周有提交
18/18提交量 — 最近一年 161 次提交
0/10OpenSSF Scorecard:Maintained — project was created within the last 90 days. Please review its contents carefully
所用输入
commits_last_year161
human_commit_share1
days_since_last_push6
active_weeks_last_year8

发布纪律

90优秀
评分方式
27/27有发布版本 — 已发布 9 个发布版本
36/36发布时效 — 最近一次发布版本于 7 天前
27/27发布节奏 — 约每 6.1 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — Project has not signed or included provenance with any releases.
所用输入
releases_count9
latest_release_tagv1.0.3
releases_from_tags
days_since_latest_release7
mean_days_between_releases6.1

社区与采用

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

28危急 · 占总体的 18%
评分方式
7.7/60星标 — 4 个星标
0/25复刻 — 0 个复刻
0/15关注者 — 0 位关注者
所用输入
forks0
stars4
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

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

可持续性与治理

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

35存在风险 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
2.8/22.5提交分布 — 头号贡献者编写了 88% 的提交
2.7/13.5贡献者广度 — 2 位贡献者
3/10OpenSSF Scorecard:Contributors — project has 1 contributing companies or organizations -- score normalized to 3
所用输入
bus_factor1
contributors_sampled2
top_contributor_share0.876
评分方式
0/46.8议题解决 — 没有议题或无数据
38.2/38.3PR 接受 — 已裁定的 PR 中 3/3 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs3
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
已排除计分(无数据或不适用):议题解决。 其余权重已重新归一化。
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
0/25所有者影响力 — hxs996-beep 有 0 位关注者
4/25既往记录 — 1 个公开仓库,账户约 0 年
所用输入
followers0
owner_typeUser
is_verified
owner_loginhxs996-beep
public_repos1
account_age_days330
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。

工程质量

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

52中等 · 占总体的 20%

工程实践

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

文档

85优秀
评分方式
30/30README
25/25文档目录
0/15文档 / 主页站点
10/10仓库描述
10/10主题标签 — 9 个主题标签
10/10Wiki
所用输入
topicsai-coding-assistant, code-agent, code-agent-harness, deepseek-tui, deepseek-v4, golang, vibecoding, harness, deepseek-harness
has_wiki
homepage
has_readme
has_docs_dir
has_description

安全

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

14危急 · 占总体的 16%

安全态势

14危急
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 无数据
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — 无数据
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5许可证 — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — 无数据
0/5Pinned-Dependencies — 无数据
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — 无数据
0/7.5Vulnerabilities — 13 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate1.4
已排除计分(无数据或不适用):ci_tests, dangerous_workflow, packaging, pinned_dependencies, token_permissions。 其余权重已重新归一化。

AI 就绪度

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

69中等 · 占总体的 0%
评分方式
0/45代理指令 — 没有 CLAUDE.md / AGENTS.md / 编辑器规则
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 93 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.93
agent_instruction_files
agent_instruction_max_bytes
评分方式
18/18一条命令的引导启动 — Makefile
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — Go(静态类型)
10/10可复现环境 — lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 22 次由代理编写或署名代理
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — 无数据
所用输入
has_nix
has_tests
lockfilesgo.sum
has_dockerfile
typed_language
bootstrap_filesMakefile
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0.22
toolchain_manifestsgo.mod
dependency_bot_commit_share0
已排除计分(无数据或不适用):OpenSSF Scorecard:Pinned-Dependencies。 其余权重已重新归一化。
评分方式
45/45可类型检查的代码 — Go(静态类型)
54.3/55可控的文件大小 — 采样的 147 个源文件中有 2 个超过 60KB
所用输入
primary_languageGo
largest_source_bytes91,578
source_files_sampled147
oversized_source_files2

关键数据

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

数据采集警告

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

更多细节

OpenSSF Scorecard 1.4 / 10
1.4综合

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
不适用CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
不适用Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
不适用Packagingpackaging workflow not detected
不适用Pinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
不适用Token-PermissionsNo tokens found
0Vulnerabilities13 existing vulnerabilities detected
直接依赖 14
注册表软件包版本约束清单文件
Gogithub.com/BurntSushi/tomlv1.6.0go.mod
Gogithub.com/charmbracelet/bubbleteav1.3.4go.mod
Gogithub.com/charmbracelet/glamourv1.0.0go.mod
Gogithub.com/charmbracelet/lipglossv1.1.1-0.20250404203927-76690c660834go.mod
Gogithub.com/charmbracelet/x/ansiv0.10.2go.mod
Gogithub.com/ebitengine/puregov0.10.1go.mod
Gogithub.com/muesli/reflowv0.3.0go.mod
Gogithub.com/muesli/termenvv0.16.0go.mod
Gogithub.com/sergi/go-diffv1.3.1go.mod
Gogithub.com/spf13/cobrav1.8.1go.mod
Gogolang.org/x/netv0.38.0go.mod
Gogolang.org/x/syncv0.17.0go.mod
Gogolang.org/x/textv0.30.0go.mod
Gogolang.org/x/timev0.9.0go.mod
全部依赖 未采集

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "ai-coding-assistant",
        "code-agent",
        "code-agent-harness",
        "deepseek-tui",
        "deepseek-v4",
        "golang",
        "vibecoding",
        "harness",
        "deepseek-harness"
      ],
      "is_fork": false,
      "size_kb": 1038,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 1074016,
        "Shell": 1646,
        "Makefile": 1245,
        "Batchfile": 2952,
        "PowerShell": 2466
      },
      "pushed_at": "2026-07-19T14:39:25Z",
      "created_at": "2026-05-31T05:36:08Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T08:57:29Z",
      "description": "CLI coding agent that guards every action: ambiguity check,   design review, scope control.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "hxssss",
      "type": "User",
      "login": "hxs996-beep",
      "company": "WB company",
      "location": "HZ",
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/229309945?v=4",
      "created_at": "2025-08-29T10:27:13Z",
      "is_verified": null,
      "public_repos": 1,
      "account_age_days": 330
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.0.3",
          "kind": "patch",
          "published_at": "2026-07-19T00:13:39Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2026-07-02T03:40:45Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-06-29T11:46:29Z"
        },
        {
          "tag": "v0.1.5",
          "kind": "patch",
          "published_at": "2026-06-14T15:39:38Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2026-06-09T15:13:53Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2026-06-06T14:59:09Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-05-31T14:29:19Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-05-31T06:37:56Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-05-31T06:01:05Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "ed3e104d14fb2583526e97e2b2edab7a20f6ff3b",
          "body": null,
          "is_bot": false,
          "headline": "\\\"chore: remove temp check file\\\"",
          "author_name": "hxs",
          "author_login": "imjok00",
          "committed_at": "2026-07-19T14:39:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b487b0767bad27f8537b3b8a2de8f1874cf349c",
          "body": null,
          "is_bot": false,
          "headline": "\\\"chore: add temp check file\\\"",
          "author_name": "hxs",
          "author_login": "imjok00",
          "committed_at": "2026-07-19T14:39:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "702f5cb9e8845aa9b7f973dbdefea56cb2ae25e3",
          "body": null,
          "is_bot": false,
          "headline": "\\\"update readme: Roundtable -> Team mode\\\"",
          "author_name": "hxs",
          "author_login": "imjok00",
          "committed_at": "2026-07-19T14:35:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90e5376801df3d309d022b0dc42ab9b7d3e04110",
          "body": null,
          "is_bot": false,
          "headline": "\\\"remove release badge from README\\\"",
          "author_name": "hxs",
          "author_login": "imjok00",
          "committed_at": "2026-07-19T13:05:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4f70e7d846c0116da43a046ca2c18f83ca28e56",
          "body": null,
          "is_bot": false,
          "headline": "\\\"fix: use tag endpoint for release badge\\\"",
          "author_name": "hxs",
          "author_login": "imjok00",
          "committed_at": "2026-07-19T13:01:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29f354dc5b6dec1e55412bbad29e4b190282c05d",
          "body": null,
          "is_bot": false,
          "headline": "\\\"fix release badge cache refresh\\\"",
          "author_name": "hxs",
          "author_login": "imjok00",
          "committed_at": "2026-07-19T12:53:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fce4f804f372460c36a1c7309b6169634e4bedcb",
          "body": "# Conflicts:\n#\tREADME.md",
          "is_bot": false,
          "headline": "Merge branch 'feat/sub-agent-display' into dev",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-19T00:06:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "886d81826b7b4c3f95794ac024f3aa6ff1637b02",
          "body": "…gates/markdown, roundtable improvements, fix critic PASS dead-loop\n\n- Analysis report gate: add degradation handler (after 2 blocks, auto-waive and\n  request batched edits), scope AnalysisReportConfirmed to single Run to prevent\n  stale confirmation leaking across tasks\n- Intent classifier: refine \n[…]\nASS path dead-loop: remove 'don't trust -> re-run commands ->\n  re-verify if inconsistent' loop logic, replace with simple pass-through\n- UI: narration overflow handling, streaming render test updates",
          "is_bot": false,
          "headline": "feat: analysis gate degradation, intent classifier refinement, skill …",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-19T00:02:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "34e8c07486170ab43e6dd0f6a3b0cf869910f38e",
          "body": "- engine/content_delta_test.go: verify content_delta ProgressEvents emitted per chunk\n- ui/narration_test.go: verify finalizeTurnBlocks snapshots narration+toolTree, skips empty/whitespace",
          "is_bot": false,
          "headline": "test: add content_delta emission and finalizeTurnBlocks tests",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-17T01:56:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac64bc8a7b506b8d98797bc60fe274854819d3a6",
          "body": "- Engine: emit content_delta ProgressEvent during streaming (turn.go)\n- UI: accumulate content_delta into m.narration field\n- UI: finalizeTurnBlocks() snapshots narration + toolTree per turn at tool_start boundary\n- UI: render narration blocks with NarrationStyle (dim, indented)\n- UI: per-turn tool snapshots replace global type-grouped tool tree\n- Preserves isIntermediateText stripping for LLM history cleanliness",
          "is_bot": false,
          "headline": "feat(ui): stream AI intermediate narration as per-turn chunked blocks",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-16T10:19:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90e2508c97077566006da661237384e09806186c",
          "body": null,
          "is_bot": false,
          "headline": "docs: design spec for chunked streaming narration output",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-16T10:10:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5c67ba39391f6ef56c46708242ab6e2abcf02ee",
          "body": "…ary field",
          "is_bot": false,
          "headline": "feat: add task_complete tool definition and TurnResult.CompletionSumm…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T12:30:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d359b455d006d5d26c68f6676ee14eb0029e91eb",
          "body": "…uristics",
          "is_bot": false,
          "headline": "docs: implementation plan for task_complete tool replacing keyword he…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T11:32:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92757c0dfa8eaa5e58b1458ac04f06e034559b3a",
          "body": null,
          "is_bot": false,
          "headline": "docs: design spec for task_complete tool replacing keyword heuristics",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T11:22:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f060ed51fa5bab13209c9139c89e5ed6d8a1923",
          "body": "formatEditPlanSummary now lists each file to be modified with its\nrelative path and a brief old->new preview, so the user can see\nexactly what will change before confirming.",
          "is_bot": false,
          "headline": "feat: enhance edit plan summary with file paths and edit previews",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T10:11:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54ffe819810fd905ebc0e3482dcc75c143c99a00",
          "body": "When the agent has done searches (runToolCallCount > 0) and attempts\nedit/write for the first time, the gate blocks and injects a nudge\nasking the agent to output a text-only analysis report. The agent\noutputs the report, stop hooks end the Run(), and the user confirms\nbefore implementation proceeds.\n\nAfter 2 blocks the gate degrades to the edit plan guard to avoid\ndeadlock. Confirmation handling is extracted into\nhandleAnalysisNudgeConfirmation for testability.",
          "is_bot": false,
          "headline": "feat: add analysis report gate before edit plan guard",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T09:49:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f4cea2fe453814cf0a643dc9cdb74d18a175d8c",
          "body": "Add AnalysisMode and AnalysisReportConfirmed to TaskState. The constraint\nis now injected by context/builder.go on every Build call instead of the\nephemeral pendingPinnedMessages approach that was cleared after one turn.\n\nAlso adds pendingAnalysisNudge and analysisNudgeCount to the Engine struct\nfor use by the analysis report gate (Task 2).",
          "is_bot": false,
          "headline": "feat: persist ANALYSIS MODE constraint across turns",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T09:40:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a9914843b2e9091fb9edd9ec20162d6f77065d2",
          "body": "Identifies 5 root causes for why the agent jumps from search to\nimplementation without presenting analysis findings:\n1. ANALYSIS MODE constraint is ephemeral (only 1 turn)\n2. No engine-level 'report before implement' gate\n3. Edit plan summary lacks structured detail\n4. Intent classifier can't handle mixed analyze+implement requests\n5. Search-phase intermediate text is stripped\n\nProposes 3 components: persistent ANALYSIS MODE, analysis report\ngate, and enhanced edit plan summary.",
          "is_bot": false,
          "headline": "docs: add analysis report gate design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T08:40:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba889febf1f9a6f30a0170afc9446426deb9eec8",
          "body": "…on new files\n\nread_multi declared loopAction as zero-valued GuardAction (Type='')\nand only assigned it when a sub-target was blocked. When all\nsub-targets were Allow, loopAction stayed zero-valued and\nloopAction.Type != GuardAllow ('' != 'allow') was true, falsely\nblocking every read_multi on new files with an empty message.\n\nFix: default loopAction to GuardAction{Type: GuardAllow}. Add\nLoopGuard block log line. Regression test covers the all-new-files\ncase.",
          "is_bot": false,
          "headline": "fix(turn): default read_multi LoopGuard to Allow, fixing false-block …",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T02:51:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08c277405ca8eba4f0b5c2215d36d73b151701c2",
          "body": "… exit paths\n\nLog classifier verdict, error, retry count, and completion marker at\neach branch. Split the combined 'hasCompletionMarker || retry > 0'\ncheck into separate branches with individual log lines so production\nlogs show exactly which condition allowed exit.",
          "is_bot": false,
          "headline": "fix(stop-hook): add decision-point logging for classifier verdict and…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T02:51:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f8ab68a53432488baed377251a8dbc12a6c8377",
          "body": "glm-5.2 occasionally returns JSON in reasoning_content with empty\nContent (llm/deepseek.go:460). The classifier only read Content,\ngot empty string, failed with 'no valid JSON' and degraded to a\nclassifier_error fallback - causing unstable stop-hook decisions.\nNow falls back to reasoning_content when Content is blank.",
          "is_bot": false,
          "headline": "fix(classifier): fall back to reasoning_content when Content is empty",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-14T02:50:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c546c99c02a69aaa50e99638c25b8ded9bda5e72",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove accidentally downloaded .tgz and add to .gitignore",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:20:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc47165c357104443d8a1f7b277332555b0c0ccf",
          "body": "…+ add streaming render plan\n\nRevise stop-hooks design: clarify that while the stop hook mechanism\nitself is not wired into sub_agent.go, the conclusion classification\nlogic IS needed there — the 3-strike counter resets on tool calls,\ncausing critic verdicts to loop. Add detailed revision note (2026-07-08).\n\nAdd streaming render unification plan (glamour migration).",
          "is_bot": false,
          "headline": "docs: update stop-hooks spec for sub-agent conclusion classification …",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:20:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a50c2ff2036d4e82f15efe924452cb073f9edd99",
          "body": "Update '分析' intent to include anti-anchoring investigation method.\nAdd symptom-driven search guideline and a new '反锚定' section with\n5 principles: generate multiple hypotheses before searching, use\nliteral details as primary search terms, read all first-round\nresults before deep-diving, prefer simple causes, trace the full\npath from data generation to user-visible output.",
          "is_bot": false,
          "headline": "docs: add anti-anchoring methodology to system prompt",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:20:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3d1f59add32fc68901e1ecc3d99457ce6acd655",
          "body": "…nes in streaming\n\nmember_start: reset existing member to 'running' instead of appending\na duplicate entry when a member reappears in a later debate round.\n\nrenderStreaming: add collapseBlankLines() to the glamour rendering\npath, collapsing 2+ consecutive blank lines to one. Glamour renders\nfenced code-block content literally, so blank lines inside blocks\n(e.g. critic Check blocks) produced large visual gaps. Mirrors the\nlegacy wrapText path behavior.",
          "is_bot": false,
          "headline": "fix(ui): dedup member status across debate rounds + collapse blank li…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:19:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d02f4b278bc8c250e60e5c636ff661d1eabace6",
          "body": "Remove 500-rune truncation (truncateString) so the verdict judge\nsees complete proposals instead of potentially missing critical\ninformation at the cut point.",
          "is_bot": false,
          "headline": "fix(roundtable): pass full member content to verdict prompt",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:19:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc43e41b4bebeaf882f9752a4cf2167a9a4a4e7c",
          "body": "The edit-plan guard's confirmation prompt showed reasoning text\ntwice: Summary (buildRunSummary) and Questions (plan summary)\nboth contained the reasoning, and the UI concatenates them.\nImplementation (loop.go:694-696) was already committed; this adds\nthe regression test.",
          "is_bot": false,
          "headline": "test: add regression test for edit-plan duplicate summary",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:19:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7cbc59a30fbeaa86002d0d631f506adb1efd9789",
          "body": "LoopGuard read counts accumulated across Runs (engine reused via\nonce.Do). Cross-Run accumulation reached maxRepeats and falsely\nblocked normal reads. Implementation (loop.go:238-242) was already\ncommitted; this adds the regression test.",
          "is_bot": false,
          "headline": "test: add regression test for LoopGuard/ReadLoopState reset on new Run",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:19:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b33671d2f25930f959642bf877dca7813f86549",
          "body": "…ations\n\nCritic verdicts (e.g. '结论:失败 / VERDICT: FAIL') are text-only\nresponses that were nudged by the 3-strike mechanism. The nudge\ngoaded the critic into another tool call, resetting the counter,\ncausing it to loop to maxIterations (observed as 'turn 90' in\nproduction).\n\nFix: add ConclusionClassi\n[…]\n\nnext-step intent, terminate immediately. Conservative nudge on\nclassifier error. Three regression tests cover terminate-on-conclusion,\nnudge-on-narration, and nudge-despite-classifier-false-positive.",
          "is_bot": false,
          "headline": "fix(sub-agent): terminate on conclusion instead of looping to maxIter…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:19:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "676bee50c7bcbf78cbc5d1436cc5a96df2479d9a",
          "body": "…c pre-check\n\nStalledNarrationHook now uses a three-layer decision:\n1. Heuristic pre-check (hasFutureIntent, hasTrailingNextStepIntent)\n   blocks obvious intermediate narration without calling the LLM.\n2. LLM ConclusionJudge (IsConclusion) classifies ambiguous text.\n3. Conservative guard: classifier\n[…]\nfier context.\nExhausted signal (Exhausted=true) replaces silent pass-through after\nMaxRetries. Nil-classifier safety and error fallback to completion\nmarker check. Tests rewritten with stubClassifier.",
          "is_bot": false,
          "headline": "fix(stop-hook): replace pure heuristic with LLM classifier + heuristi…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:19:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c83dae00afe9b52ed2af8d80341509b4f7156b80",
          "body": "detectUserIntent now uses IntentJudge (LLM) instead of isAnalysisOnly/\nhasContextReference/isSameTopic keyword matching. Keeps isDangerousConfirmation\nas a deterministic safety fast-path. nil/err fallback to IntentContinue.\nWired in cmd/exec.go and ui/runner.go via SetIntentJudge.",
          "is_bot": false,
          "headline": "refactor: replace keyword intent detection with LLM IntentJudge",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T13:13:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d65817ee08224e05586be29eabcec616e2331d7",
          "body": "Mirrors ConclusionClassifier: flash model + JsonMode {intent} output.\nReplaces keyword-based isAnalysisOnly/hasContextReference/isSameTopic.",
          "is_bot": false,
          "headline": "feat: add IntentClassifier LLM judge for user-intent classification",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T10:40:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b9de5532df438eb0df700329725cfdb916f6120",
          "body": null,
          "is_bot": false,
          "headline": "docs: add intent-judge-llm implementation plan",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T10:32:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d618111b688d5e873cb43df085593891f3f5897a",
          "body": "Replace keyword-based user-intent classification (isAnalysisOnly/\nhasContextReference/isSameTopic) with an LLM IntentJudge, mirroring the\nConclusionClassifier pattern. Keeps isDangerousConfirmation as a\ndeterministic safety gate.",
          "is_bot": false,
          "headline": "docs: add intent-judge-llm design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-13T10:27:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "702a37f1d568cdb451fa7fb4e18cfc7cd285f3e6",
          "body": "Mechanical signature change; no behavior change. Prepares for LLM\nconclusion judgment needing context (timeout) and user goal.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(engine): add ctx to StopHook.Check and Goal to StopHookContext",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-12T12:39:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "79cb248360574b7659923bc7763056aed6c572dd",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(engine): add ConclusionClassifier for LLM-based conclusion judgment",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-11T15:29:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "21038dd99f393ef16bc94d3353741267353d6077",
          "body": "Guard state (LoopGuard/ReadLoop/ErrorLoop) no longer reset per-Run,\npreventing re-reads after plan confirmation. Edit-plan Blocked response\nno longer duplicates reasoning in Summary and Questions.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(engine): persist guard state across Run; dedup edit-plan summary",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-11T15:23:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6c11c90d8604a90503562fcb98628ce9765d01ea",
          "body": "Baseline before replacing with LLM conclusion judgment. Adds Exhausted\nfield, StalledNarrationHook with looksLikeNextStepNarration heuristic,\nZeroToolCallHook retry snippet, turn.go Exhausted->Blocked path, and\nrune-safe truncateStr. Includes stalled_narration_test.go.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(engine): keyword-based StalledNarrationHook baseline",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-11T15:23:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2765d04d086b34dad0a129824083ed69a9f84532",
          "body": "TDD plan: ConclusionClassifier unit, StopHook ctx/Goal signature change,\nStalledNarrationHook LLM judgment, keyword heuristic removal, wiring.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add Stop Hook LLM conclusion judgment implementation plan",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-11T15:18:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "efb8323366130d375e5d13e6c83a1953f0714853",
          "body": "Replace StalledNarrationHook keyword-prefix heuristic (looksLikeNextStepNarration)\nwith an LLM conclusion classifier. Cancel the nextStepPrefixes/conclusionMarkers\nkeyword matching that caused premature loop termination on non-prefix mid-task\nnarration.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add Stop Hook LLM conclusion judgment design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-11T15:08:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "899e0a82ee847c080c9c142ff723e3291a224fab",
          "body": null,
          "is_bot": false,
          "headline": "revert: remove unauthorized ModifiedFiles reset from loop.go and turn.go",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T11:59:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "792a75394515b8bcce03e5aa1bc14ee2c34b75a3",
          "body": null,
          "is_bot": false,
          "headline": "docs: add Stop Hooks design spec and implementation plan",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T10:34:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "991e15c32278753dde598f4e2fa756dbd7e96e33",
          "body": "Wire ZeroToolCallHook into both cmd/exec.go and ui/runner.go so the\nstop hook is active in both CLI and TUI execution paths.",
          "is_bot": false,
          "headline": "feat: register ZeroToolCallHook in engine creation points",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T10:33:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be0bdde71c7788822f26c3e51a065651d03c8566",
          "body": "Replace text-pattern-matching isIntermediateText branch with structured\nstop hooks call. Stop hooks use behavioral signal (runToolCallCount)\ninstead of text content matching. Reset stopHookRetryCount on tool calls.",
          "is_bot": false,
          "headline": "feat: replace isIntermediateText with stop hooks in executeTurn",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T10:32:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0450eeec10307ddb4979dfd86ea2a7123359b38",
          "body": "…pHooks)\n\nAdd stopHooks/stopHookActive/stopHookRetryCount fields to Engine struct\nwith Run() resets. Implement SetStopHooks setter and runStopHooks method\nthat iterates registered hooks and returns first blocking result.",
          "is_bot": false,
          "headline": "feat: add Engine stop hooks integration (fields, SetStopHooks, runSto…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T10:32:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6dde9590368537b03583d753a9890d329eea851",
          "body": "- Split flawed && short-circuit in TestZeroToolCallHook_EnglishMessage\n  into three independent assertions (Block, non-empty, no Chinese chars)\n- Add TestZeroToolCallHook_NegativeMaxRetries covering MaxRetries=-1\n  edge case (defaults to 3 via <= 0 guard)",
          "is_bot": false,
          "headline": "test: fix EnglishMessage assertion and add negative MaxRetries test",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T10:29:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13654f3a00586f1edfbb3114b7c9d73ccebfab2d",
          "body": null,
          "is_bot": false,
          "headline": "feat: add StopHook interface and ZeroToolCallHook",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-07T10:25:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9de6a2b978f30f6c2e275ed9c6cf4aa603497851",
          "body": "Replace wrapText with renderMarkdown in renderStreaming so streaming\ndisplay matches final display. Add package-level cache to avoid\nre-rendering on every 100ms tick. Fallback to legacy wrapText path\nwhen glamour is unavailable.",
          "is_bot": false,
          "headline": "feat: unify streaming rendering to glamour",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-06T10:39:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "475206c50a0ac9c81679ee9848bc34434cb49e36",
          "body": "Replace wrapText with renderMarkdown in renderStreaming to eliminate\nblank-line gap between streaming and final display. Add package-level\ncache to avoid re-rendering on every 100ms tick.",
          "is_bot": false,
          "headline": "spec: unify streaming rendering to glamour",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-06T10:20:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90009830febeec160dfb515d52c63c662120b9ce",
          "body": "… update engine turn handling\n\n- Remove click-to-expand full-screen diff viewer interaction and '点击展开' hint text\n- Clean up all dead code: renderDiffViewer, computeDiffViewerLayout, buildHunkLineMap,\n  hitTestHunk, renderDiffHunkBlock, diff styles, hunkHit/hunkLineEntry types\n- Simplify SkillMatcher\n[…]\nogic\n- Update context promptset: remove en templates, update zh system prompt\n- Add sub-agent stream, activate_skill, and editplan tests\n- Add design specs and implementation plans for recent features",
          "is_bot": false,
          "headline": "refactor(ui): remove full-screen diff viewer, simplify skill matcher,…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-05T23:44:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ca98a2048ff225fcb2a2997e0a013c4297ee210",
          "body": null,
          "is_bot": false,
          "headline": "docs: add remove diff viewer implementation plan",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-05T23:30:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb52283553c25b68aaa41c67ba3a051f2d560b10",
          "body": null,
          "is_bot": false,
          "headline": "docs: add remove diff viewer design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-05T23:25:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad01486c42e299e413b4575d65f9d741c743ce48",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add sub-agent stream/stuck-loop fix design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-05T14:37:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0e8341bc976f21d04a816286dcaa09c37f0d6efa",
          "body": "…allback matching\n\n- Add SkillMatcher interface + KeywordMatcher (existing keyword logic)\n- Add SemanticMatcher with MatchFunc callback for LLM-based matching\n- Add FallbackMatcher: keyword-first, semantic fallback on 0 matches\n- Extract activateSkill/showSkillSuggestions in engine loop\n- Refactor R\n[…]\nlMatcher interface\n- Wire FallbackMatcher into cmd/run.go EngineDeps\n- Fix AutoActivateThreshold doc comment (nil/0 → nil)\n\n11 new tests covering all matchers. No circular dependency (skill ⊥ engine).",
          "is_bot": false,
          "headline": "feat(skill): add SkillMatcher interface with keyword, semantic, and f…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T08:07:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5e01150c61e0a9518ec8120d5e648b31f0f1f324",
          "body": null,
          "is_bot": false,
          "headline": "feat(skill): add SkillMatcher interface and KeywordMatcher",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T07:50:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74b6931f8022c48a766209ad403feff70728d4ad",
          "body": null,
          "is_bot": false,
          "headline": "docs: add skill semantic matching design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T07:35:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57fb6d823a14481026bb6ac65f05e388448df383",
          "body": null,
          "is_bot": false,
          "headline": "fix(ui): wrap overflow lines from lipgloss-rendered panels",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T04:52:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "060bfa7d4b827862deb8628c7084b6fd1ba4446a",
          "body": null,
          "is_bot": false,
          "headline": "fix(ui): remove ANSI skip in wrapLines, delegate to wrapLine",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T04:50:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0bfcfc708d1086f19e90e13037d5776912c0c00",
          "body": null,
          "is_bot": false,
          "headline": "feat(ui): delegate ANSI lines in wrapLine to wrapLineAnsi",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T04:49:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f522a41883bd66d9166ccfde9737779959108df9",
          "body": null,
          "is_bot": false,
          "headline": "feat(ui): add wrapLineAnsi for ANSI-aware word wrapping",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-04T04:47:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12f44f5c87a168e4ec87c57043cc87db4ba6905a",
          "body": null,
          "is_bot": false,
          "headline": "chore: update context builder for new RoundtableState fields",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:26:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e350281535cdb3fef686e15af3292763266654c9",
          "body": null,
          "is_bot": false,
          "headline": "test: update roundtable tests for debate arena",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:25:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2592b66cfa87f633543c31a1e5325c7b2f8f215f",
          "body": null,
          "is_bot": false,
          "headline": "feat: integrate debate arena into engine loop",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:21:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4879ec280d7ae05a0a6ba1f9ae4857896562313",
          "body": null,
          "is_bot": false,
          "headline": "feat: rewrite roundtable as debate arena with 4-round flow",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:20:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b506018aa622c1f468d98c2bd2aaff6541eb36fb",
          "body": null,
          "is_bot": false,
          "headline": "feat: add team config section and TeamMembers engine config",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:16:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ccf9b8a7d429e0a5b773f864a48264519613c0d",
          "body": null,
          "is_bot": false,
          "headline": "feat: replace domain roles with personality-based debate members",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:14:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "154205a9686710c94b8796074b86c1670f1cda4b",
          "body": "…rena",
          "is_bot": false,
          "headline": "feat: add DebateRound types and refactor RoundtablePhase for debate a…",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-03T10:13:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f3c4f91047b048d7485fd026a04eeeb1e474f96",
          "body": "- Add computeDiffViewerLayout() for diff viewer coordinate mapping\n- Support mouse drag-to-select and copy in full-screen diff viewer\n- Pad body lines to terminal width to prevent Bubble Tea frame diff artifacts\n- Trigger full repaint on ESC exit from diff viewer",
          "is_bot": false,
          "headline": "fix(ui): enable text selection in diff viewer and fix scroll artifacts",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-02T12:25:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "276e0280e9201521252d8d64dcf60f029b83bc96",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: gitignore 忽略 .superpowers/ 工作流临时产物",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-02T03:14:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3966af220d6e6c42ad6b80c3820fc7302e19de50",
          "body": "UI diff 渲染:\n- diff hunk 默认折叠为摘要行([N] @@ 头 +N -M 点击展开),\n  点击 hunk 占满 body 全屏查看完整内容,ESC 退出\n- DisplayMessage 扩展 ToolTree 快照,完成后可点击展开\n- renderDiffBlock/renderToolSummary 改折叠摘要,删除 renderDiffHunkFlat\n- 全屏 viewer 复用 renderDiffHunkBlock,禁拖选、滚轮滚动\n- 顶部\"按 ESC 退出\"提示\n\nengine/context:\n- loop/turn/dsml/classifier/\n[…]\nisSubstantiveSummary 质量门\n- context builder/prompt、promptset system.md 调整\n\n其他:\n- README/cmd/go.mod 更新\n- diff 相关规格/计划归档至 docs/superpowers/archive/\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(ui): diff 折叠展示 + 点击全屏展开,及 engine/context 调整",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-02T03:12:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1e2cb6e700a749201a48f7294b42b3353472575f",
          "body": null,
          "is_bot": false,
          "headline": "fix: replace Done with neutral tool summary text; dim toolsummary style",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T08:02:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18135d07aa800a26d75569256d4b602ebd2c07af",
          "body": null,
          "is_bot": false,
          "headline": "fix: lower CJK threshold from 10 to 6 runes for isSubstantiveSummary",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T07:57:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2528c656488aef23aeaed2c3250a91ee92f3b64",
          "body": null,
          "is_bot": false,
          "headline": "feat: add isSubstantiveSummary quality gate to buildRunSummary",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T07:56:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e01168ed46156a9d174c7f426dde1fd0b7248c6c",
          "body": null,
          "is_bot": false,
          "headline": "docs: add fix-done-no-conclusion implementation plan",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T07:51:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b31a037c6c8f80697a88e51528ff4a8930e860f",
          "body": null,
          "is_bot": false,
          "headline": "docs: add fix-done-no-conclusion design spec",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T07:48:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb2ce8aca92da55a26812a84c79a9bfcecbc5ffd",
          "body": "6 个 TDD 任务:countHunkAddsDeletes、renderDiffBlock 折叠摘要、\n全屏 viewer 渲染 + View 分支、点击命中展开、ESC 退出 + 全屏\n禁拖选滚轮、全量验证。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(context): 新增 diff 折叠展示实现计划",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T07:17:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fd6c8799ea0802a2e3465fda6af2a6602416ad87",
          "body": "ghosting 只在 diff 混排滚动时出现,采用 hunk 级折叠 + 点击全屏\n展开方案从架构上绕开。默认显示 hunk 头 + 增删行数,点击 hunk\n占满 body 全屏查看,ESC 退出。全屏内禁拖选避免 ghosting 复现。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(context): 新增 diff 折叠展示设计规格",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-07-01T07:11:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "04943466ec9484a9a7b759ee0e8b10f5d2dbb702",
          "body": "R3: 删除 padLine,diff 行宽度交由 View 统一 ansi.Truncate,消除\nm.width/contentWidth/scrollContentWidth 三宽度不一致导致的滚动残留。\n\n同时新增 R1/R2 回归测试:含空行数组的 screenToLine 1:1 映射、\n选区复制不含 \\r。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ui): 移除 renderDiffBlock 全宽 pad 并补选区回归测试",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T15:33:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ed2dccc9cae16640d7b96c1bc8fbab3a72658d71",
          "body": "R3: 删除 padLine,diff 行宽度交由 View 统一 ansi.Truncate,消除\nm.width/contentWidth/scrollContentWidth 三宽度不一致导致的滚动残留。",
          "is_bot": false,
          "headline": "fix(ui): 移除 renderDiffBlock 全宽 pad 统一宽度",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T15:28:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53622e9d4a1e79ec1ce2b960ecc7a4596f807fff",
          "body": "上一 commit 误删末尾 \\n 致多 hunk 粘连,恢复 buf.String() 并修正测试断言。",
          "is_bot": false,
          "headline": "fix(ui): 恢复 renderDiffHunkFlat 末尾换行",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T15:24:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a88302aaf89ce879153c135cf2fa2dc7544ac207",
          "body": "flat 版同步修复 R1/R2,不加硬截断(消息文本流跟随终端软折行)。",
          "is_bot": false,
          "headline": "fix(ui): renderDiffHunkFlat 保留空行并剥离回车",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T15:20:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a01d0c5d3fa189a644104edcee4891c22a4626aa",
          "body": "R4: 超长代码行按显示宽度截断到 maxWidth,末尾加 …,修复长行\n无提示且避免折行破坏行映射。",
          "is_bot": false,
          "headline": "fix(ui): diff 长行硬截断并加 … 提示",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T11:52:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf1cf24d9cafbbc002e8f59ce52639e76a82efdf",
          "body": "R4: 超长代码行按显示宽度截断到 maxWidth,末尾加 …,修复长行\n无提示且避免折行破坏行映射。",
          "is_bot": false,
          "headline": "fix(ui): diff 长行硬截断并加 … 提示",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T11:36:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d19b8b13b1c7eefeddd82f585bb7ddad9564743e",
          "body": "R1: 空行改为占位渲染,保持屏幕行==数据行,修复选错行/滚动错位。\nR2: TrimRight 剥离 \\r,修复回车致下行渲染到上行。",
          "is_bot": false,
          "headline": "fix(ui): diff hunk 保留空行并剥离回车",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T11:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26117b8422e102be5e14f4d1f31af1e9488f91a6",
          "body": "按 lipgloss.Width 逐 rune 截断,保留 ANSI 转义序列边界,为 diff\n长行硬截断做准备。",
          "is_bot": false,
          "headline": "feat(ui): 新增 truncateVisual 按显示宽度截断辅助函数",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T02:33:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c9f4d0b04beface962b2e21d8e4c2b21ebcd953",
          "body": "按 TDD 拆分为 7 个任务:truncateVisual 辅助函数、renderDiffHunkBlock\n修 R1/R2、R4 长行截断、renderDiffHunkFlat 修 R1/R2、renderDiffBlock\n移除 padLine 修 R3、选区回归测试、全量验证。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(context): 新增 diff 纯文本展示修复实现计划",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T02:24:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5246a22c3a1fdf1b8d9da35a86ac6b65c4bfab53",
          "body": "诊断 diff 区域选错行/滚动错位/花屏三个症状的根因:空行被\ncontinue 丢弃致屏幕行≠数据行、未剥离 \\r 致回车覆盖、pad\n宽度不一致致滚动残留、长行无截断提示。方案保留自研选区与\n单层前景色,移除 padLine 统一宽度,新增 truncateVisual。\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(context): 新增 diff 纯文本展示修复设计规格",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-30T01:57:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "19c3ca3c490b6161b76d3fdd19c47696f746a978",
          "body": null,
          "is_bot": false,
          "headline": "fix: 修正 go report card 和 LICENSE badge 的仓库链接",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:54:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6f5765b7b6d789a2a5e7042f2fd56500bb5496d",
          "body": null,
          "is_bot": false,
          "headline": "docs: 移除 README 中 30 秒验证章节和内置技能系统说明",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:51:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3c0675645e73a75651cfe88332b4b500f579690",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump to v1.0.1",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:44:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2cdf71ff51a2474645fa7793db1b890b67d621b",
          "body": "Dev",
          "is_bot": false,
          "headline": "Merge pull request #3 from hxs996-beep/dev",
          "author_name": "hxssss",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:36:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcffa3038a4a1f9c64eaa6d22565a8be746606a2",
          "body": "Feat/agent teams",
          "is_bot": false,
          "headline": "Merge pull request #2 from hxs996-beep/feat/agent-teams",
          "author_name": "hxssss",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:36:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef65eacfe9011bbbba4e609332609245f51086d3",
          "body": "Add a system-prompt note (zh/en) asking the model to maximize per-turn\nparallelism during investigation: emit all independent files/symbols/\nkeywords the current step needs as parallel tool calls in one response\n(aim for 5+) rather than issuing 2-3 and stopping. Fewer round-trips\nper conclusion, which matters more on high-latency endpoints.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(context): guide higher per-turn parallelism during investigation",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:34:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ad7c870c1ed7582a9d6cf5731e1a4d3afa0567e8",
          "body": "Reword grep and read tool descriptions to encourage grep-first cross-\nfile exploration (find all occurrences / call sites / flows) and reading\nonly the relevant range via offset/limit, rather than reading whole\nfiles one by one. Reduces redundant full-file reads and wasted turns.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(tools): steer model to grep-first exploration in tool descriptions",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:34:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "44fa18235be69eecdda42b830b9a8d76ef0fdbc7",
          "body": "summarizeArgs now annotates read calls so the UI can distinguish a full-\nfile read from a targeted one: \"path (全文)\" for full reads,\n\"path (symbol:Run)\" for symbol reads, \"path (L52-101)\" for offset/limit\nranges. Without this every read rendered as a bare path, making repeated\nfull-file reads (a loop symptom) indistinguishable from targeted reads.\nUpdate summarizeargs tests to cover the new annotations.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(engine): annotate read scope in tool-call summaries",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:34:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3db2a562170c7f6ebb91561c81b331f44958e2db",
          "body": "When a handoff sub-agent is cancelled (BlockedBy=\"cancelled\"), don't\nappend its digest as a tool message to history — the result is empty/\nincomplete and would feed stale context to the next turn. Mark the\nToolResult status as \"cancelled\" in both the main engine and\nSubAgentRunner so the caller can distinguish it from a normal \"ok\"\ncompletion.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(engine): skip tool messages for cancelled handoff results",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:33:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7ae65ada66596109dfe988806bdee5a4a2d4b9af",
          "body": "Add a RetryProgress field to the streaming Chunk so the retry layer can\nnotify the caller when a retry is about to start (e.g. \"Retrying 1/3\nafter 2s...\"). Propagate it through llm.Chunk -> engine.ModelChunk ->\nadapter, and emit a \"retry\" ProgressEvent in executeTurn so the UI can\nshow retry state in real time instead of silently waiting.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(llm): surface retry progress to UI via RetryProgress chunk field",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:32:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "879e4e5c3c04b4c90752fb78068482ed1834e358",
          "body": "The HTTP client used Timeout:0 with no per-phase bounds, so a stalled\nAPI connection (server accepts TCP but never responds, or stream goes\nsilent mid-response) hung the agent indefinitely — the process stayed\nalive with no log output and a frozen UI for hours.\n\nAdd layered timeouts that bound stall\n[…]\nhich is a hard deadline and not retried) with status=0,\nso the retry layer treats them as transient and re-attempts instead\nof surfacing a hang.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(llm): add streaming idle/dial/header timeouts to prevent hangs",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:31:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "11527305af39ed924d8d4ed714a0eff10f510414",
          "body": "…text\n\nresolveSafePath previously confined all file operations to the launch\ndirectory, rejecting any path outside it with \"escapes workspace\". For an\nAI coding agent that must read/edit files across multiple projects, this\nsilently broke edit/write/glob/grep whenever the target was a sibling or\nabs\n[…]\nnd leave\nresidue while scrolling. Plain text + full-width padding behaves like\nordinary message rows, so scrolling and selection are now stable.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tools): allow agent to operate on any path; render diff as plain …",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-29T11:30:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6502d74d77a9ff670bcddf6ed4ab571682182c09",
          "body": "Establish a \"locate then read\" protocol via prompt-only changes to curb\nthe agent re-reading whole files during exploration (observed: 8 full\nreads of llm/deepseek.go in one task despite LSP giving exact line\nnumbers). Adds explicit guidance to grep/lsp-locate before reading a\nrange, and repositions grep as the primary cross-file exploration tool.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(engine): add design spec for locate-then-read prompt protocol",
          "author_name": "hxs996-beep",
          "author_login": "hxs996-beep",
          "committed_at": "2026-06-28T14:55:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 9,
      "commits_last_year": 161,
      "latest_release_at": "2026-07-19T00:13:39Z",
      "latest_release_tag": "v1.0.3",
      "releases_from_tags": false,
      "days_since_last_push": 6,
      "active_weeks_last_year": 8,
      "days_since_latest_release": 7,
      "mean_days_between_releases": 6.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 0,
      "stars": 4,
      "watchers": 0,
      "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": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 91578,
      "source_files_sampled": 147,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "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": "github.com/BurntSushi/toml",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/charmbracelet/bubbletea",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.4"
        },
        {
          "name": "github.com/charmbracelet/glamour",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.0"
        },
        {
          "name": "github.com/charmbracelet/lipgloss",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.1-0.20250404203927-76690c660834"
        },
        {
          "name": "github.com/charmbracelet/x/ansi",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.10.2"
        },
        {
          "name": "github.com/ebitengine/purego",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.10.1"
        },
        {
          "name": "github.com/muesli/reflow",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.3.0"
        },
        {
          "name": "github.com/muesli/termenv",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.16.0"
        },
        {
          "name": "github.com/sergi/go-diff",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.1"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.1"
        },
        {
          "name": "golang.org/x/net",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.38.0"
        },
        {
          "name": "golang.org/x/sync",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.17.0"
        },
        {
          "name": "golang.org/x/text",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.30.0"
        },
        {
          "name": "golang.org/x/time",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.9.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": 3,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "hxs996-beep",
          "commits": 141,
          "avatar_url": "https://avatars.githubusercontent.com/u/229309945?v=4"
        },
        {
          "type": "User",
          "login": "imjok00",
          "commits": 20,
          "avatar_url": "https://avatars.githubusercontent.com/u/38679813?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.876
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "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": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 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": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "13 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "ed3e104d14fb2583526e97e2b2edab7a20f6ff3b",
        "ran_at": "2026-07-26T07:11:49Z",
        "aggregate_score": 1.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-06-29T11:36:53Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/hxs996-beep/deepAct",
    "host": "github.com",
    "name": "deepAct",
    "owner": "hxs996-beep"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 42,
      "inputs": {
        "security": 14,
        "vitality": 72,
        "community": 28,
        "governance": 35,
        "engineering": 52
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 72,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "commits_last_year": 161,
              "human_commit_share": 1,
              "days_since_last_push": 6,
              "active_weeks_last_year": 8
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "8/52 weeks with commits",
                "points": 5.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "161 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 161
                    }
                  }
                ],
                "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": 9,
              "latest_release_tag": "v1.0.3",
              "releases_from_tags": false,
              "days_since_latest_release": 7,
              "mean_days_between_releases": 6.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "9 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 7 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~6.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 6.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 28,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 8,
            "inputs": {
              "forks": 0,
              "stars": 4,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "4 stars",
                "points": 7.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 35,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 18,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.876
            },
            "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 88% of commits",
                "points": 2.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 88
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "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": 3,
              "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": "3/3 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 3,
                      "decided": 3
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "critical",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 18,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "hxs996-beep",
              "public_repos": 1,
              "account_age_days": 330
            },
            "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": "0 followers of hxs996-beep",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "hxs996-beep"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1 public repos, account ~0 yr old",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 52,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "ai-coding-assistant",
                "code-agent",
                "code-agent-harness",
                "deepseek-tui",
                "deepseek-v4",
                "golang",
                "vibecoding",
                "harness",
                "deepseek-harness"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "9 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 14,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 14,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 1.4
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "13 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 69,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.93,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "93 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 93,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 79,
            "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": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.22,
              "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "22 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 22,
                      "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 91578,
              "source_files_sampled": 147,
              "oversized_source_files": 2
            },
            "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": "2/147 source files over 60KB",
                "points": 54.3,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 147,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch go package 'github.com/deepact/deepact' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T07:11:54.153559Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/hxs996-beep/deepAct.svg",
  "full_name": "hxs996-beep/deepAct",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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