Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 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 estrellas⑂ 0 forksdesde may 2026Ver en GitHub ↗

g8rswimmer/cogniflow tiene un índice de salud de 50 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es AI Readiness (86/100) y la más baja, Community & Adoption (24/100). Se actualizó por última vez hace 28 días. Una sola persona concentra la mayor parte del trabajo reciente.

50
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

50
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

SeanCuenta personal
26 seguidores24 repositorios públicosdesde dic 2017

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/g8rswimmer/cogniflowv1.13.1-12hace 29 días

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

68Moderado · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 28 días
3.5/36Cadencia de commits — 5/52 semanas con commits
15.1/18Volumen de commits — 47 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year47
human_commit_share1
days_since_last_push28
active_weeks_last_year5
Cómo se puntúa
27/27Publica versiones — 12 versiones publicadas
36/36Recencia de las versiones — última versión hace 29 días
27/27Cadencia de publicación — una versión cada ~1,1 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count12
latest_release_tagv1.13.1
releases_from_tagsno
days_since_latest_release29
mean_days_between_releases1,1
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

24Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 2 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars2
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

54Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 43/43 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs43
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
10.3/25Alcance del propietario — 26 seguidores de g8rswimmer
22.2/25Trayectoria — 24 repos públicos, cuenta de ~8 años
Datos de entrada utilizados
followers26
owner_typeUser
is_verified
owner_loging8rswimmer
public_repos24
account_age_days3129
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 29 días
20/20Historial de versiones — 12 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/g8rswimmer/cogniflow
ecosystemsgo
any_deprecatedno
min_days_since_publish29

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

66Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — eslint.config.js
0/9.6Hooks de pre-commit
0/6.4.editorconfig
12/20OpenSSF Scorecard: CI-Tests — 20 out of 30 merged PRs checked by a CI test -- score normalized to 6
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

50Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
10/10Topics — 4 topics
0/10Wiki
Datos de entrada utilizados
topicsagentic-workflows, ai-agents, go, react
has_wikino
homepage
has_readme
has_docs_dirno
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

27Crítico · 16% del índice global
Cómo se puntúa
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.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — sin datos
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 — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 23 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate2,7
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

86Excelente · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 43 de 47 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,915
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes11.417
Cómo se puntúa
18/18Arranque con un solo comando — backend/Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — eslint.config.js
11/11Verificación estática de tipos — frontend/tsconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
10/10Práctica demostrada con agentes — 39 de los últimos 47 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
2/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum, package-lock.json
has_dockerfile
typed_language
bootstrap_filesbackend/Makefile
has_devcontainerno
has_linter_config
typecheck_configsfrontend/tsconfig.json
agent_commit_share0,83
toolchain_manifestsbackend/go.mod, examples/plugins/echo/go.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/224 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes41.046
source_files_sampled224
oversized_source_files0
Cómo se puntúa
40/40Esquema de API (OpenAPI/GraphQL/proto) — backend/proto/grader/v1/grader.proto, backend/proto/plugin/v1/plugin.proto
0/20Servidor MCP
40/40Ejemplos ejecutables — demos, examples
Datos de entrada utilizados
example_dirsdemos, examples
has_mcp_signalno
api_schema_filesbackend/proto/grader/v1/grader.proto, backend/proto/plugin/v1/plugin.proto

Datos clave

2estrellas de GitHub
1contribuidores
47commits en los últimos 12 meses
28días desde el último push
12versiones publicadas
1factor bus
0issues abiertas
Go, npmecosistemas de paquetes

Advertencias de recopilación de datos

  • 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

Más detalle

OpenSSF Scorecard 2.7 / 10
2.7agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).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
n/dPackagingpackaging 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
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities23 existing vulnerabilities detected
Dependencias directas 17
RegistroPaqueteRestricción de versiónManifiesto
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
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "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"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasGo.