公开记录
软件健康报告模式 0.23.0 · 指标 1.13.0 · 2026-07-21 18:39 UTC

gurselcakar / arithmego

Arithmetic game for the terminal.

GoMIT★ 9 星标⑂ 1 复刻始于 2026年1月在 GitHub 上查看 ↗

gurselcakar/arithmego 的健康指数为 100 分中的 45 分,处于「存在风险」区间。 其得分最高的类别是AI Readiness(80/100),最低的是Security(31/100)。 最近一次更新在 154 天前。 近期的大部分工作由 1 位贡献者完成。

45
总分 / 100
存在风险

软件健康指数

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

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

评分画像

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

所有权

Gürsel Çakar个人账户
7 关注者2 个公开仓库始于 2021年7月

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

软件包生态系统

注册表软件包版本月下载量版本数最近发布
Gogithub.com/gurselcakar/arithmegov0.7.0-5154 天前

按类别列示的指标

活力

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

51中等 · 占总体的 22%

开发活跃度

31存在风险
评分方式
9.9/36推送新近度 — 最近一次推送于 154 天前
2.8/36提交节奏 — 52 周中有 4 周有提交
18/18提交量 — 最近一年 109 次提交
0/10OpenSSF Scorecard:Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
所用输入
commits_last_year109
human_commit_share1
days_since_last_push154
active_weeks_last_year4

发布纪律

81良好
评分方式
27/27有发布版本 — 已发布 5 个发布版本
27/36发布时效 — 最近一次发布版本于 154 天前
27/27发布节奏 — 约每 0.7 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — Project has not signed or included provenance with any releases.
所用输入
releases_count5
latest_release_tagv0.7.0
releases_from_tags
days_since_latest_release154
mean_days_between_releases0.7

社区与采用

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

31存在风险 · 占总体的 18%
评分方式
14.6/60星标 — 9 个星标
0/25复刻 — 1 个复刻
0/15关注者 — 0 位关注者
所用输入
forks1
stars9
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold

社区健康

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

可持续性与治理

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

33存在风险 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
0/22.5提交分布 — 头号贡献者编写了 100% 的提交
1.4/13.5贡献者广度 — 1 位贡献者
0/10OpenSSF Scorecard:Contributors — project has 0 contributing companies or organizations -- score normalized to 0
所用输入
bus_factor1
contributors_sampled1
top_contributor_share1
评分方式
0/46.8议题解决 — 没有议题或无数据
0/38.3PR 接受 — 没有已裁定的拉取请求或无数据
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
已排除计分(无数据或不适用):议题解决, PR 接受。 其余权重已重新归一化。
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
6.5/25所有者影响力 — gurselcakar 有 7 位关注者
13.5/25既往记录 — 2 个公开仓库,账户约 5 年
所用输入
followers7
owner_typeUser
is_verified
owner_logingurselcakar
public_repos2
account_age_days1,837
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — go 上有 1 个软件包
35/35发布时效 — 最近一次发布于 154 天前
20/20版本历史 — 5 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesgithub.com/gurselcakar/arithmego
ecosystemsgo
any_deprecated
min_days_since_publish154

工程质量

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

76良好 · 占总体的 20%

工程实践

60中等
评分方式
24/24CI 工作流 — 3 个工作流
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。 其余权重已重新归一化。

文档

100优秀
评分方式
30/30README
25/25文档目录
15/15文档 / 主页站点 — https://arithmego.com
10/10仓库描述
10/10主题标签 — 10 个主题标签
10/10Wiki
所用输入
topicsarithmetic, bubble-tea, cli, developer-tools, game, go, golang, math, terminal, tui
has_wiki
homepagehttps://arithmego.com
has_readme
has_docs_dir
has_description

安全

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

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

安全态势

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

AI 就绪度

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

80良好 · 占总体的 0%
评分方式
45/45代理指令 — CLAUDE.md
0/15机器可读文档(llms.txt)
35.7/40可读的提交历史 — 100 次人类提交中有 67 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.67
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes1,121
评分方式
18/18一条命令的引导启动 — Makefile
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — Go(静态类型)
10/10可复现环境 — lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 99 次由代理编写或署名代理
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfilesgo.sum
has_dockerfile
typed_language
bootstrap_filesMakefile
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0.99
toolchain_manifestsgo.mod
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — Go(静态类型)
55/55可控的文件大小 — 采样的 113 个源文件中有 0 个超过 60KB
所用输入
primary_languageGo
largest_source_bytes25,634
source_files_sampled113
oversized_source_files0

关键数据

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

数据采集警告

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

更多细节

Star 与 Fork 历史 9 ★ / 1 ⇿
9Star
1Fork
5发布

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

