原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [
"ai-agent",
"aiops",
"devops",
"kubernetes",
"llm",
"sre",
"openclaw",
"agent",
"ai-agents",
"sre-agent"
],
"is_fork": false,
"size_kb": 15451,
"has_wiki": false,
"homepage": "https://siclaw.ai",
"languages": {
"CSS": 1761,
"HTML": 773,
"Shell": 70560,
"Python": 1459359,
"Makefile": 7051,
"Dockerfile": 3327,
"JavaScript": 105832,
"TypeScript": 6673844,
"Go Template": 7209
},
"pushed_at": "2026-07-28T04:54:04Z",
"created_at": "2026-03-02T04:31:11Z",
"owner_type": "Organization",
"updated_at": "2026-07-27T08:32:31Z",
"description": "AI-powered SRE platform — read-only infrastructure diagnostics with deep investigation, security governance, and team collaboration",
"is_archived": false,
"is_disabled": false,
"license_spdx": "Apache-2.0",
"default_branch": "main",
"license_spdx_raw": "Apache-2.0",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript",
"Python"
]
},
"owner": {
"blog": null,
"name": null,
"type": "Organization",
"login": "scitix",
"company": null,
"location": null,
"followers": 49,
"avatar_url": "https://avatars.githubusercontent.com/u/176687877?v=4",
"created_at": "2024-07-26T14:06:40Z",
"is_verified": null,
"public_repos": 39,
"account_age_days": 731
},
"license": {
"state": "standard",
"spdx_id": "Apache-2.0",
"raw_spdx": "Apache-2.0",
"file_present": true,
"scorecard_found": null,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.2.9",
"kind": "patch",
"published_at": "2026-07-27T09:29:27Z"
},
{
"tag": "v0.2.8",
"kind": "patch",
"published_at": "2026-07-23T12:36:52Z"
},
{
"tag": "v0.2.7",
"kind": "patch",
"published_at": "2026-07-22T11:37:32Z"
},
{
"tag": "v0.2.6",
"kind": "patch",
"published_at": "2026-07-17T16:37:08Z"
},
{
"tag": "v0.2.5",
"kind": "patch",
"published_at": "2026-07-09T17:37:23Z"
},
{
"tag": "v0.2.4",
"kind": "patch",
"published_at": "2026-06-30T15:15:42Z"
},
{
"tag": "v0.2.3",
"kind": "patch",
"published_at": "2026-06-26T11:11:12Z"
},
{
"tag": "v0.2.2",
"kind": "patch",
"published_at": "2026-06-24T11:23:37Z"
},
{
"tag": "v0.2.1",
"kind": "patch",
"published_at": "2026-06-22T13:17:56Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2026-06-15T08:12:58Z"
},
{
"tag": "v0.1.9",
"kind": "patch",
"published_at": "2026-06-10T13:14:09Z"
},
{
"tag": "v0.1.8",
"kind": "patch",
"published_at": "2026-06-09T09:36:33Z"
},
{
"tag": "v0.1.7",
"kind": "patch",
"published_at": "2026-06-03T13:29:45Z"
},
{
"tag": "v0.1.6",
"kind": "patch",
"published_at": "2026-05-27T09:13:38Z"
},
{
"tag": "v0.1.5",
"kind": "patch",
"published_at": "2026-04-28T12:47:02Z"
},
{
"tag": "v0.1.4",
"kind": "patch",
"published_at": "2026-03-19T11:40:32Z"
},
{
"tag": "v0.1.3",
"kind": "patch",
"published_at": "2026-03-15T10:19:46Z"
},
{
"tag": "v0.1.2",
"kind": "patch",
"published_at": "2026-03-13T12:47:09Z"
},
{
"tag": "v0.1.1",
"kind": "patch",
"published_at": "2026-03-07T07:25:05Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2026-03-07T05:22:08Z"
}
],
"recent_commits": [
{
"oid": "35f3d9b2a29a6f98882f0cf433fbb6c80d8a6da7",
"body": "kbc box: rebuild and continue on compile-turn stall or SDK subprocess death",
"is_bot": false,
"headline": "Merge pull request #448 from scitix/fix/kbc-compile-stall-coverage",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-27T05:29:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46ea747aec40308bcebce7488ee059967595edd1",
"body": "posixpath and urllib.parse have no call sites in this module. They arrived with\nthe record-stream recognisers — the ones that decided for the model what a source\nwas — and outlived the revert that removed them.\n\nCaught in review. My first check said urllib was still used; the grep had counted\n`import urllib.parse` as a call site. Both are gone.",
"is_bot": false,
"headline": "chore(kbc): drop the imports the reverted classifiers left behind",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-27T04:23:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "16990b53ec9b9b89ace7fe31cc680d6870cb9a54",
"body": "…ranscript\n\nThree consecutive batches of one live compile transcribed the same tickets. An\naggregate ledger of 1,177 records. Then twenty-one weekly exports the ledger was\nbuilt from. Then an 825-record bitable dump of the same period, read in\nthirty-two windows and appended chunk by chunk.\n\nThe com\n[…]\nvers one specification\npresented twice, an old and a new revision of a process, a table that exists as\nboth a screenshot and text — anywhere the corpus carries one body of fact in\nmore than one shape.",
"is_bot": false,
"headline": "docs(kbc): compile the delta of an overlapping source, not a second t…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-27T03:58:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "192bc75897a7a5d6f871783066fa32cf4b796c9b",
"body": "…or our machinery\n\nThe batch train ended on things that were never the owner's knowledge going\nwrong. A stalled turn or a dead SDK subprocess ended the run instead of being\nrebuilt and continued. A content shape the planner disliked wedged it. One\nunreadable PDF page — a missing extractor, a file th\n[…]\nthe unreadable section and box_role all deferred to it\nin the same commit, because a rule taught to one component and not its siblings\nis the shape of every contradiction this codebase produced today.",
"is_bot": false,
"headline": "fix(kbc): keep the batch train alive, and stop making the owner pay f…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-27T03:37:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0f129c4932a876c6abfe54cdc605b1d8d2654f2f",
"body": "…its forms\n\nTwo knowledge bases could not be compiled at all — the box started, planned, and\ndied before reading a page:\n\n RuntimeError: hierarchical batch planner produced an invalid plan: batch h026:\n attachment …/assets/…pptx is separated from the document that embeds it\n\nThe two packers disagr\n[…]\n\"reproduction\"\nof this bug passed attachment_edges=None, where nothing owns anything, no family\nforms, and the defect cannot fire. A test that cannot fail on the defect it\nnames is worse than no test.",
"is_bot": false,
"headline": "fix(kbc): a document family never splits, and the ledger counts both …",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-27T03:35:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4bd98810f50a23e53b96bc5813292fceadd7e680",
"body": "…e kept\n\nA deck or a workbook arrived as one opaque blob: the pre-render carried its text\nand everything else — every slide picture, every chart — was simply gone, with\nnothing anywhere saying so. A hardware manual whose diagrams are the content\ncompiled to a page about a document that had no diagra\n[…]\nwner can see is a different\nthing from a gap nobody knows about.\n\nScope is deliberate: the common shapes, extracted cheaply and predictably. Rare\nones are named as unsupported instead of half-handled.",
"is_bot": false,
"headline": "feat(kbc): keep what is inside an Office file, and name what cannot b…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-27T03:33:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1f936f482180a72a208212d937eb46ea10529e48",
"body": "…essage-location\n\nfix(lark): link feedback cards to persisted messages",
"is_bot": false,
"headline": "Merge pull request #447 from glow-Kev1n/fix/siclaw-channel-feedback-m…",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-24T13:44:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7975b2cc212bdf493b508e8d20c7860645c64758",
"body": null,
"is_bot": false,
"headline": "fix(lark): persist delta-only replies for feedback",
"author_name": "紫雨",
"author_login": null,
"committed_at": "2026-07-24T08:52:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba2661c98068e0ed589df162ad69d8dad21cfc89",
"body": null,
"is_bot": false,
"headline": "fix(lark): link feedback cards to assistant messages",
"author_name": "紫雨",
"author_login": null,
"committed_at": "2026-07-23T12:48:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a433c2d905b1830dab1e3b02d8b24d112193370",
"body": "feat(kb): platform hardening batch — coverage v2, box naming, MCP multi-key, test-session resilience, custom prompt fix",
"is_bot": false,
"headline": "Merge pull request #446 from scitix/feat/kb-platform-batch-20260723",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T11:45:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a1738a60b0d21aea9e239359e06d71da724a1d1f",
"body": "…ragment/?query\n\nAn anchored angle destination —  — defeated the\nunwrap: the link regex's angle alternation only matches when `>` is\nimmediately followed by `)`, so the whole `<...>#fig1` fell to the bare\nbranch, endswith(\">\") was false, the brackets were never stripped, a\n[…]\n lockstep); the shared asset-provenance fixture pins the case\nwith a new `guide/assets/c d.png` referenced only via\n`<assets/c d.png>#fig1` — the old parser demonstrably drops that edge in\nboth repos.",
"is_bot": false,
"headline": "fix(kbc): unwrap angle-bracketed link destinations with a trailing #f…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T11:27:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ab3cbb162036650b46c43e0b29723abb9bd3b70c",
"body": "…w generation-specific\n\nTwo review findings on the stall-reap path:\n\n1. The pending-terminator window was armed only AFTER interrupt() returned,\n but the stall turn_done frees the UI BEFORE that await — a retry landing\n while interrupt() was in flight saw neither _needs_rebuild nor a pending\n \n[…]\ne reaper inside a blocked interrupt(),\nretries in exactly that gap, and asserts one stall, a rebuild, and the\nretry's answer displayed. Verified it fails on the previous head with the\nretry swallowed.",
"is_bot": false,
"headline": "fix(kbc-box): close the reap-to-arm gap and make the terminator windo…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T11:27:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "916d85d80b0c03261366aa6e0619881503dfc84f",
"body": "…ndow is unresolved\n\nAfter a stall reap whose interrupt() succeeded, the watchdog frees the UI\n(turn_done) and arms a bounded window waiting for the torn-down turn's\nResultMessage. But the UI can retry immediately inside that window, and\narming the retry on the old client is ambiguous (review P1): i\n[…]\ntall timeout, the second answer is displayed, the\nclient was rebuilt, and no stale-frame drops occurred. Verified it fails\non the previous head with two turn_stalled events and the retry answer\neaten.",
"is_bot": false,
"headline": "fix(kbc-box): rebuild on retry while the post-interrupt terminator wi…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T11:06:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cf1b9b6096e4719f3eb206cf5fceabd391e93889",
"body": "…t-message\n\nAfter a rebuild whose reconnect failed, the driver clears `connected` and\nparks until the next rebuild request. But handle_test_message waited on\n`connected` first, so every retry timed out at the liveness gate (503\n\"session is still starting\") and the rebuild retry path never ran — the\n\n[…]\nonnect fails (immediate retryable 503, flag re-armed), second retry\nrebuilds on a fresh client and the turn is answered. Verified the test\nfails on the previous head with exactly the reported symptom.",
"is_bot": false,
"headline": "fix(kbc-box): consult _needs_rebuild before the liveness gate in /tes…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T10:32:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "35d1860daed4b8412c5327401befb017978129b7",
"body": "…ator is lost\n\nReview P1 on the per-turn generation guard. The guard assumes a stall-reaped\ntest turn's torn-down ResultMessage eventually arrives and advances\n_results_seen. But the reaper's client.interrupt() can be swallowed by the same\nblack hole that wedged the turn, so that terminator may NEVE\n[…]\n interrupt but terminator never arrives -> window elapses -> rebuild;\nterminator arrives in-window -> no rebuild, existing drop path (regression\nguard). Full suite green across three consecutive runs.",
"is_bot": false,
"headline": "fix(kbc-box): rebuild test-session client when a reaped turn's termin…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T10:15:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "85e8ce34f4d20640cf6589e3d25359baf43319bc",
"body": "…y + per-turn generation guard\n\nP1-1 (idempotency key not run-isolated): the open-test dedup map was keyed by\nclient_request_id alone, so on a shared box two runs colliding on a request id\nwould replay each other's tid/snapshot/fingerprint. Key it by (parent_run_id,\nclient_request_id) and re-verify \n[…]\ndog reap, then injects the reaped turn's late partial + ResultMessage via a\nnew queue-driven fake, asserting the fresh turn survives and completes on its own\nresult while both stragglers are dropped).",
"is_bot": false,
"headline": "fix(kbc-box): review P1s in test-session path — run-scoped idempotenc…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T08:51:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "eaf53f0b40b4dac33d53576895d981724c402df2",
"body": "…le pods\n\nIntegration fix for the #442 × #444 merge interaction. #442 renamed the\ncompile-box pod prefix (agentbox- → kbc-box-, profile-derived) and updated\nonReap/onAdopt to pass rec.profile, but left the other capability call sites\nresolving the pod name with the default \"agentbox\" prefix. On main\n[…]\nmory-cold testClose/testSessions now assert getAsync is called with\nthe recovered \"kb-compile\" profile (→ kbc-box-<id>); cancel asserts stop carries\nthe profile for both in-memory and store-only runs.",
"is_bot": false,
"headline": "fix(capability): thread run profile into box discovery/stop for compi…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T06:59:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cf4fd46cd56dd4914377cd0d16ca84a333e99c27",
"body": "Box turn-stall watchdog, idle-TTL reaper, test-session list; gateway proxy/idempotency + relay predicate.",
"is_bot": false,
"headline": "Merge PR #444 fix/kb-test-session-resilience into batch",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T06:36:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "183edb0e17eb0f8f9ff22e1234fdd5f248b8cca2",
"body": "Apply agent custom system prompt fallback on the web chat path (gateway chat.send).",
"is_bot": false,
"headline": "Merge PR #445 fix/chat-custom-system-prompt into batch",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T06:36:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "26d494acb2cac3006b9c32e7cd412bf0029da50e",
"body": "selfcheck coverage v2 (media assets auto-attach via citing docs) + fixtures + box role discipline + mediaverify interop.",
"is_bot": false,
"headline": "Merge PR #439 feat/kb-asset-provenance into batch",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T06:36:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "18078ac40718e0e56f39b624b061b37564ca81bc",
"body": "Rename compile box image to siclaw-kbc-box and pod prefix to kbc-box; upgrade cleans old pods.",
"is_bot": false,
"headline": "Merge PR #442 feat/kbcbox-naming into batch",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T06:36:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a3f57579834607e0d93293736a763690f1b30fc1",
"body": "Support multiple named A2A keys selected by alias in mcp/sicore-a2a-adapter.",
"is_bot": false,
"headline": "Merge PR #443 feat/mcp-multi-key-alias into batch",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T06:36:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f7104d97b7556ca796b14d88f27db4f888d4c17f",
"body": "chat.send only read params.systemPrompt when building the box prompt.\nsicore's web-chat proxy never forwards that param, so a custom-prompt\nagent silently fell back to AgentBox's built-in default SRE persona on\nsicore web chat — while channel paths (dingtalk/lark) resolved the\nagent's own template a\n[…]\nsystem-prompt.test.ts covering: explicit param wins and\nskips the lookup; omitted param resolves the agent's custom prompt; no\ncustom prompt / lookup failure -> undefined default (send still acks ok).",
"is_bot": false,
"headline": "fix(runtime): apply agent custom system prompt on the web chat path",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T04:50:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6239a80c2c3c95113aef217800f2bc95be750762",
"body": "Align the testStart idempotency key with sicore (MR!696) and the codebase's\nexisting convention: every consumer-minted idempotency key here is a `<noun>_id`\n(message_id for a turn, command_id for a typed command, operation_id for a\nmutation receipt) — there is no `idempotency_key`. So the field is\n`\n[…]\n → open fresh. Box read + TestRun attribute +\nteardown cleanup, the gateway request type + passthrough, and the box test's\nwire bodies all renamed. box suite 70 green; tsc clean; gateway vitest green.",
"is_bot": false,
"headline": "Rename test-session idempotency field to client_request_id",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T04:47:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a14548704368ecad39fab9d1b85950c86ac59337",
"body": "Follow-up to the testStart idempotency change: the relay-skip guard only fires\non the rare idempotent-replay path, and a future refactor of the testStart\nhandler could silently drop it — splitting the box's single-consumer\n/test-events stream. Extract the decision into a pure predicate\n(shouldRelayT\n[…]\n unit-test both branches\n(replay → no relay; fresh open or flag absent → relay); the handler now calls\nthe predicate instead of an inline check. Behavior unchanged. tsc clean;\ntest-relay vitest green.",
"is_bot": false,
"headline": "Extract shouldRelayTestSession predicate + unit-test both branches",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T04:35:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2a0a995e8794bc9623128d82e4129f0ac2157d38",
"body": "Two P2 follow-ups from the sicore MR review, layered on the test-session work.\n\n1. testStart idempotency (kbc/platform/pod/compile_box.py + gateway):\n handle_open_test accepts an optional `idempotency_key`. A retried open with\n the same key returns the SAME live session (same tid/snapshot_hash/p\n[…]\ndrops the key (fresh afterwards), no-key never deduped;\ngateway test asserts a shared box's two runs are mutually invisible in the list.\ntsc --noEmit clean; gateway vitest green; box suite 70 passing.",
"is_bot": false,
"headline": "Add testStart idempotency key + run-scoped test-session listing",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-23T04:32:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "651dc321a627f1b17450e4d1c085ee55f9f27679",
"body": "…session limit\n\nWire the box-side test-session resilience through the TS gateway so the consumer\ncan reach it, aligned with the sicore side.\n\n1. capability.testSessions (src/gateway/server.ts): new RPC method proxying the\n box's GET /test-sessions. Read-only reconciliation — mirrors testClose's bo\n[…]\nest-sessions.test.ts (passthrough with\ntid preserved / empty on absent box / run_id required); box test asserts the\nstructured 429 body. tsc --noEmit clean; gateway vitest green; box suite 69\npassing.",
"is_bot": false,
"headline": "Add capability.testSessions runtime method + structured 429 for test-…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T15:24:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4fcb40b1ee19f0d4344784202479811b4972ad46",
"body": "…fecycle logs\n\nThree production-confirmed defects in the read-only test-session path\n(kbc/platform/pod/compile_box.py), all box-side:\n\n1. Test turns hung on \"thinking\" forever. The test-session receive loop\n (test_session_driver) was a bare `async for msg in receive_messages()`\n with no model-st\n[…]\ndged turn and keeps the\nsession live for a follow-up question; idle-TTL sweep drops orphans and spares\nactive sessions; GET /test-sessions returns the agreed wire shape. Full suite\ngreen (69 passing).",
"is_bot": false,
"headline": "Add test-session resilience: turn-stall watchdog, idle-TTL reaper, li…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T15:09:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9475d94ea4ad8041920e330e503a1b497602e685",
"body": "One adapter process could previously bind only a single A2A key, so\nswitching Siclaw agents meant editing config and restarting. Passing the\nkey as a tool argument is not an option: credentials must never flow\nthrough the model context.\n\nAdd configuration-side named keys, selected at call time by al\n[…]\nw logic through an AgentRouter; keep SicoreA2aClient per-key.\nExisting tests updated to the router API; add router unit tests, multi-key\nrouting tool tests, and a two-alias stdio e2e cold-start smoke.",
"is_bot": false,
"headline": "feat(sicore-a2a-mcp): support multiple named A2A keys selected by alias",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T15:07:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b7074badb90aebb8ca7b7440e6fe98675d7aaff7",
"body": "…to kbc-box\n\nMotivation (operations): during production troubleshooting every pod was\nnamed `agentbox-<id>`, so a KB compile box and a chat agentbox could only be\ntold apart by label/image filtering — the compile box has bitten on-call more\nthan once. Make the compile box distinguishable at a glance\n[…]\nfor prod.\n\nTests: box-profile / k8s-spawner / manager suites green, including new coverage\nfor the kbc-box prefix, the legacy-pod reap, the chat-pod guard, and the\nprofile-aware stop/getAsync lookups.",
"is_bot": false,
"headline": "feat(kbc): rename compile box image to siclaw-kbc-box and pod prefix …",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T14:57:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d581f3731bb03f9af2182e285b1b64ce97f99f6d",
"body": "Two implementation-level details locked byte-for-byte with the sicore adoption\nledger (shared fixture, DESIGN §六), after cross-checking the two implementations:\n\n1. is_media_asset segment match is now case-INSENSITIVE (`Assets/`, `report.ASSETS/`\n count too). The platform always writes lowercase `\n[…]\ner change alters any prior fixture\noutput; expected.json is regenerated from the reference implementation with an\nin-generator sanity assert on the invariants. All selfcheck + mediaverify tests\ngreen.",
"is_bot": false,
"headline": "feat(kbc): align coverage-v2 edge semantics with sicore ledger mirror",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T12:38:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5790bf354a3cf72de169acafe7629544c19dc7f9",
"body": "Follow-up to coverage v2. media_citing_pages() gains a third discovery path:\na candidate page that cites a DOCUMENT d in its compiled_from now inherits the\nimage numeric-fidelity check of every image d embeds in its body (via\nasset_attribution_edges), unioned with the existing two paths (directly-ci\n[…]\ntion surface),\nso a media asset like .tiff is accounted by coverage but not numerically re-read.\nAdditive only: no existing media test used an assets/ raw path, so all prior\nassertions pass unchanged.",
"is_bot": false,
"headline": "feat(kbc): media numeric re-verification follows attribution edges",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T12:25:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ec1b74c85ae34a37334359641834be27ae970995",
"body": "Media assets (images under assets/) are document attachments, not first-class\nsources. Coverage v2 auto-accounts an image against any document that embeds it\nin its body, once that document is itself cited or excluded — so compiled_from\nno longer needs a token per image and the exclusion ledger no l\n[…]\nells the compile agent to cite documents only —\nimages auto-attach; do not cite or exclude them one-by-one; orphan images still\nneed a reasoned exclusion; assets/sheets/ placeholders handled as usual.",
"is_bot": false,
"headline": "feat(kbc): coverage v2 — media assets auto-attach via citing docs",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T12:19:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ef14a19e338a0bc0444091d9352a1f219fdde2a6",
"body": "fix(kbc): de-stream v2 — default-on session-scoped activation + stall-watchdog floor (follow-up to #434)",
"is_bot": false,
"headline": "Merge pull request #438 from scitix/fix/kb-destream-session-scoped",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T11:36:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d1814132bca503be6ff75f00cdf967607655118",
"body": "The v2 de-stream tests (test_destream.py) were not executed by the KBC Box\nCI job, so the green \"KBC Box Test\" check did not cover this PR's shim/session\n-scoping/watchdog-floor tests. Run it explicitly alongside test_compile_box.py.",
"is_bot": false,
"headline": "ci(kbc): run test_destream.py in the KBC Box CI workflow",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T09:52:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "041147a24bce89ec9a47484f103d9b6cc8afb440",
"body": "…dog floor to model phase\n\nFollow-up review fixes for #438 (de-stream v2):\n\n- The two non-interactive Claude reviewer sessions — explicit test\n recommendation (_recommendation_session_opts) and reference-answer assist\n (_reference_assist_session_opts) — still ran with an empty SDK env and hit\n th\n[…]\nt_destream.py gains two integration assertions: both reviewer callers'\n opts.env carry the shim URL (and clear to {} on operator opt-out), and the\n watchdog floor never extends a pending-tool bound.",
"is_bot": false,
"headline": "fix(kbc): route reviewer sessions through de-stream shim; scope watch…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T09:52:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "614a7b65edb029a5e7539c2e4b39eca61ffd445d",
"body": "fix(agentbox): distinguish probe failures from unreachable clusters",
"is_bot": false,
"headline": "Merge pull request #428 from caihongwei2006/feat/probe-error-codes",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T09:26:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "49591c609e607679f54de4fdeb7c588e4a8c3be0",
"body": "…-watchdog floor\n\nFollow-up to #434, which merged while the shim was still at v1. v1 activated\nthe de-streaming shim with a global env rewrite (ANTHROPIC_BASE_URL) gated on\nan opt-in KBC_DESTREAM flag, and did not account for the stall watchdog. Two\nproblems with that shape:\n\n- Global env rewrite ha\n[…]\ne honest price, still far\n under the CLI's own ~60min request timeout.\n\nBlast radius: the kbc-compile-box image only (127.0.0.1 listener); runtime,\nagentbox and sicore-side LLM callers are untouched.",
"is_bot": false,
"headline": "fix(kbc): de-stream v2 — default-on session-scoped activation + stall…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T09:18:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e9539778c3d2796b935ce549b7b55aab88830fcc",
"body": "feat(kbc): de-stream the compile box's Anthropic calls to dodge the gateway charset bug",
"is_bot": false,
"headline": "Merge pull request #434 from scitix/feat/kb-compile-destream",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T08:34:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ae5555f01fa48f7a03e223adfdbcbb86e7f04b9f",
"body": "fix(kbc): scale L1 auto-repair budget with open-violation workload",
"is_bot": false,
"headline": "Merge pull request #430 from scitix/fix/kb-l1-repair-budget-scaling",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T08:16:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1c2cc962b7845b5149c262ea83a5d0136e30dd32",
"body": "fix(tools): filter kubectl exec transport noise",
"is_bot": false,
"headline": "Merge pull request #436 from caihongwei2006/fix/pod-exec-transport-noise",
"author_name": "jacoblee-io",
"author_login": "jacoblee-io",
"committed_at": "2026-07-22T08:09:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69a38c3520062f1e209fbcda08cebad533c3b417",
"body": "Default debug mode can expose Docker/Moby and kubectl exec Go transport diagnostics in pod_exec stderr. Remove known SPDY/WebSocket stream log lines while preserving the actual container or OCI error.",
"is_bot": false,
"headline": "fix(tools): filter kubectl exec transport noise",
"author_name": "jtang",
"author_login": null,
"committed_at": "2026-07-22T07:57:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "430aa1b996ea8686adbf1ba40939521b439e698a",
"body": "Review finding: the limit derives from the OPEN workload, which shrinks as\nrepairs land, so gating on a per-turn recomputation closes the gate at\nroughly half-repaired (55-item motivating case: stops at turn 4 with ~19\nleft). Mirror the evaluation timing of _batch_media_verify_round_limit, not\njust \n[…]\n the shrinking-workload path: 30-violation episode\nrecords limit 3, workload collapses to 2 after the first repair, the gate\nstays open for rounds 2-3, and the unconverged report shows used=3/limit=3.",
"is_bot": false,
"headline": "fix(kbc): gate the repair loop on a per-episode high-water budget",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T06:50:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3d676ca8d2a4a044d0ffd76a63c966c8422b853a",
"body": "…kload\n\nA flat 2-round repair budget is sized for ordinary drift. A first full\ncompile or a wiki adoption over a large KB opens dozens of mechanical\nviolations at once, so the budget is structurally spent before the loop can\nconverge and the whole tail lands in the owner's question queue as one\nopaq\n[…]\nELFCHECK.json additionally reports repair_rounds_limit for\nobservability. Existing flat-budget gate tests are unaffected (small\nworkloads keep the floor); new unit test covers floor, scaling, and cap.",
"is_bot": false,
"headline": "fix(kbc): scale the L1 auto-repair budget with the open-violation wor…",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T06:50:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1395a96eddbac7f90f16b88da0cf7240ba3944ea",
"body": "…repair-20260721\n\nfix(kbc): normalize unambiguous source citations",
"is_bot": false,
"headline": "Merge pull request #426 from scitix/fix/kbc-deterministic-provenance-…",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T06:22:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "125bc5ea00470733ca851695f509d816a709a01a",
"body": "…riage\n\nfix(kbc): auto-resolve image-verification doubts backed by co-cited text sources",
"is_bot": false,
"headline": "Merge pull request #433 from scitix/fix/kb-media-verify-text-backed-t…",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T06:22:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b4f56f4411d3ad08d314e167686477d0c6f006cc",
"body": "…fix)\n\nmassapi's Anthropic-compatible STREAMING route corrupts multibyte characters\nwhose bytes straddle an SSE chunk boundary (per-chunk UTF-8 decode with\nerrors=replace -> U+FFFD); its non-streaming route returns identical bytes\nintact (gateway bug report, 2026-07). The compile box is non-interact\n[…]\nesis round-trip (byte-perfect CJK text, tool_use\npartial_json, usage split), keepalive under a slow upstream, error mapping,\nraw passthrough, and activation env logic (opt-in/opt-out/codex untouched).",
"is_bot": false,
"headline": "feat(kbc): in-pod de-streaming shim for the Anthropic route (charset …",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T06:11:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b2ef03de922e03cda41bd0e863d198ba48dbcb62",
"body": "feat(gateway): persist prompt trace attribution",
"is_bot": false,
"headline": "Merge pull request #429 from glow-Kev1n/feat/siclaw-trace-audit",
"author_name": "chent1996",
"author_login": "chent1996",
"committed_at": "2026-07-22T05:27:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c0deae055fdd87fd3ac086d149eb17bc67cad7f0",
"body": "…sources\n\nThe blind-verify comparer flags 超出转写范围 when a cited image cannot\nsupport a claim. That inference is only valid when the image is the claim's\nsole source — curated pages routinely cite whole asset sets as corroboration\nwhile the figure comes from a co-cited text export. Live adoption run\n(2\n[…]\nbacked claim conflicting with what the image shows is a\ngenuine cross-source conflict. Qualitative claims without distinctive\nnumbers keep escalating.\n\nImplements the triage step of scitix/siclaw#431.",
"is_bot": false,
"headline": "fix(kbc): auto-resolve image doubts verbatim-backed by co-cited text …",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-22T04:45:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7fd26e7b455172a60f07db92398d6e9ca298c9ad",
"body": "cluster_list's kubectl probe reported every failure as reachable:false,\nso a local kubeconfig/credential/tooling problem read as \"cluster down\"\nand invited the model to hallucinate an outage.\n\nClassify probe outcomes as success / unreachable / probe_failed with a\nstructured reason. unreachable now r\n[…]\nReverts the global test-ignore .gitignore block so tests stay versioned;\nadds table-driven classifier tests and three-state cluster_list tests.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(agentbox): distinguish probe failures from unreachable clusters",
"author_name": "jtang",
"author_login": null,
"committed_at": "2026-07-22T03:43:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b4e83fc98f5097ee590e2edbea6a2d276507674c",
"body": "Standalone Portal must mirror the trace-binding RPC or every local prompt logs an unknown-method warning. Keep the mutation narrow and idempotent, and dispatch best-effort binds without delaying response streaming.\n\nTested: tsc --noEmit; git diff --check; SQLite SQL probe\nNot-tested: local Vitest (esbuild is not executable); GitHub Actions pending",
"is_bot": false,
"headline": "fix(gateway): complete trace message binding",
"author_name": "紫雨",
"author_login": null,
"committed_at": "2026-07-22T03:20:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b71ea50747a794ded569903b1347ad32914b7b5d",
"body": "The mechanical normalizer re-parses each payload wrapped in ASCII parens.\nA payload holding an unbalanced ASCII \")\" inside a full-width marker makes\nthat re-parse close before the span's true end, so the parsed item covers\nonly a prefix of the span; rewriting the whole span from it would silently\ndrop the tail. Require the parsed item to cover the payload (modulo the\nseparator strip the parser itself applies) and otherwise leave the span\nmalformed for semantic repair.",
"is_bot": false,
"headline": "fix(kbc): skip span-truncating citation rewrites",
"author_name": "r",
"author_login": null,
"committed_at": "2026-07-22T03:13:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8daf382f21d6aab263cd4e46c6d9894efd30c9ae",
"body": null,
"is_bot": false,
"headline": "test(gateway): make trace binding mocks async",
"author_name": "紫雨",
"author_login": null,
"committed_at": "2026-07-22T02:54:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6ac79b05b2637adb9217cd40e6f9fcbea4e18270",
"body": "A concurrent chat.send is persisted before AgentBox can report that the session is already running. Once the fallback steer succeeds, relabel that exact row so transcript and trace readers keep additional input separate from the prompt that started the active trace.",
"is_bot": false,
"headline": "fix(gateway): mark automatic steer messages",
"author_name": "紫雨",
"author_login": null,
"committed_at": "2026-07-22T02:44:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1c9115dfd21654a3b388b296a26aec05e90f9bdb",
"body": null,
"is_bot": false,
"headline": "feat(gateway): persist prompt trace attribution",
"author_name": "紫雨",
"author_login": null,
"committed_at": "2026-07-22T02:44:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "16b160994c2ef283aad5c84ddb1525a3f857edb5",
"body": "Move exact provenance formatting repairs ahead of the model repair budget while preserving incremental page isolation.\n\nTested: test_selfcheck.py; test_incremental.py; test_compile_box.py\n\nScope-risk: narrow",
"is_bot": false,
"headline": "fix(kbc): normalize unambiguous source citations",
"author_name": "r",
"author_login": null,
"committed_at": "2026-07-21T11:10:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8c76d2334b502eaad95f180d3b7b6b2dbf82f1ba",
"body": "feat(mcp): add Sicore A2A adapter for coding agents",
"is_bot": false,
"headline": "Merge pull request #420 from scitix/feat/a2a-mcp-adapter",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-21T10:59:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b6d61442bad6360b790f436e024e83935ac5285",
"body": "fix(kbc): allow the Codex nested writer sandbox",
"is_bot": false,
"headline": "Merge pull request #425 from scitix/fix/kbc-codex-bwrap-sandbox-20260721",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-21T10:57:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "429d1d64d1f06bb096456328d48e26b128641dbf",
"body": null,
"is_bot": false,
"headline": "fix(kbc): allow the Codex nested writer sandbox",
"author_name": "r",
"author_login": null,
"committed_at": "2026-07-21T09:31:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ab4a4a95e45bed6b25188f22caf29b821fe20c50",
"body": "fix(kbc): accept bounded large source snapshot parts",
"is_bot": false,
"headline": "Merge pull request #424 from scitix/fix/kbc-large-source-parts-20260720",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-21T09:24:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "659795a0dbdfe5de0f6eaaf89536b56f8f332bc1",
"body": "… absent\n\nSicore agent API keys are per-agent, so requiring the operator to also\ncopy the agent UUID into MCP config was redundant friction. When\nSICLAW_AGENT_ID is unset the adapter now asks GET /api/v1/a2a/self\n(sicore MR feat/a2a-key-self-endpoint) which agent the key is bound to,\nwith the same bounded idempotent-read retry as other GETs. Setting\nSICLAW_AGENT_ID still pins the agent explicitly and remains required\nagainst older Sicore deployments without /self (actionable 404 error).",
"is_bot": false,
"headline": "feat(mcp): resolve the agent from the A2A key when SICLAW_AGENT_ID is…",
"author_name": "r",
"author_login": null,
"committed_at": "2026-07-21T07:39:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4b7f268e46b8cf0c41ad2c9efd00c33ea6bcc4a",
"body": "A successful message:send followed by a fully failed bounded wait used to\nreturn a plain tool error without the task_id. The task already exists\nserver-side, so the error invited the client model to resubmit a duplicate\ninvestigation. Return the submitted task as a compact working view with a\nwait_error note instead.",
"is_bot": false,
"headline": "fix(mcp): keep task_id when the bounded wait fails after submission",
"author_name": "r",
"author_login": null,
"committed_at": "2026-07-21T06:38:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d36ca9b9ee32edc094c48f1d0a9be57498461601",
"body": null,
"is_bot": false,
"headline": "fix(mcp): retry transient A2A task reads",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-21T06:36:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b8a04582b25a653058f8a665d6da9206bfe833d2",
"body": "Root-level Vitest discovers the adapter tests before the nested package has built its ignored dist output. Start the subprocess through tsx so both the repository CI suite and the standalone package exercise the same source entrypoint.\n\nTested: npm test in adapter package; root npx vitest stdio e2e; root npm test (4502 passed, 2 skipped)\n\nScope-risk: narrow",
"is_bot": false,
"headline": "test(mcp): run stdio e2e from TypeScript source",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-21T06:36:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "191752889354a8c424bbf31fe6f080adb2376a73",
"body": "Codex and Claude need a thin local bridge to reuse a user's existing Siclaw agent without receiving cluster credentials or choosing a different agent at runtime. Keep long investigations durable in Sicore, expose a bounded same-turn watchdog, and suppress repeated partial reports until the task is terminal.\n\nTested: npm ci; npm test; npm audit --omit=dev; live Sicore A2A WATCHDOG_READY smoke test\n\nScope-risk: narrow",
"is_bot": false,
"headline": "feat(mcp): add Sicore A2A adapter for coding agents",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-21T06:36:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e526e7b7e28695dd8d370a29a2945ebb05286944",
"body": null,
"is_bot": false,
"headline": "fix(kbc): bound large source materialization",
"author_name": "r",
"author_login": null,
"committed_at": "2026-07-21T02:57:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f243b4cd7c19ed077861e969775c2dad57d38de2",
"body": null,
"is_bot": false,
"headline": "fix(kbc): accept bounded large source parts",
"author_name": "r",
"author_login": null,
"committed_at": "2026-07-20T17:17:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "adfb49f10b62d5a2edbfe681867337a8d910446b",
"body": "…260719\n\nfeat(kbc): support attachment-aware PDF batch slices",
"is_bot": false,
"headline": "Merge pull request #423 from scitix/feat/kbc-attachment-family-pdf-20…",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T11:20:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3a66073fd6f5a564c7a5527a1f12d34b27ac174a",
"body": null,
"is_bot": false,
"headline": "fix(kbc): integrate PDF batches with Codex engine",
"author_name": "r",
"author_login": null,
"committed_at": "2026-07-20T08:35:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0e38e9ee6ecd695bcec1fc77c39d2c05e16e7de0",
"body": null,
"is_bot": false,
"headline": "fix(kbc): enforce batch raw read scope",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T07:59:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0ad0108509bd9f39ffb80917da93e5ed2d83d4f",
"body": null,
"is_bot": false,
"headline": "fix(kbc): keep PDF metadata off the small-KB path",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T07:58:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc6bdabbd2024cf80275ac858c2e0f5d956acee0",
"body": null,
"is_bot": false,
"headline": "Support attachment-aware PDF batch slices",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T07:58:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b9683cf80302fa58ba9994f3fe80cddb919abd7",
"body": "…60718\n\nfeat(kbc): add hierarchical compilation for very large corpora",
"is_bot": false,
"headline": "Merge pull request #422 from scitix/feat/kbc-hierarchical-compile-202…",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T07:51:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7621a7b6ef48ad0605355c7689b56752633ea1a0",
"body": null,
"is_bot": false,
"headline": "fix(kbc): make batch resume phase-aware",
"author_name": "r",
"author_login": null,
"committed_at": "2026-07-20T07:24:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "238da21e52fbff521552474fbf664f79b630b06c",
"body": null,
"is_bot": false,
"headline": "test(kbc): cover hierarchical engine integration",
"author_name": "r",
"author_login": null,
"committed_at": "2026-07-20T06:40:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d1539e14b5de0ab8685cad07ed1a6dd1c32e80fb",
"body": null,
"is_bot": false,
"headline": "Reverify ledger-clean media repairs",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T06:36:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db54c1e33181da516c6bdd598225b9bc974d17fc",
"body": null,
"is_bot": false,
"headline": "Slice oversized Markdown batches",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T06:36:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "459c08c6049947a734ec7f421eb80f7f7ae54611",
"body": null,
"is_bot": false,
"headline": "Reduce hierarchical vision context",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T06:36:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "72acb4ce71beaa7b167b4f68b15df34ec052dda2",
"body": null,
"is_bot": false,
"headline": "Bound image-heavy hierarchical batches",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T06:36:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e531b8c99c6e7b5c6bdb0fefabbb886abec3c587",
"body": null,
"is_bot": false,
"headline": "Keep hierarchical media verification resumable",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T06:36:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "96423309e6ce6b90b12c220e9754ea9899c162fa",
"body": null,
"is_bot": false,
"headline": "Fail closed on invalid batch results",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T06:36:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7ee96a9b7710d57db9b082b6976aad2ea8c6b43f",
"body": "Bind image verification to page and image content so repaired pages cannot inherit a stale pass. Add an explicitly scoped candidate-page delete tool and accept common plural page locators.\n\nTested: KBC compile-box, selfcheck, batching, Office ingest, red-blue, and mTLS suites\n\nScope-risk: moderate",
"is_bot": false,
"headline": "Harden media verification and candidate cleanup",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T06:36:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5abaffc4c8fe20d0d9c6bcc559a6b1d8aa4c5778",
"body": null,
"is_bot": false,
"headline": "fix(kbc): relax stall timeout for hierarchical batches",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T06:35:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f27d528861e4e3db94456396aa1a18085666630",
"body": "Keep the existing single-session and flat-batch routes unchanged, while grouping document assets, adding bounded section reduction, and persisting resumable map/reduce/final phases.\n\nTested: KBC Python suites; npm test; npm run build; 628MB GPU Raw planner dry-run\n\nScope-risk: moderate",
"is_bot": false,
"headline": "feat(kbc): add hierarchical compilation for very large corpora",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T06:35:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c1cf7ddb60211e6e5d1a279835b3dd6d92721bcb",
"body": "feat(kbc): add resumable Source Snapshot v2 delivery",
"is_bot": false,
"headline": "Merge pull request #421 from scitix/feat/kbc-source-snapshot-v2-20260718",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T06:26:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0ae32ad1ace6ee8b325db2bb37e1f5059b2f4f9f",
"body": "Tested: npm test; npm run build; compile-box and source-snapshot protocol tests\n\nScope-risk: narrow",
"is_bot": false,
"headline": "fix(kbc): distinguish snapshot conflicts from live runs",
"author_name": "dryrun",
"author_login": null,
"committed_at": "2026-07-20T05:59:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9fa670656b56c7c93ac036c01bb5b00a0cd5cfde",
"body": null,
"is_bot": false,
"headline": "fix(kbc): match Go snapshot manifest escaping",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T05:59:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2d85dcf0246b0d67978be4cbdf7911d23e1e4506",
"body": null,
"is_bot": false,
"headline": "Accept standard authoring tar roots",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T05:59:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fcfda74549a44df35af6d7f8c07667d5311b34e0",
"body": null,
"is_bot": false,
"headline": "feat(kbc): add resumable source snapshot delivery",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T05:59:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "afcf159f20e364b919b9da2a45fad7c838196b60",
"body": "feat(kbc): add Codex SDK compiler engine",
"is_bot": false,
"headline": "Merge pull request #419 from scitix/feat/kb-codex-engine",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-20T05:56:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9ba4d90e509882e6e69a2bba134631afd2b12e70",
"body": null,
"is_bot": false,
"headline": "fix(kbc): expose pinned Codex runtime to sandbox",
"author_name": "dryrun",
"author_login": null,
"committed_at": "2026-07-20T04:53:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "01ccb4e6c59d797b482e87170a4c2173865248eb",
"body": null,
"is_bot": false,
"headline": "ci(kbc): allow Codex namespace sandbox",
"author_name": "dryrun",
"author_login": null,
"committed_at": "2026-07-20T04:50:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0452655b4337ce084c8dc04bb8dee5fb2f5419f6",
"body": null,
"is_bot": false,
"headline": "build(kbc): install Codex Linux sandbox",
"author_name": "dryrun",
"author_login": null,
"committed_at": "2026-07-20T04:47:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "407bf5168b45fe309e1df8c12ad1ca6adac169ed",
"body": null,
"is_bot": false,
"headline": "fix(kbc): sandbox Codex writer sessions",
"author_name": "dryrun",
"author_login": null,
"committed_at": "2026-07-20T04:44:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "860e45309f939bd680e2bb21b2f68e58546e637c",
"body": null,
"is_bot": false,
"headline": "fix(kbc): enforce Codex read-only boundaries",
"author_name": "dryrun",
"author_login": null,
"committed_at": "2026-07-20T03:59:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b790233ccea991db26ada814d1a340029ad2623d",
"body": "Keep KBC workflow and tool semantics engine-neutral while adding an isolated official Codex SDK adapter for OpenAI Responses providers.\\n\\nTested: KBC compile-box regression, Codex adapter tests, capability tests, npm build\\nConfidence: high\\nScope-risk: moderate",
"is_bot": false,
"headline": "feat(kbc): add Codex SDK compiler engine",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-18T09:37:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "63461813512b868201367341a0af6849fd2bbfbc",
"body": "fix(gateway): pair tool results by toolCallId, not per-name FIFO",
"is_bot": false,
"headline": "Merge pull request #417 from scitix/investigate/tool-output-mismatch",
"author_name": "jacoblee-io",
"author_login": "jacoblee-io",
"committed_at": "2026-07-17T16:36:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "895c23e4954fae56013b27c6cd693d8f77791356",
"body": "pi-agent executes a same-turn tool batch in parallel: all\ntool_execution_start events fire in call order, but each\ntool_execution_end fires on its own completion. The SSE consumer paired\nstarts and ends through per-toolName FIFO queues, so when same-name\ncalls (e.g. several MCP navix invocations) co\n[…]\nCall record; events lacking an id\nkeep the per-toolName FIFO as fallback. The abort finalizer now walks\nthe same records, unchanged in behavior.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(gateway): pair tool results by toolCallId, not per-name FIFO",
"author_name": "lrli",
"author_login": "nightmeng",
"committed_at": "2026-07-17T16:14:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7c2329082fab3da6208619cb885a9363f4e9286a",
"body": "fix(kbc): make reference assistance reliable",
"is_bot": false,
"headline": "Merge pull request #416 from scitix/feat/kb-reference-assist-20260717",
"author_name": "Sedo",
"author_login": "LikiosSedo",
"committed_at": "2026-07-17T15:43:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "334a8704456720ba374a20f324917eadd78604aa",
"body": null,
"is_bot": false,
"headline": "fix(kbc): allow bounded background reference assistance",
"author_name": "likiosliu",
"author_login": "LikiosSedo",
"committed_at": "2026-07-17T15:02:01Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 20,
"commits_last_year": 1431,
"latest_release_at": "2026-07-27T09:29:27Z",
"latest_release_tag": "v0.2.9",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 22,
"days_since_latest_release": 0,
"mean_days_between_releases": 4.7
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 87,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "siclaw",
"exists": true,
"license": "Apache-2.0",
"keywords": [
"sre",
"kubernetes",
"k8s",
"ai",
"copilot",
"diagnostics",
"claude",
"agent"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/siclaw",
"is_deprecated": false,
"latest_version": "0.1.4",
"repository_url": "https://github.com/scitix/siclaw",
"versions_count": 5,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 45,
"first_published_at": "2026-03-07T05:08:53.215000Z",
"latest_published_at": "2026-03-19T11:44:03.902000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 130
}
]
},
"popularity": {
"forks": 27,
"stars": 223,
"watchers": 2,
"fork_history": {
"days": [
{
"date": "2026-03-06",
"count": 1
},
{
"date": "2026-03-10",
"count": 1
},
{
"date": "2026-03-11",
"count": 1
},
{
"date": "2026-03-12",
"count": 1
},
{
"date": "2026-03-15",
"count": 1
},
{
"date": "2026-03-17",
"count": 1
},
{
"date": "2026-03-24",
"count": 1
},
{
"date": "2026-04-02",
"count": 1
},
{
"date": "2026-04-13",
"count": 1
},
{
"date": "2026-04-14",
"count": 2
},
{
"date": "2026-04-15",
"count": 1
},
{
"date": "2026-04-18",
"count": 1
},
{
"date": "2026-04-19",
"count": 2
},
{
"date": "2026-04-28",
"count": 1
},
{
"date": "2026-05-07",
"count": 1
},
{
"date": "2026-05-09",
"count": 1
},
{
"date": "2026-05-10",
"count": 1
},
{
"date": "2026-05-20",
"count": 1
},
{
"date": "2026-05-21",
"count": 1
},
{
"date": "2026-05-26",
"count": 1
},
{
"date": "2026-05-30",
"count": 1
},
{
"date": "2026-06-11",
"count": 1
},
{
"date": "2026-07-13",
"count": 1
},
{
"date": "2026-07-21",
"count": 1
},
{
"date": "2026-07-27",
"count": 1
}
],
"complete": true,
"collected": 27,
"total_forks": 27
},
"star_history": null,
"open_issues_and_prs": 11
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": true,
"bootstrap_files": [
"Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"mcp/create-chart/tsconfig.json",
"mcp/sicore-a2a-adapter/tsconfig.json",
"portal-web/tsconfig.json",
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 370531,
"source_files_sampled": 643,
"oversized_source_files": 21,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md",
"kbc/CLAUDE.md"
],
"agent_instruction_max_bytes": 25866
},
"dependencies": {
"manifests": [
"package.json",
"portal-web/package.json"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [
{
"name": "@mariozechner/pi-coding-agent",
"direct": true,
"version": "0.55.4",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.3,
"advisory_ids": [
"GHSA-7v5m-pr3q-6453",
"GHSA-jfgx-wxx8-mp94",
"GHSA-r95r-rj6r-c39x"
],
"fixed_version": "0.78.1",
"advisory_count": 3,
"oldest_advisory_days": 41
},
{
"name": "@hono/node-server",
"direct": false,
"version": "1.19.15",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.9,
"advisory_ids": [
"GHSA-frvp-7c67-39w9"
],
"fixed_version": "2.0.5",
"advisory_count": 1,
"oldest_advisory_days": 6
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"high": 1,
"moderate": 1
},
"advisory_count": 4,
"affected_count": 2,
"assessed_count": 424,
"malicious_count": 0,
"assessed_package": "npm:siclaw@0.1.4",
"unassessed_count": 0,
"direct_affected_count": 1
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "@anthropic-ai/sdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.71.2"
},
{
"name": "@arizeai/openinference-semantic-conventions",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^2.5.0"
},
{
"name": "@clack/prompts",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.1.0"
},
{
"name": "@earendil-works/pi-agent-core",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.80.7"
},
{
"name": "@earendil-works/pi-coding-agent",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "0.80.7"
},
{
"name": "@earendil-works/pi-tui",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.80.7"
},
{
"name": "@kubernetes/client-node",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.4.0"
},
{
"name": "@modelcontextprotocol/sdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.27.1"
},
{
"name": "@opentelemetry/api",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.9.1"
},
{
"name": "@opentelemetry/exporter-trace-otlp-proto",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.219.0"
},
{
"name": "@opentelemetry/resources",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^2.8.0"
},
{
"name": "@opentelemetry/sdk-trace-node",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^2.8.0"
},
{
"name": "@sinclair/typebox",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.34.0"
},
{
"name": "adm-zip",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.5.17"
},
{
"name": "diff",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^8.0.3"
},
{
"name": "glob",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^13.0.6"
},
{
"name": "js-yaml",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.1.1"
},
{
"name": "jsonwebtoken",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^9.0.3"
},
{
"name": "markdown-it",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^14.1.0"
},
{
"name": "mysql2",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.22.0"
},
{
"name": "node-forge",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.3.3"
},
{
"name": "prom-client",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^15.1.3"
},
{
"name": "sqlite-vec",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.1.7-alpha.2"
},
{
"name": "ssh2",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.17.0"
},
{
"name": "tar",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^7.5.15"
},
{
"name": "ws",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^8.18.0"
},
{
"name": "cron-parser",
"manifest": "portal-web/package.json",
"ecosystem": "npm",
"version_constraint": "^5.5.0"
},
{
"name": "lucide-react",
"manifest": "portal-web/package.json",
"ecosystem": "npm",
"version_constraint": "^0.460.0"
},
{
"name": "mermaid",
"manifest": "portal-web/package.json",
"ecosystem": "npm",
"version_constraint": "^11.15.0"
},
{
"name": "prismjs",
"manifest": "portal-web/package.json",
"ecosystem": "npm",
"version_constraint": "^1.30.0"
},
{
"name": "react",
"manifest": "portal-web/package.json",
"ecosystem": "npm",
"version_constraint": "^18.3.1"
},
{
"name": "react-dom",
"manifest": "portal-web/package.json",
"ecosystem": "npm",
"version_constraint": "^18.3.1"
},
{
"name": "react-markdown",
"manifest": "portal-web/package.json",
"ecosystem": "npm",
"version_constraint": "^10.1.0"
},
{
"name": "react-router-dom",
"manifest": "portal-web/package.json",
"ecosystem": "npm",
"version_constraint": "^7.0.0"
},
{
"name": "react-simple-code-editor",
"manifest": "portal-web/package.json",
"ecosystem": "npm",
"version_constraint": "^0.14.1"
},
{
"name": "remark-gfm",
"manifest": "portal-web/package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.1"
}
],
"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": 4,
"merged_prs": 371,
"open_issues": 7,
"closed_ratio": 0.588,
"closed_issues": 10,
"closed_unmerged_prs": 58
},
"bus_factor": 2,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "LikiosSedo",
"commits": 601,
"avatar_url": "https://avatars.githubusercontent.com/u/107271763?v=4"
},
{
"type": "User",
"login": "jacoblee-io",
"commits": 337,
"avatar_url": "https://avatars.githubusercontent.com/u/267827480?v=4"
},
{
"type": "User",
"login": "nightmeng",
"commits": 229,
"avatar_url": "https://avatars.githubusercontent.com/u/8165086?v=4"
},
{
"type": "User",
"login": "chent1996",
"commits": 191,
"avatar_url": "https://avatars.githubusercontent.com/u/106315742?v=4"
},
{
"type": "User",
"login": "a-yeyang",
"commits": 13,
"avatar_url": "https://avatars.githubusercontent.com/u/88581400?v=4"
},
{
"type": "User",
"login": "fred-scitix",
"commits": 8,
"avatar_url": "https://avatars.githubusercontent.com/u/191930924?v=4"
},
{
"type": "User",
"login": "silence8013",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/70105334?v=4"
},
{
"type": "User",
"login": "wangao1236",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/12544973?v=4"
},
{
"type": "User",
"login": "Likio-scitix",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/267880712?v=4"
}
],
"contributors_sampled": 9,
"top_contributor_share": 0.435
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"kbc-ci.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"scorecard": null,
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-27T05:31:30Z",
"oldest_open_prs": [
{
"number": 418,
"created_at": "2026-07-18T02:02:57Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 435,
"created_at": "2026-07-22T06:21:25Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 440,
"created_at": "2026-07-22T13:18:38Z",
"last_comment_at": "2026-07-22T13:27:38Z",
"last_comment_author": "LikiosSedo"
},
{
"number": 450,
"created_at": "2026-07-28T02:59:47Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-27T05:29:32Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 123,
"created_at": "2026-03-17T04:51:49Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 348,
"created_at": "2026-06-22T13:00:08Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 349,
"created_at": "2026-06-22T13:00:11Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 427,
"created_at": "2026-07-21T11:30:13Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 431,
"created_at": "2026-07-22T04:33:15Z",
"last_comment_at": "2026-07-22T04:40:02Z",
"last_comment_author": "LikiosSedo"
},
{
"number": 432,
"created_at": "2026-07-22T04:33:17Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 437,
"created_at": "2026-07-22T08:48:04Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/scitix/siclaw",
"host": "github.com",
"name": "siclaw",
"owner": "scitix"
},
"metrics": {
"overall": {
"key": "overall",
"band": "excellent",
"name": "Overall health",
"note": "The weighted overall 68 is calibrated to 80 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 68,
"calibrated": 80,
"calibration": "2026-08-02"
}
}
],
"value": 80,
"inputs": {
"security": 46,
"vitality": 86,
"community": 59,
"governance": 69,
"calibration": "2026-08-02",
"engineering": 72,
"ai_readiness": 78,
"weighted_overall_raw": 68
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 86,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"commits_last_year": 1431,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 22
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "22/52 weeks with commits",
"points": 15.2,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 22
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "1431 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 1431
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "OpenSSF Scorecard unavailable",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "exceptional",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"releases_count": 20,
"latest_release_tag": "v0.2.9",
"releases_from_tags": false,
"days_since_latest_release": 0,
"mean_days_between_releases": 4.7
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "20 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 20
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~4.7 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 4.7
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "OpenSSF Scorecard unavailable",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "exceptional",
"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": "moderate",
"name": "Community & Adoption",
"value": 59,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "moderate",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"forks": 27,
"stars": 223,
"watchers": 2,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "223 stars",
"points": 38.1,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 223
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "27 forks",
"points": 11.8,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 27
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "2 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 2
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "excellent",
"name": "Community health",
"note": null,
"notes": [],
"value": 92,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": null,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": true,
"readme_badge_services": [],
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (Apache-2.0)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "Apache-2.0"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 13.5,
"status": "met",
"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": 6.3,
"status": "met",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "at_risk",
"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": 28,
"inputs": {
"packages": [
"siclaw"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 45
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "45 downloads/month across npm",
"points": 22.2,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 45,
"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": "good",
"name": "Sustainability & Governance",
"value": 69,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 56,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 9,
"top_contributor_share": 0.435
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "2 contributor(s) cover half of all commits",
"points": 25.2,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 2
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 44% of commits",
"points": 12.7,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 44
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "9 contributors",
"points": 12.2,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 9
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "OpenSSF Scorecard unavailable",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"newcomer_pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 70,
"inputs": {
"merged_prs": 371,
"open_issues": 7,
"closed_issues": 10,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 0.588,
"closed_unmerged_prs": 58,
"first_time_authors_30d": null,
"first_time_prs_merged_30d": null,
"first_time_prs_decided_30d": null
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "59% of issues closed",
"points": 24.7,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 59
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "371/429 decided PRs merged",
"points": 25.9,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 371,
"decided": 429
}
}
],
"max_points": 30
},
{
"key": "newcomer_pr_acceptance",
"name": "Newcomer PR acceptance",
"detail": "no first-time contributor's PR decided in 30d",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_newcomer_prs",
"params": {
"days": 30
}
}
],
"max_points": 13
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "OpenSSF Scorecard unavailable",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"followers": 49,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "scitix",
"public_repos": 39,
"account_age_days": 731
},
"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": "49 followers of scitix",
"points": 12.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 49,
"login": "scitix"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "39 public repos, account ~2 yr old",
"points": 15.7,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 39
}
},
{
"code": "account_age_years",
"params": {
"years": 2
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "exceptional",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"siclaw"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 130
},
"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 130 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 130
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "5 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 5
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 72,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "OpenSSF Scorecard unavailable",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [
"ai-agent",
"aiops",
"devops",
"kubernetes",
"llm",
"sre",
"openclaw",
"agent",
"ai-agents",
"sre-agent"
],
"has_wiki": false,
"homepage": "https://siclaw.ai",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://siclaw.ai",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "10 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 10
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "weak",
"name": "Security",
"value": 46,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "weak",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Dependency lockfiles. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"dependency_lockfiles"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 40,
"inputs": {
"source": "file_signals",
"lockfiles": [
"package-lock.json"
],
"manifests": [
"package.json",
"portal-web/package.json"
],
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
},
"components": [
{
"key": "security_policy_security_md",
"name": "Security policy (SECURITY.md)",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "dependabot_config",
"name": "Dependabot config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "dependency_lockfiles",
"name": "Dependency lockfiles",
"detail": "published library — lockfiles are an application concern, not expected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "lockfiles_not_expected",
"params": {}
}
],
"max_points": 25
},
{
"key": "codeql_workflow",
"name": "CodeQL workflow",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
}
]
},
{
"key": "dependency_advisories",
"band": "good",
"name": "Dependency advisories",
"note": "Matched the npm:siclaw@0.1.4 runtime dependency closure — what installing the published package pulls in — 424 packages. Reachability is not analyzed.",
"notes": [
{
"code": "advisories_scope_published",
"params": {
"package": "npm:siclaw@0.1.4",
"assessed": 424
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 68,
"inputs": {
"source": "osv",
"advisories": 4,
"affected_packages": 2,
"assessed_packages": 424,
"unassessed_packages": 0,
"affected_by_severity": "high 1, moderate 1",
"direct_affected_packages": 1
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "1 affected: @mariozechner/pi-coding-agent 0.55.4 (high 7.3)",
"points": 14.6,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 1,
"packages": "@mariozechner/pi-coding-agent 0.55.4 (high 7.3)"
}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "1 affected: @hono/node-server 1.19.15 (moderate 5.9)",
"points": 13.2,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 1,
"packages": "@hono/node-server 1.19.15 (moderate 5.9)"
}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory has been public longer than 90 days",
"points": 40,
"status": "met",
"details": [
{
"code": "advisories_none_stale",
"params": {
"days": 90
}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "exceptional",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 424,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "exceptional",
"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"
],
"commit_weight_rule": {
"min_commits": 50,
"min_commit_share": 0.1
},
"review_only_matches": 0,
"below_threshold_exposures": [],
"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": 78,
"weight": 0.04,
"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.92,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md",
"kbc/CLAUDE.md"
],
"agent_instruction_max_bytes": 25866
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md, kbc/CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md, kbc/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": "92 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 92,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 72,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": true,
"typed_language": true,
"bootstrap_files": [
"Makefile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [
"mcp/create-chart/tsconfig.json",
"mcp/sicore-a2a-adapter/tsconfig.json",
"portal-web/tsconfig.json",
"tsconfig.json"
],
"agent_commit_share": 0.02,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "mcp/create-chart/tsconfig.json, mcp/sicore-a2a-adapter/tsconfig.json, portal-web/tsconfig.json, tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "mcp/create-chart/tsconfig.json, mcp/sicore-a2a-adapter/tsconfig.json, portal-web/tsconfig.json, tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "2 of the last 100 commits agent-authored or agent-credited",
"points": 4,
"status": "partial",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 2,
"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": "OpenSSF Scorecard unavailable",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "exceptional",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 98,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 370531,
"source_files_sampled": 643,
"oversized_source_files": 21
},
"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": "21/643 source files over 60KB",
"points": 53.2,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 643,
"oversized": 21
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "moderate",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": true,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 20,
"status": "met",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
}
],
"classification": {
"labels": [
"mcp-server",
"library",
"web-ui"
],
"scores": {
"web-ui": 4,
"library": 6,
"mcp-server": 7
},
"primary": "mcp-server",
"evidence": [
{
"tier": "distribution",
"label": "library",
"source": "registry:npm",
"weight": 6
},
{
"tier": "dependencies",
"label": "mcp-server",
"source": "dep:@modelcontextprotocol/sdk",
"weight": 4
},
{
"tier": "dependencies",
"label": "web-ui",
"source": "dep:react-dom",
"weight": 4
},
{
"tier": "structure",
"label": "mcp-server",
"source": "mcp_signal",
"weight": 3
}
],
"artifacts": [],
"confidence": "medium",
"host_extension": false,
"runs_as_process": true,
"consumed_by_code": true
},
"metrics_version": "2.3.1"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"OpenSSF Scorecard did not return a usable result (2026/07/28 05:46:07 Warning: PATs stored in env variables GITHUB_AUTH_TOKEN and GITHUB_TOKEN differ. Scorecard will use the former.); skipping Scorecard checks"
],
"report_type": "repository",
"generated_at": "2026-07-28T05:46:31.003218Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/scitix/siclaw.svg",
"full_name": "scitix/siclaw",
"license_state": "standard",
"license_spdx": "Apache-2.0"
}