Öffentliches Register
Software-GesundheitsberichtSchema 0.30.0 · Metriken 2.3.1 · 2026-08-03 13:44 UTC

jongio / grut

A terminal file explorer with full Git and GitHub integration, AI chat, and reactive panels that stay in sync as you navigate.

GoMIT★ 41 Sterne⑂ 2 Forksseit März 2026Auf GitHub ansehen ↗
ArtKommandozeilenwerkzeugBibliothekTerminal-Oberflächewie das ermittelt wird

jongio/grut erreicht einen Gesundheitsindex von 88 von 100 und liegt damit im Bereich Exzellent. Am stärksten schneidet es bei Engineering Quality (94/100) ab, am schwächsten bei Community & Adoption (57/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

88
gesamt / 100
Exzellent

Software-Gesundheitsindex

Metriken werden auf einer standardisierten Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr gewichtetes Mittel, kalibriert auf die Verteilung des öffentlichen Registers, sodass die Stufen Perzentilbedeutung tragen; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze Gefährdet von 34.

88
Außergewöhnlich93-100Die Spitzengruppe des Registers (≈ obere 5 %); erfüllt im Wesentlichen alle geprüften Kriterien
Exzellent80-92Durchgehend stark; geringfügige Lücken
Gut65-79Gesund; Lücken sind begrenzt und beherrschbar
Mittel50-64Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Schwach35-49Wesentliche Schwächen in mehreren Bereichen
Gefährdet20-34Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-19Schwerwiegende 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.

Der gewichtete Gesamtwert 74 wird auf der veröffentlichten Indexskala auf 88 kalibriert (Register-Kalibrierung 2026-08-02).

Eigentümerschaft

Jon GallantPersönliches Konto
376 Follower56 öffentliche Reposseit Aug. 2012Microsoft

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/jongio/grutv0.7.1-23vor 9 Tagen
npmwebverweist auf ein anderes Repo — nicht bewertet0.0.254.4283vor 4931 Tagen

Metriken nach Kategorie

Vitalität

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

85Exzellent · 21 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
12.5/36Commit-Rhythmus — 18/52 Wochen mit Commits
18/18Commit-Volumen — 438 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year438
human_commit_share0,8
days_since_last_push0
active_weeks_last_year18

Release-Disziplin

98Außergewöhnlich
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 18 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 9 Tagen
27/27Release-Rhythmus — ein Release etwa alle 7,4 Tage
8/10OpenSSF Scorecard: Signed-Releases — 5 out of the last 5 releases have a total of 5 signed artifacts.
Verwendete Eingangsdaten
releases_count18
latest_release_tagv0.7.1
releases_from_tagsnein
days_since_latest_release9
mean_days_between_releases7,4

Community & Verbreitung

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

57Mittel · 17 % des Gesamtindex
Wie die Bewertung erfolgt
26/60Stars — 41 Stars
0/25Forks — 2 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks2
stars41
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
readme_badges6
has_contributingja
has_issue_templatenein
has_code_of_conductja
readme_badge_servicesgithub.com, goreportcard.com, pkg.go.dev, shields.io
has_pull_request_templateja

Nachhaltigkeit & Governance

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

63Mittel · 23 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
41.3/42Issue-Lösungsquote — 98 % der Issues geschlossen
28/30PR-Annahme — 150/161 entschiedene PRs gemergt
0/13Newcomer PR acceptance — kein PR eines Erstbeitragenden in 30 Tagen entschieden
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs150
open_issues4
closed_issues228
prs_merged_7d14
prs_decided_7d14
prs_merged_30d58
prs_decided_30d58
issue_closed_ratio0,983
closed_unmerged_prs11
first_time_authors_30d0
first_time_prs_merged_30d0
first_time_prs_decided_30d0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): newcomer_pr_acceptance. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
18.5/25Reichweite des Inhabers — 376 Follower von jongio
24.8/25Kontohistorie — 56 öffentliche Repos, Kontoalter ca. 13 Jahre
Verwendete Eingangsdaten
followers376
owner_typeUser
is_verified
owner_loginjongio
public_repos56
account_age_days5.100
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Außergewöhnlich
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf go
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 9 Tagen
20/20Versionshistorie — 23 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgithub.com/jongio/grut
ecosystemsgo
any_deprecatednein
min_days_since_publish9

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

94Außergewöhnlich · 19 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 4 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .golangci.yml
0/9.6Pre-Commit-Hooks
6.4/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 16 out of 16 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfigja
has_linter_configja
has_precommit_confignein

Dokumentation

100Außergewöhnlich
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://jongio.github.io/grut/
10/10Repository-Beschreibung
10/10Topics — 12 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsgit, terminal, cli, copilot, developer-tools, file-explorer, git-client, github, terminal-ui, tui, dprun, dx-idea
has_wikija
homepagehttps://jongio.github.io/grut/
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

65Gut · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 16 out of 16 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 3 contributing companies or organizations -- score normalized to 10
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 30 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
4.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 9
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
6/7.5Signed-Releases — 5 out of the last 5 releases have a total of 5 signed artifacts.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate6,5

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Trägt ein bewusst kleines Gewicht (4 %): Agenten-Tooling ist ein echtes Pflegesignal, doch ein Repository ohne jedes Signal kann weiterhin 100/100 erreichen.

93Außergewöhnlich · 4 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — .github/copilot-instructions.md, AGENTS.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 80 von 80 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_files.github/copilot-instructions.md, AGENTS.md
agent_instruction_max_bytes3.607
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — internal/extension/templates/wasm-go/Makefile
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .golangci.yml
11/11Statische Typprüfung — web/tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 75 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
5/8Automatisierte Wartung — Abhängigkeits-Automatisierung konfiguriert, in den erfassten Commits nicht beobachtet
9/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 9
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesgo.sum, package-lock.json
has_dockerfilenein
typed_languageja
bootstrap_filesinternal/extension/templates/wasm-go/Makefile
has_devcontainernein
has_linter_configja
typecheck_configsweb/tsconfig.json
agent_commit_share0,75
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
54.3/55Handhabbare Dateigrößen — 8/618 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes191.210
source_files_sampled618
oversized_source_files8

Eckdaten

