Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-26 15:55 UTC

dukkandcards / quadstore

Single-node graph database for Go applications. Pure Go, embedded, SQLite-backed. Quad model with enforced label namespaces.

GoMIT★ 0 Sterne⑂ 0 Forksseit Apr. 2026Auf GitHub ansehen ↗

dukkandcards/quadstore erreicht einen Gesundheitsindex von 52 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Engineering Quality (66/100) ab, am schwächsten bei Sustainability & Governance (35/100). Zuletzt vor 50 Tagen aktualisiert.

52
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.

52
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

dukkandcardsPersönliches Konto
0 Follower1 öffentliches Reposeit Jan. 2026

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/dukkandcards/quadstorev0.2.4-6vor 72 Tagen

Metriken nach Kategorie

Vitalität

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

64Mittel · 22 % des Gesamtindex
Wie die Bewertung erfolgt
18/36Push-Aktualität — letzter Push vor 50 Tagen
3.5/36Commit-Rhythmus — 5/52 Wochen mit Commits
16.8/18Commit-Volumen — 74 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year74
human_commit_share1
days_since_last_push50
active_weeks_last_year5
Wie die Bewertung erfolgt
16.2/27Liefert Releases aus — 6 Versions-Tags (keine GitHub-Releases)
36/36Release-Aktualität — letztes Release vor 72 Tagen
27/27Release-Rhythmus — ein Release etwa alle 2 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count6
latest_release_tagv0.2.4
releases_from_tagsja
days_since_latest_release72
mean_days_between_releases2
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

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

43Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 0 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
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?

35Gefährdet · 24 % des Gesamtindex
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
0/38.3PR-Annahme — keine entschiedenen Pull Requests oder keine Daten
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote, PR-Annahme. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
0/25Reichweite des Inhabers — 0 Follower von dukkandcards
3.2/25Kontohistorie — 1 öffentliche Repos, Kontoalter ca. 0 Jahre
Verwendete Eingangsdaten
followers0
owner_typeUser
is_verified
owner_logindukkandcards
public_repos1
account_age_days192
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf go
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 72 Tagen
20/20Versionshistorie — 6 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgithub.com/dukkandcards/quadstore
ecosystemsgo
any_deprecatednein
min_days_since_publish72

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

66Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 1 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 6 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsembedded-database, golang, graph-database, graphdb, quadstore, sqlite
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?

51Mittel · 16 % des Gesamtindex
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
0/2.5CI-Tests — keine Daten
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — keine Daten
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
6/7.5Vulnerabilities — 2 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate5,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.

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.

59Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 74 von 74 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — go.mod (Toolchain-Konvention, kein Task-Runner)
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Go (statisch typisiert)
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 48 der letzten 74 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
lockfilesgo.sum
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0,649
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
55/55Handhabbare Dateigrößen — 0/52 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes26.692
source_files_sampled52
oversized_source_files0
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

0GitHub-Sterne
-Mitwirkende
74Commits, letzte 12 Monate
50Tage seit letztem Push
6Releases
-Bus-Faktor
0offene Issues
GoPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Contributor list unavailable
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

OpenSSF Scorecard 5.1 / 10
5.1Gesamtwert

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-26 15:55 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
k. A.CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
k. A.Signed-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
8Vulnerabilities2 existing vulnerabilities detected
Direkte Abhängigkeiten 3
RegistryPaketVersionsvorgabeManifest
Gogithub.com/cockroachdb/pebble/v2v2.1.5go.mod
Gogithub.com/google/uuidv1.6.0go.mod
Gomodernc.org/sqlitev1.48.2go.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": [
        "embedded-database",
        "golang",
        "graph-database",
        "graphdb",
        "quadstore",
        "sqlite"
      ],
      "is_fork": false,
      "size_kb": 627,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 465841,
        "Shell": 5237
      },
      "pushed_at": "2026-06-06T14:46:17Z",
      "created_at": "2026-04-13T14:46:00Z",
      "owner_type": "User",
      "updated_at": "2026-05-15T15:11:38Z",
      "description": "Single-node graph database for Go applications. Pure Go, embedded, SQLite-backed. Quad model with enforced label namespaces.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "User",
      "login": "dukkandcards",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/255067640?v=4",
      "created_at": "2026-01-15T07:19:35Z",
      "is_verified": null,
      "public_repos": 1,
      "account_age_days": 192
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.2.4",
          "kind": "patch",
          "published_at": "2026-05-15T15:11:32Z"
        },
        {
          "tag": "v0.2.3",
          "kind": "patch",
          "published_at": "2026-05-07T15:21:18Z"
        },
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2026-05-06T08:32:20Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-05-05T19:39:34Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-05-05T17:41:05Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-05-05T15:05:34Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "c54c67cac4ae8e34fedb6b2a5305b116a8628e30",
          "body": "bench_scale_test.go: scale benchmarks (BenchmarkScale_BulkLoad1M_*,\nBenchmarkScale_FindBySubject_After1M_*, BenchmarkScale_FindByPredicate_After1M_*)\nfor SQLite + Pebble at 1M-quad workloads. Exercises LSM / B-tree shape\nat sizes where small-N benches may not extrapolate. Predicate\ncardinality 100 d\n[…]\nle_' -benchtime=1x -run=^$ ./...\n\n.gitignore: *.test added to exclude `go test -c` compiled-test binaries\n(matches Go convention).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test+chore: 1M-quad scale benchmarks + gitignore *.test",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-15T15:11:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "77385a776164642a01342142765944c20f5dd340",
          "body": "After a per-project audit (SecDek + lawdek-v2 + yeti-portrait + IGdek +\nmega-index + decklib), the consumer story in quadstore's docs was wrong\nin several load-bearing ways. This commit corrects them. CHANGELOG\n(append-only release record) untouched.\n\nREADME.md headline \"Pebble-backed by default\" pa\n[…]\nge-corpus consumers\n(~10M-100M+ quads)\" + accurate context that SecDek's 19M-quad snapshot\nremains the largest validated workload.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: reconcile to verified cross-project reality (2026-05-15)",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-15T15:07:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5d416288b0f6c89c060d93dda20dad69a436108d",
          "body": "Within a single Commit the SQLite path runs INSERT OR IGNORE then\nDELETE. Pebble mirrors this. Net effect when the same (S,P,O,L)\nappears in BOTH lists: REMOVE — the Add is dedup'd as a duplicate\nand the Remove deletes the existing row.\n\nSurfaced 2026-05-10 in secdek's force-reemit backfill. Caller \n[…]\nfor an\nostensibly-additive change.\n\nAdding writer_remove_add_order_test.go to lock the behavior so it\ncan't silently change later.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(writer): document Adds-then-Removes ordering + lock-in test",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-10T09:55:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aeb01012419355c13c2ad36c7b1ade41b3ef9963",
          "body": "A practical guide for application authors who are choosing between\nquadstore's SQLite and Pebble backends, with specific guidance on\nthe multi-writer architecture decisions Pebble forces but SQLite\nhides.\n\nDistilled from production experience operating SecDek through a\nSQLite→Pebble cutover, 2026-05\n[…]\ny SecDek experience:\n  1. Expose IngestSortedExternalOptions.ScratchDir\n  2. Hoist a generic decklib/scheduler when 2nd consumer arrives\n  3. Strip a reference application showing Pattern 1 end-to-end",
          "is_bot": false,
          "headline": "docs: stacking writers on quadstore's Pebble backend",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-08T03:14:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "60a2c881e2c7db401d6e64c2ebc6c42311042da4",
          "body": "…ollow-up\n\nSurfaced 2026-05-07 during the SecDek Phase 2 commit. Both date to\n2026-05-05 and pre-date current work. Decide whether to finish + land\nthe bench file or delete it; .test binary should be gitignored\nregardless.",
          "is_bot": false,
          "headline": "docs(todo): flag untracked bench_scale_test.go + quadstore.test for f…",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-07T15:23:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7982ccdd82fe5c012a984faf53658b0fb2d1bbc0",
          "body": "Pebble's hardlink-based checkpoint primitive exposed as\n(*PebbleStore).Checkpoint(destDir) — atomic, sub-second on stores up\nto tens of GB, the right shape for a backup snapshot a sibling tool\ncan tar/upload while the live store keeps writing.\n\nOpenPebbleReadOnly registers the same label-count merger as OpenPebble,\nso verify-side tooling that opens a checkpoint produced by the live\nstore doesn't trip Pebble's \"merger name mismatch\" SST guard. SecDek's\ncmd/pebble-verify is the first consumer.",
          "is_bot": false,
          "headline": "feat(pebble): Checkpoint + OpenReadOnly on PebbleStore",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-07T15:21:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7bf63569528f970f5266bf794f4ef53312ca2606",
          "body": "The third level of the ladder isn't a new API — it's a documented\nusage pattern. Closes the migration-guide ladder section.\n\nReal-world bulk ingest workloads almost never look like \"one giant\nslice of every quad in the universe\"; they look like many corpora\ningested sequentially (one Turtle file per\n[…]\neds RAM\n- per-corpus driver: when corpus has natural boundaries that\n  fit in RAM individually\n\nAll three measured and documented.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: per-corpus driver pattern (third level of the IngestSorted ladder)",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T16:22:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8a7a9055c049d6fa48300d54081b22dfdad2c0bc",
          "body": "…roof\n\nTwo real-data validation runs of the IngestSortedExternal variant\nagainst the same 16,155,295-quad SecDek production snapshot:\n\nRun 1 — r6g.2xlarge (62 GB RAM, plenty of headroom):\n  3m 4.9s, 87,373 quads/sec sustained, ~1 GB peak memory\n  vs in-memory IngestSorted on same hardware: 22% slowe\n[…]\n.log\n\n(Earlier runs already archived: -in-memory-r6g, plus the two\ncorrectness logs from the per-label-counter merger validation.)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: IngestSortedExternal validated end-to-end with bounded-memory p…",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T15:16:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d8e3e1e38d286f0e44eef0c062c75f4b87f6d3dc",
          "body": "Adds the external-merge-sort variant on the IngestSorted ladder.\nReads quads from a channel, sorts in chunks, flushes sorted runs\nto disk, then k-way merges the runs into per-keyspace sstables and\nhands them to db.Ingest. Working set: ~400 bytes/quad × ChunkSize\n(default 500_000) regardless of total\n[…]\nk-class\ningest through this path) is the next bench step — pending bench\nhost availability after the in-memory variant validation.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(pebble): IngestSortedExternal — bounded-memory bulk ingest",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T14:30:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bc06a2692c79f9eff1c7ecfa05d277c084570206",
          "body": "Real-data validation of the IngestSorted in-memory variant against the\n16,155,295-quad / 30 GB SecDek production snapshot. Documents the\nladder's first measured ceiling and the speedup vs the standard\nBulkLoader path.\n\nRun sequence:\n\n1. First attempt on t4g.xlarge (16 GB RAM): OOM-killed cleanly dur\n[…]\nntil it lands, the in-memory variant is the right\n  choice for any consumer whose corpus fits the per-bench-host\n  memory ceiling.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: IngestSorted in-memory benched 6.7× faster on SecDek snapshot",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T14:15:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d19d20992eb6ce590684f71d3a9c37eecb9a196e",
          "body": "In-memory variant (option 1 of the three-level ladder in TODO.md).\nBuilds per-keyspace sorted sstables externally and hands them to\ndb.Ingest, bypassing the memtable + WAL + compaction work the\nstandard Writer / BulkLoader paths trigger per write.\n\nAPI:\n- *PebbleStore.IngestSorted(ctx, []Quad, Inges\n[…]\nhe SecDek-snapshot bench against the standard\nBulkLoader path. Numbers will land in MIGRATING_TO_PEBBLE.md as the\nbench completes.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(pebble): IngestSorted — bulk-ingest fast path via Pebble.Ingest",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T13:36:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3696cb810d1488a10b4b4f2bc01a61c351aa66d7",
          "body": "…unt(Label)\n\nLive experiment outcome: Pebble's Reader.Count(Pattern{Label: X}) was\n4-5× SLOWER than SQLite's covering-index idx_lsp path because it was\niter-and-counting the LSP keyspace. Adding a maintained counter\nkeyspace + the Merge operator turns it into a single 8-byte Get,\nmaking Pebble win e\n[…]\nrn).\n- docs/bench-output/: archived raw bench output for both runs\n  (with and without the merger) plus the correctness sweep log.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(pebble): per-label counter via Merge operator — 5,418× faster Co…",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T13:25:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a4627e803f826f8f22739cee26b48100ef311b74",
          "body": "Honoring the constraint that public quadstore docs stay generic\nabout consumers' graph schemas — numbers (sizes, latencies,\nspeedups) are publishable; subject prefix names, partition\nrouting label-prefix lists, and internal aggregation names are\nnot. The risk: someone reading these docs could infer \n[…]\nioning\nrationale, cold-start measurement context) — they just don't\nhand a reader the exact graph schema of a production consumer.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: scrub project schema details from public docs",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T09:12:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c611febdd0e50988d349b66deac28fd8512e8d73",
          "body": "A practical guide for moving an existing SQLite-backed quadstore\ndeployment to Pebble. Written so anyone hitting this fork in the\nfuture has the framework — not just SecDek and not just us.\n\nStructure:\n\n- \"Decide whether to migrate at all\" — a 30-second self-check\n  table (hosting shape, disk profil\n[…]\ner\n  saying its plan-as-shipped is now a stepping stone toward the\n  Pebble cutover (the SQLite-era fix for a SQLite-era problem).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add MIGRATING_TO_PEBBLE.md + flag SecDek as live experiment",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T08:56:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ddf1ba0f754f3a29af50a7e7521f3ed7a1dd1875",
          "body": "The previous commit (81daf74) overstated which dek products run\nquadstore in production. Verified against actual go.mod / call\nsites across all dukkandcards repos:\n\n  - ~/secdek            → DOES import quadstore (Open + OpenPartitioned), running SQLite in production at sfy.io\n  - ~/yeti-portrait   \n[…]\nshot (real production data) round-tripped to Pebble\" so\n  the reader doesn't infer Pebble is deployed in production.\n\nBuild clean.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: correct false production-user claims; honest origin story",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T08:45:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "81daf74e23052a927564b1aea3a53d1918bf8d76",
          "body": "The v0.2 Pebble work was driven by SlideDek's 133M-quad / 60 GB\nSQLite workload, not SecDek's. SecDek (19M / 28 GB) was the\nbyte-perfect validation case after the Pebble backend shipped.\nEarlier docs misattributed the 133M / 60 GB / 140-distinct-predicate\nnumbers to a \"SecDek-class corpus\" — those n\n[…]\nek\n  corpus)\" → \"133 M rows (SlideDek corpus, the workload that drove\n  the Pebble investigation)\".\n\nNo code changes. Build clean.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: SlideDek is the largest production user (corrects misattribution)",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T08:39:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3448057879e9f0dc6b7068b824796b624d413264",
          "body": "Pass 2 of the post-Pebble docs cleanup, focused on what a stranger\narriving from Google sees first (pkg.go.dev godoc, examples/) plus\nthe supporting docs that pass 1 missed.\n\nPublic-surface alignment:\n- quadstore.go package godoc (what shows on pkg.go.dev): replaces\n  \"SQLite default, Pebble opt-in\"\n[…]\ne\".\n\nBuild + vet clean. examples/minimal runs end-to-end on Pebble (3 quads\nwritten + read back, label-namespace check exercised).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: simplify on-ramps; credit Robert Melton; consistency pass 2",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T08:32:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d070e2386417b50d7581d85eee46cd40de800987",
          "body": "Reframes the v0.2 docs around the decision: Pebble is the path\ngoing forward, SQLite stays supported indefinitely for callers\nwho prefer ~20 fewer transitive deps, smaller binaries, or\nsqlite3-CLI access on the data file. No code/API changes —\nOpen(path) still returns SQLite, OpenPebble(path) still \n[…]\nmit b4cf0c9 message and\nPEBBLE_VS_SQLITE.md §\"Real-data validation\"; archived bench file\ncaptured timing/correctness only, not du.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: Pebble is the recommended backend; SQLite stays supported",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T08:18:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "86e928a9824beeba797ce8ab5d59fefafefb6fb5",
          "body": "The Pebble store has lived alongside SQLite as a parallel prototype\nfor weeks; SQLite remains the production backend (Open and\nOpenPartitioned both call the SQLite implementation). Top-of-file\nTODO so the decision doesn't keep drifting.\n\nForcing function: secdek-sqlite-busy is a live production alar\n[…]\ne_test.go on current corpus shape. Rough criteria\nspelled out so the decision is data-driven, not reactive to a single\nalarm fire.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(todo): track SQLite vs Pebble backend decision",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-06T06:36:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6356e07944a8768925c3cf1f07bd713d44874f6b",
          "body": "go mod tidy during today's fork-on-trigger drill noticed that\ngithub.com/cockroachdb/pebble/v2 is a direct require (imported by\ninternal/pebbleq) but was marked // indirect in go.mod. Likely a\nstale annotation from when pebbleq was first added. Promoting to\ndirect + sweeping go.sum tidies.\n\nNo version change. v2.1.5 stays pinned.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(deps): pebble = direct require (post-tidy correction)",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T21:20:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "85a8c32ec60fdea6034cb1bf365dd99c9e56d809",
          "body": "Replaces the descriptive five-step plan in CONTINGENCY.md with an\nactual script — scripts/fork-pebble-on-trigger.sh — that executes\nthe full mitigation locally:\n\n1. Clones cockroachdb/pebble at the pinned SHA\n   (36a5551312e40777b3afff9846796aaadca5f877 = v2.1.5).\n2. Refuses to proceed if upstream's\n[…]\ns. The fork\nwould be source-only; no operational tweaks needed.\n\nLICENSE_AUDIT.md now records the pinned SHA and the drill result.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(contingency): make Pebble fork-on-trigger automated and verified",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T21:19:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1f840a90368409c93b6dbd5a7c3eb15cd61484f8",
          "body": "The optional Pebble backend pulls in 7 libraries maintained by\nCockroach Labs (pebble, errors, redact, swiss, crlib, logtags,\ntokenbucket). All currently Apache 2.0 / BSD-3, but Cockroach Labs\nrelicensed CockroachDB itself (Apache → BSL 2019, hybrid 2024) — the\ntrust profile warrants explicit invent\n[…]\n(\"don't auto-upgrade\nPebble without re-checking license\") is documented in CONTINGENCY.md\nrather than as a fragile go.mod comment.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: license audit + Cockroach Labs contingency plan",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T20:58:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bf3d1f168c1fc2de2483682616b69e8b064fcb5d",
          "body": "5 s wasn't enough to wait out a SecDek server warmup. The\ngridCorpusIndex build issues bursts of multi-second writes that\nhold the WAL writer slot; concurrent writers (edgar-load,\ncorrespondence-load) hit SQLITE_BUSY after 5 s and either log-\nand-skip or fail outright.\n\nObserved 2026-05-05 post-resi\n[…]\nemedy for transient writer\ncontention; it was already partially in place at 5 s, just\nunder-sized for our workload. No API change.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(open): bump busy_timeout 5 s → 60 s",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T19:39:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b4cf0c9215f428a9440b5d063e2572908725f43c",
          "body": "Took the live SecDek nightly backup (production quadstore at\nsfy.io), copied it to a fresh EC2 t4g.xlarge / gp3, ran\ncmd/pebble-correctness: MigrateToPebble + byte-identical comparison.\n\nSource corpus:\n  19,176,859 quads\n  2,688,183 distinct subjects\n  337 distinct predicates\n  28 GB on disk (SQLite\n[…]\nion at scale,\nread-side scan performance.\n\nWhat's still ahead (RETHINK_TEST_PLAN.md item D): a real consumer\nin shadow mode for ~30 days. The byte-identical correctness here is\nthe gate to start that.",
          "is_bot": false,
          "headline": "docs: real-data validation — 19M-quad SecDek migration → Pebble",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T18:32:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "60acb0204fd6cb6c8d8567bf175602dd630146c0",
          "body": "Driver for validation step C in RETHINK_TEST_PLAN.md: take a real\nSQLite-backed quadstore (e.g. SecDek's nightly backup), migrate to\nPebble via MigrateToPebble, then assert byte-identical results\nacross both backends on:\n\n- Total quad count\n- Distinct-subject hash (sha256 of sorted distinct subject \n[…]\ngo build -o pebble-correctness ./cmd/pebble-correctness\n  pebble-correctness -src /path/sqlite.db -dst /path/pebble-dir [-sample N]\n\nOutput is a sequential log of each phase + per-check OK/FAIL lines.",
          "is_bot": false,
          "headline": "cmd/pebble-correctness: real-data SQLite-vs-Pebble correctness check",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T17:56:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8505dfeb927af7838a3f1559ae7c6c429c3b1ee9",
          "body": "Validates Pebble integration on real-shaped workloads beyond the\nhand-picked fixtures in pebble_store_test.go.\n\nA. Property-based round-trip (TestPebbleTorture_RoundTrip):\n\n   Generates 5000 random quads with content drawn from ASCII +\n   Latin-1 + Cyrillic + CJK runes (NUL stripped — known key-\n   \n[…]\n470 lines of\ntest code, no production code changes.\n\nOutstanding: C (real SecDek-snapshot migration test) and D (real\nconsumer in shadow mode) are bigger commits, planned but not blocked\non this work.",
          "is_bot": false,
          "headline": "test: A + B — property-based torture + crash recovery for Pebble backend",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T17:46:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c5b067b4c73988aabc3cc8dc89d105ccf9067818",
          "body": "Date-stamps the v0.2.0 entry. Full release notes in CHANGELOG;\nheadline: quadstore.OpenPebble(path) ships behind the same\nWriter/Reader/BulkLoader surface as the SQLite-backed Open(path),\nwith measured 18-40x single-commit advantage and 5.5x bulk-load-\nat-100k advantage on cloud Linux. SQLite stays the default;\nPebble is opt-in.",
          "is_bot": false,
          "headline": "release: v0.2.0 — Pebble backend (opt-in) shipped",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T17:41:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6b805992135dfff8e485cc26ee2e022000f7b5a",
          "body": "Audit pass — the public quadstore docs were pointing readers at\ninternal paths in a closed-source consumer (SecDek). Those readers\ncan't access those files; the references either looked broken or\nsuggested the source was browsable. Both bad. Fixed:\n\n- examples/README.md: removed the \"look at how Sec\n[…]\ngeneric note that the consumer-specific migration plan is\n  out-of-tree.\n\nPublic product references via https://sfy.io stay (CHANGELOG and\nREADME) — they cite a known production user, not source code.",
          "is_bot": false,
          "headline": "docs: remove pointers into closed-source SecDek internals",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T17:37:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8298a8ec9498115ab2d0d739c1628847c140f338",
          "body": "Two changes that should have landed alongside the public OpenPebble\ncommit but didn't.\n\nquadstore.go package godoc:\n  Was: \"Package quadstore is a minimal quad store backed by SQLite.\"\n  Now: explicitly documents both backends, points at OpenPebble,\n       references docs/PEBBLE_VS_SQLITE.md, mentio\n[…]\n2 with full\n       Writer/Reader/BulkLoader/LabelCounts/Stats/CommitStatsAt\n       surface and cross-backend migration.\"\n\nBoth surfaces — pkg.go.dev godoc and README — now match the\nstate of the repo.",
          "is_bot": false,
          "headline": "docs: package godoc + README \"Where it stands\" reflect v0.2-track",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T17:25:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a01297969e6bbc1f9761c481781e63ac49042a82",
          "body": "Added BenchmarkConcurrentWriters_{SQLite,Pebble}_8x and a BigBatch\nvariant. Hypothesis going in: Pebble's \"no single-writer ceiling\"\nshould give linear concurrent scaling. The numbers say otherwise.\n\nM1 Pro, 8 goroutines × 100 single-quad commits = 800 total:\n\n  Serial:      SQLite 79 ms, Pebble 15 \n[…]\ne here.\n\nAnti-marketing note: this is the kind of finding that wouldn't\nland in a Pebble pitch. Landing it because honesty about limits\nis the only thing that distinguishes the doc from a sales sheet.",
          "is_bot": false,
          "headline": "bench: concurrent-writers — honest finding, scaling didn't materialize",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T17:24:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "57ffca3e4f2a49506ad6974c1e7d84014a132254",
          "body": "License audit on 2026-05-05 of every transitive dep Pebble adds:\n- github.com/cockroachdb/pebble/v2 — BSD-3 (LevelDB-Go Authors)\n- github.com/DataDog/zstd — BSD-2\n- github.com/getsentry/sentry-go — MIT\n- github.com/cockroachdb/* (errors, redact, swiss, tokenbucket,\n  logtags, crlib) — Apache 2.0\n- g\n[…]\ncom/{kr,beorn7,cespare,dustin,RaduBerinde}/* — MIT\n- everything else — MIT or BSD\n\nNo AGPL, no BSL, no commercial-use restrictions. Adding this\naudit note to CHANGELOG so future evaluators can verify.",
          "is_bot": false,
          "headline": "docs: confirm Pebble-introduced deps are all permissive",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T17:17:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d7760b50eb175c6659b8c4b913fa0fa4779f95a",
          "body": "Closes the v0.2 parity gap so users on existing SQLite stores have a\nreal path forward to the Pebble backend.\n\nAdded:\n\n- (*PebbleStore).LabelCounts(ctx) — iterates the LSP keyspace with\n  per-label SeekGE skip; O(distinct_labels × log N).\n- (*PebbleStore).Stats() — quad count from SPO scan; distinct\n[…]\nbleStore: Match (legacy *Iterator type;\nusers use Reader.Find with iter.Seq2), Path (graph traversal\nhelpers), and partitioning (single Pebble dir per Store). All\ndeferred until concrete user request.",
          "is_bot": false,
          "headline": "feat: Pebble parity — LabelCounts, Stats, CommitStats, MigrateToPebble",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T17:16:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "29cc854084ed82d0e3f0ddeb5171e13c80f966eb",
          "body": "Ran the same bench suite on a fresh AWS t4g.large (2 vCPU /\n7.6 GB / 50 GB gp3 EBS / Ubuntu 24.04 ARM64) to confirm the M1 Pro\nresult wasn't a laptop-disk artifact.\n\nDisk probe (fio random 4K writes, iodepth=1, O_DIRECT+O_SYNC):\n  gp3 EBS    345 IOPS, ~2.9 ms per fsync\n  M1 NVMe    ~30,000+ IOPS for\n[…]\ns opt-in via OpenPebble.\nv1.0 question of which becomes default still open — Pebble's\n~20 transitive deps and lack of sqlite3 CLI debuggability are\nreal costs the speed wins must continue to outweigh.",
          "is_bot": false,
          "headline": "docs: Linux EC2 t4g.large numbers — Pebble dominance widens",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T17:05:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9d6c44870e110ae5a844db93b02816ca1cc7e6eb",
          "body": "Promotes internal/pebbleq behind a public quadstore.OpenPebble(path)\nAPI. SQLite-backed Open(path) stays the default; users opt in to\nPebble when the perf wins justify the transitive-dep cost.\n\nPublic API additions:\n- OpenPebble(path) (*PebbleStore, error)\n- (*PebbleStore).Close() / Writer / Reader \n[…]\nANGELOG updated with full breakdown of perf wins, dep cost, and\nremaining gaps. README adds a one-paragraph callout for the\nopt-in. Cloud Linux numbers still pending — see RETHINK_TEST_PLAN.md\nTest 2.",
          "is_bot": false,
          "headline": "feat: quadstore.OpenPebble — public opt-in Pebble backend",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T16:48:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "60c7c3f4912e9dfea59b07104fb64dfe0aa92bef",
          "body": "Updates the head-to-head doc now that the Pebble prototype has\nfeature parity (audit, label validation, real Find). Adds the\naudited single-commit row, which is the comparison most production\nusers care about: 5.95 µs (Pebble) vs 107 µs (SQLite) — 18× faster.\n\nDecision-rule moves from \"4 of 5\" to \"5\n[…]\n the new audited\nbatch and find rows holding up. Updated \"What this benchmark does\nNOT prove\" to remove the prototype-omits-audit caveat (no longer\ntrue) and the no-validation caveat (no longer true).",
          "is_bot": false,
          "headline": "docs: refresh PEBBLE_VS_SQLITE with audited prototype numbers",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T16:43:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a6a20c099a00a151329def64814bc19e4933a289",
          "body": "Promotes internal/pebbleq from \"minimum viable bench harness\" to\n\"production-shaped prototype.\" Still under internal/ until Linux\nnumbers confirm and we decide on the public OpenPebble entrypoint.\n\nAdded to match writer.go / reader.go / bulk.go semantics:\n\n- Label namespace validation. source: / der\n[…]\nh backend side-by-side.\n\nNext: same bench suite on cloud Linux to confirm the deltas survive\nreal-disk fsync. If they hold, promote pebbleq behind quadstore.\nOpenPebble(path) as a v0.2 opt-in backend.",
          "is_bot": false,
          "headline": "pebbleq: feature-complete prototype with audit, validation, real Find",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T16:42:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f6d460517819509036a0e00f9cc5f87bd1586204",
          "body": "internal/pebbleq/ is a non-production prototype: same Open/Writer/\nReader/BulkLoader API shape as quadstore proper, four-keyspace\nencoding (SPO/POS/OSP/LSP with single-byte prefixes), default Pebble\noptions other than a quiet logger.\n\nComparison runs at lazy-fsync durability on both sides (SQLite\nsy\n[…]\nction commands\n\nNext: same suite on cloud Linux (t4g.large, gp3 EBS) to confirm the\ndeltas survive a real-disk fsync profile. If they do, begin\nproduction Pebble port behind quadstore.OpenPebble(...).",
          "is_bot": false,
          "headline": "bench: Pebble prototype + head-to-head numbers vs SQLite (M1 Pro)",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T16:30:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c6865294b4a984512ba71e40d89d851dd1808228",
          "body": "The rigorous analysis lives in RETHINK_2026.md; this doc is the\nshort-form decision artifact:\n\n- Recommendation (swap SQLite for Pebble), with order-of-magnitude\n  expected deltas as a target, not a claim.\n- Three tests in priority order, with explicit pass/fail criteria:\n  1. Pebble head-to-head — \n[…]\nd order if we proceed (5 steps, internal/pebble/*).\n- Compatibility commitment: public API surface does not change\n  during the prototype; existing deployments are not broken to\n  land a backend swap.",
          "is_bot": false,
          "headline": "docs: RETHINK_TEST_PLAN — actionable companion to RETHINK_2026",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T16:09:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b14635a6b41aebf9fdcec75a26b7f8f461354554",
          "body": "Rigorous self-audit. Separates what's aged well (label namespace,\nembedded library, pure Go, Reader/Writer/BulkLoader API, audit as\nwrite-time invariant) from what we'd change today.\n\nThe biggest lever: swap SQLite → Pebble. SQLite's structural costs\n(single-writer ceiling, B-tree index rebuild, INS\n[…]\nnside SQLite.\n\nLinked from README \"Start here\" so it's findable as a public\nposition, not internal note. Open invitation: run any of these\ntests on a server we don't have access to and PR the results.",
          "is_bot": false,
          "headline": "docs: RETHINK_2026.md — what we'd build differently today",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T16:07:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f2daa0ce9bb63ac698bdc541fe02d0a1f6c96be1",
          "body": "Closes the largest open issue in LIMITATIONS.md. Single-quad Commit\ndrops from ~108 µs → ~60 µs (45% faster) on M1 Pro / darwin-arm64,\nbenchtime=3s, count=2 — putting Writer.Commit within ~2.4× of raw\nmodernc.org/sqlite single-INSERT (was ~4.3×).\n\nAPI: additive bool field on Batch (zero-value preser\n[…]\nwrites.\n\nTests: TestWriterCommit_NoAudit (audit rows are zero, mixing works)\nand TestWriterCommit_NoAudit_LabelStillValidated (label rules are\nnot bypassed). Bench: BenchmarkCommit_SingleQuad_NoAudit.",
          "is_bot": false,
          "headline": "feat: Batch.NoAudit — opt out of commits + commit_ops for hot paths",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T16:04:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "69eef82c028e46610e0f69934d729e0414ebfd98",
          "body": "Single-page audit of every way quadstore is worse than what an\nevaluator might hope for. Organized so adoption decisions are made\non real evidence, not the marketing surface:\n\n- Hard constraints (architectural, will not change): single-writer\n  per partition, no sharding, no query language, no graph\n[…]\nys honest.\n- Empty-promise check: invitation to PR-remove items that quietly\n  got fixed; performance numbers should be reproducible.\n\nLinked from README \"Start here\" so it's findable before adoption.",
          "is_bot": false,
          "headline": "docs: add LIMITATIONS.md — expose every known problem honestly",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T16:00:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13d136a1b4bdf2931dad45df8f545ea38ce107be",
          "body": "Original code prepared addQuad, logOp, and removeQuad on every Commit\nregardless of what the batch contained. For the common shape\n(Adds-only, no Removes) the removeQuad prepare is pure waste.\n\nNow: only prepare statements we'll actually Exec against. Single-quad\nCommit drops from ~121 µs to ~112 µs\n[…]\nonConn, rebind\nvia tx.StmtContext) was tested and reverted: tx.StmtContext adds\noverhead that regresses Batch1k by ~14% under modernc/sqlite,\nwiping out the single-commit gain on workloads that batch.",
          "is_bot": false,
          "headline": "perf: skip Prepare in Writer.Commit for unused statement paths",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T15:55:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7666257512dae3fc2f6e7fc3cd87383ca15a1493",
          "body": "Replaces the technical-overview README with the conversational\n'Graph with a purpose' framing — leads with the four real questions\n(provenance, multi-tenancy, derivation rebuild, audit) that pushed\nus from triple to quad, and lets the label namespace fall out as\nthe answer.\n\nKeeps the comparison tab\n[…]\ninding: BulkLoader is within ~2% of expert\nhand-rolled SQLite using the same schema.\n\nNet: 213 → 128 lines, opening section now tells the user what\nproblem this exists to solve before showing the API.",
          "is_bot": false,
          "headline": "docs: rewrite README with origin-story voice from writeup",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T15:55:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "47d0b679ff701b06d37e53ab40fc00a325d96167",
          "body": "Adds BenchmarkCompare_RawSQLite_QuadstoreShape: raw modernc SQLite\nrunning quadstore's exact schema and exact pattern (four indexes,\ndrop three on load start, multi-row INSERT in 500-row batches,\nrebuild on close). Same pattern, no library.\n\nResult: BulkLoader is +6% at N=1k and +2% at N=10k/100k vs\n[…]\norkload\nonly reads by subject, you'd reproduce the simple-raw numbers in 200\nlines. If you read by predicate, object, or label too, you'd\nreproduce quadstore's schema and land at ~the same throughput.",
          "is_bot": false,
          "headline": "bench: prove BulkLoader is within 2% of hand-rolled raw SQLite",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T15:38:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6d788a2700b06993bd10695e4558899966c0e9cc",
          "body": "Earlier 9× overhead claim was a benchmark methodology bug — the loop\nreused the same store across iterations, so later iterations inserted\ninto a 320k-row table while the timer kept running. Fresh DB per\niteration via b.StopTimer/StartTimer fixes it.\n\nHonest overhead at scale: ~2.2× across N=10k and\n[…]\n rows that's\nnet-negative, which is why Writer.Commit batches are the right tool\nfor small loads.\n\nUpdates docs/PERFORMANCE.md with the corrected numbers and the\nbreakdown of where the overhead lives.",
          "is_bot": false,
          "headline": "bench: parameterize bulk-load comparison across N=1k/10k/100k",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T15:33:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5b258716f5bf1729d69dee9f6947a952c5c6f16e",
          "body": "Adds bench_compare_test.go: hand-rolled raw SQLite quad table on the\nsame modernc.org/sqlite driver, same WAL+NORMAL defaults quadstore\nuses, plus a BulkLoader-equivalent path with the bulk PRAGMAs the\nlibrary applies internally.\n\nCaptures the actual cost of using the library:\n- Single-quad commit: \n[…]\nead comes from. Also fixes a misleading\nline that claimed synchronous=FULL — quadstore opens WAL+NORMAL, so\nthe existing microbenchmark numbers were already taken with the\nrelaxed durability settings.",
          "is_bot": false,
          "headline": "bench: side-by-side vs raw SQLite (same modernc driver, same PRAGMAs)",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T15:25:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b274b7ad6cc88022ab10b6220bc61c442f43a021",
          "body": "Make the project feel like one a serious developer would invest time\ninto:\n\n- .github/ISSUE_TEMPLATE/bug_report.md — guides reporters toward the\n  reproducer + environment info we need.\n- .github/ISSUE_TEMPLATE/feature_request.md — explicitly states the\n  project's scope (\"no sharding, no query lang\n[…]\nitly NOT\n  claiming as our own.\n\nThese don't change any code. They change first-impression signals\nwhen someone lands on the repo.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: GitHub repo polish — issue/PR templates, security policy, CoC",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T15:17:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2f5ecb26045231a9f45539dad0384b313ace034b",
          "body": "The README's Inspiration section becomes Acknowledgements — explicit\nthanks by name, framed as the door being open if Barak or Robert ever\nwant to engage. Goal: if either of them ever lands on this repo, they\nshould feel respected, not \"credited as required.\"\n\nNew ACKNOWLEDGEMENTS.md gives a longer-\n[…]\ny + modernc.org/sqlite (Jan Mercl) + SQLite (D. Richard Hipp) +\nthe Go team for iter.Seq2. Linked from README documentation index.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: warmer credit to Barak Michener + Robert Hessmann + Cayley lineage",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T15:14:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "15e41886c0af286770b6ad3b80d3c49e59538971",
          "body": "Real benchmark numbers on M1 Pro:\n  Commit_SingleQuad:  116 µs/op (~8,600/sec)   — synchronous=FULL fsync each\n  Commit_Batch1k:     12 µs/quad (~80,000/sec) — amortized batch\n  Find_BySubject:     69 µs/op (~14,400/sec)   — indexed lookup\n\nProduction observations from SecDek (28 GB graph, t4g.large\n[…]\nn work (PRs welcome): BulkLoader 1M-quad bench, concurrent-reader\ncontention bench, side-by-side vs raw SQLite + vs Cayley/BoltDB.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: PERFORMANCE.md — measured numbers + practical guidance",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T15:12:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e6ef910275a282f01c5b0661296511be59eccd46",
          "body": "Three self-contained main.go programs that demonstrate the library's\nmain shapes. Each is short enough to read in one screen, builds clean\n(CI verifies it), and writes to a MkdirTemp directory that's cleaned\nup on exit.\n\n- minimal — Open + Writer.Commit + Reader.Find. The 30-second\n  walkthrough. Sh\n[…]\nalidation error (\"label X must start with one of: source:,\nderived:, human:, meta:\").\n\nREADME updated with explicit example links.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "examples: 3 runnable programs (minimal / audit-log / multi-tenant)",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T15:11:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d226b76ea9cdf9ca83c9ef4d749b6720dbc1d467",
          "body": "- README: sharpened positioning (\"graph database for Go applications,\n  pure Go, no CGo\"), comparison table vs Cayley/Dgraph/SQLite, status\n  callout, expanded Cayley credit (Barak Michener, Robert Hessmann),\n  badges, honest \"used in production\" (just SecDek for now).\n- CHANGELOG: v0.1.0 entry — wh\n[…]\nssed all targets.\n- Removed docs/QUADSTORE.md (older overlapping positioning doc; README\n  covers the same material more crisply).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "v0.1.0: first public release",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T15:05:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "00cad44c4af4d51700c6b6324ed1a10cd4f06da4",
          "body": "…tion\n\nThe original framing reached for watermarks as the default answer.\nFor most ingest pipelines the simpler answer — a per-subject\nsentinel check that gates the expensive work — is sufficient and\nproven in production. Reach for watermarks only when many phases\nshare a change-set stream and empty\n[…]\nr to retired SecDek redesign plan with\n  pointers to INGEST_CONVENTION.md and INGEST_AUDIT.md as worked\n  in-repo specializations.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(incremental): lead with per-subject sentinel; cite SecDek conven…",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T07:41:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "298b7fb1565cb5fb7c8473fabdb6a501b3e8367e",
          "body": "Library consumers keep falling into the \"rebuild from scratch every\ntick\" anti-pattern: every recurring derivation reads the entire\ncorpus, recomputes everything, and writes the result. Cheap on day\none, breaks at scale.\n\nThis doc captures the three patterns that fix it (Watermark for\nderivation, Co\n[…]\nces PARTITIONING_DESIGN.md (orthogonal but\ncomplementary) and SecDek's INGEST_REDESIGN_PLAN.md (the SecDek-\nspecific application).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add INCREMENTAL_PROCESSING.md — patterns + anti-patterns",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T07:20:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "67edbfd1443092dffb6b335fa3cbe7b1c0e97b5e",
          "body": "Adds quadstore.MigrateFromSnapshot(ctx, srcPath, dst, opts) which takes\na consistent point-in-time copy of the source via SQLite's\n`VACUUM INTO`, then runs Migrate against the frozen snapshot.\nConcurrent writers on srcPath remain unblocked throughout (per SQLite\ndocs); the migration sees a single co\n[…]\nnt. The library trusts the caller.\n\nDoc: ~/quadstore/docs/PARTITIONING_DESIGN.md §Migration tooling.\nTests: 3 new (46 total pass).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(migrate): MigrateFromSnapshot for race-free upgrades",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T06:37:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8289ed61ee97b71aab6cd0b6cfd2ddaed0ee218e",
          "body": "Migrate was setting bl.batchSize = opts.ChunkSize (default 10000),\nproducing 40000 SQL variables per multi-row INSERT and tripping\nmodernc.org/sqlite's SQLITE_MAX_VARIABLE_NUMBER ceiling with\n\"SQL logic error: too many SQL variables (1)\".\n\nBulkLoader's default of bulkBatchRows = 500 (= 2000 vars per\n[…]\necoupled from the\nper-INSERT row count.\n\nCaught while applying SecDek's first real migration on a 19 M-row\nsource DB (2026-05-05).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(migrate): don't override BulkLoader.batchSize",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T06:28:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6fd33c3a501b0b1cbc6e642616c158af3ea282a1",
          "body": "A single quads table hits a B-tree dilution wall when a Store\naccumulates fact families that don't share queries. Concrete trigger:\nSecDek's live DB grew 1.3 GB → 28 GB in two weeks after a comment-\nletter corpus load, and product queries on the (still-256K-row)\nno-action letter family now scan a B-\n[…]\n\nAlso brings previously-untracked baseline files into version control:\nREADME.md, LICENSE, CONTRIBUTING.md, bulk.go, bulk_test.go.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: partitioning support (OpenPartitioned, Migrate, fan-out reader)",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-05T06:06:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "188db91d6ffa04888a3efa4f2ab0d5b0f20d263c",
          "body": "SQLite's wal_autocheckpoint moves data into the main DB on schedule\nbut with journal_size_limit=-1 (the default) the WAL high-water mark\nis never truncated — bytes are reused for the next round of writes,\nso on long-lived writers (server processes, daily-running ingests)\nthe WAL file grows unbounded\n[…]\n small enough to bound disk consumption\nacross long uptime windows.\n\nAffects every quadstore consumer (SecDek, LawDek-v2, future).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(open): add journal_size_limit=500MB to default DSN PRAGMAs",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-05-01T08:03:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "139799f9a972221fcd24ada6bfc0822496eaeadf",
          "body": "commit_ops grows unbounded (1 row per add/remove per commit); in SecDek\nit was 1.87M rows / ~42% of the 1.7 GB DB file. Its parent table\n(commits) holds lightweight provenance metadata and stays.\n\nAdditive API (no break):\n- Writer.PruneOps(ctx, olderThan) deletes commit_ops rows for commits\n  whose \n[…]\nd.\n\nTestWriterPruneOps covers: delete eligible, preserve commits, preserve\nquads, idempotent, error-after-close. 26 tests passing.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: commit-journal retention — Writer.PruneOps + cmd/prune",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-20T16:54:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d9f37f5d7860243899b74d44dd05c4a4c5c48bd6",
          "body": "…y ignored)\n\nThe prior DSN (?_journal_mode=WAL&_busy_timeout=5000) is not honored by\nmodernc.org/sqlite on file-backed DBs. Verified 2026-04-20 on the live\n1.7 GB SecDek DB: journal=delete, synchronous=FULL, cache=2MB default,\nbusy_timeout=0 — every dek product has been running in default\nrollback-j\n[…]\n6 MiB).\n\nPost-fix verification on fresh DB: journal=wal, sync=1, cache=-262144,\nbusy=5000, WAL sidecar created. All 25 tests pass.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: apply journal_mode/busy_timeout via _pragma= (legacy DSN silentl…",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-20T16:42:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f32eaaff631b9984d69c9c9249e537f57b2893ba",
          "body": "Three benchmarks to catch regressions when LawDek/PubDek workloads\nstart exercising the DB:\n- BenchmarkCommit_SingleQuad: per-commit overhead (WAL fsync dominates)\n- BenchmarkCommit_Batch1k: ingest-pipeline throughput\n- BenchmarkFind_BySubject: indexed-read latency\n\nFirst run on M1 Pro: 1.6k/sec sin\n[…]\ns, 75.8k/sec batched,\n73µs Find — see project_dek_graph_db_api.md pre-pass decisions for\ninterpretation and numbers-drift caveats.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: baseline benchmarks for commit and Find paths",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-14T02:33:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "37afc514f492dd904846c07cdaa16119e8e3cd80",
          "body": "…ation\n\n5 instances of fmt.Println(\"text\\n\") changed to fmt.Print(\"text\\n\\n\").\nSame bytes on stdout, vet-clean. Unblocks `go test ./...`.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(observe): satisfy go vet while preserving visual blank-line separ…",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-14T02:25:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d24279ac2449707bc5357ce1caee670f7dead530",
          "body": "…ption\n\nAdds rigorous API for dek-family graph DB consumers (LawDek, PubDek):\n- Writer/Reader separation, ctx throughout, iter.Seq2 streaming\n- Batch type: Adds, Removes, default Label, Metadata\n- commits + commit_ops journal (schema v2, UUIDv7 time-sortable ids)\n- Enforced label namespace on Writer\n[…]\ne) built-in\n- Partition opaque key reserved for future per-partition routing\n- 11 new tests covering new surface; 25 total passing\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Writer/Reader API with commits journal for multi-product consum…",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-14T02:24:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0e7293e5518e47199834c23452161b461136f079",
          "body": "RESEARCH.md: added page clustering section with cluster-to-index\nmapping table, interactive HTML tool description, and the key insight\n(find clusters, don't name them).\n\nCHANGELOG.md: added second session with observe tool, HTML review\npage, key findings, and research correction.\n\nTODO.md: updated to current state — clustering works, next steps\nare Michelle feedback and mega-index integration.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: update RESEARCH, CHANGELOG, TODO for clustering session",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-13T22:32:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8d3a63cf66535f6ef724323a39681b4b0cf57aa9",
          "body": "fmt.Sprintf had 4 substitutions but only 3 args. Added simJSON\nas the 4th arg. Clusters now render and splits use real cosine\nsimilarity from the precomputed matrix.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: pass simMatrix to HTML format string (was MISSING)",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-13T22:19:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cc050e2fe2d0633ceec0c001995a3ae71693838f",
          "body": "- Precompute full pairwise similarity matrix server-side, embed in HTML\n- Client-side split uses real cosine scores instead of 6-word Jaccard\n- Minimum 4 pages required to split (guarantees 2+ per side)\n- Refuses to split if pages can't be meaningfully separated\n- Results sorted by page number\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: split uses real cosine similarity, enforces min 2 pages per group",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-13T20:47:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "79eb9c8e74f25173c2c0de902696fb3954b14b51",
          "body": "- Each cluster has a \"Split this group\" button that divides it into\n  2 sub-clusters based on vocabulary similarity (k-means k=2 Jaccard)\n- Sub-clusters indented with left border, labeled with parent\n- Splits can be repeated: 10 → 15 → 22 → name them → export\n- Page text now flows as prose (PDF line\n[…]\nanularity is right, then name each group. The depth at which\nthey stop splitting reveals the natural granularity of index entries.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: split clusters + clean text formatting",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-13T19:53:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "de16bfaff398ce33be2ed9a71a855583587d655f",
          "body": "Self-contained HTML page (no deps, 35KB) showing page clusters.\nThe indexer opens in a browser, names each cluster, expands pages\nto read text, and exports named clusters as JSON.\n\nUX flow: see clusters → name them → verify by reading → export.\n\nIteration 1 of 3: static presentation + naming + export.\nNext: split/merge clusters, drag pages between groups.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: HTML cluster review page for indexer",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-13T19:17:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e6c66ddd2416134301cffc6e20d601a198427ea5",
          "body": "Page clustering via TF-IDF cosine similarity finds 10 clusters that\nmap directly to Michelle's major index groupings:\n- Cluster 1 (23-33): food/acorns/hoarding\n- Cluster 2 (4-6,36,50-55): tools/bill/tongue\n- Cluster 3 (1,60-68): species identification/key\n- Cluster 4 (17-22): sapsuckers/sap\n- Cluste\n[…]\ng\n\nThe tool finds the group boundaries. The indexer names them.\nThis is the expose-don't-solve pattern: unnamed groups for review.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: page clustering + page range fix",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-13T19:08:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a77572adf4ee35642cc3b1c9f13cdbb1fa9fd022",
          "body": "Parser was only extracting range endpoints, not filling in between.\nen-dash and hyphen ranges now properly expand. Adds 83 page references\nthat were being silently dropped.\n\nGenuine absence rate stable at 22.7% (was 22.9% before fix).\nThe finding holds — not a page mapping error.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: expand page ranges (23–27 → 23,24,25,26,27)",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-13T18:57:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c51e1783afdceab7c1126995c6dbdd7c0cb2cd14",
          "body": "Original claim of 46.6% no-match was too strict. After accounting for\nmorphological variants: 22.9% genuine absence (down from 46.6%).\n\nDocuments the three operations of indexing:\n1. Direct extraction (25.8%)\n2. Normalization (30.7%)\n3. Extension + abstraction (43.5% — the human judgment layer)\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: update RESEARCH.md with corrected input-output findings",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-13T18:55:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3931545000d93818200dc4362623ce4fbb997345",
          "body": "New cmd/observe with three modes:\n- Default: shows entry terms alongside their page text, side by side\n- -stats: counts how often entry terms appear on their pages\n- verify: digs into every \"no match\" pair to classify WHY\n\nKey finding (corrected from initial 46.6% claim):\n- 25.8% exact match (term i\n[…]\nxt match)\n2. Normalize (variant forms → canonical term)\n3. Abstract (name what the page discusses, even when the word isn't there)\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: observe tool — raw input-output analysis of index entries",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-13T18:54:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "78d50c8acd621958f366d81f10b2af84d9a53540",
          "body": "TODO captures the research pause point and recovery steps.\nCHANGELOG documents everything built and found in this session.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add TODO (where to start next) and CHANGELOG",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-13T14:48:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0fc76f27f40c6d69671a7af480f9531ade280b16",
          "body": "Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: remove redundant newlines in Println calls (vet clean)",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-13T14:46:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9926152c51404a0e7e4c3d79e3ea385357f61456",
          "body": "Cayley-inspired SQLite quad store (481 lines) with path traversal,\npattern matching, and tokenized shape export. Standalone Go module,\nzero deps beyond modernc.org/sqlite.\n\nIngest tool loads professional indexer's reference DOCX and NLP\npipeline output into same store with labels. Computes 9 signal \n[…]\nrch paused at: model the input-output transformation (pages →\nindex), not the indexer's intent. See RESEARCH.md for full analysis.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: quad store library + contention research (Woodpeckers)",
          "author_name": "Jay Guiliano",
          "author_login": null,
          "committed_at": "2026-04-13T14:45:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 6,
      "commits_last_year": 74,
      "latest_release_at": "2026-05-15T15:11:32Z",
      "latest_release_tag": "v0.2.4",
      "releases_from_tags": true,
      "days_since_last_push": 50,
      "active_weeks_last_year": 5,
      "days_since_latest_release": 72,
      "mean_days_between_releases": 2
    },
    "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/dukkandcards/quadstore",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/dukkandcards/quadstore",
          "is_deprecated": false,
          "latest_version": "v0.2.4",
          "repository_url": "https://github.com/dukkandcards/quadstore",
          "versions_count": 6,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-05-15T15:11:32Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 72
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 26692,
      "source_files_sampled": 52,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/cockroachdb/pebble/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.1.5"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.48.2"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": null,
      "bot_contributors": 0,
      "top_contributors": [],
      "contributors_sampled": null,
      "top_contributor_share": null
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 8,
            "reason": "2 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "c54c67cac4ae8e34fedb6b2a5305b116a8628e30",
        "ran_at": "2026-07-26T15:55:30Z",
        "aggregate_score": 5.1,
        "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-05-15T15:14:49Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/dukkandcards/quadstore",
    "host": "github.com",
    "name": "quadstore",
    "owner": "dukkandcards"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 52,
      "inputs": {
        "security": 51,
        "vitality": 64,
        "community": 43,
        "governance": 35,
        "engineering": 66
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 64,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "at_risk",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "commits_last_year": 74,
              "human_commit_share": 1,
              "days_since_last_push": 50,
              "active_weeks_last_year": 5
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 50 days ago",
                "points": 18,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 50
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "5/52 weeks with commits",
                "points": 3.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "74 commits in the last year",
                "points": 16.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 74
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 6,
              "latest_release_tag": "v0.2.4",
              "releases_from_tags": true,
              "days_since_latest_release": 72,
              "mean_days_between_releases": 2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "6 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 72 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 72
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 43,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "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 (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 35,
        "weight": 0.24,
        "metrics": [
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "critical",
            "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": 16,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "dukkandcards",
              "public_repos": 1,
              "account_age_days": 192
            },
            "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": "0 followers of dukkandcards",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "dukkandcards"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1 public repos, account ~0 yr old",
                "points": 3.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/dukkandcards/quadstore"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 72
            },
            "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 72 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 72
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "6 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "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": "moderate",
        "name": "Engineering Quality",
        "value": 66,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "embedded-database",
                "golang",
                "graph-database",
                "graphdb",
                "quadstore",
                "sqlite"
              ],
              "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": "6 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "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": "moderate",
        "name": "Security",
        "value": 51,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 51,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 5.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "2 existing vulnerabilities detected",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 59,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "74 of 74 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 74,
                      "sampled": 74
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.649,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "go.mod"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "48 of the last 74 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 48,
                      "sampled": 74
                    }
                  }
                ],
                "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": 26692,
              "source_files_sampled": 52,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/52 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 52,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": [
    "Contributor list unavailable",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T15:55:32.965065Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/d/dukkandcards/quadstore.svg",
  "full_name": "dukkandcards/quadstore",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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.