JSON-Rohbericht maschinenlesbar
{
"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"
}