Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-27 01:01 UTC

galax-io / gatling-picatinny

Gatling DSL extensions — feeders, profile management, transactions, assertions, Redis integration, and utility functions

Scala · Java · ShellApache-2.0★ 12 Sterne⑂ 1 Forkseit März 2024Auf GitHub ansehen ↗

galax-io/gatling-picatinny erreicht einen Gesundheitsindex von 59 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (86/100) ab, am schwächsten bei Community & Adoption (32/100). Zuletzt vor 5 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

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

59
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

Galaxio TeamOrganisation
18 Follower15 öffentliche Reposseit Okt. 2023

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Metriken nach Kategorie

Vitalität

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

86Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 5 Tagen
11.8/36Commit-Rhythmus — 17/52 Wochen mit Commits
18/18Commit-Volumen — 292 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_year292
human_commit_share0,76
days_since_last_push5
active_weeks_last_year17

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 65 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 5 Tagen
27/27Release-Rhythmus — ein Release etwa alle 3,3 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count65
latest_release_tagv1.25.0
releases_from_tagsnein
days_since_latest_release5
mean_days_between_releases3,3
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?

32Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
16.9/60Stars — 12 Stars
0/25Forks — 1 Forks
0/15Watcher — 1 Watcher
Verwendete Eingangsdaten
forks1
stars12
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.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?

42Gefährdet · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0.2/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 99 % der Commits
5.4/13.5Breite der Beitragenden — 4 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled4
top_contributor_share0,989
Wie die Bewertung erfolgt
27.2/46.8Issue-Lösungsquote — 58 % der Issues geschlossen
35.6/38.3PR-Annahme — 150/161 entschiedene PRs gemergt
1.5/15OpenSSF Scorecard: Code-Review — Found 1/8 approved changesets -- score normalized to 1
Verwendete Eingangsdaten
merged_prs150
open_issues61
closed_issues85
issue_closed_ratio0,582
closed_unmerged_prs11
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
9.2/25Reichweite des Inhabers — 18 Follower von galax-io
14.3/25Kontohistorie — 15 öffentliche Repos, Kontoalter ca. 2 Jahre
Verwendete Eingangsdaten
followers18
owner_typeOrganization
is_verified
owner_logingalax-io
public_repos15
account_age_days1.006

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

75Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 3 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 12 out of 12 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein

Dokumentation

85Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 12 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsgatling, performance, performance-testing, gatling-plugin, dsl, feeders, java, jwt, kotlin, load-testing, redis, scala
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

55Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 12 out of 12 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0.8/7.5Code-Review — Found 1/8 approved changesets -- score normalized to 1
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5,5
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): 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.

67Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 76 von 76 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes7.798
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Scala (statisch typisiert)
0/10Reproduzierbare Umgebung
10/10Belegte Agentenpraxis — 73 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 2 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
1/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0,73
toolchain_manifests
dependency_bot_commit_share0,02
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Scala (statisch typisiert)
54.8/55Handhabbare Dateigrößen — 1/235 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageScala
largest_source_bytes65.616
source_files_sampled235
oversized_source_files1
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

12GitHub-Sterne
4Mitwirkende
292Commits, letzte 12 Monate
5Tage seit letztem Push
65Releases
1Bus-Faktor
61offene Issues
Paket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Weitere Details

OpenSSF Scorecard 5.5 / 10
5.5Gesamtwert

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

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests12 out of 12 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
1Code-ReviewFound 1/8 approved changesets -- score normalized to 1
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate 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
10Packagingpackaging workflow detected
1Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 1
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Alle Abhängigkeiten 0

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 0 direkte und 0 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
Abhängigkeits-Advisories nicht bewertet

