Звіт у форматі JSON машиночитний
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 882,
"has_wiki": true,
"homepage": null,
"languages": {
"Python": 2059496
},
"pushed_at": "2026-07-30T01:11:01Z",
"created_at": "2026-07-22T02:32:54Z",
"owner_type": "Organization",
"updated_at": "2026-07-30T01:10:40Z",
"description": "Universal memory provider for AI agents (Redis + Kumiho)",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "Python",
"significant_languages": [
"Python"
]
},
"owner": {
"blog": "https://kumiho.io",
"name": "Kumiho.io",
"type": "Organization",
"login": "KumihoIO",
"company": null,
"location": "United States of America",
"followers": 6,
"avatar_url": "https://avatars.githubusercontent.com/u/265208441?v=4",
"created_at": "2026-03-03T07:03:05Z",
"is_verified": null,
"public_repos": 16,
"account_age_days": 148
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2026-07-22T03:04:57Z"
}
],
"recent_commits": [
{
"oid": "17f2efb7a4fdf7c5d18a384adb6de8193270f1d1",
"body": "…port\n\nfix(mcp): reflect's capture vocabulary reaches the caller",
"is_bot": false,
"headline": "Merge pull request #2 from KumihoIO/fix/reflect-schema-survives-trans…",
"author_name": "KaveOne | Kumiho",
"author_login": "kaveone",
"committed_at": "2026-07-30T01:10:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b0a86eece2e87e804ffce6236206479988412dec",
"body": "Adversarial review (4 lenses, 7 findings, 0 surviving refutation) did not\nfind a defect in the fix, but two of the refutations were right about\nsomething else, and both are addressed here.\n\n1. The documented transport rule was over-stated. The first commit said\n the `required` arrays \"top-level an\n[…]\n list at all. Verified directly.\n\nVersion 1.1.0: a newly enforced constraint plus newly advertised\nvocabulary. Patch would understate it.\n\nSuite: 1020 passed, same 6 pre-existing failures as baseline.",
"is_bot": false,
"headline": "fix(mcp): correct the transport claim, pin the gate, release 1.1.0",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-30T01:08:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1f70932b3bab565d06a7fdf4950552eb075dfeca",
"body": "A caller reading `kumiho_memory_reflect`'s schema could not see which\nmemory types a capture may carry, so it picked one by guesswork. Measured\nagainst a live host: property `description` text is forwarded ONLY for\nREQUIRED top-level properties, and the `required` arrays themselves —\ntop-level and n\n[…]\nd: 1019 passed, same 6 pre-existing failures as baseline\n(test_summarization provider defaults, test_dream_state, memory_manager\nretriever) plus test_skill_ingest's pre-existing collection IndexError.",
"is_bot": false,
"headline": "fix(mcp): reflect's capture vocabulary reaches the caller",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-30T00:10:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0daf613edc9a97d1a3f6ea556229421609135470",
"body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(readme): attribute the paper citation to Kumiho Inc.",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-22T02:57:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b247e09bffe04f738fced0701f382aca48697a8a",
"body": "Add a Research/citation section (with BibTeX) and a top-of-README paper\nlink for Young Bin Park, 'Graph-Native Cognitive Memory for AI Agents:\nFormal Belief Revision Semantics for Versioned Memory Architectures'\n(arXiv:2603.17244, 2026) — the formal grounding for this package's\nconsolidation and belief-revision behavior.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(readme): cite the foundational paper (arXiv:2603.17244)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-22T02:55:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "52dee21be413c3a888d8c7ff1038131760c0c110",
"body": "Bump every version surface to 1.0.0 and graduate to Production/Stable:\n- pyproject.toml: version 0.20.0 -> 1.0.0; classifier Alpha -> Production/Stable\n- kumiho_memory/__init__.py: __version__ -> 1.0.0\n- README status block: Beta (0.20.x) -> Stable (1.0.x), semver commitment\n- RELEASE_NOTES: v1.0.0 \n[…]\n (#138/#139 pre-LLM redaction, #136 cross-project decompose, #135 dedup\n asymmetry guard, #143 decisions surface rename with legacy fallback)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "release: 1.0.0 — first stable release from the standalone repo",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-22T02:49:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "286a59638a4be2c517c502421c99a3ad45f947ce",
"body": "…RLs)\n\nExtracted from KumihoIO/kumiho-SDKs (python/kumiho-memory) with history\npreserved via git subtree split.\n\n- pyproject [project.urls] now point at KumihoIO/kumiho-memory\n- .github/workflows/publish.yml: PyPI Trusted Publishing (OIDC), tag v*\n- .github/workflows/ci.yml: build + twine check + import smoke (py3.10-3.12)\n- add MIT LICENSE (from monorepo python/LICENSE) and .gitignore\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: standalone repo setup (OIDC publish, CI, LICENSE, gitignore, U…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-22T02:14:53Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "23c4e8dfada6078c1d846c68f24265ca8344f1c3",
"body": "chore(memory): align Decision Memory storage+config surface to \"decisions\"",
"is_bot": false,
"headline": "Merge pull request #143 from KumihoIO/chore/decisions-project-rename",
"author_name": "KaveOne | Kumiho",
"author_login": "kaveone",
"committed_at": "2026-07-22T01:59:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca97bc9e870920f696ca950b5f4d05b1231e5b9c",
"body": "fix(memory): redact conversation content before the LLM, on all three legs (#138)",
"is_bot": false,
"headline": "Merge pull request #139 from KumihoIO/fix/pre-llm-redaction-conversation",
"author_name": "KaveOne | Kumiho",
"author_login": "kaveone",
"committed_at": "2026-07-22T01:59:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d123da7d4e627b048f8ed8a31a8ab735a56f439a",
"body": "Adversarial-review fixes on the Decision Memory storage/config rename:\n\n- DECISION_MEMORY_DESIGN.md: the §1.1 project-layout diagram and the\n §Open-questions entry still declared the storage project as\n `{agent_project}-code` / `-code` 접미 project, contradicting §6 and the\n code (resolve_project_n\n[…]\nhape it validates.\n Purely the seeded label — it is passed directly and never routes through\n resolve_project_name, so behavior is unchanged.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(memory): finish -decisions rename in design doc + dogfood fidelity",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-20T13:37:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "18a7018bd6be277f3e993172a0d3a6bc8e8e9d09",
"body": "…ions\"\n\nRename the storage project suffix and the operator env-var family from the\n\"code\" spelling to the product name \"decisions\", the last cheap moment before\npublic promotion.\n\nStorage: resolve_project_name() now derives f\"{project}-decisions\" (was\n-code). The physical-isolation guard is unchange\n[…]\ncommit/evidence), and internal module/symbol names (code_decisions.py,\nCodeMemoryConfig). Historical RELEASE_NOTES entries are left as shipped.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(memory): align Decision Memory storage+config surface to \"decis…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-20T13:18:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "049d918e1c52a656bde9b0737088132a34b3cf24",
"body": "…(#138)\n\nReview follow-up on the #138 pre-LLM gate. The first cut mirrored the\nline-oriented code_capture/code_session policy verbatim, which propagated\nthree defects and left two of the file's LLM-bound paths open.\n\nprivacy.py — new PIIRedactor.redact_credentials(text) -> (text, count)\n(additive; r\n[…]\na KNOWN, now\ndocumented boundary — #138 closes what a provider sees, not what the graph\nholds; screening the stored transcript is its own call.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): span-level pre-LLM credential screening, all three legs …",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-20T01:50:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a26c3c2e20e00b6278d3449e1efff9716c4bc1a5",
"body": "consolidate_session handed RAW buffered messages to BOTH\nsummarize_conversation and generate_implications; redaction ran only on\nwhat came back. Two pre-LLM leak paths, not one.\n\nBuild a redacted COPY of the transcript and pass it to both calls. The\noriginal messages stay untouched — the verbatim tr\n[…]\nolidation, and must never leak either.\n\nThe post-LLM anonymize_summary layer over the model's OUTPUT is unchanged\nand remains the second layer.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): redact conversation messages BEFORE the LLM (#138)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-20T01:29:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "604392692ad71186a37fe3a8fe9b88040c9cc7de",
"body": "…ng (#136)\n\nAdversarial review findings 1 & 2 (PLAUSIBLE): the explicit-project\ndecompose test asserted space paths + node counts but never verified that\nthe DERIVED_FROM provenance edge is actually wired when the materialization\ntarget differs from the source revision's project — leaving requiremen\n[…]\nompose check before relying on cross-project provenance. No production\ncode change; decompose stays best-effort (never raises over a bad edge).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(memory): assert cross-project DERIVED_FROM/ABOUT provenance wiri…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-19T14:11:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8fbcd2d5aee9176d070f9d9df7c38fb6ddabf381",
"body": "kumiho_memory_decompose materialized typed nodes only into the manager's\nown configured project. Add an optional `project` parameter threaded\ntool -> manager -> ontology so an agent can route the entities/facts/\nrelations into a different project, defaulting to today's behavior when\nomitted.\n\n- mcp_\n[…]\nn is\nbyte-identical (identical threaded args, zero probe); unresolvable and\nraising probes fall back without raising; schema exposes `project`.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): optional project target for keyless decompose (#136)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-19T14:01:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "99942c20cca29042183ba39ebe5a2a6cda5fb30a",
"body": "…uard\n\nfix(memory): block G6 fact-dedup merges on negation/weekday asymmetry",
"is_bot": false,
"headline": "Merge pull request #135 from KumihoIO/fix/embedding-dedup-asymmetry-g…",
"author_name": "KaveOne | Kumiho",
"author_login": "kaveone",
"committed_at": "2026-07-18T16:58:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b6e51cb6b18fb20bdaa248d161aabe54954dc08",
"body": "Live gate-check against a real local CE server (2026-07-19) found that\napply_embedding_fact_dedup's lexical-Jaccard confirmation gate can be\nfooled by high token overlap that hides a polarity flip or a differing\ncritical detail: \"the user is happy\" vs \"the user is NOT happy\"\n(Jaccard 0.889) and a me\n[…]\nAIN_GRAPH, also default OFF, so today's\nblast radius was contained — this closes the gap before either is ever\nconsidered for a default-ON flip.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): block G6 fact-dedup merges on negation/weekday asymmetry",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T16:52:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4d5a9654b0e6ddd896931c01cf23d649ff409cca",
"body": "…y, #86 #118 #119)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(kumiho-memory): 0.19.0 -> 0.20.0 (ontology Phase 3 + reliabilit…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T15:27:58Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f7094e33bbc4052b957b0d97208072b0c1c9bd37",
"body": "…eep both: event_date_confidence + valid-interval marker)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Merge origin/main into feat/ontology-phase3 — resolve #131 overlap (k…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T15:13:08Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "17cc855528ac60df72d283920483141d2dbcceda",
"body": "fix(temporal): guard event_date against hallucinated LLM dates (#119)",
"is_bot": false,
"headline": "Merge pull request #131 from KumihoIO/fix/event-date-guard",
"author_name": "KaveOne | Kumiho",
"author_login": "kaveone",
"committed_at": "2026-07-18T15:09:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3b126fd2a3d735eca0098cdb43e7d33ae804e769",
"body": "Address findings from adversarial review of the LLM-failure-parking work:\n\nCONFIRMED:\n- failure_ledger._load: read the ledger as bytes and decode explicitly so an\n invalid-UTF-8 file (disk corruption, interrupted write, tampering) is treated\n as corruption -> start fresh, instead of raising Unicod\n[…]\n missing\nitem-kref, payload-key fallback, ledger-error swallow). Full suite 933 passed,\n3 skipped (2 pre-existing env-drift failures unrelated).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(kumiho-memory): harden #118 parking ledger per adversarial review",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T12:35:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "40ab18fb3170fdb1c4a7a88a36feae9ce9088b3c",
"body": "…xes (#119)\n\nAdversarial-review follow-ups on the event_date corroboration guard.\n\n- In-content anchor derivation (CONFIRMED #1/#3): relative-date derivation\n now resolves against the absolute dates literally present in the source,\n not only the message's wall-clock ingest timestamp. redis_memory.\n[…]\n/this-period branches and the conflict-guard\nreject branch. Full suite: 908 passed (2 pre-existing env-drift failures\nunrelated to this change).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(temporal): anchor relative derivation on in-content dates + KO fi…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T12:11:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "76f064b8aecee94169c761b0b2f55c315ca79be2",
"body": "…path (G5)\n\nAdd reuse + flag-off duplicate cases through _sync_decompose so both decompose\npaths (summarizer + keyless agent) that share the resolver are covered.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(kumiho-memory): cover the summarizer decompose alias-resolution …",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T12:07:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "69a672c51b910486f0a1ba4de90dbd49cbe4afa7",
"body": "…ding fact dedup, G8 valid-time intervals (#86)\n\nAll three items are additive and flag-gated default-OFF (epic gate: additive-only,\nno migration/renames; default-ON flips are later paired-bench decisions).\n\nG5 — write-time entity alias resolution (KUMIHO_MEMORY_ALIAS_RESOLUTION, default\nOFF). Before\n[…]\n + DreamState flag wiring; G8 interval grammar/edge cases + as-of demotion +\nflag-off byte-identical regression + write-side metadata isolation.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(kumiho-memory): ontology Phase 3 — G5 alias resolution, G6 embed…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T12:02:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9f18de8d96df3be96e24b1300fdf50682fcfb7d9",
"body": "…king ledger (#118)\n\nretry.py classified transient vs non-transient only, so deterministic-failure\ncontent (validation errors, content-filter refusals, 4xx semantic rejections)\ncould be re-selected and re-fail run after run in Dream State / consolidation\n(a poison loop). Import memory-bank's pattern\n[…]\nnsolidation store seam; TTL un-park;\nconcurrent writers do not corrupt; absent ledger file = clean start; assessment\nisolation + systemic guard.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(kumiho-memory): 3-way LLM failure classification + cross-run par…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T11:57:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e94f298e46f4f94cb2888a15fdd6f3d64f887c13",
"body": "event_date is an LLM-extracted valid-time field validated only by a\nprecision-aware FORMAT regex, so a well-formed but hallucinated date\npasses cleanly and pollutes the event-proximity ranking boost at recall\n(Hugh Kim review §2 caveat 3).\n\nAdd a CONTENT gate. New module `temporal_guard.classify_eve\n[…]\nguard + regression\ntests in test_recall_rerank.py; storage-wiring integration tests\n(verified / unverified / derived) in test_memory_manager.py.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(temporal): guard event_date against hallucinated LLM dates (#119)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T11:45:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fb122045c2a4921eea14a4dc127ee854c22dbfe9",
"body": "…ampaign; near-clone corpus ingest is the sole intervening write\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(memory): gate note timeline correction — backfill predates the c…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T05:54:47Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b3973a282db3a1eb18d754e5734c49702236e8b6",
"body": "…rpus-global BM25 coupling (kumiho-server#28), not a server migration\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(memory): correct 0.19.0 gate note to the verified mechanism — co…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T05:51:58Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b5833ecffa928920caf69e45e3cc600242280df8",
"body": "…development server, not a shipped migration\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(memory): correct 0.19.0 gate note — bench env ran unreleased in-…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T05:46:35Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4a70961399c459cf79a7dff08ab134ec5fa32cbf",
"body": "…kstream, #86)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(kumiho-memory): 0.18.0 -> 0.19.0 (ontology Phase 2 + review wor…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T05:44:47Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "1142426e9c901fc3cd7094b7974c6c93c934784a",
"body": "…ently (#106 follow-up)\n\nThe 0.19.0 RC gate measured the marker text itself regressing capped\ncontexts: paired per-question analysis showed marker-carrying questions\nat -0.055 vs baseline (n=478) while marker-free questions were +0.027 —\nthe answer model hedges when told content was cut (adversarial\n[…]\nthe cut is genuinely useful and\nbench-irrelevant. Budget unification stays; docstrings carry the\nmeasurement so the fork isn't re-unified blind.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): truncation marker is engage-only — bench path slices sil…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T03:21:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ec331bf3c9801bb405746b4f4a54de63362a0d89",
"body": "…proven idempotent retry (#98)\n\nStructural profile: the observed MCP -32001 was git resolution (<=50s\nworst) plus one monolithic write phase (60s write_timeout) exceeding\nthe MCP client's 60s budget. capture_decisions now runs under an\noverall 45s deadline (KUMIHO_MEMORY_CODE_CAPTURE_DEADLINE) with\n\n[…]\nction —\ndouble-run and partial-then-retry produce identical graphs (tested).\nLive cloud p95 measurement is the documented follow-up.\n\nCloses #98\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): code_capture total-time deadline with partial success + …",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T01:32:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b7b651a8a8d470ca15df8c2b838681a89ad0170c",
"body": "…n marker placeholder (#117)\n\nThe commit-mining packet now passes the session path's exact pre-LLM\npolicy before reaching any adapter: PII anonymized in place per line,\ncredential-bearing lines replaced with [redacted] — content screened,\nstructure (hunk headers, paths, labels) preserved so extracti\n[…]\nhe\nsession side: a credential-dropped session_line becomes [redacted]\ninstead of \"\", so the embed-all-metadata fallback can't fire.\n\nCloses #117\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): pre-LLM packet anonymization on the commit path + sessio…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T01:09:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "032b824b5bab9017d88f1fcea83424b3c78b9cf8",
"body": "…ve proposals (#108)\n\nEvery LLM-proposed deprecation now passes keyless deterministic guards\nbefore execution: min-age (fail-closed on unknown age, env-tunable),\nevidence severity (official never LLM-deprecatable; corroborated needs\na substantive reason) read as the MAX across metadata AND tags, and\n[…]\n, fail-closed, injection-fenced) for operators who\nwant a paid second layer. Proposed/guarded/refuted/executed stats in\nthe report.\n\nCloses #108\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): independent verification layer on Dream State destructi…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T00:54:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bea000e519696673b5143b06a8302a80735bd7cb",
"body": "…ounting (#106)\n\nOne source of truth (CONTEXT_BUDGET_CHARS, env\nKUMIHO_MEMORY_CONTEXT_BUDGET_CHARS, default 8000 = the benchmark\npath's historical value): compose_context and build_recalled_context\nnow share the budget, a hard-ceiling truncate_section (marker inside\nthe limit), the truncation marker\n[…]\n sections carry the\nin-budget marker — measured at the 0.19.0 full-10 RC gate.\nchar_limit=0 keeps origin semantics (empty content).\n\nCloses #106\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): unify context assemblers under one budget with token acc…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-18T00:21:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2f92f4db03045f2176ef9ca3b6d8f6da15f06cac",
"body": "…105)\n\nEvery traversal budget window now processes edges in a deterministic\npriority order instead of server arrival order: dispute-basis belief\nedges (CONTRADICTS/SUPERSEDES with basis agent/evidence-assessor)\nfirst, positive whitelist edges second, with a stable\n(edge_type, reached-kref) tiebreak \n[…]\nped selections use\nheapq.nsmallest on high-degree anchors. The contract ships in the\nontology spec (v3) so agents can commit to it.\n\nCloses #105\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): deterministic belief-safety-first traversal contract (#…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T22:57:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b4647542c55692b09cefa1b55502557ea1d21ae3",
"body": "…s guard\n\nLive gating on the full-10 corpus surfaced that recall scores carry a\nwall-clock recency prior (pre-vs-pre drift ~1e-6 on identical code), so\nexact byte equality is unattainable by design. The harness gains a\n--compare mode: exact structural/order/content equality with score\nfloats within \n[…]\nresult for this branch: PASSED against the ingested full-10 corpus\n(91 sibling-bearing results, pre=main vs post=branch structurally\nidentical).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(memory): bytediff harness — tolerance compare mode + non-vacuou…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T21:54:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1f276be9b16652b4eb753d51823d8434128eadef",
"body": "…ranking (#97, #102)\n\nThe graph-augmentation wait loops now bridge the daemon worker's\ncompletion to the running loop (call_soon_threadsafe + wait_for)\ninstead of polling at 0.5s — recall wakes the instant traversal\nfinishes, removing the ~0.25s-average artificial floor; timeout\nsemantics byte-ident\n[…]\nils the run).\n\nAdversarially reviewed: five cross-thread race scenarios verified safe,\nper-item independence confirmed, no correctness findings.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "perf(memory): event-driven recall waits + bounded parallel sibling re…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T18:01:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6d3e00048d485511d581aae1ff6edf51b30817ff",
"body": "…D retry, locked singleton (#103)\n\nRecall/engage MCP results now carry an additive backend_error field\nwhen the retrieve backend actually failed (empty-but-healthy stays\nbyte-identical, signal reset per call, read under the recall lock);\n_generate_session_id retries Redis once with backoff and logs \n[…]\nept:pass; _get_manager\nuses a double-checked threading.Lock so concurrent first calls can't\ndouble-create the manager/Redis client.\n\nCloses #103\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): surface silent failures — backend_error field, session-I…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T17:26:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "aeb1e2ad30536b1cd26028f6d464ef515ca0450c",
"body": "… release checklist (#107)\n\nCloses #107\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(memory): align version surfaces — README status, pyproject URLs,…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T17:11:48Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "186e2ab7e956398357341f1cc419547a276c558f",
"body": "api_key_generic now matches hyphenated modern keys (sk-proj-, sk-ant-)\nvia an entropy-run lookahead (>=20 unbroken alnum chars in the tail) so\nhyphenated prose like 'sk-learn-based-approach' stays clean; adds JWT\n(double-eyJ anchored), Google AIza, Slack xox[baprs], and DB URLs with\ninline passwords\n[…]\neral-pipe typo. Module docstring now\nstates the detector is probabilistic best-effort with enumerated\ncoverage — never a guarantee.\n\nCloses #101\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): modernize credential detection patterns (#101)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T17:10:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7e9451781781a4def8d844bfb73deea799ef6114",
"body": "External SKILL.md content now passes a deterministic, keyless scan\nbefore storage: hidden/bidi unicode payloads, high-precision injection\nheuristics, and embedded credentials. Flagged content is stored for\naudit but quarantined — no agent_compat, never tagged published, with\nquarantine metadata + mi\n[…]\nide narrowed to\njailbreak shapes, ZWJ/ZWNJ excluded (emoji/Persian/Indic load-bearing,\ntradeoff documented), leading BOM tolerated.\n\nCloses #100\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): static scan + quarantine for skill ingestion (#100)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T16:56:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "dd4b9d034280b57ca3c95cb2d244f9806f38f7bb",
"body": "…ession mining (#99)\n\nCommit messages, decision prose, evidence text, symbols, and source_ref\nnow pass the session path's per-atom gate before reaching the cloud\ngraph: credential-bearing atoms drop (counted), PII redacts in place,\nclean content stores byte-identical. Always-on (default PIIRedactor\n\n[…]\nstats=None guard, and a credential-bearing\nsubject becomes \"[redacted]\" so write_revision's embed-all-metadata\nfallback never fires.\n\nCloses #99\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): commit-mining path passes the same privacy boundary as s…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T16:17:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fb2d4dd7f3d25ad96419bfe9ac1ee6b13fe4cbf7",
"body": "feat(memory): ontology Phase 2 — explicit belief change, first-class CONTRADICTS, grounding ripple",
"is_bot": false,
"headline": "Merge pull request #96 from KumihoIO/feat/ontology-phase2",
"author_name": "KaveOne | Kumiho",
"author_login": "kaveone",
"committed_at": "2026-07-17T15:48:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "52aba596118b2b77ed57c66650df451ec98c6142",
"body": "…wn (#104)\n\nCONFIRMED via structural repro: MCP handlers run asyncio.run per tool\ncall, so the bare create_task(_background_assess) was cancelled at loop\nteardown — evidence grading (and the #94 CONTRADICTS bridge riding in\nit) silently never completed via MCP, the primary deployment mode. The\nasses\n[…]\nval mechanism\ndecompose/consolidation already use. Regression tests demonstrate both\ndispatch modes and fail on the unpatched code.\n\nCloses #104\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): background auto-assess survives MCP per-call loop teardo…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T15:48:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d657fb4ee306538a8b4f20e012327e29ffd1da7c",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(memory): acknowledge Hugh Kim's v0.18.0 deep-dive review",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T15:26:11Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6fc0c6cf724e0a798b48103c3e9054088381c3b6",
"body": "…2, sibling notes, bridge gate (#93 #94 #95)\n\nThree-lens adversarial review fixes: contested markers and whitelist\nsurfacing now require a dispute basis (agent / evidence-assessor) so\nentity-relation CONTRADICTS domain claims from the predicate registry\nnever read as memory disputes; the ontology sp\n[…]\nsibling branch; the assessor bridge\ngains a create_contradicts_edges kill-switch (default ON); the\nself-supersede guard also compares kref uris.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): Phase 2 review hardening — dispute-basis scoping, spec v…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T12:01:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e9ab3df20dd184de02fadc4f2462218f2a446bf3",
"body": "Superseding a fact now ripples to its dependents: revisions with a\nDEPENDS_ON edge into the superseded fact are stamped\ngrounding_stale=true (+ mirrored grounding:stale tag and a pointer to\nthe superseding fact) from both the heuristic and agent-declared\nSUPERSEDES paths — deterministic, keyless, ca\n[…]\nDream State pass clears flags whose grounding was\nre-confirmed or whose superseding fact is gone. Closes the paper's\ndeferred section 15.6 loop.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): grounding-staleness ripple on SUPERSEDES (#95)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T11:35:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "77f74717cc2a52242455997ff1d37677411061e1",
"body": "…list, contested markers (#94)\n\nAssessor conflict verdicts now become graph structure: conflicting_krefs\nbridge to directed CONTRADICTS edges (basis=evidence-assessor,\nidempotent, best-effort) beside the existing metadata write. The\ngraph-augmented reader traverses CONTRADICTS like SUPERSEDES, stamp\n[…]\nound-trips (piggybacks the existing edge fetch), and composed context\nrenders a one-line disputed note — additive only, no removal or\nrescoring.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): CONTRADICTS first-class — assessor bridge, reader white…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T11:10:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "98fc9b221137378dc1a3c92000ad189f842154f3",
"body": "…the in-loop agent (#93)\n\nBelief-change edges can now come from the agent that read the\nconversation: optional supersedes/contradicts lists on decompose land\nas SUPERSEDES/CONTRADICTS edges with basis=agent metadata, resolving\ntargets against this call's facts, existing fact items, or krefs —\nunreso\n[…]\nuessed. The lexical fallback\nkeeps working, is now labeled basis=lexical-overlap, and yields to an\nexplicit agent declaration for the same fact.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): decompose accepts explicit supersedes/contradicts from …",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T10:54:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "175f5cde1eb5ea2a53f6887a5f9ed4577dff9c1a",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(kumiho-memory): 0.17.4 -> 0.18.0 (ontology Phase 1, #86)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T08:16:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "833c9575fe5c63082fe396eb4eddcea586d47b43",
"body": "…ons win global budget (#90)\n\nAdversarial-review fixes: (1) the sibling-cap break no longer\nshort-circuits relation-edge collection when the flag is on (order-\ndependent reachability loss; flag-OFF keeps the exact historical early\nexit); (2) global neighbor/result budgets now consume specific\nrelati\n[…]\n) docstring mentions the INVOLVES hop; test pins that stray\nnon-canonical edge types are never traversed. New tests proven against\npre-fix code.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): relation traversal survives sibling cap; specific relati…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T06:12:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7a3429d345507ab43fbe91b27c303604204a04f3",
"body": "With KUMIHO_MEMORY_RELATION_TRAVERSAL=1, the entity-mediated reader\nfollows registered entity->entity relation edges (both directions) from\nABOUT-reached anchors to neighbor anchors, then hops incoming\nABOUT/INVOLVES to their content-bearing memories — relation edges are\nfinally readable at recall. \n[…]\nmmed first, hub-degree guard\nreused, direct hits never evicted, hop provenance recorded. Default\nOFF pending the pair-measured LoCoMo/Plus gate.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): flag-gated traversal of registered relation edges (#90)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T05:53:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "dea7563690ad826b235b6c729403e2d3c08d4f2d",
"body": "…mapping (#88, #89)\n\nThe ontology spec (node kinds w/ definitions, edge semantics, predicate\nregistry, trust mapping) now persists as a versioned policy Item\n(ontology/spec.policy, tag ontology.spec) seeded best-effort at skill\ningestion — any agent can fetch it via get_revision_by_tag and commit\nto\n[…]\ng: certainty/confidence are\nself-reported strength, evidence_level is a provenance grade; bands are\ntie-breakers only and never lift provenance.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): ontology spec as tagged policy Item + trust-vocabulary …",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T05:36:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3502dd64b006ad81f42d37753830cfc87c125b99",
"body": "…ing (#87)\n\nAgent relation predicates now fold onto 10 canonical edge types\n(DEPENDS_ON, USES, IMPLEMENTS, PART_OF, SUPERSEDES, SUPPORTS, CAUSES,\nCONTRADICTS, CONTAINS, RELATES_TO); unregistered or unnormalizable\npredicates (incl. CJK) become RELATES_TO with the verbatim predicate\nand normalized token preserved in edge metadata — relations are no\nlonger silently dropped, and the vocabulary no longer fragments.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): canonical relation predicate registry with synonym fold…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T05:22:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7fc2893173f91216872b67f577c77967336645cf",
"body": "Gruber-principles audit of the typed memory graph: 8 verified gaps\n(adversarially refuted, file:line evidence) and a 3-phase additive plan.\nPhase 1 = predicate registry (#87), spec policy Item (#88), trust-vocab\nmapping (#89), flag-gated relation traversal (#90).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(memory): ontology principles gap analysis + phased plan (#86)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-17T05:12:55Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4597870304407e627e87b43928d8e24d5a6f7de1",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(kumiho-memory): 0.17.3 -> 0.17.4 (_run_git LOW hardening, #82)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-16T14:27:58Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "df06ff7d0a5496946874c9bd3e0200e7d70f82cc",
"body": "From the 2026-07-16 adversarial review of the #79 fix:\n\n- L1: the re-raised TimeoutExpired now carries the post-kill drained\n output/stderr when the grace communicate() succeeds -- parity with\n subprocess.run, so callers diagnosing WHY git stalled get real bytes.\n- L2: the abandon path closes our \n[…]\now models pipes (close tracked + asserted) and a new\n _SlowDrainProc covers the grace-success path end to end.\n\n23/23 tests pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(code-capture): resolve remaining LOW review findings in _run_git",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-16T09:14:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "80e4d353d399cec30a03ea6bc027fa4b32fa3314",
"body": "Bumps pyproject.toml AND kumiho_memory/__init__.py together (the 0.17.2\nlesson) and adds release notes for the Windows _run_git hang fix (#79/#80).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(kumiho-memory): 0.17.2 -> 0.17.3 (bounded _run_git kill path, #79)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-16T04:04:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "75a17ae376adc5349c748763b639dbf1e535be2a",
"body": "Adversarial review caught a parity regression in the Popen rewrite: CPython\nsubprocess.run wraps its whole body in a bare except that kills the child\nbefore re-raising (Lib/subprocess.py:565), so a KeyboardInterrupt during\ncommunicate() never leaked a live process. The new _run_git only handled\nTime\n[…]\nt\nkills the child and re-raises, plus a regression test asserting the child\nis killed when communicate() raises KeyboardInterrupt.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(code-capture): kill the git child on any escape from communicate()",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-16T03:21:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b8333c7dbe2fac565dded1779f8c11aa78056500",
"body": "_run_git trusted subprocess.run(timeout=...) to bound every git call, but\non Windows the TimeoutExpired path inside subprocess.run calls kill() and\nthen a timeout-less communicate(). TerminateProcess is asynchronous: a git\nchild stuck in uninterruptible kernel I/O (Defender scan, disk stall) or a\nde\n[…]\nne that models\nthe stuck-pipe failure mode and asserts every wait -- including post-kill --\ncarries an explicit bound.\n\nFixes #79.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(code-capture): bound the post-kill wait in _run_git (Windows hang)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-16T02:48:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5821f6e0e9685d98884d40795b7d16fdc58a352b",
"body": "…orted 0.17.0)\n\npyproject was bumped to 0.17.1 but __init__.py's hardcoded __version__ stayed\n0.17.0, so the released package under-reported its version. No functional change.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(kumiho-memory): 0.17.2 — correct __version__ string (0.17.1 rep…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-15T06:10:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7597b9984a11fe02552c4fc5fdec5b1bdd8bcece",
"body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(kumiho-memory): release notes for 0.17.1 loop-aware Redis client",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-15T05:50:54Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "738668c991827cc80ef064bac3eb4a2b1d85704e",
"body": "…vives (0.17.1)\n\nRedisMemoryBuffer created its redis.asyncio client once and cached it. Because a\nredis.asyncio connection binds to the event loop of first use, a caller that runs\nseveral asyncio.run() calls in one process — History Backfill replays one reflect()\nper session, each under its own fres\n[…]\nAdds regression tests: owned client rebinds across event loops; injected client\nis never recreated. Full redis_memory + mcp_tools suites green.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(kumiho-memory): loop-aware Redis client so repeated reflect() sur…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-15T05:40:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a349d9e9d851f627cc38c47fbefae2364f159bf7",
"body": "… + capture_results)\n\nCompletes the batch write path for history backfill. reflect gains an\n`idempotency_prefix` parameter (threaded to tool_memory_store_batch; forces the\nbatched path for any capture count so the result shape is consistent) and returns\na positionally-aligned `capture_results` list \n[…]\nlidated end-to-end against a local CE 1.6.3 via\nthe backfill ingest_runner (batch path, capture_results, idempotent resume).\n\n0.16.3 -> 0.17.0.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(kumiho-memory): reflect bulk-replay contract (idempotency_prefix…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-15T04:03:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "df484f086b0edec4c9923d0840fada9d988e2ba3",
"body": "…ions\n\nA reflect with >=2 captures (history backfill and any bulk write) now lands in\nONE BatchCreateRevisions transaction instead of N per-capture tool_memory_store\ncalls — removing the neo4j relationship-group deadlock that per-capture\nconcurrency triggers at bulk volume and collapsing the heavies\n[…]\nvent_date parity\n\nValidated live against CE 1.6.3; adversarially reviewed (embedding-basis\ndivergence + >200 chunking findings both addressed).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(kumiho): batch multi-capture reflect writes via BatchCreateRevis…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-15T03:05:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0f818fd17d98029a1cb0e343b71fe006c206e2e6",
"body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(release): kumiho-memory 0.16.1 -> 0.16.2 (reflect event_date, #68)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-14T08:57:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "5bc0302875694c8603aad95582c0cdc7a113e73c",
"body": "…) (#68)\n\nkumiho_memory_reflect is the keyless write path, but its capture schema had\nno event_date and the handler dropped metadata — so agent-written memories\ncould not carry valid-time. A memory reflected today about something that\nhappened in March stored created_at=now with no event_date, so te\n[…]\n\nTests: 3 new cases (valid/partial, invalid/relative dropped+reported, absent\nunchanged); full test_mcp_tools.py green (34 passed).\n\nCloses #68\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(kumiho-memory): let reflect captures carry event_date (valid-time…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-14T08:26:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cffa5dece00a567954cdf728fd4a62a8b22c891c",
"body": "…out)\n\nShips the #64 fix: a 20s ceiling on every git subprocess in code_capture so\nkumiho_code_capture can't hang indefinitely on a stuck git. Bug-fix only.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(release): kumiho-memory 0.16.0 -> 0.16.1 (code_capture git-time…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-14T02:03:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3b0180482ded33afce827063c8a69d0fcb2df8bd",
"body": "… hang\n\nThe keyless capture (`capture_decisions`) resolves git — `derive_repo_id` +\n`_commit_info_for_ref` — OUTSIDE the write bound (the graph write runs in\n`run_bounded_in_thread` with `write_timeout=60s`). `_run_git` called\n`subprocess.run(...)` with NO `timeout`, so a hung git (a stuck\ncredentia\n[…]\nread`\nabandons the stalled gRPC call as a daemon thread (Python can't cancel a\nthread); repeated timeouts leak threads until the process exits.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(code-memory): bound git subprocesses so kumiho_code_capture can't…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-13T14:57:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4d4dc2413b6364b4a015d4ac508c525d9ae544eb",
"body": "test(kumiho-memory): fix stale tool counts and sys.modules['kumiho'] pollution",
"is_bot": false,
"headline": "Merge pull request #60 from KumihoIO/fix/kumiho-memory-test-pollution",
"author_name": "KaveOne | Kumiho",
"author_login": "kaveone",
"committed_at": "2026-07-13T13:05:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2fad014cb37eb0ec1ec44d6f30a548f758682c63",
"body": "…ntenance)\n\nVersion bump + RELEASE_NOTES for #59: Dream State now maintains the typed\nontology and Decision Memory graphs (keyless deterministic pass — entity\nmerge, fact dedup, orphan prune, code-decision evidence re-grade + dedup,\ncross-graph ABOUT bridge — plus an optional LLM entity-merge applied through\nthe same keyless write path). Shipped in PR #62; the live-CE dogfood\nscripts/dogfood_dream_maintenance.py is already on main.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(release): kumiho-memory 0.15.0 -> 0.16.0 (Dream State graph mai…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-13T12:22:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "025fe9d4b748d976d3ffbce45c6799211749db6e",
"body": "…hs (#59)\n\nDream State assessed only flat conversation revisions; the typed ontology\n(entity/fact) and Decision Memory ({repo}-code) graphs were never\nconsolidated. This adds a graph-maintenance pass, split by the keyless\nconstraint.\n\nKEYLESS deterministic (graph_maintenance.py, no LLM key):\n- entit\n[…]\n-dedup SUPERSEDES-cycle guard, one-pass transitive\nalias chains, prune-after-bridge ordering, and run-abort isolation.\n\nRefs #57, builds on #6.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(dream-state): maintain the typed ontology & Decision Memory grap…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-13T10:01:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7e55529ca901bb919d514dd50e844f68c6fb1e7d",
"body": "…pollution\n\nTwo clusters of pre-existing full-suite failures (both green in isolation):\n\n- Stale tool-count assertions: MEMORY_TOOLS / MEMORY_TOOL_HANDLERS are 14\n since kumiho_memory_decompose was added in 0.14.0; bump expected 13 -> 14.\n\n- Test pollution at the fake-kumiho sys.modules seam: helpe\n[…]\ne 2 remaining are known env-drift\nnoise (test_recall_memories_with_no_retriever,\ntest_anthropic_provider_defaults_are_current), left untouched.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(kumiho-memory): fix stale tool counts and sys.modules['kumiho'] …",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-13T09:06:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cc2982005e07554a5baf80483651722ddda34501",
"body": "Version bump + RELEASE_NOTES for the §6 Level-of-Evidence ranking feature,\nplus scripts/dogfood_loe_code.py — the keyless live-CE proof that a code\ndecision captured with a measurement atom self-grades 'corroborated' and\nmaterializes as a code_decision node with IMPLEMENTED_IN anchors and\nMOTIVATED_BY evidence.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(release): kumiho-memory 0.14.1 -> 0.15.0 (LoE code_why ranking)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-13T06:21:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a98eec31d1877504ee4d514c9fffd241f4cefcee",
"body": "Code decisions carried no evidence grade, so code_why ranked a thin\ncommit-message decision the same as an empirically-measured one. Two\nsurgical, keyless changes:\n\n- code_capture: stamp a deterministic evidence_level on each decision from\n its evidence atoms (measurement/review_finding/benchmark/i\n[…]\nce_grade atom mapping; corroborated>unverified tie-break;\nungraded no-op. Full suite 536 passed (2 pre-existing env-drift failures,\nunrelated).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(code-memory): Level-of-Evidence ranking in code_why (§6)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-13T06:17:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d4333d8d2e59dd25c6a30126d6538a86f8388597",
"body": "…y {}\n\nOntology decomposition is a run of blocking gRPC writes (one round-trip\nper node and per edge). Against a cloud backend a decomposition takes\n~25s, which tripped the old 25s run_bounded_in_thread deadline: on\ntimeout the wrapper returned an empty {} while the un-cancellable daemon\nworker kept\n[…]\ninstead of a bare {}. Applies\nto both decompose_and_link_agent (keyless tool) and consolidation-time\ndecompose_and_link. Bump 0.14.0 -> 0.14.1.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(ontology): decompose no longer reports a successful write as empt…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-13T04:38:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7910e78d355282bde2c3328c8aff11df8cb9ce97",
"body": "…mposition)\n\nMinor bump for the new keyless kumiho_memory_decompose feature. No new core\ndependency (kumiho>=0.10.5 unchanged).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(release): kumiho-memory 0.13.0 -> 0.14.0 (keyless ontology deco…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-13T03:37:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "5f022127fe3b651ebb6250f02b34464e1802dd0e",
"body": "…ompose)\n\nThe Claude plugin must never use an external LLM key, but ontology decomposition\n(conversation -> typed entity/fact graph) ran only via the summarizer LLM at\nconsolidation, so under the keyless plugin the typed graph was never built\n(0 entity nodes). This adds the keyless path, mirroring k\n[…]\nmd must instruct the agent to call\nkumiho_memory_decompose after a substantive exchange (token-lean, from the\ncompact summary, salience-gated).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(ontology): keyless agent-driven decomposition (kumiho_memory_dec…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-13T03:35:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "94fd3b01bba7aac3418e7b9d8f93b648e68a282c",
"body": "…capture)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(release): kumiho-memory 0.12.1 -> 0.13.0 (keyless agent-driven …",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T15:52:24Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b3320ded99ce5a1737ce513ea3343b1b1cb12802",
"body": "…mory capture\n\nThe plugin runs inside Claude; requiring a separate OpenAI/Anthropic key to\nextract the *why* betrays the point. kumiho_memory_reflect already proves the\npattern for conversation memory (the agent's own model identifies what\nmatters; the tool just stores it, no key) — this brings the \n[…]\nrnative round-trips. Unit: 87 code-domain\ntests (2 new — keyless write with anchor-union + hallucination drop, bad-ref\nloud error).\n\nIssue #43.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): kumiho_code_capture — keyless, agent-driven Decision Me…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T15:43:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9d35bffd824364d4294288032da063429ad545c4",
"body": "Decision Memory imports kumiho._text.slugify, absent from published core\n0.10.4. Pin kumiho>=0.10.5 (the companion core release) so a clean\n'pip install kumiho-memory' actually resolves a working core.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(release): kumiho-memory 0.12.1 — require kumiho>=0.10.5",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T14:35:29Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "be3365cff581a1648e877de2cd23b7b08adce8b2",
"body": "…mining)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(release): bump kumiho-memory 0.11.0 -> 0.12.0 (Phase 2 session …",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T14:21:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a71a7aeed9c5260aa07ff5d3bdd500436c9f1ef9",
"body": "…closer)\n\nThe SDK half of closing the plugin loop. A commit hook mines WHAT landed;\nthis lets a SessionEnd worker mine WHY the session produced it.\n\n- parse_claude_transcript(): Claude Code / Cowork transcript JSONL ->\n mine_session messages (text kept, tool_use marked, tool_result and\n system-rem\n[…]\nKorean/English mixed form — the natural-session signal the design\npromised, on real conversation not a synthetic dogfood.\n\nIssue #43 (Phase 2).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): code-mine-session CLI + Claude transcript parser (loop-…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T14:11:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6b2594e8714aca65d300a00bf881c76f10e6618c",
"body": "…s + crash-safety)\n\nThe other agent's adversarial-review commit (9daf38b) fixed the PII/spec\naxis; these are the correctness/crash-safety findings that survived. All\nfour are red->green pinned (each fails on the pre-fix tree with the test\nkept).\n\n- delta re-mine never refreshed the marker (critical)\n[…]\nprinciple). (code_session.py)\n\nSuite: 523 passed (+4), 3 skipped; the 2 failures are the pre-existing\nenv-drift baseline.\n\nIssue #43 (Phase 2).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): 4 review findings the standards sweep missed (correctnes…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T13:34:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bda57e10d7989bd03280a77beb1518a5a002bc52",
"body": "…ds sweep\n\nSpec-axis findings (vs SESSION_MINING_DESIGN.md at dde083a):\n\n- session_line PII/credential leak (critical): the first user turn fed\n STORED embedding_text (session marker + every standalone decision) raw —\n never redacted, never credential-screened, violating §5.1's single-text-\n stre\n[…]\ne: 518 passed (+5 new), 4 skipped; the 2 remaining failures are the\npre-existing env-drift baseline (verified identical on the pristine\nbranch).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): session mining adversarial-review fixes — spec + standar…",
"author_name": "Morpheus",
"author_login": null,
"committed_at": "2026-07-11T08:35:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "80ec8c82922a2550796aadcd32dda3dea31e4b97",
"body": "Full-prose correlation text (0.14 vs 0.26 measured), S1 floor 0.25 -> 0.20,\nunique-suffix path resolution against ls-files.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(memory): session mining design — dogfood calibration amendments",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T05:12:53Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a52ef136db74446ec10e5a2c1e7b34c2298baf46",
"body": "…tion\n\nLive gate (scripts/dogfood_session_memory.py, CE at 127.0.0.1:9190,\nmachine-judged): enrich-not-create, additive constitution (before/after\nsnapshot byte-identical on the commit decision), the session-only rejected\nalternative surfaced by why() with session:* provenance, no ghost commits,\nsta\n[…]\nit suite: 29 passed (2 new: unique-suffix resolution, full-prose\ncorrelation regression pinned to the live-measured pair).\n\nIssue #43 (Phase 2).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): session mining live dogfood gate 7/7 + measured calibra…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T05:11:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "10df7b9cb9fc973155a8854cdcb7ed085dfe28a5",
"body": "…e 2)\n\nThe commit records the winning choice; the session that produced it holds\nwhat the commit loses — rejected alternatives, measurements in original\nform, the moment agreement was reached. New code_session.py mines an agent\nsession's transcript into the code-decision graph per\ndocs/SESSION_MININ\n[…]\nry-surface). Full suite 512 passed; the 2 failures are pre-existing\nenv drift (verified identical on the pre-change tree).\n\nIssue #43 (Phase 2).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): session mining — the conversation as a why-source (Phas…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T05:01:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c55316afeea98a286481b2d78f92d44a207944f9",
"body": "…independent drafts)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(memory): Phase 2 session mining design (judged synthesis of two …",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T04:42:27Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "9e26b745346711818605aec06a1ef4ea63938430",
"body": "Phase 1's review verdict ('no client deprecate API') was too pessimistic:\nItem.set_deprecated exists at the item level. --force now works as the\ndesign originally specified: a pre-pass deprecates the commit's existing\nDECISION nodes (evidence atoms are verbatim-slug-shared across commits and\nnever d\n[…]\ncycle on a real synthetic repo — old generation retired,\nconverged items restored, fresh revisions written, status active.\n\nIssue #43 (Phase 2).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): true --force — deprecate-then-rewrite (Phase 2)",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T04:24:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "91706959684bc7a2a29b5400520585be669c379f",
"body": "README brought current from its stale 0.6.x status block: Decision Memory\nsection (opt-in gate, code-ingest/why usage, lexicographic fusion, belief\nrevision, physical isolation, live-verified pointer), write-time ontology\nand Decision Memory added to Features, MCP tools table extended to the\ntwo opt\n[…]\nntry (capture pipeline, 3-leg why(), sha-free\nidentity, surface, isolation + live dogfood + adversarial-review notes).\nVersion 0.10.1 -> 0.11.0.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(memory): release 0.11.0 — Decision Memory + consolidated README",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T03:44:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b5d17958e1ed4bca8cc706d2b424b6e9aba2b773",
"body": "…findings\n\n4-lens review (isolation / write / query / design-fidelity), 33 agents,\nrefuter-verified: 29 raw -> 26 confirmed (2 critical, 12 major, 12 minor).\nAll confirmed findings addressed:\n\nCRITICAL — supersede demotion identity split: demotion wrote a NEW revision\nwhile every edge stays pinned t\n[…]\nsed; remaining 2 failures\nare the pre-existing env baseline (3 of the old 5 were incidentally cured\nby installing the openai extra).\n\nIssue #43.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): Decision Memory adversarial-review fixes — 26 confirmed …",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T03:34:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6adc66355507b5dd2fa3d3542811d88d9c8a2958",
"body": "scripts/dogfood_code_memory.py: the machine-judged live gate from the\ndesign (§7.2) — mines this repo's own recent 40 commits into a live CE,\nthen asks the three questions an agent would ask and judges top-3\ndecisions by expected-commit provenance + verbatim-evidence substring.\n\nFirst live run score\n[…]\n (10f113e)\n\n40 commits -> 37 decisions, 35 evidence atoms, 65 anchors, 172 edges,\n0 errors, 7 LLM calls (~$0.03). Issue #43 success criterion 5.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): Decision Memory P3 — live dogfood gate passes 3/3",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T02:57:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cc1fc316ff70a9eedaebcc692ce312adad286c54",
"body": "The 8-stage capture pipeline (docs/DECISION_MEMORY_DESIGN.md §4):\nenumerate (git subprocess, zero new deps) → deterministic prefilter\n(false-negative-asymmetric: only certain noise cut — merges without body,\nlockfile-only, bumps; conventional-commit type is never a criterion) →\nmessage-first evidenc\n[…]\ncrash-injection proof that no marker survives a failed write.\nFull suite: 468 passed, failures identical to the 5-test env baseline.\n\nIssue #43.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): Decision Memory P2 — git commit-mining capture adapter",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T02:45:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f91e68ca9de29d3c0157c2acc4fc974d33eef428",
"body": "…y() query\n\nImplements the deterministic half of the code-decision domain\n(docs/DECISION_MEMORY_DESIGN.md §9 P1):\n\n- code_decisions.py — single-source schema module: kinds/spaces/edge\n constants, CodeMemoryConfig, normalize_path (write/query shared contract),\n sha-free slugs (decision = title+auth\n[…]\n provably never imports the code modules). Full suite: 457 passed,\nfailures identical to the pre-existing 5-test env-drift baseline.\n\nIssue #43.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): Decision Memory P1 core — schema, git anchors, 3-leg wh…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T02:36:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "60f287ae6f96f1a77c2e2b29b6461a386340e2a1",
"body": "…gn judge panel)\n\nIssue #43. Three independent designs (schema-first / capture-first /\nquery-first) were produced against the live codebase, scored by a 3-lens\njudge panel (implementability, query product value, non-rotting + capture\nquality), and synthesized: A's schema skeleton (24/30) + B's captu\n[…]\ntadata), commit\nmarker idempotency, verbatim-quoted evidence atoms, 3-leg lexicographic\nwhy() query, zero new dependencies, zero server changes.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(memory): Decision Memory Phase 1 design (synthesized from 3-desi…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-11T02:24:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d91d22cc83f7847969bc53eabe5212c11130c0de",
"body": "… loop\n\nThe opt-in cross-encoder stage (KUMIHO_RERANK_CROSS_ENCODER=1) is CPU-bound\nONNX inference; called inline from the async recall paths it blocked the\nevent loop and serialized every concurrent recall (measured on the\n2026-07-10 full-LoCoMo run: a concurrency-4 harness degraded to ~1\neffective\n[…]\nntity routing for all three gate branches, and a\ncall-site guard so reverting either recall path to sync rerank fails the\nsuite. Version 0.10.1.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): offload the fastembed cross-encoder rerank off the event…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-10T14:08:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "90029fb646396121d772bcbd96d87a7be169a2d0",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(memory): align __version__ to 0.10.0 + note reformulate-draws knob",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-10T08:00:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d0a78ec1df2b40a2a013bb0121fa332d11b5a98e",
"body": "…ion + implications parity\n\nThree read-side improvements from the LoCoMo-Plus miss autopsy:\n\n- compose_context now partitions bridge/fact evidence AFTER conversations\n unconditionally — previously only when the top-K cut fired, so top_k=0\n (unlimited) callers got a global score sort where typed on\n[…]\ndy carried them): prospective-indexing text is the\n write-time answer to oblique future triggers, so revision selection must\n score on it too.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(memory): unconditional additive partition + multi-draw reformulat…",
"author_name": "kaveone",
"author_login": "kaveone",
"committed_at": "2026-07-10T05:24:57Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 1,
"commits_last_year": 171,
"latest_release_at": "2026-07-22T03:04:57Z",
"latest_release_tag": "v1.0.0",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 9,
"days_since_latest_release": 7,
"mean_days_between_releases": null
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "kumiho-memory",
"exists": true,
"license": "MIT",
"keywords": [
"kumiho",
"memory",
"ai-agents",
"redis",
"cognitive-memory",
"summarization",
"conversational-ai",
"mcp",
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Software Development :: Libraries :: Python Modules",
"Typing :: Typed"
],
"ecosystem": "pypi",
"matches_repo": true,
"registry_url": "https://pypi.org/project/kumiho-memory/",
"is_deprecated": false,
"latest_version": "1.1.0",
"repository_url": "https://github.com/KumihoIO/kumiho-memory",
"versions_count": 65,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": "2026-02-09T08:37:26.470113Z",
"latest_published_at": "2026-07-30T01:11:53.460936Z",
"latest_version_yanked": null,
"days_since_latest_publish": 0
}
]
},
"popularity": {
"forks": 0,
"stars": 0,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [],
"complete": true,
"collected": 0,
"total_stars": 0,
"collected_at": null
},
"open_issues_and_prs": 2
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 159367,
"source_files_sampled": 87,
"oversized_source_files": 10,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"pyproject.toml"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"pypi"
],
"dependencies": [
{
"name": "kumiho",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=0.10.7"
},
{
"name": "redis",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=5.0.0"
},
{
"name": "requests",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=2.31.0"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 1,
"open_issues": 2,
"closed_ratio": 0,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "kaveone",
"commits": 160,
"avatar_url": "https://avatars.githubusercontent.com/u/175288097?v=4"
},
{
"type": "User",
"login": "codex",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/267193182?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.994
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"publish.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/28 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "project was created within the last 90 days. Please review its contents carefully",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 1,
"reason": "dependency not pinned by hash detected -- score normalized to 1",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 10,
"reason": "GitHub workflow tokens follow principle of least privilege",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "17f2efb7a4fdf7c5d18a384adb6de8193270f1d1",
"ran_at": "2026-07-30T01:18:35Z",
"aggregate_score": 4.5,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-30T01:11:57Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-30T01:10:36Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 1,
"created_at": "2026-07-26T07:04:17Z",
"last_comment_at": "2026-07-26T07:12:04Z",
"last_comment_author": "kaveone"
},
{
"number": 3,
"created_at": "2026-07-30T01:11:38Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/KumihoIO/kumiho-memory",
"host": "github.com",
"name": "kumiho-memory",
"owner": "KumihoIO"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 52,
"inputs": {
"security": 45,
"vitality": 70,
"community": 24,
"governance": 46,
"engineering": 71
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 70,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"commits_last_year": 171,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 9
},
"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": "9/52 weeks with commits",
"points": 6.2,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 9
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "171 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 171
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "good",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 84,
"inputs": {
"releases_count": 1,
"latest_release_tag": "v1.0.0",
"releases_from_tags": false,
"days_since_latest_release": 7,
"mean_days_between_releases": null
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "1 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 1
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 7 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 7
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "cadence unknown (single release)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "release_cadence_unknown",
"params": {}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "critical",
"name": "Community & Adoption",
"value": 24,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 0,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "0 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 0
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 46,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.994
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 99% of commits",
"points": 0.1,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 99
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "at_risk",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 38,
"inputs": {
"merged_prs": 1,
"open_issues": 2,
"closed_issues": 0,
"issue_closed_ratio": 0,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "0% of issues closed",
"points": 0,
"status": "missed",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 0
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "1/1 decided PRs merged",
"points": 38.2,
"status": "met",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 1,
"decided": 1
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/28 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 46,
"inputs": {
"followers": 6,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "KumihoIO",
"public_repos": 16,
"account_age_days": 148
},
"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": "6 followers of KumihoIO",
"points": 6.1,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 6,
"login": "KumihoIO"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "16 public repos, account ~0 yr old",
"points": 9.8,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 16
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"kumiho-memory"
],
"ecosystems": "pypi",
"any_deprecated": false,
"min_days_since_publish": 0
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on pypi",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "pypi"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 0 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 0
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "65 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 65
}
}
],
"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": 71,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 68,
"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": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 45,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 45,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 4.5
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/28 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 1",
"points": 0.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "GitHub workflow tokens follow principle of least privilege",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 1
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "at_risk",
"name": "AI Readiness",
"value": 38,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 100,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "at_risk",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 33,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.91,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "91 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 91,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 1",
"points": 1,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "at_risk",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 49,
"inputs": {
"primary_language": "Python",
"largest_source_bytes": 159367,
"source_files_sampled": 87,
"oversized_source_files": 10
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Python without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "Python"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "10/87 source files over 60KB",
"points": 48.7,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 87,
"oversized": 10
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"deps.dev does not index pypi:kumiho-memory@1.1.0; advisories assessed against the repository dependency graph instead"
],
"report_type": "repository",
"generated_at": "2026-07-30T01:18:42.540438Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/k/KumihoIO/kumiho-memory.svg",
"full_name": "KumihoIO/kumiho-memory",
"license_state": "standard",
"license_spdx": "MIT"
}