41GitHub-Sterne
1Mitwirkende
438Commits, letzte 12 Monate
0Tage seit letztem Push
18Releases
1Bus-Faktor
4offene Issues
Go, npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • npm package 'web' points at a different repository (https://github.com/creationix/node-web); excluded from ecosystem scoring
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 2 ⇿
0Sterne
2Forks

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.

111222212026-052026-052026-05
OpenSSF Scorecard 6.5 / 10
6.5Gesamtwert

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-08-03 13:43 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests16 out of 16 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 3 contributing companies or organizations -- score normalized to 10
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
9Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 9
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
8Signed-Releases5 out of the last 5 releases have a total of 5 signed artifacts.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 24
RegistryPaketVersionsvorgabeManifest
Gocharm.land/bubbles/v2v2.1.1go.mod
Gocharm.land/bubbletea/v2v2.0.8go.mod
Gocharm.land/glamour/v2v2.0.1go.mod
Gocharm.land/lipgloss/v2v2.0.5go.mod
Gogithub.com/adrg/xdgv0.5.3go.mod
Gogithub.com/alecthomas/chroma/v2v2.27.0go.mod
Gogithub.com/anthropics/anthropic-sdk-gov1.61.0go.mod
Gogithub.com/charmbracelet/x/ansiv0.11.7go.mod
Gogithub.com/fsnotify/fsnotifyv1.10.1go.mod
Gogithub.com/gabriel-vasile/mimetypev1.4.15go.mod
Gogithub.com/github/copilot-sdk/gov1.0.8go.mod
Gogithub.com/google/go-github/v89v89.0.0go.mod
Gogithub.com/mark3labs/mcp-gov0.57.0go.mod
Gogithub.com/mattn/go-runewidthv0.0.27go.mod
Gogithub.com/pelletier/go-toml/v2v2.4.3go.mod
Gogithub.com/sabhiram/go-gitignorev0.0.0-20210923224102-525f6e181f06go.mod
Gogithub.com/sahilm/fuzzyv0.1.3go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogithub.com/tetratelabs/wazerov1.12.0go.mod
Gogithub.com/yuin/gopher-luav1.1.2go.mod
Gogolang.org/x/sysv0.47.0go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
npmastro^7.1.6web/package.json
Alle Abhängigkeiten nicht erhoben

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

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "git",
        "terminal",
        "cli",
        "copilot",
        "developer-tools",
        "file-explorer",
        "git-client",
        "github",
        "terminal-ui",
        "tui",
        "dprun",
        "dx-idea"
      ],
      "is_fork": false,
      "size_kb": 29359,
      "has_wiki": true,
      "homepage": "https://jongio.github.io/grut/",
      "languages": {
        "Go": 5929192,
        "CSS": 5436,
        "Lua": 159,
        "Astro": 205618,
        "Shell": 17055,
        "Python": 7768,
        "Makefile": 111,
        "JavaScript": 9153,
        "PowerShell": 14958,
        "Go Template": 258
      },
      "pushed_at": "2026-08-03T07:10:11Z",
      "created_at": "2026-03-10T04:26:50Z",
      "owner_type": "User",
      "updated_at": "2026-08-03T07:11:11Z",
      "description": "A terminal file explorer with full Git and GitHub integration, AI chat, and reactive panels that stay in sync as you navigate.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "http://jongallant.com",
      "name": "Jon Gallant",
      "type": "User",
      "login": "jongio",
      "company": "Microsoft",
      "location": "Seattle, WA",
      "followers": 376,
      "avatar_url": "https://avatars.githubusercontent.com/u/2163001?v=4",
      "created_at": "2012-08-16T12:38:10Z",
      "is_verified": null,
      "public_repos": 56,
      "account_age_days": 5100
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-07-25T05:11:02Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-07-24T18:44:27Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-07-21T22:01:07Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-07-07T19:37:19Z"
        },
        {
          "tag": "v0.4.4",
          "kind": "patch",
          "published_at": "2026-06-26T06:39:15Z"
        },
        {
          "tag": "v0.4.3",
          "kind": "patch",
          "published_at": "2026-06-08T03:26:22Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2026-06-03T20:53:36Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-06-02T18:25:57Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-05-27T04:25:27Z"
        },
        {
          "tag": "v0.3.3",
          "kind": "patch",
          "published_at": "2026-05-19T17:20:15Z"
        },
        {
          "tag": "v0.3.2",
          "kind": "patch",
          "published_at": "2026-05-19T12:55:46Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-05-19T03:10:20Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-05-18T13:57:59Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-05-15T22:14:17Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-05-14T16:43:48Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-05-11T13:48:37Z"
        },
        {
          "tag": "v0.0.4",
          "kind": "patch",
          "published_at": "2026-03-23T23:50:09Z"
        },
        {
          "tag": "v0.0.1",
          "kind": "patch",
          "published_at": "2026-03-19T20:37:10Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "4913b085accc7827e3d445c53949f3bee3666f8e",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-08-03T07:10:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d86227c76fc80fcb67bafadce7e8ea39573949c8",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-08-03T05:01:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c6fb0cf9406fa143f5237fd4e1c029999c1d7a7",
          "body": "Closes #387\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(clean): add --check flag to fail when cleanup is pending (#395)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-08-03T04:50:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cd131d0285307003fecf5016b56b477b76f292c2",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-08-02T17:42:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4942478ca07568db74edc497e598b9ad616d5d59",
          "body": "Closes #381\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(doctor): add --check flag for quiet health gate (#394)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-08-02T17:31:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b115391ab3566308145d218d830386e80c72988f",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-08-02T15:56:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcffaf96eaa03ecc9559fd79f393b43e25db70b1",
          "body": "Closes #389\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(theme): add --filter flag to theme list (#393)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-08-02T15:45:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b966f636b8fbf125d1e9c99b2b057086fa67727e",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-08-01T19:21:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb8345f751ea93f67c8bcbd9b0cd856f3c3c636a",
          "body": "Go:\n- github.com/buger/jsonparser: v1.2.0 -> v1.6.1\n- github.com/yuin/goldmark: v1.8.4 -> v1.8.5\n- github.com/charmbracelet/ultraviolet: 20260720091822 -> 20260730003005\n- github.com/charmbracelet/x/exp/golden: 20260720091843 -> 20260730164118\n- github.com/charmbracelet/x/exp/slice: 20260720091843 -\n[…]\nort zero\nvulnerabilities. astro check and astro build pass for the web site.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 322b4a6b-6ff1-4af4-a0e5-ee8f09b78c2c",
          "is_bot": false,
          "headline": "deps: update dependencies to latest (#392)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-08-01T19:10:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "16240036dd0492a89dc07a14e5e3290a67c62a5b",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-31T14:45:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ef070e0ead909646844145966e7f440ae923c03",
          "body": "* Allow report show to use short IDs\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: e02217cd-ffed-496e-b8ea-848a781cda64\n\n* fix: remove unreachable crashlog.Read after short-ID lookup\n\nrunReportShow now resolves reports through List plus findCrashReport, so Re\n[…]\n26e7a44f1ed\n\n---------\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: e02217cd-ffed-496e-b8ea-848a781cda64\nCopilot-Session: 66a101e5-8e3c-41f0-bcf4-e26e7a44f1ed",
          "is_bot": false,
          "headline": "Allow crash reports to be shown by short ID (#376)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-31T14:34:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d2b72b441632059dbf7e687911804d3104c1bb85",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-31T06:01:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fcc295a348b66bbb27f12e6740fc8b2d541c203",
          "body": "* Add JSON output to config check\n\nCloses #378\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 3f892a21-0f5d-41e7-aebb-afbda057615d\n\n* fix(config): print config path when keymap load fails\n\nThe JSON refactor dropped the \"Config: <path>\" line from the text\noutp\n[…]\n72d43653508\n\n---------\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 3f892a21-0f5d-41e7-aebb-afbda057615d\nCopilot-Session: 951180a3-9772-4cf6-8e49-372d43653508",
          "is_bot": false,
          "headline": "Add JSON output to config check (#383)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-31T05:50:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "433a3b04ed02005d0491ef0f667e53d80aacddad",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 340b4dd3-b4b3-4f1a-9163-66b16d96fa81",
          "is_bot": false,
          "headline": "config: add JSON path output (#369)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-31T05:49:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "edf5d4af2422e7317231d8eacf50e02d2626441c",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-27T16:34:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd8725af820d23b6bc5b09b51249a72ef0589432",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: e02217cd-ffed-496e-b8ea-848a781cda64",
          "is_bot": false,
          "headline": "Add JSON output to clean command (#374)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-27T16:22:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e849a63d6f537927250fe38eca65ec946ba15ed7",
          "body": "Closes #379\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 3f892a21-0f5d-41e7-aebb-afbda057615d",
          "is_bot": false,
          "headline": "Show resolved theme details (#384)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-27T16:22:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "340b3a5cd37546d1ce842ea4c46b9771451f494e",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 340b4dd3-b4b3-4f1a-9163-66b16d96fa81",
          "is_bot": false,
          "headline": "mcp: filter tool inventory (#368)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-27T16:22:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "51ebd2d7ce20ff10a7694a8038ae2277a30c123c",
          "body": "Closes #380\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 3f892a21-0f5d-41e7-aebb-afbda057615d",
          "is_bot": false,
          "headline": "Filter keybindings by section (#385)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-27T16:22:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "af02cc2168bb2d43db811b803e7487c73fd8513e",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 340b4dd3-b4b3-4f1a-9163-66b16d96fa81",
          "is_bot": false,
          "headline": "status: add dirty worktree check (#367)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-27T16:22:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "888c157d6397db38a1fbf2b451941ba684e6e335",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: e02217cd-ffed-496e-b8ea-848a781cda64",
          "is_bot": false,
          "headline": "Write completions to output files (#375)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-27T16:19:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0ea863518045b92a68e3891128862b5b38e1c03c",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-27T14:27:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e95d0e5e9dedfab09c344308d174fae76cf106c7",
          "body": "* deps: update dependencies to latest\n\n- actions/checkout: v7.0.0 -> v7.0.1\n- goreleaser: v2.16.0 -> v2.17.0\n- playwright: 1.61.1 -> 1.62.0\n- golang.org/x/exp: 20260709172345 -> 20260718201538\n- charmbracelet/x/exp/golden: 20260705004817 -> 20260720091843\n- @emnapi/core, @emnapi/runtime: 1.11.2 -> 1\n[…]\ngithub.com>\nCopilot-Session: 2127a7a3-47c9-410a-9f75-7eaf08125751\n\n---------\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 2127a7a3-47c9-410a-9f75-7eaf08125751",
          "is_bot": false,
          "headline": "deps: update dependencies to latest (#377)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-27T14:15:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "07d4f6256c59120fd2a62b9c2ffd238fc9aecb83",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-27T07:10:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e810a8b830a7e876e777a296b17cf267a2f88187",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-25T05:00:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c3dc6fe07a2d13fcebfcc5235cf7a16dd2a8b8c",
          "body": "…e crashes (#370)\n\n* fix(gitinfo): pick workflow-dispatch inputs and stop command-goroutine crashes\n\nPrompt for each workflow_dispatch input in turn: choice and boolean\ninputs are picked from their valid values (preselected on the workflow\ndefault), and free-form inputs are pre-filled with the defau\n[…]\ngithub.com>\nCopilot-Session: b9a3d924-7b48-4000-9d4d-fb592f3485b6\n\n---------\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: b9a3d924-7b48-4000-9d4d-fb592f3485b6",
          "is_bot": false,
          "headline": "fix(gitinfo): pick workflow-dispatch inputs and stop command-goroutin…",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-25T04:49:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "87f3fa295472eb51ac9e17b8236d5f32aecca50a",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-24T21:49:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08b2e8140b3a6920540e65da35ca33027829c10e",
          "body": null,
          "is_bot": false,
          "headline": "deps: update all dependencies to latest versions (#363)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-24T21:38:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2210af7f96b77b6cebd1e3c089a08c705b9be674",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-24T18:26:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed211f09f1ee187a9074bc69cf38f8db732231d5",
          "body": "TestShellInvocationForGOOS_WindowsPowerShellVariants forced goos=windows with a backslash path, but shellInvocationForGOOS uses filepath.Base (host-separator dependent), so on Linux/macOS CI the path wasn't reduced to pwsh.exe and the case failed. Production always calls with goos==runtime.GOOS, so \n[…]\noos test. The bare shell-name variants already cover the PowerShell branch.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 51e674dd-2361-4070-b223-21f7d08b972c",
          "is_bot": false,
          "headline": "test(customactions): drop non-portable Windows pwsh path case",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-24T18:14:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "11bec0fba75323463e1369f857cf08aca33d6c4f",
          "body": "th fix: filled the three genuinely low-coverage app packages surfaced by a test-health audit.\n\n- overlayreg: 0% -> 91.7% (factory panel constructors + custom-action copy semantics + all fuzzy-finder modes)\n\n- customactions: 25.9% -> 100% (Run success/failure/exit-code/cancel + shell-invocation branc\n[…]\nions to keep the new tests goconst-clean. All build/vet/lint/gofumpt clean.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 51e674dd-2361-4070-b223-21f7d08b972c",
          "is_bot": false,
          "headline": "test: raise coverage for overlayreg, customactions, and textsearch",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-24T18:00:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "45d843ae5aa5345f9ef8a1e36a34da445c217825",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-24T17:33:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eac8642787333268498d1fd7dbfd672020bdf8c0",
          "body": "CI's TestSetupProjectWithConflictScenario failed on Windows because the conflict setup silently ignored git errors (_ =), so a failing command produced a repo without the expected conflict and a later identity-less merge exited 128. Now buildGitHistory's conflict-critical git commands are error-chec\n[…]\ne merge diagnostic now includes git output to pinpoint any remaining cause.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 51e674dd-2361-4070-b223-21f7d08b972c",
          "is_bot": false,
          "headline": "fix(demo): surface git errors and set identity in demo scenario setup",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-24T17:21:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "18697813a22cc0bee13b31ff6605259f4b197b65",
          "body": "CI 'Check modules tidy' failed because go.sum was missing transitive hashes (e.g. github.com/MakeNowJust/heredoc). Regenerated with go mod tidy.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 51e674dd-2361-4070-b223-21f7d08b972c",
          "is_bot": false,
          "headline": "chore: go mod tidy (add missing go.sum hashes)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-24T17:21:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bc158fb3de1048e9fd78f08607a29a76f108f2e0",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-24T17:02:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df00656dc7e10601406f112cf2e0a9de7c161557",
          "body": "Documentation-accuracy fixes from a doc-check audit against the current code:\n\n- configuration.md: add the [mcp.security] section (the whole block was\n  undocumented), including allowed_write_paths which is now enforced. Note that\n  socket_auth is reserved and not yet enforced (#174).\n- web configur\n[…]\n, `R` request reviewers,\n  not `f`/refresh) and list the shipped PR actions.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 51e674dd-2361-4070-b223-21f7d08b972c",
          "is_bot": false,
          "headline": "docs: document MCP security and fix config/keybinding drift (doc-check)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-24T16:14:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "90df2169c7a05e4e15769ba7da3f26040eecd982",
          "body": "…R checkout, DoS)\n\nSecurity and robustness fixes surfaced by a deep max-quality + red-team pass over\nthe ~50 features shipped in the last week:\n\n- mcp: enforce mcp.security.allowed_write_paths on file_write. The option was\n  validated and stored but never consulted by any write tool, so it was a no-\n[…]\nolangci-lint, gofumpt,\ngovulncheck, and the full `go test ./...` suite pass.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 51e674dd-2361-4070-b223-21f7d08b972c",
          "is_bot": false,
          "headline": "fix: harden last-week features (symlink exfil, MCP write allowlist, P…",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-24T16:14:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "938f9f39d5d5ce956114ccc898278f1136e45271",
          "body": "Section 9 (final) of the swarm backlog, implemented as two sequential commits\nin one integration worktree (zero merge conflicts):\n\n- #288 feat: user-defined custom actions. New [[custom_actions]] config\n  (name, command, cwd, key, prompt, confirm) parsed into a dedicated\n  internal/customactions pac\n[…]\nok), diff-scoped\nemoji scan, and binary smoke (including NO_COLOR) all pass.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "swarm: resolve config/theme issues (#288, #193)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-24T01:26:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b74eba03552d807f47c67376052445c876d8daea",
          "body": "Add theme.color_mode resolution with NO_COLOR-aware mono mode, stable status markers, and a help overlay legend for color-safe state reading.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat: add color-safe mode and status legend (#193)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-24T01:20:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f743386ae2c3b143b338d96ceed116654d8df9e3",
          "body": "Add config-driven shell actions with palette entries, optional keys, confirmation prompts, and async execution through the process-tree runner.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat: add user-defined custom actions (#288)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-24T00:51:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5e18678c95faf55bfbaf06f74cce5e0d560e5d60",
          "body": "Section 8 of the swarm backlog, implemented as three sequential commits in\none integration worktree (zero merge conflicts):\n\n- #243 feat: send current file, diff, or commit to Copilot chat with an\n  explain key. New panels.AIExplainMsg; preview builds a context-aware\n  prompt (file / diff / commit) \n[…]\n suite (all packages ok), diff-scoped\nemoji scan, and binary smoke all pass.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "swarm: resolve 3 TUI navigation/AI/search issues (#243, #205, #208)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-24T00:26:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6f86de5fa20692107abcb979deeab96482b3d8e4",
          "body": "Add a repository text search overlay backed by git grep, with capped results, line-aware file selection, and command palette/keybinding documentation.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat: add repo-wide text search overlay (#208)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-24T00:17:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bcca9563c275c3e50daa870833ec87e27e1f829e",
          "body": "Track TUI selection contexts for files, commits, branches, issues, PRs, and workflows. Add Alt+Left/Alt+Right actions that restore saved selections through the existing panel engine and reset history on directory changes.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat: add back/forward navigation history (#205)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T23:43:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a9b79027df21cd94851d67b5d08af10d3628c0e2",
          "body": "… key (#243)\n\nAdd an explain-this action for preview content and commit selections that builds bounded prompts and opens the AI chat automatically.\nDocument the keybinding and cover file, diff, and commit prompt construction with unit tests.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat: send current file, diff, or commit to Copilot chat with explain…",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T23:14:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "159dcd26b109fc8fa7ffab77216dae36b4796176",
          "body": "Section 7 of the swarm backlog (GitHub II cluster), developed sequentially in\none integration worktree and validated as a unit.\n\n- #245 feat: filter GitHub issues and PRs with / (incremental client-side\n  title/number filter on the Issues and PRs tabs; composes with state filters;\n  empty \"no matche\n[…]\n issues), full test suite,\nmage deadcode, emoji scan, binary smoke all pass.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "swarm: resolve 3 GitHub II issues (#245, #202, #212)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T22:09:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3b033683d3e5ed5c2334f871ed66f5cf514a3a44",
          "body": "Add a preview-panel PR diff comment composer that routes review comment requests through the GitHub panel, posts line-anchored review comments when possible, falls back to PR comments without line data, and refreshes the preview after posting. Closes #212\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat: post PR review comments from the GitHub panel",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T21:34:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "733d05a2872b5609cec1899f7cfc2fe6fbf39c97",
          "body": "Add a read-only release compare action that compares a selected release against the next older release tag, then drives preview, file tree, and commits panels with the resulting range.\n\nCloses #202\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat: compare releases with the previous tag",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T21:03:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1679f916a57f5abfc358a3261fcf97992d2a1793",
          "body": "Enable the existing incremental list filter for GitHub Issues and Pull Requests, and keep it applied when loaded GitHub rows are rebuilt.\\n\\nUpdate keybinding docs and add coverage for GitHub filter matching, cursor clamping, empty states, and filtered selection.\\n\\nCloses #245\\n\\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat: filter GitHub issues and PRs with /",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T20:29:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5e2a2bd53cdc2729f4e7144ad45ab99723d78ced",
          "body": "Section 6 of the swarm backlog: GitHub panel improvements.\n\n#201: retain last-good GitHub tab data when a refresh fails, mark the\nsection stale with a last-updated age, and show one warning toast per\nrefresh burst instead of blanking the panel.\n\n#200: check out a pull request from the PRs tab with `\n[…]\nnterval until the\nrun reaches a terminal state, with a capped 100-line tail.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "swarm: resolve 3 GitHub I issues (#201, #200, #192)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T19:55:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "29312734d6eaba75b3ffdddc06953d1e2440dbf3",
          "body": "Add a documented Actions-tab live log follow toggle plus pause/resume controls.\nFresh log fetches bypass the 30s cache on a 3s loop until the run reaches a terminal state.\nFollow updates replace the preview log tail, auto-scroll to the newest lines, and keep the 100-line truncation cap.\nPreview jump/copy keys (g/G/y) continue to work for followed logs.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat: add live GitHub Actions log follow mode (#192)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T19:42:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "53097fd14f5f6af3b4ab6c5be6a44b5272c45e5c",
          "body": "Pressing c on the PRs tab now opens a current/sibling worktree picker.\nFetch PR heads through origin pull/N/head for same-repo and fork PRs without fork remotes.\nRefuse dirty current-worktree checkouts while allowing sibling worktrees and refreshing panels.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat: check out pull requests from the GitHub panel (#200)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T19:12:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "afd33ce2ddb9ddb7313abcd43f410cdde3507aa7",
          "body": "Retain prior successful GitHub tab rows when page refreshes fail, mark those sections stale, and show a last-updated age in the active tab/header.\nDeduplicate stale refresh warnings to one toast per refresh burst while keeping cached previews display-only.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "fix: retain last-good GitHub data on refresh failure (#201)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T18:29:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f1b67aab16c1a0a5f3147a22dab9c661796c838c",
          "body": "Section 5 of the issue-backlog swarm. Two features on the Git Info panel,\nimplemented sequentially in one integration worktree.\n\n#242 - Filter Git Info lists with /: incremental case-insensitive filter on\nthe git-side list tabs (branches, tags, remotes, stash, worktrees, reflog,\nsubmodules), mirrori\n[…]\nhows in the status\nbar; a deleted or missing base warns instead of breaking.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "swarm: resolve 2 Git Info II issues (#242, #204)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T17:15:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "db83abb37cc7973e32c128b351870a1625be547f",
          "body": "Add a compare-base action to the Git Info branches flow: press `=` on a\nbranch, remote branch, or tag to pin it as the active diff base (press\nagain to clear). The file-tree branch-diff toggle and preview diffs then\ncompare against the pinned base instead of the configured default. The\nactive base i\n[…]\n deleted or missing base is\nhandled with a warning instead of a broken diff.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(gitinfo): pin a compare base for branch diff mode (#204)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T16:20:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3fa03d278d4389b584b143009fe23edc633a5a2d",
          "body": "Add an incremental `/` filter to the Git Info git-side list tabs\n(branches, tags, stash, remotes, worktrees, reflog, submodules),\nmirroring the gitlog search pattern. Live case-insensitive substring\nnarrowing, cursor clamping on the filtered list, Escape to exit and\nrestore, Enter to keep the filter\n[…]\nd (their\nown `f` filter is unchanged; `/` for GitHub is tracked separately).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(gitinfo): add / incremental filter to git list tabs (#242)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T15:55:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3246aaeaf902d6da573cacbd5a36f6560924ce28",
          "body": "Section 4 (Git Info I):\n\n- #287 Submodules overview tab in Git Info (git submodule status parsing,\n  conditional tab, path/commit/state rows, preview details, empty message)\n- #286 In-memory git command log with bounded storage + credential\n  redaction, exposed via a read-only scrollable ctrl+g TUI \n[…]\nll-with-rebase, and push sync actions with\n  confirmations and notifications\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "swarm: resolve 3 Git Info issues (#287, #286, #213)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T14:43:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2cb0eb1d34136a9602c382df5cfd23555d9fde6d",
          "body": "The submodules mock method is test-only, like the other MockClient\nmethods already in the deadcode allowlist.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "chore(mage): allowlist MockClient.Submodules in deadcode (#287)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T02:55:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a4ea144286001cf282a4b36e174da19b1e838ad6",
          "body": "…nc actions (#213)\n\nShow upstream names and ahead/behind state in branch rows, with diverged branches marked distinctly. Add confirm-gated pull, pull --rebase, and push actions for local branches with success/error notifications and reload-backed count refresh. Cover no-upstream, ahead-only, behind-only, diverged, request, modal, and reload behavior with tests.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(gitinfo): show branch upstream/ahead-behind and add pull/push sy…",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T02:44:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9ce1267c848fa5d89519121c00d6cd18a2d9ea8a",
          "body": "Record all git client executions through runWithEnv into a bounded, thread-safe shared command log. Redact credentials and token-like values before storing entries, and expose a read-only scrollable TUI overlay with a global keybinding. Add coverage for recording, redaction, trimming, client integration, overlay rendering, and TUI toggling.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(git): add in-memory command log with TUI overlay (#286)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T02:04:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "df3efd20b6b0e56d86e1c8de417a7e54ee77245d",
          "body": "Add git submodule status parsing, expose submodule operations through the git client interfaces, render a conditional Submodules tab with path/commit/state rows, and show selected submodule details in preview. Cover parser, tab rendering, row state, and preview behavior with tests.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(gitinfo): add submodules overview tab (#287)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-23T00:13:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5ca121169d47634cdfd590fa736f53dfa7b25918",
          "body": "Section 3 (Preview cluster) resolved in one integration worktree:\n\n- #210 feat(preview): show archive manifest without extracting (zip/tar/tar.gz/tgz)\n- #203 feat(preview): add in-panel search with Ctrl+F and n/N navigation\n- #315 feat(preview): wire blame end-to-end and jump a blame line's commit into the Commits panel\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "swarm: resolve 3 preview issues (#210, #203, #315)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T22:56:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a3dba12af013652ea1b75a0444a665218b8a0b1b",
          "body": "…t (#315)\n\nWire ToggleBlameMsg -> async git blame -> BlameLoadedMsg in the tui, then\nadd preview key 'o' to open the current blame line's commit in the Commits\npanel (focus + detail view). Uncommitted lines show a toast.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(preview): wire blame end-to-end and jump blame line to its commi…",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T22:18:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ec83253ff1a954af9cdc3ea0ba340298e29cba3e",
          "body": "Adds preview-local search state, ANSI-aware highlighting, footer counts, and n/N match navigation for rendered file, diff, GitHub, and blame buffers. Updates keybinding metadata/docs and adds targeted preview search tests.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(preview): add in-panel search with Ctrl+F and n/N navigation (#203)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T21:52:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "341275b51ce5df4acf847cfec37740304530a60c",
          "body": "Show read-only manifests for zip, tar, tar.gz, and tgz archives with capped entries, sizes, and modified times. Corrupt archives render a friendly preview error instead of falling through to binary metadata.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(preview): show archive manifest without extracting (#210)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T21:33:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e557055cee19f2ab011fc93910846a802a51a454",
          "body": "File tree cluster (Section 2 of the issue-backlog swarm):\n\n- #209 On-demand directory size scan (key D): async subtree walk, no\n  symlink follow, skips .git, cached until refresh, human-readable\n  right-aligned sizes preserving git-status markers.\n- #214 Move deletes to a per-repo trash with undo (k\n[…]\n.json, and the default/classic/vim schemes;\ndocs/keybindings.md regenerated.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "swarm: resolve 3 file tree issues (#209, #214, #190)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T20:23:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fca0f3e49896be3287fdfd29059e954275c63ce4",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(filetree): add batch rename for selected entries (#190)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T19:49:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2d4f92a9e9c8d3a839dad14284faae14a386a391",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(filetree): move deletes to trash with undo (#214)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T19:28:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9d8e9492707de419184c7292df62327702be6339",
          "body": "Scan selected directories asynchronously and cache human-readable sizes until the tree refreshes. Render cached sizes alongside existing git status markers without following symlinks or descending into .git.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(filetree): add on-demand directory size scan (#209)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T19:13:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "44c26d0a951ec37408ddc10ce33ba3623d46e83c",
          "body": "Closes #290: Validate extension projects before install\nCloses #296: Print resolved config and data paths with a config path command\nCloses #289: Add a doctor command for environment checks\nCloses #291: Add guided scenarios to demo mode\n\nQuality: build, vet, golangci-lint, gofumpt, full test suite (\n[…]\ncluster E - CLI) | Agents: 4 | Conflicts resolved: 1 (docs/configuration.md)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "swarm: resolve 4 CLI issues (#290, #296, #289, #291)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T18:02:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8dc9d9c6d7287fb2d464aa3458a082e8e1fd0203",
          "body": "SetupProject is only referenced by cmd/screenshots/main.go behind the\n//go:build screenshots tag; the wired demo API is SetupProjectWithOptions.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "chore(mage): allowlist demo.SetupProject deadcode false positive",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T17:48:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e46f9fe28562b35075f1c7c6362ffd73e4925389",
          "body": null,
          "is_bot": false,
          "headline": "Merge #291: guided demo scenarios",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T17:37:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6af5e58965b79b7358a3dce953284ff997e19111",
          "body": "Adds branch-review, conflict-resolution, and extensions scenarios behind the existing --demo flow. Scenario guidance is written into .grut/demo-scenario.md and opened in preview so the walkthrough is visible inside the TUI without adding a new overlay surface.\n\nThe conflict scenario resets tracked c\n[…]\nkeeps the generated repository and prints its path for local repro sharing.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(demo): add guided scenarios to demo mode (#291)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T17:36:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "17f3fca054d366e1f0b82c5e1ebf9d4083ad22e5",
          "body": "# Conflicts:\n#\tdocs/configuration.md",
          "is_bot": false,
          "headline": "Merge #289: doctor command",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T17:27:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7258853fcf0fe2a1e6009e50beb8c97029f0947",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(cmd): add doctor command for environment health checks (#289)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T17:25:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "80cbd9045effff1874b5bf7473f0697169071599",
          "body": null,
          "is_bot": false,
          "headline": "Merge #290: ext validate command",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T17:24:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd0eb5a085095f4a99ee50b4fa022fefe19af7e9",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(ext): add ext validate command (#290)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T17:23:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1273174c3faa8d83e818a9ac277ea90c8a32afc6",
          "body": null,
          "is_bot": false,
          "headline": "Merge #296: config path command",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T17:21:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88614ffe6aaed736f1ec1a192db5e9bf0b2bbd16",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: 48b0e4d0-26ca-4355-9957-777a9d00d8b3",
          "is_bot": false,
          "headline": "feat(config): add config path command (#296)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T17:20:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6a994555950edb2f7b5c14fb1a7568c508439667",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-22T16:57:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9fbbaa87dfc6fee0e7d7323ddbba04d5f2aa1b8f",
          "body": "* fix(tui): capture panics and harden GitHub workflow dispatch\n\nDispatching a GitHub Actions workflow crashed the whole TUI with a\ngeneric \"program was killed: program experienced a panic\" and left no\ncrash report, because Bubble Tea catches panics in the model's\nUpdate/View, swallows the value, and\n[…]\nauthored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 2fe7a260-26ac-4066-8f4f-369ab6a38550\n\n---------\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(tui): capture panics and harden GitHub workflow dispatch (#362)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-22T16:46:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5724f372a05d90a4f2437e5450293fa60e9f711f",
          "body": "The website CLI reference only covered version, update, mcp, run, and ext. Add the status, config, theme, keys, clean, completion, and report commands with accurate flags and subcommands, matching the recent releases.\n\nAlso correct the mcp section: the --socket flag returns 'not yet implemented', so\n[…]\nGRUT_NERD_FONT, GRUT_FORCE_TERMINAL). Verified with astro build (42 pages).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: e1e7a2e9-8a0a-42dc-be96-9ac694fc55c5",
          "is_bot": false,
          "headline": "docs(web): document new CLI commands and fix stale MCP socket reference",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T23:01:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9d299cccfeb9de64d92f3745a5ebf13667f8b7d2",
          "body": "README: add a Commands table covering status, config, theme, keys, clean, completion, run, ext, report, and mcp (all shipped recently but undocumented), and correct the Tech Stack Go version from 1.26.3 to 1.26.5 to match go.mod.\n\nconfiguration.md: add an Environment Variables section documenting GR\n[…]\n_FORCE_TERMINAL, which the code reads but were not in the config reference.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: e1e7a2e9-8a0a-42dc-be96-9ac694fc55c5",
          "is_bot": false,
          "headline": "docs: document new CLI subcommands and env vars, fix stale Go version",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T22:41:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dd1e564ebd16ae3105c34962a87dd4a8f8750001",
          "body": null,
          "is_bot": true,
          "headline": "perf: add v0.6.0 linux-amd64 baseline and release notes [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-21T21:57:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38aeadb9ae667bb60e7b31bb8a3f06f98899178d",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-21T20:59:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e02e73933faa56276bb1aab719809826afa7942e",
          "body": "…L lookup\n\nThe commits panel spawned a raw 'git remote get-url origin' subprocess, and TestOpenCommitOnGitHubNoGitHubRemote relied on that subprocess failing in a temp dir to simulate 'no remote'. Under heavy parallel load (e.g. mage install) the subprocess result was non-deterministic, intermittent\n[…]\nessage, and add a non-github-remote case. Verified 200x under -parallel 32.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: e1e7a2e9-8a0a-42dc-be96-9ac694fc55c5",
          "is_bot": false,
          "headline": "test(commits): de-flake openCommitOnGitHub by injecting the origin-UR…",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T20:46:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e7b07edbeaee70ce29ba99018ba0a58ba3819bfc",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-21T20:39:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6400577a3483bfea9aad85064412d036ae6af0c6",
          "body": "…ad pendingRevertSubject field\n\nMax-quality follow-up on the idea-PR backlog merges (PR-triage delta):\n\n- Add TestCopyLocalLocation_NoOpWhenNoFile/NoOpInGitHubMode to match the guard-test coverage its sibling preview actions (copyPermalink, openOnGitHub) already have.\n\n- Remove the write-only pendin\n[…]\ndingAndConfirms to assert the subject appears in the confirm modal message.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: e1e7a2e9-8a0a-42dc-be96-9ac694fc55c5",
          "is_bot": false,
          "headline": "test(preview): add copyLocalLocation guard tests; chore(tui): drop de…",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T20:27:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6272c4dc4d29fa7bc8f794b7dd5f76cb0fd85228",
          "body": null,
          "is_bot": true,
          "headline": "perf: update baselines [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-21T19:11:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc1e9a8133d18c2176bb0841ae672a9082a184f3",
          "body": "Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: copy local file location (#293)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T18:58:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5732280a1bf2e86c65577f4993d9ba00b367ca2f",
          "body": "Add an O keybinding to the preview panel that opens the current file on\ngithub.com, pinned to the current HEAD commit and anchored to the selected\nline range (or the top visible line). It reuses the existing permalink\nbuilder and the browser launcher, and shows a clear toast when the preview\nis not \n[…]\ndings manifest, the generated\ndocs, and the help overlay. Adds unit tests for the no-file and github-mode\nguards.\n\nCloses #324\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(preview): open the previewed file on GitHub (#329)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T18:51:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c543d31753e36ad4d01044c469fd72d104015521",
          "body": "grut only accepted a directory as its positional argument, so jumping to a\nspecific file meant opening grut and then navigating the tree by hand. Now\nthe argument can also name a file, optionally with a \":line\" suffix.\n\nPassing a file roots grut at that file's directory, selects it in the File\nTree,\n[…]\nilesystem. The last colon is used as the line\nseparator so Windows drive letters such as C:\\path are not misread.\n\nCloses #317\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(cli): open a file at path and line from the command line (#321)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T18:47:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "79ffb37cfc18dd3d8c92e6dd8e30e7b89a53b694",
          "body": "Press v on a commit in the Commits panel to revert it. grut shows a\nconfirm prompt with the commit subject, then runs git revert on the\nselected hash and reloads the commits, branches, and status views.\n\nThe revert is recorded as an undoable action: undo resets HEAD back to\nwhere it was before the r\n[…]\nHeadSHA runs first; if it fails, the revert\ndoes not run.\n\nCloses #340\n\n\nCopilot-Session: 07f6eb49-d72f-4f2a-9285-065b5d835f5b\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(commits): revert the selected commit from the Commits panel (#350)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T18:40:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2f28092c306d5e00cb4922e7b97a63800d84f6bb",
          "body": "Press T to open a fuzzy finder over TODO, FIXME, HACK, BUG, and XXX\nmarkers across the working tree. Each entry shows file:line plus the\nmarker text; selecting one opens the file in the preview and jumps to\nthe line. The scanner walks the tree with the same hidden-dir and\n.gitignore filtering the fi\n[…]\n bound to todo_finder in the default, classic, and vim schemes\n- keybindings.json and docs/keybindings.md updated\n\nCloses #327\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(fuzzyfinder): add TODO/FIXME finder source (#333)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T18:38:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2b37e7e97811569e1d563c28da05d99cda86cf1d",
          "body": "* feat(help): filter shortcuts in help overlay\n\nCloses #346\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>\n\n* fix(help): extract escape key constant and align close-hint test with filter footer\n\nFixes the goconst failure and the stale TestView_ContainsCloseHint assertion t\n[…]\nred-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: e1e7a2e9-8a0a-42dc-be96-9ac694fc55c5\n\n---------\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Filter the help overlay by key or action (#351)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T18:35:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6c1a05a5ffa2545c4dfbf28d3a86517194aa4a16",
          "body": "Add an M keybinding in the file tree that opens the OS file manager with\nthe item under the cursor highlighted inside its parent directory. Works\nfor both files and directories.\n\nPlatform launchers live in internal/panels/open.go:\n- Windows: explorer /select,<path>\n- macOS: open -R <path>\n- Linux: f\n[…]\nhs pass through ValidateEditorPath, so shell metacharacters and null\nbytes are rejected before any launcher runs.\n\nCloses #313\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(filetree): reveal selected file in OS file manager (#318)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T18:27:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dd95c5cdc2f2dabc223eb3473e403f1dfeac90b7",
          "body": "Add an `o` keybinding to the commits panel that opens the selected\ncommit's github.com page in the default browser. The commits panel\ncould copy a commit hash but had no way to jump straight to the commit\non GitHub, so reviewers had to build the URL by hand.\n\nThe handler resolves the origin remote, \n[…]\nkeybindings\nmanifest already documented `o` for this panel; this wires it up and\nregenerates docs/keybindings.md.\n\nCloses #328\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(commits): open the selected commit on GitHub (#330)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T18:23:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "28e66554292ead76aebb5ad1285f82fe93420eae",
          "body": "Add a `B` keybinding to the file tree that opens the entry under the\ncursor on github.com in the default browser, pinned to the current HEAD\ncommit. Files open at their blob URL and directories at their tree URL.\nThe tree could open files locally (editor, default app) but had no way\nto jump to the s\n[…]\nfault app) were already taken,\nso this uses `B` for browse. keybindings.json and docs/keybindings.md\nare updated.\n\nCloses #325\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(filetree): open the selected file or directory on GitHub (#331)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T18:22:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f309b0975784cad6e71c7fd0e426660dc534adeb",
          "body": "Add Ctrl+G in the preview panel to create a secret GitHub gist from the\nfile currently on screen and copy the gist URL to the clipboard. This is\na fast way to share a single file without leaving the TUI.\n\nThe handler is a no-op for GitHub content or an empty view, matching the\nexisting permalink guard. A new github.CreateGist helper shells out to\ngh gist create --secret via the shared ghExec path.\n\nCloses #326\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(preview): create a secret gist from the previewed file (#332)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T18:21:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fd5f17be99148b20ae28851b0c3e7e87fafaf6bb",
          "body": "Reading a long markdown file in the preview panel meant scrolling by hand\nto reach a section. Press \"t\" on a markdown file to open a heading list,\nmove the selection with j/k (or the arrows, g/G, home/end), and press\nEnter to scroll straight to that heading. Esc closes the list without\nmoving the vi\n[…]\natching the ansi-stripped heading text in document order. With\nrendering off the raw line index is used directly.\n\nCloses #316\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(preview): jump to a markdown heading in the preview (#320)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T18:19:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d354ebd4010813daaa61a100bf850beb28b9425a",
          "body": "Closes #349\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(github): show issue metadata in preview (#353)",
          "author_name": "Jon Gallant",
          "author_login": "jongio",
          "committed_at": "2026-07-21T18:17:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 18,
      "commits_last_year": 438,
      "latest_release_at": "2026-07-25T05:11:02Z",
      "latest_release_tag": "v0.7.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 18,
      "days_since_latest_release": 9,
      "mean_days_between_releases": 7.4
    },
    "artifacts": {
      "collected": true,
      "structure": [
        "tree.go_main",
        "tree.goreleaser"
      ],
      "declarations": []
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "readme_badges": {
        "hosts": [
          "github.com",
          "goreportcard.com",
          "pkg.go.dev",
          "shields.io"
        ],
        "total": 6,
        "header": 6,
        "collected": true,
        "has_inspect_badge": false
      },
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/jongio/grut",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "categories": [],
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/jongio/grut",
          "declared_type": null,
          "is_deprecated": false,
          "latest_version": "v0.7.1",
          "repository_url": "https://github.com/jongio/grut",
          "versions_count": 23,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-25T05:00:58Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        },
        {
          "name": "web",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "categories": [],
          "matches_repo": false,
          "registry_url": "https://www.npmjs.com/package/web",
          "declared_type": null,
          "is_deprecated": false,
          "latest_version": "0.0.2",
          "repository_url": "https://github.com/creationix/node-web",
          "versions_count": 3,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 54428,
          "first_published_at": "2012-09-13T05:12:45.210000Z",
          "latest_published_at": "2013-01-31T19:50:36.663000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4931
        }
      ]
    },
    "popularity": {
      "forks": 2,
      "stars": 41,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-05-06",
            "count": 1
          },
          {
            "date": "2026-05-07",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 2,
        "total_forks": 2
      },
      "star_history": null,
      "open_issues_and_prs": 9
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "internal/extension/templates/wasm-go/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "web/tsconfig.json"
      ],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 191210,
      "source_files_sampled": 618,
      "oversized_source_files": 8,
      "agent_instruction_files": [
        ".github/copilot-instructions.md",
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 3607
    },
    "dependencies": {
      "manifests": [
        "go.mod",
        "web/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": "charm.land/bubbles/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.1.1"
        },
        {
          "name": "charm.land/bubbletea/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.8"
        },
        {
          "name": "charm.land/glamour/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.1"
        },
        {
          "name": "charm.land/lipgloss/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.5"
        },
        {
          "name": "github.com/adrg/xdg",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.5.3"
        },
        {
          "name": "github.com/alecthomas/chroma/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.27.0"
        },
        {
          "name": "github.com/anthropics/anthropic-sdk-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.61.0"
        },
        {
          "name": "github.com/charmbracelet/x/ansi",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.11.7"
        },
        {
          "name": "github.com/fsnotify/fsnotify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.1"
        },
        {
          "name": "github.com/gabriel-vasile/mimetype",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.15"
        },
        {
          "name": "github.com/github/copilot-sdk/go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.8"
        },
        {
          "name": "github.com/google/go-github/v89",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v89.0.0"
        },
        {
          "name": "github.com/mark3labs/mcp-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.57.0"
        },
        {
          "name": "github.com/mattn/go-runewidth",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.27"
        },
        {
          "name": "github.com/pelletier/go-toml/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.4.3"
        },
        {
          "name": "github.com/sabhiram/go-gitignore",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20210923224102-525f6e181f06"
        },
        {
          "name": "github.com/sahilm/fuzzy",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.3"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "github.com/tetratelabs/wazero",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.12.0"
        },
        {
          "name": "github.com/yuin/gopher-lua",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.2"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.47.0"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "astro",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.1.6"
        }
      ],
      "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": 5,
        "merged_prs": 150,
        "open_issues": 4,
        "closed_ratio": 0.983,
        "closed_issues": 228,
        "closed_unmerged_prs": 11
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "jongio",
          "commits": 241,
          "avatar_url": "https://avatars.githubusercontent.com/u/2163001?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "bench.yml",
        "ci.yml",
        "deploy-web.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": true,
      "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": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "16 out of 16 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 3 contributing companies or organizations -- score normalized to 10",
            "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 30 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": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 9,
            "reason": "dependency not pinned by hash detected -- score normalized to 9",
            "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": 8,
            "reason": "5 out of the last 5 releases have a total of 5 signed artifacts.",
            "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": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "4913b085accc7827e3d445c53949f3bee3666f8e",
        "ran_at": "2026-08-03T13:43:45Z",
        "aggregate_score": 6.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "recent_prs": {
        "merged_7d": 14,
        "decided_7d": 14,
        "merged_30d": 58,
        "authors_30d": 1,
        "decided_30d": 58,
        "sample_size": 60,
        "window_days": 30,
        "sample_exhausted": true,
        "authors_probed_30d": 1,
        "newcomer_merged_30d": 0,
        "bot_prs_excluded_30d": 2,
        "newcomer_authors_30d": 0,
        "newcomer_decided_30d": 0
      },
      "ci_last_run_at": null,
      "oldest_open_prs": [
        {
          "number": 396,
          "created_at": "2026-08-02T14:27:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 397,
          "created_at": "2026-08-02T14:28:13Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 398,
          "created_at": "2026-08-02T14:28:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 399,
          "created_at": "2026-08-02T14:28:58Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 400,
          "created_at": "2026-08-02T20:07:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-08-03T04:50:02Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 382,
          "created_at": "2026-07-26T17:49:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 388,
          "created_at": "2026-07-27T17:14:13Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 390,
          "created_at": "2026-07-27T17:14:15Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 391,
          "created_at": "2026-07-27T17:14:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/jongio/grut",
    "host": "github.com",
    "name": "grut",
    "owner": "jongio"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "excellent",
      "name": "Overall health",
      "note": "The weighted overall 74 is calibrated to 88 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 74,
            "calibrated": 88,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 88,
      "inputs": {
        "security": 65,
        "vitality": 85,
        "community": 57,
        "governance": 63,
        "calibration": "2026-08-02",
        "engineering": 94,
        "ai_readiness": 93,
        "weighted_overall_raw": 74
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 85,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "commits_last_year": 438,
              "human_commit_share": 0.8,
              "days_since_last_push": 0,
              "active_weeks_last_year": 18
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "18/52 weeks with commits",
                "points": 12.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 18
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "438 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 438
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "exceptional",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "releases_count": 18,
              "latest_release_tag": "v0.7.1",
              "releases_from_tags": false,
              "days_since_latest_release": 9,
              "mean_days_between_releases": 7.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "18 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 9 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~7.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 7.4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "5 out of the last 5 releases have a total of 5 signed artifacts.",
                "points": 8,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "exceptional",
            "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": 57,
        "weight": 0.17,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 26,
            "inputs": {
              "forks": 2,
              "stars": 41,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "41 stars",
                "points": 26,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 41
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "2 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "readme_badges": 6,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "readme_badge_services": [
                "github.com",
                "goreportcard.com",
                "pkg.go.dev",
                "shields.io"
              ],
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 63,
        "weight": 0.23,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "newcomer_pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 80,
            "inputs": {
              "merged_prs": 150,
              "open_issues": 4,
              "closed_issues": 228,
              "prs_merged_7d": 14,
              "prs_decided_7d": 14,
              "prs_merged_30d": 58,
              "prs_decided_30d": 58,
              "issue_closed_ratio": 0.983,
              "closed_unmerged_prs": 11,
              "first_time_authors_30d": 0,
              "first_time_prs_merged_30d": 0,
              "first_time_prs_decided_30d": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "98% of issues closed",
                "points": 41.3,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 98
                    }
                  }
                ],
                "max_points": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "150/161 decided PRs merged",
                "points": 28,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 150,
                      "decided": 161
                    }
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "no first-time contributor's PR decided in 30d",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_newcomer_prs",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "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": 67,
            "inputs": {
              "followers": 376,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "jongio",
              "public_repos": 56,
              "account_age_days": 5100
            },
            "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": "376 followers of jongio",
                "points": 18.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 376,
                      "login": "jongio"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "56 public repos, account ~13 yr old",
                "points": 24.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 56
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 13
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "exceptional",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/jongio/grut"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 9
            },
            "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 9 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "23 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 23
                    }
                  }
                ],
                "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": "exceptional",
        "name": "Engineering Quality",
        "value": 94,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "4 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "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": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "16 out of 16 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "exceptional",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "git",
                "terminal",
                "cli",
                "copilot",
                "developer-tools",
                "file-explorer",
                "git-client",
                "github",
                "terminal-ui",
                "tui",
                "dprun",
                "dx-idea"
              ],
              "has_wiki": true,
              "homepage": "https://jongio.github.io/grut/",
              "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://jongio.github.io/grut/",
                "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": "12 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 65,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "good",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 6.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "16 out of 16 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "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 30 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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 9",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "5 out of the last 5 releases have a total of 5 signed artifacts.",
                "points": 6,
                "status": "partial",
                "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": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "exceptional",
            "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"
              ],
              "commit_weight_rule": {
                "min_commits": 50,
                "min_commit_share": 0.1
              },
              "review_only_matches": 0,
              "below_threshold_exposures": [],
              "assessed_self_published_locations": 4
            },
            "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": "exceptional",
        "name": "AI Readiness",
        "value": 93,
        "weight": 0.04,
        "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": [
                ".github/copilot-instructions.md",
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 3607
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".github/copilot-instructions.md, AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".github/copilot-instructions.md, AGENTS.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": "80 of 80 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 80,
                      "sampled": 80
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "exceptional",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 96,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum",
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "internal/extension/templates/wasm-go/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "web/tsconfig.json"
              ],
              "agent_commit_share": 0.75,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "internal/extension/templates/wasm-go/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "internal/extension/templates/wasm-go/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "web/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "web/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "75 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 75,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 9",
                "points": 9,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "exceptional",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 191210,
              "source_files_sampled": 618,
              "oversized_source_files": 8
            },
            "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": "8/618 source files over 60KB",
                "points": 54.3,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 618,
                      "oversized": 8
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
      }
    ],
    "classification": {
      "labels": [
        "cli",
        "library",
        "tui"
      ],
      "scores": {
        "cli": 13,
        "tui": 4,
        "library": 6
      },
      "primary": "cli",
      "evidence": [
        {
          "tier": "distribution",
          "label": "library",
          "source": "registry:go",
          "weight": 6
        },
        {
          "tier": "dependencies",
          "label": "cli",
          "source": "dep:github.com/spf13/cobra",
          "weight": 4
        },
        {
          "tier": "structure",
          "label": "cli",
          "source": "tree.goreleaser",
          "weight": 4
        },
        {
          "tier": "structure",
          "label": "cli",
          "source": "tree.go_main",
          "weight": 3
        },
        {
          "tier": "tags",
          "label": "cli",
          "source": "tag:cli",
          "weight": 2
        },
        {
          "tier": "tags",
          "label": "tui",
          "source": "tag:terminal-ui",
          "weight": 2
        },
        {
          "tier": "tags",
          "label": "tui",
          "source": "tag:tui",
          "weight": 2
        }
      ],
      "artifacts": [],
      "confidence": "medium",
      "host_extension": false,
      "runs_as_process": true,
      "consumed_by_code": true
    },
    "metrics_version": "2.3.1"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "npm package 'web' points at a different repository (https://github.com/creationix/node-web); excluded from ecosystem scoring",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-08-03T13:44:00.953549Z",
  "schema_version": "0.30.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/j/jongio/grut.svg",
  "full_name": "jongio/grut",
  "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 v2.3.1, Schema v0.30.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenGo, npm.