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

victorzhuk / go-lispico

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

victorzhuk/go-lispico 的健康指数为 100 分中的 52 分,处于「中等」区间。 其得分最高的类别是AI Readiness(82/100),最低的是Community & Adoption(24/100)。 最近一次更新在 4 天前。 近期的大部分工作由 1 位贡献者完成。

52
总分 / 100
中等

软件健康指数

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

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

评分画像

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

所有权

Victor Zhuk个人账户
27 关注者41 个公开仓库始于 2013年3月

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

软件包生态系统

注册表软件包版本月下载量版本数最近发布
Gogithub.com/victorzhuk/go-lispicov0.8.0-104 天前

按类别列示的指标

活力

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

81良好 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 4 天前
3.5/36提交节奏 — 52 周中有 5 周有提交
18/18提交量 — 最近一年 130 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year130
human_commit_share1
days_since_last_push4
active_weeks_last_year5

发布纪律

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

社区与采用

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

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

社区健康

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

可持续性与治理

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

37存在风险 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
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已验证域名 — 不适用于个人账户
10.4/25所有者影响力 — victorzhuk 有 27 位关注者
23.8/25既往记录 — 41 个公开仓库,账户约 13 年
所用输入
followers27
owner_typeUser
is_verified
owner_loginvictorzhuk
public_repos41
account_age_days4,870
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — go 上有 1 个软件包
35/35发布时效 — 最近一次发布于 4 天前
20/20版本历史 — 10 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesgithub.com/victorzhuk/go-lispico
ecosystemsgo
any_deprecated
min_days_since_publish4

工程质量

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

74良好 · 占总体的 20%

工程实践

80良好
评分方式
24/24CI 工作流 — 2 个工作流
24/24存在测试
16/16Linter 配置 — .golangci.yml
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。 其余权重已重新归一化。

文档

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

安全

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

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

安全态势

38存在风险
评分方式
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
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — 无数据
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — 无数据
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate3.8
已排除计分(无数据或不适用):ci_tests, packaging, signed_releases。 其余权重已重新归一化。

AI 就绪度

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

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

关键数据

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

数据采集警告

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

更多细节

