Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-26 02:31 UTC

qjcg / arcadia

Personal Monorepo

GoGPL-3.0★ 1 Stern⑂ 1 Forkseit Aug. 2025Auf GitHub ansehen ↗

qjcg/arcadia erreicht einen Gesundheitsindex von 56 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (90/100) ab, am schwächsten bei Community & Adoption (24/100). Zuletzt vor 6 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

56
gesamt / 100
Mittel

Software-Gesundheitsindex

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

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

Bewertungsprofil

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

Eigentümerschaft

John GossetPersönliches Konto
158 Follower65 öffentliche Reposseit Okt. 2011

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/qjcg/arcadiav0.46.0-85vor 6 Tagen

Metriken nach Kategorie

Vitalität

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

90Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 6 Tagen
19.4/36Commit-Rhythmus — 28/52 Wochen mit Commits
18/18Commit-Volumen — 660 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year660
human_commit_share1
days_since_last_push6
active_weeks_last_year28

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 80 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 26 Tagen
27/27Release-Rhythmus — ein Release etwa alle 0 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count80
latest_release_tagexp/skillo/v0.3.0
releases_from_tagsnein
days_since_latest_release26
mean_days_between_releases0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

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

24Kritisch · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 1 Stars
0/25Forks — 1 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks1
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (GPL-3.0)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein

Nachhaltigkeit & Governance

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

60Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
46.8/46.8Issue-Lösungsquote — 100 % der Issues geschlossen
0/38.3PR-Annahme — keine entschiedenen Pull Requests oder keine Daten
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs0
open_issues0
closed_issues1
issue_closed_ratio1
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): PR-Annahme. 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
15.8/25Reichweite des Inhabers — 158 Follower von qjcg
25/25Kontohistorie — 65 öffentliche Repos, Kontoalter ca. 14 Jahre
Verwendete Eingangsdaten
followers158
owner_typeUser
is_verified
owner_loginqjcg
public_repos65
account_age_days5.395
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

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

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

61Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 1 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
6.4/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfigja
has_linter_confignein
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 1 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsmonorepo
has_wikinein
homepage
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

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

31Gefährdet · 16 % des Gesamtindex

Sicherheitslage

31Gefährdet
Wie die Bewertung erfolgt
6.8/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — keine Daten
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
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 20 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate3,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

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

71Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 100 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes3.762
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Taskfile.yml, cmd/horeb/Makefile, cmd/horeb/Taskfile.yml, cmd/sv/Taskfile.yaml, examples/cue/01-validate-json/Taskfile.yml, examples/cue/02-validate-yaml/Taskfile.yml, examples/cue/03-import-yaml/Taskfile.yml, examples/cue/04-generate-cue-from-cue/Taskfile.yml, examples/cue/05-generate-cue-from-go/Taskfile.yml, examples/cue/10-config-k8s-helm/Taskfile.yml, examples/cue/Taskfile.yml, examples/go/Taskfile.yml, examples/go/cmd/db-migrate/Taskfile.yaml, examples/go/cmd/db-sqlc/Taskfile.yml, examples/go/cmd/http-chi-router/Taskfile.yml, examples/go/cmd/http-tls/Taskfile.yml, examples/go/cmd/http-webapp-sqlite/Taskfile.yml, examples/go/cmd/nats-consumer/Taskfile.yml, examples/go/cmd/omega-onion2plus/Taskfile.yml, examples/go/thirdparty/huh/Taskfile.yml, examples/go/thirdparty/lipgloss/Taskfile.yml, examples/go/thirdparty/playwright/Taskfile.yml, examples/go/thirdparty/rod/Taskfile.yml, examples/go/thirdparty/task/testdata/Taskfile.yml, examples/go/thirdparty/testscript/Taskfile.yml, examples/scroll/Taskfile.yml, examples/scroll/stamp/Taskfile.yml, exp/diplomat/Taskfile.yaml, exp/elbereth/Taskfile.yml, exp/fin/Taskfile.yaml, exp/fractalis/Taskfile.yml, exp/jmacs/Taskfile.yml, exp/mnemosyne/Taskfile.yml, exp/pavona/Taskfile.yaml, exp/roubaix/Taskfile.yaml, exp/skillo/Taskfile.yml, exp/slidesdeck/Taskfile.yml, exp/terebra/Taskfile.yaml, exp/testdrive-omarchy/Taskfile.yml, infra/Taskfile.yml, skills/go-gherkin-testing/references/godog-examples/db/Makefile, talks/no-code-low-code-go-code/Taskfile.yml, templates/typst/Taskfile.yml
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — examples/bun/tsconfig.json, examples/scroll/tsconfig.json
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesbun.lockb, go.sum
has_dockerfileja
typed_languageja
bootstrap_filesTaskfile.yml, cmd/horeb/Makefile, cmd/horeb/Taskfile.yml, cmd/sv/Taskfile.yaml, examples/cue/01-validate-json/Taskfile.yml, examples/cue/02-validate-yaml/Taskfile.yml, examples/cue/03-import-yaml/Taskfile.yml, examples/cue/04-generate-cue-from-cue/Taskfile.yml, examples/cue/05-generate-cue-from-go/Taskfile.yml, examples/cue/10-config-k8s-helm/Taskfile.yml, examples/cue/Taskfile.yml, examples/go/Taskfile.yml, examples/go/cmd/db-migrate/Taskfile.yaml, examples/go/cmd/db-sqlc/Taskfile.yml, examples/go/cmd/http-chi-router/Taskfile.yml, examples/go/cmd/http-tls/Taskfile.yml, examples/go/cmd/http-webapp-sqlite/Taskfile.yml, examples/go/cmd/nats-consumer/Taskfile.yml, examples/go/cmd/omega-onion2plus/Taskfile.yml, examples/go/thirdparty/huh/Taskfile.yml, examples/go/thirdparty/lipgloss/Taskfile.yml, examples/go/thirdparty/playwright/Taskfile.yml, examples/go/thirdparty/rod/Taskfile.yml, examples/go/thirdparty/task/testdata/Taskfile.yml, examples/go/thirdparty/testscript/Taskfile.yml, examples/scroll/Taskfile.yml, examples/scroll/stamp/Taskfile.yml, exp/diplomat/Taskfile.yaml, exp/elbereth/Taskfile.yml, exp/fin/Taskfile.yaml, exp/fractalis/Taskfile.yml, exp/jmacs/Taskfile.yml, exp/mnemosyne/Taskfile.yml, exp/pavona/Taskfile.yaml, exp/roubaix/Taskfile.yaml, exp/skillo/Taskfile.yml, exp/slidesdeck/Taskfile.yml, exp/terebra/Taskfile.yaml, exp/testdrive-omarchy/Taskfile.yml, infra/Taskfile.yml, skills/go-gherkin-testing/references/godog-examples/db/Makefile, talks/no-code-low-code-go-code/Taskfile.yml, templates/typst/Taskfile.yml
has_devcontainernein
has_linter_confignein
typecheck_configsexamples/bun/tsconfig.json, examples/scroll/tsconfig.json
agent_commit_share0
toolchain_manifests.skillo/go.mod, cmd/horeb/go.mod, cmd/sv/go.mod, examples/go/go.mod, exp/diplomat/go.mod, exp/elbereth/go.mod, exp/fin/go.mod, exp/fractalis/go.mod, exp/jmacs/go.mod, exp/mnemosyne/go.mod, exp/pangrams/go.mod, exp/pavona/go.mod, exp/roubaix/go.mod, exp/skillo/go.mod, exp/slidesdeck/go.mod, exp/terebra/go.mod, go.mod, skills/go-gherkin-testing/references/godog-examples/db/go.mod, skills/go-gherkin-testing/references/godog-examples/go.mod, skills/go-gherkin-testing/references/godog-examples/godogs/go.mod, skills/go-gherkin-testing/references/godog-examples/incorrect-project-structure/go.mod
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
54.2/55Handhabbare Dateigrößen — 5/332 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes587.043
source_files_sampled332
oversized_source_files5
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

1GitHub-Sterne
1Mitwirkende
660Commits, letzte 12 Monate
6Tage seit letztem Push
80Releases
1Bus-Faktor
0offene Issues
GoPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch go package 'skillo.local/skills' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

OpenSSF Scorecard 3.1 / 10
3.1Gesamtwert

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

9Binary-Artifactsbinaries present in source code
0Branch-Protectionbranch protection not enabled on development/release branches
k. A.CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities20 existing vulnerabilities detected
Direkte Abhängigkeiten 6
RegistryPaketVersionsvorgabeManifest
Gogithub.com/distatus/batteryv0.11.0go.mod
Gogithub.com/fatih/colorv1.19.0go.mod
Gogithub.com/gosuri/uiprogressv0.0.1go.mod
Gogithub.com/mdlayher/wifiv0.8.0go.mod
Gogithub.com/mgutz/ansiv0.0.0-20200706080929-d51e80ef957dgo.mod
Gogithub.com/sirupsen/logrusv1.9.4go.mod
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": [
        "monorepo"
      ],
      "is_fork": false,
      "size_kb": 154664,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 1008242,
        "CSS": 53961,
        "CUE": 36753,
        "HTML": 58630,
        "Shell": 1973,
        "Typst": 20681,
        "templ": 27908,
        "Earthly": 647,
        "Gherkin": 9922,
        "Makefile": 1885,
        "Dockerfile": 143,
        "Emacs Lisp": 172,
        "JavaScript": 53894,
        "Go Template": 60642
      },
      "pushed_at": "2026-07-19T12:32:01Z",
      "created_at": "2025-08-05T02:42:48Z",
      "owner_type": "User",
      "updated_at": "2026-07-19T12:31:36Z",
      "description": "Personal Monorepo",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "GPL-3.0",
      "default_branch": "main",
      "license_spdx_raw": "GPL-3.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "John Gosset",
      "type": "User",
      "login": "qjcg",
      "company": null,
      "location": null,
      "followers": 158,
      "avatar_url": "https://avatars.githubusercontent.com/u/1133291?v=4",
      "created_at": "2011-10-17T13:53:46Z",
      "is_verified": null,
      "public_repos": 65,
      "account_age_days": 5395
    },
    "license": {
      "state": "standard",
      "spdx_id": "GPL-3.0",
      "raw_spdx": "GPL-3.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "exp/skillo/v0.3.0",
          "kind": "other",
          "published_at": "2026-06-29T11:21:22Z"
        },
        {
          "tag": "skills/go-gherkin-testing/references/godog-examples/incorrect-project-structure/v0.1.0",
          "kind": "other",
          "published_at": "2026-06-29T04:07:47Z"
        },
        {
          "tag": "skills/go-gherkin-testing/references/godog-examples/godogs/v0.1.0",
          "kind": "other",
          "published_at": "2026-06-29T04:07:46Z"
        },
        {
          "tag": "skills/go-gherkin-testing/references/godog-examples/v0.1.0",
          "kind": "other",
          "published_at": "2026-06-29T04:07:45Z"
        },
        {
          "tag": "skills/go-gherkin-testing/references/godog-examples/db/v0.1.0",
          "kind": "other",
          "published_at": "2026-06-29T04:07:44Z"
        },
        {
          "tag": "v0.42.0",
          "kind": "minor",
          "published_at": "2026-06-29T04:07:43Z"
        },
        {
          "tag": "exp/skillo/v0.2.0",
          "kind": "other",
          "published_at": "2026-06-29T04:07:42Z"
        },
        {
          "tag": "v0.41.0",
          "kind": "minor",
          "published_at": "2026-06-29T03:49:31Z"
        },
        {
          "tag": "cmd/sv/v1.0.1",
          "kind": "other",
          "published_at": "2026-06-29T03:44:24Z"
        },
        {
          "tag": "cmd/sv/v0.1.1",
          "kind": "other",
          "published_at": "2026-06-29T02:52:40Z"
        },
        {
          "tag": "cmd/sv/v0.1.0",
          "kind": "other",
          "published_at": "2026-06-29T02:48:52Z"
        },
        {
          "tag": "v0.40.0",
          "kind": "minor",
          "published_at": "2026-06-27T05:12:04Z"
        },
        {
          "tag": "exp/pavona/v0.2.0",
          "kind": "other",
          "published_at": "2026-06-27T05:12:04Z"
        },
        {
          "tag": "v0.39.0",
          "kind": "minor",
          "published_at": "2026-06-27T03:25:45Z"
        },
        {
          "tag": "exp/pavona/v0.1.0",
          "kind": "other",
          "published_at": "2026-06-27T03:25:43Z"
        },
        {
          "tag": "exp/roubaix/v0.2.0",
          "kind": "other",
          "published_at": "2026-06-26T18:02:21Z"
        },
        {
          "tag": "exp/roubaix/v0.1.2",
          "kind": "other",
          "published_at": "2026-06-26T17:38:59Z"
        },
        {
          "tag": "exp/roubaix/v0.1.1",
          "kind": "other",
          "published_at": "2026-06-26T17:36:14Z"
        },
        {
          "tag": "v0.38.0",
          "kind": "minor",
          "published_at": "2026-06-26T17:09:50Z"
        },
        {
          "tag": "exp/roubaix/v0.1.0",
          "kind": "other",
          "published_at": "2026-06-26T17:09:48Z"
        },
        {
          "tag": "exp/sv/v0.10.1",
          "kind": "other",
          "published_at": "2026-06-26T00:42:15Z"
        },
        {
          "tag": "exp/sv/v0.10.0",
          "kind": "other",
          "published_at": "2026-06-26T00:11:15Z"
        },
        {
          "tag": "exp/sv/v0.9.0",
          "kind": "other",
          "published_at": "2026-06-19T13:48:03Z"
        },
        {
          "tag": "exp/sv/v0.8.6",
          "kind": "other",
          "published_at": "2026-06-19T13:16:24Z"
        },
        {
          "tag": "exp/sv/v0.8.5",
          "kind": "other",
          "published_at": "2026-06-19T13:12:05Z"
        },
        {
          "tag": "exp/fin/v0.2.3",
          "kind": "other",
          "published_at": "2026-06-19T13:12:04Z"
        },
        {
          "tag": "exp/sv/v0.8.4",
          "kind": "other",
          "published_at": "2026-06-19T13:02:31Z"
        },
        {
          "tag": "exp/fin/v0.2.2",
          "kind": "other",
          "published_at": "2026-06-19T13:02:30Z"
        },
        {
          "tag": "exp/sv/v0.8.3",
          "kind": "other",
          "published_at": "2026-06-19T12:31:52Z"
        },
        {
          "tag": "exp/fin/v0.2.1",
          "kind": "other",
          "published_at": "2026-06-19T12:31:51Z"
        },
        {
          "tag": "exp/fin/v0.2.0",
          "kind": "other",
          "published_at": "2026-06-19T12:24:23Z"
        },
        {
          "tag": "exp/sv/v0.8.2",
          "kind": "other",
          "published_at": "2026-06-19T12:22:20Z"
        },
        {
          "tag": "exp/sv/v0.8.1",
          "kind": "other",
          "published_at": "2026-06-19T12:10:30Z"
        },
        {
          "tag": "v0.37.0",
          "kind": "minor",
          "published_at": "2026-06-19T11:21:51Z"
        },
        {
          "tag": "exp/sv/v0.8.0",
          "kind": "other",
          "published_at": "2026-06-19T11:21:50Z"
        },
        {
          "tag": "exp/sv/v0.6.0",
          "kind": "other",
          "published_at": "2026-06-16T01:32:43Z"
        },
        {
          "tag": "exp/slidesdeck/v0.1.3",
          "kind": "other",
          "published_at": "2026-06-16T01:16:06Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-06-29T02:48:53Z"
        },
        {
          "tag": "v0.36.1",
          "kind": "patch",
          "published_at": "2026-06-11T11:59:56Z"
        },
        {
          "tag": "v0.36.0",
          "kind": "minor",
          "published_at": "2026-06-11T11:55:41Z"
        },
        {
          "tag": "v0.35.0",
          "kind": "minor",
          "published_at": "2026-06-05T03:05:16Z"
        },
        {
          "tag": "exp/pangrams/v0.1.0",
          "kind": "other",
          "published_at": "2026-06-05T03:05:15Z"
        },
        {
          "tag": "v0.34.1",
          "kind": "patch",
          "published_at": "2026-05-25T05:52:27Z"
        },
        {
          "tag": "exp/sv/v0.5.0",
          "kind": "other",
          "published_at": "2026-05-25T05:35:52Z"
        },
        {
          "tag": "exp/sv/v0.4.0",
          "kind": "other",
          "published_at": "2026-05-25T05:28:56Z"
        },
        {
          "tag": "exp/sv/v0.3.0",
          "kind": "other",
          "published_at": "2026-05-25T05:19:32Z"
        },
        {
          "tag": "exp/fin/v0.1.1",
          "kind": "other",
          "published_at": "2026-05-25T04:46:19Z"
        },
        {
          "tag": "v0.34.0",
          "kind": "minor",
          "published_at": "2026-05-25T04:12:16Z"
        },
        {
          "tag": "exp/fin/v0.1.0",
          "kind": "other",
          "published_at": "2026-05-25T04:12:15Z"
        },
        {
          "tag": "v0.33.9",
          "kind": "patch",
          "published_at": "2026-05-25T00:13:05Z"
        },
        {
          "tag": "v0.33.8",
          "kind": "patch",
          "published_at": "2026-05-24T23:40:45Z"
        },
        {
          "tag": "exp/slidesdeck/v0.1.2",
          "kind": "other",
          "published_at": "2026-05-24T23:40:44Z"
        },
        {
          "tag": "exp/skillo/v0.1.2",
          "kind": "other",
          "published_at": "2026-05-24T23:40:43Z"
        },
        {
          "tag": "exp/fractalis/v0.1.4",
          "kind": "other",
          "published_at": "2026-05-24T23:40:42Z"
        },
        {
          "tag": "exp/elbereth/v0.1.2",
          "kind": "other",
          "published_at": "2026-05-24T23:40:41Z"
        },
        {
          "tag": "examples/go/v0.1.5",
          "kind": "other",
          "published_at": "2026-05-24T23:40:40Z"
        },
        {
          "tag": "v0.33.7",
          "kind": "patch",
          "published_at": "2026-05-24T21:29:58Z"
        },
        {
          "tag": "exp/sv/v0.2.4",
          "kind": "other",
          "published_at": "2026-05-24T21:29:58Z"
        },
        {
          "tag": "exp/slidesdeck/v0.1.1",
          "kind": "other",
          "published_at": "2026-05-24T21:29:57Z"
        },
        {
          "tag": "exp/skillo/v0.1.1",
          "kind": "other",
          "published_at": "2026-05-24T21:29:56Z"
        },
        {
          "tag": "exp/jmacs/v0.1.1",
          "kind": "other",
          "published_at": "2026-05-24T21:29:55Z"
        },
        {
          "tag": "exp/fractalis/v0.1.3",
          "kind": "other",
          "published_at": "2026-05-24T21:29:54Z"
        },
        {
          "tag": "exp/elbereth/v0.1.1",
          "kind": "other",
          "published_at": "2026-05-24T21:29:53Z"
        },
        {
          "tag": "examples/go/v0.1.4",
          "kind": "other",
          "published_at": "2026-05-24T21:29:52Z"
        },
        {
          "tag": "cmd/horeb/v0.17.1",
          "kind": "other",
          "published_at": "2026-05-24T21:29:52Z"
        },
        {
          "tag": "v0.33.6",
          "kind": "patch",
          "published_at": "2026-05-24T21:13:12Z"
        },
        {
          "tag": "examples/go/v0.1.3",
          "kind": "other",
          "published_at": "2026-05-24T21:13:11Z"
        },
        {
          "tag": "v0.33.5",
          "kind": "patch",
          "published_at": "2026-05-19T11:03:33Z"
        },
        {
          "tag": "exp/fractalis/v0.1.2",
          "kind": "other",
          "published_at": "2026-05-19T11:03:31Z"
        },
        {
          "tag": "examples/go/v0.1.2",
          "kind": "other",
          "published_at": "2026-05-19T11:03:30Z"
        },
        {
          "tag": "v0.33.4",
          "kind": "patch",
          "published_at": "2026-05-19T10:49:43Z"
        },
        {
          "tag": "exp/sv/v0.2.3",
          "kind": "other",
          "published_at": "2026-05-19T10:47:46Z"
        },
        {
          "tag": "exp/sv/v0.2.2",
          "kind": "other",
          "published_at": "2026-05-19T10:45:26Z"
        },
        {
          "tag": "v0.33.3",
          "kind": "patch",
          "published_at": "2026-05-19T10:30:47Z"
        },
        {
          "tag": "v0.33.2",
          "kind": "patch",
          "published_at": "2026-05-19T10:26:10Z"
        },
        {
          "tag": "exp/sv/v0.2.1",
          "kind": "other",
          "published_at": "2026-05-19T10:26:09Z"
        },
        {
          "tag": "exp/fractalis/v0.1.1",
          "kind": "other",
          "published_at": "2026-05-19T10:26:07Z"
        },
        {
          "tag": "exp/diplomat/v0.1.0",
          "kind": "other",
          "published_at": "2026-05-19T10:26:06Z"
        },
        {
          "tag": "examples/go/v0.1.1",
          "kind": "other",
          "published_at": "2026-05-19T10:26:05Z"
        },
        {
          "tag": "v0.33.1",
          "kind": "patch",
          "published_at": "2026-05-19T10:12:01Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "444decd86476cbea15deca65d323f35352cd068f",
          "body": "Instead of closing the pipe write end in filterInput (which didn't\ntrigger readline EOF until more input was typed), write a Ctrl+D byte\nto the pipe so readline returns io.EOF immediately.\n\nAlso fix a corrupt function body in setupStdinPipe left by partial\nstaging — early return before assignments and a stray brace.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix: make Ctrl+r immediately enter the TUI; fix setupStdinPipe syntax",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T12:31:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71a1eb9228db535539247d45274273333ad5187c",
          "body": "The old approach closed the pipe's write end in filterInput, relying on\nreadline to detect EOF on the next read. But readline had already\nconsumed the Ctrl+r byte into its internal buffer, so the EOF wasn't\ntriggered until the user typed more input and pressed Enter.\n\nInstead, write a Ctrl+D (0x04) \n[…]\nthis\nas EOF immediately, causing Readline() to return io.EOF and the REPL\nloop to launch the TUI without any intermediate prompt.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix: make Ctrl+r immediately enter the TUI instead of waiting for Enter",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T12:28:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "08b2308dc94842a1818b68f3d2a0d08bcbbcb804",
          "body": "…pagate\n\nReplace the old Ctrl+R flow (numbered list + prompt selection) with a\nfull-screen bubbletea v2 TUI overlay, styled like fzf. Results are\nfiltered in real-time with fuzzy matching as the user types, navigation\nis via ↑/↓, Enter selects, Esc/Ctrl+C cancels.\n\nA pipe-based stdin wrapper allows \n[…]\nhrough ExecuteCommand → ExecuteScript → REPL\nloop, letting each layer clean up properly before os.Exit is called at a\nsafe point.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat: add fuzzy search TUI with bubbletea v2; fix exit to cleanly pro…",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T12:24:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6417380fde710bdc7ce6ca92df55e2d7be671f62",
          "body": null,
          "is_bot": false,
          "headline": "chore: Update go.sum",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T11:57:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3d8a45922fcc4eb6912a9ebdd65b265bf14720f",
          "body": "- Fixed `terebra build` by building generated code directly in the\n  module root instead of a separate module, avoiding go.mod parsing\n  errors and internal package import restrictions.\n- Fixed multi-line script execution: the shell parser treats newlines\n  as whitespace, so multi-line scripts were parsed as a single command.\n  Multi-line scripts now route to the script interpreter.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix: terebra build and multi-line script execution",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T07:38:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e13ca7092c2b042a817616a489817156cbd666d",
          "body": "When a background job was foregrounded via fg, ^Z did nothing because\nbuiltinFg only registered for SIGINT, not SIGTSTP. The terminal sends\nSIGTSTP to the shell's process group (the child is in its own group\nfrom Setpgid), but the Go runtime ignores it by default since no\nhandler was registered.\n\nNo\n[…]\nopped. The addJob goroutine's Wait() call\nremains active — it will return when the child is later continued and\neventually exits.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix: also handle ^Z in fg builtin, not just in foreground commands",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T07:25:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f6e4f81e539bbb3a424a209a35d5df49dfbe7b20",
          "body": "When a foreground job was running via exec.Cmd.Run(), the shell blocked\nuntil the child exited. The child received SIGTSTP from the terminal\nand stopped, but Run() (which calls wait4 without WUNTRACED) never\nreturned, leaving the shell stuck.\n\nThe fix keeps the child in the shell's process group (no\n[…]\n is stopped. On ^Z, SIGSTOP is forwarded to the child and the job\nis added to the jobs list with \"stopped\" state for later fg/bg.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix: make ^Z (SIGTSTP) stop foreground jobs instead of doing nothing",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T07:23:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1d1168d4d0101a9be969b162c57d2cee0255db91",
          "body": "The readline library restores the terminal to cooked mode between\nReadline calls, so when fg runs, the terminal driver echoes ^C on\nCtrl+C.  Previous attempts to manipulate terminal attributes\n(TCGETS/TCSETS) and process groups (TIOCSPGRP) left the terminal\nin a broken state or caused other tools to\n[…]\na\n  syscall.Kill(-pgid, SIGINT), then drains the signal channel\n  so readline doesn't see a stale interrupt on the next Readline.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix: handle Ctrl+C in fg via signal forwarding, no terminal manipulation",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T07:11:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e3946493775b3fe109b383a740cd11344c04beb5",
          "body": null,
          "is_bot": false,
          "headline": "docs: Update CHANGELOGs",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T06:44:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a140ff6973bb5fbd62330b880a2e6f41e9ca8a84",
          "body": "`FOO=bar echo $FOO` sets FOO only for the duration of that command.\nThe env var is set before variable expansion, so `$FOO` in the args\nexpands to the new value. After the command completes, the previous\nvalue (if any) is restored.\n\nMultiple env vars work: `FOO=bar BAZ=qux echo $FOO$BAZ`.\nArray assignment `arr=(a b c)` is not confused with env var syntax\nbecause the value starting with `(` is excluded.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat: implement temporary env vars for one command via `FOO=bar cmd`",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T06:41:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45ce93e178d8423d1b26a19658a2a0830d4946e2",
          "body": null,
          "is_bot": false,
          "headline": "test: remove cue.txtar — tests an external binary, not terebra behavior",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T06:35:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36257d732c83a793713599805eabcede7f23d12f",
          "body": "`cat <<< hello` feeds the string \"hello\" as stdin to cat. The lexer\nrecognizes <<< before <<- and <<. The parser reads the next word as\nthe content. The executor reuses the same pipe mechanism as heredocs.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat: implement here-string via `<<<`",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T06:30:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "447fc11b4faeb07d807955c8009f09533a821804",
          "body": "- &> redirects both stdout and stderr to a file\n- &>> appends both stdout and stderr to a file\n- |& pipes both stdout and stderr to the next command (via a\n  shallow copy of the command with a 2>&1 redirect added)\n\nThe lexer recognizes &> and &>> before &&, and |& before |>. The\nexecutor handles the\n[…]\nt and\nerrOut to the same file. For |&, the pipe runner adds a\nRedirectStderrToStdout redirect to the command before executing it.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat: implement &>, &>>, and |&",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T06:27:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "762b8dc4bdf9ad46cabdbb59decb6981030aa231",
          "body": "Strip ANSI escape codes from the prompt before passing it to readline\nso cursor width calculation is correct. Also trim trailing spaces from\nthe prompt before appending the separator space, preventing double\nspaces when the user's PS1 already ends with one.\n\nThe initial readline config now uses an e\n[…]\n This avoids\ncalling prompt() twice during startup, which caused multi-line prompt\npreceding lines to be printed to stderr twice.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix: correct cursor position in prompts with ANSI escape codes",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T06:23:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6c9fef5e102bde7b5ba28b23701d4bec45c6af0e",
          "body": "`help` with no args still shows the full reference. With an argument,\nit looks up a concise help line for that builtin (or topic like\n\"strings\", \"pipes\", \"redirects\", \"chaining\", \"quoting\", \"vars\",\n\"expansion\") and prints it. Unknown names produce an error to stderr.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat: add per-builtin help via `help <builtin>`",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T06:08:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "445ba72fceea9e08c8993c71674a19cfbd61ed2c",
          "body": "Support `$arr[0]` and `$colors[red]` as shorthand for `${arr[0]}` and\n`${colors[red]}`. After reading the variable name in the `$VAR`\nexpansion path, the expander now checks for a following `[` and\nparses the index to delegate to `getArrayVar`.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat: allow array access without curly braces",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T06:06:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18cfedffd7525bd371163fccb7fa21f267f3c9f8",
          "body": "New test files:\n  - cd.txtar: cd, pwd, cd to nonexistent dir\n  - quoting.txtar: single quotes, double quotes, backslash escapes\n  - errredir.txtar: stderr redirect (2>, 2>>, 2>&1)\n  - comments.txtar: inline and standalone comments\n  - brace.txtar: nested braces, adjacent groups, step ranges, alpha r\n[…]\nd command substitution\n  - glob.txtar: ? single-char and [...] character class matching\n  - source.txtar: source nonexistent file\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "test: add comprehensive testscript coverage for shell features",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T06:01:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "11085af9d6fc15c7408cf00f167e97776fba2c38",
          "body": "- basic.txtar: assoc key listing uses exact sorted output ('blue red')\n  instead of regex char class\n- builtins.txtar: which path uses regex ('/echo') instead of hardcoded\n  absolute path; set +x debug disable check verifies trace prefix\n  absent on stderr ('echo hello') instead of trivially passing\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "test: fix brittle assertions in basic and builtin tests",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T06:01:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a38d54b4bb5a5988d85279d18b803fb20e902854",
          "body": "- arrays.txtar: assoc array value listing uses order-independent\n  assertions (stdout 'r' + stdout 'b' instead of regex char class)\n- cue.txtar: replace external cue binary dependency with internal\n  CUE library tests (eval, export, def, vet, error cases)\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "test: fix brittle testscript assertions",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T06:01:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eab8d07454d5eb204cfc493aabff66955eeb00a3",
          "body": "Two bugs in auger pipe handling:\n\n1. The parser called `continue` after consuming an encoder keyword\n   (`|> json`/`|> yaml`/`|> cue`), which caused it to try parsing a\n   second command and fail with \"expected command name, got EOF\".\n   Changed to `return pipe, nil` since the encoder is always term\n[…]\ncommand.\n   Moved the encoder check first so single-command pipelines with an\n   encoder are routed to `executeAugerWithEncoder`.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix: allow encoder-only auger pipelines and fix parser early return",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T06:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2016f826787abf04724541ce78f5ca9d3116ba40",
          "body": null,
          "is_bot": false,
          "headline": "feat: implement cd - (toggle to previous directory)",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:48:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea86167ed03bbc292ffbf1ee99980151958a3079",
          "body": null,
          "is_bot": false,
          "headline": "fix: filename completion with ./ prefix no longer duplicates the prefix",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:46:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac507f3e426c2b4bf5b82db4506a86c6b66e3256",
          "body": "…tection",
          "is_bot": false,
          "headline": "fix: heredoc interactive mode - trailing newline and empty content de…",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:44:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b29fcae494ca306565a77a7ba1313de246104235",
          "body": null,
          "is_bot": false,
          "headline": "fix: heredocs now work in interactive REPL sessions",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:41:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5504b73ad167993a90e685f3f1e4e83c6ae6c77",
          "body": null,
          "is_bot": false,
          "headline": "refactor: move cmd/terebra/* to project root, remove cmd/terebra subdir",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:39:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d1bdb95f4fc6e7975c797dadfe6f7eb21b2db70",
          "body": "…constant",
          "is_bot": false,
          "headline": "refactor: use debug.ReadBuildInfo() for version instead of hardcoded …",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:36:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "572091a48b89de5c2305af54e768cdd47f790957",
          "body": null,
          "is_bot": false,
          "headline": "fix: remove declare from help text (missed in earlier removal)",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:35:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2436ab2b1036fa75e94e648777233c43642882c5",
          "body": null,
          "is_bot": false,
          "headline": "test: add globstar ** recursive glob tests",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:33:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d81dc01554cf53281810de3a3c1a93604e833f3",
          "body": null,
          "is_bot": false,
          "headline": "refactor: remove declare builtin (redundant with auto-promotion)",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:31:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89b51c95a8af5e16f01a919ae7424d1835924745",
          "body": null,
          "is_bot": false,
          "headline": "docs: update README and help to reflect current implementation",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:29:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0b0f615f1f9666c7b404e5e9a71b39be667d2c0",
          "body": null,
          "is_bot": false,
          "headline": "docs: update testscript plan with 15 test categories",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:27:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d36bd60710630182d85f685feecbba7d859e5556",
          "body": "- vars, strings, chaining, pipes, glob, heredoc, cmdsubst, arrays,\n  builtins, script, cue, help, options, errors, source\n- Fix ExecuteScript to return errors from failed commands\n- Handle --explain flag in main() for CLI usage\n- All 16 test suites passing (15 new + 1 existing basic)",
          "is_bot": false,
          "headline": "test: add 15 testscript test suites covering all shell features",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:27:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d5b30982504518eb05f9f93b7313759d66192bf",
          "body": "- Add testscript dependency for integration tests\n- Test harness with TestMain registering terebra binary\n- Add -c flag for inline script execution\n- Fix RunScriptFromString to use ParseScript for ; chaining support\n- Basic test covering: execution, brace expansion, arithmetic,\n  arrays, associative arrays, key listing, exit codes",
          "is_bot": false,
          "headline": "test: add testscript test harness and basic test suite",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T05:16:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a2b355403f6c18dc1554ece21b5b629b6537b94",
          "body": "arr[key]=value with a non-numeric key now automatically\ncreates an associative array — no need for declare -A.",
          "is_bot": false,
          "headline": "feat: auto-promote arrays to associative on non-numeric key",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T04:58:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e131a992a99f863b5c5d8f55cdc71633a369d49",
          "body": "- declare -A name to create associative arrays\n- arr=([key]=val ...) inline initialization\n- arr[key]=val element assignment\n- ${arr[key]} value access\n- ${!arr[@]} key listing\n- declare builtin with -A and -a flags\n- Update help text with array docs",
          "is_bot": false,
          "headline": "feat: add associative array (dictionary) support",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T04:56:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa15099044b6675462c5ff7d3149cbaca32ee5a0",
          "body": null,
          "is_bot": false,
          "headline": "chore: update Taskfile and add implementation plan docs",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T04:49:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19b6f9ccd98f4b8f607374f5933dfeff91a1fb9a",
          "body": "…file\n\n- set -x, --explain, did-you-mean suggestions, vi/emacs mode\n- PS1 prompt customization with {{.}}/{{exit}}/{{exitcode}}\n- $(cmd) and backtick substitution in arguments\n- $(cmd) evaluated in PS1 on every prompt render\n- Fuzzy Ctrl+R history search with numbered selection\n- ~/.terebrarc sourced on startup\n- Multi-line prompt handling (oh-my-posh support)\n- Read-only variables, alias expansion, state save/load",
          "is_bot": false,
          "headline": "feat(shell): add debug mode, PS1 expansion, $(cmd), fuzzy search, rc …",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T04:48:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7bd51f8effc519068578f738beec388290c8488e",
          "body": "…extensions\n\n- alias, unalias, history, readonly, cue eval/vet/export/def/fmt/trim\n- drill cue --unify flag\n- PluginHandler: Completer, PromptFunc, CUEEncoder, CUEDecoder\n- Remove ls builtin (shadows /usr/bin/ls)",
          "is_bot": false,
          "headline": "feat(builtins): add alias, cue, history, readonly; remove ls; plugin …",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T04:48:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa5a512ba5e1402907ba8aeba99ac0cdc24765e0",
          "body": "- Globbing: *, ?, [...], and ** (recursive) via filepath.Glob + filepath.Walk\n- Command chaining: &&, ||, ; tokens, Script AST, ParseScript, ExecuteScript\n- Heredocs: <<EOF, <<-EOF, <<'EOF' with content accumulation and pipe-based stdin",
          "is_bot": false,
          "headline": "feat(parser): add globbing, command chaining, and heredoc support",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T04:47:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0996a2a8723237ecb46b186ff42ef982a5cb33ef",
          "body": null,
          "is_bot": false,
          "headline": "docs: Update CHANGELOGs",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T03:32:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5915ee4c62d533d571a24637b9f4ae58731bb4a",
          "body": null,
          "is_bot": false,
          "headline": "chore(terebra): Bump deps",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T03:30:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b10cc15a8628255f1e1a5bc6e0afe0e78967bd4f",
          "body": null,
          "is_bot": false,
          "headline": "docs: Update CHANGELOGs",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T03:27:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea8cde3aae1adc9290f461cf4319e5a956bc74ce",
          "body": null,
          "is_bot": false,
          "headline": "ci: Pin trivy version",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T03:27:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b1d98c5f4c10d2e55d3cc11a291f3476ba6cc61",
          "body": null,
          "is_bot": false,
          "headline": "docs: Update mnemosyne CHANGELOG",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T03:25:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51f343c6faae0ce16274bb7b7c6e415cab1ff98d",
          "body": null,
          "is_bot": false,
          "headline": "chore: Bump go deps",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T03:23:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9733a2348a3e15f84b10c47deddc520024ea30b",
          "body": null,
          "is_bot": false,
          "headline": "fix: Use tabs in Earthfiles",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T03:23:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a49480db4f70399ff037efb5d16fcf7c86b6bc61",
          "body": null,
          "is_bot": false,
          "headline": "style(terebra): Add missing final newline",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T03:15:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ed9977b82464699d2701444f009691697073dc7",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add terebra",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-19T03:05:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d7ab0df5a4c4a8a4358dfbd6cbdaf63ae284830",
          "body": "…al error\n\nIf ExtractFiltered returned an error (e.g. a requested skill not found),\nthe add command would abort before calling AddModule. Any skills already\ncopied to disk were left unregistered, appearing as orphaned in `skillo list`.\n\nNow extraction errors are demoted to warnings, so AddModule always\nregisters what was successfully extracted.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix(skillo): prevent extracted skills from becoming orphaned on parti…",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-06T01:59:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6ca93883400090ea4d96302d1aeea06bc99094f",
          "body": "Accept j/k and Ctrl-p/Ctrl-n as alternatives to arrow keys in the\ninteractive skill selection menu.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat(skillo): add vim-style keys and Ctrl-p/n for menu navigation",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-06T01:41:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4949dd07b43ef6a59ad56be601b1ef3ed367c1ec",
          "body": "When `skillo add` downloads a repo with multiple skills, an interactive\ncheckbox menu now lets users select which skills to install instead of\ninstalling all of them. The `--skill` flag still works for scripting.\n\n`skillo remove` with no arguments opens the same menu showing installed\nskills, letting users toggle which to remove.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat(skillo): add interactive skill selection menu for add and remove",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-06T01:38:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aed6f60330cb250dd270271899bb133ef8ad57da",
          "body": "json.MarshalIndent does not append a trailing newline, causing\neditorconfig-checker failures on every file skillo writes.\nAppend one after marshaling in both selections.go and manifest.go.\n\nAlso fix existing files that were missing final newlines\nacross the repo to pass editorconfig-checker.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix: ensure skillo writes JSON files with trailing newline",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-06T01:26:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c40256d93ad048fce24d32c96feccf259523938",
          "body": "go list -m fails for indirect-only dependencies that no Go code imports,\ncausing sync and list to miss the module directory and mark skills as stale.\nResolve module directories by reading the version from go.mod and\nconstructing the cache path directly, with fallbacks to go list and glob.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix: prevent skillo from showing project skills as stale after install",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-05T21:35:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "317458fde5af5b4839610d668d24ac90c9571851",
          "body": null,
          "is_bot": false,
          "headline": "ci(lefthook): Add formatters, unify conventional-commit check",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-02T02:26:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5139f958557fa0c15ca7100b8cd0c5e2623f3def",
          "body": null,
          "is_bot": false,
          "headline": "chore: Tweak go.work",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-02T02:25:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ce2ade3d262a1fae2d908acf3377d6893b9cbcc",
          "body": null,
          "is_bot": false,
          "headline": "ci: Add typstyle lint task",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-02T02:10:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6038f01309a7d6e3ce4f4e9bcfab8aa3fed252b2",
          "body": null,
          "is_bot": false,
          "headline": "style: Run `typstyle -i .`",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-07-02T02:10:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff07089d602128858597222b16f892404b184c22",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add mnemosyne scaffolding (idea phase)",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-30T11:21:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee6368c067c7f50e4886e4e00a03b403c1bef3c1",
          "body": null,
          "is_bot": false,
          "headline": "chore: Update go.work.sum",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-30T11:11:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "187987055ebbfb1855cdc38e66f7ea5cab58714d",
          "body": null,
          "is_bot": false,
          "headline": "chore: Update deps",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-30T10:57:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f9815c1d269e746597f74ec4231aecb36531cb2",
          "body": null,
          "is_bot": false,
          "headline": "ci: Bump trivy",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-30T10:53:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b396bc191517d4d3970a0dcb7a22e5956685b6d3",
          "body": null,
          "is_bot": false,
          "headline": "chore: Remove agent-browser skill",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-30T10:50:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d6b841545161704de82cdca440081740fcf70f2",
          "body": null,
          "is_bot": false,
          "headline": "chore: Add .agents/skills to .gitignore (favor skillo sync)",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-30T10:49:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "453a8cfc98a1f5390fd4e440dbb901ed7b3fa470",
          "body": null,
          "is_bot": false,
          "headline": "chore: Update go deps",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-30T10:29:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8042e1af05a12d70f8d96b3d28d7bf5f72c2391",
          "body": null,
          "is_bot": false,
          "headline": "build: Update skillo selections",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-30T10:28:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "daebfccee085b6c840e56850abd19d78f9608c1e",
          "body": null,
          "is_bot": false,
          "headline": "feat(skills): Add specs skill",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-30T10:27:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd5462bd49d4902f28e9bffe1db133062b7fc590",
          "body": null,
          "is_bot": false,
          "headline": "fix(skills): Quote description to avoid YAML loading error",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-30T10:26:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dfe50743de5ddeb98d3b8e9fbbead35513a6b99c",
          "body": null,
          "is_bot": false,
          "headline": "chore: Run `go fix`",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T11:27:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a71db48102da015d4e6daa6d50b9996f305cc169",
          "body": "Move main.go, main_test.go, and testdata/ up from cmd/skillo/ to\nexp/skillo/ root, eliminating the cmd/ intermediate directory.\nUpdate all build, test, install, and CI references accordingly.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "refactor(skillo): flatten package to exp/skillo root, drop cmd/ subdir",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T11:26:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f937f3c61b42be6f44db19055f1d90dbfde29b3a",
          "body": null,
          "is_bot": false,
          "headline": "chore: Add .skillo",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T11:22:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a37214419416c6d251ec10ae8a582bedeadebc6",
          "body": null,
          "is_bot": false,
          "headline": "chore: Update go.work.sum",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T11:20:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96fe7a3eaaf7fc5db72a5d3e52d79c8692f6107c",
          "body": "Groups skills by module@version and renders them as a tree with\nUnicode box-drawing characters. Orphaned and stale status shown\ninline. Triggered via skillo ls -t.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat(skillo): add tree view for list command (-t/--tree)",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T11:19:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3987139ae70c7ec127c2ff08dcd2da33ff1a7cd",
          "body": "…okup\n\n- Print SKILL/VERSION/MODULE/SCOPE/STATUS column headers via tabwriter\n- Replace go list -m version lookup with go.mod parsing to handle stale\n  module cache and go.sum mismatches\n- Restore project scope for orphaned skills found in project skills dir\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix(skillo): improve list output with headers and reliable version lo…",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T11:14:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc2ef76fd3043f7b60b0e4c63b3f1fc5050f4483",
          "body": "Replace the validate+parse pipeline with extractSkillName() which\nreturns (\"\", error) for bad frontmatter. extractFiltered and\nListAvailableSkills now log a warning and continue when a single\nskill has invalid YAML, rather than failing the entire module.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix(skillo): skip invalid skills during extraction instead of aborting",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T10:54:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1665efab8e9e10cde03b41f95fd8d52949da168",
          "body": "Replace go.mod parsing approach with go list -m -e -json, which\nrespects replace directives and works reliably. Falls back to\nglobbing $GOMODCACHE/<module>@* when go list -m fails.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix(skillo): use go list -m -e -json with module cache fallback",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T10:50:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4443f76a2cf2d7e1e09895fbcab9a6090e4135d7",
          "body": "The --user and --project persistent flags had no effect on the list\ncommand, which only read the --scope flag. Map them to scope = \"user\"\nand scope = \"project\" respectively so that ls -u and ls -p behave\nas expected.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix(skillo): make list respect --user and --project flags",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T10:44:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8456369571b40e17f7c18c81e562cbc763512b8",
          "body": "…le dir\n\ngo list -m can fail after a successful go get when the module's go.mod\ndeclares a different path than the one used to fetch it. Replace the\ndirect go list -m call with findModuleDir() which first tries go list -m,\nthen falls back to parsing go.mod for the actual module path+version\nand constructing the directory from $(go env GOMODCACHE).\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix(skillo): fall back to module cache when go list -m fails for modu…",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T10:40:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "581727ff49c6ae096ea519a034672bbdebe19da4",
          "body": null,
          "is_bot": false,
          "headline": "style(skillo): Run `go fix`",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T10:35:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11e02765638b46359004635791095726a120e980",
          "body": "go get can complete without making the module immediately visible to\ngo list -m, causing a spurious \"not a known dependency\" error. Add\ngo mod download between the two calls to ensure the module is fully\nresolved before listing its directory.\n\nAdds end-to-end testscript tests for add with and without --skill flag,\nusing a local module with replace directive to test the full pipeline\nwithout network access.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix(skillo): add go mod download before go list -m in add command",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T10:34:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c77202376c70042cfe4024456a63ad9e38b88e3",
          "body": "…tecture\n\nReplace the single ~/.skillo/ workspace with two self-contained scopes:\nuser (~/.config/skillo/) and project (<root>/.skillo/). Each scope has\nits own Go module workspace and a selections.json that records which\nmodules (and which subset of their skills) are registered.\n\nNew CLI: add, remo\n[…]\nnternal/selections.\nThe sync command materializes .agents/skills/ from .skillo/ state,\nenabling a clone->sync workflow for teams.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat(skillo): add project-mode skill directories with two-scope archi…",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T10:23:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dafb1370f9b38b7dce36ffc17667436b39ee7916",
          "body": null,
          "is_bot": false,
          "headline": "chore: Update deps",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T04:12:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79771f93b61d8171b579a2ba0c7cdc1eed9f22ff",
          "body": null,
          "is_bot": false,
          "headline": "docs: Update all changelogs",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T04:10:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d9efdd2b090c553bd706949bfbdec134343bd93",
          "body": "Full BDD testing workflow for Go projects: Gherkin feature files,\ngodog step definitions, observable-behavior testing principles,\nscenario quality guidelines, and seven runnable example projects\n(godogs, api, db, attachments, custom-formatter, assert-godogs,\nincorrect-project-structure).\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat(skills): add go-gherkin-testing skill",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T04:06:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5baab1c455d4b24bff7a3cec145316aae8c1eabc",
          "body": null,
          "is_bot": false,
          "headline": "chore: Update go.sum",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T04:03:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c164cdf25bc3858245b00c89acbc70c519e640e",
          "body": "Add unreleased changelog entry for the template directory\nrestructuring in commit fd4726e2.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "docs(pavona): Update changelog",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T04:02:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7596abf09d53a33d3e2f7f9a5e701d19cc3e23b0",
          "body": "Cover all pavona subcommands with Gherkin feature files: template\nhydration (agent, app, lib, site, tool, tui), template listing, version\nflag, custom template support, and error handling. Step definitions\nbuild the binary once and test against it for fast, hermetic scenarios.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "test(pavona): Add BDD feature tests with godog",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T04:02:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fafc522eae26c4e939bfad08876172137b9d0461",
          "body": "Add Gherkin feature files and step definitions covering init, list,\nsearch, validate, and version-help scenarios.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "test(skillo): add BDD feature tests with godog",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T03:59:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9335c653c253a828ea343cec60928999711bb78",
          "body": "Auto-detect skills directory (project .agents/skills/ in git repos,\nelse ~/.agents/skills/). Add --user/--project/--outdated flags and\n--format (table/json) to list command. Show skill descriptions,\nversion, module, and location. Search and get commands also support\ndual-dir resolution.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat(skillo): enhance CLI with user/project dirs and rich list output",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T03:58:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c4543b88898311edcc9c180d9848b68eddf9d4a",
          "body": "Introduce a reusable skilldirs package for resolving the skills directory\n(e.g., project .agents/skills/ vs ~/.agents/skills/). Track installed\nmodule versions in the manifest so the list command can display them and\ndetect outdated skills later.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "feat(skillo): add skilldirs package and version tracking to manifest",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T03:58:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fab8e0ff129805ff8826aa39d7e16198db6aac96",
          "body": null,
          "is_bot": false,
          "headline": "style: Add newline at end-of-file",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T03:56:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae73b3c2b109c799234c51bf2fb44efa74f39b83",
          "body": null,
          "is_bot": false,
          "headline": "docs: Update all the changelogs",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T03:50:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b15c04833ecc4fbbd62534ba40b6ad9ec97d9332",
          "body": null,
          "is_bot": false,
          "headline": "ci(sv): Bump version to v1.0.1",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T03:49:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1153dfccb60a51a72b9deb4c3cfcca15062185d8",
          "body": null,
          "is_bot": false,
          "headline": "ci(sv): Bump version to v1.0.0",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T03:46:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c48959a8cc1e5c396d57e0db6042ec26511b48ef",
          "body": null,
          "is_bot": false,
          "headline": "chore: Update all changelogs",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T03:42:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1127611aa8c17ab688c4c01f0008ef55b851fdf",
          "body": "Replaces the string-based commit parameter in CalculateNext with a\nCommit struct that carries Message and Files. Breaking changes (!)\nin commits that only touch files outside the module path (e.g.,\ndocumentation or config) no longer trigger a major version bump.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix: scope breaking change detection to source code per module",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T03:41:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a52bfa954b58a9ff0c961fc900f7bf7207bb82d",
          "body": "When a tag (e.g., a major version bump) has no path-scoped commits\nbetween it and the previous tag, the changelog generator now falls\nback to the tag's underlying commit so the entry is not silently\ndropped.\n\nAdds a CommitAtTag git helper and a testscript covering this scenario.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "fix: include tags with no scoped commits in changelog",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T03:39:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "150c17c731be8ee7a0dda330a79e11a3bab2d06b",
          "body": null,
          "is_bot": false,
          "headline": "build: Update go tool to use new cmd/sv path",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T02:59:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f93827dfd6281e6e8fc06010f3e3f978995ede00",
          "body": null,
          "is_bot": false,
          "headline": "fix(sv): Use appropriate dir names in relative_paths.txtar",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T02:51:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e483f97d0e995deb7b44daca13a7f9c98f1d738",
          "body": null,
          "is_bot": false,
          "headline": "feat(sv)!: Graduate out of exp(erimental) dir to cmd",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-29T02:32:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd4726e297224edee12cdfeb201244c8f4d0ed57",
          "body": "Embedded templates now live at the project root under templates/, with\nembed directives in a new templates_embed.go file (Go's //go:embed\ncannot traverse parent directories with ..).\n\nThe scaffold package exposes RegisterBuiltin() which is called from\ntemplates_embed.go's init(), replacing the previ\n[…]\negistration.\n\nBehavior is unchanged — all built-in templates are still compiled into\nthe binary and listed/resolved the same way.\n\n💘 Generated with Crush\n\nAssisted-by: Crush:deepseek/deepseek-v4-flash",
          "is_bot": false,
          "headline": "refactor: move built-in templates to top-level templates directory",
          "author_name": "John Gosset",
          "author_login": "qjcg",
          "committed_at": "2026-06-28T03:21:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 80,
      "commits_last_year": 660,
      "latest_release_at": "2026-06-29T11:21:22Z",
      "latest_release_tag": "exp/skillo/v0.3.0",
      "releases_from_tags": false,
      "days_since_last_push": 6,
      "active_weeks_last_year": 28,
      "days_since_latest_release": 26,
      "mean_days_between_releases": 0
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/qjcg/arcadia",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/qjcg/arcadia",
          "is_deprecated": false,
          "latest_version": "v0.46.0",
          "repository_url": "https://github.com/qjcg/arcadia",
          "versions_count": 85,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-19T12:31:09Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-01-20",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Taskfile.yml",
        "cmd/horeb/Makefile",
        "cmd/horeb/Taskfile.yml",
        "cmd/sv/Taskfile.yaml",
        "examples/cue/01-validate-json/Taskfile.yml",
        "examples/cue/02-validate-yaml/Taskfile.yml",
        "examples/cue/03-import-yaml/Taskfile.yml",
        "examples/cue/04-generate-cue-from-cue/Taskfile.yml",
        "examples/cue/05-generate-cue-from-go/Taskfile.yml",
        "examples/cue/10-config-k8s-helm/Taskfile.yml",
        "examples/cue/Taskfile.yml",
        "examples/go/Taskfile.yml",
        "examples/go/cmd/db-migrate/Taskfile.yaml",
        "examples/go/cmd/db-sqlc/Taskfile.yml",
        "examples/go/cmd/http-chi-router/Taskfile.yml",
        "examples/go/cmd/http-tls/Taskfile.yml",
        "examples/go/cmd/http-webapp-sqlite/Taskfile.yml",
        "examples/go/cmd/nats-consumer/Taskfile.yml",
        "examples/go/cmd/omega-onion2plus/Taskfile.yml",
        "examples/go/thirdparty/huh/Taskfile.yml",
        "examples/go/thirdparty/lipgloss/Taskfile.yml",
        "examples/go/thirdparty/playwright/Taskfile.yml",
        "examples/go/thirdparty/rod/Taskfile.yml",
        "examples/go/thirdparty/task/testdata/Taskfile.yml",
        "examples/go/thirdparty/testscript/Taskfile.yml",
        "examples/scroll/Taskfile.yml",
        "examples/scroll/stamp/Taskfile.yml",
        "exp/diplomat/Taskfile.yaml",
        "exp/elbereth/Taskfile.yml",
        "exp/fin/Taskfile.yaml",
        "exp/fractalis/Taskfile.yml",
        "exp/jmacs/Taskfile.yml",
        "exp/mnemosyne/Taskfile.yml",
        "exp/pavona/Taskfile.yaml",
        "exp/roubaix/Taskfile.yaml",
        "exp/skillo/Taskfile.yml",
        "exp/slidesdeck/Taskfile.yml",
        "exp/terebra/Taskfile.yaml",
        "exp/testdrive-omarchy/Taskfile.yml",
        "infra/Taskfile.yml",
        "skills/go-gherkin-testing/references/godog-examples/db/Makefile",
        "talks/no-code-low-code-go-code/Taskfile.yml",
        "templates/typst/Taskfile.yml"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "examples/bun/tsconfig.json",
        "examples/scroll/tsconfig.json"
      ],
      "toolchain_manifests": [
        ".skillo/go.mod",
        "cmd/horeb/go.mod",
        "cmd/sv/go.mod",
        "examples/go/go.mod",
        "exp/diplomat/go.mod",
        "exp/elbereth/go.mod",
        "exp/fin/go.mod",
        "exp/fractalis/go.mod",
        "exp/jmacs/go.mod",
        "exp/mnemosyne/go.mod",
        "exp/pangrams/go.mod",
        "exp/pavona/go.mod",
        "exp/roubaix/go.mod",
        "exp/skillo/go.mod",
        "exp/slidesdeck/go.mod",
        "exp/terebra/go.mod",
        "go.mod",
        "skills/go-gherkin-testing/references/godog-examples/db/go.mod",
        "skills/go-gherkin-testing/references/godog-examples/go.mod",
        "skills/go-gherkin-testing/references/godog-examples/godogs/go.mod",
        "skills/go-gherkin-testing/references/godog-examples/incorrect-project-structure/go.mod"
      ],
      "largest_source_bytes": 587043,
      "source_files_sampled": 332,
      "oversized_source_files": 5,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 3762
    },
    "dependencies": {
      "manifests": [
        ".skillo/go.mod",
        "go.mod"
      ],
      "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"
      ],
      "dependencies": [
        {
          "name": "github.com/distatus/battery",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.11.0"
        },
        {
          "name": "github.com/fatih/color",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.19.0"
        },
        {
          "name": "github.com/gosuri/uiprogress",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.1"
        },
        {
          "name": "github.com/mdlayher/wifi",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.8.0"
        },
        {
          "name": "github.com/mgutz/ansi",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20200706080929-d51e80ef957d"
        },
        {
          "name": "github.com/sirupsen/logrus",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.9.4"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 1,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "qjcg",
          "commits": 660,
          "avatar_url": "https://avatars.githubusercontent.com/u/1133291?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "sv-release.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": true,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "bun.lockb",
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 9,
            "reason": "binaries present in source code",
            "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": null,
            "reason": "no pull request found",
            "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": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "20 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "444decd86476cbea15deca65d323f35352cd068f",
        "ran_at": "2026-07-26T02:31:01Z",
        "aggregate_score": 3.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-19T12:32:05Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/qjcg/arcadia",
    "host": "github.com",
    "name": "arcadia",
    "owner": "qjcg"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 56,
      "inputs": {
        "security": 31,
        "vitality": 90,
        "community": 24,
        "governance": 60,
        "engineering": 61
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 90,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "commits_last_year": 660,
              "human_commit_share": 1,
              "days_since_last_push": 6,
              "active_weeks_last_year": 28
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "28/52 weeks with commits",
                "points": 19.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 28
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "660 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 660
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 80,
              "latest_release_tag": "exp/skillo/v0.3.0",
              "releases_from_tags": false,
              "days_since_latest_release": 26,
              "mean_days_between_releases": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "80 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 80
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 26 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 26
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 6,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 6 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 1,
              "stars": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (GPL-3.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "GPL-3.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 60,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 16,
            "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 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 76,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 1,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 64,
            "inputs": {
              "followers": 158,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "qjcg",
              "public_repos": 65,
              "account_age_days": 5395
            },
            "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": "158 followers of qjcg",
                "points": 15.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 158,
                      "login": "qjcg"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "65 public repos, account ~14 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 65
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 14
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/qjcg/arcadia"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "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 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "85 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 85
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 61,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [
                "monorepo"
              ],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "1 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 31,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 31,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 3.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6.8,
                "status": "partial",
                "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "20 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 71,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 3762
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "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": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "bun.lockb",
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Taskfile.yml",
                "cmd/horeb/Makefile",
                "cmd/horeb/Taskfile.yml",
                "cmd/sv/Taskfile.yaml",
                "examples/cue/01-validate-json/Taskfile.yml",
                "examples/cue/02-validate-yaml/Taskfile.yml",
                "examples/cue/03-import-yaml/Taskfile.yml",
                "examples/cue/04-generate-cue-from-cue/Taskfile.yml",
                "examples/cue/05-generate-cue-from-go/Taskfile.yml",
                "examples/cue/10-config-k8s-helm/Taskfile.yml",
                "examples/cue/Taskfile.yml",
                "examples/go/Taskfile.yml",
                "examples/go/cmd/db-migrate/Taskfile.yaml",
                "examples/go/cmd/db-sqlc/Taskfile.yml",
                "examples/go/cmd/http-chi-router/Taskfile.yml",
                "examples/go/cmd/http-tls/Taskfile.yml",
                "examples/go/cmd/http-webapp-sqlite/Taskfile.yml",
                "examples/go/cmd/nats-consumer/Taskfile.yml",
                "examples/go/cmd/omega-onion2plus/Taskfile.yml",
                "examples/go/thirdparty/huh/Taskfile.yml",
                "examples/go/thirdparty/lipgloss/Taskfile.yml",
                "examples/go/thirdparty/playwright/Taskfile.yml",
                "examples/go/thirdparty/rod/Taskfile.yml",
                "examples/go/thirdparty/task/testdata/Taskfile.yml",
                "examples/go/thirdparty/testscript/Taskfile.yml",
                "examples/scroll/Taskfile.yml",
                "examples/scroll/stamp/Taskfile.yml",
                "exp/diplomat/Taskfile.yaml",
                "exp/elbereth/Taskfile.yml",
                "exp/fin/Taskfile.yaml",
                "exp/fractalis/Taskfile.yml",
                "exp/jmacs/Taskfile.yml",
                "exp/mnemosyne/Taskfile.yml",
                "exp/pavona/Taskfile.yaml",
                "exp/roubaix/Taskfile.yaml",
                "exp/skillo/Taskfile.yml",
                "exp/slidesdeck/Taskfile.yml",
                "exp/terebra/Taskfile.yaml",
                "exp/testdrive-omarchy/Taskfile.yml",
                "infra/Taskfile.yml",
                "skills/go-gherkin-testing/references/godog-examples/db/Makefile",
                "talks/no-code-low-code-go-code/Taskfile.yml",
                "templates/typst/Taskfile.yml"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "examples/bun/tsconfig.json",
                "examples/scroll/tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                ".skillo/go.mod",
                "cmd/horeb/go.mod",
                "cmd/sv/go.mod",
                "examples/go/go.mod",
                "exp/diplomat/go.mod",
                "exp/elbereth/go.mod",
                "exp/fin/go.mod",
                "exp/fractalis/go.mod",
                "exp/jmacs/go.mod",
                "exp/mnemosyne/go.mod",
                "exp/pangrams/go.mod",
                "exp/pavona/go.mod",
                "exp/roubaix/go.mod",
                "exp/skillo/go.mod",
                "exp/slidesdeck/go.mod",
                "exp/terebra/go.mod",
                "go.mod",
                "skills/go-gherkin-testing/references/godog-examples/db/go.mod",
                "skills/go-gherkin-testing/references/godog-examples/go.mod",
                "skills/go-gherkin-testing/references/godog-examples/godogs/go.mod",
                "skills/go-gherkin-testing/references/godog-examples/incorrect-project-structure/go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Taskfile.yml, cmd/horeb/Makefile, cmd/horeb/Taskfile.yml, cmd/sv/Taskfile.yaml, examples/cue/01-validate-json/Taskfile.yml, examples/cue/02-validate-yaml/Taskfile.yml, examples/cue/03-import-yaml/Taskfile.yml, examples/cue/04-generate-cue-from-cue/Taskfile.yml, examples/cue/05-generate-cue-from-go/Taskfile.yml, examples/cue/10-config-k8s-helm/Taskfile.yml, examples/cue/Taskfile.yml, examples/go/Taskfile.yml, examples/go/cmd/db-migrate/Taskfile.yaml, examples/go/cmd/db-sqlc/Taskfile.yml, examples/go/cmd/http-chi-router/Taskfile.yml, examples/go/cmd/http-tls/Taskfile.yml, examples/go/cmd/http-webapp-sqlite/Taskfile.yml, examples/go/cmd/nats-consumer/Taskfile.yml, examples/go/cmd/omega-onion2plus/Taskfile.yml, examples/go/thirdparty/huh/Taskfile.yml, examples/go/thirdparty/lipgloss/Taskfile.yml, examples/go/thirdparty/playwright/Taskfile.yml, examples/go/thirdparty/rod/Taskfile.yml, examples/go/thirdparty/task/testdata/Taskfile.yml, examples/go/thirdparty/testscript/Taskfile.yml, examples/scroll/Taskfile.yml, examples/scroll/stamp/Taskfile.yml, exp/diplomat/Taskfile.yaml, exp/elbereth/Taskfile.yml, exp/fin/Taskfile.yaml, exp/fractalis/Taskfile.yml, exp/jmacs/Taskfile.yml, exp/mnemosyne/Taskfile.yml, exp/pavona/Taskfile.yaml, exp/roubaix/Taskfile.yaml, exp/skillo/Taskfile.yml, exp/slidesdeck/Taskfile.yml, exp/terebra/Taskfile.yaml, exp/testdrive-omarchy/Taskfile.yml, infra/Taskfile.yml, skills/go-gherkin-testing/references/godog-examples/db/Makefile, talks/no-code-low-code-go-code/Taskfile.yml, templates/typst/Taskfile.yml",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Taskfile.yml, cmd/horeb/Makefile, cmd/horeb/Taskfile.yml, cmd/sv/Taskfile.yaml, examples/cue/01-validate-json/Taskfile.yml, examples/cue/02-validate-yaml/Taskfile.yml, examples/cue/03-import-yaml/Taskfile.yml, examples/cue/04-generate-cue-from-cue/Taskfile.yml, examples/cue/05-generate-cue-from-go/Taskfile.yml, examples/cue/10-config-k8s-helm/Taskfile.yml, examples/cue/Taskfile.yml, examples/go/Taskfile.yml, examples/go/cmd/db-migrate/Taskfile.yaml, examples/go/cmd/db-sqlc/Taskfile.yml, examples/go/cmd/http-chi-router/Taskfile.yml, examples/go/cmd/http-tls/Taskfile.yml, examples/go/cmd/http-webapp-sqlite/Taskfile.yml, examples/go/cmd/nats-consumer/Taskfile.yml, examples/go/cmd/omega-onion2plus/Taskfile.yml, examples/go/thirdparty/huh/Taskfile.yml, examples/go/thirdparty/lipgloss/Taskfile.yml, examples/go/thirdparty/playwright/Taskfile.yml, examples/go/thirdparty/rod/Taskfile.yml, examples/go/thirdparty/task/testdata/Taskfile.yml, examples/go/thirdparty/testscript/Taskfile.yml, examples/scroll/Taskfile.yml, examples/scroll/stamp/Taskfile.yml, exp/diplomat/Taskfile.yaml, exp/elbereth/Taskfile.yml, exp/fin/Taskfile.yaml, exp/fractalis/Taskfile.yml, exp/jmacs/Taskfile.yml, exp/mnemosyne/Taskfile.yml, exp/pavona/Taskfile.yaml, exp/roubaix/Taskfile.yaml, exp/skillo/Taskfile.yml, exp/slidesdeck/Taskfile.yml, exp/terebra/Taskfile.yaml, exp/testdrive-omarchy/Taskfile.yml, infra/Taskfile.yml, skills/go-gherkin-testing/references/godog-examples/db/Makefile, talks/no-code-low-code-go-code/Taskfile.yml, templates/typst/Taskfile.yml"
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "examples/bun/tsconfig.json, examples/scroll/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples/bun/tsconfig.json, examples/scroll/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 587043,
              "source_files_sampled": 332,
              "oversized_source_files": 5
            },
            "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": "5/332 source files over 60KB",
                "points": 54.2,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 332,
                      "oversized": 5
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch go package 'skillo.local/skills' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T02:31:10.670765Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/q/qjcg/arcadia.svg",
  "full_name": "qjcg/arcadia",
  "license_state": "standard",
  "license_spdx": "GPL-3.0"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenGo.