Registro público
Informe de salud del softwareesquema 0.26.0 · métricas 1.13.0 · 2026-07-22 03:14 UTC

tomasz-tomczyk / crit

Your feedback loop with the agent

Go · JavaScript · TypeScriptMIT★ 810 estrellas⑂ 57 forksdesde feb 2026Ver en GitHub ↗

tomasz-tomczyk/crit tiene un índice de salud de 70 sobre 100, lo que lo sitúa en la banda Bueno. Su puntuación más alta es Engineering Quality (85/100) y la más baja, Security (47/100). Se actualizó por última vez hace 1 día. Una sola persona concentra la mayor parte del trabajo reciente.

70
global / 100
Bueno

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

70
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

Tomasz TomczykCuenta personal
66 seguidores29 repositorios públicosdesde ene 2010@Vetspire

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/tomasz-tomczyk/critv0.18.1-65hace 4 días

Métricas por categoría

Vitalidad

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

84Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 1 días
15.9/36Cadencia de commits — 23/52 semanas con commits
18/18Volumen de commits — 748 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year748
human_commit_share0,87
days_since_last_push1
active_weeks_last_year23
Cómo se puntúa
27/27Publica versiones — 65 versiones publicadas
36/36Recencia de las versiones — última versión hace 4 días
27/27Cadencia de publicación — una versión cada ~5,3 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count65
latest_release_tagv0.18.1
releases_from_tagsno
days_since_latest_release4
mean_days_between_releases5,3

Comunidad y Adopción

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

67Moderado · 18% del índice global
Cómo se puntúa
47.2/60Estrellas — 810 estrellas
14.6/25Forks — 57 forks
1.7/15Observadores — 3 observadores
Datos de entrada utilizados
forks57
stars810
watchers3
growth_stateorganic
growth_factor_pct100
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/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_contributing
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?

64Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
1.1/22.5Distribución de commits — el principal contribuyente firma el 95% de los commits
13.5/13.5Amplitud de contribuyentes — 27 contribuyentes
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Datos de entrada utilizados
bus_factor1
contributors_sampled27
top_contributor_share0,953
Cómo se puntúa
45.5/46.8Resolución de issues — 97% de issues cerradas
37/38.3Aceptación de PR — 577/596 PR decididos fusionados
1.5/15OpenSSF Scorecard: Code-Review — Found 4/28 approved changesets -- score normalized to 1
Datos de entrada utilizados
merged_prs577
open_issues4
closed_issues149
issue_closed_ratio0,974
closed_unmerged_prs19
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
13.1/25Alcance del propietario — 66 seguidores de tomasz-tomczyk
22.8/25Trayectoria — 29 repos públicos, cuenta de ~16 años
Datos de entrada utilizados
followers66
owner_typeUser
is_verified
owner_logintomasz-tomczyk
public_repos29
account_age_days6032
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 4 días
20/20Historial de versiones — 65 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/tomasz-tomczyk/crit
ecosystemsgo
any_deprecatedno
min_days_since_publish4

Calidad de Ingeniería

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

85Excelente · 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 — .golangci.yml, eslint.config.mjs
0/9.6Hooks de pre-commit
0/6.4.editorconfig
18/20OpenSSF Scorecard: CI-Tests — 26 out of 27 merged PRs checked by a CI test -- score normalized to 9
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://crit.md
10/10Descripción del repositorio
10/10Topics — 8 topics
0/10Wiki
Datos de entrada utilizados
topicsagentic-coding, ai-tools, cli, llm, markdown, code-review, ai-agents, developer-tools
has_wikino
homepagehttps://crit.md
has_readme
has_docs_dir
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?

47En riesgo · 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
2.2/2.5CI-Tests — 26 out of 27 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0.8/7.5Code-Review — Found 4/28 approved changesets -- score normalized to 1
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 23 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,7
Excluidos de la puntuación (sin datos o no aplicable): packaging. 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.

82Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — .cursor/rules/frontend-architecture.mdc, .cursor/rules/frontend-css.mdc, .cursor/rules/frontend-js.mdc, .cursor/rules/go.mdc, .cursor/rules/proxy-auth-transport.mdc, AGENTS.md, CLAUDE.md, scripts/AGENTS.md, scripts/CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 87 de 87 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_files.cursor/rules/frontend-architecture.mdc, .cursor/rules/frontend-css.mdc, .cursor/rules/frontend-js.mdc, .cursor/rules/go.mdc, .cursor/rules/proxy-auth-transport.mdc, AGENTS.md, CLAUDE.md, scripts/AGENTS.md, scripts/CLAUDE.md
agent_instruction_max_bytes30.857
Cómo se puntúa
18/18Arranque con un solo comando — Makefile, mise.toml
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yml, eslint.config.mjs
11/11Verificación estática de tipos — test/e2e/tsconfig.json
10/10Entorno reproducible — Dockerfile, Nix, lockfile
10/10Práctica demostrada con agentes — 59 de los últimos 100 commits con autoría o crédito de agente
8/8Mantenimiento automatizado — 13 de los últimos 100 commits son actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nix
has_tests
lockfilesgo.sum, package-lock.json
has_dockerfile
typed_language
bootstrap_filesMakefile, mise.toml
has_devcontainerno
has_linter_config
typecheck_configstest/e2e/tsconfig.json
agent_commit_share0,59
toolchain_manifestsgo.mod, test/e2e/fixtures/livemode-upstream/go.mod
dependency_bot_commit_share0,13
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
53.9/55Tamaños de archivo manejables — 12/609 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes3.565.102
source_files_sampled609
oversized_source_files12
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

810estrellas de GitHub
27contribuidores
748commits en los últimos 12 meses
1días desde el último push
65versiones publicadas
1factor bus
4issues abiertas
Go, npmecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

Historial de estrellas y forks 810 ★ / 57 ⇿
810Estrellas
57Forks
65Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

0200400600800100081057352026-022026-052026-07
Mayor 0Menor 18Parche 44
OpenSSF Scorecard 4.7 / 10
4.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-22 03:14 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
9CI-Tests26 out of 27 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
1Code-ReviewFound 4/28 approved changesets -- score normalized to 1
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities23 existing vulnerabilities detected
Dependencias directas 12
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/mdp/qrterminal/v3v3.2.1go.mod
Gogolang.org/x/sysv0.45.0go.mod
Gogolang.org/x/termv0.43.0go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
Gorsc.io/qrv0.2.0go.mod
Gogolang.org/x/netv0.55.0go.mod
Gogithub.com/gorilla/websocketv1.5.3go.mod
npm@highlightjs/cdn-assets^11.11.1package.json
npm@sanity/diff-match-patch^3.2.0package.json
npmhighlightjs-heex^1.0.1package.json
npmmarkdown-it^14.3.0package.json
npmmermaid^11.16.0package.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-coding",
        "ai-tools",
        "cli",
        "llm",
        "markdown",
        "code-review",
        "ai-agents",
        "developer-tools"
      ],
      "is_fork": false,
      "size_kb": 19328,
      "has_wiki": false,
      "homepage": "https://crit.md",
      "languages": {
        "Go": 3028777,
        "CSS": 244981,
        "Nix": 1824,
        "HTML": 42073,
        "Shell": 127311,
        "Makefile": 2439,
        "Dockerfile": 1116,
        "JavaScript": 1222100,
        "TypeScript": 809529
      },
      "pushed_at": "2026-07-20T13:36:46Z",
      "created_at": "2026-02-16T15:39:33Z",
      "owner_type": "User",
      "updated_at": "2026-07-22T00:51:42Z",
      "description": "Your feedback loop with the agent",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go",
        "JavaScript",
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "http://tomasztomczyk.com/",
      "name": "Tomasz Tomczyk",
      "type": "User",
      "login": "tomasz-tomczyk",
      "company": "@Vetspire",
      "location": "Croydon, UK",
      "followers": 66,
      "avatar_url": "https://avatars.githubusercontent.com/u/182303?v=4",
      "created_at": "2010-01-14T16:34:18Z",
      "is_verified": null,
      "public_repos": 29,
      "account_age_days": 6032
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.18.1",
          "kind": "patch",
          "published_at": "2026-07-17T13:57:34Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2026-07-10T13:23:44Z"
        },
        {
          "tag": "v0.17.1",
          "kind": "patch",
          "published_at": "2026-07-03T10:18:51Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2026-07-01T10:53:02Z"
        },
        {
          "tag": "v0.16.5",
          "kind": "patch",
          "published_at": "2026-06-22T22:37:40Z"
        },
        {
          "tag": "v0.16.4",
          "kind": "patch",
          "published_at": "2026-06-22T14:42:15Z"
        },
        {
          "tag": "v0.16.3",
          "kind": "patch",
          "published_at": "2026-06-17T17:29:01Z"
        },
        {
          "tag": "v0.16.2",
          "kind": "patch",
          "published_at": "2026-06-09T20:53:44Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2026-06-04T18:33:33Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2026-05-30T18:15:55Z"
        },
        {
          "tag": "v0.15.4",
          "kind": "patch",
          "published_at": "2026-05-27T10:04:35Z"
        },
        {
          "tag": "v0.15.3",
          "kind": "patch",
          "published_at": "2026-05-20T12:06:54Z"
        },
        {
          "tag": "v0.15.2",
          "kind": "patch",
          "published_at": "2026-05-19T00:21:32Z"
        },
        {
          "tag": "v0.15.1",
          "kind": "patch",
          "published_at": "2026-05-18T10:56:34Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2026-05-17T20:24:00Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2026-05-16T11:34:30Z"
        },
        {
          "tag": "v0.13.1",
          "kind": "patch",
          "published_at": "2026-05-14T23:06:10Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2026-05-12T18:39:17Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2026-05-09T18:28:12Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2026-05-07T14:50:47Z"
        },
        {
          "tag": "spotify-preview",
          "kind": "other",
          "published_at": "2026-05-08T07:16:07Z"
        },
        {
          "tag": "v0.10.5",
          "kind": "patch",
          "published_at": "2026-05-06T09:55:17Z"
        },
        {
          "tag": "windows-pre-1",
          "kind": "other",
          "published_at": "2026-05-05T08:26:33Z"
        },
        {
          "tag": "v0.10.4",
          "kind": "patch",
          "published_at": "2026-05-02T10:43:54Z"
        },
        {
          "tag": "v0.10.3",
          "kind": "patch",
          "published_at": "2026-05-01T11:32:51Z"
        },
        {
          "tag": "v0.10.2",
          "kind": "patch",
          "published_at": "2026-04-29T21:09:34Z"
        },
        {
          "tag": "v0.10.1",
          "kind": "patch",
          "published_at": "2026-04-27T07:23:35Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2026-04-24T10:14:46Z"
        },
        {
          "tag": "v0.9.3",
          "kind": "patch",
          "published_at": "2026-04-20T07:56:11Z"
        },
        {
          "tag": "v0.0.0-sapling-rc3",
          "kind": "prerelease",
          "published_at": "2026-04-18T14:04:40Z"
        },
        {
          "tag": "v0.9.2",
          "kind": "patch",
          "published_at": "2026-04-17T14:12:09Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2026-04-15T09:48:48Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2026-04-11T09:38:41Z"
        },
        {
          "tag": "v0.8.3",
          "kind": "patch",
          "published_at": "2026-04-08T16:02:48Z"
        },
        {
          "tag": "v0.8.2",
          "kind": "patch",
          "published_at": "2026-04-02T16:14:01Z"
        },
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2026-03-30T11:53:45Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-03-28T09:48:35Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-03-23T00:11:25Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2026-03-22T10:23:14Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2026-03-21T15:24:47Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-03-20T00:28:38Z"
        },
        {
          "tag": "v0.5.2",
          "kind": "patch",
          "published_at": "2026-03-18T09:44:54Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2026-03-16T09:40:42Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-03-14T10:29:59Z"
        },
        {
          "tag": "v0.4.9",
          "kind": "patch",
          "published_at": "2026-03-06T16:50:37Z"
        },
        {
          "tag": "v0.4.8",
          "kind": "patch",
          "published_at": "2026-03-05T21:22:03Z"
        },
        {
          "tag": "v0.4.7",
          "kind": "patch",
          "published_at": "2026-03-05T09:56:35Z"
        },
        {
          "tag": "v0.4.6",
          "kind": "patch",
          "published_at": "2026-03-04T09:35:32Z"
        },
        {
          "tag": "v0.4.5",
          "kind": "patch",
          "published_at": "2026-03-03T21:22:25Z"
        },
        {
          "tag": "v0.4.4",
          "kind": "patch",
          "published_at": "2026-03-02T22:21:51Z"
        },
        {
          "tag": "v0.4.3",
          "kind": "patch",
          "published_at": "2026-03-02T19:40:17Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2026-03-02T13:47:11Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-03-02T13:15:24Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-03-02T01:33:05Z"
        },
        {
          "tag": "v0.3.5",
          "kind": "patch",
          "published_at": "2026-02-24T16:48:13Z"
        },
        {
          "tag": "v0.3.4",
          "kind": "patch",
          "published_at": "2026-02-22T19:41:01Z"
        },
        {
          "tag": "v0.3.3",
          "kind": "patch",
          "published_at": "2026-02-21T08:40:37Z"
        },
        {
          "tag": "v0.3.2",
          "kind": "patch",
          "published_at": "2026-02-20T23:28:36Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-02-20T22:17:33Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-02-20T20:21:06Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-02-20T19:25:58Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-02-19T16:54:02Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-02-18T23:30:16Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-02-17T08:29:12Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-02-16T16:19:37Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "162981c16ed2df6c458c2a551ce8ba591b101316",
          "body": "* feat: configure Claude plan approval mode\n\n* fix: resolve Claude mode at approval time",
          "is_bot": false,
          "headline": "feat: configure Claude plan approval mode (#759)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-20T13:36:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53a83edcea2cbb2f19bc37d540d275817c6961ee",
          "body": "* fix: require explicit Crit invocation across agent integrations\n\nStop model auto-selection of the interactive Crit loop from generic\n\"review\" language. Prefer platform manual-only switches, split\ncrit-cli where needed, and keep only plan-exit hooks automatic.\n\nCloses #729\n\nCo-authored-by: Cursor <\n[…]\nse patch coverage for #729 install cleanup and Cline/Windsurf\nmanual workflow destinations.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: require explicit Crit invocation across agent integrations (#756)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-20T13:13:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bce589d80c41294071579ad46c406f2a7856d667",
          "body": "* feat: opt-in round-ready desktop notify and OpenCode wait toast\n\nNotify when a review round becomes ready for the human (notify_on_round_ready,\ndefault off), badge/Notification in the browser when the tab is hidden, and\ntoast in OpenCode when a blocking crit wait starts — so AFK reviewers get a\nsi\n[…]\nrsor <cursoragent@cursor.com>\n\n* style: mark tabReady noop so eslint accepts empty fallback\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: opt-in round-ready notify and OpenCode wait toast (#755)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-19T14:06:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9dee4756ed98c5c05515ae8422db3223d9e9fc7c",
          "body": null,
          "is_bot": false,
          "headline": "fix: correct opencode sub-command from 'ask' to 'run' (#754)",
          "author_name": "blyoa",
          "author_login": "blyoa",
          "committed_at": "2026-07-19T07:51:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95c50d51b0a76b66a5063658d99de591cfad712c",
          "body": "* feat: auto-close review tab after approval (close_on_approve_after_ms)\n\nAdds a global-only close_on_approve_after_ms config key (crit#752). When\nset, the waiting dialog counts down and calls window.close() N ms after\nan Approve with no unresolved comments; a Cancel button skips the close\nfor that \n[…]\nCursor <cursoragent@cursor.com>\n\n* fix: only show close fallback when the tab is still open\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: auto-close review tab after approval (#753)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-18T21:20:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0b23b87d928151045ae44ee34af55daa3fe52c96",
          "body": "Bumps [eslint](https://github.com/eslint/eslint) from 10.6.0 to 10.7.0.\n- [Release notes](https://github.com/eslint/eslint/releases)\n- [Commits](https://github.com/eslint/eslint/compare/v10.6.0...v10.7.0)\n\n---\nupdated-dependencies:\n- dependency-name: eslint\n  dependency-version: 10.7.0\n  dependency-\n[…]\nrect:development\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump eslint from 10.6.0 to 10.7.0 (#751)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-18T20:50:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "837d1d778601632ce411174314dd4bd5932e2a04",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore(deps): bump actions/setup-go from 6 to 7 (#749)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-18T20:48:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2768d0886701895cdf78f390cea8b18c2475e4ae",
          "body": "Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-node\n  dependency-version: '\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump actions/setup-node from 6 to 7 (#750)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-18T20:36:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ffa3b822fe6a1f6e5a38664765fbe472b4b4f861",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump Nix flake version to v0.18.1",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-17T13:46:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b63f9725fb25fe88ee7c155f027c1d6806d0859a",
          "body": "* fix: align story review paths and daemon errors\n\n* test: cover review path failures",
          "is_bot": false,
          "headline": "fix: align story review paths and daemon errors (#747)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-17T13:15:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61133a895fe70621154a84c5bc8f5bafe2fde5c6",
          "body": null,
          "is_bot": false,
          "headline": "fix: harden story navigation and embedded renderers (#748)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-17T13:01:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b64673acb2d3db65dfc5cc2f988454bfd46000c",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove Go Report Card badge (#746)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-17T11:05:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "719cd7baec6907923704c7a84c48d7a1bc0c0774",
          "body": "* fix(plan): echo Claude tool input on approval\n\n* test(plan): cover Claude approval hook end to end\n\n* test(plan): harden hook output contracts",
          "is_bot": false,
          "headline": "fix: restore Claude Code plan approval hooks (#745)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-17T10:10:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a1250175e74c65fac8e2f28bdca5d6e9778bc9c",
          "body": "* fix: preserve daemon init errors for clients\n\n* fix: retain daemon errors across stale cleanup\n\n* fix: scope retained daemon errors by generation\n\n* fix: use full daemon failure generation digest",
          "is_bot": false,
          "headline": "fix: preserve daemon initialization errors for clients (#744)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-17T10:08:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc89214c3841cca05625bd81d02ec13bb08b1fa8",
          "body": null,
          "is_bot": false,
          "headline": "fix: unblock project prompt trust dialog (#743)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-17T09:51:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "646ab73eb52cb8ebb25be2e95ad0085658eb7e19",
          "body": "* fix: sync codex crit skill wait-loop wording\n\n* fix: regenerate integration hashes for Codex skills",
          "is_bot": false,
          "headline": "fix: sync Codex crit skill wait-loop wording (#733)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-17T09:20:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef5bdae4c3f95e8d177c7f7ef9a70f662bcb5f46",
          "body": "…d (#742)",
          "is_bot": false,
          "headline": "chore(readme): update top level readme with correct go install comman…",
          "author_name": "jacob-winkler",
          "author_login": "jacob-winkler",
          "committed_at": "2026-07-13T20:35:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb74dd76cdb813d1d78967c76268ae2c0d1e6abb",
          "body": "* fix: harden story review lifecycle\n\n* test: cover story daemon failure paths",
          "is_bot": false,
          "headline": "fix: harden story review lifecycle (#739)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-10T20:50:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd4c4bac9d7d9de491985835f9e76976924fbe51",
          "body": null,
          "is_bot": false,
          "headline": "fix: polish story mode rendering (#738)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-10T19:28:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3a584a5211e05d0b3ebfe749e4776450af88a92",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump Nix flake version to v0.18.0",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-10T13:11:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "405e39f7f95cf409f24e33047d9d9c61a5551fb9",
          "body": "Add opt-in \"story\" review mode: a chaptered narrative over a diff.\n\n- crit story CLI: generate/ingest chaptered story-mode review JSON\n  (--story-file, --prep, --skip-llm, --clear, --guide; LLM producer via agent_cmd).\n- Persist story on review.json, expose GET/POST/DELETE /api/story, broadcast\n  st\n[…]\nide; crit-story SKILL.md for Claude Code.\n- Thread GitHub PR title/body into story generation.\n- Docs, fixtures, and E2E coverage.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add story review mode (#735)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-10T12:38:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "482f56e44d8ebbcd60827000b95a8b475d4cf2b7",
          "body": "* fix: preserve unstaged changes in branch-added files\n\n* fix: also preserve staged changes in branch-added files\n\nThe unstaged fix guarded on `scope != \"unstaged\"`, which left the\nidentical twin bug in \"staged\" scope: a branch-added file (committed on\nthe branch, new vs merge-base) that was further\n[…]\nAuthored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Tomasz Tomczyk <me@tomasztomczyk.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: preserve unstaged changes in branch-added files (#736)",
          "author_name": "Makoto Dejima",
          "author_login": "makotodejima",
          "committed_at": "2026-07-10T12:08:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c098b4d790aa930675ebec99332d9dbe9526d016",
          "body": "* feat: honor instance share policy in share modal\n\n* fix: route share policy through proxy auth relay",
          "is_bot": false,
          "headline": "feat: honor instance share policy in share modal (#734)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-09T10:13:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de41150bcfa6e1a062bd7e4cf934999a9c759d7e",
          "body": "hljs's Ruby lexer registers aliases rb, gemspec, podspec, thor, irb —\nbut not rake. EXT_OVERRIDES already covers other extensions hljs\ndoesn't resolve via built-in aliases; add rake there so *.rake files\n(e.g. lib/tasks/foo.rake) get highlighted like the extensionless\nRakefile already does via BASENAME_LANG.",
          "is_bot": false,
          "headline": "fix: highlight .rake files as Ruby (#732)",
          "author_name": "Kizashi Nagata",
          "author_login": "kizashi1122",
          "committed_at": "2026-07-09T06:31:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe0554d7cb9199dd22436f48231daba518a5f844",
          "body": null,
          "is_bot": false,
          "headline": "fix: stop all repo sessions (#731)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-08T21:16:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71ba065146278535a3b45fc0a5d593425cd81d3b",
          "body": "* fix: reshare when remote review was deleted\n\n* test: cover deleted remote reshare fallback\n\n* test: cover existing share validation errors",
          "is_bot": false,
          "headline": "fix: reshare when remote review was deleted (#730)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-08T16:38:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f66749ca6ef40c55eb753ea5e66a94eedd2078f",
          "body": "Add pragmatic tests for hook trust hashing, LoadHookMaps, resolution edge\ncases, session stats env payload, and finish/config HTTP contracts.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test: improve command hooks coverage (#727)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-07T10:11:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "624002f7278795ab7aa1d92350487d85b1643e95",
          "body": "Run user-defined shell scripts on finish/approve with CRIT_* env vars and\nstdin JSON, gated by the same project trust flow as prompt templates.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: add command hooks for finish lifecycle side effects (#726)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-07T09:38:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7f532eac297b546d4aa21044e0d1fb1a037d6c6b",
          "body": null,
          "is_bot": false,
          "headline": "fix: remove confusing opencode sharing plugin install hint (#725)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-05T20:03:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2de339fd7da92ab85aa707945677f0ee7b43724",
          "body": "…ration (#724)",
          "is_bot": false,
          "headline": "fix: tolerate trailing commas in opencode config during plugin regist…",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-05T18:36:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7158c97673db58813d1ffb624db59fdf8ace9a72",
          "body": "Bumps [eslint](https://github.com/eslint/eslint) from 10.5.0 to 10.6.0.\n- [Release notes](https://github.com/eslint/eslint/releases)\n- [Commits](https://github.com/eslint/eslint/compare/v10.5.0...v10.6.0)\n\n---\nupdated-dependencies:\n- dependency-name: eslint\n  dependency-version: 10.6.0\n  dependency-\n[…]\nrect:development\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump eslint from 10.5.0 to 10.6.0 (#722)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-05T07:04:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "70754fdaa47e483d8445f8c4bca341e2367f0f64",
          "body": "Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.15.0 to 11.16.0.\n- [Release notes](https://github.com/mermaid-js/mermaid/releases)\n- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.15.0...mermaid@11.16.0)\n\n---\nupdated-dependencies:\n- dependency-name: mermaid\n  depen\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump mermaid from 11.15.0 to 11.16.0 (#721)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-05T07:04:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1b837374af9377367f87ea1a5ec889fc6e6bb1d8",
          "body": "Bumps [markdown-it](https://github.com/markdown-it/markdown-it) from 14.2.0 to 14.3.0.\n- [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/markdown-it/markdown-it/compare/14.2.0...14.3.0)\n\n---\nupdated-dependencies:\n- dependency-name: mark\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump markdown-it from 14.2.0 to 14.3.0 (#720)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-05T06:38:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e4c74ad2a9cf33c4ef9e18d0a54faabad582b067",
          "body": "Bumps [stylelint](https://github.com/stylelint/stylelint) from 17.13.0 to 17.14.0.\n- [Release notes](https://github.com/stylelint/stylelint/releases)\n- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/stylelint/stylelint/compare/17.13.0...17.1\n[…]\nrect:development\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump stylelint from 17.13.0 to 17.14.0 (#719)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-05T06:38:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bfcc57466ba9fd1f08fed27c577363dc9b72096e",
          "body": "Bumps [browser-actions/setup-chrome](https://github.com/browser-actions/setup-chrome) from 1 to 2.\n- [Release notes](https://github.com/browser-actions/setup-chrome/releases)\n- [Changelog](https://github.com/browser-actions/setup-chrome/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/browse\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump browser-actions/setup-chrome from 1 to 2 (#718)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-05T06:37:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "07403bdfeb5fe9b4704d58a2c58c3d9ac641522c",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore: bump Nix flake version to v0.17.1",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-03T10:07:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d43df1c47a82735809a6df8e94db044891c412c7",
          "body": "…n (#716)\n\n* fix: ship audit-release-fixes cleanup\n\nApply validated release-audit fixes by filtering the virtual commit from compare-target selection,\ncleaning up minor Go nits, and bumping the Claude Code plugin version so prompt updates propagate.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n\n[…]\nde\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* chore: regenerate integration hashes\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: filter virtual compare target and bump claude-code plugin versio…",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-03T09:57:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "78e27bc0bdaef615ee361bb667d4fdf4ac4c5f55",
          "body": "Review-level comment edits rendered multiple forms when the same comment ID appeared twice in session state after disk merge.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: dedupe review comments to prevent duplicate edit forms (#717)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-03T09:55:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "af8c37e281a86e6de619307ce68f91a754d1570a",
          "body": "…es (#715)\n\nAdd golangci-lint to mise.toml so pre-commit always runs lint via run_tool,\nand run make setup-hooks on wt post-start so new worktrees get hooks without\nmanual setup.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore: pin golangci-lint in mise and auto-enable git hooks in worktre…",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-03T08:58:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "53b5ec25c2a43753dc0889dfa23264f3c97e7fae",
          "body": "* fix: address v0.17.0 post-release audit findings\n\nReconnect dead sessions using stale review_path for --output reviews,\nshow discovered prompt previews in the trust dialog, serialize crit fetch\nwith the share lock, and fix range-focus scope/chrome regressions.\n\nCo-authored-by: Cursor <cursoragent@\n[…]\n fetch locking,\nreconnect host/default layout flags, and config/discovered prompt previews.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: address v0.17.0 post-release audit findings (#714)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-03T08:39:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9a134516a1e38c6f9b45473145035e5e597a7027",
          "body": "* fix: sync session memory after UI comment pull merge\n\nPulled comments were written to review.json but the in-memory session\nwas not updated, so the UI refresh showed stale data. Flush pending\ndebounced writes before merge and reload comments from disk immediately.\n\nCo-authored-by: Cursor <cursorag\n[…]\n-by: Cursor <cursoragent@cursor.com>\n\n* test: cover SyncCommentsFromDisk in session package\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: sync session memory after UI comment pull (#713)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-03T08:13:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c53212abccb4caf1910f462c811e4696898b54bd",
          "body": "* fix: block share/fetch/unpublish CLI when proxy_auth is enabled\n\nTerminal commands cannot authenticate to crit-web behind SSO. Fail fast\nwith a clear message to use Crit's browser interface instead of hitting\nthe network and getting an HTML login page.\n\nCo-authored-by: Cursor <cursoragent@cursor.c\n[…]\nmportant block\ncovering checkProxyAuthCLIAllowed, browser relay parity, and test isolation.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: block share/fetch/unpublish CLI when proxy_auth is enabled (#712)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-03T07:53:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "784252a75a8edadeec26e3059d9609cf5143e6ad",
          "body": "…711)",
          "is_bot": false,
          "headline": "fix(claude-code): restore trigger clause in crit skill description (#…",
          "author_name": "Prateek Rungta",
          "author_login": "prateek",
          "committed_at": "2026-07-03T07:14:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea3e089eaf188be2d4c1c5d25dc42a18072b9560",
          "body": "* feat: add virtual working changes entry in commit picker\n\nShow a synthetic top commit for working-tree changes and wire it to a dedicated uncommitted-only diff mode.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* test: update commit picker e2e for virtual row\n\nCo-authored-by: Cursor <cursorag\n[…]\nt leave every repo\ndirty, and skip the virtual working-tree row when clicking real commits.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: add virtual working changes entry in commit picker (#708)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-02T14:42:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0b35e5a0643eeb713b009f10508b7ba3c9943a4d",
          "body": "Show TARGET/PARENT badges, stack root label, and subtle in-range row\nhighlighting so users can map the active compare range in stacked reviews.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: add stack popover orientation cues for issue 537 (#710)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-02T11:05:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "64adb2ead2fc8ca3014b5a14e6b6c4e7f843d761",
          "body": "* docs: clarify cleanup_on_approve default and /crit command usage\n\nDocument that approved reviews are auto-cleaned by default in the finish-hook example, and note that agents can invoke /crit with optional arguments.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* chore: regenerate integration hash for finish hook example\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs: clarify cleanup_on_approve default and /crit usage (#709)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-02T10:49:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d279107ef931b7464d7c67f17808d13b8aaf2e03",
          "body": null,
          "is_bot": false,
          "headline": "chore: align printHelp output (#707)",
          "author_name": "pqppq",
          "author_login": "pqppq",
          "committed_at": "2026-07-02T08:05:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9bc5d52bb6bf5482a259f0ba590df2d9e8ee957c",
          "body": "* feat: reuse Chrome DevTools cookies in crit live\n\nAdd --cdp-url / live_cdp_url to fetch upstream session cookies from a\nlocal Chrome debugging endpoint, with unit tests, Chrome integration\ntests, and a CI job. Manual --cookie values still override CDP cookies.\n\nCo-authored-by: Cursor <cursoragent@\n[…]\nby: Cursor <cursoragent@cursor.com>\n\n* fix: satisfy lint and improve CDP unit test coverage\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: reuse Chrome DevTools cookies in crit live (#706)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-01T22:48:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6947a5cf245273de3dba31eb25361ec20f27499b",
          "body": "* fix: route bare GitHub PR URLs to range mode\n\nBare https://github.com/.../pull/N positional args were classified as\nlive-mode URLs. Detect PR URLs in CLI routing and rewrite to --pr so\nagents and users get range mode without skill-specific handling.\n\nCloses #702\n\nCo-authored-by: Cursor <cursoragen\n[…]\nhe new dispatch code.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* ci: re-run checks\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: route bare GitHub PR URLs to range mode (#705)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-01T21:46:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "663640359a41f721179da30290e4c2809f13e938",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore: bump Nix flake version to v0.17.0",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-01T10:41:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "59e8bd583ac03bc3513266c750d21b9c9bb39a11",
          "body": "Range focus diffs are pinned to BaseSHA..HeadSHA, but the UI defaulted\ndiffScope to branch and passed it to /api/file/diff, which queried the\nworking tree and returned empty hunks. Force scope=all in range focus on\nboth frontend and backend.\n\nCloses #701\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: render PR diff hunks when default scope is branch (#704)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-07-01T08:56:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0628924774b09c2f4a57046f2a0b2386d82e24f3",
          "body": "* fix: serialize crit share with per-review flock\n\nConcurrent `crit share` invocations for the same review identity could\nboth POST to crit-web before either persisted share_url, orphaning the\nfirst delete_token. Acquire share.lock inside the review folder for the\nfull share decision + network + per\n[…]\nt exercises the\nlocked CLI path directly instead of via exec, which patch coverage ignores.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: serialize crit share with per-review flock (#703)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-30T21:30:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d8ae47a83ccfd2bcb67550537b72e86227639c90",
          "body": "* feat: scroll anchored element into view when a comment is tapped\n\nTapping a comment card or opening a pin now scrolls its anchored\nelement into view in the live/preview iframe. Done via an optional\n`scroll` boolean on the keep-highlight message, so the compose path\n(element already on screen) keep\n[…]\nly@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nCo-authored-by: Tomasz Tomczyk <me@tomasztomczyk.com>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: scroll anchored element into view when a comment is tapped (#699)",
          "author_name": "Takara Yamaguchi",
          "author_login": "csharp-neet",
          "committed_at": "2026-06-28T11:10:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "063b968daa398865d08aae3c8c62fe1adfe21f95",
          "body": "Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump actions/cache from 5 to 6 (#694)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-27T12:56:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "88e50eb78364255e6d6ba82eba6e760669ce648e",
          "body": null,
          "is_bot": false,
          "headline": "fix: resolve relative markdown image paths in file mode (#698)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-27T10:41:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "903a5576b72690302d6ff6614e50d40f127a5e56",
          "body": "Agents combining these flags hit a silent stdin hang because --json\nroutes to bulk JSON input mode and ignores --reply-to. Fail fast with\na message pointing to the single-reply command instead.\n\nCloses #693\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: reject --json with --reply-to on crit comment (#697)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-27T10:15:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fa544ec7bae846526352867bae802cbb238b3469",
          "body": "When /api/commits returns JSON null, commitList stayed null and\nclearCommitPins() crashed in normalizeCommitPins during round-complete\nSSE, leaving the Waiting overlay stuck.\n\nCoalesce null in fetchCommits and normalizeCommitPins; add regression\ntests. Closes #692.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: guard null commitList in file-changed handler (#696)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-27T09:40:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0090a36b2a88bcf6eb78f2b61a8e354a61370121",
          "body": "* feat: user-defined finish prompt hooks with project trust flow\n\nAdd configurable on_finish_* prompt templates (global and per-project),\nstock templates via crit install prompts, trust gating for repo hooks,\nand a unified prompt field for finish modal and agent stdout.\n\nCo-authored-by: Cursor <curs\n[…]\neload, then fulfill the\nmocked route directly — route.fetch during reload races on Windows.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: user-defined finish prompt hooks with project trust flow (#695)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-26T22:25:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5f9c5be16ef4d3006cdcad5c82512f927765c7de",
          "body": "Closes #689",
          "is_bot": false,
          "headline": "feat: configurable advertised URL for reverse-proxy access (#690)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-25T14:15:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68cd2b351e5661b8593e8bbd35a112405f1ba505",
          "body": "* feat: add compare-against picker and commit from/through controls\n\nExpose grouped compare targets (git branches, JJ bookmarks) and let users\nnarrow diffs to a single commit or a from..through range in the sidebar.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* test: cover CompareTargetsFor git and jj paths\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: compare-against picker and commit from/through controls (#688)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-24T20:24:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ea229e56bd3efe45710811b04e08ab147f3afb6d",
          "body": "Document crit install codex-plugin vs skills-only install, the proposed-plan\nStop hook, and add a dedicated integrations/codex/README.md.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs: expand Codex plugin installation guide (#687)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-24T15:48:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d1769f8d101d6354475cdd1ec8ff7cd4d1d5377b",
          "body": "* feat: add crit --session for cwd-independent review reconnect\n\nAgents can reconnect to an existing review from any directory using the\n12-char session ID printed on start. Plan mode next-round uses crit plan\n--name; other modes use crit --session. Bump integration plugin to 1.7.4.\n\nCo-authored-by:\n[…]\nnd tests for the default\nsession-key start path, connectOrStartDaemon start, and help text.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: add crit --session for cwd-independent review reconnect (#686)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-24T14:46:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "91bcc6100e0eb8313fcff178f9e329755b04f5bf",
          "body": "Preview pins shared to crit-web are stored under index.html while the UI\nsends the iframe route as ?path=. Look up comments by ID across all file\nentries when the hint path misses, round-trip dom_anchor on share import,\nand send the session file key from live-mode mutation handlers.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: resolve/delete preview comments imported from crit-web (#684)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-23T13:18:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f5b8c23224532b81ef0d20113c15fd9d5689880c",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore: bump Nix flake version to v0.16.5",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-22T22:25:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "08cabc044267c8cb96c307f35ed247a5b2124381",
          "body": "…ompt (#683)\n\nEmbed Comment in ListedComment so finish/crit comments JSON carries all\nreview.json fields (including dom_anchor). Add copy_prompt for the finish\nmodal with agent-directed wording, explicit review.json path, and a single\nnext-command instruction when changes are requested.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: include full comment fields in finish output and improve copy pr…",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-22T21:56:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "011b42456e9016c6c1a2926d29d6f50d463a2544",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore: bump Nix flake version to v0.16.4 (#682)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-22T14:30:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7cff123e5febf48539c920df10885e7e68ee41e4",
          "body": "* fix: keep default-branch review visible after agent commits\n\nPin BaseRef to HEAD at session start on main so round-complete\nrefreshes diff from the session baseline instead of only the working tree.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* fix: recompute merge-base when switching to wor\n[…]\nForWorkingTree on\nfeature branches; only default-branch sessions use the pinned start HEAD.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: keep default-branch review visible after agent commits (#681)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-22T14:02:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0e8b7213f06754acc8e95c8afcaff308041b3c77",
          "body": "…h (#679)\n\nWhen filtering to a single commit, out-of-scope comments are counted in\nhidden_unresolved by the API but updateCommentCount() only looked at loaded\nfiles — the button incorrectly showed Approve.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: finish button ignores hidden unresolved comments on commit switc…",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-22T13:35:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c3c196df5e7c42e9af6252befe75ba8c3120867d",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump actions/checkout from 6 to 7 (#672)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-22T12:04:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "72d2cdc6c4f8320d4e7f11a6e28c93ff1ad86b78",
          "body": "* feat: structured comments in finish stdout and update agent skills\n\nReturn a comments array (crit comments --json schema) from finish and\nreview-cycle; keep prompt as instructions only and drop review_file from\nthe agent payload. Update all integration skills and bump plugin to 1.7.3.\n\nCloses #673\n[…]\nidentity folder\n\n/api/config review_path is the review identity directory, not review.json.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: structured comments in crit finish stdout (#678)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-22T11:54:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bc72a3e840462159f9877c1f7b3634dee46cea46",
          "body": "…677)\n\nAgents need a stable way to read unresolved comments without hand-rolling\njq scripts. Mirrors crit comment review resolution (--output, --plan, daemon)\nand lists review-level comments first, then per-file file/line comments.\n\nCloses #674\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: add crit comments command to list unresolved review comments (#…",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-22T10:38:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5d747d79423f7bca35a5e4ab9ab6b82d100ea470",
          "body": "* feat: add configurable open command\n\n* docs: explain when to use open_cmd\n\nAdd the remote/SSH motivation and the single-executable constraint to\nthe open_cmd config row so the \"why\" is clear at a glance.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Tomasz Tomczyk <me@tomasztomczyk.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add configurable open command (#671)",
          "author_name": "Ramon Dantas",
          "author_login": "ekisu",
          "committed_at": "2026-06-18T20:10:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "87166d06c81fb99f3575e5ec89065288ec5f2342",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump Nix flake version to v0.16.3 (#669)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-17T17:12:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f5e79f70e810363f2aa36c4af58c6539f435a80",
          "body": "… (#668)\n\nPost-release-audit cleanup (v0.16.2..main), all validated:\n\n- Delete dead exported alias DeleteResultDeleted (internal/session) —\n  referenced nowhere; left over from the #655 layout refactor.\n- Wrap git MergeBaseOf error for consistency with the sapling/jj impls\n  and the adjacent MergeBa\n[…]\n- Fix stale handleDiffDragEnd comment wording (web/app.js) — the mousedown\n  listener is now delegated on the container, not the button (#665).\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: remove dead alias and fix stale comments from release audit…",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-17T16:39:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "98bb3ad71eace5c16f9b18fffea72bc9bc5342d2",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6 to 7.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump codecov/codecov-action from 6 to 7 (#660)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-15T00:15:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1527f8999970cda7649521fc0fc9940e2947f66",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps-dev): bump eslint from 10.4.1 to 10.5.0 (#663)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-14T11:32:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "831a0244404aac9130cbc7123700cb88745face5",
          "body": "`crit --pr <n>` used the base branch's tip (info.BaseRefOid) as the diff\nbase, producing a two-dot base..head diff. When the PR branch isn't\nrebased onto its base, that folds in commits landed on the base branch\nsince the fork point - surfacing files that aren't part of the PR. GitHub\nrenders a PR a\n[…]\ns)\nand internal/focus (the resolveFocusFromPR call site). Adds jj and\nsapling regression coverage alongside the original git test.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(pr): diff PRs from the merge-base, not the base-branch tip (#659)",
          "author_name": "Jonas Keinholz",
          "author_login": "inyono",
          "committed_at": "2026-06-13T21:53:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e3e159b9fb99e3061c702a1225bbe534f4094ad1",
          "body": "Bumps [esbuild](https://github.com/evanw/esbuild) from 0.28.0 to 0.28.1.\n- [Release notes](https://github.com/evanw/esbuild/releases)\n- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/evanw/esbuild/compare/v0.28.0...v0.28.1)\n\n---\nupdated-dependenci\n[…]\nrect:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump esbuild from 0.28.0 to 0.28.1 (#662)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-13T21:52:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c3fb9f34f39c2e9a423b93edf78b954678c66ea",
          "body": "Bumps [stylelint](https://github.com/stylelint/stylelint) from 17.12.0 to 17.13.0.\n- [Release notes](https://github.com/stylelint/stylelint/releases)\n- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/stylelint/stylelint/compare/17.12.0...17.1\n[…]\nrect:development\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump stylelint from 17.12.0 to 17.13.0 (#661)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-13T21:52:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f2f150566ae488a6ded465e1908fca25f83ea658",
          "body": "…stener (#665)\n\nA large diff (e.g. picking a base branch that diverged months ago) can\nrender thousands of `+` comment buttons, each previously getting its own\n`mousedown` listener. Wiring up ~9,900 listeners stalled the main thread\nfor several seconds, freezing the tab (#657).\n\nReplace the per-butt\n[…]\nfor the touch path. One\nlistener per container instead of one per line — O(1) regardless of diff\nsize. Drag behavior is unchanged.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf: delegate diff comment-button mousedown instead of per-button li…",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-13T21:47:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6ed18b1c0fb2fd9e2491583d992b722e3743b620",
          "body": "* feat(config): add auto_viewed_patterns config key, expose via /api/config\n\nPlumb a new auto_viewed_patterns []string config key through the\nconfig loader and /api/config response so the frontend can auto-mark\nmatching files viewed (collapsed) once per launch. Mirrors\nignore_patterns: presence-trac\n[…]\nreadme): document auto_viewed_patterns config key\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: configurable globs auto-marked as viewed on launch (#666)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-13T21:46:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9c9fbf522993257eafc0f85dabb068603415b18f",
          "body": "Claude Code's \"@\" file-picker autocomplete inserts `crit @myfile.md`, but\nthe literal \"@myfile.md\" is not a real file. The daemon spawned, failed\nsession init on the bogus path, and the client could not connect\n(\"connection reset by peer\") — while `crit myfile.md` worked fine.\n\nNormalize args in the\n[…]\ning at the entry\npoint also unifies daemon keying so a \"@file\" round and a \"file\" round\nreconnect to the same daemon.\n\nCloses #656\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: accept @-prefixed file paths from agent file pickers (#664)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-13T21:17:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9dc81e7d54f8ff67e3350fd3dc9d4305ca83d47a",
          "body": "* refactor: align repo layout with Go project standard\n\nExtract domain packages under internal/, move embedded frontend to web/,\nintegrations to repo root, and test harnesses under test/. Thin main.go\nto CLI wiring; fix macOS path canonicalization for file-mode sessions.\n\nCo-authored-by: Cursor <cur\n[…]\nlure instead of a silent 404.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: align repo layout with Go project standard (#655)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-13T20:20:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "490673c570ea3a73f2e6c4494609516d1824ee0a",
          "body": "Co-authored-by: ValeriaVG <mail@valeriavg.dev>",
          "is_bot": false,
          "headline": "docs: update readme (#645)",
          "author_name": "Valeria",
          "author_login": "ValeriaVG",
          "committed_at": "2026-06-10T08:30:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c600bea3bbd15640681d0c22fe97ee3296eb49a4",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore: bump Nix flake version to v0.16.2 (#654)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-09T20:42:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dd3987d03caed2832964d28210a206e181ab5343",
          "body": "Store diff line attrs on split side elements instead of stale row\ndatasets. Restore j/k focus via findNavElementForFocusTarget and fix\nnavFocusTargetFromElement for split rows.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: preserve split-row keyboard focus across re-renders (#652)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-09T20:15:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c48fd01beb9e7f2c4945df1736bfea28c000928a",
          "body": "* fix: thread oldPath through scoped commit-range rename diffs\n\nGetFileDiffSnapshotScoped dropped OldPath for rename-only commits in\ncommit ranges, showing spurious full-file adds. Thread oldPath through\nloadScopedFileState and delegate VCS diff work to scopedHunks.\n\nCo-authored-by: Cursor <cursorag\n[…]\nhe file was already\nin the session without OldPath, showing spurious add hunks for renames.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: thread oldPath through scoped commit-range rename diffs (#651)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-09T20:02:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dbe2cf20cb52295556ea59f179c0e51b4bc814d0",
          "body": "* feat(live): forward upstream cookies for authenticated apps\n\nAdd --cookie, --cookie-file, and live_cookie/live_cookie_file config so\ncrit live can proxy session cookies to server-rendered apps that require\nlogin. Project config can point at a gitignored cookie jar for local dev.\n\nCloses #644\n\nCo-a\n[…]\nie file test\n\nFixes unit-windows failure where /etc/cookies.txt is not absolute on Windows.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(live): forward upstream cookies for authenticated apps (#649)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-09T16:16:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c4e1bfd68962aa0b11b9d950c2d50eb10edaedd2",
          "body": "…#650)\n\nMoveFileEx replace can briefly surface ERROR_FILE_NOT_FOUND on the\ndestination. readFileShared only retried sharing violations, so\nTestConcurrentSaveCritJSON_NoCorruption failed under concurrent writers.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(windows): retry transient ENOENT during concurrent review reads (…",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-09T15:53:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9caa64f04f394c2b40ceee6a2dfb5525f412f460",
          "body": "… (#647)\n\nSimilarity-based del/add pairing reordered split-view rows so gutter\nnumbers could appear out of file order (reported in #646). Pair lines\nby index like GitHub and keep word-diff pairing for highlights only.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: align split diff rows positionally to preserve line number order…",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-09T15:11:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fbe6fcdc309432166a75a2abee31767bf0630799",
          "body": "Hold the API port listener until bindProxyServer succeeds and retry\nwhen apiPort+1 is still in TIME_WAIT from earlier httptest servers.\n\nCloses #642\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(test): stabilize TestBindProxyServer_PortIsAPIPlusOne (#643)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-08T11:45:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d93238afe68ff94fab761656f3d65545936021fd",
          "body": "Multi-page static previews only injected the agent bundle on the root\n/preview-content/ page, so navigating to sibling .html files left Pin mode\nenabled but clicks did nothing. Also remove invalid allow=\"*\" on the\npreview iframe (harmless browser warning only).\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: inject crit-agent into all preview HTML pages (#641)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-08T10:38:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "081253f0dab6983f5b7d5327d032c3451fc79164",
          "body": "Pair old and new paths when computing git diffs so pure renames no longer\nrender as full-file adds, and surface old_path in the review UI.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: show file renames without content changes like GitHub (#640)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-08T10:38:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "de8462443fd13d99109a088dac1361b23ed459fd",
          "body": "Relocate package main, embedded frontend/, and integrations/ under\ncmd/crit/ so the repo root stays navigable on GitHub. Update build\npaths (Makefile, CI, e2e scripts, marketplace manifests, docs) and\nmove preview test fixtures to test/fixtures/. Move codecov config to\n.github/codecov.yml. No behavior changes.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor: move Go sources to cmd/crit and slim repo root (#639)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-08T09:59:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7a1d0e403de3c5347e61fbcf7dcbe1e701a7ed01",
          "body": "* fix: preserve j/k focus across hover and comment form re-renders\n\nRemove mouseenter-driven focus sync so stationary cursor no longer steals\nkeyboard navigation at scroll boundaries. Persist focus through comment\ncancel/submit re-renders and add CSS hover highlight matching crit-web.\n\nFixes #636.\n\n\n[…]\na j/k in tests.\nAfter submit/cancel, selection clears but keyboard focus stays on the line.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: preserve j/k focus across hover and comment form re-renders (#638)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-07T20:08:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ec0b75bc2f53ec916407258c51047f485f6e4477",
          "body": "localeCompare puts '_' before '.', so foo_test.go appeared before foo.go.\nUse ASCII pathCompare (matching Go sort.Strings) in the file list and tree.\n\nCloses #635\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: sort files with GitHub byte order instead of localeCompare (#637)",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-07T19:25:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a3f3e93786771edca776c0e2cfe41af37dd47644",
          "body": "On systems where Go 1.26+ resolves localhost to [::1] (e.g. WSL2 with IPv6\nenabled), internal daemon HTTP calls failed because the server binds to\n127.0.0.1 but clients dialled localhost → ::1.\n\n- Add connURL() using the raw bind address for internal connectivity\n- Keep baseURL() for user-facing output (logs, browser open)\n- Add TestSessionEntry_ConnURL to lock the display vs connectivity split\n\nCo-authored-by: Tomas Aschan <tomasl@spotify.com>",
          "is_bot": false,
          "headline": "fix: use raw bind address for internal HTTP calls to avoid IPv6 mismatch",
          "author_name": "Tomas Aschan",
          "author_login": "tomasaschan",
          "committed_at": "2026-06-05T13:22:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03e8a7c0cc9d246e6ecc4cdb00317df439c32945",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump Nix flake version to v0.16.1",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-04T18:21:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4af6e20bd9c4a73d5abe210d238691722ff21b97",
          "body": "…633)\n\nPre-release audit polish for the multi-commit picker (v0.16.0 window):\n\n- Add a 13px spacer to the static \"All commits\" row so its text aligns\n  with the SHA column of the checkboxed commit rows (was offset 21px).\n- Make the \"All commits\" row keyboard-operable (role=button, tabindex,\n  Enter/\n[…]\n a detached doc comment in session.go: the GetFileDiffSnapshot\n  summary had been left above whitespaceIgnoredHunks; move it back.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: align and keyboard-enable the commit picker \"All commits\" row (#…",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-04T16:34:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "39eac5b75fa72401c77cc2aa63b60a46c3be3d43",
          "body": "…ance.\n\nCursor does not read .claude/rules; these .mdc files apply Go and frontend conventions when matching files are in context.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Add Cursor rules synced from .claude/rules for file-scoped agent guid…",
          "author_name": "Tomasz Tomczyk",
          "author_login": "tomasz-tomczyk",
          "committed_at": "2026-06-03T20:07:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 65,
      "commits_last_year": 748,
      "latest_release_at": "2026-07-17T13:57:34Z",
      "latest_release_tag": "v0.18.1",
      "releases_from_tags": false,
      "days_since_last_push": 1,
      "active_weeks_last_year": 23,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 5.3
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 71,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/tomasz-tomczyk/crit",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/tomasz-tomczyk/crit",
          "is_deprecated": false,
          "latest_version": "v0.18.1",
          "repository_url": "https://github.com/tomasz-tomczyk/crit",
          "versions_count": 65,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-17T13:46:23Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 57,
      "stars": 810,
      "watchers": 3,
      "fork_history": {
        "days": [
          {
            "date": "2026-02-18",
            "count": 1
          },
          {
            "date": "2026-02-24",
            "count": 1
          },
          {
            "date": "2026-03-02",
            "count": 1
          },
          {
            "date": "2026-03-05",
            "count": 1
          },
          {
            "date": "2026-03-07",
            "count": 1
          },
          {
            "date": "2026-03-10",
            "count": 1
          },
          {
            "date": "2026-03-17",
            "count": 1
          },
          {
            "date": "2026-03-18",
            "count": 1
          },
          {
            "date": "2026-03-27",
            "count": 2
          },
          {
            "date": "2026-04-02",
            "count": 1
          },
          {
            "date": "2026-04-06",
            "count": 1
          },
          {
            "date": "2026-04-13",
            "count": 1
          },
          {
            "date": "2026-04-17",
            "count": 1
          },
          {
            "date": "2026-04-20",
            "count": 1
          },
          {
            "date": "2026-04-25",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-05-02",
            "count": 1
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-05-07",
            "count": 1
          },
          {
            "date": "2026-05-09",
            "count": 2
          },
          {
            "date": "2026-05-11",
            "count": 1
          },
          {
            "date": "2026-05-14",
            "count": 1
          },
          {
            "date": "2026-05-15",
            "count": 1
          },
          {
            "date": "2026-05-18",
            "count": 1
          },
          {
            "date": "2026-05-20",
            "count": 1
          },
          {
            "date": "2026-05-23",
            "count": 1
          },
          {
            "date": "2026-05-24",
            "count": 1
          },
          {
            "date": "2026-06-05",
            "count": 1
          },
          {
            "date": "2026-06-06",
            "count": 1
          },
          {
            "date": "2026-06-07",
            "count": 3
          },
          {
            "date": "2026-06-09",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 1
          },
          {
            "date": "2026-06-15",
            "count": 2
          },
          {
            "date": "2026-06-16",
            "count": 1
          },
          {
            "date": "2026-06-18",
            "count": 1
          },
          {
            "date": "2026-06-21",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 1
          },
          {
            "date": "2026-06-23",
            "count": 1
          },
          {
            "date": "2026-06-25",
            "count": 1
          },
          {
            "date": "2026-06-27",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          },
          {
            "date": "2026-07-02",
            "count": 2
          },
          {
            "date": "2026-07-03",
            "count": 1
          },
          {
            "date": "2026-07-09",
            "count": 1
          },
          {
            "date": "2026-07-10",
            "count": 1
          },
          {
            "date": "2026-07-13",
            "count": 2
          },
          {
            "date": "2026-07-15",
            "count": 1
          },
          {
            "date": "2026-07-17",
            "count": 1
          },
          {
            "date": "2026-07-19",
            "count": 2
          }
        ],
        "complete": true,
        "collected": 57,
        "total_forks": 57
      },
      "star_history": {
        "days": [
          {
            "date": "2026-02-16",
            "count": 7
          },
          {
            "date": "2026-02-17",
            "count": 3
          },
          {
            "date": "2026-02-18",
            "count": 1
          },
          {
            "date": "2026-02-19",
            "count": 3
          },
          {
            "date": "2026-02-20",
            "count": 5
          },
          {
            "date": "2026-02-23",
            "count": 1
          },
          {
            "date": "2026-02-24",
            "count": 3
          },
          {
            "date": "2026-03-02",
            "count": 2
          },
          {
            "date": "2026-03-03",
            "count": 1
          },
          {
            "date": "2026-03-04",
            "count": 3
          },
          {
            "date": "2026-03-05",
            "count": 1
          },
          {
            "date": "2026-03-06",
            "count": 2
          },
          {
            "date": "2026-03-07",
            "count": 4
          },
          {
            "date": "2026-03-09",
            "count": 3
          },
          {
            "date": "2026-03-10",
            "count": 1
          },
          {
            "date": "2026-03-12",
            "count": 3
          },
          {
            "date": "2026-03-13",
            "count": 2
          },
          {
            "date": "2026-03-14",
            "count": 1
          },
          {
            "date": "2026-03-15",
            "count": 1
          },
          {
            "date": "2026-03-16",
            "count": 2
          },
          {
            "date": "2026-03-17",
            "count": 5
          },
          {
            "date": "2026-03-18",
            "count": 2
          },
          {
            "date": "2026-03-20",
            "count": 1
          },
          {
            "date": "2026-03-21",
            "count": 35
          },
          {
            "date": "2026-03-22",
            "count": 3
          },
          {
            "date": "2026-03-23",
            "count": 2
          },
          {
            "date": "2026-03-24",
            "count": 3
          },
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-03-26",
            "count": 2
          },
          {
            "date": "2026-03-27",
            "count": 1
          },
          {
            "date": "2026-03-29",
            "count": 2
          },
          {
            "date": "2026-03-30",
            "count": 2
          },
          {
            "date": "2026-03-31",
            "count": 1
          },
          {
            "date": "2026-04-01",
            "count": 4
          },
          {
            "date": "2026-04-02",
            "count": 3
          },
          {
            "date": "2026-04-04",
            "count": 1
          },
          {
            "date": "2026-04-06",
            "count": 2
          },
          {
            "date": "2026-04-07",
            "count": 2
          },
          {
            "date": "2026-04-08",
            "count": 3
          },
          {
            "date": "2026-04-10",
            "count": 5
          },
          {
            "date": "2026-04-13",
            "count": 11
          },
          {
            "date": "2026-04-14",
            "count": 1
          },
          {
            "date": "2026-04-15",
            "count": 15
          },
          {
            "date": "2026-04-16",
            "count": 12
          },
          {
            "date": "2026-04-17",
            "count": 5
          },
          {
            "date": "2026-04-18",
            "count": 2
          },
          {
            "date": "2026-04-19",
            "count": 1
          },
          {
            "date": "2026-04-20",
            "count": 3
          },
          {
            "date": "2026-04-21",
            "count": 1
          },
          {
            "date": "2026-04-23",
            "count": 4
          },
          {
            "date": "2026-04-24",
            "count": 6
          },
          {
            "date": "2026-04-25",
            "count": 3
          },
          {
            "date": "2026-04-27",
            "count": 11
          },
          {
            "date": "2026-04-28",
            "count": 4
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-04-30",
            "count": 3
          },
          {
            "date": "2026-05-01",
            "count": 3
          },
          {
            "date": "2026-05-02",
            "count": 10
          },
          {
            "date": "2026-05-03",
            "count": 10
          },
          {
            "date": "2026-05-04",
            "count": 7
          },
          {
            "date": "2026-05-05",
            "count": 4
          },
          {
            "date": "2026-05-06",
            "count": 4
          },
          {
            "date": "2026-05-07",
            "count": 18
          },
          {
            "date": "2026-05-08",
            "count": 17
          },
          {
            "date": "2026-05-09",
            "count": 8
          },
          {
            "date": "2026-05-10",
            "count": 7
          },
          {
            "date": "2026-05-11",
            "count": 8
          },
          {
            "date": "2026-05-12",
            "count": 9
          },
          {
            "date": "2026-05-13",
            "count": 4
          },
          {
            "date": "2026-05-14",
            "count": 2
          },
          {
            "date": "2026-05-15",
            "count": 8
          },
          {
            "date": "2026-05-16",
            "count": 4
          },
          {
            "date": "2026-05-17",
            "count": 2
          },
          {
            "date": "2026-05-19",
            "count": 2
          },
          {
            "date": "2026-05-20",
            "count": 1
          },
          {
            "date": "2026-05-21",
            "count": 1
          },
          {
            "date": "2026-05-22",
            "count": 2
          },
          {
            "date": "2026-05-24",
            "count": 1
          },
          {
            "date": "2026-05-25",
            "count": 2
          },
          {
            "date": "2026-05-26",
            "count": 2
          },
          {
            "date": "2026-05-27",
            "count": 2
          },
          {
            "date": "2026-05-28",
            "count": 6
          },
          {
            "date": "2026-05-29",
            "count": 4
          },
          {
            "date": "2026-05-30",
            "count": 2
          },
          {
            "date": "2026-05-31",
            "count": 1
          },
          {
            "date": "2026-06-01",
            "count": 4
          },
          {
            "date": "2026-06-02",
            "count": 5
          },
          {
            "date": "2026-06-03",
            "count": 4
          },
          {
            "date": "2026-06-04",
            "count": 5
          },
          {
            "date": "2026-06-05",
            "count": 28
          },
          {
            "date": "2026-06-06",
            "count": 18
          },
          {
            "date": "2026-06-07",
            "count": 23
          },
          {
            "date": "2026-06-08",
            "count": 13
          },
          {
            "date": "2026-06-09",
            "count": 5
          },
          {
            "date": "2026-06-10",
            "count": 10
          },
          {
            "date": "2026-06-11",
            "count": 5
          },
          {
            "date": "2026-06-12",
            "count": 4
          },
          {
            "date": "2026-06-13",
            "count": 1
          },
          {
            "date": "2026-06-14",
            "count": 2
          },
          {
            "date": "2026-06-15",
            "count": 5
          },
          {
            "date": "2026-06-16",
            "count": 1
          },
          {
            "date": "2026-06-17",
            "count": 4
          },
          {
            "date": "2026-06-18",
            "count": 5
          },
          {
            "date": "2026-06-19",
            "count": 5
          },
          {
            "date": "2026-06-20",
            "count": 3
          },
          {
            "date": "2026-06-21",
            "count": 2
          },
          {
            "date": "2026-06-22",
            "count": 7
          },
          {
            "date": "2026-06-23",
            "count": 7
          },
          {
            "date": "2026-06-24",
            "count": 4
          },
          {
            "date": "2026-06-25",
            "count": 24
          },
          {
            "date": "2026-06-26",
            "count": 26
          },
          {
            "date": "2026-06-27",
            "count": 9
          },
          {
            "date": "2026-06-28",
            "count": 8
          },
          {
            "date": "2026-06-29",
            "count": 10
          },
          {
            "date": "2026-06-30",
            "count": 17
          },
          {
            "date": "2026-07-01",
            "count": 14
          },
          {
            "date": "2026-07-02",
            "count": 11
          },
          {
            "date": "2026-07-03",
            "count": 16
          },
          {
            "date": "2026-07-04",
            "count": 6
          },
          {
            "date": "2026-07-05",
            "count": 6
          },
          {
            "date": "2026-07-06",
            "count": 16
          },
          {
            "date": "2026-07-07",
            "count": 10
          },
          {
            "date": "2026-07-08",
            "count": 3
          },
          {
            "date": "2026-07-09",
            "count": 11
          },
          {
            "date": "2026-07-10",
            "count": 4
          },
          {
            "date": "2026-07-11",
            "count": 8
          },
          {
            "date": "2026-07-12",
            "count": 6
          },
          {
            "date": "2026-07-13",
            "count": 8
          },
          {
            "date": "2026-07-14",
            "count": 6
          },
          {
            "date": "2026-07-15",
            "count": 12
          },
          {
            "date": "2026-07-16",
            "count": 7
          },
          {
            "date": "2026-07-17",
            "count": 9
          },
          {
            "date": "2026-07-18",
            "count": 7
          },
          {
            "date": "2026-07-19",
            "count": 6
          },
          {
            "date": "2026-07-20",
            "count": 5
          },
          {
            "date": "2026-07-21",
            "count": 11
          },
          {
            "date": "2026-07-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 810,
        "total_stars": 810
      },
      "open_issues_and_prs": 4
    },
    "ai_readiness": {
      "has_nix": true,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "mise.toml"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "test/e2e/tsconfig.json"
      ],
      "toolchain_manifests": [
        "go.mod",
        "test/e2e/fixtures/livemode-upstream/go.mod"
      ],
      "largest_source_bytes": 3565102,
      "source_files_sampled": 609,
      "oversized_source_files": 12,
      "agent_instruction_files": [
        ".cursor/rules/frontend-architecture.mdc",
        ".cursor/rules/frontend-css.mdc",
        ".cursor/rules/frontend-js.mdc",
        ".cursor/rules/go.mdc",
        ".cursor/rules/proxy-auth-transport.mdc",
        "AGENTS.md",
        "CLAUDE.md",
        "scripts/AGENTS.md",
        "scripts/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 30857
    },
    "dependencies": {
      "manifests": [
        "go.mod",
        "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/mdp/qrterminal/v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.2.1"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.45.0"
        },
        {
          "name": "golang.org/x/term",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.43.0"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "rsc.io/qr",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.2.0"
        },
        {
          "name": "golang.org/x/net",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.55.0"
        },
        {
          "name": "github.com/gorilla/websocket",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.3"
        },
        {
          "name": "@highlightjs/cdn-assets",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.11.1"
        },
        {
          "name": "@sanity/diff-match-patch",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.2.0"
        },
        {
          "name": "highlightjs-heex",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.1"
        },
        {
          "name": "markdown-it",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^14.3.0"
        },
        {
          "name": "mermaid",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.16.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 577,
        "open_issues": 4,
        "closed_ratio": 0.974,
        "closed_issues": 149,
        "closed_unmerged_prs": 19
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "tomasz-tomczyk",
          "commits": 689,
          "avatar_url": "https://avatars.githubusercontent.com/u/182303?v=4"
        },
        {
          "type": "User",
          "login": "vereis",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/15597865?v=4"
        },
        {
          "type": "User",
          "login": "Amwam",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/879073?v=4"
        },
        {
          "type": "User",
          "login": "justin-guan",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/6827708?v=4"
        },
        {
          "type": "User",
          "login": "omry",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/376455?v=4"
        },
        {
          "type": "User",
          "login": "prateek",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/199982?v=4"
        },
        {
          "type": "User",
          "login": "danlindow",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/9800912?v=4"
        },
        {
          "type": "User",
          "login": "dankilman",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/1008577?v=4"
        },
        {
          "type": "User",
          "login": "ericsullivan",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/698585?v=4"
        },
        {
          "type": "User",
          "login": "inyono",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/1508477?v=4"
        }
      ],
      "contributors_sampled": 27,
      "top_contributor_share": 0.953
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "release.yml",
        "test.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml",
        "eslint.config.mjs"
      ],
      "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": 9,
            "reason": "26 out of 27 merged PRs checked by a CI test -- score normalized to 9",
            "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": 1,
            "reason": "Found 4/28 approved changesets -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "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": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "23 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "162981c16ed2df6c458c2a551ce8ba591b101316",
        "ran_at": "2026-07-22T03:14:23Z",
        "aggregate_score": 4.7,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-20T13:50:16Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-20T13:36:44Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": [
        {
          "number": 557,
          "created_at": "2026-05-17T08:37:17Z",
          "last_comment_at": "2026-07-08T00:20:42Z",
          "last_comment_author": "technicalpickles"
        },
        {
          "number": 728,
          "created_at": "2026-07-08T00:42:53Z",
          "last_comment_at": "2026-07-20T08:27:16Z",
          "last_comment_author": "tomasz-tomczyk"
        },
        {
          "number": 758,
          "created_at": "2026-07-20T11:54:42Z",
          "last_comment_at": "2026-07-20T13:03:18Z",
          "last_comment_author": "tomasz-tomczyk"
        },
        {
          "number": 760,
          "created_at": "2026-07-21T22:55:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/tomasz-tomczyk/crit",
    "host": "github.com",
    "name": "crit",
    "owner": "tomasz-tomczyk"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 70,
      "inputs": {
        "security": 47,
        "vitality": 84,
        "community": 67,
        "governance": 64,
        "engineering": 85
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 84,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "commits_last_year": 748,
              "human_commit_share": 0.87,
              "days_since_last_push": 1,
              "active_weeks_last_year": 23
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "23/52 weeks with commits",
                "points": 15.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 23
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "748 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 748
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 65,
              "latest_release_tag": "v0.18.1",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 5.3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "65 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 65
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~5.3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 5.3
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 67,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "forks": 57,
              "stars": 810,
              "watchers": 3,
              "growth_state": "organic",
              "growth_factor_pct": 100
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "810 stars",
                "points": 47.2,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 810
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "57 forks",
                "points": 14.6,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 57
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "3 watchers",
                "points": 1.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "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": 18,
                "status": "met",
                "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": 64,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 30,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 27,
              "top_contributor_share": 0.953
            },
            "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 95% of commits",
                "points": 1.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 95
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "27 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 27
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "merged_prs": 577,
              "open_issues": 4,
              "closed_issues": 149,
              "issue_closed_ratio": 0.974,
              "closed_unmerged_prs": 19
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "97% of issues closed",
                "points": 45.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "577/596 decided PRs merged",
                "points": 37,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 577,
                      "decided": 596
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 4/28 approved changesets -- score normalized to 1",
                "points": 1.5,
                "status": "partial",
                "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": 57,
            "inputs": {
              "followers": 66,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "tomasz-tomczyk",
              "public_repos": 29,
              "account_age_days": 6032
            },
            "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": "66 followers of tomasz-tomczyk",
                "points": 13.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 66,
                      "login": "tomasz-tomczyk"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "29 public repos, account ~16 yr old",
                "points": 22.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 29
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 16
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/tomasz-tomczyk/crit"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "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 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "65 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 65
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 85,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 82,
            "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": ".golangci.yml, eslint.config.mjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml, eslint.config.mjs"
                    }
                  }
                ],
                "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": "26 out of 27 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "agentic-coding",
                "ai-tools",
                "cli",
                "llm",
                "markdown",
                "code-review",
                "ai-agents",
                "developer-tools"
              ],
              "has_wiki": false,
              "homepage": "https://crit.md",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://crit.md",
                "points": 15,
                "status": "met",
                "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": "8 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 47,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 47,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.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": "26 out of 27 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "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 4/28 approved changesets -- score normalized to 1",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "23 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 12
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 82,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                ".cursor/rules/frontend-architecture.mdc",
                ".cursor/rules/frontend-css.mdc",
                ".cursor/rules/frontend-js.mdc",
                ".cursor/rules/go.mdc",
                ".cursor/rules/proxy-auth-transport.mdc",
                "AGENTS.md",
                "CLAUDE.md",
                "scripts/AGENTS.md",
                "scripts/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 30857
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".cursor/rules/frontend-architecture.mdc, .cursor/rules/frontend-css.mdc, .cursor/rules/frontend-js.mdc, .cursor/rules/go.mdc, .cursor/rules/proxy-auth-transport.mdc, AGENTS.md, CLAUDE.md, scripts/AGENTS.md, scripts/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".cursor/rules/frontend-architecture.mdc, .cursor/rules/frontend-css.mdc, .cursor/rules/frontend-js.mdc, .cursor/rules/go.mdc, .cursor/rules/proxy-auth-transport.mdc, AGENTS.md, CLAUDE.md, scripts/AGENTS.md, scripts/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": "87 of 87 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 87,
                      "sampled": 87
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "excellent",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_nix": true,
              "has_tests": true,
              "lockfiles": [
                "go.sum",
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "mise.toml"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "test/e2e/tsconfig.json"
              ],
              "agent_commit_share": 0.59,
              "toolchain_manifests": [
                "go.mod",
                "test/e2e/fixtures/livemode-upstream/go.mod"
              ],
              "dependency_bot_commit_share": 0.13
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, mise.toml",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, mise.toml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yml, eslint.config.mjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml, eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "test/e2e/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "test/e2e/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, Nix, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, Nix, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "59 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 59,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "13 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 13,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 3565102,
              "source_files_sampled": 609,
              "oversized_source_files": 12
            },
            "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": "12/609 source files over 60KB",
                "points": 53.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 609,
                      "oversized": 12
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T03:14:48.625627Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/tomasz-tomczyk/crit.svg",
  "full_name": "tomasz-tomczyk/crit",
  "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.26.0 — metodología completa · wiki de métricas.

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