Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-23 16:10 UTC

r-lib / lintr

Static Code Analysis for R

REigene Lizenz★ 1.288 Sterne⑂ 200 Forksseit Sept. 2014Auf GitHub ansehen ↗

r-lib/lintr erreicht einen Gesundheitsindex von 73 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (86/100) ab, am schwächsten bei AI Readiness (34/100). Zuletzt heute aktualisiert. 2 Mitwirkende tragen den Großteil der jüngsten Arbeit.

73
gesamt / 100
Gut

Software-Gesundheitsindex

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

73
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

R infrastructureOrganisation
748 Follower165 öffentliche Reposseit Okt. 2016

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 0 Tagen
24.2/36Commit-Rhythmus — 35/52 Wochen mit Commits
18/18Commit-Volumen — 113 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year113
human_commit_share0,89
days_since_last_push0
active_weeks_last_year35
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 17 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 7 Tagen
12.6/27Release-Rhythmus — ein Release etwa alle 227,6 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count17
latest_release_tagv3.4.0
releases_from_tagsnein
days_since_latest_release7
mean_days_between_releases227,6
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?

78Gut · 18 % des Gesamtindex
Wie die Bewertung erfolgt
50.4/60Stars — 1.288 Stars
19.2/25Forks — 200 Forks
7/15Watcher — 19 Watcher
Verwendete Eingangsdaten
forks200
stars1.288
watchers19
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
16.9/22.5Lizenz — Lizenzdatei vorhanden, keine anerkannte Lizenz
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductja
has_pull_request_templatenein

Nachhaltigkeit & Governance

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

71Gut · 24 % des Gesamtindex
Wie die Bewertung erfolgt
25.2/54Bus-Faktor — 2 Beitragende decken die Hälfte aller Commits ab
14.4/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 36 % der Commits
13.5/13.5Breite der Beitragenden — 99 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 42 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor2
contributors_sampled99
top_contributor_share0,36
Wie die Bewertung erfolgt
38/46.8Issue-Lösungsquote — 81 % der Issues geschlossen
34.8/38.3PR-Annahme — 1.382/1.517 entschiedene PRs gemergt
4.5/15OpenSSF Scorecard: Code-Review — Found 10/28 approved changesets -- score normalized to 3
Verwendete Eingangsdaten
merged_prs1.382
open_issues293
closed_issues1.274
issue_closed_ratio0,813
closed_unmerged_prs135
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
20.7/25Reichweite des Inhabers — 748 Follower von r-lib
25/25Kontohistorie — 165 öffentliche Repos, Kontoalter ca. 9 Jahre
Verwendete Eingangsdaten
followers748
owner_typeOrganization
is_verified
owner_loginr-lib
public_repos165
account_age_days3.579

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

71Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 10 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 27 out of 27 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
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://lintr.r-lib.org
10/10Repository-Beschreibung
10/10Topics — 2 Topics
10/10Wiki
Verwendete Eingangsdaten
topicslinter, r
has_wikija
homepagehttps://lintr.r-lib.org
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

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

58Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — keine Daten
2.5/2.5CI-Tests — 27 out of 27 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
2.2/7.5Code-Review — Found 10/28 approved changesets -- score normalized to 3
2.5/2.5Contributors — project has 42 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
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_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate5,8
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): branch_protection, packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

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

34Gefährdet · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 83 von 89 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,933
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
0/11Statische Typprüfung
10/10Reproduzierbare Umgebung — devcontainer, Dockerfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
8/8Automatisierte Wartung — 11 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfileja
typed_languagenein
bootstrap_files
has_devcontainerja
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0,11
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — R ohne Typprüfungs-Konfiguration
0/55Handhabbare Dateigrößen — keine Quelldateien erkannt
Verwendete Eingangsdaten
primary_languageR
largest_source_bytes
source_files_sampled0
oversized_source_files0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Handhabbare Dateigrößen. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — example
Verwendete Eingangsdaten
example_dirsexample
has_mcp_signalnein
api_schema_files

Eckdaten

1.288GitHub-Sterne
99Mitwirkende
113Commits, letzte 12 Monate
0Tage seit letztem Push
17Releases
2Bus-Faktor
293offene Issues
Paket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 200 ⇿
0Sterne
200Forks
16Releases

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

0408012016020019842014-092020-082026-07
Major 3Minor 3Patch 9

Jeder Punkt umfasst 11 Tage.

OpenSSF Scorecard 5.8 / 10
5.8Gesamtwert

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-23 16:09 UTC

