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

g8rswimmer / cogniflow

Visual AI workflow automation platform with a drag-and-drop canvas editor, built-in LLM/RAG/HTTP nodes, cron and webhook triggers, and an evaluation system for grading workflow outputs

Go · TypeScriptMIT★ 2 Sterne⑂ 0 Forksseit Mai 2026Auf GitHub ansehen ↗

g8rswimmer/cogniflow erreicht einen Gesundheitsindex von 50 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei AI Readiness (86/100) ab, am schwächsten bei Community & Adoption (24/100). Zuletzt vor 28 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

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

50
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

SeanPersönliches Konto
26 Follower24 öffentliche Reposseit Dez. 2017

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/g8rswimmer/cogniflowv1.13.1-12vor 29 Tagen

Metriken nach Kategorie

Vitalität

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

68Mittel · 22 % des Gesamtindex
Wie die Bewertung erfolgt
28.8/36Push-Aktualität — letzter Push vor 28 Tagen
3.5/36Commit-Rhythmus — 5/52 Wochen mit Commits
15.1/18Commit-Volumen — 47 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year47
human_commit_share1
days_since_last_push28
active_weeks_last_year5

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 12 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 29 Tagen
27/27Release-Rhythmus — ein Release etwa alle 1,1 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count12
latest_release_tagv1.13.1
releases_from_tagsnein
days_since_latest_release29
mean_days_between_releases1,1
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?

24Kritisch · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 2 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars2
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)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein

Nachhaltigkeit & Governance

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

54Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
38.2/38.3PR-Annahme — 43/43 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs43
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote. 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
10.3/25Reichweite des Inhabers — 26 Follower von g8rswimmer
22.2/25Kontohistorie — 24 öffentliche Repos, Kontoalter ca. 8 Jahre
Verwendete Eingangsdaten
followers26
owner_typeUser
is_verified
owner_loging8rswimmer
public_repos24
account_age_days3.129
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 29 Tagen
20/20Versionshistorie — 12 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgithub.com/g8rswimmer/cogniflow
ecosystemsgo
any_deprecatednein
min_days_since_publish29

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

66Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — eslint.config.js
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
12/20OpenSSF Scorecard: CI-Tests — 20 out of 30 merged PRs checked by a CI test -- score normalized to 6
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 4 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsagentic-workflows, ai-agents, go, react
has_wikinein
homepage
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

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

27Kritisch · 16 % des Gesamtindex

Sicherheitslage

27Kritisch
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
1.5/2.5CI-Tests — 20 out of 30 merged PRs checked by a CI test -- score normalized to 6
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
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — keine Daten
1/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 23 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate2,7
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): 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.

86Exzellent · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 43 von 47 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,915
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes11.417
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — backend/Makefile
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — eslint.config.js
11/11Statische Typprüfung — frontend/tsconfig.json
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
10/10Belegte Agentenpraxis — 39 der letzten 47 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
2/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesgo.sum, package-lock.json
has_dockerfileja
typed_languageja
bootstrap_filesbackend/Makefile
has_devcontainernein
has_linter_configja
typecheck_configsfrontend/tsconfig.json
agent_commit_share0,83
toolchain_manifestsbackend/go.mod, examples/plugins/echo/go.mod
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
55/55Handhabbare Dateigrößen — 0/224 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes41.046
source_files_sampled224
oversized_source_files0
Wie die Bewertung erfolgt
40/40API-Schema (OpenAPI/GraphQL/proto) — backend/proto/grader/v1/grader.proto, backend/proto/plugin/v1/plugin.proto
0/20MCP-Server
40/40Lauffähige Beispiele — demos, examples
Verwendete Eingangsdaten
example_dirsdemos, examples
has_mcp_signalnein
api_schema_filesbackend/proto/grader/v1/grader.proto, backend/proto/plugin/v1/plugin.proto

Eckdaten

2GitHub-Sterne
1Mitwirkende
47Commits, letzte 12 Monate
28Tage seit letztem Push
12Releases
1Bus-Faktor
0offene Issues
Go, npmPaket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

OpenSSF Scorecard 2.7 / 10
2.7Gesamtwert

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

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
6CI-Tests20 out of 30 merged PRs checked by a CI test -- score normalized to 6
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
0Maintainedproject was created within the last 90 days. Please review its contents carefully
k. A.Packagingpackaging workflow not detected
2Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 2
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities23 existing vulnerabilities detected
Direkte Abhängigkeiten 17
RegistryPaketVersionsvorgabeManifest
Gogithub.com/glebarez/go-sqlitev1.21.2backend/go.mod
Gogithub.com/go-sql-driver/mysqlv1.10.0backend/go.mod
Gogithub.com/golang-migrate/migrate/v4v4.19.1backend/go.mod
Gogithub.com/google/cel-gov0.28.1backend/go.mod
Gogithub.com/gorilla/websocketv1.5.3backend/go.mod
Gogithub.com/jmoiron/sqlxv1.4.0backend/go.mod
Gogithub.com/robfig/cron/v3v3.0.1backend/go.mod
Gogithub.com/tidwall/gjsonv1.19.0backend/go.mod
npm@microlink/react-json-view^1.31.20frontend/package.json
npm@rjsf/core^6.6.1frontend/package.json
npm@rjsf/utils^6.6.1frontend/package.json
npm@rjsf/validator-ajv8^6.6.1frontend/package.json
npm@xyflow/react^12.11.0frontend/package.json
npmreact^18.3.1frontend/package.json
npmreact-dom^18.3.1frontend/package.json
npmreact-router-dom^7.17.0frontend/package.json
npmzustand^5.0.14frontend/package.json
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": [
        "agentic-workflows",
        "ai-agents",
        "go",
        "react"
      ],
      "is_fork": false,
      "size_kb": 771,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 1058597,
        "CSS": 4664,
        "HTML": 978,
        "Shell": 15187,
        "Makefile": 358,
        "Dockerfile": 1260,
        "JavaScript": 591,
        "TypeScript": 386906
      },
      "pushed_at": "2026-06-26T15:45:53Z",
      "created_at": "2026-05-29T19:48:28Z",
      "owner_type": "User",
      "updated_at": "2026-06-26T15:45:55Z",
      "description": "Visual AI workflow automation platform with a drag-and-drop canvas editor, built-in LLM/RAG/HTTP nodes, cron and webhook triggers, and an evaluation system for grading workflow outputs",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go",
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://www.linkedin.com/in/sean-justice-932240102/",
      "name": "Sean",
      "type": "User",
      "login": "g8rswimmer",
      "company": null,
      "location": null,
      "followers": 26,
      "avatar_url": "https://avatars.githubusercontent.com/u/34941871?v=4",
      "created_at": "2017-12-29T14:35:19Z",
      "is_verified": null,
      "public_repos": 24,
      "account_age_days": 3129
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.13.1",
          "kind": "patch",
          "published_at": "2026-06-25T20:54:21Z"
        },
        {
          "tag": "v1.13.0",
          "kind": "minor",
          "published_at": "2026-06-25T02:11:14Z"
        },
        {
          "tag": "v1.12.0",
          "kind": "minor",
          "published_at": "2026-06-24T02:10:37Z"
        },
        {
          "tag": "v1.11.0",
          "kind": "minor",
          "published_at": "2026-06-22T21:17:09Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2026-06-21T16:27:32Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2026-06-19T18:00:10Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2026-06-17T15:53:33Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-06-16T20:59:51Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-06-16T00:50:23Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-06-15T16:35:16Z"
        },
        {
          "tag": "v1.1.0-beta",
          "kind": "prerelease",
          "published_at": "2026-06-10T01:46:26Z"
        },
        {
          "tag": "v1.0.0-beta",
          "kind": "prerelease",
          "published_at": "2026-06-07T15:40:10Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "b66a91a745afadc3510428e42ee1f362d0441b42",
          "body": "CLAUDE.md, REQUIREMENTS.md, ARCHITECTURE.md, and PROJECT_PLAN.md were\nall written before F03 auth, F04 versioning, the eval system (ME1–ME5),\nand loop support were implemented. This commit brings them in sync:\n\n- CLAUDE.md: add auth/email/eval packages to layout, new env vars\n  (JWT_SECRET, JWT_TTL,\n[…]\noutes; update frontend route structure\n- PROJECT_PLAN.md: cross-reference eval plan (ME1-ME5), F03 auth,\n  F04 versioning, and loop milestone\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update docs to reflect auth, eval, versioning, and loop features (#43)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-26T15:45:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dc97c1a0c4c7f4478287b4df8a1dc0320ffc8594",
          "body": "* Refactor backend for maintainability, testability, and resilience\n\n- Split workflow_handler.go (678 lines) into handler + workflow_validator.go;\n  validators are now package-level functions taking *node.NodeRegistry\n- Extract handleLoopIteration() from runDAG to isolate loop state management;\n  in\n[…]\nff timer is stopped on cancellation rather\n  than leaked until it fires\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Refactor backend for maintainability, testability, and resilience (#42)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-26T12:02:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "13cfa6735bc8ab06164520b8e94e526c914915de",
          "body": "getMe() was called unconditionally on mount; a 401 from an unauthenticated\nrequest triggered a window.location redirect to /login, which reloaded the\npage and repeated the cycle. Now only fires when a stored token exists.\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix infinite reload loop on login page (#41)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-25T20:53:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "25e3e4e396006533e65c2f097c46979e924c1ce0",
          "body": "* F03 user authentication and multi-tenancy (#40)\n\nAdds JWT-based auth, invite-only registration, RBAC (system_admin /\norg_admin / member), six permission scopes (workflow:read/write/run,\neval:read/write/run), and organisation-scoped data isolation across the\nfull stack.\n\nBackend:\n- Migrations 0022–\n[…]\ne async/await pattern already used by\nWorkflowListPage and other pages.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "F03 auth (#40)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-25T02:10:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d5875b8c01d131b1302038714184d7d910549668",
          "body": "* F02 message queue triggers (Kafka & SQS)\n\nAdds kafka and sqs trigger kinds so workflows can fire on incoming\nmessages without polling. Each kind runs a background consumer goroutine\nmanaged by the trigger Manager alongside the existing cron and webhook\ntriggers. SQS uses long-polling and deletes m\n[…]\nun loops\n- fix sqs test mock to block on ctx.Done() instead of spinning\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "F02 message queue trigger (#39)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-24T02:09:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f93b17353231ba5a882dd70b4397580982bd2752",
          "body": "* F04 workflow versioning (#38)\n\nEvery PUT /workflows/{id} save now automatically snapshots the full\nworkflow definition as an immutable version. Sensitive config values\n(API keys, passwords) are preserved across restore using the same\nAES-256-GCM encryption as the main node_configs table — no\nre-en\n[…]\nd nil\n- Guard liveFailedCount with Math.max(0,...) in EvalRunDetailPage\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "F04 workflow versioning (#38)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-22T21:16:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e745517d147cb8da71f595f792062b079b68a7fe",
          "body": "* Ef05 custom grader plugins via gRPC\n\nAdds out-of-process grader plugin support that mirrors the existing node\nplugin protocol (M9/M10): external processes implement a gRPC contract\nand register with the eval engine at runtime, enabling grader extensions\nin any language.\n\n- proto/grader/v1: GraderP\n[…]\nial load useEffect,\nmatching the same pattern used in WorkflowListPage.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Ef05 custom grader plugins (#37)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-21T16:26:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "63ec79e84a5f5431801a0484ae04f5103b24fa47",
          "body": "* Ef06 eval result streaming via websocket\n\nReplace 2-second polling on EvalRunDetailPage with a WebSocket stream.\nEvalEventBus fans out eval.test_case.completed events as each test case\nfinishes, so results appear progressively. Terminal runs use a fast-path\nthat bursts stored results from the DB o\n[…]\n'error') so the\n   live counts match the authoritative terminal summary\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Ef06 eval result streaming (#36)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-20T18:37:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1d8b0769a77294d1aa677586093da19670a99756",
          "body": "* EF-03 dataset import — bulk TestCase creation from CSV / JSONL\n\nAdds POST /v1/eval-suites/{suite_id}/test-cases/import (multipart):\nparses .csv or .jsonl files (max 500 rows / 5 MB), creates valid rows\nas TestCases, and reports per-row errors in the response without\naborting remaining rows (partia\n[…]\nements\n\n* Remove unused _count param to fix ESLint no-unused-vars error\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Ef03 dataset import (#35)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-19T17:58:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "70a14b734204e60131bdc085ef127b9997e401f8",
          "body": "* F01 workflow loops with configurable max-iteration guard\n\nAdds loop.controller node type and loop-back edge support so workflows\ncan re-execute a body sub-graph up to N times with an optional CEL exit\ncondition — enabling agentic patterns (generate → evaluate → refine →\nrepeat) that the strict DAG\n[…]\nen when body→ctrl is drawn before ctrl→body\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n* update the requireements\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "F01 workflow loops (#34)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-19T01:56:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "79ff950e8222569acf1f7da42c69ec5d3a91bd97",
          "body": null,
          "is_bot": false,
          "headline": "updated requirements (#33)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-17T15:55:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a3342379c9b3e9229e108f49978524b2d510d4e",
          "body": "* EF-04 baseline comparison across eval runs\n\nAdds GET /v1/eval-runs/{id}/compare?baseline_run_id={id} which diffs two\ncompleted runs from the same suite, classifying each test case as regressed,\nimproved, unchanged, new_case, or missing. Frontend adds a baseline selector\ndropdown on EvalRunDetailPa\n[…]\noist changeOrder\n  map to package scope to avoid per-request allocation\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Ef04 baseline comparision (#32)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-17T15:52:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a52de85e22fa066079b69b5fce03c21fcf2ca861",
          "body": null,
          "is_bot": false,
          "headline": "updated future consideration (#31)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-16T21:01:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2324ec1c61d3f488427104eec8e45c8451794eea",
          "body": "* F05 persistent per-node execution data (#30)\n\nPersist per-node status, output, and error for every workflow run so past\nruns can be fully replayed without a live WebSocket connection.\n\n- Migration 0014: adds `node_results JSON` column to `runs`\n- store.NodeResult + SaveRunNodeResults added to Stor\n[…]\n,\n  eliminating the duplicated nodeResults/finalOutput branching logic.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "F05 presistent per node execution data (#30)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-16T20:59:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fd5bab469a084343c932845efc7d105d5d6dc344",
          "body": "* Add unified workflow settings panel\n\nConsolidates title, description, trigger, and inputs into a single\nSettings button/modal, replacing the separate Trigger and Inputs\nbuttons in the navbar. Adds description field support end-to-end\n(store, save payload, load).\n\nCo-Authored-By: Claude Sonnet 4.6 \n[…]\nscription changes\n- Show description on WorkflowListPage workflow cards\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Workflow config settings (#29)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-16T00:47:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cc49ee08b2775ce36a7b38f8442d151902019579",
          "body": "* MEF1: eval trigger data foundation\n\nAdd trigger_kind/trigger_config columns to eval_suites and triggered_by\nto eval_runs (migration 0013). EvalSuite gains TriggerKind, CronExpr,\nand WebhookSecret fields; EvalRun gains TriggeredBy. The eval handler\nvalidates cron expressions, generates encrypted we\n[…]\ners, and\nlink to MEF2/MEF3/MEF4 demo files in the Try the demo section.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Automated eval runs (#28)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-16T00:10:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7885771eee4b6d2b8f7a151623b417829ae80d4b",
          "body": "* ME5: frontend run and observe\n\nAdds expandable test case result rows, per-grader verdict display with\ncollapsible actual_value, checklist per-criterion breakdown, and an\nextracted EvalRunHistory component with duration tracking.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n* Update \n[…]\nes duplicated duration\n  logic in EvalRunHistory and EvalRunDetailPage)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Me5 frontend run and observe (#27)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-15T13:35:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2d56840e375b13a1526fc416a76c69bbc2548ae7",
          "body": "* ME4: Eval Suite authoring UI\n\nAdds the full browser interface for creating and configuring eval suites,\ntest cases, mocks, and all five grader types (string match, numeric\nthreshold, LLM judge, JSON schema, checklist).\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n* Fix mock/grader n\n[…]\nessful run trigger: move\n  setTriggeringRun(false) into a finally block\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Me4 frontend suite test case authoring (#26)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-14T18:26:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "abfb4ebc3569113aa057d95703e1a031f5bdaa50",
          "body": "* ME3: LLM graders (llm_judge and checklist)\n\nImplements ME3 from PROJECT_PLAN_EVAL.md:\n\n- eval/graders/llm_judge.go — binary pass/fail grader; calls aiprovider.LLMClient.Complete() with a rubric + content; parses {\"verdict\",\"explanation\"} JSON; preamble-tolerant extraction; bad API key or parse fai\n[…]\nve time, returning 400\n   instead of deferring errors to eval-run time.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Me3 llm graders (#25)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-12T23:57:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7719376d617cfcd24852b039c60ef038daeb4127",
          "body": "* ME2: eval execution & deterministic graders\n\n- Add NodeMocks to trigger.RunRequest; engine/runner intercepts mocked\n  nodes, emits node.succeeded with \"mocked\":true, skips output parsers\n- eval/graders: string_match (exact/contains/regex), numeric_threshold,\n  json_schema (draft-07 via santhosh-te\n[…]\n\n  → NewEvalRunner → runAsync so background goroutines stop on shutdown\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Me2 eval execution deterministic graders (#24)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-12T21:06:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cfb2cf6c7d5333ca1c491a6d04bdc2fa968afa14",
          "body": "* ME1: eval data foundation and CRUD API (#23)\n\nAdd eval suite and test case persistence with save-time validation and\napi_key encryption, wiring the new store interface through to HTTP handlers.\n\n- Migration 0012: eval_suites, eval_test_cases, eval_runs, eval_test_case_results tables (no FK constra\n[…]\n INSERT in a transaction to close the TOCTOU race on concurrent inserts\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ME1: eval data foundation and CRUD API (#23) (#23)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-12T01:36:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "58e60957c74a83885f1ee2dbd7ba4f8c6fb1c5ca",
          "body": "* requirements for evals\n\n* architecture for the evals\n\n* project plan for the evals",
          "is_bot": false,
          "headline": "Eval planning (#22)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-10T22:58:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d4cf21f3cf98c6824a68cc926c3383cc386a7391",
          "body": "* Initial node input schema\n\nAllow workflow authors to declare the expected fields (name, type, description) for a workflow's initial run data. The schema is stored on the workflow and used to drive the template variable picker (individual {{._initial.field}} chips instead of a bare {{._initial}} ch\n[…]\ne\n@typescript-eslint/no-unused-expressions rule. Replaced with if/else.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Intial node schema (#21)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-10T01:41:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "96c55a2b30105514aab5004b557c2d3a6b83a57a",
          "body": "* adding workflows\n\n* Fix all ESLint errors surfaced by CI frontend workflow\n\n- ConditionalRuleBuilder: move setRules useCallback above the early\n  return to satisfy react-hooks/rules-of-hooks\n- SchemaForm: replace useEffect-based picker reset with the\n  React-recommended \"adjust state during render\n[…]\nichever Go version setup-go installs, eliminating the version mismatch.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "adding workflows (#20)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-07T15:32:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0987169979079575e23dea3447cdeca6180c2c39",
          "body": "* M13: Production build & hardening\n\n- frontend/Dockerfile: multi-stage Node 20 → nginx 1.27 build; VITE_API_BASE\n  defaults to empty so the JS bundle uses relative URLs proxied by nginx\n- frontend/nginx.conf: SPA routing (try_files), proxies /v1/ (REST + WebSocket),\n  /health, and /admin/ to the ba\n[…]\ne Sonnet 4.6 <noreply@anthropic.com>\n\n* Add DEMO.md reference to README\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "M13 production build hardening (#19)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-06T19:26:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "17ac7dc385b7149824743786d55206673f934ccb",
          "body": "* M15: Improved LLM node inputs — textarea with inline variable picker\n\nReplace single-line inputs on LLM prompt/system_msg fields with scrollable\ntextareas and a per-field inline variable picker (node dropdown → field\ndropdown → Insert button), matching the ConditionalRuleBuilder UX pattern.\nAdds t\n[…]\n- Merge initialField into pickerField (single state for both branches).\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Llm node system prompt inputs (#18)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-06T18:43:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8275ba694672a20753fbbe3490a6d10f0668dd4f",
          "body": "* M14: Enhanced conditional node — visual rule builder + multi-branch routing\n\n- Conditional node now supports N named rules (first-match wins) plus an implicit\n  fallback branch, replacing the binary true/false model\n- Each rule supports multiple conditions (AND or OR) defined via structured config\n[…]\norks well' updated for the\n  visual builder; CEL-specific notes removed\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Conditional node updates (#17)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-06T16:58:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "28e9115955db13f9a4d41acfd0f92f2793032462",
          "body": "* adding json files\n\n* Milestone 12: Frontend — Run & Observe\n\n- useRunStore: active run state, per-node status map, panel visibility\n- useRunEvents: WebSocket hook consuming /v1/runs/:run_id/events\n- RunStatusPanel: bottom drawer showing live node status during a run\n- NodeStatusList: per-node badg\n[…]\nt state is present, saving one\n  full RTT on the common navigation path\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "M12 run observe (#16)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-06T03:37:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "573c953fb153aa1fb9ab04c4092b94f63bc40f22",
          "body": "1. useWorkflowStore: filter onNodesChange so only user-initiated changes\n   (add/remove/position) set isDirty=true; internal React Flow events\n   (select, dimensions, fitView) no longer flip the unsaved indicator on\n   a freshly loaded workflow. Node deletion now also prunes configs and\n   outputPar\n[…]\n Move the boundary from the app\n   root down to wrap only the editor routes so a crash in the editor\n   does not kill the workflow list page.\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix five code-review findings in M11 frontend (#15)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-05T16:43:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ee557abc193b05d74416aca54aca17850d32a10c",
          "body": "Vite + React 18 + TypeScript SPA with Tailwind CSS v4. Implements the\nfull workflow authoring UI: node palette (drag-and-drop), React Flow\ncanvas, config sidebar with RJSF schema-driven forms, template variable\npicker (cursor-position insertion), output parser panel, trigger modal,\nand workflow list\n[…]\nes on every selector call\n- Add lastSentRef guard in SchemaForm to suppress RJSF's on-mount\n  onChange from triggering a Zustand update cycle\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Milestone 11: Frontend — Canvas & CRUD (#14)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-05T16:29:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7835aa5656177c19fa2f27751059aa7504018fb5",
          "body": "* update project plan\n\n* Milestone 10: Plugin Registry — Admin API & Persistence\n\nPlugins can now be registered, updated, and deregistered at runtime via\na REST admin API. Registrations are persisted in a new\nplugin_registrations table and automatically re-established on startup,\nmaking them durable\n[…]\nisterOne)\n  to enable handler-layer testing without a live gRPC server.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "M10 plugin registery (#13)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-05T00:02:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5f7e157a18777171a91c192a2791461e8ba0369a",
          "body": "* Milestone 9: gRPC Plugin Protocol\n\n- proto/plugin/v1/plugin.proto — NodePlugin service (Meta + Execute RPCs)\n- internal/node/plugin/grpc_proxy.go — NodeHandler adapter wrapping a gRPC\n  client; implements io.Closer for connection cleanup on shutdown\n- internal/node/plugin/registrar.go — reads PLUG\n[…]\nt unset oneof instead of len(rawData)==0\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n* updated for a new milestone\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "M9 grpc plugin (#12)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-04T01:50:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cb9cc5deac1a122adab38725ed205e15c0925462",
          "body": "* Milestone 8: Advanced Deterministic Nodes\n\nAdds the full deterministic built-in node library:\n- conditional.branch: CEL boolean expression routing with branch_label edges;\n  save-time compilation via ValidateExpression; program cached per-expression\n- data.transform: Go text/template expansion ove\n[…]\nons reuse a connection pool instead of opening and closing one per call\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "M8 advanced deterministic nodes (#11)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-03T22:24:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eae90a129ee8cc518b68f2b1441d8f306e108576",
          "body": "* Milestone 7: RAG nodes with code-review fixes\n\nImplements rag.ingest and rag.retrieve built-in nodes, MySQL vector\nstore, and migration 0005. Addresses all issues from the post-review:\n\nCorrectness fixes:\n- UpsertChunks now DELETEs existing chunks per document_id before\n  inserting, preventing sta\n[…]\neanup\n  requires a future migration to add workflow_id to rag_documents\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "M7 rag nodes (#10)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-03T03:17:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "986b2e38f06a513c93b705cd604fb8d9b9870d2d",
          "body": "All workflow, run, node-type, and webhook endpoints are now served under\n/v1 (e.g. GET /v1/workflows, POST /v1/workflows/{id}/runs). Infrastructure\nendpoints (/health, /admin/log-level) remain unversioned. Updates the\nwebhook_url field in workflow responses.\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Version all business API routes under /v1 (#9)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-02T17:59:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "abf62c555c3702de621caaf30d7f2eff4f63d461",
          "body": "Adds JSON structured logging via slog throughout the execution engine,\nwith a mutable LevelVar so the level can be changed without a restart.\n\n- LOG_LEVEL env var (debug/info/warn/error) sets the startup level\n- GET /admin/log-level returns current level\n- PUT /admin/log-level {\"level\":\"debug\"} chan\n[…]\nd and duration_ms\n- Warn logs on retry attempts with attempt number, backoff, and last error\n- Error logs on node panic and handler-not-found\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add structured logging and runtime log-level control (#8)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-02T17:52:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a5b4d4af955ea42ae7e9bd86df848175bdb8ec00",
          "body": "* Milestone 6: AI nodes, output parsers, and HTTP client timeouts\n\nImplements M6 in full plus two user-requested extensions:\n\nAI nodes\n- aiprovider/provider.go: LLMClient and EmbeddingClient interfaces;\n  LLMRequest.Temperature is *float64 so callers can distinguish\n  \"not configured\" (nil → provide\n[…]\nusing\na new name, shadowing the function parameter. Renamed to errBody.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "M6 all nodes (#7)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-02T17:40:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "05229bcd1811111f735669e6081763c918362ce5",
          "body": "* Milestone 5: Trigger System — webhook, cron, and trigger manager\n\nAdds the trigger subsystem so workflows fire automatically from inbound\nwebhooks and cron schedules without restarting the server.\n\ntrigger/cron.go\n  - cronScheduler wraps robfig/cron v3; tracks entry IDs by workflow ID\n    so indiv\n[…]\nper; reuse across GetWorkflow, GetTriggerConfig, and ListTriggerConfigs\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "M5 trigger system (#6)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-06-01T17:07:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dbd089f0a63519eb3bd49d22f7d0f4b8550e9e86",
          "body": "Introduce 34 unit tests covering all implemented WorkflowStore and\nRunStore methods using an in-memory SQLite database, eliminating the\nneed for a live MySQL instance in CI.\n\n- testdb_test.go: test harness using github.com/glebarez/go-sqlite\n  (pure Go, no CGO); SQLite schema mirrors the MySQL migra\n[…]\nckage coverage\nis 75% due to stubbed M5/M7 methods (0%) and MySQL-only db.go\ninfrastructure that cannot be exercised without a live database.\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add SQLite-backed unit tests for the MySQL store implementation (#5)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-05-31T23:01:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bb123dc78fcce2375e34c338f63a6338e5fa6fbf",
          "body": "* Milestone 4: Real-Time Run Events & WebSocket\n\n- ws_handler.go: WebSocket endpoint GET /runs/{run_id}/events; upgrades\n  connection, subscribes to EventBus before the handshake so no events are\n  missed, streams NodeEvent JSON frames until run.succeeded / run.failed,\n  synthesizes a terminal event\n[…]\neout, distinguishing\n  a stalled server from an actual connection close\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Milestone four (#4)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-05-31T22:24:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2e454d681953ef05f943291c9cdfb629e381516a",
          "body": "* Milestone 3: Execution Engine & Manual Trigger\n\n- engine/context.go: thread-safe ExecutionContext (node output store)\n- engine/event.go: NodeEvent, EventBus (fan-out to WebSocket subscribers)\n- engine/runner.go: goroutine DAG executor with retry policy support\n- engine/engine.go: WorkflowEngine.Ru\n[…]\n so malformed templates in headers map values are\n  caught at save time\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Milestone three (#3)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-05-31T20:24:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "862c07db46c608723163482bc030cbe6dc638bf1",
          "body": "* Milestone two (#2)\n\nImplements workflow CRUD, node registry, DAG cycle detection, and\nAES-256-GCM config vault per the M2 project plan.\n\n- store/store.go: Store interface and all domain types\n- store/mysql/workflow_store.go: full workflow CRUD in transactions; sensitive\n  config stored encrypted i\n[…]\now and call NamedExecContext once,\nwith nil used for the unused column.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Milestone two (#2) (#2)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-05-31T15:59:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8416422af37bd3cef7ad7b017248a21b98a5cadc",
          "body": "* implementing ms one\n\n* updated the claude.md",
          "is_bot": false,
          "headline": "Milestone one (#1)",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-05-29T23:13:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b14f5c744ddaf2feb15b4a70c1b4e5934748a850",
          "body": null,
          "is_bot": false,
          "headline": "Create project plan",
          "author_name": "rsj",
          "author_login": "g8rswimmer",
          "committed_at": "2026-05-29T22:52:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c83a7871e667041525010611b3bb38e4b43e36d0",
          "body": null,
          "is_bot": false,
          "headline": "added the architecture doc",
          "author_name": "rsj",
          "author_login": "g8rswimmer",
          "committed_at": "2026-05-29T22:07:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15db13537e77528d1632dffa508842dca167e83a",
          "body": null,
          "is_bot": false,
          "headline": "adding a requirment doc",
          "author_name": "rsj",
          "author_login": "g8rswimmer",
          "committed_at": "2026-05-29T20:27:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca0674e7a87d1e7a01e76244a06cf649a584bb5c",
          "body": null,
          "is_bot": false,
          "headline": "Initial commit",
          "author_name": "Sean",
          "author_login": "g8rswimmer",
          "committed_at": "2026-05-29T19:48:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 12,
      "commits_last_year": 47,
      "latest_release_at": "2026-06-25T20:54:21Z",
      "latest_release_tag": "v1.13.1",
      "releases_from_tags": false,
      "days_since_last_push": 28,
      "active_weeks_last_year": 5,
      "days_since_latest_release": 29,
      "mean_days_between_releases": 1.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/g8rswimmer/cogniflow",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/g8rswimmer/cogniflow",
          "is_deprecated": false,
          "latest_version": "v1.13.1",
          "repository_url": "https://github.com/g8rswimmer/cogniflow",
          "versions_count": 12,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-06-25T20:53:44Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 29
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 2,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "demos",
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "backend/Makefile"
      ],
      "api_schema_files": [
        "backend/proto/grader/v1/grader.proto",
        "backend/proto/plugin/v1/plugin.proto"
      ],
      "has_devcontainer": false,
      "typecheck_configs": [
        "frontend/tsconfig.json"
      ],
      "toolchain_manifests": [
        "backend/go.mod",
        "examples/plugins/echo/go.mod"
      ],
      "largest_source_bytes": 41046,
      "source_files_sampled": 224,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 11417
    },
    "dependencies": {
      "manifests": [
        "backend/go.mod",
        "frontend/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go",
        "npm"
      ],
      "dependencies": [
        {
          "name": "github.com/glebarez/go-sqlite",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.21.2"
        },
        {
          "name": "github.com/go-sql-driver/mysql",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.0"
        },
        {
          "name": "github.com/golang-migrate/migrate/v4",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.19.1"
        },
        {
          "name": "github.com/google/cel-go",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.28.1"
        },
        {
          "name": "github.com/gorilla/websocket",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.3"
        },
        {
          "name": "github.com/jmoiron/sqlx",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.0"
        },
        {
          "name": "github.com/robfig/cron/v3",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "github.com/tidwall/gjson",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.19.0"
        },
        {
          "name": "@microlink/react-json-view",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.31.20"
        },
        {
          "name": "@rjsf/core",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.6.1"
        },
        {
          "name": "@rjsf/utils",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.6.1"
        },
        {
          "name": "@rjsf/validator-ajv8",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.6.1"
        },
        {
          "name": "@xyflow/react",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.11.0"
        },
        {
          "name": "react",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.3.1"
        },
        {
          "name": "react-dom",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.3.1"
        },
        {
          "name": "react-router-dom",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.17.0"
        },
        {
          "name": "zustand",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.0.14"
        }
      ],
      "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": 43,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "g8rswimmer",
          "commits": 47,
          "avatar_url": "https://avatars.githubusercontent.com/u/34941871?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci-backend.yml",
        "ci-frontend.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        "eslint.config.js"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum",
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 6,
            "reason": "20 out of 30 merged PRs checked by a CI test -- score normalized to 6",
            "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": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 2,
            "reason": "dependency not pinned by hash detected -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "23 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "b66a91a745afadc3510428e42ee1f362d0441b42",
        "ran_at": "2026-07-25T05:10:10Z",
        "aggregate_score": 2.7,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-06-26T15:45:50Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/g8rswimmer/cogniflow",
    "host": "github.com",
    "name": "cogniflow",
    "owner": "g8rswimmer"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 50,
      "inputs": {
        "security": 27,
        "vitality": 68,
        "community": 24,
        "governance": 54,
        "engineering": 66
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 68,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "at_risk",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 47,
            "inputs": {
              "commits_last_year": 47,
              "human_commit_share": 1,
              "days_since_last_push": 28,
              "active_weeks_last_year": 5
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 28 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 28
                    }
                  }
                ],
                "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": "47 commits in the last year",
                "points": 15.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 47
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 12,
              "latest_release_tag": "v1.13.1",
              "releases_from_tags": false,
              "days_since_latest_release": 29,
              "mean_days_between_releases": 1.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "12 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 29 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 29
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~1.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 2,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "2 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 54,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 43,
              "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": "43/43 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 43,
                      "decided": 43
                    }
                  }
                ],
                "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": "moderate",
            "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": 53,
            "inputs": {
              "followers": 26,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "g8rswimmer",
              "public_repos": 24,
              "account_age_days": 3129
            },
            "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": "26 followers of g8rswimmer",
                "points": 10.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 26,
                      "login": "g8rswimmer"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "24 public repos, account ~8 yr old",
                "points": 22.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 24
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 8
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/g8rswimmer/cogniflow"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 29
            },
            "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 29 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 29
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "12 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "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": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "eslint.config.js",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "20 out of 30 merged PRs checked by a CI test -- score normalized to 6",
                "points": 12,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [
                "agentic-workflows",
                "ai-agents",
                "go",
                "react"
              ],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "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": 0,
                "status": "missed",
                "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": "4 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": "critical",
        "name": "Security",
        "value": 27,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 27,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 2.7
            },
            "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 is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "20 out of 30 merged PRs checked by a CI test -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/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": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "23 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "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": "excellent",
        "name": "AI Readiness",
        "value": 86,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.915,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 11417
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "43 of 47 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 43,
                      "sampled": 47
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum",
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "backend/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "frontend/tsconfig.json"
              ],
              "agent_commit_share": 0.83,
              "toolchain_manifests": [
                "backend/go.mod",
                "examples/plugins/echo/go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "backend/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "backend/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "eslint.config.js",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "frontend/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "frontend/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "39 of the last 47 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 39,
                      "sampled": 47
                    }
                  }
                ],
                "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 2",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 41046,
              "source_files_sampled": 224,
              "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/224 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 224,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "good",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "example_dirs": [
                "demos",
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": [
                "backend/proto/grader/v1/grader.proto",
                "backend/proto/plugin/v1/plugin.proto"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": "backend/proto/grader/v1/grader.proto, backend/proto/plugin/v1/plugin.proto",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "backend/proto/grader/v1/grader.proto, backend/proto/plugin/v1/plugin.proto"
                    }
                  }
                ],
                "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": "demos, examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "demos, examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T05:10:25.033864Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/g/g8rswimmer/cogniflow.svg",
  "full_name": "g8rswimmer/cogniflow",
  "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.