Der Advisory-Abgleich konnte für diesen Bericht nicht ausgeführt werden: No resolved dependencies to assess

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "gatling",
        "performance",
        "performance-testing",
        "gatling-plugin",
        "dsl",
        "feeders",
        "java",
        "jwt",
        "kotlin",
        "load-testing",
        "redis",
        "scala"
      ],
      "is_fork": false,
      "size_kb": 1570,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Java": 124903,
        "Scala": 645358,
        "Shell": 106242,
        "Python": 699,
        "PowerShell": 32608
      },
      "pushed_at": "2026-07-21T21:38:18Z",
      "created_at": "2024-03-24T11:08:27Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-21T21:38:42Z",
      "description": "Gatling DSL extensions — feeders, profile management, transactions, assertions, Redis integration, and utility functions",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Scala",
      "significant_languages": [
        "Scala",
        "Java",
        "Shell"
      ]
    },
    "owner": {
      "blog": "galaxio.org",
      "name": "Galaxio Team",
      "type": "Organization",
      "login": "galax-io",
      "company": null,
      "location": null,
      "followers": 18,
      "avatar_url": "https://avatars.githubusercontent.com/u/148836406?v=4",
      "created_at": "2023-10-24T03:08:39Z",
      "is_verified": null,
      "public_repos": 15,
      "account_age_days": 1006
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.25.0",
          "kind": "minor",
          "published_at": "2026-07-21T21:36:20Z"
        },
        {
          "tag": "v1.24.1",
          "kind": "patch",
          "published_at": "2026-07-19T14:01:42Z"
        },
        {
          "tag": "v1.24.0",
          "kind": "minor",
          "published_at": "2026-07-05T04:15:52Z"
        },
        {
          "tag": "v1.23.0",
          "kind": "minor",
          "published_at": "2026-06-28T07:47:46Z"
        },
        {
          "tag": "v1.22.0",
          "kind": "minor",
          "published_at": "2026-06-24T13:16:04Z"
        },
        {
          "tag": "v1.21.2",
          "kind": "patch",
          "published_at": "2026-06-23T23:59:42Z"
        },
        {
          "tag": "v1.21.1",
          "kind": "patch",
          "published_at": "2026-06-23T23:25:59Z"
        },
        {
          "tag": "v1.21.0",
          "kind": "minor",
          "published_at": "2026-06-23T23:07:53Z"
        },
        {
          "tag": "v1.20.0",
          "kind": "minor",
          "published_at": "2026-06-23T19:11:04Z"
        },
        {
          "tag": "v1.19.0",
          "kind": "minor",
          "published_at": "2026-06-22T15:03:35Z"
        },
        {
          "tag": "v1.18.0",
          "kind": "minor",
          "published_at": "2026-06-22T10:24:02Z"
        },
        {
          "tag": "v1.17.1",
          "kind": "patch",
          "published_at": "2026-06-21T22:47:46Z"
        },
        {
          "tag": "v1.17.0",
          "kind": "minor",
          "published_at": "2026-06-21T19:07:53Z"
        },
        {
          "tag": "v1.16.0",
          "kind": "minor",
          "published_at": "2026-06-21T11:28:05Z"
        },
        {
          "tag": "v1.15.7",
          "kind": "patch",
          "published_at": "2026-06-20T19:47:50Z"
        },
        {
          "tag": "v1.15.6",
          "kind": "patch",
          "published_at": "2026-06-03T01:51:32Z"
        },
        {
          "tag": "v1.15.5",
          "kind": "patch",
          "published_at": "2026-06-02T23:09:37Z"
        },
        {
          "tag": "v1.15.4",
          "kind": "patch",
          "published_at": "2026-06-02T22:12:39Z"
        },
        {
          "tag": "v1.13.17",
          "kind": "patch",
          "published_at": "2026-06-02T19:04:07Z"
        },
        {
          "tag": "v1.13.15",
          "kind": "patch",
          "published_at": "2026-06-01T17:01:44Z"
        },
        {
          "tag": "v1.13.14",
          "kind": "patch",
          "published_at": "2026-06-01T16:42:37Z"
        },
        {
          "tag": "v1.13.13",
          "kind": "patch",
          "published_at": "2026-06-01T16:25:50Z"
        },
        {
          "tag": "v1.13.12",
          "kind": "patch",
          "published_at": "2026-06-01T16:02:18Z"
        },
        {
          "tag": "v1.13.9",
          "kind": "patch",
          "published_at": "2026-06-01T01:44:30Z"
        },
        {
          "tag": "v1.13.8",
          "kind": "patch",
          "published_at": "2026-05-27T00:57:45Z"
        },
        {
          "tag": "v1.13.7",
          "kind": "patch",
          "published_at": "2026-05-27T00:15:47Z"
        },
        {
          "tag": "v1.13.6",
          "kind": "patch",
          "published_at": "2026-05-27T00:01:47Z"
        },
        {
          "tag": "v1.13.5",
          "kind": "patch",
          "published_at": "2026-05-26T13:48:05Z"
        },
        {
          "tag": "v1.13.4",
          "kind": "patch",
          "published_at": "2026-05-26T08:13:40Z"
        },
        {
          "tag": "v1.13.1",
          "kind": "patch",
          "published_at": "2026-05-26T07:30:14Z"
        },
        {
          "tag": "v1.13.0",
          "kind": "minor",
          "published_at": "2026-05-26T07:09:44Z"
        },
        {
          "tag": "v1.12.4",
          "kind": "patch",
          "published_at": "2026-05-25T21:25:31Z"
        },
        {
          "tag": "v1.12.3",
          "kind": "patch",
          "published_at": "2026-05-23T11:35:27Z"
        },
        {
          "tag": "v1.12.2",
          "kind": "patch",
          "published_at": "2026-05-23T10:43:59Z"
        },
        {
          "tag": "v1.12.0",
          "kind": "minor",
          "published_at": "2026-05-19T20:27:43Z"
        },
        {
          "tag": "v1.11.0",
          "kind": "minor",
          "published_at": "2026-05-19T00:14:26Z"
        },
        {
          "tag": "v1.10.5",
          "kind": "patch",
          "published_at": "2026-05-19T00:11:55Z"
        },
        {
          "tag": "v1.10.4",
          "kind": "patch",
          "published_at": "2026-05-17T19:07:32Z"
        },
        {
          "tag": "v1.10.3",
          "kind": "patch",
          "published_at": "2026-05-17T13:22:21Z"
        },
        {
          "tag": "v1.10.2-latest",
          "kind": "prerelease",
          "published_at": "2026-05-17T13:09:35Z"
        },
        {
          "tag": "v1.10.2",
          "kind": "patch",
          "published_at": "2026-05-17T13:07:49Z"
        },
        {
          "tag": "v1.10.1",
          "kind": "patch",
          "published_at": "2026-05-16T11:46:46Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2026-05-15T17:24:26Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2026-05-14T22:43:52Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-05-14T16:31:58Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-05-14T03:22:22Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-05-14T03:22:21Z"
        },
        {
          "tag": "v1.4.1",
          "kind": "patch",
          "published_at": "2026-05-13T12:44:33Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-05-13T11:16:39Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-05-12T12:42:50Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-05-08T04:38:02Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-04-28T07:54:48Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2026-04-26T22:48:25Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-02-10T11:51:38Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-02-10T11:41:55Z"
        },
        {
          "tag": "v0.18.2",
          "kind": "patch",
          "published_at": "2025-11-10T20:46:02Z"
        },
        {
          "tag": "v0.18.1",
          "kind": "patch",
          "published_at": "2025-08-18T04:31:57Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2025-08-18T04:16:12Z"
        },
        {
          "tag": "v0.17.1",
          "kind": "patch",
          "published_at": "2024-12-11T08:16:19Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2024-12-10T21:31:20Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2024-09-27T10:23:57Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2024-06-26T21:56:52Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2024-05-22T23:37:22Z"
        },
        {
          "tag": "v0.14.1",
          "kind": "patch",
          "published_at": "2024-05-22T13:48:28Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2024-04-29T12:52:06Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "1d1fe982f7691de288726629e51088064c7c49c3",
          "body": "Post-release step per the release process: binary-compatibility baseline\nmoves to the just-published v1.25.0.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(build): bump mimaPreviousArtifacts to 1.25.0",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T21:38:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ffa244769a70ff61e019c4aca050f936d5cdd509",
          "body": "GitHub's REST milestone filter can return stale members — observed PR #296\nappearing under milestone #12 while its own payload carries milestone #30\n(v1.24.1). Filter each listed item by its payload milestone.number instead\nof trusting the query filter, so tag-readiness doesn't fail on foreign PRs.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tooling): re-verify milestone membership in check-linkage listing",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T21:06:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "445dabce8ccf31f7caab2894fb9a87d6aae8e56f",
          "body": "…t floor\n\nmain drifted below the enforced statement floor after #294-#300 (74.09% < 75.00\non 'sbt coverage test coverageReport'; branch 69.10% passes). All shortfall sat\nin pre-existing pure faker helpers, so per TESTING.md \"Coverage ratchet\" this\nbackfills layer-1 tests instead of moving the floor:\n[…]\n: 74.09% -> 76.06% stmt, 69.10% -> 73.51% branch (712 tests, +27).\nOfficial unit+it gate command: 81.13% stmt / 74.70% branch. Floors unchanged.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(feeders): backfill faker unit coverage to clear the 75% statemen…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:30:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "541c1c0606b4322493b006f0214138e88c3cd354",
          "body": "…task log\n\nBEFORE/AFTER gc.alloc.rate.norm tables (ipv6 -96.5% B/op and 8.4x faster,\nnarrow-long -100% i.e. zero allocation and 7.5x, lorem -66%, email -39%;\nraw JMH logs attached as a PR comment), draft evidence-closure comment for\n#130 (not posted — maintainer gate), tasks.md progress marks, and h\n[…]\n IntegrationTest (ci.yml Coverage job) and is green at 75/66 on this\nbranch; a unit-only local run under-measures and must not be read as drift.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 010 implementation evidence — benchmarks, #130 draft, …",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "81589aa979eef53fca7bfb41366dbf903649d5a9",
          "body": "withDefaults rebuilt defaults.toMap for every record flowing through the\ntransform; the defaults are fixed at construction, so the map is now built\nonce in the closure. Per-record semantics unchanged: defaultsMap ++ record,\nrecord wins on collision, duplicate default keys keep varargs last-wins.\nNew multi-record test (record-wins / absent-fills / duplicate-last-wins in\none run) passed against the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(feeders): hoist withDefaults static map to construction (#131)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4db05737b9404d347fe8af24c84f6b4f70844271",
          "body": "selectKeys built a MapView + function wrapper + full toMap rebuild per\nrecord; a direct filter on the widened record does one pass straight into\nthe result map. The hoisted keySet stays. New tests: mixed\npresent/absent/unselected keys, empty record, empty selection, plus a\nselectKeys -> prefixKeys -\n[…]\ns records\nwith suffixKeys and empty-affix identity boundaries (locks #130 behavior\nper FR-006). All passed against the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(feeders): single-pass selectKeys record filtering (#129)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4c02457b464d77d20795d1d7f08d414a65c2c258",
          "body": "nextLongInclusive classified narrow vs wide ranges with BigInt arithmetic,\nallocating 3+ BigInt per sample on the hot path of every long-derived\ngenerator (long, positiveLong, negativeLong, date.offset). The predicate is\nnow pure Long arithmetic: span = max - min; narrow iff span >= 0 &&\nspan < Long\n[…]\n at\nclassification-boundary ranges incl. negative-max wide range, tiny-range\nendpoint coverage. All passed against the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(faker): allocation-free narrow-range long classification (#304)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3bf913f4e29910cd3aa6ba1ad0c11946a22187fd",
          "body": "lorem.words now appends catalog draws into one pre-sized StringBuilder\ninstead of building Vector.fill(count) and mkString-joining it — removes\nthe intermediate Vector and its arrays on a path sometimes called\nper-request in payload templates. require(count > 0) untouched. New tests\n(words(1) single-word/no-separator boundary, exact N words + N-1 single\nspaces with catalog membership) passed against the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(faker): single-pass lorem words assembly (#123)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c53acc5770b6769b32a5980d0bef4971cf0c4385",
          "body": "…n (#125)\n\nGerman Steuer-ID: one StringBuilder with 11 direct digit appends instead of\nRange.map (boxed IndexedSeq) + prepend + mkString. Brazilian CPF: the\nformatted branch reuses a construction-time compiled Pattern instead of\nString.replaceFirst compiling one per call (stella generation and CNPJ\n\n[…]\n first-digit-never-0 boundary,\nformatted-CPF checksum validity, raw-CPF-has-no-separators negative)\npassed against the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(faker): single-pass TIN assembly + precompiled CPF format patter…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cb0871da6031539546ce8f97f5a2aa1a767550df",
          "body": "Replace Vector.fill(8)(RandomDataGenerators.hexString(4)).mkString(\":\") with\none StringBuilder drawing 32 hex digits from ThreadLocalRandom over an\nexplicit lowercase alphabet. Drops the per-group Iterator/map/take chain,\nthe Vector, the per-group strings, AND the shared scala.util.Random\ncontention\n[…]\non and 8x4 lowercase-hex\nshape unchanged; strengthened shape test (1000 samples, per-group charset)\npassed against the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(faker): allocation-free IPv6 assembly off legacy RNG util (#124)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "317ba5121b03741ec3ebf392f5b9da270220c2dd",
          "body": "Replace the per-call regex chain (replaceAll compiles a Pattern every\ninvocation, plus strip intermediates) in companyEmailName and emailFromName\nwith one shared char-loop helper over the lowered string. toLowerCase stays:\nits locale-aware special casing (e.g. U+0130 -> two code units) is not\nreprod\n[…]\nse, accents, dotted-I,\nsymbols-only -> \"user\" fallback, non-BMP surrogate pairs incl. trailing\nruns); it passed on the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(faker): single-pass email local-part normalization (#139)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0bcb9d0c4302ec7e02db072acfc05e6b7545176a",
          "body": "Adds fakerLoremWordsSample/fakerNarrowLongSample/fakerIpv6Sample to\nFakerBenchmark (email path already covered by fakerEmailSample) plus a\nlayer-1 smoke test asserting each returns a validly-shaped value, so the\nFR-007 allocation evidence for spec 010 has a pre-change baseline.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(faker): benchmark coverage for lorem/long/ipv6 hot paths",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "40b787dabcdb635278d8e7590d7e511e836199d8",
          "body": "Spec, plan (Test Model per FR, constitution check, complexity entry for\nreference-style parity testing), research R1-R7 incl. the #304 Long-span\nequivalence proof, data-model parity invariants, parity-and-gates contract,\nquickstart, 24-task breakdown, verification harness (14 claims: 11 verified,\n3 \n[…]\n remediation\n(I1/C1/C2/C3/D1 + LOW batch) folded in.\n\nScope: milestone 12 (v1.25.0 — Perf: Faker), refs #123 #124 #125 #129 #130\n#131 #139 #304.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): add 010-faker-syntax-perf spec/plan/tasks",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8a684d302fe9234360686e89a861daa9af8e6cc5",
          "body": "…5) (#307)\n\nRule 5 read literally banned any force-push on PR branches, contradicting\nthe rebase-only workflow and AGENTS.md, which requires updating PR branches\nwith --force-with-lease after a rebase. Rescope: force-push prohibited on\nmain and release/* only; PR branches remain rebase-only (no merg\n[…]\n per governance versioning policy (clarification,\nno semantic change). Flagged as finding D2 by /speckit-analyze of\nspecs/010-faker-syntax-perf.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(constitution): scope force-push ban to protected branches (v1.1.…",
          "author_name": "John",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:10:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "23f224384e68a5bf34f6b22852dd215a66088393",
          "body": "…ng.MaxValue (#297) (#300)",
          "is_bot": false,
          "headline": "fix(feeder): check both bounds when Faker.long range is wider than Lo…",
          "author_name": "Leonardo",
          "author_login": "Leonard013",
          "committed_at": "2026-07-21T03:20:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54c58da24ffc4d47bd288229ea67edd6c4930788",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update sbt-scalafmt from 2.6.1 to 2.6.2 (#302)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-21T03:17:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4aa5592ef8616118a4eaea1fa22209875b021539",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update scalafmt-core from 3.11.3 to 3.11.4 (#303)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-21T03:17:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b9ab7511b510c134a2a3d03829f2565eadf607c",
          "body": "Bumps the github-actions group with 1 update: [actions/setup-go](https://github.com/actions/setup-go).\n\n\nUpdates `actions/setup-go` from 6 to 7\n- [Release notes](https://github.com/actions/setup-go/releases)\n- [Commits](https://github.com/actions/setup-go/compare/v6...v7)\n\n---\nupdated-dependencies:\n\n[…]\nsion-update:semver-major\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump actions/setup-go in the github-actions group (#298)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-19T13:25:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9ce751b8e5eb028e2c39ecaf4e0da091b25b035e",
          "body": "* docs(speckit): add 009-faker-datetime-offset spec/plan/tasks (#294)\n\nSpecification, quality checklist, implementation plan, research\n(from-scratch API alternatives), data model, public API contract,\nquickstart, and the dependency-ordered task list (recorded with final\ncompletion notes) for the dis\n[…]\ne\ndefect in Faker.number.long is out of scope — tracked as #297.\n\nCloses #294\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(faker): discrete LocalDateTime offset generator (#294) (#296)",
          "author_name": "John",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T13:24:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5e721a3ddfd566cdaf0c8776390d559df7a818a0",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 008 quickstart — active-milestone amendment (2026-07-19)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "591c6022e66ff29439e32311541c1d7db76aed0d",
          "body": "…(2026-07-19)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 008 build-gates contract — active-milestone amendment …",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e1728f156de7d9d469ba4ce3682b5f0a38464773",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 008 data-model — active-milestone amendment (2026-07-19)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "41d0cf5ad28d0e4090fac941637528f407a2c20d",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 008 research — active-milestone amendment (2026-07-19)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "370feed86b8204d9361e617b842ac55e43c48197",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 008 plan — active-milestone amendment (2026-07-19)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c2e0a4b60eba1daa278836f81782a1b29131e79d",
          "body": "…milestone\n\nSupersedes clarification Q2 of 2026-07-03: bot dependency PRs are\nauto-assigned to the current active milestone; the standing \"maintenance\"\nmilestone (№29) is retired, its merged PRs reassigned to v1.25.0.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 008 spec — clarification 2026-07-19, deps join active …",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9f79601a031d499e4242c0b7d2b65c9e5fd0c4e4",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(testing): bot PRs auto-assigned to the active milestone",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9bc6b1fa5d7310c1b94040507a05b5c25f5686ac",
          "body": "Resolve the target milestone dynamically (lowest-numbered open, same\ndefinition as scripts/check-linkage.sh) instead of the hardcoded standing\n\"maintenance\" milestone, which is retired: dependency updates ship with a\nrelease, so they are tracked in that release's milestone. Degrade to a\nworkflow warning when no open milestone exists.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(steward): assign Steward PRs to the active milestone",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9a5218ce03764c1119c3fec9e45c1c508c4533bc",
          "body": "* build(deps): update sbt-ci-release from 1.11.2 to 1.12.0\n\n* fix(build): declare sbt-git explicitly for GitVersioning\n\nsbt-ci-release 1.12.0 dropped its transitive sbt-git dependency,\nbreaking build.sbt's enablePlugins(GitVersioning, ...). Version is\nstill derived via sbt-dynver (unchanged), so thi\n[…]\n-\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nCo-authored-by: John Axe <jigarkhwar88@gmail.com>\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": true,
          "headline": "build(deps): update sbt-ci-release from 1.11.2 to 1.12.0 (#288)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T21:22:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a360cea7692aa032ed14ffc4cc32afe11ec6b624",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update jackson-dataformat-yaml from 2.22.0 to 2.22.1 (#287)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:52:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b46327cd514e4618fec840387fb1b22cddacee8",
          "body": "…al (#289)\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update hibernate-validator from 9.1.1.Final to 9.1.2.Fin…",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:29:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b16e5ec410e2921b190ff9ee4399e6a9cd602922",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update postgresql from 42.7.12 to 42.7.13 (#291)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:29:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc228960d8ec1eb545a16d8e31b8394a58368f76",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update scalafmt-core from 3.11.1 to 3.11.3 (#293)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:29:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bff3575010fd4eaaa217309a38c69198342a1e6d",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update junit-jupiter from 6.1.1 to 6.1.2 (#290)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:28:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a77fdfe44345a2d75eb3116ed4367d6b91302e91",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update jackson-core from 2.22.0 to 2.22.1 (#286)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:22:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e478ff447ed7ea385ff8808865d99d23afb85352",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update sbt-bloop from 2.0.19 to 2.1.1 (#285)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:21:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a98bfd69424b460e5330e6390da14541185f8ac",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update slf4j-api from 2.0.17 to 2.0.18 (#284)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T12:43:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88a29a65aeb8e2bd9ecc30b96e0679fe48670d5c",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update postgresql from 42.7.11 to 42.7.12 (#283)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T12:43:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02e70a785f816770fff48e07c7b6146144ba3d8c",
          "body": "…al (#282)\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update hibernate-validator from 8.0.4.Final to 9.1.1.Fin…",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T12:43:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0647c987750b830f27b536975378164c11543229",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update typesafe:config from 1.4.5 to 1.4.9 (#281)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T12:43:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8907f96f340115e020d452dfd4ff963a444372f7",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update sbt-bloop from 2.0.6 to 2.0.19 (#280)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T12:43:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "627887979b2c65aab4272c292b95343bd7e89fcc",
          "body": "Enables bloop as Metals' BSP backend for warm-daemon incremental\ncompiles during dev loop (no JVM boot/task-graph tax per compile).\nCI is unaffected — workflows invoke sbt directly, no bloop daemon\npresent on runners, and .bloop/.bsp configs aren't committed.\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(build): add sbt-bloop plugin for local BSP compile server (#279)",
          "author_name": "John",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-05T05:43:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "871f6e5939001bc940388dbf5576d87c6eb5cbca",
          "body": "… exception (#278)\n\n* fix(ci): overlay the example's logback.xml in the scala-sbt template test\n\nFollow-up to the earlier banner-rendering discussion: the CI script\nonly copied test Scala sources into the scaffolded scala-sbt project,\nnever the example's own logback.xml — so the CI run used whatever\n[…]\nhe release\n'requires... MAJOR' — no longer accurate after this explicit call.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): scala-sbt banner logback overlay + record v1.24.0 versioning…",
          "author_name": "John",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-05T03:46:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7dc90f1805515db1e8b8c0ced76a03af0961157c",
          "body": "CI finding: 'Template / java-maven' failed with NoClassDefFoundError:\ncom/fasterxml/jackson/annotation/JsonSerializeAs, deep in WireMock's\nJacksonAnnotationIntrospector static init during Gatling's forked test\nrun.\n\nRoot cause reproduced locally by replaying the exact CI template-\nscaffolding steps \n[…]\n simulations to completion\nwith 0 failed events. Full regression still green (673 unit + 44 IT,\nlint zero findings, MiMa 0 unfiltered problems).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(deps): revert jackson-core -> jackson-databind swap (#276)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8750ff4642768b192714e2c17f746bcea59f2351",
          "body": "CI finding: the 'Publish Local' job runs publishLocal/publishM2, which\ninvokes scaladoc generation — a path none of this feature's regression\nruns (compile/test/IntegrationTest) exercise. Scaladoc could never\nresolve [[IllegalStateException]] (java.lang, needs external-doc\nmapping) or the @throws No\n[…]\nthe ci-local version override)\nsucceeds locally; full regression still green (673 unit + 44 IT, lint\nzero findings, MiMa 0 unfiltered problems).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): resolve Scaladoc link failures under -Werror in Templates.scala",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9d6b14da3c6f06864f449de39acd78d37ef02ad4",
          "body": "…ements\n\nMark tasks.md T001-T032 complete with commit references and evidence\nper task; add baseline.md capturing pre/post-feature coverage and\nwall-clock measurements (SC-006/T029/T004 support data).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): record 008 implementation progress and baseline measur…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "49805a378ca9d6d35af482cfeab0ac3f875f6c61",
          "body": "…eeder.apply\n\nBREAKING CHANGE: the Seq[String] and Seq[Map] apply() overloads (and\ncsv/ssv/tsv built on them) no longer take an implicit GatlingConfiguration\nparameter. Review discussion: the parameter was never read in either\nmethod body (flagged unused by -Wunused during #275) and was already\ninco\n[…]\n advisory (exit 0) locally.\n\nFull regression green: 673 unit + 44 IT; scalafix zero findings; MiMa\nreports 0 unfiltered problems against 1.23.0.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix!: remove dead implicit GatlingConfiguration from SeparatedValuesF…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d8e44a10e28460d2863777d2e370aae319477793",
          "body": "New rules: NoValInForComprehension, RedundantSyntax, ExplicitResultTypes,\nDisableSyntax.noXml, plus two DisableSyntax regexes — Thread.sleep\n(sleep-based synchronization banned per #109; LogCapture's bounded 1 ms\npoll probe carries a justified suppression) and println (use the\nlogger). Auto-fixes la\n[…]\nified: zero findings on the branch; seeded println + Thread.sleep\nboth flagged naming the rule; full suite green (673 unit + 44 IT);\nMiMa clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(lint): extend the scalafix rule set (#273)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "889829879a53a534550e634b98ec415467e710de",
          "body": "…pins (#276)\n\nReview findings: (a) a missing/renamed 'maintenance' milestone would\nfail the whole (already successful) Steward run — the gh pr edit now\nsurfaces a ::warning:: per PR instead; (b) the explicit pins of\npreviously-transitive versions (slf4j-api, config, json4s/pureconfig\nmodules) get a header note in Dependencies.scala — Steward bumps them\nindependently of their parents, reviewers must keep them in step.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): degrade steward milestone step gracefully, document version …",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ad3771f9d79dac3783dbb816615ab7e6eda061d0",
          "body": "…211)\n\nReview finding: between releasing the ephemeral port and connecting to\nit, the OS may hand the same port to another process, sending the\ncrash-branch tests down an unintended path (suspected source of a rare\nsuite flake — 18/20 in one SC-006 series, unreproduced under\ndiagnostics). closedPort() now double-checks that connecting is\nactually refused and retries with a fresh port (up to 5 attempts).\n10/10 targeted runs green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(redis): close the port-reuse race in the crash-branch fixture (#…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dac50f2f61f3a7ccd9cc4a43d24401dd3d34b72b",
          "body": "Review finding: the step was silently dead on CI. (a) Without pipefail\n$? captured tee's exit code, always 0 — the step could never go amber\nand continue-on-error was decorative. (b) The workflow-level color env\n(sbt.color=true, FORCE_COLOR=1) wraps [error] lines in ANSI codes, so\nthe grep never mat\n[…]\ns plain MiMa log through the exact\ngrep/sed pipeline (colored: nothing; plain: annotation emitted) and a\npipefail status-capture probe (0 -> 1).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): make the advisory MiMa step actually emit annotations (#274)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6d1b8e388821bdfbd862cf22c9a66e8672bb2d1f",
          "body": "Reshapes the Option.when/.map/.collect chain introduced by the lint\nremediation into an equivalent for-comprehension with an intermediate\nbinding and guard — drops the artificial (parts, nameValue) tuple.\nMaintainer style feedback; belongs with the #273 lint changes (fixup\nsquash was blocked by an external file-watcher re-dirtying the worktree\nmid-rebase — squash on PR merge instead).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(storage): prefer for-comprehension in CookieParser (#273)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aa79cfb98fee610f358349041f2a5468b1e86b82",
          "body": "…#276)\n\nsbt-explicit-dependencies 0.3.1 (sbt 1.12.13 compatibility verified) as\na REPORT-ONLY task — never CI-gated (clarification Q4), run manually\nbefore each release. Triage to zero findings: direct bytecode deps\ndeclared explicitly (json4s modules replace the unused json4s-jackson\numbrella; pure\n[…]\no.gatling (host\nruntime is a deliberate maintainer decision). Full suite green after\nthe dependency-graph changes: 673 unit + 44 IT; MiMa clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(deps): steward milestone wiring and dependency-hygiene report (…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "64c580d9b0baf3df8458b8bc88e90cf099e41c42",
          "body": "scalacOptions gain -Xlint:_,-infer-any, -Wdead-code and -Werror on all\nscopes (Compile/Test/IntegrationTest), always on — local == CI.\nDocumented exclusion: infer-any (heterogeneous Map[String, Any] feeder\nrecords are the library's domain type). Remediation: four unused\nimports dropped; SeparatedVal\n[…]\nlation; a narrow\n@nowarn(cat=other-match-analysis) escape compiles. Full suite green\nunder -Werror: 673 unit + 44 IT. Docs: TESTING.md gate row.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(diagnostics): escalate curated compiler warnings to errors (#275)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bd69305d519141d129de4e900850b50736e2ea2d",
          "body": "sbt-mima-plugin 1.1.6, baseline org.galaxio %% gatling-picatinny %\n1.23.0 (clean pass). ADVISORY per clarification 2026-07-04: never fails\nthe build. Local: mimaFindBinaryIssues (prints findings, exits green).\nCI: new binary-compat job runs mimaReportBinaryIssues under\ncontinue-on-error and re-emits\n[…]\nNG.md gate row; AGENTS.md Release Process gains three\nentries (review warnings before tagging, run hygiene report, bump\nbaseline after release).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(compat): add advisory MiMa binary-compatibility check (#274)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0194b0a6997dfd414a2249908389add78b6450f5",
          "body": "sbt-scalafix 0.14.7 with SemanticDB on all scopes; rules: DisableSyntax\n(no return/asInstanceOf/isInstanceOf/finalize + a nullComparison regex\nper the AGENTS.md idiom rules — full noNulls would bury real findings\nunder JVM-interop suppressions), ProcedureSyntax, RemoveUnused (fed by\nnew -Wunused fla\n[…]\nmmands mirror.\nSeeded probes: null comparison fails naming rule/file/line; unused\nimport auto-removed by the fix command; fix+format idempotent.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(lint): add scalafix idiomatic lint gate (#273)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2a9b34db065784d18fa3297ff347a5e31a02af12",
          "body": "Real resource template through the production Templates path, resolved\nagainst a real Gatling session (loadForTest bootstrap, no mocked\nruntime): exact rendered output asserted byte-for-byte plus the\nmissing-session-variable failure naming the variable.\n\nIssue narrowed: JWT integration coverage land\n[…]\nconforms to the constitution's container-backed layer — verified green\nas part of this change. The template pipeline was the last remaining\ngap.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(templates): end-to-end template render coverage (#81)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b712cc0f903ecaf79bce5b89f8b1f02972766f63",
          "body": "RandomFeedersSpec now pins minSuccessful and maxDiscardedFactor via an\nexplicit PropertyCheckConfiguration instead of inheriting drifting\nScalaCheck defaults; the discard budget covers the suite's heavy\nwhenever-filters. Shrink verified: a deliberately failing length\nproperty reports the minimal boundary counter-example ('3 was not less\nthan 3'), not a long random sample.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(feeders): explicit property-check configuration (#121)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aa84d987af63c8431c30732b0006557cf779e018",
          "body": "All 5 asInstanceOf sites replaced with a ClassTag-guarded extraction\nhelper: a shape mismatch now fails with 'expected <type> but got\n<type>: <value>' instead of a bare ClassCastException. Negative case\nincluded (wrong-type extraction produces the descriptive message).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(test): typed extraction in Redis integration spec (#110)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8c44eac75c8e02ca9b7d9f5674621a8795189ceb",
          "body": "The missing-file case used a hardcoded absolute /tmp path — race-prone\nunder parallel runs and non-portable on Windows. It now derives the\npath from a per-run Files.createTempDirectory with cleanup.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(test): isolate storage specs in per-run temp dirs (#108)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0028eab7e2c8b7ab7c93869062b62a350ce3d201",
          "body": "- TemplatesSpec: drive the production Templates discovery (via\n  GatlingTestBootstrap providing Predef._configuration) instead of a\n  local re-implementation of the directory walk; mutation-probed\n  (broken production discovery turns the suite red).\n- NIR/NIF/PSRNSP: independent check-digit oracles \n[…]\nrect modes pinned (NEVER returns the 302 itself, NORMAL follows\n  to the exact final body).\n\nCoverage: 77.75/68.29 -> 78.77/69.97 (stmt/branch).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(test): de-tautologize suites and cover failure paths (#211)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d7cda80e22612603ebf3ed59c49c1f6b1ed1761c",
          "body": "…icy (#80)\n\nData-driven per constitution III: measured 77.75% stmt / 68.29% branch\n(2026-07-04, unit+it, benchmarks excluded) -> floors 75/66, within the\n5-point slack rule. Ratchet policy documented in TESTING.md (floors only\nmove up, no padding, shared benchmark exclusion); floor references\nupdated in AGENTS.md and constitution (v1.1.4, PATCH). Negative probe\nverified: floor 80 fails the build with 'Coverage minimum was not\nreached'.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(coverage): ratchet floors to 75/66 and document the ratchet pol…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e1a62141fbfba2c46d3557388663b9c359f7f584",
          "body": "Shared benchmark-exclusion definition (files .*Benchmark.*, package\norg.galaxio.gatling.jmh.*) drives coverageExcludedFiles/Packages; the\nsame definition will feed the scalafix and -Werror source filters\n(FR-022). Honest post-exclusion measurement: 77.75% stmt / 68.29%\nbranch (was 75.77% stmt with benchmarks inflating the denominator).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(coverage): exclude benchmark sources from coverage (#210)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "694ab98c7f5697e32eec5e390c19e26779bfd0af",
          "body": "Milestone v1.24.0 (Coverage & test infra): spec with 8 user stories\n(coverage honesty, de-tautologization, integration gaps, test hygiene,\nscalafix lint gate, advisory MiMa check, strict diagnostics, dependency\nautomation), clarifications, plan with Test Model and constitution\ncheck, research R1-R9 \n[…]\nAnalysis findings I1-I6/A1-A2/C1-C4/U1\nremediated (real file paths, existing workflow/spec reuse, MiMa\nadvisory mechanism, both redirect modes).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): add 008-coverage-test-infra spec/plan/tasks",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7a9c74491b38870382d287665893892eef457a02",
          "body": "Metals MCP generates .bloop/, .metals/, metals.sbt, and .mcp.json under\nthe workspace and nested project/ dirs during BSP import; none are\nmeant to be checked in.",
          "is_bot": false,
          "headline": "chore(gitignore): ignore metals/bloop build-tool artifacts",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-03T02:35:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e94cb2ff8d99b3f9d90d8e00b869583f89572d1b",
          "body": "save/restore activeQueue instead of unconditional remove(), so a\ncapture window opened while another capture is already active on\nthe same thread doesn't wipe the outer window's queue.",
          "is_bot": false,
          "headline": "fix(test): restore prior ThreadLocal on nested LogCapture.events",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-03T02:26:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56caded0a50cf88c9cfd0d9309d8d95608c1c08c",
          "body": null,
          "is_bot": false,
          "headline": "style: reformat LogCapture with scalafmt",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-03T02:26:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a33670d25dcf0d48df411cee3a2f96dfb1b2f86",
          "body": "…(#259)\n\nThread names are not unique across JVM pools and can be mutated by the\ntest runner at suite boundaries, causing CookieParserSpec to either\ncapture too many or too few WARN events (~4.5 % flake rate — 2 of 44\nCI jobs failed on distinct commits over the last 7 days).\n\nReplace @volatile var si\n[…]\nronized wrapper is\nretained for level save/set/restore serialisation.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013wXdKX6iGMtGdLSWjfgCkm",
          "is_bot": false,
          "headline": "fix(test): replace thread-name filter with ThreadLocal in LogCapture …",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-03T02:26:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eaebb90e078b53a09686d7e0a3235efbccd38994",
          "body": null,
          "is_bot": true,
          "headline": "Add 'Reformat with scalafmt 3.11.1' to .git-blame-ignore-revs",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-30T09:27:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba8f487f64de963588426cb35ce29004ca3f3c42",
          "body": "Executed command: scalafmt --non-interactive",
          "is_bot": true,
          "headline": "Reformat with scalafmt 3.11.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-30T09:27:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27de7b08cfa6f8d301f44f37b6a9869d7ab5b2f5",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update scalafmt-core to 3.11.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-30T09:27:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25bf60acab3391de3a4d4ffe089a162b019adf58",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update junit-jupiter to 6.1.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-29T22:08:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99d53a39276cc8c8ff0ae3095425ad99e54fa5b6",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update iban4j to 3.2.13-RELEASE",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-29T22:08:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff4dcc633de6fdea169ca4f7679110b47ede4510",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update caelum-stella-core to 2.2.2",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-29T22:08:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e349cb788215291c1420e494cf796ef4061c8ea",
          "body": "…stions preset\n\nThe preset overwrites speckit-clarify / speckit-checklist and, as shipped, drops\nfirst-party governance steps. Re-apply them on top of the AskUserQuestion picker so\nthe upgrade is additive, not a regression.\n\n- Re-insert constitution.md loading (clarify step 2, checklist step 1).\n- R\n[…]\ned.\n- Mark both SKILL.md files as LOCAL PATCH so a future `specify preset add` is a\n  conscious re-clobber, not a silent governance regression.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(speckit): preserve first-party governance over the claude-ask-que…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-29T21:38:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d51a2646ad1833b9659458ec49f96cae3ca34fdf",
          "body": "…-questions preset\n\nVendor the installed extension/preset payloads, the manifest, and the generated\nslash-command skills so the toolkit works on a fresh clone without re-running the CLI.\n\n- Extensions: worktrees (dango85/spec-kit-worktree-parallel v1.3.2), harness\n  (formin/spec-kit-harness v1.0.0).\n[…]\nmespace; changelog: empty `requires`, no speckit_version).\n- Cursor-only worktrees examples and stray upstream correspondence are not vendored.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(speckit): install worktrees + harness extensions and claude-ask…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-29T21:38:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5d13e04d45851b4fad7312fe5f7f0086124b00f9",
          "body": "Per spec-kit's guidance, the extension/preset manifests, payloads and generated\ncommands are the shared record; only local-machine state is ignored. Narrow the\npreviously over-broad ignores (from 907908e) so payloads can be tracked, and stop\ntracking the local install metadata.\n\n- .gitignore: ignore\n[…]\nand .specify/presets (was: the whole payload trees + worktrees skills).\n- Untrack .specify/extensions/.registry (per-machine install metadata).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(speckit): narrow version control to the spec-kit idiom",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-29T21:38:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "39c72aaa4911f60358c2910df016d1bbb054bbea",
          "body": "…kage (#254)\n\nPer the linkage contract, a PR may merge with just a milestone — closing an\nissue is optional, and we never fabricate issues to satisfy the gate. The\nchecker was stricter than the contract: it hard-failed any PR that closed no\nissue, in both the --pr merge gate and the audit/tag-readin\n[…]\ng PR and, at tag\n  time, be closed.\n\nVerified: `--pr 253` now PASS (exit 0); `--for-tag v1.24.0` still blocks\n(exit 1) because PR #253 is OPEN.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(scripts): make issue closure optional on the PR side of check-lin…",
          "author_name": "John",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-29T21:30:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "83147b96e914d0362876bdbe0e6206d3cae4fa77",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update hibernate-validator to 8.0.4.Final",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-29T11:40:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7fc3330bd6857683cc877fc17cadef65d3a4a389",
          "body": "Adds the spec-kit `bug` (assess/fix/test) and `git` (commit/feature/initialize/\nremote/validate) extensions: registry entries in .specify/ plus their generated\nspeckit-* skills.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(speckit): install bug and git extensions",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T19:44:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "55b8a38b9ddef3b5ba47570812de9fdd8eee27f5",
          "body": "Bumps the github-actions group with 2 updates: [EnricoMi/publish-unit-test-result-action](https://github.com/enricomi/publish-unit-test-result-action) and [actions/cache](https://github.com/actions/cache).\n\n\nUpdates `EnricoMi/publish-unit-test-result-action` from 2.9.0 to 2.24.0\n- [Release notes](ht\n[…]\nhe\n  dependency-version: '6'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump the github-actions group with 2 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-28T18:16:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2cb73ebff99c7cccf74a37ecc776c45c03c6f88d",
          "body": "Zero-token, deterministic gate for issue<->PR<->milestone linkage at release.\n\n- scripts/check-linkage.sh: --pr <N> gate one PR; --for-tag vX.Y.Z gate a\n  release (version -> its milestone, patch -> vX.Y.0); [milestone]/--tag audit.\n- .claude/hooks/linkage-guard.sh: PreToolUse(Bash) guard, fires onl\n[…]\nker blocks tags.\n- .claude/settings.json: registers the guard.\n- AGENTS.md: restore concise Milestones (ALWAYS) section (drop #244/#246 prose).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: linkage gate — check-linkage.sh + tag-only guard hook",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T17:48:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c24e0f47a39457861b4e31833ceb953ed06c0950",
          "body": "…#245)\n\nVerifies every milestone PR has a closing issue in the same milestone;\nwith --tag, asserts all issues closed and all PRs merged before a release tag.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(scripts): add check-linkage.sh enforcing the linkage contract (…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T08:39:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "07bb60ac1a6444a12ed9343c078bdc33dce6c856",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(agents): add concise issue/PR/milestone linkage contract (#245)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T08:39:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a77e683335a2db62d1fa991941df4c63c018e9fa",
          "body": "PR #244 duplicated existing milestone rules in prose and added an\nunenforced 'before tagging' bullet. Replaced by a concise entity\ncontract plus an executable check (scripts/check-linkage.sh).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "revert: drop over-verbose milestone/issue linkage block (#244)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T08:39:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "90950b36251aecc019e51a74e12d426e625a13bd",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(agents): require milestone + issue linkage before release tag",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T08:18:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "987ed96a9dfd46c950c341b93e9837bc28126699",
          "body": "boolean and gender tests drew unseeded ThreadLocalRandom samples and asserted\nevery possible value appeared (P(fail) ~ 1e-30 / 1e-18). Faker generators are\nnot seedable, so deterministic full-coverage isn't possible here: boolean\nbecomes a smoke test (samples without error); gender keeps a deterministic\ndomain-validity guard (every draw is a valid Gender — also catches a future\nsealed variant). Reuse the shared sampleCount constant.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: de-flake Faker boolean/gender coverage tests",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T07:31:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9a340f2a7ea1b9db0564559f323e29cb14a20c2b",
          "body": "ExampleSmokeSpec lived in the library's src/test under an `examples`\npackage but was a 521-line unit suite re-asserting feeder behavior that\nis already covered by RandomFeedersSpec, GeneratedFeederSpec, and\nSeparatedValuesFeederSpec. It had no Mocks/ActorSystem harness, no real\nSimulation, and no se\n[…]\nampleSmokeSpec\nreference from TESTING.md layer 2 (it never used the Mocks harness that\nlayer requires); keep TransactionsSpec as the reference.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: remove mislabeled ExampleSmokeSpec unit suite",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T07:19:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7dccce116f133d4ec5f30c3dd68f2d5d0c31a95c",
          "body": "CookieParserSpec \"warn and drop a non-numeric Max-Age\" was flaky on the\nJava-17 CI job: it intermittently captured 0 WARN lines instead of 1\n(\"0 was not equal to 1\"). Root cause is a logback COWArrayList data race,\nnot a cookie-parsing bug.\n\nLogCapture attached/detached its appender to org.galaxio.g\n[…]\n000 captures under heavy foreign\nload); full `sbt test` green (825 passed) across 4 fresh runs.\n\nCookieParser production behavior is unchanged.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(testutil): make LogCapture deterministic under parallel suites",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T06:52:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1640b674ed3ea47fbf5cce49416622be082d85b8",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: slim README to overview + docs catalog; de-hardcode versions",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "03e21f2b2f317e34cc1f703e4b771b2a0e2ea7b3",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: link logging guide into the migration guide; tag HOCON snippet",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "08636fd228a50c0a2a0545124524b4142772eb96",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add examples & testing guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7bcbe7a451794a154b671f54b8913fad661fa30a",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add migration guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3942f4aa319609b5f8a02a942c62b3a0a692ac36",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add assertions guide + deprecation notice (#234)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e21d21f3d3a16a1da3cfd4076c2e6841c28f9ed8",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add profile guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "23cff8039e4befa82826c729f63408b4f89c28a5",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add templates guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9e456b7eb38465337863a73cf6e56d1b86b82526",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add Redis guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "215e749c1438900ee4a900a8e6141a771344fdf1",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add transactions guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a0d58bfc870e4750087075adfde30e94435b5eac",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add JWT guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e9d0c9150094fb849fee8ef46123445a9a15e7c0",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add feeders guide (Faker API, legacy, Vault, CSV)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "977a64d85e890caa16fcb8efa8120f54ca9416c4",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add configuration guide (SimulationConfig)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 65,
      "commits_last_year": 292,
      "latest_release_at": "2026-07-21T21:36:20Z",
      "latest_release_tag": "v1.25.0",
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 17,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 3.3
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 1,
      "stars": 12,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-19",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 61
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 65616,
      "source_files_sampled": 235,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 7798
    },
    "dependencies": {
      "manifests": [],
      "advisories": {
        "error": "No resolved dependencies to assess",
        "scope": "repository_graph",
        "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": [],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [],
        "collected": true,
        "truncated": false,
        "total_count": 0,
        "direct_count": 0,
        "indirect_count": 0
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 150,
        "open_issues": 61,
        "closed_ratio": 0.582,
        "closed_issues": 85,
        "closed_unmerged_prs": 11
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "jigarkhwar",
          "commits": 263,
          "avatar_url": "https://avatars.githubusercontent.com/u/11795372?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        },
        {
          "type": "User",
          "login": "Leonard013",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/95079472?v=4"
        },
        {
          "type": "User",
          "login": "chepk",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/41194083?v=4"
        }
      ],
      "contributors_sampled": 4,
      "top_contributor_share": 0.989
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml",
        "scala-steward.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "12 out of 12 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 1,
            "reason": "Found 1/8 approved changesets -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 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": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 1,
            "reason": "dependency not pinned by hash detected -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "1d1fe982f7691de288726629e51088064c7c49c3",
        "ran_at": "2026-07-27T01:01:10Z",
        "aggregate_score": 5.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-26T12:42:49Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-21T20:30:24Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 11,
          "created_at": "2025-02-05T11:03:15Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 79,
          "created_at": "2026-05-25T22:52:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 83,
          "created_at": "2026-05-25T22:53:03Z",
          "last_comment_at": "2026-06-21T05:37:28Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 84,
          "created_at": "2026-05-25T22:53:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 85,
          "created_at": "2026-05-25T22:53:07Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 86,
          "created_at": "2026-05-25T22:53:08Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 90,
          "created_at": "2026-05-25T22:53:15Z",
          "last_comment_at": "2026-06-21T05:37:29Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 91,
          "created_at": "2026-05-25T22:53:17Z",
          "last_comment_at": "2026-06-21T05:37:30Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 92,
          "created_at": "2026-05-25T22:53:18Z",
          "last_comment_at": "2026-06-21T05:37:32Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 95,
          "created_at": "2026-05-25T22:53:24Z",
          "last_comment_at": "2026-06-21T05:37:33Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 96,
          "created_at": "2026-05-25T22:53:25Z",
          "last_comment_at": "2026-06-21T05:37:34Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 97,
          "created_at": "2026-05-25T22:53:27Z",
          "last_comment_at": "2026-06-21T05:37:35Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 98,
          "created_at": "2026-05-25T22:53:28Z",
          "last_comment_at": "2026-06-21T05:37:37Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 99,
          "created_at": "2026-05-25T22:53:31Z",
          "last_comment_at": "2026-06-21T05:37:38Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 100,
          "created_at": "2026-05-25T22:53:33Z",
          "last_comment_at": "2026-06-21T05:37:39Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 101,
          "created_at": "2026-05-25T22:53:34Z",
          "last_comment_at": "2026-06-21T05:37:40Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 102,
          "created_at": "2026-05-25T22:53:36Z",
          "last_comment_at": "2026-06-21T05:37:41Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 103,
          "created_at": "2026-05-25T22:53:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 104,
          "created_at": "2026-05-25T22:53:39Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 105,
          "created_at": "2026-05-25T22:53:41Z",
          "last_comment_at": "2026-06-21T05:37:42Z",
          "last_comment_author": "jigarkhwar"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/galax-io/gatling-picatinny",
    "host": "github.com",
    "name": "gatling-picatinny",
    "owner": "galax-io"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 59,
      "inputs": {
        "security": 55,
        "vitality": 86,
        "community": 32,
        "governance": 42,
        "engineering": 75
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 86,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "commits_last_year": 292,
              "human_commit_share": 0.76,
              "days_since_last_push": 5,
              "active_weeks_last_year": 17
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "17/52 weeks with commits",
                "points": 11.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 17
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "292 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 292
                    }
                  }
                ],
                "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": 65,
              "latest_release_tag": "v1.25.0",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 3.3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "65 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 65
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.3
                    }
                  }
                ],
                "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": 5,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 5 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 32,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 17,
            "inputs": {
              "forks": 1,
              "stars": 12,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "12 stars",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "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": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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 (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 42,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 4,
              "top_contributor_share": 0.989
            },
            "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 99% of commits",
                "points": 0.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "4 contributors",
                "points": 5.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "merged_prs": 150,
              "open_issues": 61,
              "closed_issues": 85,
              "issue_closed_ratio": 0.582,
              "closed_unmerged_prs": 11
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "58% of issues closed",
                "points": 27.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 58
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "150/161 decided PRs merged",
                "points": 35.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 150,
                      "decided": 161
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/8 approved changesets -- score normalized to 1",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "followers": 18,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "galax-io",
              "public_repos": 15,
              "account_age_days": 1006
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "18 followers of galax-io",
                "points": 9.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 18,
                      "login": "galax-io"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "15 public repos, account ~2 yr old",
                "points": 14.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 15
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 2
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 75,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "12 out of 12 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "gatling",
                "performance",
                "performance-testing",
                "gatling-plugin",
                "dsl",
                "feeders",
                "java",
                "jwt",
                "kotlin",
                "load-testing",
                "redis",
                "scala"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": 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": "12 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 55,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 55,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "12 out of 12 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 1/8 approved changesets -- score normalized to 1",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 0.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file 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": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "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": "moderate",
        "name": "AI Readiness",
        "value": 67,
        "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",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 7798
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "76 of 76 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 76,
                      "sampled": 76
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 52,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.73,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.02
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "Scala (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Scala"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "73 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 73,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "2 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 2,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Scala",
              "largest_source_bytes": 65616,
              "source_files_sampled": 235,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Scala (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Scala"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/235 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 235,
                      "oversized": 1
                    }
                  }
                ],
                "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"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T01:01:29.571823Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/g/galax-io/gatling-picatinny.svg",
  "full_name": "galax-io/gatling-picatinny",
  "license_state": "standard",
  "license_spdx": "Apache-2.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 Statistiken.