OpenSSF Scorecard 3.8 / 10
3.8综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-23 22:05 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
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
不适用Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
不适用Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
直接依赖 3
注册表软件包版本约束清单文件
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogolang.org/x/syncv0.19.0go.mod
Gogolang.org/x/termv0.40.0go.mod
全部依赖 未采集

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 914,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 1029520,
        "Makefile": 184,
        "Common Lisp": 963
      },
      "pushed_at": "2026-07-19T17:35:37Z",
      "created_at": "2026-02-23T11:31:59Z",
      "owner_type": "User",
      "updated_at": "2026-07-19T17:35:43Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "master",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "https://victorzh.uk",
      "name": "Victor Zhuk",
      "type": "User",
      "login": "victorzhuk",
      "company": null,
      "location": null,
      "followers": 27,
      "avatar_url": "https://avatars.githubusercontent.com/u/3948471?v=4",
      "created_at": "2013-03-23T09:54:47Z",
      "is_verified": null,
      "public_repos": 41,
      "account_age_days": 4870
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-07-19T18:51:19Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-07-18T08:53:57Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-07-11T08:40:33Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-07-06T16:34:57Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-07-04T05:35:11Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-07-03T23:02:20Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "3eb9133ff8279c657fa48c8625b78738774eaa3f",
          "body": "Document the VM/eval perf program landed since v0.7.0: native-op\ncompilation under any dialect, compacted HashMap storage, cached\nglobal bindings, validated-chunk dispatch, preboxed small values, and\nbatched cancellation. Notes the GoFunc context-unwrapping behavior\nchange from the ADR 0010 amendment.",
          "is_bot": false,
          "headline": "docs(changelog): release v0.8.0",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-19T17:35:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9a941a6fc5d9e8a04c13672916af0a13e4ea6a5",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive core-hashmap-compact",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-19T17:24:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2403d0fd601d5513e13c02856ffe075f65708747",
          "body": "Replace the double Go-map HashMap (values + a parallel key map) with a\ndual representation: a sorted []entry small form at <=8 keys and a\nmap[hashKey]entry large form that promotes on the 9th distinct key.\nhashKey moves from strconv/fmt-formatted {typ,val string} to bit-derived\n{typ uint8, num uint6\n[…]\nnistic and evaluator-identical but numeric-key\norder is now bit-pattern, not lexicographic-on-string (2 before 10).\nNaN keys canonicalize to one pattern; +/-0.0 fold to one key, matching\nFloat.Equals.",
          "is_bot": false,
          "headline": "perf(core): compact HashMap storage, drop key formatting",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-19T17:24:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "63540374fe4283d22bab889b3acf9ca643bdbddc",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive compiler-native-op-emission",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-19T16:24:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4addcf3e418844011d2004ff596e220c4ff3e13",
          "body": "compileList gated native-op emission behind isSpecial, which a configured\ndialect sets false for + - * / < > <= >= =, so the shipped runtime path\ncompiled every operator to OpCall/GoFunc. Hoist the gate so canonical\noperators emit native opcodes under any dialect.\n\nUnder Lisp-2 (default CL) heads re\n[…]\neping\ntree-walker/VM parity when an operator is redefined.\n\nCanonical (+ a b) Engine.Call on a WithBytecode() engine drops 3->1 allocs,\nmatching the GoFunc-free baseline; goldset (clojure) unaffected.",
          "is_bot": false,
          "headline": "perf(compiler): emit native arithmetic opcodes under configured dialects",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-19T16:22:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bbbe16b85992d9ab92189e65226c44925ce57883",
          "body": "Native arithmetic/comparison opcodes are dead code on the runtime path:\nthe dialect-aware compiler emits OpCall for + - * / < > <= >= = because\nCanonicalName only covers special forms, violating the accepted bytecode-vm\nnative-opcode requirement. File the fix as a tracked change.",
          "is_bot": false,
          "headline": "docs(openspec): propose compiler-native-op-emission",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-19T07:56:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6e6a14e5c1a8d75d1f3882e7ba69f75134651ab",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive engine-call-fast-path",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-19T07:51:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40ea7d5d0f97971847b1289122910a3a5a67ae84",
          "body": "vm.apply enters the call protocol directly instead of synthesizing a\nper-call <apply> wrapper chunk. The bytecode Call path skips the per-call\neval-state context wrap: the VM carries the deadline and its own structural\n-depth counter, and a re-entrant GoFunc lazily shares one eval-state so the\nstruc\n[…]\nng budget (ADR 0007). Observability goes lazy: an atomic\ncallbacks-active gate skips timing and event construction when no callback\nis registered, and per-function call counts move to a lock-free map.",
          "is_bot": false,
          "headline": "perf(runtime): fast-path bytecode Engine.Call boundary",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-19T07:51:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "feb57e17c54c9de31f98ac77c2f61d08951dc1c1",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive eval-batched-cancellation",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-19T06:14:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "791c4380069e82423739e6f6e8a71873b608f102",
          "body": "The VM checked ctx.Err() before every instruction and the tree-walker\nselected on ctx.Done() per node, while the Engine's 30s default deadline\nwas a context.WithTimeout per Eval/Call — a timer, timerCtx, and Done\nchannel allocated before any user code ran.\n\nReplace both with a batched check: a count\n[…]\nr's context unwrapped rather than an\nengine-deadline context; a GoFunc blocking on external work is bounded by\nthe caller's context, not interrupted mid-call by the Engine deadline\n(ADR 0010 amended).",
          "is_bot": false,
          "headline": "perf(eval): batch cancellation checks and drop per-call deadline timer",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-19T06:14:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2492666448e4b356aae3ae809869a58edafb8b77",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive vm-dispatch-loop-tightening",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T22:05:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4e7452fb0d43d51c896947ce4fd87957a5fa3dc",
          "body": "…l ints\n\nMove structural chunk validation to construction/cache/apply entry so the\nhot loop trusts a validated chunk: Chunk.Validate() checks constant indices,\nsymbol-constant types, jump/loop/handler targets, sub-chunk references, local\nslots against Chunk.MaxStack, and that the final instruction t\n[…]\n are unchanged.\n\nfib bytecode ~8% faster (35->33 allocs/op); arithmetic loop ~17% faster;\ngoldset VM alloc cells non-increasing (loop-sum 141->119). Crossval parity,\n-race, and the ADR 0008 gate hold.",
          "is_bot": false,
          "headline": "perf(vm): tighten dispatch loop, validate chunks at load, prebox smal…",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T22:03:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac6ba0c943a2d210111d3253b3fe966a40436ed1",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive vm-resolved-global-bindings",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T20:36:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42a9ea4fd2591350464d602e56b4f5556dc50035",
          "body": "Resolve OpGetGlobal through a stable per-name binding cell cached on the\nchunk, eliminating the per-read scope-chain map walk that dominated\nGetCanonical. Cell value+canonical are stored inline and read under a short\nenv RLock (a lock-free atomic read would box the value on every write and\nregress t\n[…]\n\n\nfib bytecode ~10.6% faster; VM/tree-walker parity and -race clean; ADR 0008\ngoldset non-regressing on 11/12 cells (twice-macro +0.21% B/op, the 8-byte\nsite pointer on its per-eval-recompiled chunk).",
          "is_bot": false,
          "headline": "perf(vm): cache global binding resolution via env cells",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T20:33:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d201c1cc89ee787178348d69ffd00cff8f199834",
          "body": "Add six change proposals specifying optimizations targeting the\nVM dispatch loop, global binding resolution, and HashMap\nrepresentation for the article benchmark gap vs. GopherLua.",
          "is_bot": false,
          "headline": "docs(openspec): add design specs for performance improvements",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T15:22:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cef7b97e64172989d4d80283818fddcf626ff116",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.7.0",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T08:53:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ef2d6b93795c9669ce9ac99bd033d26d0db3ccb",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive release-consumer-gate",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T08:44:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "194c74618419b708e10e930047ff635bfd91df59",
          "body": null,
          "is_bot": false,
          "headline": "ci(release): gate later releases against the stored VM baseline",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T08:43:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ed9663e7bf210d6943a497ffece5bad881db9a2",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive vm-let-parallel-binding-parity",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T08:27:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcac8b1302c4d4f6621eac728105db3170a5d639",
          "body": null,
          "is_bot": false,
          "headline": "fix(compiler): bind kernel let in parallel under the VM",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T08:26:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34a7b1dc0c9e667011e12c75ae34835d628497ea",
          "body": "The gate corpus is now owned by go-lispico, independent of any consumer:\n12 rule-shaped cells with hand-derived goldens covering dispatch (cond),\nclosure state (set!), try/catch with later locals, keyword lookups,\nwhen/unless nil positions, defmacro with quasiquote, loop/recur,\nhigher-order folds, m\n[…]\nrfgate pipeline (tier lookup, per-tier threshold branches, needs-rerun\nsignaling). Docs restate corpus ownership: gate stays self-contained,\nrepresentativeness evolves against measured consumer needs.",
          "is_bot": false,
          "headline": "feat(goldset): author the repo-owned gold-set corpus",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T06:28:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "60044a4c64c62a3210d30bfa1b7a62c46fb5af58",
          "body": "The consumer gate no longer checks out the YAGEL repo (neither a pinned\nrevision nor a gold ref). It runs a committed gold set instead: rule-shaped\nfixtures with independent goldens under both execution modes\n(internal/goldset), plus paired benchmark cells interleaved per sample so\nbenchstat pairs i\n[…]\nc-\nlogs exposure entirely.\n\nBREAKING CHANGE: ADR 0008's gate mechanics replace the live-consumer\ncheckout with the committed gold set; YAGEL_REF and the yagel checkout\nsteps are gone from release.yml.",
          "is_bot": false,
          "headline": "feat(release)!: gate runs a committed gold set, no consumer checkout",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T05:24:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2d8c8b3ef1794aaea3ce68e5f96e9ca4bb9867bb",
          "body": "The consumer gate now checks out YAGEL's gold ref -- a blessed-release\npointer YAGEL advances -- instead of a revision pin recorded in this repo\nwith a re-pin-at-release-cut ritual. YAGEL owns when the pointer moves, so\nthe gate always runs against the currently blessed release. The ref does\nnot exi\n[…]\nt and must be created there before the\njob can run.\n\nBREAKING CHANGE: ADR 0008's pin-and-re-pin gate mechanics are replaced by\nthe consumer-owned gold ref; YAGEL_PIN_REVISION is gone from release.yml.",
          "is_bot": false,
          "headline": "feat(release)!: track YAGEL's gold ref instead of a pinned revision",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-18T04:59:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1a7ed0e70033b8bffcda70013c3438e3cff83d1e",
          "body": "Wires the release-triggered job from openspec/changes/release-consumer-gate\n(ADR 0008) as workflow_dispatch-only scaffolding: candidate/YAGEL checkout\nand go.mod replace, correctness leg, paired benchmark run, and a benchstat\nverdict engine (internal/perfgate) that applies ADR 0008's tier thresholds\n[…]\nn, GOMAXPROCS/benchtime, bench-cell names, per-cell tier assignments,\nand cross-release baseline-storage backend stay explicit TBD placeholders\n(tasks.md 1.1, 3.3, 5.1 left open). ci.yml is untouched.",
          "is_bot": false,
          "headline": "feat(release): scaffold consumer performance-gate CI job",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T19:07:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "feb15821d3bc25b9a545ff05af00d971b1b21e0a",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive engine-deadline-ownership",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T16:32:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9c6d843c362f2ac87925ded4121b17286f750cc",
          "body": "Eval, Call, and EvalWithBindings no longer wrap the caller's context in\na second timer when it already carries a deadline at or before the\nEngine's configured timeout. A later caller deadline still gets the\nEngine's tighter bound. Implements ADR 0010.",
          "is_bot": false,
          "headline": "fix(runtime): skip redundant Engine timer when caller deadline governs",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T16:32:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c2ba8f3b69d72d8fb6ef9012578984f850af71b",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive stdlib-merge-bulk-builder",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T16:15:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "508ae9291dfcbc51f304d0be2becc646b3160ae9",
          "body": "merge accumulated its fresh result through per-key HashMap.Assoc,\ncopying the whole accumulator map on every insert (O(n^2) in bytes\nand allocations). Switch to the existing HashMap.Set escape hatch\nused the same way by core/reader.go and json/decode, so merge scales\nlinearly with entry count while keeping identical observable\nsemantics (immutable inputs, right-most-wins, deterministic\niteration, existing errors).",
          "is_bot": false,
          "headline": "fix(stdlib): build merge result via mutable bulk-builder",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T16:13:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20847cceb0af3f0f5996504fc230d5bddf9a3e67",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive vm-runtime-state-parity",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T15:35:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62a116d54af1bb7925fbca11d16201d7f6bc6065",
          "body": "VM application now supports Keyword values as callables with semantics\nidentical to the tree-walking evaluator: (:key m) map lookup, missing-key\nnil, non-map passthrough, and a matching typed arity error, on both the\nEval and Apply/Call paths.\n\nStructural-depth accounting is restored on caught-throw\n[…]\nrror mid structural-literal\nconstruction could poison later depth accounting.\n\nExtends macro-epoch invalidation, sequential-call isolation, and\nconcurrent-closure race coverage to the Apply/Call path.",
          "is_bot": false,
          "headline": "fix(vm): restore keyword application and structural-depth parity",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T15:35:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "80d92e0c373d9fdea83d08b3a689b229a4ab6cb8",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive vm-compile-shape-and-scope",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T13:51:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed258defad8e4f822b8df946804747d84889a5b4",
          "body": "let, let*, not, and recur still returned untyped fmt.Errorf on\nwrong-shape/wrong-arity input, along with the compile dispatch's\nunknown/undefined-form paths. Route them through compileErrf so\nevery canonical special form returns a typed *core.LispicoError.",
          "is_bot": false,
          "headline": "fix(compiler): type remaining malformed-form errors",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T13:50:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd53a448a7a3f60827d269031f5c23ad92d608fe",
          "body": null,
          "is_bot": false,
          "headline": "fix(compiler): validate special-form arity and shape before indexing",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T11:06:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7e106bd96481beaac42e81dc59a42028b96bd9a",
          "body": "compileTry added the catch binding via addLocal BEFORE compiling the\nnormal body, which permanently shifted subsequent locals and produced\nout-of-range OpSetLocal operands when the body declared its own locals.\nSave base := len(c.locals) at try entry, compile the body against the\nunchanged layout, t\n[…]\nhandler entry and\nrestore c.locals to base after the handler body. chunk.Locals stays\nincremented so the dead slot exists at runtime, but compiler-side slot\nindexing no longer carries the dead offset.",
          "is_bot": false,
          "headline": "fix(compiler): defer try/catch err local to handler entry",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T10:40:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4abed25cf5e7816123eb5d423f1314d0cfd0f790",
          "body": "set! on a non-local emitted OpSetGlobal, which writes to frame.env. When\nthe current frame's env is a transient callEnv (closure with captured\nlocals), the mutation never reached the owning scope and was silently\nswallowed. Add OpSetLexical: Find the owning scope via env.Find, Set on\nthe owner, or r\n[…]\nfinedError when no owner exists. compileSet\nroutes ancestor/global set! through OpSetLexical; walkCaptureTree now\ntreats OpSetLexical as a capture reference so slot-only ancestors are\nmirrored to env.",
          "is_bot": false,
          "headline": "feat(vm): OpSetLexical for set! lexical-owner semantics",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T10:30:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a4cd4704582e4441cf5bd60d672cb3c227ef7951",
          "body": "compileWhen and compileUnless left the skipped branch empty, producing\nstack imbalance (underflow or wrong slot reads) in value positions.\nReshape both to mirror compileIf: when emits a trailing OpJump over an\nOpNil; unless emits OpNil then OpJump over the body. Both paths now push\nexactly one stack result.",
          "is_bot": false,
          "headline": "fix(vm): when/unless push nil on skipped branch",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T10:19:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5c35b1d297bb3c819e3f999e6b1a7430263d2dd",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive dialect-cond-form-shape",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T09:39:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0319e52b5527e55a0fc589b3b600f2bd036af300",
          "body": "One Dialect-owned cond clause normalizer serves both the tree-walker and the bytecode compiler. Clojure accepts flat test/expr pairs (condShape axis); Common Lisp retains nested clauses with implicit-progn bodies wrapped in the dialect-visible do form. Quoted data is never rewritten; malformed shapes are typed errors. IsIdentity stays true (form-shape rules excluded from the identity check). Implements ADR 0009.",
          "is_bot": false,
          "headline": "feat(dialect): cond clause shape is dialect-owned",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-17T09:33:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7766b7dee532a72503c5e729dea3c3b0c499cf19",
          "body": "Introduce OpenSpec changes and design documents mapping out the upcoming\nmilestones:\n- Dialect cond form shape (ADR 0009)\n- Engine deadline ownership (ADR 0010)\n- Release consumer gate (ADR 0008)\n- Stdlib merge bulk-builder optimizations\n- VM compile-time shape and scope validation\n- VM runtime state parity and hygiene",
          "is_bot": false,
          "headline": "docs: add OpenSpec files for planned VM and engine changes",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-16T19:24:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11e5355ba87623601842a5fd4a57c15f0c9f59c9",
          "body": "Add ADR 0008, 0009, 0010, and the PRD defining the YAGEL VM consumer\nreadiness requirements. This establishes the performance gate thresholds,\ndialect-owned cond shape normalization, and evaluation deadline rules.",
          "is_bot": false,
          "headline": "docs(yagel): add performance gate and dialect ADRs and PRD",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-16T19:00:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e547c6e8652a56b820f9f68234132babe65af6de",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.6.0",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-11T08:35:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb6024ec050889ba12fe5ae0ea2efd11bdaa6c78",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive vm-apply-pooling",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-11T08:02:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1adeca68c765874900984f1eec75ea7a9423140b",
          "body": null,
          "is_bot": false,
          "headline": "perf(runtime): pool bytecode apply vms",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-11T07:47:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49f3d1e832767d807f1a97e5e6b17f823a69baf6",
          "body": "CL docs: accurately state default CL evaluates on bytecode VM through\nrename-normalization per ADR 0006, retain true IsIdentity() fact, remove\nobsolete IsIdentity gate/tree-walker claims.\n\nClaude.md: classify fsm as idle, no consumer matching README/ADR 0004.",
          "is_bot": false,
          "headline": "docs: correct CL package docs and add fsm status to CLAUDE.md",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T23:51:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2694e9156b5bff217b0cc56876318037a76724c6",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive hashmap-bulk-builder",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T23:27:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5dbabe63f04408ec8fd16b5fb702a69830b5528f",
          "body": null,
          "is_bot": false,
          "headline": "perf(data): build decoded hash maps linearly",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T23:26:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d65e07211569d0be0e03962a6aea8a55088d0c58",
          "body": "The pre-cancelled-context test exits at the evaluator entry and never\nreaches range's cooperative loop check. Add a deterministic test that\ninvokes the registered range GoFunc directly with a context whose Err()\nflips to context.Canceled after a fixed number of probes, proving the\nbuild-loop check aborts mid-build before the list is produced.",
          "is_bot": false,
          "headline": "test(stdlib): verify range mid-build cancellation",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T22:40:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c2817819e772dd4012d37f6cb8066dae1d02980",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive engine-resource-limits",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T22:29:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a181e5cc44af0728925c5fcaf6e77a0a767e1b5",
          "body": "Add runtime.ResourceLimits (MaxReaderDepth, MaxStructuralDepth,\nMaxCollectionLen, MaxCacheEntries), set once at New and immutable. A\nzero/negative field resolves to a conservative default; there is no\nunlimited. Breaching a ceiling returns *core.LispicoError with\nCode ResourceLimitError instead of c\n[…]\nchecks ctx cooperatively.\n- The bytecode chunk cache drops stale-macro-epoch entries on miss and\n  evicts to MaxCacheEntries, bounding a long-lived Engine's heap.\n\ncore/ remains zero external imports.",
          "is_bot": false,
          "headline": "feat(runtime): add ResourceLimits ceilings for reader, eval, and cache",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T22:23:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4cc3465524ed372e26bfeb41bdc06c116471f4fc",
          "body": "Adds resource-limits ADR and design docs for per-Engine ceilings\n(reader depth, structural depth, collection length, cache size).\nAlso adds openspec proposals for HashMap bulk building (O(n) JSON\ndecode) and VM Apply pooling (reuse pooled VM on Engine.Call path).\nUpdates CONTEXT.md glossary and ADR 0005 with trust-domain and\nisolation-unit notes.",
          "is_bot": false,
          "headline": "docs: add ADR 0007 and three openspec change proposals",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T20:12:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "732ed21d4310160f58521ccf393c7f23e20a359f",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive repl-binary",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T17:29:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db2334eb7834eb4f5324e1967cad80e6cadef129",
          "body": "cmd/lispico provides a terminal REPL built on golang.org/x/term with\nraw-mode editing, multiline continuation via the shared balance rule,\npersistent history, dialect/bytecode flags, and file execution.\n\nExports runtime.IsBalanced and runtime.IsExitCommand for binary reuse.\nAdds Makefile with build/test/test-unit/lint/fmt targets.",
          "is_bot": false,
          "headline": "feat(cmd): add interactive REPL binary",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T17:29:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea691844aec8a4ba24d0bfd51f2a40865673892a",
          "body": "Archive completed vm-first-staged change and update main specs:\n- bytecode-vm: native opcodes, slot-resident locals, chunk cache\n- dialect: normalization, truthiness, Lisp-2 support\n- runtime-api: all-dialect bytecode eligibility",
          "is_bot": false,
          "headline": "chore(openspec): archive vm-first-staged change",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T15:31:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25232e0bf02660ddfb9178e183f38ea0e4aec711",
          "body": "Implement native opcodes, slot-resident locals, dialect axes, and chunk cache\nfor the vm-first-staged OpenSpec change.\n\n- Stage 1: native arithmetic/comparison opcodes with canonical identity tracking\n- Stage 2: slot-resident locals via capture analysis\n- Stage 3: dialect normalization, truthiness h\n[…]\nn cells\n- Stage 4: per-engine chunk cache with VM reuse and macro-epoch invalidation\n\nVerification: go build ./..., go test ./... -race, golangci-lint run,\nopenspec validate vm-first-staged all clean.",
          "is_bot": false,
          "headline": "feat(vm): bytecode VM first staged implementation",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T15:29:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3cf72ccc9c20d6bd2e0b8cbd357e06e8d8a9518f",
          "body": "Update [Unreleased] with breaking API removals, typed errors, plugin unload, REPL balancing, and bootstrap macro fixes.",
          "is_bot": false,
          "headline": "docs(changelog): record review-bugfix-batch changes",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T10:14:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aed70f4bbb023ea595fc36ce563e2b88b44bcaf9",
          "body": "Move completed change to archive and update main specs.",
          "is_bot": false,
          "headline": "chore(openspec): archive review-bugfix-batch",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T10:10:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74c60b7b95a3bd05a5e578b1a3d871d3f3a12587",
          "body": "- bootstrap: use full-kernel evaluator + mirror new bindings to func cell\n\n- reader: consume all digits/dots in numbers; thread token pos into parseNumber\n\n- eval: throwError wrapper returns *LispicoError via Unwrap while keeping raw message\n\n- strings: format returns empty string for empty format",
          "is_bot": false,
          "headline": "fix(review): post-shard corrections for bootstrap, reader, throw, format",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T10:04:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16a0ae43e88cba82c7744ab41aa1923bfb6935fd",
          "body": "…cl/cl.go doc\n\nFiles changed: README.md, ARCHITECTURE.md, CLAUDE.md, cl/cl.go.\n\nCaveat sentence used:\n  README: 'The names above are the kernel special-form names. Under the\n    default CL dialect they are renamed: doprogn, set!setq, etc.'\n  ARCHITECTURE: same as README, on the table's first paragra\n[…]\necture directory tree;\n  caveat after the special-forms line.\n- cl/cl.go: replaced stale 'defun must construct a Vector' paragraph\n  with the correct paramsAsVector note (both Vector and List params).",
          "is_bot": false,
          "headline": "docs(review): add Dialects section, caveat special-forms tables, fix …",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T10:04:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "883b2ac1c3c001fd2c03cd5e84de81f7bf57bcef",
          "body": "Delete the unused MacroExpander interface and CompileExpanded method\nfrom core/compiler. They were scaffolded for ch009 but never wired to\na caller. Add table-driven TestStrings_Format covering 6 scenarios.",
          "is_bot": false,
          "headline": "refactor(compiler): remove dead MacroExpander/CompileExpanded API",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T10:04:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8816920d625fe9b117e700ffad27faeaec2d1af4",
          "body": "…struction\n\n- parseNumber: accept line,col; errors carry token position\n- Parser.Parse: unexpected EOF reports EOF token position\n- evalThrow: returns *LispicoError{Code:\"ThrowError\", ...}\n- VM.call max depth: returns *LispicoError{Code:\"EvalError\", ...}\n- parseHashMap: use HashMap.Set (O(1)) instea\n[…]\nporting, typed evalThrow error,\ntyped VM max-depth error.\n\nMap guards: core/TestIntegration_HashMap_Operations,\ncore/TestEval_KeywordOnMap,\nplugins/stdlib/TestCollections_Constructors hash-map subtest",
          "is_bot": false,
          "headline": "fix(reader,eval,vm): typed errors for reader/eval/VM and O(n) map con…",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T10:04:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3238119739bde15ef073b312dfc027fee542ea56",
          "body": "bootstrap.go: env.Evaluator() with fallback to core.NewEvaluator()\nso defmacro/defn bind into the correct function cell under Lisp-2.\n\n6 new regression tests in runtime package: ThreadFirst, ThreadLast,\nAsArrow, IfLet, WhenLet, GetIn — all through runtime.New(nil) + stdlib\nplugin.",
          "is_bot": false,
          "headline": "fix(bootstrap): use dialect-aware evaluator for bootstrap macros",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T10:04:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86a3dbc237da91f112e34c002bf927d0f586b6b0",
          "body": "Design adjustment: Delete now clears both vars and funcs (Lisp-2 func\ncell); add FuncNames for function-cell snapshot; UnloadPlugin/ReloadPlugin\ntrack introduced names via snapshot union of VarNames and FuncNames.\nPreviously Delete/VarNames only touched the value cell, leaving stale\nfunction-cell en\n[…]\ndPlugin and ReloadPlugin clear old\nbindings before Init of the replacement plugin.\n\nTests: TestUnloadPlugin_RemovesRegisteredFuncs, TestReloadPlugin_NoStaleBindings,\nTestUnloadPlugin_BothCellsCleared.",
          "is_bot": false,
          "headline": "fix(env,plugin): expand Delete to both cells, track plugin bindings",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T10:04:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "48446923fe1345f6dd30850f8f5607d3696c089b",
          "body": null,
          "is_bot": false,
          "headline": "fix(stdlib): use dialect-aware evaluator for bootstrap",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T08:11:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2985092ac28cbb93ebad1cebfd6270528f1ecc42",
          "body": null,
          "is_bot": false,
          "headline": "docs(dialect): add dialect overviews and clarify special-form naming",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T07:56:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e5d79039a3344f29e75a941620a4b0c9c7734da",
          "body": null,
          "is_bot": false,
          "headline": "feat(repl): skip comments in input balancing",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T07:56:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5f1001c785e2f28ca5e5cb67652bbc06074fd25",
          "body": null,
          "is_bot": false,
          "headline": "fix(plugin): delete function cells on plugin unload",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T07:55:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62b6897254ba93215ccf5093f62f8d81b0ff62e2",
          "body": null,
          "is_bot": false,
          "headline": "refactor(compiler): drop unused MacroExpander and CompileExpanded",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T07:53:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d717bccba0a4d1abc327023338d4d48b06b29d2",
          "body": "ADR-0006 commits the bytecode VM as the performance path for\nevery dialect, superseding ADR-0002's opt-in optimizer stance.\n\nThree openspec changes added: vm-first-staged (native opcodes,\nslot locals, chunk cache, dialect axes), review-bugfix-batch\n(nine verified defects), and repl-binary (interactive terminal\nREPL).",
          "is_bot": false,
          "headline": "docs: supersede ADR-0002, add ADR-0006 and openspec specs",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T07:12:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20389f0c55b9145dc946c737f6d1b980f55378b8",
          "body": "Promote Unreleased to 0.5.0 — flip default dialect to Common Lisp, add core.Dialect API and runtime.WithDialect option. Refresh compare links.",
          "is_bot": false,
          "headline": "chore(release): v0.5.0",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-10T05:46:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e91a2f2dc978810f7f2083511036064844f1694",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive dialect-common-lisp-default",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T23:05:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3a303981638cce882147bff82381a705dfe4eca",
          "body": "- bench_test.go, bytecode_test.go, dialect_char_test.go,\n  integration_test.go: bindBuiltin now takes *testing.T as the first\n  arg (added in 0b9f401); pass t at every call site.\n- dialect_default_test.go: remove t.Skip + TODO comments on\n  TestRuntime_DefaultIsCL and TestRuntime_DefaultCL_RejectsBytecode;\n  the engine default is now CL so the tests are expected to pass.",
          "is_bot": false,
          "headline": "test(runtime): update bindBuiltin call sites + remove t.Skip after flip",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T22:56:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9abf20753302f70d002aaa714b0830be9e3f2cb3",
          "body": "the CL dialect renames do -> progn; tests using (do ...) in their source are exercising Clojure-style behavior. Pin them to WithDialect(clojure.Dialect()) to keep testing the same surface.",
          "is_bot": false,
          "headline": "test(runtime): pin do-form tests to Clojure dialect",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T22:51:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f98ccd90e9e7f733c08e2261e1098aab7ea8617",
          "body": "under the new CL default, head-position lookup uses the function cell; the test helper bindPlus previously called e.RootEnv().Set directly, bypassing the eng.Bind function-cell mirror. Route the helper through e.Bind so every site that uses it becomes dialect-aware.",
          "is_bot": false,
          "headline": "test(runtime): route bindPlus through eng.Bind for Lisp-2 compatibility",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T22:50:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9bc3e51640df40e0b4a909bc0dc51f55e165970b",
          "body": "…sp-2\n\nEvalWithBindings sets local bindings via childEnv.Set only, so\nhead-position callables are unreachable under the new CL default.\nMirror into the function cell when the dialect is Lisp-2, matching\nthe same pattern already in eng.Bind.",
          "is_bot": false,
          "headline": "fix(runtime): mirror EvalWithBindings into the function cell under Li…",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T22:47:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5163b86c98879cc430674ac216cb0e3cd444f08f",
          "body": "…ility\n\nUnder the new CL default, head-position lookup uses the function cell;\nthe test helper bindBuiltin previously called e.RootEnv().Set directly,\nbypassing the eng.Bind function-cell mirror. Route the helper through\ne.Bind so every site that uses it (bench_test, bytecode_test,\ndialect_char_test, eval_test, integration_test, engine_test) becomes\ndialect-aware.",
          "is_bot": false,
          "headline": "test(runtime): route bindBuiltin through eng.Bind for Lisp-2 compatib…",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T22:36:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c7843f79072152651663ffdf848cc56fa085c23",
          "body": "Under Lisp-2 head-position lookup uses env.GetFunc; eng.Bind previously\nonly wrote to the value cell, so bound names were uncallable in head\nposition under the new CL default. The mirror makes the embedding API\nwork regardless of the active dialect.",
          "is_bot": false,
          "headline": "fix(runtime): mirror eng.Bind into the function cell under Lisp-2",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T22:30:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50b5b50018de875dfd75a74ee364fb9a3a1ba863",
          "body": "runtime now imports cl, so cl internal tests can no longer import\nruntime. Convert to external test package cl_test with qualified\ncl.Dialect() calls.",
          "is_bot": false,
          "headline": "fix(cl): break import cycle from engine default flip",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T22:18:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "289e1a29d52325c8690fe0aef30311eb23239716",
          "body": "The New constructor now defaults to cl.Dialect() (Lisp-2, nil-only\ntruthiness, CL reader flags, non-identity) instead of core.FullDialect().\n\nThis makes New(nil, WithBytecode()) error at construction since the VM\nonly accepts identity dialects — migrate explicit bytecode usage with\nWithDialect(clojure.Dialect()).\n\nSee openspec/changes/dialect-common-lisp-default/design.md for the\nVM/identity coupling rationale.",
          "is_bot": false,
          "headline": "feat(runtime): flip default dialect to Common Lisp",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T22:18:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e668928a9b3d735e4cc246c49992de9a7d42914f",
          "body": "…acterizations + docs\n\nPinned the following test files to WithDialect(clojure.Dialect()) because the\ndefault flips from identity to Common Lisp in shard-C:\n  bytecode_test.go (13 sites), fallback_test.go (1 site),\n  dialect_feature_test.go (2 sites), dialect_char_test.go (1 site),\n  dialect_namespac\n[…]\net flipped)\n  1.4 TestRuntime_BytecodeWithClojureWorks (passing now)\n\nUpdated docs:\n  CHANGELOG.md — [Unreleased] Added + Breaking entries\n  ARCHITECTURE.md — mention WithDialect option and CL default",
          "is_bot": false,
          "headline": "test(dialects): pin existing tests to Clojure + add default-flip char…",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T22:17:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8840bfdef6b899a7179ad28624c399c914279ada",
          "body": "…cell under Lisp-2\n\nEnumerate the four fixes:\n1. paramsAsVector helper in core/eval.go — defn/fn/defmacro accept List\n   params (CL-style (x y)) in addition to Vector params (Clojure-style [x y]).\n2. Exported IsLisp2() on core.Dialect — lets the runtime query whether the\n   active dialect uses a sep\n[…]\nle at openspec/changes/dialect-common-lisp-default/design.md: the\nVM/identity coupling means CL runs on the tree-walker, which needs the\nfunction-cell bridge for head-position resolution under Lisp-2.",
          "is_bot": false,
          "headline": "fix(core,runtime): accept List params and bridge GoFuncs to function …",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T22:02:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d4738623d188c0518565ed204507696ab7de56a6",
          "body": "Add two package-level dialect constructors that build on core.Dialect.\n\nclojure.Dialect() returns a bare core.FullDialect() - the identity\ndialect with no vocabulary map, no axis changes, and no reader flag\ndifferences.  IsIdentity()==true is required for bytecode VM\ncompatibility.\n\ncl.Dialect() com\n[…]\n#' and #(...)\non, [..]/{..} off), a defun form aliasing the kernel defn, CL renames\n(setq->set!, progn->do), and a vocabulary map mapping CL names to\nshared core GoFuncs (car->first, cdr->rest, etc.).",
          "is_bot": false,
          "headline": "feat(dialects): add clojure and cl dialect packages",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T21:45:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e58ad654265326465e950e9b1b02b4dc8484678f",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive dialect-vocabulary-map",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T20:50:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edb402ec0ec83c51cb420220fdb8e6d5dff07d8a",
          "body": "A Dialect now carries a vocabulary: a map from a dialect-visible name to\neither a canonical shared builtin name (a rename) or a GoFunc that wraps the\nshared implementation (an adapter). Plugins register one shared GoFunc per\noperation; dialects expose it under any number of names without duplication\n[…]\nruntime.applyVocabulary, invoked from engineImpl.Use and\nReloadPlugin after each plugin's Init. WithAdapter never mutates the\nreceiver (copyVocab ensures the underlying map is fresh per builder call).",
          "is_bot": false,
          "headline": "feat(core): add Dialect vocabulary name map",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T20:48:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6cd314cd53c5477dbfb344c7f14c78c6a9459a92",
          "body": "Add DetachEvalState(ctx) context.Context that returns ctx with a fresh\nevalState attached, preserving cancellation and other values. Embedders\nthat start a new evaluation goroutine (e.g. a routine scheduler) call it\nso the goroutine owns its own depth counters and cannot race or trip\nMaxDepth against the caller.\n\nTested with a fresh-state/value-passthrough unit test and a -race test\nthat runs two goroutines Apply off a shared/detached ctx pair.",
          "is_bot": false,
          "headline": "feat(core): export DetachEvalState",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-09T20:04:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "686fe089f606a7d3b6b3e146b2662bfa4d82e06e",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive dialect-reader-flags",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-08T19:39:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0555d0e93124a0fcbe8944261799e4bc46400755",
          "body": "Dialect carries reader axes for [..]/{..} literals, #' function-reference\nsyntax, and #(...) vector syntax. The reader honors the running Dialect's\nflags via Dialect.Read, threaded through the Engine. The identity Dialect\nkeeps brackets on and #'/#(...) off, so default parsing is unchanged.",
          "is_bot": false,
          "headline": "feat(core): add per-Dialect reader feature flags",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-08T19:39:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4034f824394b610531f2be43fe4eee59aeeb6388",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive dialect-namespace-axis",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-08T16:43:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5204a608dc169d10abe47e074caf464c8e566cfd",
          "body": "Add a namespace axis to Dialect selecting Lisp-1 (single binding) or\nLisp-2 (separate function cell). Under Lisp-2, Env gains a function cell,\nhead-symbol resolution consults it, defn/defmacro bind there, and the\nfuncall and function (#') forms are injected. The identity Dialect stays\nLisp-1, so the default engine and the bytecode VM are unchanged.",
          "is_bot": false,
          "headline": "feat(core): add per-Dialect Lisp-2 namespace axis",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-08T16:43:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9a9e62be4bab13893b7452b50f57873eb187903",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive dialect-truthiness-axis",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-08T16:19:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82585b13ec8169704e5cec05e184c2212f52dbb5",
          "body": "Conditional forms (if, cond, when, unless, and, or, not) now consult a\nsingle per-Engine truthiness hook derived from the Dialect instead of the\nhardcoded IsTruthy. A Dialect can select nil-only falsy (Common Lisp) via\nNilOnlyFalsy(); the identity Dialect keeps nil+false falsy, so default\nbehavior is unchanged. IsIdentity() excludes a nil-only Dialect, keeping\nthe bytecode VM on the identity path it supports.",
          "is_bot": false,
          "headline": "feat(core): add per-Dialect truthiness axis",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-08T16:19:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a65ec24f6b894b1513b10ad6c6be6381e596c3b3",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive dialect-per-engine-dispatch",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-08T16:02:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8df497add9fdf28885daf5a7270255c30cffc83c",
          "body": "Move special-form dispatch off the package-global map onto per-Engine\nstate so different Engines can speak different dialects in one process.\n\n- The kernel owns one canonical special-form table under neutral names.\n- A Dialect value describes a delta (rename/add/remove) over a base that\n  is either \n[…]\nlect reproduces prior behavior; New() without the option\n  is unchanged. The bytecode evaluator dispatches canonical names directly,\n  so New rejects a non-identity Dialect combined with WithBytecode.",
          "is_bot": false,
          "headline": "feat(core): per-Engine dialect dispatch",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-08T16:01:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "02f913eabe4448f3f9910f2901513aaea0f78318",
          "body": null,
          "is_bot": false,
          "headline": "docs: add dialect layer ADR, PRD, and specification documents",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-08T15:36:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f90510cfd7cbdcb36cce54d656a392ca72f8cf92",
          "body": "Convert evalState.callDepth, loopDepth, macroDepth to atomic.Int64 so\nconcurrent Eval on the same context.Context stays race-free. The\nctx-scoped evalState introduced in v0.3.0 already isolates top-level\ncalls; atomics close the remaining race when callers share a ctx.\n\nChangelog: 0.4.1, Fixed; backfill missing 0.4.0 entry.",
          "is_bot": false,
          "headline": "fix(core): harden evalState depth counters with atomics",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-08T13:50:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a551af524bb67f4f1e6ae2ab1d89179ab74d1d23",
          "body": null,
          "is_bot": false,
          "headline": "feat(core): accept optional exception-class slot in catch clauses",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-06T16:29:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d0d45bf4b7e856a970bf11a062bab361ef420a0",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.3.0",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-04T11:17:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f793cccc1813aa2d25f13ba20d4095e6ec94442",
          "body": "The embedding host registers its own IO surface, so stdlib and data are\nthe actively developed plugins; llm, agent, lio, net, and exec take\nsecurity and correctness fixes only. Recorded as ADR 0004 with the\nstdlib-completeness PRD; README, ARCHITECTURE, and CLAUDE reflect the\nplugin status.",
          "is_bot": false,
          "headline": "docs: adopt kernel-first mission and freeze world-touching plugins",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-04T11:17:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b72141404f1a2e95662179d37cbbf2fe13fa9cf1",
          "body": "= is structural equality via Equals, so (= 1 1.0) is false. Ordering\n(<, >, <=, >=) is numeric-only, variadic monotonic, comparing int pairs\nexactly and mixing int and float by the promotion arithmetic uses.\ncontains?, merge, dissoc, sort, and range cover the collection basics\nembedded rule and policy code reaches for; sort is stable over numbers,\nstrings, or keywords. Semantics recorded in the CONTEXT.md glossary.",
          "is_bot": false,
          "headline": "feat(stdlib): add comparison, equality, and collection builtins",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-04T11:17:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ae43849f130102368677918194997e49d6dfec5",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.2.0",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-04T05:34:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "681f994658b56305e4f3867a029bd2b341eb6f66",
          "body": null,
          "is_bot": false,
          "headline": "chore(openspec): archive ch010-correctness-safety-hardening",
          "author_name": "Victor Zhuk",
          "author_login": "victorzhuk",
          "committed_at": "2026-07-04T00:54:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 6,
      "commits_last_year": 130,
      "latest_release_at": "2026-07-19T18:51:19Z",
      "latest_release_tag": "v0.8.0",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 5,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 3.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 28,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/victorzhuk/go-lispico",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/victorzhuk/go-lispico",
          "is_deprecated": false,
          "latest_version": "v0.8.0",
          "repository_url": "https://github.com/victorzhuk/go-lispico",
          "versions_count": 10,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-19T17:35:22Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 45891,
      "source_files_sampled": 135,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 4870
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "golang.org/x/sync",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.19.0"
        },
        {
          "name": "golang.org/x/term",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.40.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 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": "victorzhuk",
          "commits": 130,
          "avatar_url": "https://avatars.githubusercontent.com/u/3948471?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 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": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 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": "3eb9133ff8279c657fa48c8625b78738774eaa3f",
        "ran_at": "2026-07-23T22:05:44Z",
        "aggregate_score": 3.8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-19T17:36:36Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/victorzhuk/go-lispico",
    "host": "github.com",
    "name": "go-lispico",
    "owner": "victorzhuk"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 52,
      "inputs": {
        "security": 38,
        "vitality": 81,
        "community": 24,
        "governance": 37,
        "engineering": 74
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 81,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "commits_last_year": 130,
              "human_commit_share": 1,
              "days_since_last_push": 4,
              "active_weeks_last_year": 5
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "5/52 weeks with commits",
                "points": 3.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "130 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 130
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 6,
              "latest_release_tag": "v0.8.0",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 3.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "6 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 37,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 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": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 55,
            "inputs": {
              "followers": 27,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "victorzhuk",
              "public_repos": 41,
              "account_age_days": 4870
            },
            "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": "27 followers of victorzhuk",
                "points": 10.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 27,
                      "login": "victorzhuk"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "41 public repos, account ~13 yr old",
                "points": 23.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 41
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 13
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/victorzhuk/go-lispico"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "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 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "10 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "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": 74,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "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": 80,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 38,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 38,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 3.8
            },
            "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": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "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": 82,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 4870
            },
            "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": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 45891,
              "source_files_sampled": 135,
              "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/135 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 135,
                      "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-23T22:05:48.729026Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/v/victorzhuk/go-lispico.svg",
  "full_name": "victorzhuk/go-lispico",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

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