JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 1689,
"has_wiki": false,
"homepage": null,
"languages": {
"HTML": 8526,
"JavaScript": 6023,
"TypeScript": 612129
},
"pushed_at": "2026-07-17T04:09:28Z",
"created_at": "2026-07-05T03:12:05Z",
"owner_type": "Organization",
"updated_at": "2026-07-17T04:09:32Z",
"description": "Reactive canvas framework",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript"
]
},
"owner": {
"blog": "https://axii.dev",
"name": null,
"type": "Organization",
"login": "axiijs",
"company": null,
"location": null,
"followers": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/164179461?v=4",
"created_at": "2024-03-20T12:10:10Z",
"is_verified": null,
"public_repos": 19,
"account_age_days": 853
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.5.8",
"kind": "patch",
"published_at": "2026-07-17T04:09:27Z"
},
{
"tag": "v0.5.7",
"kind": "patch",
"published_at": "2026-07-16T14:35:52Z"
},
{
"tag": "v0.5.6",
"kind": "patch",
"published_at": "2026-07-16T08:59:45Z"
},
{
"tag": "v0.5.5",
"kind": "patch",
"published_at": "2026-07-16T03:21:20Z"
},
{
"tag": "v0.5.4",
"kind": "patch",
"published_at": "2026-07-15T13:47:10Z"
},
{
"tag": "v0.5.3",
"kind": "patch",
"published_at": "2026-07-15T08:11:03Z"
},
{
"tag": "v0.5.2",
"kind": "patch",
"published_at": "2026-07-15T03:36:19Z"
},
{
"tag": "v0.5.1",
"kind": "patch",
"published_at": "2026-07-14T14:16:20Z"
},
{
"tag": "v0.5.0",
"kind": "minor",
"published_at": "2026-07-13T12:15:48Z"
},
{
"tag": "v0.4.0",
"kind": "minor",
"published_at": "2026-07-12T07:17:35Z"
},
{
"tag": "v0.3.4",
"kind": "patch",
"published_at": "2026-07-11T16:52:15Z"
},
{
"tag": "v0.3.3",
"kind": "patch",
"published_at": "2026-07-11T07:31:50Z"
},
{
"tag": "v0.3.2",
"kind": "patch",
"published_at": "2026-07-11T04:29:56Z"
},
{
"tag": "v0.3.1",
"kind": "patch",
"published_at": "2026-07-10T17:09:38Z"
},
{
"tag": "v0.3.0",
"kind": "minor",
"published_at": "2026-07-10T14:56:48Z"
},
{
"tag": "v0.2.1",
"kind": "patch",
"published_at": "2026-07-10T09:38:19Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2026-07-10T04:58:32Z"
},
{
"tag": "v0.1.4",
"kind": "patch",
"published_at": "2026-07-10T02:25:52Z"
},
{
"tag": "v0.1.3",
"kind": "patch",
"published_at": "2026-07-09T16:07:13Z"
},
{
"tag": "v0.1.2",
"kind": "patch",
"published_at": "2026-07-09T14:52:13Z"
},
{
"tag": "v0.1.1",
"kind": "patch",
"published_at": "2026-07-09T04:55:41Z"
}
],
"recent_commits": [
{
"oid": "26387f804e3d09a5d69adea2f10301f72db4de52",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "0.5.8",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-17T04:09:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f1aad481f3dc64199f9af5d258112db2549bcef",
"body": "…mp data0 to ~2.16.0 (round-9 review fixes: inline-dispatch sibling error isolation, selection terminal-state reconciliation, skipIndicator full-recompute fallback)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #30 from axiijs/cursor/upgrade-data0-2-16-db2f: bu…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-17T04:09:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "07497fc1cfc4923a3d120be9c93261bd3f0d1761",
"body": "…atch sibling error isolation, selection terminal-state reconciliation, skipIndicator full-recompute fallback)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(deps): bump data0 to ~2.16.0 (round-9 review fixes: inline-disp…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-17T04:05:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31aca3d51edf1212eecae61f792af30882309eee",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "0.5.7",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-16T14:35:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e1f2b80f27c8d411441e7b36dd71fee96a0f67f",
"body": "…mp data0 to ~2.15.0\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #29 from axiijs/cursor/upgrade-data0-2-15-fa9d: bu…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-16T14:35:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "711fadccff337dcc668a3e8d032a2fc249486532",
"body": "…hy-predicate coercion, observation-exit payload shape-aware copies with user-value identity, indexBy/toMap duplicate-key guard symmetry, map row-rerun context.onCleanup, RxSet.forEach track-before-iterate, swap overlap & reorder permutation guards, batch digest cycle diagnostics, async-getter warn dedup)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(deps): bump data0 to ~2.15.0 (round-8 review fixes: filter trut…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-16T14:34:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "91304d9a862b852353aeca29fdedf491a49ccb51",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "0.5.6",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-16T08:59:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ad903a0a2d8c2aa9c148b1857ef89ae2e576e60e",
"body": "…mp data0 to ~2.14.0\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #28 from axiijs/cursor/upgrade-data0-2-14-3edb: bu…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-16T08:59:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f910adceffa311446840f557a7d2db514a43adc5",
"body": "…state-machine recovery, async finish-phase unhandled-rejection guards, reorder Order-pair payload ownership, toList×replace order fallback, destroyComputed×Rx fallback, post-destroy lazy-meta interment)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(deps): bump data0 to ~2.14.0 (round-7 review fixes: hook-error …",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-16T08:58:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fffef6d77b237905c76dae162549e2b27a53fe4c",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "0.5.5",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-16T03:21:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "214e7fa9761a010260565fead250f1b57eebeafc",
"body": "…ed instance-cached lazy structures, batch body-error precedence, atom.fixed/lazy raw, dual dev/prod builds via development condition, async-generator loud-fail)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix: bump data0 to ~2.13.0 (selection atom-mode SameValueZero, detach…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-16T03:21:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "58f8f305e8f946e44b6e11b692b80997e54e7286",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "0.5.4",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-15T13:47:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d375e8557c5f8c9b0343b91b6bf716c0f088408a",
"body": "…umeric upper bound, payload ownership defensive copies, canonical string index normalization, callback purity contract + dev probes)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix: bump data0 to ~2.12.0 (concat self-alias fallback, dense-index n…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-15T13:47:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "97df36c646189c593dfc7f770af685be89037e3d",
"body": "…act-f43b: accept data0 >= 2.12 canonical string index normalization in the set-key contract\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #27 from axiijs/cursor/data0-canonical-index-contr…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-15T13:46:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "295f8dda411b72200ed4e00c348b5156de4be545",
"body": "…e set-key contract\n\ndata0 round-5 ruling D2 normalizes canonical array-index strings\n('1' -> 1) at the set/at entry, since data['1'] = v is a real row write\nper the platform spec. The contract test now accepts both protocol\ngenerations (raw string passthrough from <= 2.11, normalized number from\n>=\n[…]\ncitKeyChange normalization consumes both\ncorrectly, so no runtime change is needed. Tighten to number-only after\nthe dependency floor moves to 2.12.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "test: accept data0 >= 2.12 canonical string index normalization in th…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-15T13:20:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "68cbcb52bcce1aba212b5b56f0698d20660ad76c",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "0.5.3",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-15T08:11:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce97500382b23114f0b8d5e222e9bfcfc4ed4e2b",
"body": "…xBy/toMap insert-side guards, slice spread-limit fix, groupBy single-pass batch patch, toSorted bulk-threshold fallback)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix: bump data0 to ~2.11.0 (non-batch reorder trigger-order fix, inde…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-15T08:11:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "90caa4ceb118c39c9c71456c6e0d89528c900696",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "0.5.2",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-15T03:36:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5c3ebc03bd5ae2a673009228e8c55eef31665fb3",
"body": "…hole crash, concat segment misalignment, RxMap.replace Object.is dedupe, ghost EKC guards, filter full-recompute rebuild, selection indicator ledger reset)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix: bump data0 to ~2.10.1 (shape-migration fixes: indexKeySelection …",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-15T03:36:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe676e75c47edb9b9bcc669c8c87a424e1bbad7e",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "0.5.1",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-14T14:16:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e911c322fbcac51ac6d0ad72908944b21549cd27",
"body": "…ger pruning, reduce multi-info tail-append fix)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix: bump data0 to ~2.10.0 (protocol-key namespace isolation, dep-led…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-14T14:16:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "581a4169aa1f11464ce081595d3f19a67b29d98f",
"body": "…ulti-info incremental)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore: upgrade data0 to ~2.9.1 (groupBy empty-key fix, digestReplay m…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-13T13:34:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ae2b8f95fb518d9b844051d1a0c75ae6edf29c8f",
"body": "…ListHost consumes EKC info.newValue instead of source.data[key]\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #26 from axiijs/cursor/ekc-newvalue-batch-010b: Rx…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-13T13:33:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04039e387462df478bcd7efd0f662a5a0b257350",
"body": "Batch digests can interleave EXPLICIT_KEY_CHANGE with structural ops.\nThe key is operation-time while source.data is final state, so reading\nsource.data[key] desyncs hosts from data. Match data0's own map patch\ncontract: build the new row from info.newValue (OOB hole fill still uses\nfinal source.data for sparse undefined slots).\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(RxListHost): consume EKC info.newValue instead of source.data[key]",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-13T12:44:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "502961a256a6036f39aefb5d5a65d3a49501f3fc",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(release): v0.5.0",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-13T12:15:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "360bde3dfcca17fce28a78709060a00032b9ab31",
"body": "…-recovery rerun semantics already pinned by the immunity contract suite)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore: upgrade data0 to ~2.9.0 (mutation-debt burndown release; error…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-13T12:15:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bd73ef50a65e39899ee9cfb65f2b705451d58577",
"body": "…pin the data0 >= 2.9 error-recovery rerun semantics axle is constitutionally immune to\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #25 from axiijs/cursor/data0-contract-rerun-92f0: …",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-12T15:33:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "753c651a2658458510faa6af86bdbb99e9bbfa19",
"body": "…ks CI quality gate)\n\nThe long single-line data0 import predates this branch — 'npm run\nformat:check' fails identically on main. Mechanical 'prettier --write'\nexpansion only; no behavior change (458 tests + typecheck green).\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "style: fix pre-existing prettier violation in RxListHost import (bloc…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-12T15:27:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b8a075ce880f9883f6fe7e66f93ea17dfb8ddf7",
"body": "…stitutionally immune to\n\ndata0's 2026-H2 review changed the patch-error recovery contract: a\npatch that throws (errors escaping applyPatch) resets the computed to\nthe full-recompute phase, and the next mutation reruns the computation\ninstead of patching incrementally.\n\naxle's RxListHost is immune B\n[…]\nbefore rebuilding,\nas done in axii).\n\nSuite: 458 tests green, typecheck green (npm data0 2.8; assertion is\ngeneration-tolerant for the 2.9 upgrade).\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "test: pin the data0 >= 2.9 error-recovery rerun semantics axle is con…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-12T14:26:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "98a0a4731ff68b5896601a82dccc015d1b4ee10e",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(release): v0.4.0",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-12T07:17:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c736c64839b7610be157cd1fe14a03f5fa00a6ca",
"body": "… that broke error-boundary re-entrant root.destroy)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore: upgrade data0 to ~2.8.0 (fixes the 2.7.0 in-run destroy assert…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-12T07:17:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "78877c5ab9ba94d0782486afb71d2babd498a459",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(release): v0.3.4",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-11T16:52:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f8455101245f10a83995c753fe1871f677881c71",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore: upgrade data0 to ~2.6.0",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-11T16:52:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "54a133707ec028737b2f72acaf9d610edc2dfc42",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(release): v0.3.3",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-11T07:31:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9a0148198cab59d5c439ccf69da1cd73a2029133",
"body": "data0 2.5.0 修复了深度评估发现的 5 个致命问题与一批缺陷,并把\nTrackOpTypes/TriggerOpTypes 从 ambient const enum 改为运行时常量对象:\nRxListHost 里 verbatimModuleSyntax 下的字面量 + as cast workaround 可以\n移除,直接引用成员。npm run check(typecheck/lint/test/build)全绿。\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore: upgrade data0 to ~2.5.0, drop const-enum workaround",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-11T07:31:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b672c9ef91da18d059c161d2b0a0ce6dfeff3a5f",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(release): v0.3.2",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-11T04:29:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ceeae44b950054fde0b8bfc944883b79d9862323",
"body": "…ning-73f3\n\nfix: harden re-entrant destroy, isolate host effects from foreign frames, break self-trigger loops\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #24 from axiijs/cursor/fix-reentrant-destroy-harde…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-11T04:29:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d61d0833794138494404d580aaf1441956ef43e",
"body": "… loop-breaker contracts\n\n- doc/02 §4: root.destroyed stop signal semantics, per-region stop\n checks, destroy re-entrancy/idempotency guarantees (user cleanups run\n exactly once), and the discard collect frame around root.render.\n- doc/02 §3.2: DeferredBindingEffect self-trigger rerun circuit brea\n[…]\n its boundary (derived structures created by user code stay owned\n by their creator).\n- AGENTS.md: index-level summary of the three new hard rules.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "docs: sync doc/02 and AGENTS.md with re-entrancy, frame-isolation and…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-11T04:04:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "41eceb4a183e0f22974fb94989bc711687f69d97",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "style: prettier formatting + type component props in double-destroy test",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-11T04:04:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f0c96c476039392c1b36df3c2c3084f451c5e3b2",
"body": "Unit tests for DeferredBindingEffect: an indirect feedback loop (update\nwrites atom B, a sync binding maps B back into dependency A) breaks\nafter SELF_TRIGGER_RERUN_LIMIT consecutive reruns with a single report,\nrecovers on the next external trigger, and converging bursts below the\nlimit never repor\n[…]\n without the breaker these tests hang the runner (the\nmicrotask loop never yields), which is exactly the failure mode the\nbreaker exists to surface.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "test(binding-effect): cover the self-trigger rerun circuit breaker",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-11T03:56:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a36a22c645e78f83a205e3a1b410249611adcbf0",
"body": "…ames\n\nCovers the discard collect frames added to root.render and\nRxListHost.applyPatch in the previous commit: rows created by writing a\nrendered RxList during a component body (splice + explicit key change +\nnested list hosts) and nested root.render inside a component body no\nlonger lose their bin\n[…]\ndestroyed.\nAlso asserts the counterexample: user computeds created inside row\ncomponents are still collected by the row's own frame and die with it.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "test(frame-capture): cover host-managed objects vs foreign collect fr…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-11T03:49:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1bfa1468d16d4c523d72ba8b2d513cf61fe3140c",
"body": "- root.destroy() is now re-entrancy-safe and idempotent: the destroyed\n flag is set before any teardown, so an error hook calling\n root.destroy() from a cleanup error no longer re-destroys the tree\n (previously unbounded recursion; lists amplified it to OOM).\n- RxListHost/ComponentHost/ElementHos\n[…]\nack).\n Previously these paths threw internal asserts back into root.render /\n business write points or leaked orphan nodes (doc/02 §4 violations).\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(root): harden re-entrant destroy across all region types",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-11T03:45:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "81c73876dbe963fbf2041a406d6ace241d6e5aab",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(release): v0.3.1",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T17:09:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e3f88e6a2585accc6e22b13bf95b00236ad61d57",
"body": "fix: deep-review findings — re-entrant destroy, placeholder fallback, O(n²) list mounts\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #23 from axiijs/cursor/fix-review-findings-7108",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T17:08:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "630ae9f0c5d730fb8a8c8819768fce5c247182fe",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "style: format leafer-bridge test with prettier",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T17:04:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56f0eb0ffe63a2dfce1af4e718b016898cbd8a6e",
"body": "Initial mount / bulk append of a plain RxList paid two linear scans per\nrow, compounding to O(n^2) for n rows:\n\n- createRowHost located its rollback boundary via children.indexOf(anchor)\n while the anchor is the resident list placeholder — the last child;\n- row content insertion anchored on the row\n[…]\nmitive rows): 32k rows\n451ms -> 178ms; 16k rows 127ms -> 59ms; scaling is back to ~linear.\nWindowed mounting benefits on every batch append as well.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "perf(list): near-tail anchor fast paths for bulk list mounts",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T17:03:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d4cf1cec77104ad56eb49714a0f368b20f423dd0",
"body": "Destroying the root synchronously inside the error hook (an app-level\n'tear down on error' boundary) used to blow up: row errors are reported\nfrom inside the render transaction, so the RxListHost row-building loops\nwere still on the stack and kept inserting against the already-destroyed\nanchors — th\n[…]\nstroy.test (initial render, patch path, multi-row\nsplice, and render-after-destroy usability, all asserting no orphans and\nno leaked subscriptions).\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(list): survive a re-entrant root.destroy() from the error hook",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T17:03:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "41831d4722d98324d56fe9bd68c410560a00b097",
"body": "doc/02 §3.1 already states that a placeholder left unconsumed (render not\nreached or failed mid-way) must be cleaned up on the non-parentHandle\ndestroy path, but only ElementHost implemented the fallback. Align\nPrimitiveHost / AtomHost / RawUIHost: null the field once consumed and\ndestroy a still-present placeholder on destroy, so no orphan groups can\nleak into the container.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(host): destroy unconsumed placeholders in Primitive/Atom/RawUI hosts",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T17:02:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "408521c9a5eb1c038dfd5fc0fb1514358a3d1697",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(release): v0.3.0",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T14:56:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d5aa036d4c35dd87c518f9cffe873a76add0b01",
"body": "data0 2.4.0 是 retained memory 收敛批次(共享 frozen 空 deps 哨兵 + addDep\n唯一写入口、atom NFE 自引用去 Context、Computed 可选构造参数去参数属性、\nRxList skipItemEffect 行共享空 frame)。逐条核对 AGENTS §6 的内部行为依赖:\naxle 不直接读写 effect.deps(BindingEffect 只动 _children / collectFrames,\nswap-pop 结构未变),trigger/patch 同步语义与 2.2+ 一致。门禁全绿:\ndata0-contract 契约测试、typecheck/lint/417 tests/build、覆盖率阈值、\n10k 卡片 smoke:stress 均通过。README 的 peer 版本说明同步修正\n(2.1.x 是 2.2 升级时的漏改)。\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore: upgrade data0 to ~2.4.0",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T14:54:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "35acabff55a52fe2bb70c2ea7b89dee94388da78",
"body": "深度 review 修复:组件销毁契约(frame 清理隔离 + 清理时序)与四项加固\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #22 from axiijs/cursor/fix-review-findings-7c4e",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T14:51:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5ea8e4da280dd17d5d23f366bf628e5e8b63f10b",
"body": "…ntext probe\n\n函数 child 的 context 分配以 source.length > 0 探测,带默认值的参数\n((ctx = {}) => ...)length 为 0,会静默拿到自己的默认值而不是真正的\nonCleanup。运行时无法区分「零参」与「全默认值参数」(JS 固有限制),\n在 doc/02 §3.2 与代码 CAUTION 里写明契约:不要给 context 参数写默认值。\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "docs(function-host): call out the default-parameter pitfall of the co…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T14:45:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e536e27dc787b07326656364af583867f55cfdde",
"body": "…nt hot path\n\nElementHost.render 是每元素挂载热路径(AGENTS §1,虚拟化滚动中每帧批量执行),\n此前每次挂载固定分配 reactiveProps / eventBindings 两个数组,而绝大多数元素\n只有静态 props。改为惰性分配(首次 push 时创建),沿用仓库既有手法\n(ComponentHost 的集合惰性分配)。行为不变,由既有元素测试(事件绑定 /\n响应式属性 / text children)覆盖。\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "perf(element): lazily allocate reactiveProps/eventBindings on the mou…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T14:44:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "64e9388e28593f91fd1c2507837ea0c480d3f429",
"body": "…layoutEffect/ref\n\nroot attach 之前渲染的组件此前无条件注册一次性 attach 监听器,即使既无\nlayoutEffect 也无组件 ref(监听器空跑)——与 attach 之后分支的零开销快路径\n不对称。补齐同一判据:初次渲染一棵大树省 O(组件数) 个 once 闭包与监听表\n条目。layoutEffects 在组件函数执行期间注册,判定时已定型,行为不变\n(测试断言监听注册数与 layoutEffect / 组件 ref 的照常执行)。\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "perf(component): skip the pre-attach listener for components without …",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T14:44:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "94e43b3b10fd03146e06a0956919bcce2c7eb639",
"body": "reportError 承诺「本函数永不抛出」(异步/已提交链路的可恢复错误出口,直接\n作为性能模块 onError 使用),但实现无条件读 info.operation——TS 签名强制传\ninfo,JS 调用方按直觉写 root.reportError(err) 会 TypeError 击穿承诺。info\n改为防御性可选读取(缺失时 source 记为 root),类型签名保持必传不变。\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(root): keep reportError non-throwing when a JS caller omits info",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T14:43:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b8ebe2223001620b66021d0bd895883d83fba6ea",
"body": "…w inserts\n\nhosts.splice(start, del, ...newHosts) 的实参展开受引擎 call 实参上限约束\n(V8 实测 12 万与 20 万之间):大数据集 replaceData 这类单 patch 十万级新行\n会 RangeError——虽然 applyPatch 兜底会捕获并 rebuildAllRows 自愈(结果正确),\n但整个列表要白建一遍。新增 spliceArraySafe:常规规模(≤1024 项)走原生\nsplice 快路径,超阈值改手工搬移(两次尾段拷贝,只在大批量路径付费)。\n\n测试覆盖两条路径与 Array#splice 的语义一致性(删除项 / 尾段次序 / 纯插入 /\n追加)、20 万项(原生 spread 必然 RangeError 的规模)以及经 RxListHost 的\n超阈值单 patch 集成(不触发 rebuild 兜底、簿记不失步、销毁无残留)。\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(list): lift the call-spread argument cap off single-patch bulk ro…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T14:43:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "20cf2160ff3ade8ddb50f39daa44943bab95fea0",
"body": "…ute throws\n\n函数 child 更新期源函数抛错时,有钩子路径此前会把区域清空(teardown 旧内容 +\n渲染空文本),而无钩子路径保留旧内容——注册错误监控反而丢失更多内容,且与\n属性绑定 / atom 文本「更新错误保留旧值」的契约不一致。统一为:更新错误一律\n保留旧内容 + 报告;初次渲染(尚无旧内容)维持原契约(有钩子渲染为空、无钩子\n向上抛)。结构渲染错误不受影响(旧内容已销毁,区域只能降级为空)。\n\ndoc/02 §3.2 同步修订;测试补有钩子更新错误的根级与列表行内两个场景(保留旧\n内容 + 依赖恢复后重算)。\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(function-host): keep previous content when a hooked update recomp…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T14:43:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2ab329bbd468bacae7ee01cf35959e5c4dfde07d",
"body": "…d subtree teardown\n\n组件销毁顺序此前是 ref 置 null → frame 销毁 → 子树拆除 → layoutEffect 清理 →\nonCleanup——用户清理回调运行时 ref.current 已是 null、节点已 destroy、组件内\n创建的响应式对象已销毁,onCleanup(() => ref.current!.off(...)) 这类最自然的\n退订写法静默丢失或 TypeError。axii 的 ComponentHost.destroy 对同一问题有明确\n修复与 CAUTION(清理必须先于 DOM 拆除 / ref 置空 / render 期 c\n[…]\n onCleanup → 组件 ref\ndetach → frame 销毁 → 子树拆除;清理回调里保证能读到 ref.current 与组件内\n创建的响应式对象。契约写入 doc/02 §3.4 与 AGENTS.md §2,测试覆盖三类清理\n回调的可用性快照、全链路顺序断言与列表行卸载路径。\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(component): run user cleanups before ref detach, frame destroy an…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T14:43:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "deffa4886c5fc5fe40fe926badc74f0573b259f9",
"body": "frame 里 render 期间收集的 computed / RxLeaferState 等对象的 destroy 会执行\n用户清理代码(computed 的 onCleanup、RxLeaferState 子类的 abort),此前未经\nrunCleanupIsolated 逐个隔离——一个抛错的 destroy 会中断 forEach,跳过\ninnerHost 销毁与 attach 队列退订:子树绑定 effect 泄漏成继续响应数据写入的\n「活孤儿」,root.destroy 把异常抛回调用方(即使注册了 error 钩子也拿不到),\n留下没有恢复手段的半销毁树,违反「清理回调绝不向上抛」硬契约(doc/02 §3.4)。\n\n测试按 doc/02 §6 反向断言无残留:root.destroy 有钩子/无钩子两种模式、data0\ncomputed onCleanup 的惯用路径、列表行卸载路径(绑定 effect 零残留 + 后续\npatch 照常)。\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(component): isolate render-scope (frame) cleanup errors in destroy",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T14:38:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5609df2a776a577b6929a546298c06f963bd8480",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(release): v0.2.1",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T09:38:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bcde68d7f322d786079cdabc6515749dade83eab",
"body": "data0 2.3.0 ships the executed performance plan (allocation-free trigger\ndispatch, RxList iteration granularity, lazy derived metas, map row\nprobing). Full check gate (typecheck/lint/402 tests/build) passes.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore: upgrade data0 to ~2.3.0",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T09:38:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46e3ed390813e1fcff6b3686bc313a60e5ccd61a",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(release): v0.2.0",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T04:58:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56192f07c10d743e09d5e1c8a42a359055828cd1",
"body": "Upgrade data0 to ~2.2.0, update stale data0-behavior comments\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #21 from axiijs/cursor/upgrade-data0-2-2-0-1ec2",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T04:58:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "65c53cf43ce7ab6495a1e1c92315e833331bc4e1",
"body": "data0 2.2.0 runs sync computed getters/patches synchronously with try/finally\nstate recovery: unconsumed errors now throw at the mutation site instead of\nbecoming unhandled rejections, and a throwing patch no longer permanently\nwedges the computed. The error contract here is unchanged (framework-int\n[…]\ncribed the old data0 internals, which\nAGENTS.md §6 requires re-verifying on upgrade. All 402 tests pass unchanged\nagainst the published data0 2.2.0.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore: upgrade data0 to ~2.2.0, update stale data0-behavior comments",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T04:46:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4fc04645b9ebc0c8e167f2b8a6e6a780902fd749",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge framework quality hardening",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T03:05:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "efdf1e8be262c0b66fc030a2148b96daf39adf20",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "style: satisfy repository formatting gate",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T03:02:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d25d435a0b68846dda55c0ebb24e6173fc4978cd",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore: enforce framework quality gates",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T02:59:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "65105d437aa6406ca6b9b2c8a8248ed848227d88",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix: harden recoverable runtime error boundaries",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T02:59:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5556c8415e7dcf302180b6f74e0a61c913f8571c",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(release): v0.1.4",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T02:25:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a4d19a05ab0fb971dd0f55c895da21e49de7c3fd",
"body": "Fix audit findings: cleanup tracking leak, spatial index envelope, event bus isolation, dirty rect cascade, queue compaction\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #19 from axiijs/cursor/fix-audit-findings-a1a0",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T02:25:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "208c420eed57dcb7ab1730a7ebcbc64414609cdc",
"body": "- cover the no-hook console.error path of the zIndex x reorder report\n- cover replace/unmount queue compaction and the keep-live-entry path of\n compactQueue with a replace-backlog drag oscillation scenario (also\n asserts no spurious unmounts while the backlog holds drain priority,\n and exactly on\n[…]\nthe compaction fix)\n- v8-ignore the detached-placeholder guard in the reorder report\n (defensive branch, follows the existing annotation precedent)\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "test: full branch coverage for new diagnostics and queue compaction code",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T02:17:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "079b79e4b1df5574b4fd091813644b4ac91c6d14",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "test: type component props with Props in cleanup-tracking test",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T02:11:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "03c5ecd234f641d2b2787aaa56112a6d6d00866a",
"body": "applyIncrementalChange revokes tasks by deleting from the queued-id sets\nbut only ever appends to the pending arrays, so a long incremental-only\nsession between two full recomputes (gesture-frozen mounts plus an entry\noscillating across the window edge during a long drag is the typical\nshape) accumu\n[…]\nys bounded (~500 stale entries without the fix), the surviving task\nstill mounts correctly after the gesture ends, and no extra mounts are\nproduced.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(windowed-list): bound task queue growth on the incremental path",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T02:07:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0d2ce6fe0243d8eebb7ad3a0af1b11ade207c83c",
"body": "…joint\n\naddDirtyRect merged an incoming rect into the first intersecting dirty\nrect and stopped, but the grown union can newly overlap dirty rects it\ndid not intersect before (a long drag whose old and new bounds each\nabsorbed their own cluster is the typical shape). Leftover overlapping\nrects mean \n[…]\ng two clusters into a single flushed\nregion (fails without the fix), plus a pairwise-disjointness invariant\nover interleaved chained/spread changes.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(dot-layer): cascade dirty rect merging to keep rects pairwise dis…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T02:04:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8f941b0cf1b422f9ab306faac3781c2b5dbf9ab0",
"body": "…h errors\n\nTwo gaps in the root event bus versus the framework's error contracts:\n\n1. dispatch (non-error events): the first throwing listener aborted the\n Set iteration, silently skipping siblings. For the attach event this\n meant that in the no-hook mode one component's throwing layoutEffect\n \n[…]\ning delivery + first-error rethrow,\nthe attach integration path, and destroy completion with/without an\nerror hook (4 of them fail without the fix).\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(render): isolate event listeners and never abort destroy on detac…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T02:02:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "69f28eac8d0cdfe27a03c2dc906b369133f12644",
"body": "doc/05 §2.3 forbids reorder patches on zIndex-bound lists (the LIS move\npath assumes the physical child order matches the bookkeeping, which\nzIndex physical sorting breaks), but nothing enforced it at runtime and\nthe diagnostics order-level check deliberately skips zIndex branches —\nso a violation o\n[…]\nngle boolean check.\n\nCovers: violation reported once per reorder, no false positive on\nzIndex-free reorders, production (diagnostics off) unchanged.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "feat(list-diagnostics): report zIndex x reorder contract violations",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T01:59:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "558e1924c9c09fab9f14ffa27b3c0e0b0b4a0329",
"body": "The write-entry assert claimed to protect against runaway sizes but only\nchecked Number.isFinite: a finite-but-huge bounds (width 1e6 = millions of\nMap operations per set, 1e8 = hang) sailed through the guard, and\ncoordinates beyond the ±2^25-cell cellKey encoding domain silently broke\nthe keyToCx/k\n[…]\n reject, the legitimate\nthin-edge and big-square shapes, both coordinate overflow directions, and\nthe no-partial-write guarantee on the update path.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(spatial-index): enforce the grid design envelope at the write entry",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T01:56:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "77dd9b86cbc16a0492d299cc7ffcfc225f689fed",
"body": "renderSource runs entirely inside the effect's tracking window (data0's\nReactiveEffect.run wraps callGetter with enableTracking), so reactive reads\ninside user cleanup callbacks (function-child onCleanup, and the old\nsubtree's component onCleanup / effect & layoutEffect cleanups / ref\ndetach run by \n[…]\nntouched.\n\nContract added to doc/02 §3.2; reverse-assertion tests cover every\ncleanup surface plus a positive control (6 of 7 fail without the fix).\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(function-host): stop tracking reactive reads in the cleanup phase",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-10T01:52:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d37b05c2b34bd40823c353f6badf87d197f363fb",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(release): v0.1.3",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T16:07:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fdb6973e0ac3d122c7b50d0532bff65dafde09e1",
"body": "fix: review findings — placeholder transaction on dispatch failure, windowed-list buffer tracking, nullable event handlers\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #18 from axiijs/cursor/fix-review-findings-c8e3",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T16:06:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "41763dcae9bb00cb0a9291fd29b3839fe6db556b",
"body": "Completes the conditional-handler idiom at the type level: with\nexactOptionalPropertyTypes, onTap={cond ? fn : undefined} did not type-check\neven though the runtime now treats empty handlers as absent. Event handler\nprops (aliased and raw on:) accept ((e) => void) | null | undefined.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(types): allow null/undefined in event prop types",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T15:47:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "67b22dd71ed23c3eff3237e06ac70673de1cbac0",
"body": "onTap={cond ? handler : undefined} is a common JSX conditional-handler idiom;\nit previously crashed the mount with 'event prop must be a function'. Skip\nnull/undefined values for both aliased (onXxx) and raw (on:) event props while\nkeeping the assertion for any other non-function value, so misspelled event\nnames and wrong values still fail loudly. Documents the rule in doc/02 §2.3.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(element): treat null/undefined event props as absent",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T15:46:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1bacebaa57851b964aee4acabf960ae4f8e93c38",
"body": "…compute triggers\n\nThe constructor autorun tracked viewRect/lod/mounted/interacting/pins, but\nbuffer() and hysteresis() were only read inside recompute(), which runs in a\nrAF callback outside any tracking effect. A getter depending on reactive\ninput other than the already-tracked lod (e.g. a setting\n[…]\nuffer and hysteresis from standalone atoms and asserting\nmount/keep/unmount transitions on their writes alone. Documents the trigger\nin doc/05 §2.2.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(windowed-list): track buffer/hysteresis getter dependencies as re…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T15:45:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ede6680ad7a2851160227f4dde757de59276228d",
"body": "…ransaction\n\nWhen createHost itself throws (invalid child type), the just-inserted\nplaceholder had no bookkeeping pointing at it: ComponentHost.render /\nStaticArrayHost.render / root.render had already inserted the inner/item/root\nplaceholder, so a later non-parentHandle destroy could not reach it a\n[…]\ne dispatch sites, plus a\nrow-level hooked case asserting degradation to an empty row with intact\nbookkeeping. Documents the contract in doc/02 §3.1.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(host): keep createHost dispatch failures inside the placeholder t…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T15:43:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "00272003727dd98c2d4beafac09407116e5817e5",
"body": "Co-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "chore(release): v0.1.2",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T14:52:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c24704d8c9f2e581cac048a7e9ac619e5a1a0e34",
"body": "…ex-62f4\n\nfix: normalize RxList set() keys; guard SpatialIndex against non-finite bounds and huge query rects",
"is_bot": true,
"headline": "Merge pull request #17 from axiijs/cursor/fix-set-key-and-spatial-ind…",
"author_name": "cursor[bot]",
"author_login": "cursor[bot]",
"committed_at": "2026-07-09T14:51:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e44ca274c2c9ddb185b26e3c735f5d85c1b8e833",
"body": "…m rect area\n\nSpatialIndex.set() with an Infinity extent (a typical accident:\nundefined arithmetic in model bounds, or viewRect divided by a broken\nscale) sent addToCells into an unbounded cell loop — measured OOM /\npage freeze. NaN bounds silently filed the entry under a NaN cell,\nmaking it permane\n[…]\nrects, sparse\nfallback dedup + partial-coverage semantics) and npm run smoke:stress\n(10k cards: dot/full/simple transitions, off-screen move, PASS).\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(spatial-index): reject non-finite bounds, decouple query cost fro…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T14:23:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "32505528e2a2db164a517b33435c7770c4d214f8",
"body": "…emantics\n\ndata0 passes RxList.set() keys through verbatim. Non-integer keys\n(fractional / NaN / undefined from a map.get miss, non-canonical numeric\nstrings) are plain property assignments in JS: they change no row, but\nhandleExplicitKeyChange used to hang a ghost row on hosts[1.5] — a\nproperty tha\n[…]\nrectly\nrendered RxList, so the assertions target axle rather than data0's own\n.map patch path); fuzz-invariants gains a random set-key storm op set.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(rx-list): normalize explicit key change keys per JS array index s…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T14:23:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c09754ab2ed947033b653a22e150cc5a5ee706cd",
"body": "fix: error-path transaction completeness + input normalization, with invariant fuzz layer",
"is_bot": true,
"headline": "Merge pull request #16 from axiijs/cursor/error-path-invariants-a7ed",
"author_name": "cursor[bot]",
"author_login": "cursor[bot]",
"committed_at": "2026-07-09T13:22:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1574e5396634349dcbbbb8f9d22f7c6b74553115",
"body": "Delete AGENTS.md §7 ('align with axii first') and all justify-by-\nalignment annotations across src/, doc/ and test comments. The audit\nshowed the alignment norm acted as a bug propagation channel and a\nreview exemption: the attr-effect ordering bug matched axii's\nStaticHost exactly, and 'consistent \n[…]\notations are gone since there is\nno baseline to deviate from; the comments keep only the actual\nbehavioral rationale. AGENTS.md §8 renumbered to §7.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "docs: remove align-with-axii as an engineering norm",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T13:19:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4bc3e3a76b13fbb216b59ceaae92b2a51ed70a18",
"body": "- AGENTS.md §7 (align-with-axii principle): explicitly list the two\n intentional deviations (RxLeaferState.ref rebind, attr effects\n bookkeeping-before-run) so a future alignment pass does not revert\n them back to axii's leaky order;\n- Host.ts header: unconsumed placeholders are part of the rende\n[…]\nd §3 points at this header as the authority);\n- ElementHost: note the intentional deviation inline at the code point,\n as required by AGENTS.md §7.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "docs: harden alignment guardrails for the intentional axii deviations",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T13:05:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9bccdd30eff3f99e0cbea32904250a1f788e443a",
"body": "- doc/02 §2.1: bookkeeping-before-run for attr effects (intentional\n deviation from axii) and call-stack-based initial-render judgement;\n- doc/02 §3.1: unconsumed-placeholder cleanup is part of the render\n transaction; §3.3: full splice-start normalization; diagnostics now\n include the order-leve\n[…]\nperation-set updates for new structural paths;\n- Host.ts: getNodes() order doc now states the zIndex exception inline\n (previously only in doc/02).\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "docs: sync contracts for error-path completeness and input normalization",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T13:01:41Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "deab6498327e37f17a50414aa2dc2969d5bcde4b",
"body": "…eping\n\nExample-based tests only cover enumerated inputs; this layer drives\nrandom operation sequences (seeded LCG, reproducible) against global\ninvariants that must hold for the whole input domain:\n\n- RxListHost: interleaved splice/set/sortSelf/swap/reposition (including\n negative, non-finite and \n[…]\nepRect unmounted unless pinned,\n no ghost rows).\n\nNew structural operation paths must be added to these operation sets\n(now required by AGENTS.md).\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "test: seeded invariant fuzz layer for list order and windowing bookke…",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T13:01:41Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8b9cd844127f4971392968224881d955cf5d6fab",
"body": "- handleSplice now applies the complete Array.prototype.splice\n ToIntegerOrInfinity + clamp semantics to the raw data0 argv: NaN /\n undefined (typical source: list.splice(map.get(id), 1) on a get miss),\n +/-Infinity and fractional starts all arrive verbatim. hosts.splice\n normalizes internally p\n[…]\nacement desyncs only\n ever surfaced as unexplainable visual disorder. zIndex branches skip\n the order check (no false positives, covered by test).\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(rx-list): fully normalize splice start; order-level diagnostics",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T13:01:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "22ce0aad39177f35e3c0ba64b74b7e3eab0842fd",
"body": "- ElementHost registers attr binding effects into attrEffects BEFORE the\n first run (same bookkeeping-before-side-effect paradigm as childHosts).\n Previously an initial-evaluation throw (no error hook) left an already-\n subscribed effect outside the bookkeeping: transaction rollback could\n not d\n[…]\njust correct\ndegradation: zero re-evaluation and no throw on dependency writes after\nrollback, and an empty container after failed render + destroy.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(hosts): make error-path transactions leave no residue",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T13:01:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b6f3467cd4e53d280f13ed9d1f357ed06fe3b451",
"body": "fix: bring ref callbacks into the error & attach contracts; list/teardown hardening\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "Merge pull request #15 from axiijs/cursor/harden-ref-error-contract-5d4b",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T11:42:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0f6740e5c98452a014ec919494789af95368a5a",
"body": "- actionableCount and the frozen-mount branch of drain now iterate the\n (small) pinned set instead of the mount queue, which can hold\n thousands of frozen tasks at low LOD; the per-frame queue rescan and\n array rebuild during gestures are skipped entirely when no pinned\n mount is queued (the com\n[…]\nsmall per-frame budget) with a\n progress-based loop that stops as soon as an iteration makes no\n progress (frozen queue) or everything is drained.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "perf(windowed-list): O(|pins|) gesture-frame scans; convergent flushAll",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T11:36:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b2e3466fd9dd1806a988913f85da8e629fa922e2",
"body": "Regression guard for the CAUTION points listed in AGENTS.md §6: raw\nargv passthrough (negative splice start), explicit_key_change key\npassthrough (negative / out-of-range), reorder pair shape, immediate\nsynchronous patches with computation running exactly once, manualTrack\nbypassing pauseTracking, s\n[…]\nking-stack balance after a throwing getter.\nAny data0 upgrade breaking one of these fails here first instead of\nsurfacing as list desync at runtime.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "test(data0): pin the internal data0 behaviors axle depends on",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T11:36:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0d6e0f3dd426527d353c09f550e3aafa038a28c0",
"body": "Teardown of the previous region runs in the microtask recompute; a\nthrowing destroy used to escape as an uncaught exception and abort the\nrebuild, leaving the region stuck half-stale. teardownPrevious now\nisolates errors via runCleanupIsolated (report + continue); leftover\nnodes inside (boundary, placeholder) are swept by the existing render\nrollback. Closures are only allocated on the structural switch path.\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(function-host): isolate stale-content teardown during recompute",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T11:35:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2362e3c774ca28e092be3ee9fc6b93cbf4100242",
"body": "- destroyRowHost: a throwing row destroy (user cleanup / leafer\n internals) no longer interrupts sibling row destruction inside a\n data0 patch. Rows already spliced out of the bookkeeping are\n unreachable for rebuildAllRows, so an escaping error used to leave\n their nodes as permanent orphans; t\n[…]\n boolean check on the normal path.\n- destroy() before render() no longer crashes on\n destroyComputed(undefined) (render-transaction rollback path).\n\nCo-authored-by: Zhenyu Hou <skyking_H@hotmail.com>",
"is_bot": false,
"headline": "fix(list): isolate row destroy errors; add dev-mode invariant checks",
"author_name": "Cursor Agent",
"author_login": "cursoragent",
"committed_at": "2026-07-09T11:35:54Z",
"body_truncated": true,
"is_coding_agent": false
}
],
"releases_count": 21,
"commits_last_year": 163,
"latest_release_at": "2026-07-17T04:09:27Z",
"latest_release_tag": "v0.5.8",
"releases_from_tags": true,
"days_since_last_push": 4,
"active_weeks_last_year": 3,
"days_since_latest_release": 4,
"mean_days_between_releases": 0.5
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 37,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "@axiijs/axle",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@axiijs/axle",
"is_deprecated": false,
"latest_version": "0.5.8",
"repository_url": "https://github.com/axiijs/axle",
"versions_count": 21,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 2521,
"first_published_at": "2026-07-09T03:42:04.388000Z",
"latest_published_at": "2026-07-17T04:09:29.418000Z",
"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
},
"open_issues_and_prs": 2
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 37371,
"source_files_sampled": 68,
"oversized_source_files": 0,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 10022
},
"dependencies": {
"manifests": [
"package.json"
],
"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": [
"npm"
],
"dependencies": [],
"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": 2,
"merged_prs": 28,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "cursoragent",
"commits": 159,
"avatar_url": "https://avatars.githubusercontent.com/u/199161495?v=4"
},
{
"type": "User",
"login": "sskyy",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/1487672?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.994
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml"
],
"has_docs_dir": true,
"linter_configs": [
"eslint.config.js"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"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": 8,
"reason": "5 out of 6 merged PRs checked by a CI test -- score normalized to 8",
"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": 2,
"reason": "Found 6/23 approved changesets -- score normalized to 2",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "project was created within the last 90 days. Please review its contents carefully",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 3,
"reason": "dependency not pinned by hash detected -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 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": 10,
"reason": "GitHub workflow tokens follow principle of least privilege",
"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": "26387f804e3d09a5d69adea2f10301f72db4de52",
"ran_at": "2026-07-21T21:35:13Z",
"aggregate_score": 4.2,
"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-17T04:10:50Z",
"oldest_open_prs": [
{
"number": 9,
"created_at": "2026-07-09T03:20:21Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 11,
"created_at": "2026-07-09T05:49:09Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-17T04:09:18Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/axiijs/axle",
"host": "github.com",
"name": "axle",
"owner": "axiijs"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"security": 42,
"vitality": 69,
"community": 32,
"governance": 54,
"engineering": 74
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 69,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 56,
"inputs": {
"commits_last_year": 163,
"human_commit_share": 0.98,
"days_since_last_push": 4,
"active_weeks_last_year": 3
},
"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": "3/52 weeks with commits",
"points": 2.1,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 3
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "163 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 163
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "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": 88,
"inputs": {
"releases_count": 21,
"latest_release_tag": "v0.5.8",
"releases_from_tags": true,
"days_since_latest_release": 4,
"mean_days_between_releases": 0.5
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "21 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 21
}
}
],
"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 ~0.5 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 0.5
}
}
],
"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": "at_risk",
"name": "Community & Adoption",
"value": 32,
"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 (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 57,
"inputs": {
"packages": [
"@axiijs/axle"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 2521
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "2,521 downloads/month across npm",
"points": 45.4,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 2521,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 54,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 12,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.994
},
"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 99% of commits",
"points": 0.1,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 99
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 77,
"inputs": {
"merged_prs": 28,
"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": "28/28 decided PRs merged",
"points": 38.2,
"status": "met",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 28,
"decided": 28
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 6/23 approved changesets -- score normalized to 2",
"points": 3,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 46,
"inputs": {
"followers": 1,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "axiijs",
"public_repos": 19,
"account_age_days": 853
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "1 followers of axiijs",
"points": 2.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 1,
"login": "axiijs"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "19 public repos, account ~2 yr old",
"points": 14.1,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 19
}
},
{
"code": "account_age_years",
"params": {
"years": 2
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"@axiijs/axle"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 4
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"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": "21 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 21
}
}
],
"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": null,
"notes": [],
"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": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"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": "eslint.config.js",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.js"
}
}
],
"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": "5 out of 6 merged PRs checked by a CI test -- score normalized to 8",
"points": 16,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"topics": [],
"has_wiki": false,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 42,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 42,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 4.2
},
"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": "5 out of 6 merged PRs checked by a CI test -- score normalized to 8",
"points": 2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 6/23 approved changesets -- score normalized to 2",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 3",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file 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": "GitHub workflow tokens follow principle of least privilege",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "1 existing vulnerabilities detected",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 1
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 74,
"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": 0.908,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 10022
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, 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": "89 of 98 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 89,
"sampled": 98
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 57,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"tsconfig.json"
],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": "eslint.config.js",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.js"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "tsconfig.json"
}
}
],
"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 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 37371,
"source_files_sampled": 68,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/68 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 68,
"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",
"deps.dev does not index npm:@axiijs/axle@0.5.8; advisories assessed against the repository dependency graph instead"
],
"report_type": "repository",
"generated_at": "2026-07-21T21:35:23.443676Z",
"schema_version": "0.25.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/axiijs/axle.svg",
"full_name": "axiijs/axle",
"license_state": "standard",
"license_spdx": "MIT"
}