02468109112026-012026-042026-07
主版本 0次版本 3修订 2
OpenSSF Scorecard 3.1 / 10
3.1综合

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
不适用CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintained0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
直接依赖 5
注册表软件包版本约束清单文件
Gogithub.com/charmbracelet/bubblesv0.21.0go.mod
Gogithub.com/charmbracelet/bubbleteav1.3.10go.mod
Gogithub.com/charmbracelet/lipglossv1.1.0go.mod
Gogithub.com/google/uuidv1.6.0go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
全部依赖 未采集

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "arithmetic",
        "bubble-tea",
        "cli",
        "developer-tools",
        "game",
        "go",
        "golang",
        "math",
        "terminal",
        "tui"
      ],
      "is_fork": false,
      "size_kb": 3298,
      "has_wiki": true,
      "homepage": "https://arithmego.com",
      "languages": {
        "Go": 485917,
        "CSS": 10904,
        "HTML": 9393,
        "Shell": 3089,
        "Makefile": 567,
        "JavaScript": 1586,
        "PowerShell": 3175
      },
      "pushed_at": "2026-02-17T13:02:34Z",
      "created_at": "2026-01-28T13:53:15Z",
      "owner_type": "User",
      "updated_at": "2026-05-19T09:09:58Z",
      "description": "Arithmetic game for the terminal.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "gurselcakar.com",
      "name": "Gürsel Çakar",
      "type": "User",
      "login": "gurselcakar",
      "company": null,
      "location": null,
      "followers": 7,
      "avatar_url": "https://avatars.githubusercontent.com/u/87243002?v=4",
      "created_at": "2021-07-10T18:14:49Z",
      "is_verified": null,
      "public_repos": 2,
      "account_age_days": 1837
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-02-17T12:00:17Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-02-17T11:37:08Z"
        },
        {
          "tag": "v0.5.2",
          "kind": "patch",
          "published_at": "2026-02-16T18:31:15Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2026-02-16T18:26:30Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-02-14T18:38:46Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "4fbbc6893060250e27f95ffa3645dc202742ec91",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove broken views badge from README",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T13:02:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1f8ddd07db4bdb91204a23af7aaebb21fb0ad948",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add downloads and views badges to README",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T13:00:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b796bea1f731f2c1ba8f2ff5a2115158355c0566",
          "body": "Use $env:PROCESSOR_ARCHITECTURE instead of RuntimeInformation,\nwhich may not be available or returns enum values instead of strings.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix architecture detection in install.ps1 for PowerShell 5.1",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T12:05:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4b9d8eaaa2e41c42f50b257dfac7eee396ee3d87",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Bump latestVersion to 0.7.0 in hugo.toml",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:58:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ae93fac211e01c61382ee6e805e5e04e6530d052",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Windows install command to README and website docs",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:57:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f125f517802346caadc212f228f62a5739f1c628",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Symlink install.ps1 into website/static for Hugo builds",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:57:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "75e1454c35555bf34bcacba858e7cc650025bc43",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Windows support with PowerShell install script",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:55:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a165f32e09e33d3633678a93f44e5d91fa9c5360",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Replace header text with favicon logo in navbar",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:43:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "308145ced96e24c883f87b18173c5d4f7a383969",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Bump latestVersion to 0.6.0 in hugo.toml",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:39:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "30ab8a190fcbb39b0cc32b36d810f791e535369b",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Widen hero pitch text to fit on two lines",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:39:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f29428224f924a395b277902ff1d6a651045143d",
          "body": "Allows launching practice mode directly from the command line,\nfollowing the same pattern as `arithmego statistics` and `arithmego settings`.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add `arithmego practice` CLI command",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:35:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4f76103b3225286d97f8c42ad4bbc5004ff2b28b",
          "body": "Rewrite README \"What is this?\" as a narrative About section. Update\nwebsite showcase and hero descriptions to match. Remove unused\nfeatures.html and story.html partials and clean up WEBSITE.md.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Rework README and website copy for consistency",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:34:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1bbd3ff5da771d7ba5824f56516464f2d8626ff7",
          "body": "Videos were encoded at H.264 Level 6.0 (2588x1814, 120fps) which\nmobile hardware decoders cannot handle. Re-encoded to Baseline Level\n4.0 (1280px, 30fps) for universal compatibility. Reverted unnecessary\npreload and IntersectionObserver workarounds from previous fix attempts.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Re-encode videos for mobile playback and revert workarounds",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:21:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dfd4981cddde2b94fa9e074076402de3fb88f21f",
          "body": "iOS Safari ignores the autoplay attribute in many cases. Use JS to\nexplicitly call play() when videos scroll into view.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add IntersectionObserver to trigger video playback on mobile",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:11:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7539a3c281ccf26ccfe948bf035f3c0654fda229",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add poster fallback images for mobile video playback",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:07:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "87c064c01410110896739706d7b7638668b3b6e8",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add preload=auto to all showcase videos for mobile playback",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:04:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cc1440e8b14951ea9ad4b42e359a58a3a22a0477",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Replace ASCII logo with image in README",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T11:00:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3e14cc2c2996b05077bc52727e0b1c70e0c11f8a",
          "body": "Replace single video placeholder with 5 showcase sections (onboarding,\nplay menu, gameplay, practice, statistics). Remove story, features, and\nseparator sections in favor of letting videos demonstrate the product.\nAdd closing section with CTA. Update hero pitch copy.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Rework website with video showcases and streamlined content",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-17T10:59:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c427b537444947011e1982be537125e3367d49d0",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add play menu video showcase to website",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-16T18:55:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d85ca2e591ed4b997800ff4fa97603b528b34cc0",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix inconsistent category separator width in play browse",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-16T18:31:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cc3e6a1c40e359b3815a8c4d7dbbe91cb93b8fa3",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add wrap-around scrolling to play browse menu",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-16T18:24:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5d105b547603699daa8a3785053cddbcaa840a32",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add game logic and question generation documentation for contributors",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-14T20:59:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "37a94bc6abc297f90a8a68d39b04880709b91535",
          "body": "Slim down version command to just print the version. Clean up update\ncommand for minimal output. Remove unused CommitSHA and BuildDate\nvariables and their ldflags from Makefile and goreleaser config.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Simplify version and update CLI output, remove dead build metadata",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-14T18:34:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2d5e2ba20efa84e1b39c127b3d801842d13da5b0",
          "body": "…onfig\n\nWhen launching via CLI (e.g., arithmego play addition), the app skipped\ncreating a PlayBrowseModel. Pressing Escape from config tried to reuse\nthe zero-value model, showing category headers but no modes.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix empty play browse screen when navigating back from CLI-launched c…",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-14T18:31:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "71238278744a02de6a0c15107f1298326969f5d7",
          "body": "Remove discoverable content (screen list, mode list, CLI commands,\nnode types) and keep only what prevents mistakes: build commands,\ndependency isolation rules, and key architectural patterns.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Trim CLAUDE.md to follow best practices",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-14T18:29:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "65636b1567b9c7335fb90025fe7d0212a1136e91",
          "body": "- ARCHITECTURE.md: Add missing settings CLI command, add multiple choice section\n- WEBSITE.md: Remove non-existent changelog system, add missing files (404.html, separator.html, CNAME), fix install.sh description (symlink, not copy)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update docs to match current codebase",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-14T18:28:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "df817b4ead027cedd4fb0210a55e3468f847507c",
          "body": "Apply centering directly on the border style instead of a separate\ninner element, so lipgloss centers within the actual inner content\narea after accounting for padding and borders.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix off-center equation text in play config preview box",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-13T14:16:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "df37c7792d140c5ed14722ecec603fbba1a3dedc",
          "body": "Move the = from the question line to the input prompt for typing mode,\nso the expression is centered independently and the = stays consistent\nregardless of expression length. For multiple choice mode, show \"= ?\"\non the question line instead.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Stabilize = sign position and use it as the input prompt",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-13T14:12:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "72f05b07891fc029a611fb33b2685f3a6438447f",
          "body": "Reuse existing PlayBrowseModel instead of creating a new one when\nreturning from play config, preserving the user's mode selection.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix play browse cursor resetting to first mode when navigating back",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-13T14:08:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a56fab846c779fe128af6a5d18517993a49757bc",
          "body": "Use fixed times and AddDate instead of Add(hours) in trend tests\nto avoid midnight boundary issues. Fix computePlayStreak and\ncomputeWeeklyData to use local midnight truncation instead of\nUTC-based Truncate.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix timezone-sensitive test failures in analytics",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-12T23:34:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9c18c4cbcc0826e9d7bcba7cadc998f7d086d0ee",
          "body": "Onboarding:\n- Fix title positioning consistency across steps using fixed top offset\n- Default selections to first options (30s, Beginner, Addition, Typing)\n- Show operation-specific previews in input mode step\n- Remove progress dots from Ready screen\n- Replace \"Press → to Start\" with motivational te\n[…]\n:\n- P toggles pause/resume (was pause-only)\n- Esc quits game (was pause), matching common UI convention\n- Update pause screen hints accordingly\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Improve onboarding flow, feature tour, and game controls",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-12T23:25:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9c1a21351f39a9b9240834e58bb4ed3bdc23bcbb",
          "body": "Move the title back into viewport content so it centers together with\nthe mode list. The centering logic and title placement were accidentally\nremoved during the search functionality cleanup.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix vertical centering on play browse screen",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-11T14:01:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "38e4497d1890907be2f6ca4b49033f854bdfde55",
          "body": "- Remove CONTRIBUTING.md and its references\n- Fix difficulty levels in ARCHITECTURE.md (5 not 3)\n- Update CLAUDE.md, game/doc.go, modes/doc.go for generator system\n- Fix session detail \"perfect session\" message for empty sessions\n- Add tests for expr and gen packages\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update docs and add tests for expression tree generators",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-11T13:49:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fec8e72cdf1b10dcd741bf6cf6460d758e4b0ba1",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add 404 error page to website",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-11T13:42:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b6caa140636e7ed1b1b320fb8fab573b949d3eda",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix CI: update RenderHintsStructured to RenderHintsResponsive",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-11T13:42:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5ebb690478be5b17b57e12ce18df677afc5c6e83",
          "body": "- Remove changelog section entirely (content, layouts, archetype, CSS)\n- Remove changelog nav link from hugo.toml\n- Simplify download page: drop version from title, update Windows text\n- Clean up footer: remove license note and separators\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove changelog page and clean up website",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-11T13:35:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "41f0c3f81e538d2709de4140d848bd80dbabc2de",
          "body": "- Add HintsHeight constant and SetViewportSize helper in components\n- Replace 7 duplicated viewport init/resize blocks with helper calls\n- Remove per-screen hints height constants (menuHintsHeight, etc.)\n- Migrate remaining RenderHintsStructured calls to RenderHintsResponsive\n- Remove unused RenderHints and RenderHintsStructured functions\n- Make preview box widths responsive in play_config and onboarding\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Extract shared viewport helper and hints constant across screens",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-09T16:22:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "24064a5587961b1572e1a3851830319ba7775c99",
          "body": "New system:\n- Expression tree (game/expr): Expr interface with Num, BinOp, Paren,\n  UnaryPrefix, UnarySuffix, Pow nodes for Eval/Format/Key\n- Generator framework (game/gen): 16 weighted-pattern generators with\n  per-difficulty ranges, backward division, and overflow protection\n- QuestionPool (game/p\n[…]\n startGame()\n- Fixed pre-computed power display in mixed_advanced (now shows 2⁴ not 64)\n- Rewrote session_test.go and modes_test.go for new API\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Replace Operation system with expression tree generators",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-09T15:40:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "12684fa4fdef9854d2ca7e0abd2b76248c0460a9",
          "body": "Search added unnecessary complexity for 16 modes that are already\norganized by category. The title is now fixed at the top outside the\nscrollable viewport, and modes list top-down without vertical centering.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove search functionality from play browse screen",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-08T19:39:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "92d45c32f6343d80af3f1fe8c94688ab7b742707",
          "body": "…vicon\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Sync website with releases: changelog pages, version bump, and new fa…",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-05T15:38:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fff3b4298a5a8e66a3c668664c66a2478053deaf",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add math-operator separators between homepage sections",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-05T15:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f5c4f431cb17407114f68f85de1034b2e6f8f3de",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Stack footer vertically on mobile with centered items",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-05T15:28:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8dc67f26dd9a0937e296b49ce6a2df8747d3e0f8",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Truncate curl command on mobile to keep copy button visible",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-05T15:26:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "91c846b715e5bc1945c6a8a5bbc2ddf99c79fb81",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Rename \"Play Again\" to \"Play\" on results screen",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-05T15:20:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2d5b3e6fde092aecff617f55f6acc2a640da71b2",
          "body": "The Y-axis labels used hardcoded format widths that didn't account for\nvarying value magnitudes, causing the │ separator to misalign with the\n└ corner on the X-axis.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Y-axis alignment in line chart by using dynamic label widths",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-05T15:18:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cb666306b9c0e060145707b7de1bdb41f49cb044",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add responsive key hints that wrap on narrow terminals",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-05T15:14:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8b847b4d80c41a4f1ab714e106fc3ac6f344062f",
          "body": "…e streak bar\n\nRework the game screen top bar for better readability and feedback:\n- Add 2-line top padding and 4-char horizontal margins to the HUD\n- Add \"Score\" label above score number, replaced by milestone text on tier-up\n- Capitalize and move \"Remaining\" label above the timer\n- Clamp score to \n[…]\nets on milestone)\n- Add inline streak count next to multiplier (e.g., \"×1.25 · Streak 5\")\n- Fall back to simple layout when terminal width < 40\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Redesign game HUD with padding, labels, score floor, and tier-relativ…",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-05T15:10:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cf9313019a342f9ebae08b9075a8a9b59eb247a9",
          "body": "Adds top padding to the mode selection screen content so it appears\nvertically centered rather than anchored to the top of the screen.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Center play browse content vertically when it fits viewport",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-04T23:17:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fe3d66d27ed60cc511eb81b700da56353f3a1bf7",
          "body": "Practice mode:\n- Replace settings panel with direct keyboard shortcuts (C/O/D/M)\n- Persist settings between sessions (category, operation, difficulty, input)\n- Add retry-on-mistake: wrong answers shown in red, user can retry\n- Works for both typing and multiple choice input modes\n\nGame mode:\n- Remove green/red feedback coloring on input\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Rework practice mode UX and remove gameplay feedback coloring",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-04T23:05:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6b31284ce97c991b6ded9173a03c39600cf7b16a",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove Windows support temporarily until issues are resolved",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-03T11:30:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "94e0ebac95b11e6f102eca7dceb588c230afe902",
          "body": "Ensure screens are properly initialized when navigating back via Esc\nfrom CLI-launched subcommands (play, statistics, settings). Previously,\nreturning to menu or play browse showed \"Loading...\" because the target\nscreen's viewport was never sized. Add returnToMenu() helper that calls\nSetSize before transitioning, and use startPlayBrowse() for back\nnavigation from play config. Add `arithmego settings` CLI command.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add settings command and fix Esc navigation for CLI subcommands",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-03T10:59:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7b695ca431401c90035f099610e7a74f93d68145",
          "body": "Replace printf with echo -e for color output, use proper if/then\nfor wait exit status, and remove unused GREEN variable.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix shellcheck warnings in install script",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-03T10:34:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "334458c6e10ad7e595c21373a652b6ad492582c6",
          "body": "Install to ~/.local/bin instead of /usr/local/bin so the auto-update\nfeature can replace the binary without elevated permissions. Implement\nDownloadAndApply for in-app auto-updates with fallback to manual\nnotification. Redesign install script with math-themed spinner and\nminimal branded output. Deduplicate install scripts via symlink.\nCenter main menu items independently from secondary links.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add auto-update support and redesign install script",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-03T10:31:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f2d0091aac9db6c3a9cd2fe9cbf59987a732130c",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix download page terminal box overflow on mobile",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-03T10:17:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0085280a9a567a8450e6128942fb6689a105713b",
          "body": "Add a \"Follow me on X @gurselcakar\" option to the main menu that opens\nthe profile in the user's default browser. Also fix menu item alignment\nby ensuring all items share a uniform width before centering.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add X profile link to main menu",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-03T09:54:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2bfd0571b6b27089ef05a99ebe74b9b1f2713483",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add copy-to-clipboard button for install commands",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-03T09:40:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7cf0e2159402202ced064959b0c5adb1636e6e02",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Skip CI workflow for website-only changes",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-03T09:27:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "25be13cd8c2b22e5bf31e34ad9b6eb6b9d6c0688",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix footer not sticking to bottom on changelog and download pages",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-03T09:25:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "61e2ec9cf2b2563b476c0cc80a2703e3fd699280",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add GitHub Pages deployment workflow and CNAME",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-03T09:13:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ab15314fe36320c945a510de215d7caebd6e93a6",
          "body": "Custom Hugo site (no external theme) with dark theme and monospace accents.\nIncludes landing page with hero, features, highlights, and story sections,\nchangelog with two-column layout, and download page with install script\nand direct Windows downloads. Updates README to match website tone.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Hugo website with landing page, changelog, and download page",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-03T09:08:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "40ee635347324bb51988888085742ebbaee9d51b",
          "body": null,
          "is_bot": false,
          "headline": "Use pre tag for logo to remove copy button",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T22:25:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f6f6b676fb70c2c2abb245abf01eedc69e5d8cd",
          "body": "- Add centered ASCII logo\n- Add centered tagline\n- Use dynamic GitHub badges (build, release, license)\n- Remove tech stack from description\n- Fix code block highlighting\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Redesign README with centered header and dynamic badges",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T22:24:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "441e91e4d4276d5aa10474a76d781e16837aa3d5",
          "body": "Change \"command-line\" to \"terminal-based\" for accuracy.\nArithmeGo uses Bubble Tea TUI, not just CLI commands.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update game description to terminal-based",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T22:11:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "097c72da28bcaeba83a50f156b8f12211d65cdec",
          "body": "- Add Windows builds (arm64, amd64) to GoReleaser\n- Use .zip format for Windows, .tar.gz for Unix\n- Update README with Windows install instructions\n- Document cross-platform storage paths in ARCHITECTURE.md\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Windows support for distribution",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T21:58:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5695dbedfa7376b4c35a3cd2c5192232439bddf1",
          "body": "- Replace popup filter panel with dedicated hotkeys (c/d/p for\n  category/difficulty/period, m/p for metric/period in trends)\n- Show filter values inline without arrow selectors\n- Redesign dashboard: remove hero box, use single stats row,\n  compact 2x2 records grid, streamlined footer\n- Add vertical\n[…]\ntering when content fits on screen\n- Remove unused time period filter from operation detail view\n- Clean up unused overlay and focus state code\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Redesign statistics screens with cleaner filtering UI",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T21:56:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f3f75a09debc1af0fac6097e7dcec799ee6b118c",
          "body": "- Add GoReleaser config for cross-platform builds\n- Add GitHub Actions CI workflow (test, lint, shellcheck)\n- Add GitHub Actions release workflow\n- Add install script for curl-based installation\n- Streamline docs for open source (README, ARCHITECTURE, CONTRIBUTING)\n- Move internal docs (DESIGN, ROADMAP) to .local/archive\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add distribution infrastructure (Phase 12)",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T21:34:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dac24b26e9cf5a0ae379b645e77cdb50d37a1782",
          "body": "- Use fixed-width bars with space padding for consistent alignment\n- Fix singular/plural: \"1 session\" vs \"N sessions\"\n- Pad count to fixed width to prevent centering misalignment\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix bar chart alignment and grammar in trends view",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T21:23:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5575cee965fc4107492cf6fb2bb4a5272300567c",
          "body": "Extract the statistics screen from a single file into a dedicated package\nwith multiple views (dashboard, operations, history, trends). Add reusable\nprogress bar component for accuracy visualization.\n\nKey changes:\n- Split monolithic statistics.go into statistics/ package with 10 files\n- Add viewport\n[…]\nring\n- Add ASCII charts for trends visualization\n- Add session detail view with full question log\n- Create progressbar component in components/\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Refactor statistics screen into modular package structure",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T21:14:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "31e8f16790e9f4aa08fa291615e10a32d26c80c0",
          "body": "Document the TUI screen architecture including all 11 screens\n(Menu, Play Browse, Play Config, Game, Pause, Results, Practice,\nStatistics, Settings, Onboarding, Feature Tour) and component locations.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add UI screens documentation to CLAUDE.md",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T13:23:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "782969b72cbcd405ef2628fc0f3dcec8e451984d",
          "body": "- Refactor Addition, Subtraction, Multiplication, Division to use\n  the shared generateWithFallback helper with makeCandidate and\n  makeCandidateRelaxed methods, matching the other operations\n- Remove unused math import from refactored files\n- Add tests for panic cases (division/modulo by zero, negative\n  exponent, negative factorial input)\n- Add tests for isAcceptableFallback and wouldOverflow helpers\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Refactor basic operations to use generateWithFallback pattern",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T13:22:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "52d9da706c65cc4a3d5c983f036e6d8e73685f3e",
          "body": "- Replace scripts/ folder with website/ in architecture\n- Add Website section explaining Hugo site structure\n- Update Distribution section with install flow\n- Update README status to Phase 11 and refresh features\n- Remove scripts/.gitkeep (install.sh will live in website/static/)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update docs for website-based distribution",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T13:22:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "27365821cbd7097d4d39b2f5ece0f7a7bdc12bc6",
          "body": "- Add doc.go files to internal/game/ and internal/game/operations/\n  for consistency with other packages (modes, storage, analytics, cli)\n- Add comprehensive ScoreDifficulty doc comments to 8 operations\n  (cube, square, cube_root, square_root, factorial, modulo, percentage, power)\n  explaining cognitive load scoring rationale\n- Move package documentation from helpers.go to doc.go\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add package documentation to game package",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T13:21:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e2132025aaafb5d1622f89dbf0e505711b3c9d8b",
          "body": "- Replace StartModeQuickPlay with StartModePlayBrowse and StartModePlayConfig\n- Add optional [mode] argument to play command (e.g., arithmego play addition)\n- Add tab completion support for mode names\n- Update statistics command documentation with current keyboard shortcuts\n- Add package documentati\n[…]\ni package\n\nThe play command now opens:\n- Play Browse screen when called without arguments\n- Play Config screen when called with a valid mode ID\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Refactor play command to support mode argument",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T13:09:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c5075ad158eb9e8da1b744388b0421d6d38129b9",
          "body": "- Move OperationStats from storage to analytics package where it's used\n- Add test for null sessions JSON handling in statistics\n- Add package documentation to storage package\n- Update analytics doc.go to reference OperationStats\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Improve storage and analytics package organization",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T12:55:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0c8aedba7495c3307bee6742eb58de5106141a15",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add package documentation to modes package",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T12:46:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6ece39338732130a275f9b5238fb4d300c77d9e2",
          "body": "Extract analytics logic into dedicated package with:\n- Aggregates: ExtendedAggregates with personal bests, extended\n  operation stats, and filtered computation\n- Filters: Time periods, difficulty, category, mode, and operation\n  filters with AggregateFilter struct\n- Trends: Trend data computation, w\n[…]\nge package (now\nsuperseded by analytics.ComputeExtendedAggregates).\n\nIncludes comprehensive test coverage (48 tests) and package\ndocumentation.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add analytics package for statistics computation",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T12:42:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "af769af75b4e4549348de866b59e101dd1704d9e",
          "body": "- Add PlayBrowseModel for mode selection with categories and search\n- Add PlayConfigModel for game settings with difficulty preview\n- Extract shared helpers (maxLen, difficultyNames, findDifficultyIndex)\n- Update mode descriptions to consistent \"Calculate\" format\n- Remove old single-screen Play implementation\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Refactor Play screen into two-step browse and configure flow",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T11:05:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f72d8cebfe189020b4fba5e57e0fad9c9cd1f889",
          "body": "- Add feature tour with 4 screens: Practice, Modes, Statistics, Finale\n- Feature tour introduces app features after first game completion\n- Enhanced results screen with detailed stats (avg/fastest response, streak)\n- Results screen shows intro message for first game flow\n- First game routes to featu\n[…]\n callback and personal note\n- Remove redundant notes from onboarding (covered by feature tour)\n- Add FastestResponseTime method to game session\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add post-onboarding feature tour and enhanced results screen",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T10:24:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0d4e2f5d4ad7c662d042f52eabcc0ad70c7ec966",
          "body": "- Add viewport to menu and settings screens for responsive resizing\n- Apply consistent branding colors (BrightBlue logo, white tagline)\n- Add cyan focus indicator (>) consistent across all screens\n- Add section headers to settings (Game Defaults, Preferences)\n- Change menu hint from Enter to → for c\n[…]\nnsistency with onboarding\n- Add LogoColored and ProgressDotsColored component functions\n- Fix potential infinite loop in menu cursor navigation\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add viewport and improve UI consistency for menu and settings",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T08:07:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b82590d2ace4bd1508ba2880f9170508e64def20",
          "body": "- Remove cursor field, use step-specific indices for cleaner state management\n- Fix DRY violation by having Update() call SetSize()\n- Extract scroll constants (linesBeforeOptions, scrollPaddingTop/Bottom)\n- Add new Ready screen with summary, controls, and start instruction\n- Add input mode preview s\n[…]\ninput mode options (remove redundant descriptions)\n- Update subtitles to consistent question style\n- Add comprehensive test coverage (14 tests)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Refactor onboarding with new Ready screen and UI improvements",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T07:54:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8a3c2f2fd3b112b0011cffcf1c42a76a6abb93d0",
          "body": "- Rename sprint modes to simple names (Addition Sprint → Addition)\n- Remove Speed Round and Endurance (duration presets, not distinct modes)\n- Add all 12 single-operation modes (basic, power, advanced)\n- Add 4 mixed modes: Mixed Basics, Mixed Powers, Mixed Advanced, Anything Goes\n- Update documentation and tests to reflect new mode structure\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Rename game modes and expand to 16 total modes",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-02T06:09:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a579bb0b8593f5c6f60df94710bf6d9178f7187c",
          "body": "Replace separate Quick Play and Modes menu options with a unified Play\nscreen that allows users to start immediately or customize settings.\n\n- Add new play.go with collapsed and expanded settings panel views\n- Remove modes.go and launch.go (functionality merged into play.go)\n- Simplify menu to singl\n[…]\nto prevent layout shift\n- Extract helper methods for settings summary and input method\n- Add bounds checking and defensive empty slice handling\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Unify Quick Play and Modes into single Play screen",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-01T16:56:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8ceac9ff1f14d72b8bd5a5b6f649a8652d3bbc42",
          "body": "- Replace vertical operation list with horizontal selectors for all settings\n- Add Category field to settings (Basic, Power, Advanced)\n- Remove number key shortcuts (1-4) in typing mode to prevent input conflicts\n- Implement settings panel overlay that doesn't shift centered equation\n- Apply setting\n[…]\nwith arrow keys\n- Use lipgloss.Width() for proper visual width calculation in overlay\n- Fix Input component Focus/Blur to use pointer receivers\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Refactor practice screen with horizontal selectors and overlay panel",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-02-01T00:14:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e370234cb580ea3fb7290fd941fb7247e7402d4a",
          "body": "- Settings: compact layout, removed section headers, context-aware hints\n- Toggle: new \"On · Off\" visual with highlighted active state\n- Selector: arrows always visible but dimmed at boundaries\n- Both components now support LabelWidth/ValueWidth for alignment\n- Settings and statistics use dynamic width calculation instead of\n  hardcoded values for better maintainability\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Redesign settings UI with dynamic layout and improved components",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T23:39:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "36b211eb658ca99be4bf570e88f1c918200444bd",
          "body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add dot separator between logo and tagline",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T23:22:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2c7ef87c01bb89b1750bac474d7c9359fd06e59d",
          "body": "- → (right) now advances to next step (alias for Enter)\n- ← (left) now goes back to previous step (alias for B)\n- Update hints to show arrow keys as primary navigation\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add arrow key navigation to onboarding wizard",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T22:50:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "07e1ee5c7b3d2382b8c4a2b0556a594e6db834a5",
          "body": "Refactor all 11 screen View() functions to anchor key hints at the\nabsolute bottom of the terminal with a 1-line gap. Main content is\nnow centered in the remaining space above the hints.\n\n- Remove separator lines from practice.go\n- Use consistent pattern with lipgloss.Place for layout\n- Add bottomPadding for slight gap from terminal edge\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement consistent bottom-anchored hints across all screens",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T22:45:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0264adf30e92c5b5909fc49c826c769c4762fb7f",
          "body": "The last line of the ASCII logo was one character shorter than the\nother lines, causing visual misalignment.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix logo alignment by adding trailing space to last line",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T22:28:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "550a2b017ad164f596b24f29327e045d13d31775",
          "body": "- Add structured hint system with Hint type and RenderHintsStructured()\n- Update all 11 screens to use consistent [Key] Action format\n- Order hints logically: back left, navigation middle, forward right\n- Fix menu positioning bug after quitting first game (add rebuildMenu calls)\n- Fix multiple choice showing zeros on first question (use gameStartMsg)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Standardize hint UI and fix menu/MC bugs",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T19:15:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b4d8ea0a92ae96a20f252b24b3a2283c1d4f188f",
          "body": "- Update status to Phase 11 in progress in CLAUDE.md\n- Add quit confirmation and multiple choice to ROADMAP Phase 11\n- Add quitconfirm.go screen to ARCHITECTURE.md\n- Add missing config fields (onboarded, input_method, skip_quit_confirmation)\n- Add quit confirmation message types to architecture docs\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update documentation for Phase 11 progress",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T11:36:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2ff578488725bcda4e9be9270d300f3d1dbc612b",
          "body": "Add quit confirmation screen when pressing Q during gameplay or from pause.\nIncludes \"Don't ask again\" option that persists to settings, with proper\ntimer handling (stops on confirm, resumes on cancel back to game).\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Phase 11: Quit confirmation flow",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T11:30:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "57384e5ae3e07553694e5380ccccaf4ca1f40930",
          "body": "Add multiple choice as an alternative to typing for answering questions.\nUsers can select from 4 options using keys 1-4 with auto-submit on selection.\n\nFeatures:\n- Choice generation with difficulty-aware distractors (closer for harder levels)\n- Horizontal layout: [1] 24  [2] 32  [3] 28  [4] 36\n- Ava\n[…]\nmethod selector\n- Onboarding: input mode selection step\n- App: wires input method through all flows\n- Config: InputMethod field for persistence\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement multiple choice input mode",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T11:06:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "21e78c4ab82c5009fabd6bcb278a5ee28cbedc16",
          "body": "Add Cobra CLI with subcommands:\n- arithmego play: quick play (or onboarding for new users)\n- arithmego statistics/stats: open statistics screen\n- arithmego update: check GitHub releases for updates\n- arithmego version: show version, commit, build date\n\nFeatures:\n- Version injection via ldflags (make\n[…]\n GitHub tag_name responses\n- Handle non-numeric version parts in comparisons\n\nAlso removes redundant .gitkeep files from populated directories.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Phase 10: CLI commands with Cobra and update notifications",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T10:27:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3ddb3745acd958c5311b53adfa5febe640b26799",
          "body": "5-screen guided setup: Welcome, Duration, Difficulty, Operation, Input Mode.\nNavigation with Enter (continue), S (skip), B (back). Progress dots indicator.\nCompletion saves preferences and launches game immediately.\n\n- Add Onboarded flag to config struct\n- Create progress dots component\n- Replace on\n[…]\nIntegrate startup check and message handling in app\n- Fix DefaultDifficulty from \"Normal\" to \"Easy\"\n- Update docs to reflect Phase 9 completion\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Phase 9: Onboarding flow for first-time users",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T09:58:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dab0de5b58ea6df78e1ba43727b9c504d855bea6",
          "body": "- Add config.go replacing settings.go for unified preferences + Quick Play state\n- Add toggle.go component for boolean settings\n- Implement full settings screen with Defaults and Preferences sections\n- Update launch.go to pre-select user's configured defaults\n- Update app.go to use Config throughout\n- Split Phase 8/9 in roadmap (Settings complete, Onboarding planned)\n- Update ARCHITECTURE.md with current data storage structure\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Phase 8: Settings screen with unified config storage",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T09:25:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4b09bba8ec29a7ba956949cfea7fa035e3c9d5df",
          "body": "Code quality improvements from deep code review:\n\nCritical fixes:\n- Replace panic with graceful recovery in app.go startGame()\n- Add Sync() before Close() in storage to prevent data loss\n- Add panic recovery in main.go to restore terminal on crash\n- Document preconditions for Division/Modulo Apply()\n[…]\n: config storage, auto-update, onboarding\n- Add Phase 9 details: CLI commands and auto-update check\n- Add config.json schema to ARCHITECTURE.md\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Code review fixes and Phase 8-9 documentation",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-31T08:49:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "76420e2a12853cb8b8c90d1624cd0bea8bd2b160",
          "body": "Practice Mode is a sandbox for drilling arithmetic without timer or scoring.\nFeatures live controls to change difficulty and operation on-the-fly.\n\nIncludes:\n- Practice screen with clean, centered question display\n- Expandable settings panel (Tab to open/close)\n- All 12 operations across Basic, Powe\n[…]\n component extracted from launch.go\n- Question stays visible when settings panel is open\n- Input method toggle placeholder (ready for Phase 10)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Phase 7: Practice Mode with expandable settings panel",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-30T13:36:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "195d58d5a2491845e87d3a8af619d56dc78e7ac7",
          "body": "- Add settings storage (~/.config/arithmego/settings.json)\n- Remember last played mode, difficulty, and duration\n- Show Quick Play menu item with mode name for returning users\n- Instant game start with saved configuration\n- Add ParseDifficulty function for settings deserialization\n- Handle removed modes and corrupted settings gracefully\n- Add SetSize method to MenuModel for consistent screen sizing\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Phase 6: Quick Play with persistent settings",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-30T13:33:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8d82bfa47f3edf0c91483e143fa469d66b9eca80",
          "body": "- Add storage package for persistent data (~/.config/arithmego/)\n- Track per-session data (mode, difficulty, score, streak, accuracy)\n- Track per-question data (operation, response time, correct/wrong)\n- Implement statistics screen with summary and detailed views\n- Add atomic file writes to prevent \n[…]\norruption\n- Use secure file permissions (0700 dir, 0600 files)\n- Add input validation for session records\n- Include comprehensive test coverage\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Phase 5: Statistics system with persistent storage",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-30T12:53:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "33d21c8ac9adc09d8de28b279ce140fddb7b44d1",
          "body": "Add gamified scoring with difficulty multipliers, time bonuses, and a\n7-tier streak system. Points scale from 0.5x (Beginner) to 2.0x (Expert),\nwith instant answers (<2s) earning 1.5x time bonus. Consecutive correct\nanswers build streaks that increase multipliers up to 2.0x at 20+ streak.\n\nFeatures:\n[…]\nh tier-based styling and shimmer effects\n- Delta popup showing points gained/lost per answer\n- Best streak tracking displayed on results screen\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Phase 4: Scoring system with streaks and multipliers",
          "author_name": "Gursel Cakar",
          "author_login": "gurselcakar",
          "committed_at": "2026-01-30T12:24:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 5,
      "commits_last_year": 109,
      "latest_release_at": "2026-02-17T12:00:17Z",
      "latest_release_tag": "v0.7.0",
      "releases_from_tags": false,
      "days_since_last_push": 154,
      "active_weeks_last_year": 4,
      "days_since_latest_release": 154,
      "mean_days_between_releases": 0.7
    },
    "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": [
        {
          "name": "github.com/gurselcakar/arithmego",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/gurselcakar/arithmego",
          "is_deprecated": false,
          "latest_version": "v0.7.0",
          "repository_url": "https://github.com/gurselcakar/arithmego",
          "versions_count": 5,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-02-17T11:58:48Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 154
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 9,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-12",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": {
        "days": [
          {
            "date": "2026-01-31",
            "count": 1
          },
          {
            "date": "2026-02-03",
            "count": 1
          },
          {
            "date": "2026-02-11",
            "count": 1
          },
          {
            "date": "2026-02-22",
            "count": 1
          },
          {
            "date": "2026-03-04",
            "count": 1
          },
          {
            "date": "2026-03-24",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 1
          },
          {
            "date": "2026-04-28",
            "count": 1
          },
          {
            "date": "2026-05-19",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 9,
        "total_stars": 9
      },
      "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": 25634,
      "source_files_sampled": 113,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 1121
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/charmbracelet/bubbles",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.21.0"
        },
        {
          "name": "github.com/charmbracelet/bubbletea",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.10"
        },
        {
          "name": "github.com/charmbracelet/lipgloss",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        }
      ],
      "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": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "gurselcakar",
          "commits": 109,
          "avatar_url": "https://avatars.githubusercontent.com/u/87243002?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "deploy-website.yml",
        "release.yml"
      ],
      "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": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "4fbbc6893060250e27f95ffa3645dc202742ec91",
        "ran_at": "2026-07-21T18:39:52Z",
        "aggregate_score": 3.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/gurselcakar/arithmego",
    "host": "github.com",
    "name": "arithmego",
    "owner": "gurselcakar"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 45,
      "inputs": {
        "security": 31,
        "vitality": 51,
        "community": 31,
        "governance": 33,
        "engineering": 76
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 51,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "at_risk",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 31,
            "inputs": {
              "commits_last_year": 109,
              "human_commit_share": 1,
              "days_since_last_push": 154,
              "active_weeks_last_year": 4
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 154 days ago",
                "points": 9.9,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 154
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "4/52 weeks with commits",
                "points": 2.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "109 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 109
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "releases_count": 5,
              "latest_release_tag": "v0.7.0",
              "releases_from_tags": false,
              "days_since_latest_release": 154,
              "mean_days_between_releases": 0.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "5 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 154 days ago",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 154
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 31,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "forks": 1,
              "stars": 9,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "below_threshold"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "9 stars",
                "points": 14.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": 33,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "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": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "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": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 38,
            "inputs": {
              "followers": 7,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "gurselcakar",
              "public_repos": 2,
              "account_age_days": 1837
            },
            "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": "7 followers of gurselcakar",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 7,
                      "login": "gurselcakar"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "2 public repos, account ~5 yr old",
                "points": 13.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 2
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 5
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/gurselcakar/arithmego"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 154
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 154 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 154
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "5 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 76,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": 100,
            "inputs": {
              "topics": [
                "arithmetic",
                "bubble-tea",
                "cli",
                "developer-tools",
                "game",
                "go",
                "golang",
                "math",
                "terminal",
                "tui"
              ],
              "has_wiki": true,
              "homepage": "https://arithmego.com",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://arithmego.com",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "10 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 31,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 31,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 80,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "good",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.67,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 1121
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "67 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 35.7,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 67,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 71,
            "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.99,
              "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": "99 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 99,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 25634,
              "source_files_sampled": 113,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/113 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 113,
                      "oversized": 0
                    }
                  }
                ],
                "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": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-21T18:39:58.138398Z",
  "schema_version": "0.23.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/g/gurselcakar/arithmego.svg",
  "full_name": "gurselcakar/arithmego",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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