10Binary-Artifactsno binaries found in the repo
k. A.Branch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests27 out of 27 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
3Code-ReviewFound 10/28 approved changesets -- score normalized to 3
10Contributorsproject has 42 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
10Maintained30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
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": [
        "linter",
        "r"
      ],
      "is_fork": false,
      "size_kb": 33890,
      "has_wiki": true,
      "homepage": "https://lintr.r-lib.org",
      "languages": {
        "R": 1353938,
        "Rez": 52,
        "TeX": 4798,
        "HTML": 1728,
        "Dockerfile": 1068,
        "Vim Script": 3139
      },
      "pushed_at": "2026-07-23T00:05:23Z",
      "created_at": "2014-09-28T02:48:15Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-21T05:51:31Z",
      "description": "Static Code Analysis for R",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "R",
      "significant_languages": [
        "R"
      ]
    },
    "owner": {
      "blog": null,
      "name": "R infrastructure",
      "type": "Organization",
      "login": "r-lib",
      "company": null,
      "location": null,
      "followers": 748,
      "avatar_url": "https://avatars.githubusercontent.com/u/22618716?v=4",
      "created_at": "2016-10-04T14:31:21Z",
      "is_verified": null,
      "public_repos": 165,
      "account_age_days": 3579
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v3.4.0",
          "kind": "minor",
          "published_at": "2026-07-16T04:57:25Z"
        },
        {
          "tag": "v3.3.0-1",
          "kind": "prerelease",
          "published_at": "2025-11-27T15:19:42Z"
        },
        {
          "tag": "v3.2.0",
          "kind": "minor",
          "published_at": "2025-02-12T17:32:17Z"
        },
        {
          "tag": "v3.1.2",
          "kind": "patch",
          "published_at": "2024-03-25T17:42:03Z"
        },
        {
          "tag": "v3.1.1",
          "kind": "patch",
          "published_at": "2023-11-09T19:18:01Z"
        },
        {
          "tag": "v3.1.0",
          "kind": "minor",
          "published_at": "2023-07-19T18:05:38Z"
        },
        {
          "tag": "v3.0.2",
          "kind": "patch",
          "published_at": "2022-10-20T12:48:13Z"
        },
        {
          "tag": "v3.0.1",
          "kind": "patch",
          "published_at": "2022-09-16T15:58:22Z"
        },
        {
          "tag": "v3.0.0",
          "kind": "major",
          "published_at": "2022-06-14T12:35:38Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2020-12-05T13:07:05Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2019-10-01T18:51:02Z"
        },
        {
          "tag": "v1.0.3",
          "kind": "patch",
          "published_at": "2019-09-27T14:40:43Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2017-11-13T17:10:55Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2017-08-14T20:14:47Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2019-09-27T14:40:16Z"
        },
        {
          "tag": "v0.3.3",
          "kind": "patch",
          "published_at": "2019-09-27T14:46:18Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2014-12-01T14:34:38Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "199d40a3ea79833318faadb72e0a527e5b6ad8a4",
          "body": "* First pass at XPath style skill\n\n* incorporate insights from the 'robustness' wiki\n\n* more insights from #3003 round\n\n* insights from #2860\n\n* Incorporate insights from #3092\n\n* Restore xml_find_function_calls guidance in xpath-style skill",
          "is_bot": false,
          "headline": "Add an xpath-style SKILL, and other skill/subagent refinements (#3094)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-21T05:51:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4038b123a156b0132bc4fb833999e3a4db9417c",
          "body": "* Gemini: initial implementation\n\n* tweaks\n\n* Headings in NEWS\n\n* fix-up NEWS merge\n\n* fix our own lints",
          "is_bot": false,
          "headline": "New expect_shape_linter (#3089)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-20T16:21:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "708e0475e028e56673c98a645781155a3b04f28d",
          "body": "* Gemini: fix\n\n* XPath style, NEWS entry\n\n* return() not needed in tests\n\n* extra test case for 2nd issue fixed here",
          "is_bot": false,
          "headline": "Require unreachable expression parent to be '{' (#3085)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-20T14:49:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "257424b6c899f2f4f4c69faa0319ac566d0f6085",
          "body": "* Gemini: proposed fix\n\n* Gemini: try a more direct approach\n\n* NEWS\n\n* Gemini: handling of another observed false positive",
          "is_bot": false,
          "headline": "Restore vector_logic_linter() working inside function bodies (#3086)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-19T06:33:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de7b1e81452f60cdab14d1f6f732c3fa1ff9c21a",
          "body": null,
          "is_bot": false,
          "headline": "iterate .agents testing rules (#3081)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-16T21:36:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b5201f285be6b4e1445f3e7de91425d1ac746d0",
          "body": "* Gemini-authored tests for 100% coverage\n\n* Gemini: force tests to use the public API\n\n* fix Gemini lints\n\n* diff shrinking\n\n* style pass\n\n* initial round of feedback+tidying\n\n* just delete unreachable code, better comment\n\n* Gemini: avoid mocking if possible\n\n* Gemini: better + more tests\n\n* style\n[…]\node\n\n* Gemini: public API tests\n\n* nocov whole range for build-time-only unexported code\n\n* Gemini: another test for last uncovered line of get_encoding_from_dcf\n\n* one final nocov with internal error",
          "is_bot": false,
          "headline": "Tests for 100% code coverage (#3080)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-16T21:09:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "178882ff24dc887de0b1c482ca5c2eb932a17c1c",
          "body": null,
          "is_bot": false,
          "headline": "correct backport_linter configuration",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-16T05:55:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd7322a391db87d92a578a8627783c6c9c4246af",
          "body": null,
          "is_bot": false,
          "headline": "bump to dev",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-16T04:58:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae8cda850cbbd07191ed7fbd12d7e967353ebe45",
          "body": "url fix\n\ndont include empty directory\n\nbehavioral fix for old ...names behavior\n\nexhaustive backports check",
          "is_bot": false,
          "headline": "->CRAN version, tidy NEWS",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-16T04:54:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fbfc2d6691e200f2d124314e5adc49b4e760fdd7",
          "body": "* Add developing-linters and testing-linters skills to .agents\n\n* ignore the new folder in R CMD build\n\n* Another round of agents\n\n* revise the takeaway from %:::% change\n\n* PR review agent\n\n* clarify the reviewer is read-only-ish\n\n* more learnings summarized\n\n* kill 'cyclocomp' directive (hyperfocused)\n\n* manual edits to improve poor review quality\n\n* refinement\n\n* fix description of rex::rex escaping",
          "is_bot": false,
          "headline": "Add some SKILLs and agents (#3074)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-15T06:47:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4eeceb8e9e7ee61f6f2b60da2e71879d91523f71",
          "body": "Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>\nCo-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Lint `paste(deparse(x), collapse)` in favor of `deparse1()` (#3041)",
          "author_name": "Emmanuel Ferdman",
          "author_login": "emmanuel-ferdman",
          "committed_at": "2026-07-15T06:47:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cf31dcbeeb98f64bd5807b4ad30af2fb019c521",
          "body": "* Gemini initial pass\n\n* restore \"complies\" example with updated syntax\n\n* NEWS\n\n* Gemini 2nd pass addressing expect_lint->expect_no_lint change\n\n* restore specific indentation request to test\n\n* Gemini 3rd pass improving lint metadata in ambiguous cases\n\n* Small style pass\n\n* use a lookup map\n\n* Ge\n[…]\nctor to get more from lint_metadata, better naming\n\n* avoid repeated setdiff in loop\n\n* shrink diff: restore xp_multiline_string\n\n* Consistently check for terminal '.' in lint_message\n\n* tweak comment",
          "is_bot": false,
          "headline": "Update for single-indentation function definitions (#3076)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-15T06:21:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "468f9606be92171db409676b659e1c810e719de4",
          "body": "* Gemini implementation\n\n* simplify\n\n* NEWS\n\n* avoid ::: for xfun wrapper\n\n* avoid another ::: simple wrapper\n\n* another ::: avoided\n\n* file_ext is now an xfun export\n\n* another xfun export since we dont use $label\n\n* proper citation\n\n* better naming, rm unreachable\n\n* more superfluous\n\n* superfluou\n[…]\nperfluity (pt 2)\n\n* simplify tests\n\n* fix for 0-chunk files\n\n* nolint\n\n* Use vapply() not Map\n\n* Avoid double-negation\n\n* new tests for review edge cases\n\n* minimal suppression for new tests\n\n* delint",
          "is_bot": false,
          "headline": "Skip linting eval=FALSE chunks (#3072)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-14T18:22:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "262580d440e8ef1777c68638524aa72a448ba465",
          "body": "… aroud trailing newlines (#3070)\n\n* remove now-obsolete test\n\n* Revert \"remove now-obsolete test\"\n\nThis reverts commit 2cf71227881e013785097582dc45df732303bf92.\n\n* rather, use expect_no_error\n\n* warn=0 is required for this to work\n\n* delint\n\n* test exact behavior in all versions\n\n* all=TRUE required for the warning",
          "is_bot": false,
          "headline": "Amend test to work before+after r-devel change about read.dcf warning…",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-14T17:03:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4579471b57baeca4edfefbcde7495427efd2113d",
          "body": "…r already-imported symbols (#3073)\n\n* Gemini initial pass\n\n* not optional, on by default\n\n* fix existing lints\n\n* reverting towards smaller diff\n\n* complete shrinking diff, simplify+shrink tests\n\n* simplify: no need for FALSE vector\n\n* helper is just a wrapper, overkill\n\n* no effect\n\n* NULL case is already handled\n\n* another unneeded helper\n\n* style on second test\n\n* nofuzz\n\n* sub > gsub\n\nCo-authored-by: Hugo Gruson <git@hugogruson.fr>\n\n---------\n\nCo-authored-by: Hugo Gruson <git@hugogruson.fr>",
          "is_bot": false,
          "headline": "namespace_linter() extended for finding redundant '::'/':::' usage fo…",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-10T16:15:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "603ab79e6db25d380c5ee96f35ffd6ba16d223aa",
          "body": null,
          "is_bot": false,
          "headline": "catch an uncaught message() (#3071)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-07T18:01:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64df3da87d0cf9cdbb6f98f0a6f18c7c960ed37a",
          "body": "* Document difference of NA %in% x and anyNA(x)\n\n* document",
          "is_bot": false,
          "headline": "Document difference of NA %in% x and anyNA(x) (#3069)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-07T17:11:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8f1fdad8a36dea54de698994982466a56b6dc0c",
          "body": "Co-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Lint rev(sort()) calls (#3066)",
          "author_name": "Hugo Gruson",
          "author_login": "Bisaloo",
          "committed_at": "2026-07-06T15:56:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c390ae1c9ff2c3d19c3b84eab8f53f7f5bbf9e1",
          "body": "…h_linter (#3060)\n\n* gemini implementation\n\n* style\n\n* NEWS\n\n* bump xml2 version requirement",
          "is_bot": false,
          "headline": "Handle un-braced ('{') expressions in if/switch correctly in if_switc…",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-07-01T23:01:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7118190118a71346c1b16b4444caa4f307aee482",
          "body": "* custom linter for expect_no_lint\n\n* more consistency with other tests",
          "is_bot": false,
          "headline": "Custom linter for expect_no_lint (#3063)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-06-22T22:42:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f727df160447ad01dfda4af18457183e7ee65f07",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 6 to 7 (#3064)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-22T22:31:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1f1d9b3954774b6e27a4c83f8726a0b52f49dbae",
          "body": "* minimal: change : to <-\n\n* style tweaks",
          "is_bot": false,
          "headline": "Finish switch to R style config (#3062)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-06-18T22:42:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8f121e61916862d13d34b976ec08c3ba1e79c98",
          "body": null,
          "is_bot": false,
          "headline": "Rename: .lintr -> .lintr.R (#3061)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-06-18T22:38:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ea1df1b9941a14e887aba3f6f20c26fc39ad2c1",
          "body": "* perf(utils): optimize flatten_list for common cases\n\nOptimize the core flatten_list utility to bypass expensive recursive\nenvironment creation for the most common inputs:\n- Empty lists (returns list() immediately)\n- Single objects (returns list(x))\n- Flat lists of the target class (returns unname(\n[…]\neric optimization yields significant speedups across all linters,\nespecially when they return empty results.\n\nTAG=agy\nCONV=3167de05-de65-467a-876c-a7dcf1003aab\n\n* cyclocomp linter\n\n* skip maybe_unname",
          "is_bot": false,
          "headline": "Optimize flatten_list for common cases (#3051)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-06-09T20:40:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e6126ca9399a6908147a2e05d972d99f33bb374e",
          "body": "* minimal diff\n\n* back off of xml_parent() in other cases\n\n* simplify diff\n\n* xml_find_all_\n\nCo-authored-by: Michael Chirico <michaelchirico4@gmail.com>\n\n* more finagling around avoiding xml_parent\n\n* mark undesirable, allowing only by exception",
          "is_bot": false,
          "headline": "Optimize the use of xml_parent() vs. xml_find_all(\"parent::*\") (#3011)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-06-09T17:28:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b39dee4b2889f547d690f6deb8e987b255dc8be1",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6 to 7.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 6 to 7 (#3055)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-09T16:10:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "77e258eb44013351a215704ee7286939794beb93",
          "body": "* Don't lint expression(paste(., sep = \"\")) in paste_linter.\n\n* Reworked to fix a false negative.\n\n* Lint expression(paste(., sep = \"\")) differently in paste_linter.\n\n* Fix lints.\n\n* XPath style\n\n* Move example under the right section.\n\n* new tests\n\n* test refinement\n\n* add an OK example correspondi\n[…]\nseness\n\n* more test refinement\n\n* fix bad copy-paste, typo, and add more extensive vectorization test\n\n* revert NEWS\n\n* restore NEWS\n\n---------\n\nCo-authored-by: Marco Colombo <mar.colombo13@gmail.com>",
          "is_bot": false,
          "headline": "Don't lint expression(paste(., sep = \"\")) in paste_linter (#3054)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-06-04T23:21:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c3d1dc5baaba6469a1e9edd50be8419faca8ec44",
          "body": "* skip outer ! in lambda\n\n* other unary operators\n\n* fine-tune NEWS\n\n* further test cases\n\n* ! is unary\n\n* fix for functions with { or ( initially",
          "is_bot": false,
          "headline": "Ignore outer unary operators in unnecessary_lambda_linter (#3026)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-06-04T17:50:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e31244f3c4a487a02dddf6953f5532770d57edc8",
          "body": "* initial pass via Gemini\n\n* tweak name\n\n* more tests\n\n* delint\n\n* nofuzz\n\n* update lint message\n\n* nolint start/next coverage tests\n\n* also nofuzz for comments",
          "is_bot": false,
          "headline": "Don't trip over capture groups in lint(exclude=) regex (#3025)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-06-04T06:34:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e571f0b8df4e8d8aad39f935f3f39e7318e04638",
          "body": "* use static gif in CRAN README\n\n* docs: knit README.Rmd to README.md\n\n* parameterized approach\n\n* remove gif altogether\n\n* try unwrapping the lines\n\n* encode option in YAML frontmatter\n\n* shrink diff\n\n* restore\n\n* lint from tempdir for less randomness in output\n\n* improve to only show 'bad.R' filen\n[…]\n class to get the right print method\n\n* update to latest\n\n* use comment=\"\" for nicer output and knit_code$get to reduce duplication\n\n---------\n\nCo-authored-by: Hugo Gruson <hugo.gruson@protonmail.com>",
          "is_bot": false,
          "headline": "Replace .gif in README with equivalent code (#3021)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-06-03T20:52:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a6a277210338b7d2b549c560e9829394fce4c173",
          "body": "* handle unencoded raw text correctly\n\n* simplify (?)\n\n* vestigial\n\n* rm ,\n\n* coverage\n\n* tests skipped outside UTF-8 locale",
          "is_bot": false,
          "headline": "Handle unencoded raw text correctly (#3047)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-06-03T17:34:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb9550198324915ffc08fbc3d9a393216086b16a",
          "body": "* remove <<- as a default operator\n\n* other affected test files\n\n* two more files\n\n* typo: missing \"-\"",
          "is_bot": false,
          "headline": "Remove <<- from assignment_linter defaults (#3022)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-05-26T22:18:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6320c21bb3de8bb3127bc272d39d58c52bdceee",
          "body": "…calls (#3050)\n\n* force ns=empty_ns to skip xml_ns() overhead\n\n* NEWS\n\n* 30% improvement on {utils}\n\n* xml2:: for unimported name\n\n* rm unused\n\n* add linters to prevent regression\n\n* other xml imports using ns=empty_ns\n\n* feedback\n\n* import xml_missing while were at it\n\n* as_list not needed",
          "is_bot": false,
          "headline": "Supply 'ns=empty_ns' to avoid expensive xml_ns() lookup on most xml2 …",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-05-26T21:32:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f140c02e22efd674a59e8559abb8ccdd59472ce",
          "body": null,
          "is_bot": false,
          "headline": "require UTF-8 in zh_CN (#3049)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-05-20T02:38:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4db5e1a07655d08fc8a310c8322424b259bfd5d",
          "body": "Other CI failures can be addressed in other PRs",
          "is_bot": false,
          "headline": "roxygen 8.0.0 (#3048)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-05-19T23:48:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8cea9a1f5ddc42a92044248bcdc214330b2bc692",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5 to 6.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 5 to 6 (#3040)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-30T05:07:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6de7b4e16c65ea83ad27a453f42ba9a19a7b4212",
          "body": null,
          "is_bot": false,
          "headline": "add personal website link for Indrajeet Patil (#3039)",
          "author_name": "Indrajeet Patil",
          "author_login": "IndrajeetPatil",
          "committed_at": "2026-03-29T07:25:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd016a02869dcec525d516bd63654f5b14cd4b01",
          "body": "* init\n\n* remove styling change\n\n* more cases",
          "is_bot": false,
          "headline": "Fix docs where part of 'Description' ends up in 'Details'  (#3024)",
          "author_name": "Etienne Bacher",
          "author_login": "etiennebacher",
          "committed_at": "2026-03-10T14:20:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3df637d136872b56bb2489c7bd1c42bff0536c37",
          "body": "* Gather all failures in roxygen_test.R\n\n* Gather all failures in roxygen_test.R\n\n* unnest\n\n* more verbose for readability\n\n* invert logic for readability",
          "is_bot": false,
          "headline": "Gather all failures in roxygen_test.R (#3012)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-03-09T01:56:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ccad66a6e4acec6656e2299766b82ab1142f3420",
          "body": "* Fix false positive in `if_switch_linter()` for empty strings\n\nSigned-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>\n\n* Fix false positive in `if_switch_linter()` for empty strings\n\nSigned-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>\n\n* Fix false positive in `if_switch_linter()` for e\n[…]\npty strings\n\n* rename helpers\n\n* include negative cases in multi-lint test\n\n---------\n\nSigned-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>\nCo-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Fix false positive in `if_switch_linter()` for empty strings (#3018)",
          "author_name": "Emmanuel Ferdman",
          "author_login": "emmanuel-ferdman",
          "committed_at": "2026-03-02T19:36:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f185cf10fede6836d7ab07ba8816ca08de2658de",
          "body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifac\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/upload-artifact from 6 to 7 (#3019)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-02T17:08:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6afb72de7d73a805cfc7f02ba24091f178ccd983",
          "body": "* Add Emmanuel as a contributor\n\n* roxygenize",
          "is_bot": false,
          "headline": "Add Emmanuel as a contributor (#3016)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-02-24T00:28:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bbbbd2e491cd8ad37ff842ffb62b83b9c80ce188",
          "body": "…ter (#3015)\n\nSigned-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>",
          "is_bot": false,
          "headline": "Implement `call_is_undesirable` parameter in undesirable_operator_lin…",
          "author_name": "Emmanuel Ferdman",
          "author_login": "emmanuel-ferdman",
          "committed_at": "2026-02-23T16:19:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6b2834306846da0a8ed03d7f2a168574b1e0527",
          "body": "* use maybe_write_content for easier 'mocking'\n\n* initial progress\n\n* getting very close i think...\n\n* skip Rmd files\n\n* caught a live one!\n\n* need to match original file extension?\n\n* caught another one!\n\n* simpler approach, avoid rex() due to bug\n\n* also ignore warnings\n\n* finally getting somewher\n[…]\nts\n\n* expect_lint thing\n\n* another nofuzz for comments\n\n* another false positive\n\n* fix xml_find_first robustness issue\n\n* one level further up needed for three parent::expr in XPath\n\n* finish comment",
          "is_bot": false,
          "headline": "Improve the nofuzz system to allow specific exclusions (#2832)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-01-22T21:33:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "689d6fe85695e6445b5d97a01942ace859360053",
          "body": null,
          "is_bot": false,
          "headline": "combine XPath filters (#3008)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-01-22T20:59:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e1b041f1058d1d2a6ce11b499e43a398cd1e7f8",
          "body": "…)` (#3009)\n\n* init\n\n* revert unrelated style change\n\n* fix lint\n\n* fmt stuff\n\n* space, trim_some, etc.\n\n* revert tribble change\n\n* more trim_some usage\n\n---------\n\nCo-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Replace all `expect_lint(..., NULL, ...)` by `expect_no_lint(..., ...…",
          "author_name": "Etienne Bacher",
          "author_login": "etiennebacher",
          "committed_at": "2026-01-20T23:10:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f478a0048ea37f55374281cd20d536654d811d28",
          "body": "…004)\n\n* Allow scalar logic in anonymous functions within subsetting calls\n\nSigned-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>\n\n* Allow scalar logic in anonymous functions within subsetting calls\n\nSigned-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>\n\n* tweak NEWS\n\n* Allow scalar logi\n[…]\nSigned-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>\n\n* XPath style\n\n---------\n\nSigned-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>\nCo-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Allow scalar logic in anonymous functions within subsetting calls (#3…",
          "author_name": "Emmanuel Ferdman",
          "author_login": "emmanuel-ferdman",
          "committed_at": "2026-01-20T18:32:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b6ad11803f1e157997b0f88ebf6905a291a66924",
          "body": "* use maybe_write_content for easier 'mocking'\n\n* initial progress\n\n* getting very close i think...\n\n* skip Rmd files\n\n* caught a live one!\n\n* need to match original file extension?\n\n* caught another one!\n\n* simpler approach, avoid rex() due to bug\n\n* also ignore warnings\n\n* finally getting somewher\n[…]\nint in touched files\n\n* quieter by using ListReporter\n\n* tidy+comment\n\n* better tracing\n\n* missing ','\n\n* fix-up merge\n\n* more fix-up\n\n* final fix-up: delint\n\n* one comment about approach for count(*)",
          "is_bot": false,
          "headline": "Add a fifth fuzzer for '='/'<-' equivalency (#2829)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-01-17T23:58:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e1859e5c6255bdadf5acb040323f09422a76224d",
          "body": "* Add tests for is.unsorted() recommendation on identical()\n\n* Add new XPath components for identical()\n\n* Split XPaths for idential() and ==\n\n* Add NEWS item\n\n* Use expect_no_lint() for false positives\n\n* Add false positive tests for is.unsorted\n\n* Add one expression matching test\n\n* Work around comments\n\n---------\n\nCo-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Lint `identical(x, sort(x))` in `sort_linter()` (#2921)",
          "author_name": "Hugo Gruson",
          "author_login": "Bisaloo",
          "committed_at": "2026-01-14T20:07:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d64422e30b0ac615d381485aee2e5b3d878bd8f",
          "body": "* move paren_body_linter hit onto )\n\n* remove testthat:: in more places\n\n* revert chagnes b/c of new lint",
          "is_bot": false,
          "headline": "Move paren_body_linter hit onto ) (#2991)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-01-13T17:45:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f5ffc141aeb8a770e60549283051ac09c85a1fb",
          "body": "* use maybe_write_content for easier 'mocking'\n\n* initial progress\n\n* getting very close i think...\n\n* skip Rmd files\n\n* caught a live one!\n\n* need to match original file extension?\n\n* caught another one!\n\n* simpler approach, avoid rex() due to bug\n\n* also ignore warnings\n\n* finally getting somewher\n[…]\nofuzz\n\n* another one\n\n* more nofuzz in expect_lint suite\n\n* Increas max_reports to ensure more is shown in the logs\n\n* another nofuzz\n\n---------\n\nCo-authored-by: AshesITR <alexander.rosenstock@web.de>",
          "is_bot": false,
          "headline": "Add a fuzzer for injecting comments (#2899)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-01-12T18:14:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e08c3210e4af9f8c1dc7999dcc21021c5fcd31b8",
          "body": "* stopifnot -> cli_abort\n\n* obj_simple_type_name->obj_type_friendly\n\n* fix up tests for new errors\n\n* coverage tests\n\n* fix-up\n\n* apply suggestion\n\nCo-authored-by: Hugo Gruson <10783929+Bisaloo@users.noreply.github.com>\n\n* apply suggestion\n\nCo-authored-by: Hugo Gruson <10783929+Bisaloo@users.noreply\n[…]\nithub.com>\n\n* apply suggestion\n\nCo-authored-by: Hugo Gruson <10783929+Bisaloo@users.noreply.github.com>\n\n* fix tests\n\n---------\n\nCo-authored-by: Hugo Gruson <10783929+Bisaloo@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Refactor stopifnot into cli_abort (#2998)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-01-12T15:34:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0927b61a56175be8beb95bc2ab18a8ef88b6747f",
          "body": "Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.7.6 to 4.8.0.\n- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)\n- [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.7.6...v4.8.0)\n\n[…]\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Michael Chirico <michaelchirico4@gmail.com>",
          "is_bot": true,
          "headline": "Bump JamesIves/github-pages-deploy-action from 4.7.6 to 4.8.0 (#3002)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-01-12T07:32:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2066c38d29eca321a0c4fe5fb21262bc321d664c",
          "body": "Co-authored-by: Hugo Gruson <10783929+Bisaloo@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Mention writeLines() in ?print_linter (#2997)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-01-12T06:44:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6cdb2ac810a03a65c8712fe76301c5b92913148",
          "body": "* dont warn if cyclocomp is missing\n\n* revert\n\n* Delay evaluation of linter factories until modify_defaults\n\n* fix delayedAssign issue\n\n* simplify by using a helper over local()\n\n* append _ to avoid regex for linter$\n\n* add a case generating the expected warning\n\n* remove blank line\n\n* NEWS\n\n* fix mocking to get warning if cyclocomp is installed",
          "is_bot": false,
          "headline": "Delay calling linter factories until modify_defaults (#2912)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-01-08T06:46:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9957a3f11032c84a7e179070f4620188883bbf33",
          "body": null,
          "is_bot": false,
          "headline": "Delete obsolete tests/testthat/lints (#3000)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2026-01-07T23:31:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a72dfbfbd25a0547eb507d96fbf02de01bb5d3ad",
          "body": "* handle comments\n\n* ws\n\n* attempt to merge XPaths\n\n* helper not needed\n\n* helper rename of variable\n\n* Kneading tests\n\n* simpler wording fix\n\n* one more\n\n* preceding-sibling, not parent\n\n* simplify, extract to factory\n\n* comment purpose of intermediate XPath",
          "is_bot": false,
          "headline": "Handle comments in unreachable_code_linter (#2900)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-12-30T23:07:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "131ae89f31c112e77db75eebb430c058efc96d6a",
          "body": "Co-authored-by: Indrajeet Patil <patilindrajeet.science@gmail.com>",
          "is_bot": false,
          "headline": "drop escape valve (#2989)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-12-17T10:26:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "823728b5e708a47f46aa39641e7c674ceabdd8e2",
          "body": "Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.7.4 to 4.7.6.\n- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)\n- [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.7.4...v4.7.6)\n\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump JamesIves/github-pages-deploy-action from 4.7.4 to 4.7.6 (#2993)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-17T06:03:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "81a02c42063cc6f49355699f30fdd96d2cc625d8",
          "body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifac\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/upload-artifact from 5 to 6 (#2992)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-15T05:48:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7e4c9437725b8ec23a289335e2abf9c3cb288613",
          "body": null,
          "is_bot": false,
          "headline": "Use simpler apply() approach (#2990)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-12-08T07:49:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39fb754d0be6b66e7d13901448580d47c89026a0",
          "body": null,
          "is_bot": false,
          "headline": "Drop skip_if_not_r_version for skip_unless_r (#2988)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-12-07T15:01:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba88540396d7f36586cd128fe0f707815cceec23",
          "body": null,
          "is_bot": false,
          "headline": "tweak: use native lambda, don't keep source (#2984)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-12-06T13:55:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6afa5216de77579f952f688644bf9ef68d701fc",
          "body": "* Progress deprecations of function arguments\n\n* match autoformatting of \\usage\n\n* yuck\n\n* blurb about workarounds\n\n---------\n\nCo-authored-by: Hugo Gruson <10783929+Bisaloo@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Progress deprecations of function arguments (#2979)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-12-01T13:47:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "085c1a1d034a7037da2312f51ff7e5fff25dfe88",
          "body": "* Initial call site selection for |>\n\n* follow-up pass\n\n* restore",
          "is_bot": false,
          "headline": "Use native pipe |> in a few places (#2982)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-30T13:30:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6769a6e27d86adde673aec0db4ee133746b5dc5",
          "body": "* Require R 4.1.0, use shorthand lambdas\n\n* removing backports fixed this link",
          "is_bot": false,
          "headline": "Require R 4.1.0, use shorthand lambdas (#2977)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-30T06:20:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "118e7647fd263e7fa0628a3181abee5f04f435ac",
          "body": "* Delete defunct linters\n\n* remove entry for deleted file\n\n* Remove other references to lintr-deprecated",
          "is_bot": false,
          "headline": "Delete defunct linters (#2978)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-29T17:15:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb43341f3257c4617e0166abc800134b8c23ccf7",
          "body": null,
          "is_bot": false,
          "headline": "bump to devel",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-27T15:16:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58a5c4431702e3ecea75197d38ca7e125358894b",
          "body": "commit d66d4c591398165d66fcf09962da12c6cfb89203\nAuthor: Michael Chirico <chiricom@google.com>\nDate:   Wed Nov 26 15:36:53 2025 +0000\n\n    3.3.0-1 -- downgrade to warning\n\ncommit c03d46605b2f248defebb5d3127ff0ade1d551bf\nAuthor: Michael Chirico <chiricom@google.com>\nDate:   Tue Nov 25 20:25:12 2025 +0\n[…]\n5:18:08 2025 +0000\n\n    NEWS version\n\ncommit 15022a814ee04ea3834c1953def4bcdb1f3d12ee\nAuthor: Michael Chirico <chiricom@google.com>\nDate:   Tue Nov 25 15:16:40 2025 +0000\n\n    bump DESCRIPTION version",
          "is_bot": false,
          "headline": "Squashed commit of the following:",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-27T15:14:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "564bd57bd8236d28cdf109174fa9c48e7b919557",
          "body": "This reverts commit ff97a388ad42e5869ec53a2e3720f66dc83157af.",
          "is_bot": false,
          "headline": "Revert \"re-generate docs from roxygen2 (#2973)\" (#2974)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-25T16:49:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff97a388ad42e5869ec53a2e3720f66dc83157af",
          "body": null,
          "is_bot": false,
          "headline": "re-generate docs from roxygen2 (#2973)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-25T16:38:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37d533b515ac50654cd6ea369ae6d0c2d7e8b963",
          "body": null,
          "is_bot": false,
          "headline": "set repos permanently (#2971)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-25T15:37:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a26331bbfff52a568cb273327856d7ca8dcfa190",
          "body": "* lint(text=) finds local settings again\n\n* Add a comment\n\n* Annotate issue # too\n\n* explicitly disable cyclocomp_linter under \"hard mode\"\n\n* also need explicit parse_settings=FALSE in cyclocomp test\n\n* More explicit parse_settings=FALSE\n\n* must parse .Rproj settings\n\n* revert config edit\n\n* revert\n\n[…]\nn <10783929+Bisaloo@users.noreply.github.com>\n\n* inline\n\n* rm off-kilter Emacs reference\n\n* logic in formals instead\n\n---------\n\nCo-authored-by: Hugo Gruson <10783929+Bisaloo@users.noreply.github.com>",
          "is_bot": false,
          "headline": "lint(text=) finds local settings again (#2863)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-25T14:42:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eec3d4177f7f37651d01809c84e47e22b78f4652",
          "body": "…969)\n\n* Revert \"brace_linter() covers test_that() without braces (#2808)\"\n\nThis reverts commit b9c4205cfb178af8cd8aa5a432cc1696262c2905.\n\n* restore nufuzz end\n\n* remove NEWS too",
          "is_bot": false,
          "headline": "Revert \"brace_linter() covers test_that() without braces (#2808)\" (#2…",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-25T03:56:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20404c2f847040875facf24b35bca1c606e8e276",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v5...v6)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 5 to 6 (#2970)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-25T02:52:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "367db02fdf7a974d797a1c42335261adee23d702",
          "body": "* logic to make linters robust to adversarial comments\n\n* remove those under #2827\n\n* more in sync with #2827 in/out rule\n\n* need known_safe\n\n* delint\n\n* add a comment\n\n* spurious ws\n\n* review feedback\n\n* update / improve comment about needs_braces=TRUE\n\n* bad merge: needs to be following-sibling",
          "is_bot": false,
          "headline": "Logic to make linters robust to adversarial comments (#2901)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-19T15:38:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e67713de922675d77a62d71280de79a449ab1ad6",
          "body": "* further normalization of expect_lint\n\n* rm vestigial ws\n\n* caller_env is from rlang",
          "is_bot": false,
          "headline": "Further normalization of expect_lint (#2967)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-18T18:34:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "132a6dd48353fd135706ef44ec7b45df8ea5cdc2",
          "body": null,
          "is_bot": false,
          "headline": "fix for testthat 3.3.0 (#2966)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-16T06:25:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "252b4f40358ee96046529d89d02ee84100d28017",
          "body": "…2799)\n\n* ignore string contents optionally\n\n* expect_no_lint\n\n* test with no string input\n\n* revert as.integer()\n\n* more tests against off-by-one issue\n\n* typo: with->width\n\n* try simpler version\n\nCo-authored-by: Hugo Gruson <10783929+Bisaloo@users.noreply.github.com>\n\n* Revert \"try simpler version\n[…]\nverts commit b7ff1e31ecd8642913c4b3dd4c519416ee1f9240.\n\n* new test\n\n* example\n\n* another example of an inline string\n\n---------\n\nCo-authored-by: Hugo Gruson <10783929+Bisaloo@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Ignore multi-line string contents optionally in line_length_linter (#…",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-11-11T15:27:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "57ced9c2d802e63430a251d430423fe11592177e",
          "body": "Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.7.3 to 4.7.4.\n- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)\n- [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.7.3...v4.7.4)\n\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump JamesIves/github-pages-deploy-action from 4.7.3 to 4.7.4 (#2965)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-10T09:00:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "81eba81f1744c2107c66c2fd3e2afed6e4e6ad06",
          "body": "* Fix `package_hooks_linter` to validate `.onUnload()` arguments\n\nSigned-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>\n\n* more generic wording for test title\n\n* extraneous test\n\n* extraneous test\n\n* vestigial whitespace\n\n* use 'teardown' again\n\n* use expect_no_lint for unrelated tests too\n\n---------\n\nSigned-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>\nCo-authored-by: Michael Chirico <michaelchirico4@gmail.com>\nCo-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Fix `package_hooks_linter` to validate `.onUnload()` arguments (#2964)",
          "author_name": "Emmanuel Ferdman",
          "author_login": "emmanuel-ferdman",
          "committed_at": "2025-11-03T18:23:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec332f1bddab45bc763bffb046c6fb337def9fa0",
          "body": "Co-authored-by: Hugo Gruson <10783929+Bisaloo@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix duplicate entry for undesirable operators (#2961)",
          "author_name": "clerousset",
          "author_login": "clerousset",
          "committed_at": "2025-11-01T11:47:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6ac90b98a8b8f9817182d7ce9c08a491252e08f",
          "body": "* feat: argument to disable linting of ( for auto-printing\n\ncloses r-lib#2916\n\nsupersedes r-lib#2919\n\n* update NEWS\n\n* tweak argument description",
          "is_bot": false,
          "headline": "feat: argument to disable linting of `(` for auto-printing (#2962)",
          "author_name": "Tim Taylor",
          "author_login": "TimTaylor",
          "committed_at": "2025-10-29T17:01:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65229d888910108efd03504b00eed11440938776",
          "body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v4...v5)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifac\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/upload-artifact from 4 to 5 (#2959)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-10-28T21:37:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "23ebb17f8c95b5ec4f21e0ea86a6190446037558",
          "body": "…2958)",
          "is_bot": false,
          "headline": "Note potential danger if argument can be NA in scalar_in_linter(). (#…",
          "author_name": "Marco Colombo",
          "author_login": "mcol",
          "committed_at": "2025-10-22T20:34:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "975c916b6e5d0dfeb85b1a93db85f322dab88ca8",
          "body": "* Make the message from cyclocomp_linter() more actionable.\n\n* Revert output changes.\n\n---------\n\nCo-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Make the message from cyclocomp_linter() more actionable (#2953)",
          "author_name": "Marco Colombo",
          "author_login": "mcol",
          "committed_at": "2025-10-20T18:37:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eaf3aae2c08b8c85d2ad163939409e2c9c39463a",
          "body": null,
          "is_bot": false,
          "headline": "Remove duplicated condition from paren_body_linter(). (#2954)",
          "author_name": "Marco Colombo",
          "author_login": "mcol",
          "committed_at": "2025-10-20T06:59:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27a959dc4ff9b87aced19e0adf0ecd8896c4e853",
          "body": "* Lint nrow, ncol, NROW and NCOL with logical expressions.\n\n* Address review comments.\n\n* Fix indentation.\n\n* tidy up tests\n\n---------\n\nCo-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Lint nrow, ncol, NROW and NCOL with logical expressions (#2952)",
          "author_name": "Marco Colombo",
          "author_login": "mcol",
          "committed_at": "2025-10-17T22:27:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aff43f12390b9a093652585ba9d79e695e55bec8",
          "body": "Co-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Use expect_no_lint() instead of expect_lint(., NULL). (#2950)",
          "author_name": "Marco Colombo",
          "author_login": "mcol",
          "committed_at": "2025-10-17T17:29:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae6b6a766383f37da915f38fc3a7d36bfb309673",
          "body": null,
          "is_bot": false,
          "headline": "init (#2948)",
          "author_name": "Etienne Bacher",
          "author_login": "etiennebacher",
          "committed_at": "2025-10-17T14:34:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "552668b6706f5d4151955265ad9e46f953aae7a8",
          "body": "* Don't lint T and F if followed by `[`.\n\n* Address review comments.\n\n* subsume into same expr[] as $ and @\n\n---------\n\nCo-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Don't lint T and F if followed by `[` (#2947)",
          "author_name": "Marco Colombo",
          "author_login": "mcol",
          "committed_at": "2025-10-16T20:34:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77f0dae6f580eeab8a53f5375d8ab3b783169500",
          "body": null,
          "is_bot": false,
          "headline": "Report a helpful error if linters_with_tags() specifies no tags. (#2942)",
          "author_name": "Marco Colombo",
          "author_login": "mcol",
          "committed_at": "2025-10-16T16:47:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ecf0c5885a27a4cf766e7926bba133fbfeb9de1",
          "body": null,
          "is_bot": false,
          "headline": "clarify reasoning for repeat{} vs. while(TRUE){}",
          "author_name": "Etienne Bacher",
          "author_login": "etiennebacher",
          "committed_at": "2025-10-15T22:30:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eba33997dbcdf6651f82743d58d0d74a88b935dc",
          "body": "* Partial fix for upcoming testthat release\n\n`expect_success()` and `expect_failure()` now test that you have exactly one success/failure and zero failures/successes. I can't quite figure out why the tests are still failing here; maybe it's something to do with recycling? I'm happy to help but I unf\n[…]\n CRAN on Nov 10.\n\n* simple delint\n\n* extract to helper for cyclo complexity\n\n* avoid testthat::expect() again\n\n* fail() needs return()\n\n---------\n\nCo-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Partial fix for upcoming testthat release (#2937)",
          "author_name": "Hadley Wickham",
          "author_login": "hadley",
          "committed_at": "2025-10-08T16:36:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "275ed7dcd109eea7349ecd58fe90f447e1a48b4f",
          "body": "* Fix false positive for null coalescing without else clause\n\nSigned-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>\n\n* cite in NEWS\n\n---------\n\nSigned-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>\nCo-authored-by: Michael Chirico <chiricom@google.com>",
          "is_bot": false,
          "headline": "Fix false positive for null coalescing without else clause (#2938)",
          "author_name": "Emmanuel Ferdman",
          "author_login": "emmanuel-ferdman",
          "committed_at": "2025-10-07T04:38:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b70b522191e153a1ee47e87e1d3fa90022285dd",
          "body": "* Use base:: qualification to avoid linking backports in roxygen2\n\n* continuing...\n\n* stopifnot\n\n* stopifnot, again\n\n* try a regex approach\n\n* use roxygen2 7.3.3\n\n* remove TODO",
          "is_bot": false,
          "headline": "Update roxygen2 to 7.3.3 (#2930)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-09-16T20:34:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0cab403fc917f0cc8db315582ea015d6e8668562",
          "body": null,
          "is_bot": false,
          "headline": "Skip quarto installation in CI (#2928)",
          "author_name": "Michael Chirico",
          "author_login": "MichaelChirico",
          "committed_at": "2025-09-16T13:05:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33efecf7f4aee58fbc9d4f2e1f3fda5ae908ed42",
          "body": null,
          "is_bot": false,
          "headline": "Add .lintr to .Rbuildignore in use_lintr() (#2926)",
          "author_name": "Hugo Gruson",
          "author_login": "Bisaloo",
          "committed_at": "2025-08-25T09:21:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcb12d2656bfcf29f45b2326fe078aea673689fb",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v5)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 4 to 5 (#2925)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-08-18T17:34:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1939058487c6e4b25353c3f8d51298029d8042bd",
          "body": null,
          "is_bot": false,
          "headline": "Removed sentenced about vectorized path argumented in lint_dir() (#2924)",
          "author_name": "Steve Martin",
          "author_login": "marberts",
          "committed_at": "2025-08-07T18:16:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 17,
      "commits_last_year": 113,
      "latest_release_at": "2026-07-16T04:57:25Z",
      "latest_release_tag": "v3.4.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 35,
      "days_since_latest_release": 7,
      "mean_days_between_releases": 227.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 200,
      "stars": 1288,
      "watchers": 19,
      "fork_history": {
        "days": [
          {
            "date": "2014-09-28",
            "count": 1
          },
          {
            "date": "2015-01-04",
            "count": 1
          },
          {
            "date": "2015-01-23",
            "count": 1
          },
          {
            "date": "2015-02-04",
            "count": 2
          },
          {
            "date": "2015-02-06",
            "count": 1
          },
          {
            "date": "2015-03-06",
            "count": 1
          },
          {
            "date": "2015-03-09",
            "count": 1
          },
          {
            "date": "2015-03-31",
            "count": 1
          },
          {
            "date": "2015-05-04",
            "count": 1
          },
          {
            "date": "2015-05-16",
            "count": 1
          },
          {
            "date": "2015-05-18",
            "count": 1
          },
          {
            "date": "2015-09-09",
            "count": 1
          },
          {
            "date": "2015-10-20",
            "count": 1
          },
          {
            "date": "2015-10-21",
            "count": 1
          },
          {
            "date": "2015-10-27",
            "count": 1
          },
          {
            "date": "2015-12-29",
            "count": 1
          },
          {
            "date": "2016-02-24",
            "count": 1
          },
          {
            "date": "2016-03-15",
            "count": 1
          },
          {
            "date": "2016-03-16",
            "count": 1
          },
          {
            "date": "2016-04-13",
            "count": 1
          },
          {
            "date": "2016-05-06",
            "count": 1
          },
          {
            "date": "2016-05-20",
            "count": 1
          },
          {
            "date": "2016-05-23",
            "count": 1
          },
          {
            "date": "2016-07-19",
            "count": 1
          },
          {
            "date": "2016-08-09",
            "count": 1
          },
          {
            "date": "2016-09-08",
            "count": 1
          },
          {
            "date": "2016-10-17",
            "count": 1
          },
          {
            "date": "2016-11-06",
            "count": 1
          },
          {
            "date": "2016-11-08",
            "count": 1
          },
          {
            "date": "2017-01-08",
            "count": 1
          },
          {
            "date": "2017-01-13",
            "count": 1
          },
          {
            "date": "2017-02-02",
            "count": 1
          },
          {
            "date": "2017-02-14",
            "count": 1
          },
          {
            "date": "2017-03-06",
            "count": 1
          },
          {
            "date": "2017-03-26",
            "count": 1
          },
          {
            "date": "2017-04-19",
            "count": 1
          },
          {
            "date": "2017-05-08",
            "count": 1
          },
          {
            "date": "2017-05-17",
            "count": 1
          },
          {
            "date": "2017-05-24",
            "count": 1
          },
          {
            "date": "2017-06-18",
            "count": 1
          },
          {
            "date": "2017-06-30",
            "count": 1
          },
          {
            "date": "2017-07-03",
            "count": 1
          },
          {
            "date": "2017-07-13",
            "count": 1
          },
          {
            "date": "2017-08-18",
            "count": 1
          },
          {
            "date": "2017-09-01",
            "count": 1
          },
          {
            "date": "2017-09-05",
            "count": 1
          },
          {
            "date": "2017-09-12",
            "count": 1
          },
          {
            "date": "2017-09-22",
            "count": 1
          },
          {
            "date": "2017-10-16",
            "count": 1
          },
          {
            "date": "2017-11-26",
            "count": 1
          },
          {
            "date": "2017-12-05",
            "count": 1
          },
          {
            "date": "2017-12-15",
            "count": 1
          },
          {
            "date": "2017-12-21",
            "count": 1
          },
          {
            "date": "2018-01-08",
            "count": 1
          },
          {
            "date": "2018-02-08",
            "count": 1
          },
          {
            "date": "2018-02-14",
            "count": 1
          },
          {
            "date": "2018-02-22",
            "count": 2
          },
          {
            "date": "2018-02-23",
            "count": 1
          },
          {
            "date": "2018-03-12",
            "count": 1
          },
          {
            "date": "2018-04-08",
            "count": 1
          },
          {
            "date": "2018-05-17",
            "count": 1
          },
          {
            "date": "2018-05-19",
            "count": 1
          },
          {
            "date": "2018-06-02",
            "count": 1
          },
          {
            "date": "2018-06-07",
            "count": 1
          },
          {
            "date": "2018-06-12",
            "count": 1
          },
          {
            "date": "2018-06-19",
            "count": 1
          },
          {
            "date": "2018-06-21",
            "count": 1
          },
          {
            "date": "2018-07-25",
            "count": 1
          },
          {
            "date": "2018-08-13",
            "count": 1
          },
          {
            "date": "2018-08-21",
            "count": 1
          },
          {
            "date": "2018-09-18",
            "count": 1
          },
          {
            "date": "2018-09-27",
            "count": 1
          },
          {
            "date": "2018-12-18",
            "count": 1
          },
          {
            "date": "2019-01-15",
            "count": 1
          },
          {
            "date": "2019-01-19",
            "count": 1
          },
          {
            "date": "2019-01-24",
            "count": 1
          },
          {
            "date": "2019-01-30",
            "count": 1
          },
          {
            "date": "2019-03-12",
            "count": 1
          },
          {
            "date": "2019-04-23",
            "count": 1
          },
          {
            "date": "2019-05-22",
            "count": 1
          },
          {
            "date": "2019-06-02",
            "count": 1
          },
          {
            "date": "2019-06-03",
            "count": 1
          },
          {
            "date": "2019-06-08",
            "count": 1
          },
          {
            "date": "2019-06-27",
            "count": 1
          },
          {
            "date": "2019-07-01",
            "count": 1
          },
          {
            "date": "2019-08-09",
            "count": 1
          },
          {
            "date": "2019-08-31",
            "count": 1
          },
          {
            "date": "2019-09-20",
            "count": 1
          },
          {
            "date": "2019-10-09",
            "count": 1
          },
          {
            "date": "2019-10-19",
            "count": 1
          },
          {
            "date": "2019-10-21",
            "count": 1
          },
          {
            "date": "2019-11-04",
            "count": 1
          },
          {
            "date": "2019-11-18",
            "count": 1
          },
          {
            "date": "2019-12-11",
            "count": 1
          },
          {
            "date": "2019-12-29",
            "count": 1
          },
          {
            "date": "2020-02-04",
            "count": 1
          },
          {
            "date": "2020-02-11",
            "count": 1
          },
          {
            "date": "2020-02-13",
            "count": 1
          },
          {
            "date": "2020-02-20",
            "count": 1
          },
          {
            "date": "2020-02-21",
            "count": 1
          },
          {
            "date": "2020-02-24",
            "count": 1
          },
          {
            "date": "2020-02-25",
            "count": 1
          },
          {
            "date": "2020-03-06",
            "count": 1
          },
          {
            "date": "2020-03-18",
            "count": 2
          },
          {
            "date": "2020-04-30",
            "count": 1
          },
          {
            "date": "2020-05-11",
            "count": 1
          },
          {
            "date": "2020-05-22",
            "count": 1
          },
          {
            "date": "2020-06-05",
            "count": 1
          },
          {
            "date": "2020-06-15",
            "count": 1
          },
          {
            "date": "2020-06-20",
            "count": 1
          },
          {
            "date": "2020-08-18",
            "count": 1
          },
          {
            "date": "2020-09-03",
            "count": 1
          },
          {
            "date": "2020-09-22",
            "count": 1
          },
          {
            "date": "2020-10-08",
            "count": 1
          },
          {
            "date": "2020-10-21",
            "count": 1
          },
          {
            "date": "2020-11-22",
            "count": 1
          },
          {
            "date": "2020-12-27",
            "count": 1
          },
          {
            "date": "2020-12-30",
            "count": 1
          },
          {
            "date": "2021-03-14",
            "count": 1
          },
          {
            "date": "2021-03-16",
            "count": 2
          },
          {
            "date": "2021-03-31",
            "count": 1
          },
          {
            "date": "2021-04-07",
            "count": 1
          },
          {
            "date": "2021-04-11",
            "count": 1
          },
          {
            "date": "2021-04-30",
            "count": 1
          },
          {
            "date": "2021-05-08",
            "count": 1
          },
          {
            "date": "2021-05-10",
            "count": 1
          },
          {
            "date": "2021-05-13",
            "count": 1
          },
          {
            "date": "2021-06-08",
            "count": 1
          },
          {
            "date": "2021-06-26",
            "count": 1
          },
          {
            "date": "2021-07-19",
            "count": 1
          },
          {
            "date": "2021-08-16",
            "count": 1
          },
          {
            "date": "2021-09-21",
            "count": 1
          },
          {
            "date": "2021-09-27",
            "count": 1
          },
          {
            "date": "2021-12-27",
            "count": 1
          },
          {
            "date": "2022-01-01",
            "count": 1
          },
          {
            "date": "2022-03-02",
            "count": 1
          },
          {
            "date": "2022-03-21",
            "count": 1
          },
          {
            "date": "2022-03-23",
            "count": 1
          },
          {
            "date": "2022-03-29",
            "count": 1
          },
          {
            "date": "2022-05-10",
            "count": 1
          },
          {
            "date": "2022-05-31",
            "count": 1
          },
          {
            "date": "2022-06-02",
            "count": 1
          },
          {
            "date": "2022-06-19",
            "count": 1
          },
          {
            "date": "2022-07-21",
            "count": 1
          },
          {
            "date": "2022-08-07",
            "count": 1
          },
          {
            "date": "2022-08-25",
            "count": 1
          },
          {
            "date": "2022-10-20",
            "count": 1
          },
          {
            "date": "2022-10-28",
            "count": 1
          },
          {
            "date": "2022-11-26",
            "count": 1
          },
          {
            "date": "2022-12-11",
            "count": 1
          },
          {
            "date": "2022-12-18",
            "count": 1
          },
          {
            "date": "2022-12-22",
            "count": 1
          },
          {
            "date": "2023-04-04",
            "count": 1
          },
          {
            "date": "2023-04-06",
            "count": 1
          },
          {
            "date": "2023-05-06",
            "count": 1
          },
          {
            "date": "2023-05-31",
            "count": 1
          },
          {
            "date": "2023-07-05",
            "count": 1
          },
          {
            "date": "2023-07-24",
            "count": 1
          },
          {
            "date": "2023-07-27",
            "count": 1
          },
          {
            "date": "2023-07-28",
            "count": 1
          },
          {
            "date": "2023-08-24",
            "count": 1
          },
          {
            "date": "2023-09-04",
            "count": 1
          },
          {
            "date": "2023-10-15",
            "count": 1
          },
          {
            "date": "2023-12-09",
            "count": 1
          },
          {
            "date": "2023-12-18",
            "count": 1
          },
          {
            "date": "2023-12-23",
            "count": 1
          },
          {
            "date": "2024-01-11",
            "count": 1
          },
          {
            "date": "2024-02-21",
            "count": 1
          },
          {
            "date": "2024-03-26",
            "count": 1
          },
          {
            "date": "2024-05-23",
            "count": 1
          },
          {
            "date": "2024-07-29",
            "count": 1
          },
          {
            "date": "2024-08-01",
            "count": 1
          },
          {
            "date": "2024-09-30",
            "count": 1
          },
          {
            "date": "2024-10-18",
            "count": 1
          },
          {
            "date": "2024-11-07",
            "count": 1
          },
          {
            "date": "2025-03-14",
            "count": 1
          },
          {
            "date": "2025-04-19",
            "count": 1
          },
          {
            "date": "2025-06-07",
            "count": 1
          },
          {
            "date": "2025-06-28",
            "count": 1
          },
          {
            "date": "2025-07-31",
            "count": 1
          },
          {
            "date": "2025-08-03",
            "count": 1
          },
          {
            "date": "2025-08-04",
            "count": 1
          },
          {
            "date": "2025-08-07",
            "count": 1
          },
          {
            "date": "2025-08-26",
            "count": 1
          },
          {
            "date": "2025-10-16",
            "count": 2
          },
          {
            "date": "2025-10-28",
            "count": 1
          },
          {
            "date": "2025-12-02",
            "count": 1
          },
          {
            "date": "2026-02-26",
            "count": 1
          },
          {
            "date": "2026-02-27",
            "count": 1
          },
          {
            "date": "2026-03-21",
            "count": 1
          },
          {
            "date": "2026-06-17",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 198,
        "total_forks": 200
      },
      "star_history": null,
      "open_issues_and_prs": 304
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "example"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": true,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": null,
      "source_files_sampled": 0,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "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": 11,
        "merged_prs": 1382,
        "open_issues": 293,
        "closed_ratio": 0.813,
        "closed_issues": 1274,
        "closed_unmerged_prs": 135
      },
      "bus_factor": 2,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "MichaelChirico",
          "commits": 766,
          "avatar_url": "https://avatars.githubusercontent.com/u/7606389?v=4"
        },
        {
          "type": "User",
          "login": "jimhester",
          "commits": 432,
          "avatar_url": "https://avatars.githubusercontent.com/u/205275?v=4"
        },
        {
          "type": "User",
          "login": "AshesITR",
          "commits": 325,
          "avatar_url": "https://avatars.githubusercontent.com/u/2363178?v=4"
        },
        {
          "type": "User",
          "login": "IndrajeetPatil",
          "commits": 229,
          "avatar_url": "https://avatars.githubusercontent.com/u/11330453?v=4"
        },
        {
          "type": "User",
          "login": "fangly",
          "commits": 58,
          "avatar_url": "https://avatars.githubusercontent.com/u/231905?v=4"
        },
        {
          "type": "User",
          "login": "renkun-ken",
          "commits": 52,
          "avatar_url": "https://avatars.githubusercontent.com/u/4662568?v=4"
        },
        {
          "type": "User",
          "login": "russHyde",
          "commits": 33,
          "avatar_url": "https://avatars.githubusercontent.com/u/7734886?v=4"
        },
        {
          "type": "User",
          "login": "Bisaloo",
          "commits": 23,
          "avatar_url": "https://avatars.githubusercontent.com/u/10783929?v=4"
        },
        {
          "type": "User",
          "login": "dragosmg",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/13176361?v=4"
        },
        {
          "type": "User",
          "login": "gaborcsardi",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/660288?v=4"
        }
      ],
      "contributors_sampled": 99,
      "top_contributor_share": 0.36
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "R-CMD-check-hard.yaml",
        "R-CMD-check.yaml",
        "ast-fuzz.yaml",
        "check-all-examples.yaml",
        "lint.yaml",
        "pkgdown.yaml",
        "repo-meta-tests.yaml",
        "test-coverage-examples.yaml",
        "test-coverage.yaml",
        "test-package-vigilant.yaml"
      ],
      "has_docs_dir": false,
      "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": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "27 out of 27 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": 3,
            "reason": "Found 10/28 approved changesets -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 42 contributing companies or organizations",
            "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": 9,
            "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 20 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 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": "199d40a3ea79833318faadb72e0a527e5b6ad8a4",
        "ran_at": "2026-07-23T16:09:40Z",
        "aggregate_score": 5.8,
        "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-21T05:56:15Z",
      "oldest_open_prs": [
        {
          "number": 2449,
          "created_at": "2023-12-15T06:53:02Z",
          "last_comment_at": "2023-12-16T17:03:54Z",
          "last_comment_author": "AshesITR"
        },
        {
          "number": 2621,
          "created_at": "2024-06-22T12:54:28Z",
          "last_comment_at": "2026-07-06T14:52:08Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 2907,
          "created_at": "2025-07-30T12:43:08Z",
          "last_comment_at": "2026-07-06T14:38:38Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 3017,
          "created_at": "2026-02-26T12:09:14Z",
          "last_comment_at": "2026-07-06T14:39:10Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 3052,
          "created_at": "2026-05-27T14:36:54Z",
          "last_comment_at": "2026-05-27T14:40:45Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 3056,
          "created_at": "2026-06-09T10:19:16Z",
          "last_comment_at": "2026-07-06T14:39:22Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 3088,
          "created_at": "2026-07-19T06:05:54Z",
          "last_comment_at": "2026-07-19T06:09:16Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 3090,
          "created_at": "2026-07-20T17:10:09Z",
          "last_comment_at": "2026-07-20T17:28:01Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 3092,
          "created_at": "2026-07-20T22:01:01Z",
          "last_comment_at": "2026-07-20T22:04:35Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 3093,
          "created_at": "2026-07-21T05:49:47Z",
          "last_comment_at": "2026-07-21T05:53:53Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 3095,
          "created_at": "2026-07-23T00:05:43Z",
          "last_comment_at": "2026-07-23T00:09:26Z",
          "last_comment_author": "codecov"
        }
      ],
      "last_merged_pr_at": "2026-07-21T05:51:23Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 104,
          "created_at": "2015-07-24T04:51:58Z",
          "last_comment_at": "2023-11-14T23:36:40Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 131,
          "created_at": "2016-01-05T14:58:03Z",
          "last_comment_at": "2023-08-11T02:50:00Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 265,
          "created_at": "2017-09-11T15:38:12Z",
          "last_comment_at": "2023-08-11T02:52:53Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 295,
          "created_at": "2018-02-19T15:04:42Z",
          "last_comment_at": "2022-06-19T14:39:54Z",
          "last_comment_author": "AshesITR"
        },
        {
          "number": 383,
          "created_at": "2019-05-05T16:18:31Z",
          "last_comment_at": "2021-10-04T17:45:10Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 436,
          "created_at": "2019-12-12T13:28:37Z",
          "last_comment_at": "2022-06-19T15:26:46Z",
          "last_comment_author": "AshesITR"
        },
        {
          "number": 454,
          "created_at": "2020-02-04T16:10:48Z",
          "last_comment_at": "2025-02-24T22:28:06Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 459,
          "created_at": "2020-02-20T08:20:20Z",
          "last_comment_at": "2025-02-20T20:47:54Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 468,
          "created_at": "2020-03-16T13:57:42Z",
          "last_comment_at": "2024-01-19T08:44:24Z",
          "last_comment_author": "ssh352"
        },
        {
          "number": 485,
          "created_at": "2020-04-26T09:46:00Z",
          "last_comment_at": "2022-06-19T16:44:28Z",
          "last_comment_author": "AshesITR"
        },
        {
          "number": 504,
          "created_at": "2020-06-30T10:17:32Z",
          "last_comment_at": "2024-04-02T05:09:35Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 512,
          "created_at": "2020-08-19T09:21:45Z",
          "last_comment_at": "2022-09-24T15:50:24Z",
          "last_comment_author": "IndrajeetPatil"
        },
        {
          "number": 577,
          "created_at": "2020-11-23T00:54:45Z",
          "last_comment_at": "2023-09-11T22:09:30Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 580,
          "created_at": "2020-11-23T12:26:37Z",
          "last_comment_at": "2020-12-03T13:16:53Z",
          "last_comment_author": "AshesITR"
        },
        {
          "number": 690,
          "created_at": "2020-12-06T18:07:05Z",
          "last_comment_at": "2021-01-31T22:12:08Z",
          "last_comment_author": "AshesITR"
        },
        {
          "number": 741,
          "created_at": "2021-02-08T18:42:43Z",
          "last_comment_at": "2022-10-04T16:02:01Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 764,
          "created_at": "2021-02-17T22:55:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 773,
          "created_at": "2021-03-05T03:42:08Z",
          "last_comment_at": "2024-10-05T14:58:10Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 784,
          "created_at": "2021-03-21T03:07:29Z",
          "last_comment_at": "2021-04-04T06:16:48Z",
          "last_comment_author": "MichaelChirico"
        },
        {
          "number": 797,
          "created_at": "2021-05-10T06:05:01Z",
          "last_comment_at": "2021-06-10T13:31:09Z",
          "last_comment_author": "jimhester"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/r-lib/lintr",
    "host": "github.com",
    "name": "lintr",
    "owner": "r-lib"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 73,
      "inputs": {
        "security": 58,
        "vitality": 86,
        "community": 78,
        "governance": 71,
        "engineering": 71
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 86,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 88,
            "inputs": {
              "commits_last_year": 113,
              "human_commit_share": 0.89,
              "days_since_last_push": 0,
              "active_weeks_last_year": 35
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "35/52 weeks with commits",
                "points": 24.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 35
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "113 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 113
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "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": 84,
            "inputs": {
              "releases_count": 17,
              "latest_release_tag": "v3.4.0",
              "releases_from_tags": false,
              "days_since_latest_release": 7,
              "mean_days_between_releases": 227.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "17 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 17
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 7 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~227.6 days",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 227.6
                    }
                  }
                ],
                "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": 2,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 2 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 78,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "good",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "forks": 200,
              "stars": 1288,
              "watchers": 19,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1,288 stars",
                "points": 50.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1288
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "200 forks",
                "points": 19.2,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 200
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "19 watchers",
                "points": 7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "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": "license file present, not a recognized license",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "license_custom",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 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": "good",
        "name": "Sustainability & Governance",
        "value": 71,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "moderate",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "bus_factor": 2,
              "contributors_sampled": 99,
              "top_contributor_share": 0.36
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "2 contributor(s) cover half of all commits",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 36% of commits",
                "points": 14.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 36
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "99 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 99
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 42 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "merged_prs": 1382,
              "open_issues": 293,
              "closed_issues": 1274,
              "issue_closed_ratio": 0.813,
              "closed_unmerged_prs": 135
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "81% of issues closed",
                "points": 38,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 81
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1382/1517 decided PRs merged",
                "points": 34.8,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1382,
                      "decided": 1517
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 10/28 approved changesets -- score normalized to 3",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "followers": 748,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "r-lib",
              "public_repos": 165,
              "account_age_days": 3579
            },
            "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": "748 followers of r-lib",
                "points": 20.7,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 748,
                      "login": "r-lib"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "165 public repos, account ~9 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 165
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 9
                    }
                  }
                ],
                "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": 71,
        "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": "10 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "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": "27 out of 27 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "linter",
                "r"
              ],
              "has_wiki": true,
              "homepage": "https://lintr.r-lib.org",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://lintr.r-lib.org",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "2 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": 58,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 58,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 5.8
            },
            "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": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "27 out of 27 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 10/28 approved changesets -- score normalized to 3",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 42 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file 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": 11
            },
            "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": "at_risk",
        "name": "AI Readiness",
        "value": 34,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.933,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "83 of 89 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 83,
                      "sampled": 89
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": true,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.11
            },
            "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "devcontainer, Dockerfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "devcontainer, Dockerfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "11 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 11,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "critical",
            "name": "Code legibility for models",
            "note": "Excluded from scoring (no data or not applicable): Manageable file sizes. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "manageable_file_sizes"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "primary_language": "R",
              "largest_source_bytes": null,
              "source_files_sampled": 0,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "R without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "R"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "no source files detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_source_files",
                    "params": {}
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "example"
              ],
              "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": "example",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "example"
                    }
                  }
                ],
                "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-23T16:10:11.290636Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/r/r-lib/lintr.svg",
  "full_name": "r-lib/lintr",
  "license_state": "custom",
  "license_spdx": null
}

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.