Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-25 10:42 UTC

anatolykoptev / memdb

MemDB — Personal Memory Database for AI Agents

Go · PythonApache-2.0★ 7 Sterne⑂ 0 Forksseit Feb. 2026Auf GitHub ansehen ↗

anatolykoptev/memdb erreicht einen Gesundheitsindex von 66 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (92/100) ab, am schwächsten bei Security (45/100). Zuletzt heute aktualisiert. 2 Mitwirkende tragen den Großteil der jüngsten Arbeit.

66
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

66
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Anatoly KoptevPersönliches Konto
12 Follower91 öffentliche Reposseit Okt. 2025oxpulse.chat

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
Gogithub.com/anatolykoptev/memdb/memdb-gov0.23.2-2vor 0 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

92Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
29.8/36Commit-Rhythmus — 43/52 Wochen mit Commits
18/18Commit-Volumen — 1.541 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year1.541
human_commit_share0,84
days_since_last_push0
active_weeks_last_year43
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 8 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 0 Tagen
27/27Release-Rhythmus — ein Release etwa alle 13,1 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count8
latest_release_tagmemdb-go/v0.23.2
releases_from_tagsnein
days_since_latest_release0
mean_days_between_releases13,1

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

50Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
12.6/60Stars — 7 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars7
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.0)
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductja
has_pull_request_templateja

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

59Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
25.2/54Bus-Faktor — 2 Beitragende decken die Hälfte aller Commits ab
13/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 42 % der Commits
13.5/13.5Breite der Beitragenden — 34 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 12 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor2
contributors_sampled34
top_contributor_share0,424
Wie die Bewertung erfolgt
12.5/46.8Issue-Lösungsquote — 27 % der Issues geschlossen
35.4/38.3PR-Annahme — 331/358 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/22 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs331
open_issues30
closed_issues11
issue_closed_ratio0,268
closed_unmerged_prs27
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
8/25Reichweite des Inhabers — 12 Follower von anatolykoptev
14.5/25Kontohistorie — 91 öffentliche Repos, Kontoalter ca. 0 Jahre
Verwendete Eingangsdaten
followers12
owner_typeUser
is_verified
owner_loginanatolykoptev
public_repos91
account_age_days274
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

92Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf go
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 0 Tagen
12/20Versionshistorie — 2 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgithub.com/anatolykoptev/memdb/memdb-go
ecosystemsgo
any_deprecatednein
min_days_since_publish0

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

79Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 9 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .golangci.yaml, .golangci.yml
9.6/9.6Pre-Commit-Hooks
6.4/6.4.editorconfig
8/20OpenSSF Scorecard: CI-Tests — 5 out of 11 merged PRs checked by a CI test -- score normalized to 4
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfigja
has_linter_configja
has_precommit_configja
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
0/10Wiki
Verwendete Eingangsdaten
topics
has_wikinein
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

45Gefährdet · 16 % des Gesamtindex

Sicherheitslage

45Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
1/2.5CI-Tests — 5 out of 11 merged PRs checked by a CI test -- score normalized to 4
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/22 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 12 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
1.5/7.5Vulnerabilities — 8 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate4,5

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

88Exzellent · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md, memdb-go/vendor/github.com/jackc/pgx/v5/CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 84 von 84 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_filesCLAUDE.md, memdb-go/vendor/github.com/jackc/pgx/v5/CLAUDE.md
agent_instruction_max_bytes3.880
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Makefile, memdb-go/vendor/connectrpc.com/connect/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/fpconv/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/proto/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/server/Makefile, memdb-go/vendor/github.com/anatolykoptev/go-stealth/Makefile, memdb-go/vendor/github.com/anatolykoptev/skillkit/Makefile, memdb-go/vendor/github.com/daulet/tokenizers/Makefile, memdb-go/vendor/github.com/exaring/otelpgx/Makefile, memdb-go/vendor/github.com/felixge/httpsnoop/Makefile, memdb-go/vendor/github.com/munnerz/goautoneg/Makefile, memdb-go/vendor/github.com/oapi-codegen/runtime/Makefile, memdb-go/vendor/github.com/prometheus/procfs/Makefile, memdb-go/vendor/github.com/redis/go-redis/v9/Makefile, memdb-go/vendor/github.com/yuin/gopher-lua/Makefile, memdb-go/vendor/github.com/yuin/gopher-lua/parse/Makefile, memdb-go/vendor/go.opentelemetry.io/otel/Makefile, memdb-go/vendor/go.uber.org/atomic/Makefile, memdb-go/vendor/google.golang.org/grpc/Makefile
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .golangci.yaml, .golangci.yml
11/11Statische Typprüfung — Go (statisch typisiert)
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
10/10Belegte Agentenpraxis — 38 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesCargo.lock, go.sum
has_dockerfileja
typed_languageja
bootstrap_filesMakefile, memdb-go/vendor/connectrpc.com/connect/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/fpconv/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/proto/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/server/Makefile, memdb-go/vendor/github.com/anatolykoptev/go-stealth/Makefile, memdb-go/vendor/github.com/anatolykoptev/skillkit/Makefile, memdb-go/vendor/github.com/daulet/tokenizers/Makefile, memdb-go/vendor/github.com/exaring/otelpgx/Makefile, memdb-go/vendor/github.com/felixge/httpsnoop/Makefile, memdb-go/vendor/github.com/munnerz/goautoneg/Makefile, memdb-go/vendor/github.com/oapi-codegen/runtime/Makefile, memdb-go/vendor/github.com/prometheus/procfs/Makefile, memdb-go/vendor/github.com/redis/go-redis/v9/Makefile, memdb-go/vendor/github.com/yuin/gopher-lua/Makefile, memdb-go/vendor/github.com/yuin/gopher-lua/parse/Makefile, memdb-go/vendor/go.opentelemetry.io/otel/Makefile, memdb-go/vendor/go.uber.org/atomic/Makefile, memdb-go/vendor/google.golang.org/grpc/Makefile
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0,38
toolchain_manifestsexamples/go/quickstart/go.mod, examples/go_client/go.mod, memdb-go/go.mod, memdb-go/vendor/github.com/daulet/tokenizers/Cargo.toml
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
54.8/55Handhabbare Dateigrößen — 3/675 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes658.395
source_files_sampled675
oversized_source_files3
Wie die Bewertung erfolgt
40/40API-Schema (OpenAPI/GraphQL/proto) — docs/openapi.json, memdb-go/api/openapi.yaml, memdb-go/internal/server/static/openapi.json, memdb-go/proto/memdb/v1/chat.proto, memdb-go/proto/memdb/v1/memory.proto, memdb-go/proto/memdb/v1/scheduler.proto
20/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalja
api_schema_filesdocs/openapi.json, memdb-go/api/openapi.yaml, memdb-go/internal/server/static/openapi.json, memdb-go/proto/memdb/v1/chat.proto, memdb-go/proto/memdb/v1/memory.proto, memdb-go/proto/memdb/v1/scheduler.proto

Eckdaten

7GitHub-Sterne
34Mitwirkende
1.541Commits, letzte 12 Monate
0Tage seit letztem Push
8Releases
2Bus-Faktor
30offene Issues
GoPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

OpenSSF Scorecard 4.5 / 10
4.5Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-25 10:41 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
4CI-Tests5 out of 11 merged PRs checked by a CI test -- score normalized to 4
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/22 approved changesets -- score normalized to 0
10Contributorsproject has 12 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
2Vulnerabilities8 existing vulnerabilities detected
Direkte Abhängigkeiten 26
RegistryPaketVersionsvorgabeManifest
Goconnectrpc.com/connectv1.19.1memdb-go/go.mod
Gogithub.com/alicebob/miniredis/v2v2.38.0memdb-go/go.mod
Gogithub.com/anatolykoptev/go-enginev1.3.1memdb-go/go.mod
Gogithub.com/anatolykoptev/go-kitv0.97.2memdb-go/go.mod
Gogithub.com/anatolykoptev/go-stealthv1.19.1memdb-go/go.mod
Gogithub.com/anatolykoptev/skillkitv0.2.2memdb-go/go.mod
Gogithub.com/daulet/tokenizersv1.25.0memdb-go/go.mod
Gogithub.com/google/uuidv1.6.0memdb-go/go.mod
Gogithub.com/jackc/pgx/v5v5.9.2memdb-go/go.mod
Gogithub.com/modelcontextprotocol/go-sdkv1.5.0memdb-go/go.mod
Gogithub.com/oapi-codegen/runtimev1.1.2memdb-go/go.mod
Gogithub.com/prometheus/client_golangv1.23.2memdb-go/go.mod
Gogithub.com/prometheus/client_modelv0.6.2memdb-go/go.mod
Gogithub.com/qdrant/go-clientv1.16.2memdb-go/go.mod
Gogithub.com/redis/go-redis/v9v9.18.0memdb-go/go.mod
Gogithub.com/yalue/onnxruntime_gov1.25.0memdb-go/go.mod
Gogo.opentelemetry.io/contrib/instrumentation/net/http/otelhttpv0.68.0memdb-go/go.mod
Gogo.opentelemetry.io/otelv1.43.0memdb-go/go.mod
Gogo.opentelemetry.io/otel/exporters/prometheusv0.65.0memdb-go/go.mod
Gogo.opentelemetry.io/otel/metricv1.43.0memdb-go/go.mod
Gogo.opentelemetry.io/otel/sdkv1.43.0memdb-go/go.mod
Gogo.opentelemetry.io/otel/sdk/metricv1.43.0memdb-go/go.mod
Gogo.opentelemetry.io/otel/tracev1.43.0memdb-go/go.mod
Gogolang.org/x/syncv0.22.0memdb-go/go.mod
Gogolang.org/x/timev0.14.0memdb-go/go.mod
Gogoogle.golang.org/protobufv1.36.11memdb-go/go.mod
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 80214,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 3769589,
        "Shell": 39196,
        "Python": 1212963,
        "PLpgSQL": 16631,
        "Makefile": 1526,
        "Dockerfile": 1344,
        "Go Template": 2570
      },
      "pushed_at": "2026-07-25T01:20:22Z",
      "created_at": "2026-02-10T01:00:20Z",
      "owner_type": "User",
      "updated_at": "2026-07-25T01:19:57Z",
      "description": "MemDB — Personal Memory Database for AI Agents",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go",
        "Python"
      ]
    },
    "owner": {
      "blog": "https://koptev.me",
      "name": "Anatoly Koptev",
      "type": "User",
      "login": "anatolykoptev",
      "company": "oxpulse.chat",
      "location": "San Francisco",
      "followers": 12,
      "avatar_url": "https://avatars.githubusercontent.com/u/239934030?v=4",
      "created_at": "2025-10-24T06:10:43Z",
      "is_verified": null,
      "public_repos": 91,
      "account_age_days": 274
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "memdb-go/v0.23.2",
          "kind": "other",
          "published_at": "2026-07-25T01:20:07Z"
        },
        {
          "tag": "v0.23.0",
          "kind": "minor",
          "published_at": "2026-04-26T23:31:35Z"
        },
        {
          "tag": "v0.22.0",
          "kind": "minor",
          "published_at": "2026-04-25T16:38:32Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2026-04-25T04:39:28Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2026-04-24T06:35:20Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-04-23T23:16:17Z"
        },
        {
          "tag": "v1.0.4",
          "kind": "patch",
          "published_at": "2026-04-18T13:02:54Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-04-24T00:18:15Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "0f97852fb03397c0221fb4f5d13a76afd5beedf1",
          "body": "Co-authored-by: krolik-release-bot[bot] <306658548+krolik-release-bot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release memdb-go 0.23.2 (#400)",
          "author_name": "krolik-release-bot[bot]",
          "author_login": "krolik-release-bot[bot]",
          "committed_at": "2026-07-25T01:19:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed9a346fc397b20b3469a438361a3edb9d9770b3",
          "body": "… (#403)\n\n* fix(data_loss): persist memories on 429 ladder exhaustion via typed StatusError + fine→fast fallback\n\nBUG A (data_loss): when the atomic-extract LLM ladder was exhausted (429/5xx),\nshouldFallbackToFast could not detect the error — it only matched string\nsubstrings and context errors, not\n[…]\n[bot]@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(data_loss): persist memories when the LLM 429 ladder is exhausted…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-25T00:48:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "067940a16aedcc851468e45c143228523ccd1edf",
          "body": "These tests had never run before — the memdb-test-pg Docker image was\nunavailable until the previous commit. Now that CI can actually execute\nthem, five root causes surfaced:\n\n1. stubEmbedder returns 1024-dim zero vectors → pgvector cosine = NaN\n   → isDuplicate treats NaN >= threshold as match → si\n[…]\nsts panicked with nil pointer. Replaced with\n   noop.NewMeterProvider().\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(test): fix pre-existing livepg test failures exposed by Docker image",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T22:56:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2d3f67d5aa8beaf0ac6d42ec80eb547994e982af",
          "body": "add_feedback_livepg_test.go called llm.NewClient with 4 args instead\nof 5 (missing fallbackModels []string). The livepg build tag meant this\nwas never compiled locally — only the CI livepg job catches it, and\nthat job was broken until the test-pg Docker image was pushed to GHCR.\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(test): add missing fallbackModels arg to livepg test",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T21:35:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dc72e4024ec522a2c1315ad749b9a276d28211ba",
          "body": "The pgvector/pgvector:pg17 base image lacks ca-certificates, causing\ngit clone of Apache AGE to fail with \"server certificate verification\nfailed\". Build and push the composite test-pg image (pgvector + AGE\n1.6.0) to GHCR so the livepg CI job can use it.\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(ci): add ca-certificates to test-pg image, push to GHCR",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T21:13:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "145922bf0a1b7eedb9c128994d23e1697c53e39f",
          "body": "…ect (#399)\n\n* refactor: dedup tier 1 — 4 duplicate groups consolidated\n\nVaelor find_duplicates reported 179 candidates (49 very-close). After\nmanual review, 4 groups were TRUE duplicates with identical behavior:\n\n1. parseLogLevel (sim=0.96) — cmd/mcp-server + cmd/server\n   → internal/util/loglevel.\n[…]\nm>\n\n* style: gofmt add_props.go\n\n---------\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: dedup tier 1 + migrate language detection to go-kit/langdet…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T06:46:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5ed2fcaa4a3634213c16b0ceca43aa664cae07fe",
          "body": null,
          "is_bot": false,
          "headline": "fix(goreleaser): rename archives to strip -SNAPSHOT-<sha> suffix",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T04:12:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5553df0375095bd9a7e24d945462bb7f685366c",
          "body": null,
          "is_bot": false,
          "headline": "fix(goreleaser): strip memdb-go/ prefix from GORELEASER_CURRENT_TAG",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T03:27:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0877d7cd5c8d185ad8093a694103e12c72520700",
          "body": "…glob)",
          "is_bot": false,
          "headline": "fix(goreleaser): use .Version in archive name (tag has slash, breaks …",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T03:24:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c44f41e2bf610e74d30153e7736fae66b8495e98",
          "body": "…t rename (#397)\n\n- docker-publish triggered only by the Go component's release tags\n  (memdb-go/v*, memdb-go-v*): the workflow builds ./memdb-go/Dockerfile,\n  but release-please now cuts memdb-go/vX.Y.Z which the old v*-only\n  filter never matched — Go releases silently published no image, while\n  \n[…]\nhub-app-token bumped v1 -> v2.\n- App renamed memdb-release-bot -> krolik-release-bot (same App ID /\n  key / installation) — comments updated.\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@github.com>",
          "is_bot": false,
          "headline": "ci(release): Go-component tags drive docker-publish; app-token v2; bo…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T03:18:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dbd08800fa09371003031200f18033d174f7fc3d",
          "body": null,
          "is_bot": false,
          "headline": "ci(goreleaser): debug dist path for artifact upload",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T03:18:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d40a9fd27b620ee2b640ece43a01b0aab8d1eab",
          "body": "Co-authored-by: krolik-release-bot[bot] <306658548+krolik-release-bot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release memdb-go 0.23.1 (#398)",
          "author_name": "krolik-release-bot[bot]",
          "author_login": "krolik-release-bot[bot]",
          "committed_at": "2026-07-19T03:13:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29d759cfbf951a56b9ff95bbb56155927bedee66",
          "body": "Research (code-research Mode 2) found the standard pattern used by\nhop-top/ben and confirmed by release-please schema:\n\n1. tag-separator: \"/\" in release-please-config.json\n   - Tags: memdb-go/vX.Y.Z (slash, Go proxy compatible)\n   - include-component-in-tag: true + component: memdb-go\n\n2. GitHub App\n[…]\npp with Contents+PullRequests write permissions, installed\non the repo).\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "ci(release): standard release-please + goreleaser pattern for Go subdir",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T03:10:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9b61ae4ca4646de37eafcd91d7e877791255351f",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release memdb-go 0.23.1 (#396)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T02:36:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07d962e93595ff5a27f6ae45f874d87529085517",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): reset manifest 0.23.0 for clean re-release test",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T02:34:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a31f3d5a2e8ef373fb6bfdbc293f4ba08b1ccfdb",
          "body": "…sn't trigger separate workflow)",
          "is_bot": false,
          "headline": "ci(release): goreleaser back in release-please workflow (tag push doe…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T02:34:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8406eb53cb8e521fe22bff81663a3e4f7f3e51e0",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release memdb-go 0.23.1 (#395)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T02:29:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3dd12410754ad6dd7c6ea00e456ba6bb284d0516",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): reset manifest to 0.23.0 (re-release with goreleaser)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T02:26:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9a81364081b06b63d21352f0b6dcb5229710dc2",
          "body": "release-please creates the tag when the release PR is merged (separate\nworkflow run from the one that opened the PR). goreleaser gated on\nrelease_created never fires because release_created is only true in the\ntag-creating run, not subsequent runs.\n\nMove goreleaser to a separate workflow triggered b\n[…]\n(memdb-go-v*). This is the standard release-please + goreleaser pattern.\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "ci(release): split goreleaser into tag-triggered workflow",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T02:26:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ca466e4b1f58aab405b8745e341a802cc903b738",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release memdb-go 0.23.1 (#394)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T02:21:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "000952d99085e3217beb1a58d1714de4fdcab7bd",
          "body": "node20 EOL April 2026. v5 uses node24, same API.\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "ci: bump actions/checkout v4 → v5 (node24) across all workflows",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T02:21:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3a42b3fcfc0799e38cd0cb708614524317e2b5d1",
          "body": "…format\n\nrelease-please standard with include-component-in-tag produces\nmemdb-go-vX.Y.Z (dash). Keep it — it's the convention release-please\nexpects. Remove the rename-tag hack job.\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "ci(release): drop tag rename workaround, use release-please standard …",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T02:17:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4e2a843488f1c513056cf05c73f5ffce7ff90ef7",
          "body": "v5 is a node24-only upgrade (node20 EOL April 2026). No API changes.\nEliminates the node20 deprecation warning in CI logs.\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "ci(release): bump release-please-action v4 → v5 (node24)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T02:13:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c723e9c0acfd26b6f2402688273c9262447efb28",
          "body": "… output\n\nThe rename step was in the release-please job, but release_created is only\ntrue on the run that merges the release PR (separate from the run that\nopens it). Move rename to a separate job triggered by tag push\n(refs/tags/memdb-go-v*).\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(release): rename-tag job triggers on tag push, not release-please…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T02:10:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3e1525d1e3f8dcb68ff9a84abb5d40a8c334d817",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release memdb-go 0.23.1 (#392)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T02:03:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc6eafe7cb53129899b24cb8a178c9643216f229",
          "body": "release-please-action v4 with include-component-in-tag creates tags as\nmemdb-go-vX.Y.Z (dash). Go proxy for subdir modules expects memdb-go/vX.Y.Z\n(slash). Add post-release step that renames the tag so `go get` works.\n\nConfig: component=memdb-go + include-component-in-tag=true (tag-prefix in\nconfig-file is ignored by action v4 for single-package repos).\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(release): rename tag dash→slash post-release for Go proxy",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T01:58:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4854fcf36f1998e14dfd94fa5e1d4a9b4eeba03c",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.23.1 (#391)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T01:51:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "733338572af37b98a5e30c5d3059fa489bf1fbcd",
          "body": "…(action v4 tag-prefix only works with root package)",
          "is_bot": false,
          "headline": "fix(release): path=memdb-go + package key '.' + tag-prefix memdb-go/ …",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T01:49:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa06539e4f73fe52046a3eb455d75a02eb4c0c54",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.23.1 (#390)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T01:45:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc5338e7af1060c238eb0e38a8a28cba1252e9ed",
          "body": "…g-prefix ignored by v4)",
          "is_bot": false,
          "headline": "fix(release): pass tag-prefix via action with (config-file package ta…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T01:43:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c595539bd06ed561018d2f00ec90716ff9c0cc26",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.23.2 (#389)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T01:40:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "709c490aba37e971a0d71934de59f3e7409085bc",
          "body": "…Go proxy expects slash not dash)",
          "is_bot": false,
          "headline": "fix(release): include-component-in-tag false + tag-prefix memdb-go/ (…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T01:37:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3bdd561c9b126592ec5330a6aabff2019d326aa1",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release memdb-go 0.23.1 (#388)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T01:33:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "147836bc8e8a5ae95f6b3c48e24cfc9f7dda929c",
          "body": null,
          "is_bot": false,
          "headline": "fix(release): add tag-prefix memdb-go/ for Go proxy subdir tag format",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T01:31:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4a29ddb4d88246228da8bdc9b5360d3e6912507",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release memdb-go 0.23.2 (#386)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T01:26:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57efcdfcd5f75b1419295ec7102fc2ab3986f7fd",
          "body": "…bleshooting docs)",
          "is_bot": false,
          "headline": "fix(release): use component field for tag prefix (release-please trou…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T01:23:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dabb6a9a0b47c393e26b435316c7ffd5ff3c8934",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.23.1 (#385)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T01:19:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44d83eddb0d99bdb0a992b87ee5e4ea52aef8bf3",
          "body": "…ag false",
          "is_bot": false,
          "headline": "fix(release): top-level tag-prefix memdb-go/ + include-component-in-t…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T01:16:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d199b2f807f7ced5798d035c1cc412b2a359786e",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.25.1 (#384)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T01:13:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b4cf40e1c149e54798c826f472ff1521f9d1522",
          "body": "…file)\n\nrelease-please-action issue #975: having release-type in action with\noverrides the config-file entirely, ignoring tag-prefix and\ninclude-component-in-tag. Remove it so config-file is the source of truth.\n\nAlso reset manifest to 0.23.0 (stale v0.25.0 tag deleted, will re-release\nwith correct memdb-go/ prefix).\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(release): remove release-type from action with (overrides config-…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T01:10:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a5020cb9fa8da97c74b0f7b03f64de3e19e682da",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.25.0 (#383)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T01:06:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f674a7fc259f602e7514994f0bfc531fbbc1299",
          "body": "… will re-release with memdb-go/ prefix)",
          "is_bot": false,
          "headline": "chore(release): reset manifest to 0.23.0 (stale v0.24.x tags deleted,…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T01:03:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74398ab4bc870619ed73ef60f826c09bf9cbdad6",
          "body": "The action-level path and tag-prefix inputs override config-file defaults.\nWithout them, release-please-action v4 ignores tag-prefix from config and\ncreates plain vX.Y.Z tags (invisible to go get for subdir Go modules).\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(release): pass path + tag-prefix to release-please-action",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T01:02:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "41a1f72687de82e1af3f3f07887c2ad88df9b3ef",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.24.1 (#382)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T00:57:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd92b82ea453d3cda4f3247e10e8317f75576752",
          "body": "The Go module lives at memdb-go/ (module path github.com/anatolykoptev/memdb/memdb-go).\nGo proxy expects tags prefixed with memdb-go/ for subdir modules — v0.24.0\nis invisible to go get, memdb-go/v0.24.0 works.\n\n- include-component-in-tag: true, tag-prefix: \"memdb-go/\"\n- manifest key: \"memdb-go\" (ma\n[…]\nge key)\n- goreleaser: checkout tag_name ref + GORELEASER_CURRENT_TAG env\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(release): use memdb-go/ tag prefix for Go subdir module",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T00:55:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0a06cbd9c88494d7aaa0a9ab98bb9869bf5a4402",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.24.0 (#381)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T00:48:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3051ef0b577d3d11359b032ea42e122079e0098",
          "body": "Replace manual release flow with release-please automation:\n- release-please-config.json (release-type: go, baseline 0.23.0)\n- .github/workflows/release-please.yml (release-please + goreleaser)\n- Remove old go-release.yml, fix .goreleaser.yml release: section\n- .gitignore exceptions for release-please config files\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "ci: add release-please for automated Go releases",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T00:34:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "adab49e9751af9d43428723167dfd578f477789b",
          "body": "…#379)\n\nPer-cube VSET eviction policy to prevent stale dedup candidates from\ncausing wrong LLM consolidation merges. VSetEvictionPolicy.CheckAndEvict\nuses VCard to check count, VSimFiltered to fetch candidates, sorts\noldest-first by ts, VRemBatch to evict. Hooked into VAdd non-fatally.\nVsetEvictTota\n[…]\nonfig (default 500). 11 eviction tests.\n\nOperator ack: given 2026-07-18.\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(esc-2): VSetEvictionPolicy + VAdd hook + VsetEvictTotal metric (…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T00:21:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e7917f9100d21afff245873c8a1a732c681d1866",
          "body": "Upgrade Redis image from 7-alpine to 8-alpine (hard prereq for VSET commands).\nAdd maxmemory (400mb) and maxmemoryPolicy (allkeys-lru) Helm values with\nredis-server command flags. Infra-only, no Go code.\n\nOperator ack: given 2026-07-18.\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "ci(esc-2): Helm Redis 7→8 + maxmemory+allkeys-lru (#376)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T00:19:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "06ade7fa3040ed25554a1daa99a3e2ba34e21134",
          "body": "Replace ~10min in-container AGE build with prebuilt GHCR image.\nCreate Dockerfile.test-pg (pgvector + AGE 1.6.0 prebuilt).\nUpdate ci.yml to reference ghcr.io/anatolykoptev/memdb-test-pg:pg17-age1.6.0.\nFix test comments AGE 1.7 → 1.6.0.\n\nGenerated with [Devin](https://devin.ai)\n\nCo-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "ci(esc-1): composite test-pg image with AGE 1.6.0 prebuilt (#378)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T00:19:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "afaee23d508aee75208ac87e8930063fc2c89e7b",
          "body": "… (rf-1) (#377)\n\nReplace the binary useHNSW flag with a typed DupStrategy enum\n(auto|legacy|hnsw), default auto. The auto router counts candidate\nmemories via a new CountMemoriesByUserAndTypes wrapper (reusing the\nexisting CountByUserAndTypes query — no new SQL) and picks legacy below\nthe crossover \n[…]\nserver_init.go calls SetDupStrategy with resolved strategy\n- Update spyPostgres + treeStub stubs; add auto-routing router tests\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(scheduler): replace binary useHNSW with 3-state DupStrategy enum…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-19T00:18:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "26b1bfd7f90af1c719f05ad5fa0b075c7f84281f",
          "body": "- Add preflight workflow (.github/workflows/preflight.yml) — make preflight\n  (gofmt+vet+build+test) on ubuntu-24.04-arm, required gate\n- Add preflight target to Makefile (gofmt check excludes vendor/ and gen/)\n- Switch all ci.yml jobs from ubuntu-latest to ubuntu-24.04-arm\n  (arm64 = prod-box parit\n[…]\n\n\nGenerated with [Devin](https://devin.ai)\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "ci: align with krolik CI convention (#380)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T23:55:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7912e07a866193c17dcc04a6d19c21bfcd0e5cd8",
          "body": "PF-10: tree reorg atomicity — PromoteClusterChild wraps edge+hierarchy\n  in a single PG transaction (both succeed or both roll back)\nPF-21: consolidation LLM budget — per-cycle 120s wall-clock budget,\n  remaining clusters deferred to next cycle + metric\nPF-24: Redis pool monitoring — pool stats gaug\n[…]\n\n\nGenerated with [Devin](https://devin.ai)\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: phase-2c bundle (PF-10/21/24/25) (#371)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T22:07:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cc723c52a52843ccdf8807953b10c69408a0d897",
          "body": "PF-13+15: response degradation flags — Degraded bool field on\n  addResponseItem, set when fine→fast fallback fires\nPF-17: entity linking async — upgrade Debug→Warn on upsert/edge/\n  invalidate failures (metric already exists as\n  memdb.atomic.entities_promoted_total{outcome=failed})\nPF-19: dedup thr\n[…]\n\n\nGenerated with [Devin](https://devin.ai)\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: phase-2b bundle (PF-13/15/17/19, FP closures) (#370)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T21:40:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2130fb1e745002662f837fadbf7647b0861afa87",
          "body": "PF-6: hash dedup degraded — upgrade Debug→Warn + metric\nPF-11: bounded goroutines — semaphore cap (8) on fire-and-forget\nPF-12: JSON marshal error — check error in prefs + tree_summariser\nPF-14: vector dedup error — upgrade Debug→Warn + metric\nPF-16: observation_date validation — validObservationDat\n[…]\n\n\nGenerated with [Devin](https://devin.ai)\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: phase-2 bug-hunt bundle (PF-6/11/12/14/16/18/20/22, CP-4/8) (#369)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T21:30:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c16fcba92cb6ba6351ef7b36ad4bcae6f0779ab7",
          "body": "* ci: add livepg integration job with Postgres+pgvector+AGE\n\nAdd a livepg CI job that provisions Postgres 17 + pgvector + Apache AGE\n(built from source with PGDG repo), sets MEMDB_LIVE_PG_DSN, and runs\ngo test -tags=livepg on handlers, scheduler, search, and db packages.\n\nPGDG apt repo (noble-pgdg s\n[…]\n[bot]@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "ci: add livepg integration job with Postgres+pgvector+AGE (#366)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T19:55:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ae1119f7069f692894e9d95af1bf4cba54916465",
          "body": "Tasks in \"in_progress\" that never transition to \"completed\" or \"failed\"\n(worker crash, panic, OOM kill) stayed stuck forever. CountActiveTasks\ncounted them as active, IsIdle returned false, and\n/product/scheduler/wait hung indefinitely.\n\nAdded ReclaimStaleTasks(userID, maxAge) — transitions in_progr\n[…]\n\n\nGenerated with [Devin](https://devin.ai)\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(scheduler): add task FSM watchdog to reclaim stuck tasks (#365)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T19:20:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a55c302211bad14d8b55f20278e4fa96127c6082",
          "body": "embedder.New() for type=\"http\" never populated HTTPEmbedderOpts.Circuit,\nso an embed-server crash stacked 5s timeouts behind every request with no\nfail-fast. The rerank CB (MEMDB_RERANK_CIRCUIT) already had this pattern.\n\nAdded HTTPCircuit *gokitembed.CircuitConfig to embedder.Config, populated\nin t\n[…]\n\n\nGenerated with [Devin](https://devin.ai)\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(embedder): add circuit breaker for HTTP embedder (PF-8) (#364)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T19:20:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "02f0ad5ba4c3ae67ef22b44cae70fffb0e57e6a9",
          "body": "…363)\n\nclassifyAttemptError returned retryStop immediately on IsAuth(), so an\nexpired API key or a token-rotation proxy (CLIProxyAPI) returning 401\nduring the ~30s rotation window killed the request with no recovery.\n\nAdded auth retry path: on 401/403, if attempts remain, sleep\nauthRetryDelay (env-t\n[…]\n\n\nGenerated with [Devin](https://devin.ai)\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(llm): retry on 401/403 auth errors with delay for key rotation (#…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T19:20:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7c0be5c73cf2311342a5acccf7d2d79ca8c11005",
          "body": "…hs (#362)\n\nPR #307 only fixed NativeUpdateMemory. 5 other UpdateMemoryNodeFull call\nsites left stale ce_score_topk, causing incorrect rerank results after\nmemory text changes.\n\nAdded ClearCEScoresTopK + ClearCEScoresTopKForNeighbor calls (best-effort,\nError log on failure) to:\n- reorganizer_mem_rea\n[…]\n\n\nGenerated with [Devin](https://devin.ai)\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(reorganizer): invalidate CE cache on all UpdateMemoryNodeFull pat…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T19:20:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f671065cbb8961c033730911679bb99bc62db63e",
          "body": "When detectCgroupMemLimit() returns (0, source, nil) — i.e. the cgroup file\nexists but the value is 'max' (v2) or >2^62 (v1 unlimited sentinel) —\napplyGoMemLimit previously logged 'no container memory limit detected' and\nreturned without setting any limit.  The Go runtime was left without a memory\nc\n[…]\ntHostMemLimit parser (valid, missing file, no MemTotal)\n  - resolveFallbackLimit priority (env, disabled, default)\n\nCloses #320\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(gomemlimit): add fallback when cgroup has no memory limit (#355)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T19:13:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fadf4bd6c3232c1dfa2c719ebdc02eb7af0576b5",
          "body": "The raw-mode add pipeline (nativeRawAddForCube) accumulated all nodes,\nresponse items, and embeddings into unbounded slices before any batch\ninsert. A single /product/add with 100K items would allocate everything\ninto memory simultaneously — the M7 OOM root cause.\n\nFix: chunk the processing loop int\n[…]\n- EmptyItems: nil/empty input returns empty without error\n- BatchSizeBounded: no insert batch exceeds rawBatchSize\n\nCloses #319\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(add_raw): chunk unbounded slice growth to prevent OOM (#354)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T19:13:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "40fd46039934791549328e16c5b7da35716d1088",
          "body": "* fix(config): add startup Validate() for auth and Postgres URL\n\nPF-1: AuthEnabled defaults to false and MasterKeyHash defaults to empty\n(config.go:180-182). A fresh deploy with no env vars had zero auth on all\nendpoints. Add Validate() that fails fast at server startup when\nAuthEnabled=false AND Ma\n[…]\nrs directly via os.Getenv\nand do not use config.Load(), so they are maintenance tools and are\nintentionally skipped.\n\n---------\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(config): add startup Validate() for auth and Postgres URL (#353)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T19:13:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "90f75667be0526886f270a5ed4b611be399ecbb0",
          "body": "Generated with [Devin](https://devin.ai)\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore: scrub private-infra references + drop internal plans (#356)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-07-18T15:25:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d2da343fde1391fb9a1bd97b24d73d822d76dde7",
          "body": "…x asymmetry (#317)\n\n* feat(embedder): switch code-embed to code-rank-embed; add query-prefix asymmetry\n\nCodeRankEmbed replaces jina-code-v2 as the default code-embedding model\n(same 768-dim, served at embed.krolik.tools). Adds \"code-rank-embed-query\"\nmodel alias that prepends the required query ins\n[…]\ntrue).\n\nAlias registered in both HTTP and ONNX paths with a Warn log as\nobservability signal for the removal window.\n\n---------\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(embedder): switch code-embed to code-rank-embed; add query-prefi…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-06-13T01:02:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "811c458568b9ba6571965bcaf0285ce8996a7b8d",
          "body": "chore(deps): bump go-kit v0.74.0 for sparse+rerank bearer env",
          "is_bot": false,
          "headline": "Merge pull request #316 from anatolykoptev/chore/bump-gokit-v0.74",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-24T04:53:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "707e7c6f81d3b82013457c69d95e7a27c4a0de9c",
          "body": "v0.74.0 (go-kit PR #97) adds EMBED_TOKEN env auto-resolution to sparse and\nrerank v2 NewClient — completes bearer wiring for hybrid retrieval\n(SPLADE /embed_sparse) and CE rerank (/v1/rerank), both used by memdb-go.\n\n## Verification\n- GOWORK=off go build ./... → ok\n- GOWORK=off go test ./internal/embedder/... → ok\n\n[no-deploy]",
          "is_bot": false,
          "headline": "chore(deps): bump go-kit v0.73.0 → v0.74.0 for sparse+rerank bearer env",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-24T04:53:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "701626b4c55bcd38513a2d2099de3b927574d77c",
          "body": "chore(deps): bump go-kit v0.50.0 → v0.73.0 for embed bearer auth",
          "is_bot": false,
          "headline": "Merge pull request #315 from anatolykoptev/chore/bump-gokit-v0.73",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-24T04:25:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f41ce920c187db70b1db3e33d79e94a216e70e0c",
          "body": "go-kit v0.73.0 adds EMBED_TOKEN env auto-resolution for self-hosted\nembed-server bearer auth (go-kit PRs #95 #96). Once EMBED_TOKEN is\nwired in krolik-server compose, bearer header flows automatically via\ngokitembed.NewClient — no call-site changes needed here.\n\nTransitive bump: miniredis v2.37.0 → v2.38.0 (test dep only).\n\nBuild: GOWORK=off go build ./... — ok\nTest:  GOWORK=off go test ./...  — all 25 packages ok\nVet:   GOWORK=off go vet ./...   — ok",
          "is_bot": false,
          "headline": "chore(deps): bump go-kit v0.50.0 → v0.73.0 for embed bearer auth",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-24T04:24:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f86860751f7f0ba69f4ab0551162781ac850938",
          "body": "…vers (#314)\n\nThree near-identical resolveX() functions (worker, profiler, search/config)\neach parsed a positive int env var, multiplied by a time unit, warned on\ninvalid input, and logged on default. Extracted to envcfg.PositiveDuration\nin the existing envcfg package (no new package needed).\n\nLog k\n[…]\n_PROFILE_REFRESH_COOLDOWN_M=60, MEMDB_SEARCH_CACHE_TTL_S=300.\n\nFollow-up from comprehensive review LOW memdb #313 (2026-05-18).\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor(envcfg): extract PositiveDuration — DRY for 3 env-knob resol…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-19T01:51:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f32c8e705b9f181f90b6cc9c297503c7b06744e6",
          "body": "…#313)\n\n* chore(llm): env-knob 3 hardcoded constants — wave 2 token reduction\n\nConvert three hardcoded timing constants to env-overridable vars with\naggressive new defaults to reduce periodic LLM traffic:\n\n- MEMDB_REORG_INTERVAL_H: periodicReorgInterval 6h → 24h (4× reduction)\n- MEMDB_PROFILE_REFRES\n[…]\n regardless of interval. Round-robin across cubes within the hour is\npreserved; just the first-fire delay is capped.\n\n---------\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(llm): env-knob 3 hardcoded constants — wave 2 token reduction (…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-18T22:50:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "294807dbed53589311a1f38faa95d05751f9d718",
          "body": "Dockerfile.mcp was pinned to golang:1.26rc3 release-candidate, but\ngo.mod requires 'go 1.26.0'. RC < stable per Go toolchain check, so\nbuild failed with:\n  'go.mod requires go >= 1.26.0 (running go 1.26rc3)'.\nThe companion Dockerfile (memdb-go target) was already on golang:1.26\nstable — this one was\n[…]\nd\nlocally-built images (containerd-snapshotter migration).\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(memdb-mcp): pin golang base to 1.26 stable (was 1.26rc3) (#312)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-12T21:15:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2f6957916e82b3a1092e21b7b3ffbe2f63b661cb",
          "body": "…now in shared Client) (#311)\n\nCleanup after lift-to-go-kit refactor (go-kit PR #48 → tagged v0.49.0,\nv0.50.0 includes it + tracing/httpmw OTEL code.* attributes).\n\nRemoves wrapper-level chunking from `internal/embedder/http.go` (the\ndefense-in-depth chunkSize field + chunking loop + embedChunk help\n[…]\n_chunks_per_call /\n  embed_chunk_size from go-kit instead.\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(embedder): bump go-kit v0.50.0 + remove duplicate chunking (…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-09T20:25:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "75c6370a8d5e2939b0470a86d438eab4ca3464a5",
          "body": "…th for ox-embed-server input cap) (#310)\n\n* fix(memory): deterministic lock order to prevent DELETE/UPDATE deadlock\n\nBulk DELETE on properties->>'id' = ANY($1) deadlocked with concurrent\nIncrRetrievalCount UPDATE on the same table. Both used unsorted ANY()\nin autocommit — Postgres acquired row lock\n[…]\nd-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(embedder): client-side chunking for HTTPEmbedder (defense in dep…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-09T19:38:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ae9440d1d0b6227beae04f02223ad94b1193c46f",
          "body": "…ck (#309)\n\n* fix(memory): deterministic lock order to prevent DELETE/UPDATE deadlock\n\nBulk DELETE on properties->>'id' = ANY($1) deadlocked with concurrent\nIncrRetrievalCount UPDATE on the same table. Both used unsorted ANY()\nin autocommit — Postgres acquired row locks in scan order, which\ndiverged\n[…]\n\n  and confirms the deadlock-avoidance contract still holds because\n  both queries lock in sorted property-id order.\n\n---------\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(memory): deterministic lock order to prevent DELETE/UPDATE deadlo…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-08T10:15:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a6375d08e6a91e4789a66ce61f3793c098d4ff84",
          "body": "…tgres param (#308)\n\n- cmd/mcp-server/main.go: mcpNativeToolCount 9 → 10 (actual count\n  after recent registrations; the constant was a stale comment)\n- internal/mcptools/memory_update_proxy_test.go: cover the\n  UserID!=\"\" / CubeID!=\"\" precedence path (was: only the CubeID\n  fallback branch exercise\n[…]\nt no caller needs it)\n- internal/mcptools/proxy.go: update call site to match new signature\n\nRefs: PR #307 code-quality review.\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(mcp): tool count comment, CubeID fallback test, drop dead *db.Pos…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-07T12:31:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "baf1441f60f2e158d85af5b5794c1878fcff1f46",
          "body": "…es full update path (#307)\n\n- NativeUpdateMemory now calls ClearCEScoresTopK + the neighbor\n  cascade after content change. Without this, reranked search results\n  carry stale CE scores computed against the OLD text. Best-effort\n  (logs error, does not fail the request).\n- MCP update_memory tool wa\n[…]\nemdb-go).\n- proxyCall nil-logger guard added for test ergonomics.\n\nRefs: 2026-05-07 infrastructure-auditor primer findings 1+3.\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(memory): NativeUpdateMemory clears CE cache; MCP update_memory us…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-07T12:18:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3abe063b9d55672085af093d8ac556eb33b7aa7c",
          "body": "feat(proto): add chat_time + message_id to Message (matches HTTP /add)",
          "is_bot": false,
          "headline": "Merge pull request #306 from anatolykoptev/feat/proto-message-metadata",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-04T07:48:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "882166d4bfe25e64f7f42389724d6cbd72c430f8",
          "body": "Brings the gRPC Message proto into parity with the OpenAPI/HTTP path\nwhich already accepts chat_time on ChatCompletion*MessageParam\n(api/openapi.yaml). Services routing messages through gRPC AddRequest\nno longer silently drop timestamps.\n\n  - chat_time  (string, RFC3339-UTC) — first 10 chars indexed\n[…]\n With\nbuf.gen.yaml updated, `buf generate` is reproducible from clean.\n\nAligns with go-kit/llm v0.43 + go-session v0.4.1 + dozor's\nprovider.Message — one shape from in-flight LLM call to MemDB ingest.",
          "is_bot": false,
          "headline": "feat(proto): add chat_time + message_id to Message (matches HTTP /add)",
          "author_name": "Anatoly Koptev",
          "author_login": null,
          "committed_at": "2026-05-04T05:55:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "92772d53a1fd7c6bae9807b1d5a7c17eee466ef8",
          "body": "…ase 4) (#305)\n\nRule #10 tells the LLM to copy shared-event facts from person Y onto\nperson X. This is correct for LoCoMo cat-5 adversarial gold where the\neval specifically rewards cross-applying family events, but it is a\nhallucination policy in production (copying facts about the wrong\nperson).\n\nC\n[…]\nse)\n- Add tests: CrossCharBleedDefault (absent) + CrossCharBleedEnabled\n- Update existing tests: remove mustContain assertion for rule 10\n\nEval harness: set MEMDB_CROSS_CHAR_BLEED=true in compose env.",
          "is_bot": false,
          "headline": "feat(chat): make rule #10 (cross-character bleed) env-conditional (Ph…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T10:49:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ebe3f41186280a553af2d385644e73ddaaaac411",
          "body": "…efs (Phase 1.5) (#304)\n\n* fix(scheduler): thread observation_date through mem_read actions + prefs (Phase 1.5)\n\nThree scheduler write paths lacked observation_date:\n\n1. reorganizer_mem_read_actions.go: buildLTMNode omitted observation_date.\n   Fix: thread info.observationDate from processRawMemoryF\n[…]\nrename now → wallclockNow for clarity (Phase 5)\n\nCosmetic: the variable is wall-clock ingest time, not conversation time\n(which is info.observationDate). Renaming removes ambiguity for future\nreaders.",
          "is_bot": false,
          "headline": "fix(scheduler): thread observation_date through mem_read actions + pr…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T10:49:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "da94997407bf9e5bc759dd696824b13e0b7dc904",
          "body": "…s (Phase 1.5) (#303)\n\nSkillMemory and ToolTrajectoryMemory rows were written with hand-rolled\nproperty maps that omitted observation_date, causing today-leak on\ncefix17 (6 SkillMemory rows with 0/6 observation_date coverage).\n\nChanges:\n- add_fine_async.go: pass in.ObservationDate to generateSkillMe\n[…]\nd_skill_test.go: update signatures, add observation_date assertion\n\nFollows the identical skip-on-empty pattern established in Phase 1A\n(add_episodic.go) to avoid poisoning memory with wall-clock NOW.",
          "is_bot": false,
          "headline": "fix(handlers): thread observation_date through skill + tool extractor…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T10:49:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "63adfaebb234ad0c586ae14f9e0e651ab9864c2b",
          "body": "…can fire (#302)\n\nThe Go struct (AtomicFact.NamedEntitiesInText) and the promotion path\n(atomicToExtracted → namedEntitiesToMentions → collectHandlerEntityPairs →\nlinkAtomicEntitiesAsync → entity_nodes upsert) were already wired in\nPR #291 but the LLM never returned the field because the atomic extr\n[…]\ng field when no proper nouns present\n\nNo Go code changes — the struct already has the json tag.\nExisting test suite (add_fine_atomic_entities_test.go) covers the\nfull promotion path with fixture data.",
          "is_bot": false,
          "headline": "fix(atomic-extractor): emit named_entities_in_text so PR #291 wiring …",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T10:49:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "64fd660fe61f3119005610eff053c3278fda6e9c",
          "body": "…vation_date (Phase 1B) (#301)\n\n* fix(memprops): tree_reorganizer parents inherit observation_date (Phase 1B)\n\nCloses the second-largest today-leak surface (2219 tree_reorganizer rows\nglobally with no observation_date) by:\n\n- Extending ListMemoriesByHierarchyLevel SQL projection with\n  COALESCE(obse\n[…]\n; the atomic sibling must mirror\nit. fc.ObservationDate is already populated by runAtomicFineForCube via\nh.resolveObservationDate(ctx, req.Messages) — just was not being passed\ninto the props builder.",
          "is_bot": false,
          "headline": "fix(memprops): tree_reorganizer parents + atomic LTM/WM inherit obser…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T08:54:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2954930f394157c494f133a02fa7aaf71f259bdc",
          "body": "… 1A) (#299)\n\nPre-fix: 15 derived-write paths hand-rolled their own props maps without\nobservation_date. evaluation/locomo/query.py::_extract_ts falls through\nobservation_date → chat_time → created_at, so derived rows that only\ncarry created_at (= ingest wall-clock) poison cat-2 temporal answers\n('2\n[…]\nPhase 2)\n- remaining derived sites: prefs / wm refresh / wm compact / skill /\n  tool / mem_read_legacy / mem_read_actions (Phase 2)\n- rule #10 cross-character bleed env-conditional (Phase 3, optional)",
          "is_bot": false,
          "headline": "fix(memprops): observation_date invariant for derived memories (Phase…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T08:35:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "40542baaad39003995a57feef2db3d0e9dd25e21",
          "body": "…(#300)\n\nCloses the loop on RerankerBatchWaitHigh: when local gte-multi-rerank\nsaturates (CE batch wait p95 > 3s, breaker opens, timeouts, OOM), the\nReranker-interface fallback in go-kit v0.40 routes those degraded\nrequests to Voyage rerank-2.5 instead of returning Score=0 placeholders\nto math-fallb\n[…]\n the gate sees zero\nbehaviour change. When enabled, dashboards see new metric\nmemdb_rerank_fallback_used_total{primary,secondary} with\nsecondary=voyage-rerank-2.5 (auto-derived from WithFallbackName).",
          "is_bot": false,
          "headline": "feat(rerank): wire Voyage rerank-2.5 as opt-in fallback for local CE …",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T08:32:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d05d334c10360da0ffc5f7ec8a76242dc7f15c29",
          "body": "… Degraded (#298)\n\nRoot cause of 0% precompute hit rate observed 2026-05-03:\nclient.Rerank() (the convenience wrapper) drops the error and on\nStatus=Degraded returns docs in original order with Score=0. The\nprecompute writer was persisting those zeroes to ce_score_topk.\nSearch-time read could not di\n[…]\nes overwrite them once CE pressure\ndrops (the very effect of this fix breaking the loop).\n\nRegression tests in tree_ce_precompute_skip_degraded_test.go cover\neach Status value and locked the contract.",
          "is_bot": false,
          "headline": "fix(precompute): skip persisting Score=0 placeholders when CE returns…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T07:43:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c4448ef7196ce1f27f93dbbe14784e68a3502a64",
          "body": null,
          "is_bot": false,
          "headline": "chore: trigger rebuild for go-kit v0.39.0 bump (dozor dedup miss)",
          "author_name": "anatolykoptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T06:51:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b432bf45fbe94922cbb329c60380d9d854ebaa3f",
          "body": "Pulls in cache key correctness fixes from go-kit PR #40:\n- embed.cacheKey now includes role (query/passage)\n- rerank.cacheKey now includes maxCharsPerDoc + maxTokensPerDoc\n\nBoth bumped to cacheKeyVersion=v2; old v1 cache entries in Redis\nwill naturally miss after deploy and be repopulated.\n\nVerified: build clean, embedder + rerank tests green.",
          "is_bot": false,
          "headline": "chore(deps): bump go-kit v0.38.0 → v0.39.0 (#297)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T06:47:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b95d15eaff0363fca29f2fc0f4839793b67d9f38",
          "body": "* fix(cache): cotCacheKey now includes Model + MaxSubQueries\n\nThe CoT decomposer prompt template interpolates MaxSubQueries (\"Output a\nJSON array of 1-%d simpler sub-questions\"), so two callers using the same\nquery but different MaxSubQueries values were silently sharing cached\nsub-query lists. Mode\n[…]\nnfig.Model and a 'v2' version sentinel. Pairs are\nsorted by ID so candidate iteration order does not affect the key.\n\n---------\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(cache): LLM-output cache key correctness (PR B) (#296)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T06:45:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4b8680e8fd7b8f8b39613a9aac3abe532bdbc779",
          "body": "* fix(cache): post_get_memory_filter key now includes full request — fixes Page=2 returning Page=1 body\n\nPrevious key only hashed Filter+limit, so requests differing only by Page\n(or include_preference, include_tool_memory, etc.) collided in cache. The\nnew derivation hashes a JSON marshal of the ful\n[…]\ncubeID for cubes without a recorded owner).\n\nAdds focused unit tests covering Bug 1 (page/include flag isolation),\nBug 2 + Bug 4 (filter cache invalidation on delete), and Bug 5 (composite\nkey sweep).",
          "is_bot": false,
          "headline": "fix(cache): DB-cache pagination + invalidation correctness (PR A) (#295)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T06:45:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "15ea09507da148b30d9b07945da891deb25dd0b2",
          "body": "Bump in PR #293 updated go.mod but vendor/modules.txt still listed\nv0.37.0 → docker build failed with inconsistent vendoring error.\n\ngo mod vendor (GOWORK=off per krolik convention) syncs:\n- vendor/modules.txt: go-kit explicit version\n- vendor/github.com/anatolykoptev/go-kit/rerank/voyage.go (new)\n-\n[…]\noptev/go-kit/llm/client.go (ExtractJSON fix)\n- vendor/github.com/anatolykoptev/go-kit/metrics/{prom,prom_bridge}.go (panic fix)\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(vendor): sync vendor/ to go-kit v0.38.0 (#294)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T04:05:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "58a24f9a047c35f86c6056de2c6cc06111344916",
          "body": "…ass for internet/dual-speaker (#293)\n\n* chore(deps): bump go-kit v0.37.0 → v0.38.0\n\nv0.38.0 ships VoyageRerankClient + JinaRerankClient (drop-in Reranker\nimplementations) and a fix to llm.ExtractJSON for the array+object case.\n\nNo memdb-go code changes required for the bump itself; both new\nclients\n[…]\ney.\n\nThree test cases cover internet_search variants, speakers cardinality\n0/1/2/3, and malformed JSON fall-through.\n\n---------\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(cache): close /product/search cache correctness gap (v2→v3) + byp…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T04:03:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "91622cb25a8eb9716a63b9df414bf0a8326d58a6",
          "body": "* fix(precompute): exclude WorkingMemory from CE neighbour pool — fixes 0% hit rate\n\nmemdb_search_ce_precompute_hit_total{outcome=hit} = 0 in production\ndespite 13,161 cached rows. Root cause: ListMemoriesByHierarchyLevel\nSQL includes memory_type=WorkingMemory (intentional, for D3 small-cube\ncluster\n[…]\n reading the description from /metrics or Grafana\ngot a misleading enum. Aligned both descriptions with preregNames.\n\n---------\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(rerank): precompute hit-rate, math errors, MMR kill-switch (#292)",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T03:22:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0d7d76f20c81839aeaf53775480d720a8cd12452",
          "body": "…rsal coverage) (#291)\n\nForensic Karpathy r4: the fine atomic path saved entity names inside memory\nproperties (top-level NamedEntitiesInText array) but never upserted them\ninto the entity_nodes table. Result for conv-26: 74 atomic_facts rows, 0\nentity_nodes rows. Query-time NER lookups (GetMemories\n[…]\n graph traversal for the dominant multi-hop failure\nmode).\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(atomic): promote NamedEntitiesInText to entity_nodes (graph trave…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T02:14:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "055487a5e7dfff2025cc4a2c5a5a14054560fef1",
          "body": "… (#290)\n\nForensic Karpathy r3 — old hit@k flagged any single token overlap as\n1.0 even when gold answer's only matching tokens were stopwords (in/of/the).\nRun #20 example: question \"How did Melanie feel watching the meteor shower?\"\ngold \"in awe of the universe\", retrieved 5 unrelated memos (paintin\n[…]\noverage needs to expand. Honest metric makes that visible.\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(score): honest hit@k — strip stopwords + require ≥2 token overlap…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T01:58:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0deaabce3bdc78341f3af2cdd855548d7cfe0b93",
          "body": "…grade (#289)\n\n* feat(chat): atom-as-prompt-context — surface atomic facts as Key Facts section (Memobase parity)\n\nForensic Karpathy r3 (2026-05-01) — atomic facts ALREADY extracted in DB\n(kind='atomic_fact' rows look high-quality, e.g. \"Caroline attended LGBTQ\nsupport group on May 7, 2023...\"). НО \n[…]\ne Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(locomo-eval): pass external_memory_count to trigger r3 variant up…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T01:34:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "51bae95fb9fe8c594e9e2e9bde7573c5a4389dab",
          "body": "…s section (Memobase parity) (#288)\n\nForensic Karpathy r3 (2026-05-01) — atomic facts ALREADY extracted in DB\n(kind='atomic_fact' rows look high-quality, e.g. \"Caroline attended LGBTQ\nsupport group on May 7, 2023...\"). НО они surface ТОЛЬКО через generic\nsearch competing на cosine с paragraph rows и\n[…]\nhe LLM on every chat\nquery — больше не competition cosine.\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(chat): atom-as-prompt-context — surface atomic facts as Key Fact…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T01:18:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "007ecd6572d687c97157affc1710b43dae0a6436",
          "body": "…+ external memory hint (#287)\n\nKarpathy r3 forensic (2026-05-01) — Run #18 vs brevity-pattB peak found\n10/20 F1 regressions came from MECHANICAL refusals: dual-speaker harness\nsends top_k=1+threshold=0.99 → server retrieval returns 0 memos →\ndecideFactualPrompt → variant=Zero → server injects stric\n[…]\n: +5-10pp F1 on chat-50 (10 refusal regressions reversed).\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(chat): kill conflicting refusal contracts + per-speaker profiles …",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T01:08:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2a173977abf142c2c0659c7cc5cb1a161b0dd166",
          "body": "…ful cubes (#286)\n\nRun #17 forensic — initial breaker (threshold=0.5, minCalls=10) too aggressive:\n- search p50 2.0s → 0.093s (24x speedup)\n- hit@k 0.70 → 0.72 (wiki removal helped)\n- F1 0.155 → 0.136 (-12%)\n- cat2 F1 0.136 → 0.105 (-23%)\n- cat4 F1 0.154 → 0.083 (-46%) collapse\n\nDiagnosis: cat2/cat4\n[…]\nrst 10 calls)\n\nTests updated to new thresholds — all pass.\n\nCo-authored-by: Anatoly Koptev <anatolykoptev@users.noreply.github.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(rerank): tune CE breaker thresholds — preserve CE on weak-but-use…",
          "author_name": "Anatoly Koptev",
          "author_login": "anatolykoptev",
          "committed_at": "2026-05-03T00:43:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 8,
      "commits_last_year": 1541,
      "latest_release_at": "2026-07-25T01:20:07Z",
      "latest_release_tag": "memdb-go/v0.23.2",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 43,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 13.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/anatolykoptev/memdb/memdb-go",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/anatolykoptev/memdb/memdb-go",
          "is_deprecated": false,
          "latest_version": "v0.23.2",
          "repository_url": "https://github.com/anatolykoptev/memdb",
          "versions_count": 2,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-25T01:19:53Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 7,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 35
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": true,
      "bootstrap_files": [
        "Makefile",
        "memdb-go/vendor/connectrpc.com/connect/Makefile",
        "memdb-go/vendor/github.com/alicebob/miniredis/v2/Makefile",
        "memdb-go/vendor/github.com/alicebob/miniredis/v2/fpconv/Makefile",
        "memdb-go/vendor/github.com/alicebob/miniredis/v2/proto/Makefile",
        "memdb-go/vendor/github.com/alicebob/miniredis/v2/server/Makefile",
        "memdb-go/vendor/github.com/anatolykoptev/go-stealth/Makefile",
        "memdb-go/vendor/github.com/anatolykoptev/skillkit/Makefile",
        "memdb-go/vendor/github.com/daulet/tokenizers/Makefile",
        "memdb-go/vendor/github.com/exaring/otelpgx/Makefile",
        "memdb-go/vendor/github.com/felixge/httpsnoop/Makefile",
        "memdb-go/vendor/github.com/munnerz/goautoneg/Makefile",
        "memdb-go/vendor/github.com/oapi-codegen/runtime/Makefile",
        "memdb-go/vendor/github.com/prometheus/procfs/Makefile",
        "memdb-go/vendor/github.com/redis/go-redis/v9/Makefile",
        "memdb-go/vendor/github.com/yuin/gopher-lua/Makefile",
        "memdb-go/vendor/github.com/yuin/gopher-lua/parse/Makefile",
        "memdb-go/vendor/go.opentelemetry.io/otel/Makefile",
        "memdb-go/vendor/go.uber.org/atomic/Makefile",
        "memdb-go/vendor/google.golang.org/grpc/Makefile"
      ],
      "api_schema_files": [
        "docs/openapi.json",
        "memdb-go/api/openapi.yaml",
        "memdb-go/internal/server/static/openapi.json",
        "memdb-go/proto/memdb/v1/chat.proto",
        "memdb-go/proto/memdb/v1/memory.proto",
        "memdb-go/proto/memdb/v1/scheduler.proto"
      ],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "examples/go/quickstart/go.mod",
        "examples/go_client/go.mod",
        "memdb-go/go.mod",
        "memdb-go/vendor/github.com/daulet/tokenizers/Cargo.toml"
      ],
      "largest_source_bytes": 658395,
      "source_files_sampled": 675,
      "oversized_source_files": 3,
      "agent_instruction_files": [
        "CLAUDE.md",
        "memdb-go/vendor/github.com/jackc/pgx/v5/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 3880
    },
    "dependencies": {
      "manifests": [
        "memdb-go/go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "connectrpc.com/connect",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.19.1"
        },
        {
          "name": "github.com/alicebob/miniredis/v2",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.38.0"
        },
        {
          "name": "github.com/anatolykoptev/go-engine",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.1"
        },
        {
          "name": "github.com/anatolykoptev/go-kit",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.97.2"
        },
        {
          "name": "github.com/anatolykoptev/go-stealth",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.19.1"
        },
        {
          "name": "github.com/anatolykoptev/skillkit",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.2.2"
        },
        {
          "name": "github.com/daulet/tokenizers",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.25.0"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/jackc/pgx/v5",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.9.2"
        },
        {
          "name": "github.com/modelcontextprotocol/go-sdk",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.0"
        },
        {
          "name": "github.com/oapi-codegen/runtime",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.2"
        },
        {
          "name": "github.com/prometheus/client_golang",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.23.2"
        },
        {
          "name": "github.com/prometheus/client_model",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.6.2"
        },
        {
          "name": "github.com/qdrant/go-client",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.16.2"
        },
        {
          "name": "github.com/redis/go-redis/v9",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v9.18.0"
        },
        {
          "name": "github.com/yalue/onnxruntime_go",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.25.0"
        },
        {
          "name": "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.68.0"
        },
        {
          "name": "go.opentelemetry.io/otel",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.opentelemetry.io/otel/exporters/prometheus",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.65.0"
        },
        {
          "name": "go.opentelemetry.io/otel/metric",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.opentelemetry.io/otel/sdk",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.opentelemetry.io/otel/sdk/metric",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.opentelemetry.io/otel/trace",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "golang.org/x/sync",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.22.0"
        },
        {
          "name": "golang.org/x/time",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.14.0"
        },
        {
          "name": "google.golang.org/protobuf",
          "manifest": "memdb-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.36.11"
        }
      ],
      "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": 5,
        "merged_prs": 331,
        "open_issues": 30,
        "closed_ratio": 0.268,
        "closed_issues": 11,
        "closed_unmerged_prs": 27
      },
      "bus_factor": 2,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "anatolykoptev",
          "commits": 654,
          "avatar_url": "https://avatars.githubusercontent.com/u/239934030?v=4"
        },
        {
          "type": "User",
          "login": "tangg555",
          "commits": 230,
          "avatar_url": "https://avatars.githubusercontent.com/u/22412972?v=4"
        },
        {
          "type": "User",
          "login": "fridayL",
          "commits": 155,
          "avatar_url": "https://avatars.githubusercontent.com/u/78344051?v=4"
        },
        {
          "type": "User",
          "login": "CaralHsi",
          "commits": 149,
          "avatar_url": "https://avatars.githubusercontent.com/u/27054213?v=4"
        },
        {
          "type": "User",
          "login": "Wang-Daoji",
          "commits": 78,
          "avatar_url": "https://avatars.githubusercontent.com/u/75928131?v=4"
        },
        {
          "type": "User",
          "login": "wustzdy",
          "commits": 48,
          "avatar_url": "https://avatars.githubusercontent.com/u/67457465?v=4"
        },
        {
          "type": "User",
          "login": "CarltonXiang",
          "commits": 44,
          "avatar_url": "https://avatars.githubusercontent.com/u/11536432?v=4"
        },
        {
          "type": "User",
          "login": "glin93",
          "commits": 37,
          "avatar_url": "https://avatars.githubusercontent.com/u/9035946?v=4"
        },
        {
          "type": "User",
          "login": "whipser030",
          "commits": 33,
          "avatar_url": "https://avatars.githubusercontent.com/u/48425266?v=4"
        },
        {
          "type": "User",
          "login": "Ki-Seki",
          "commits": 18,
          "avatar_url": "https://avatars.githubusercontent.com/u/60967965?v=4"
        }
      ],
      "contributors_sampled": 34,
      "top_contributor_share": 0.424
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "changelog-sync.yml",
        "ci.yml",
        "commit-lint.yml",
        "docker-publish.yml",
        "goreleaser.yml",
        "helm-lint.yml",
        "preflight.yml",
        "release-drafter.yml",
        "release-please.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yaml",
        ".golangci.yml"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": true
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock",
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 4,
            "reason": "5 out of 11 merged PRs checked by a CI test -- score normalized to 4",
            "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/22 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 12 contributing companies or organizations",
            "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": 10,
            "reason": "project is fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "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": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 2,
            "reason": "8 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "0f97852fb03397c0221fb4f5d13a76afd5beedf1",
        "ran_at": "2026-07-25T10:41:41Z",
        "aggregate_score": 4.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-25T01:20:27Z",
      "oldest_open_prs": [
        {
          "number": 387,
          "created_at": "2026-07-19T01:26:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 393,
          "created_at": "2026-07-19T02:10:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 401,
          "created_at": "2026-07-19T23:21:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 402,
          "created_at": "2026-07-20T00:13:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 404,
          "created_at": "2026-07-25T01:20:23Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-25T01:19:53Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 318,
          "created_at": "2026-07-18T04:41:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 323,
          "created_at": "2026-07-18T04:42:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 324,
          "created_at": "2026-07-18T04:42:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 328,
          "created_at": "2026-07-18T04:43:13Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 329,
          "created_at": "2026-07-18T04:43:14Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 330,
          "created_at": "2026-07-18T04:43:32Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 331,
          "created_at": "2026-07-18T04:43:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 332,
          "created_at": "2026-07-18T04:43:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 333,
          "created_at": "2026-07-18T04:43:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 334,
          "created_at": "2026-07-18T04:43:46Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 335,
          "created_at": "2026-07-18T04:43:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 336,
          "created_at": "2026-07-18T04:43:59Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 337,
          "created_at": "2026-07-18T04:44:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 338,
          "created_at": "2026-07-18T04:44:01Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 339,
          "created_at": "2026-07-18T04:44:16Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 340,
          "created_at": "2026-07-18T04:44:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 341,
          "created_at": "2026-07-18T04:44:19Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 342,
          "created_at": "2026-07-18T04:44:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 343,
          "created_at": "2026-07-18T04:44:39Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 344,
          "created_at": "2026-07-18T04:44:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/anatolykoptev/memdb",
    "host": "github.com",
    "name": "memdb",
    "owner": "anatolykoptev"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 66,
      "inputs": {
        "security": 45,
        "vitality": 92,
        "community": 50,
        "governance": 59,
        "engineering": 79
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 92,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 94,
            "inputs": {
              "commits_last_year": 1541,
              "human_commit_share": 0.84,
              "days_since_last_push": 0,
              "active_weeks_last_year": 43
            },
            "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": "43/52 weeks with commits",
                "points": 29.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 43
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1541 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1541
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 8,
              "latest_release_tag": "memdb-go/v0.23.2",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 13.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "8 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~13.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 13.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "moderate",
        "name": "Community & Adoption",
        "value": 50,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "forks": 0,
              "stars": 7,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "7 stars",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "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": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 59,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "moderate",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "bus_factor": 2,
              "contributors_sampled": 34,
              "top_contributor_share": 0.424
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "2 contributor(s) cover half of all commits",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 42% of commits",
                "points": 13,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 42
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "34 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 34
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 12 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "at_risk",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "merged_prs": 331,
              "open_issues": 30,
              "closed_issues": 11,
              "issue_closed_ratio": 0.268,
              "closed_unmerged_prs": 27
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "27% of issues closed",
                "points": 12.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 27
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "331/358 decided PRs merged",
                "points": 35.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 331,
                      "decided": 358
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/22 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 41,
            "inputs": {
              "followers": 12,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "anatolykoptev",
              "public_repos": 91,
              "account_age_days": 274
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "12 followers of anatolykoptev",
                "points": 8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 12,
                      "login": "anatolykoptev"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "91 public repos, account ~0 yr old",
                "points": 14.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 91
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "github.com/anatolykoptev/memdb/memdb-go"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "2 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": 79,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 88,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": true
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "9 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yaml, .golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yaml, .golangci.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 9.6,
                "status": "met",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "5 out of 11 merged PRs checked by a CI test -- score normalized to 4",
                "points": 8,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 45,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 45,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "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": "5 out of 11 merged PRs checked by a CI test -- score normalized to 4",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/22 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 12 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "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 fuzzed",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow 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 0",
                "points": 0,
                "status": "missed",
                "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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "8 existing vulnerabilities detected",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 6
            },
            "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": "excellent",
        "name": "AI Readiness",
        "value": 88,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md",
                "memdb-go/vendor/github.com/jackc/pgx/v5/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 3880
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md, memdb-go/vendor/github.com/jackc/pgx/v5/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md, memdb-go/vendor/github.com/jackc/pgx/v5/CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "84 of 84 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 84,
                      "sampled": 84
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock",
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "memdb-go/vendor/connectrpc.com/connect/Makefile",
                "memdb-go/vendor/github.com/alicebob/miniredis/v2/Makefile",
                "memdb-go/vendor/github.com/alicebob/miniredis/v2/fpconv/Makefile",
                "memdb-go/vendor/github.com/alicebob/miniredis/v2/proto/Makefile",
                "memdb-go/vendor/github.com/alicebob/miniredis/v2/server/Makefile",
                "memdb-go/vendor/github.com/anatolykoptev/go-stealth/Makefile",
                "memdb-go/vendor/github.com/anatolykoptev/skillkit/Makefile",
                "memdb-go/vendor/github.com/daulet/tokenizers/Makefile",
                "memdb-go/vendor/github.com/exaring/otelpgx/Makefile",
                "memdb-go/vendor/github.com/felixge/httpsnoop/Makefile",
                "memdb-go/vendor/github.com/munnerz/goautoneg/Makefile",
                "memdb-go/vendor/github.com/oapi-codegen/runtime/Makefile",
                "memdb-go/vendor/github.com/prometheus/procfs/Makefile",
                "memdb-go/vendor/github.com/redis/go-redis/v9/Makefile",
                "memdb-go/vendor/github.com/yuin/gopher-lua/Makefile",
                "memdb-go/vendor/github.com/yuin/gopher-lua/parse/Makefile",
                "memdb-go/vendor/go.opentelemetry.io/otel/Makefile",
                "memdb-go/vendor/go.uber.org/atomic/Makefile",
                "memdb-go/vendor/google.golang.org/grpc/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.38,
              "toolchain_manifests": [
                "examples/go/quickstart/go.mod",
                "examples/go_client/go.mod",
                "memdb-go/go.mod",
                "memdb-go/vendor/github.com/daulet/tokenizers/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, memdb-go/vendor/connectrpc.com/connect/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/fpconv/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/proto/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/server/Makefile, memdb-go/vendor/github.com/anatolykoptev/go-stealth/Makefile, memdb-go/vendor/github.com/anatolykoptev/skillkit/Makefile, memdb-go/vendor/github.com/daulet/tokenizers/Makefile, memdb-go/vendor/github.com/exaring/otelpgx/Makefile, memdb-go/vendor/github.com/felixge/httpsnoop/Makefile, memdb-go/vendor/github.com/munnerz/goautoneg/Makefile, memdb-go/vendor/github.com/oapi-codegen/runtime/Makefile, memdb-go/vendor/github.com/prometheus/procfs/Makefile, memdb-go/vendor/github.com/redis/go-redis/v9/Makefile, memdb-go/vendor/github.com/yuin/gopher-lua/Makefile, memdb-go/vendor/github.com/yuin/gopher-lua/parse/Makefile, memdb-go/vendor/go.opentelemetry.io/otel/Makefile, memdb-go/vendor/go.uber.org/atomic/Makefile, memdb-go/vendor/google.golang.org/grpc/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, memdb-go/vendor/connectrpc.com/connect/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/fpconv/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/proto/Makefile, memdb-go/vendor/github.com/alicebob/miniredis/v2/server/Makefile, memdb-go/vendor/github.com/anatolykoptev/go-stealth/Makefile, memdb-go/vendor/github.com/anatolykoptev/skillkit/Makefile, memdb-go/vendor/github.com/daulet/tokenizers/Makefile, memdb-go/vendor/github.com/exaring/otelpgx/Makefile, memdb-go/vendor/github.com/felixge/httpsnoop/Makefile, memdb-go/vendor/github.com/munnerz/goautoneg/Makefile, memdb-go/vendor/github.com/oapi-codegen/runtime/Makefile, memdb-go/vendor/github.com/prometheus/procfs/Makefile, memdb-go/vendor/github.com/redis/go-redis/v9/Makefile, memdb-go/vendor/github.com/yuin/gopher-lua/Makefile, memdb-go/vendor/github.com/yuin/gopher-lua/parse/Makefile, memdb-go/vendor/go.opentelemetry.io/otel/Makefile, memdb-go/vendor/go.uber.org/atomic/Makefile, memdb-go/vendor/google.golang.org/grpc/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yaml, .golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yaml, .golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "38 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 38,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 658395,
              "source_files_sampled": 675,
              "oversized_source_files": 3
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "3/675 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 675,
                      "oversized": 3
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "excellent",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": true,
              "api_schema_files": [
                "docs/openapi.json",
                "memdb-go/api/openapi.yaml",
                "memdb-go/internal/server/static/openapi.json",
                "memdb-go/proto/memdb/v1/chat.proto",
                "memdb-go/proto/memdb/v1/memory.proto",
                "memdb-go/proto/memdb/v1/scheduler.proto"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": "docs/openapi.json, memdb-go/api/openapi.yaml, memdb-go/internal/server/static/openapi.json, memdb-go/proto/memdb/v1/chat.proto, memdb-go/proto/memdb/v1/memory.proto, memdb-go/proto/memdb/v1/scheduler.proto",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "docs/openapi.json, memdb-go/api/openapi.yaml, memdb-go/internal/server/static/openapi.json, memdb-go/proto/memdb/v1/chat.proto, memdb-go/proto/memdb/v1/memory.proto, memdb-go/proto/memdb/v1/scheduler.proto"
                    }
                  }
                ],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? 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": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T10:42:06.188217Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/anatolykoptev/memdb.svg",
  "full_name": "anatolykoptev/memdb",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenGo.