Öffentliches Register
Software-GesundheitsberichtSchema 0.26.0 · Metriken 1.13.0 · 2026-07-22 03:14 UTC

tomasz-tomczyk / crit

Your feedback loop with the agent

Go · JavaScript · TypeScriptMIT★ 810 Sterne⑂ 57 Forksseit Feb. 2026Auf GitHub ansehen ↗

tomasz-tomczyk/crit erreicht einen Gesundheitsindex von 70 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Engineering Quality (85/100) ab, am schwächsten bei Security (47/100). Zuletzt vor 1 Tag aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

70
gesamt / 100
Gut

Software-Gesundheitsindex

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

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

Bewertungsprofil

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

Eigentümerschaft

Tomasz TomczykPersönliches Konto
66 Follower29 öffentliche Reposseit Jan. 2010@Vetspire

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

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
Gogithub.com/tomasz-tomczyk/critv0.18.1-65vor 4 Tagen

Metriken nach Kategorie

Vitalität

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

84Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 1 Tagen
15.9/36Commit-Rhythmus — 23/52 Wochen mit Commits
18/18Commit-Volumen — 748 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 28 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year748
human_commit_share0,87
days_since_last_push1
active_weeks_last_year23
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 65 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 4 Tagen
27/27Release-Rhythmus — ein Release etwa alle 5,3 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count65
latest_release_tagv0.18.1
releases_from_tagsnein
days_since_latest_release4
mean_days_between_releases5,3

Community & Verbreitung

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

67Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
47.2/60Stars — 810 Stars
14.6/25Forks — 57 Forks
1.7/15Watcher — 3 Watcher
Verwendete Eingangsdaten
forks57
stars810
watchers3
growth_stateorganic
growth_factor_pct100
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein

Nachhaltigkeit & Governance

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

64Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
1.1/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 95 % der Commits
13.5/13.5Breite der Beitragenden — 27 Beitragende
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Verwendete Eingangsdaten
bus_factor1
contributors_sampled27
top_contributor_share0,953
Wie die Bewertung erfolgt
45.5/46.8Issue-Lösungsquote — 97 % der Issues geschlossen
37/38.3PR-Annahme — 577/596 entschiedene PRs gemergt
1.5/15OpenSSF Scorecard: Code-Review — Found 4/28 approved changesets -- score normalized to 1
Verwendete Eingangsdaten
merged_prs577
open_issues4
closed_issues149
issue_closed_ratio0,974
closed_unmerged_prs19
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
13.1/25Reichweite des Inhabers — 66 Follower von tomasz-tomczyk
22.8/25Kontohistorie — 29 öffentliche Repos, Kontoalter ca. 16 Jahre
Verwendete Eingangsdaten
followers66
owner_typeUser
is_verified
owner_logintomasz-tomczyk
public_repos29
account_age_days6.032
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

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

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

85Exzellent · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .golangci.yml, eslint.config.mjs
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
18/20OpenSSF Scorecard: CI-Tests — 26 out of 27 merged PRs checked by a CI test -- score normalized to 9
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein

Dokumentation

90Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://crit.md
10/10Repository-Beschreibung
10/10Topics — 8 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsagentic-coding, ai-tools, cli, llm, markdown, code-review, ai-agents, developer-tools
has_wikinein
homepagehttps://crit.md
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

47Gefährdet · 16 % des Gesamtindex

Sicherheitslage

47Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
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.5Lizenz — 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 — keine Daten
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
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,7
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

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

82Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — .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/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 87 von 87 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
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
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Makefile, mise.toml
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .golangci.yml, eslint.config.mjs
11/11Statische Typprüfung — test/e2e/tsconfig.json
10/10Reproduzierbare Umgebung — Dockerfile, Nix, lockfile
10/10Belegte Agentenpraxis — 59 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 13 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixja
has_testsja
lockfilesgo.sum, package-lock.json
has_dockerfileja
typed_languageja
bootstrap_filesMakefile, mise.toml
has_devcontainernein
has_linter_configja
typecheck_configstest/e2e/tsconfig.json
agent_commit_share0,59
toolchain_manifestsgo.mod, test/e2e/fixtures/livemode-upstream/go.mod
dependency_bot_commit_share0,13
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
53.9/55Handhabbare Dateigrößen — 12/609 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes3.565.102
source_files_sampled609
oversized_source_files12
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

810GitHub-Sterne
27Mitwirkende
748Commits, letzte 12 Monate
1Tage seit letztem Push
65Releases
1Bus-Faktor
4offene Issues
Go, npmPaket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

Stern- und Fork-Verlauf 810 ★ / 57 ⇿
810Sterne
57Forks
65Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

02004006008001.00081057352026-022026-052026-07
Major 0Minor 18Patch 44
OpenSSF Scorecard 4.7 / 10
4.7Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-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
k. A.Packagingpackaging 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
Direkte Abhängigkeiten 12
RegistryPaketVersionsvorgabeManifest
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
Alle Abhängigkeiten nicht erhoben

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

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "agentic-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"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenGo.